render

package
v0.7.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 20, 2026 License: MIT Imports: 8 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
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

func HasNormativeSection(idx *knowledge.Index, skill knowledge.Skill) (bool, error)

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

func LintSections(idx *knowledge.Index) []string

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

func NewRenderer(templates fs.FS) (*Renderer, error)

NewRenderer builds the shared template namespace from the templates filesystem.

func (*Renderer) Render

func (r *Renderer) Render(idx *knowledge.Index, skill knowledge.Skill) (string, error)

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

func (r *Renderer) RenderCursorRouter(idx *knowledge.Index, installed []string) (string, error)

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

func (r *Renderer) RenderCursorRule(idx *knowledge.Index, skill knowledge.Skill) (string, error)

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

func (r *Renderer) RenderRouter(idx *knowledge.Index, installed []string) (string, error)

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.

func (*Renderer) RenderWorkflow

func (r *Renderer) RenderWorkflow(idx *knowledge.Index, wf knowledge.Workflow) (string, error)

RenderWorkflow renders one workflow into a WORKFLOW.md string.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL