Documentation
¶
Index ¶
- Variables
- func HasNormativeSection(idx *knowledge.Index, skill knowledge.Skill) (bool, error)
- func LintSections(idx *knowledge.Index) []string
- type Renderer
- func (r *Renderer) Render(idx *knowledge.Index, skill knowledge.Skill) (string, error)
- func (r *Renderer) RenderCursorRouter(idx *knowledge.Index, installed []string) (string, error)
- func (r *Renderer) RenderCursorRule(idx *knowledge.Index, skill knowledge.Skill) (string, error)
- func (r *Renderer) RenderRouter(idx *knowledge.Index, installed []string) (string, error)
- func (r *Renderer) RenderSkill(idx *knowledge.Index, skill knowledge.Skill, installed []string) (string, error)
- func (r *Renderer) RenderSkillCursor(idx *knowledge.Index, skill knowledge.Skill, installed []string) (string, error)
- func (r *Renderer) RenderWorkflow(idx *knowledge.Index, wf knowledge.Workflow) (string, error)
Constants ¶
This section is empty.
Variables ¶
var ErrUnknownComposition = errors.New("unknown composition")
ErrUnknownComposition marks the one mergeSources failure that is NOT a defect in a body: a skill naming a rule or pattern id that does not exist. Callers that already report unresolved references separately match on it so they can keep reporting every OTHER failure - notably a text/template parse error inside a {{define}} block, which nothing else would catch.
Functions ¶
func HasNormativeSection ¶ added in v0.4.0
HasNormativeSection reports whether skill renders at least one non-empty "must", "forbidden", or "validation" section across its composed rules and patterns. A skill with none is documentation only - it states no obligation a caller can be held to.
func LintSections ¶
LintSections checks that every rule/pattern body parses as a template and only defines canonical section keys (so no section is silently dropped at render). It returns one message per problem (empty when clean).
Types ¶
type Renderer ¶
type Renderer struct {
// contains filtered or unexported fields
}
Renderer renders skills from the index and the embedded templates.
func NewRenderer ¶
NewRenderer builds the shared template namespace from the templates filesystem.
func (*Renderer) Render ¶
Render produces one skill as SKILL.md, merging its composed rules/patterns section-by-section (or rendering them per-source when the skill opts out of merging).
func (*Renderer) RenderCursorRouter ¶ added in v0.4.0
RenderCursorRouter produces the project-router skill as a Cursor .mdc rule, the RenderCursorRule counterpart for the router's own richer doc shape (baseline/dispatch/order tables SKILL.mdc.tmpl's skillDoc has no room for).
func (*Renderer) RenderCursorRule ¶ added in v0.4.0
RenderCursorRule produces one skill as a Cursor .mdc rule: the same body Render produces, wrapped in Cursor's description/globs/alwaysApply frontmatter (the "mdcFrontmatter" partial) instead of SKILL.md's name/description block, so a skill's content never diverges between hosts - only the frontmatter adapts to the target.
func (*Renderer) RenderRouter ¶
RenderRouter produces the project-router skill as router.md, filtered to installed skills; an empty installed list renders the full router.
func (*Renderer) RenderSkill ¶
func (r *Renderer) RenderSkill( idx *knowledge.Index, skill knowledge.Skill, installed []string, ) (string, error)
RenderSkill dispatches to RenderRouter for project-router; renders normally for all others.
func (*Renderer) RenderSkillCursor ¶ added in v0.4.0
func (r *Renderer) RenderSkillCursor( idx *knowledge.Index, skill knowledge.Skill, installed []string, ) (string, error)
RenderSkillCursor is RenderSkill's Cursor counterpart: it dispatches to RenderCursorRouter for project-router and RenderCursorRule for all others.