@skillbase/compiler 0.2.1 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -46,6 +46,7 @@ __export(index_exports, {
46
46
  legacyPersonaToSoul: () => legacyPersonaToSoul,
47
47
  listImporters: () => listImporters,
48
48
  listTargets: () => listTargets,
49
+ normalizeCanonical: () => normalizeCanonical,
49
50
  parseSkill: () => parseSkill,
50
51
  parseSoul: () => parseSoul,
51
52
  parsedSkillToCanonical: () => parsedSkillToCanonical,
@@ -159,6 +160,24 @@ function splitBodyIntoSections(body) {
159
160
  }
160
161
  return { preamble, sections };
161
162
  }
163
+ function normalizeCanonical(canonical) {
164
+ const { content, sections } = canonical.instructions;
165
+ if (sections && sections.length > 0) return canonical;
166
+ if (!content || !content.includes("\n## ")) return canonical;
167
+ const { preamble, sections: parsed } = splitBodyIntoSections(content);
168
+ if (parsed.length === 0) return canonical;
169
+ return {
170
+ ...canonical,
171
+ instructions: {
172
+ content: preamble,
173
+ sections: parsed.map((s) => ({
174
+ type: "custom",
175
+ label: s.label,
176
+ content: s.content
177
+ }))
178
+ }
179
+ };
180
+ }
162
181
  function parsedSkillToCanonical(skill) {
163
182
  const fm = skill.frontmatter;
164
183
  const { preamble, sections } = splitBodyIntoSections(skill.body);
@@ -1280,6 +1299,44 @@ function buildFlatBody(canonical, options) {
1280
1299
  }
1281
1300
 
1282
1301
  // src/compile/skill-md.ts
1302
+ function buildBody(canonical) {
1303
+ const parts = [];
1304
+ if (canonical.identity) {
1305
+ const id = canonical.identity;
1306
+ const lines = [];
1307
+ if (id.role) lines.push(id.role);
1308
+ if (id.expertise?.length) lines.push(`**Expertise:** ${id.expertise.join(", ")}`);
1309
+ if (id.tone) lines.push(`**Tone:** ${id.tone}`);
1310
+ if (lines.length) parts.push(lines.join("\n"));
1311
+ }
1312
+ if (canonical.instructions.content) {
1313
+ parts.push(canonical.instructions.content);
1314
+ }
1315
+ const sections = canonical.instructions.sections ?? [];
1316
+ for (const s of sections) {
1317
+ if (s.label || s.content) {
1318
+ parts.push(`## ${s.label}
1319
+
1320
+ ${s.content}`);
1321
+ }
1322
+ }
1323
+ if (canonical.constraints) {
1324
+ const lines = [];
1325
+ if (canonical.constraints.always?.length) {
1326
+ lines.push("**Always:**");
1327
+ for (const r of canonical.constraints.always) lines.push(`- ${r}`);
1328
+ }
1329
+ if (canonical.constraints.never?.length) {
1330
+ if (lines.length) lines.push("");
1331
+ lines.push("**Never:**");
1332
+ for (const r of canonical.constraints.never) lines.push(`- ${r}`);
1333
+ }
1334
+ if (lines.length) parts.push(`## Constraints
1335
+
1336
+ ${lines.join("\n")}`);
1337
+ }
1338
+ return parts.join("\n\n");
1339
+ }
1283
1340
  var skillMdCompiler = {
1284
1341
  id: "skill-md",
1285
1342
  name: "SKILL.md (Skillbase)",
@@ -1351,7 +1408,7 @@ var skillMdCompiler = {
1351
1408
  priority_pages: canonical.knowledge.priorityPages
1352
1409
  };
1353
1410
  }
1354
- let body = canonical.rawBody ?? canonical.instructions.content;
1411
+ let body = buildBody(canonical);
1355
1412
  const knowledgeSection = buildKnowledgeSection(canonical, options);
1356
1413
  if (knowledgeSection) {
1357
1414
  body = body + "\n\n" + knowledgeSection;
@@ -1727,6 +1784,7 @@ function getCompiler(target) {
1727
1784
  legacyPersonaToSoul,
1728
1785
  listImporters,
1729
1786
  listTargets,
1787
+ normalizeCanonical,
1730
1788
  parseSkill,
1731
1789
  parseSoul,
1732
1790
  parsedSkillToCanonical,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/frontmatter.ts","../src/parse/skill-parser.ts","../src/parse/soul-parser.ts","../src/schema/skill-schema.ts","../src/schema/soul-schema.ts","../src/convert/vercel-to-spm.ts","../src/convert/legacy.ts","../src/utils/slugify.ts","../src/parse/importers/cursor-rules.ts","../src/parse/importers/cursor-mdc.ts","../src/parse/importers/claude-md.ts","../src/parse/importers/agents-md.ts","../src/parse/importers/windsurf-rules.ts","../src/parse/importers/copilot.ts","../src/parse/importers/cline.ts","../src/parse/importers/index.ts","../src/compile/utils.ts","../src/compile/skill-md.ts","../src/compile/soul-md.ts","../src/compile/cursor-mdc.ts","../src/compile/cursor-rules.ts","../src/compile/claude-md.ts","../src/compile/agents-md.ts","../src/compile/windsurf.ts","../src/compile/copilot.ts","../src/compile/cline.ts","../src/compile/index.ts"],"sourcesContent":["// Parsers\nexport {\n parseSkill,\n serializeSkill,\n SkillParseError,\n parsedSkillToCanonical,\n canonicalToParsedSkill,\n} from \"./parse/skill-parser.js\";\n\nexport {\n parseSoul,\n serializeSoul,\n resolveContextSlots,\n SoulParseError,\n parsedSoulToCanonical,\n canonicalToParsedSoul,\n} from \"./parse/soul-parser.js\";\n\n// Schema validation\nexport { validateSkillFrontmatter } from \"./schema/skill-schema.js\";\nexport { validateSoulFrontmatter } from \"./schema/soul-schema.js\";\n\n// Converters\nexport {\n convertVercelToSpm,\n inferTags,\n isVercelFormat,\n} from \"./convert/vercel-to-spm.js\";\nexport type { VercelFrontmatter } from \"./convert/vercel-to-spm.js\";\n\nexport {\n legacyPersonaToSoul,\n buildLegacyBody,\n} from \"./convert/legacy.js\";\n\n// Importers\nexport {\n detectFormat,\n getImporter,\n importFromFormat,\n listImporters,\n} from \"./parse/importers/index.js\";\nexport type {\n Importer,\n ImportOptions,\n ImportResult,\n} from \"./parse/importers/types.js\";\n\n// Compilers\nexport { compile, listTargets, getCompiler } from \"./compile/index.js\";\nexport type {\n CompileTarget,\n CompileOptions,\n CompileFile,\n CompileResult,\n Compiler,\n} from \"./compile/types.js\";\n\n// Types\nexport type {\n SkillTrigger,\n SkillDependencies,\n SkillCompatibility,\n SkillWorksWithEntry,\n SkillSecurity,\n DocSource,\n SkillDocs,\n SkillFrontmatter,\n ParsedSkill,\n} from \"./types/skill.js\";\n\nexport type {\n SoulIdentityBlock,\n SoulSkillbaseBlock,\n SoulFrontmatter,\n ParsedSoul,\n} from \"./types/soul.js\";\n\nexport type {\n LegacySkillManifest,\n PersonaCharacter,\n LegacyPersonaManifest,\n} from \"./types/legacy.js\";\n\nexport type { ValidationResult } from \"./types/common.js\";\n\nexport type {\n SourceFormat,\n CanonicalMeta,\n CanonicalIdentity,\n InstructionSection,\n CanonicalInstructions,\n CanonicalConstraints,\n CanonicalScoping,\n CanonicalDependencies,\n CanonicalKnowledge,\n CanonicalSettings,\n CanonicalFormat,\n} from \"./types/canonical.js\";\n","import yaml from \"js-yaml\";\n\nconst DELIMITER = \"---\";\n\nexport function parseFrontmatter(raw: string): {\n data: Record<string, any>;\n content: string;\n} {\n const trimmed = raw.trimStart();\n if (!trimmed.startsWith(DELIMITER)) {\n return { data: {}, content: raw };\n }\n\n const end = trimmed.indexOf(`\\n${DELIMITER}`, DELIMITER.length);\n if (end === -1) {\n return { data: {}, content: raw };\n }\n\n const yamlStr = trimmed.slice(DELIMITER.length, end).trim();\n const data = yamlStr ? (yaml.load(yamlStr) as Record<string, unknown>) : {};\n const content = trimmed.slice(end + DELIMITER.length + 1).replace(/^\\n/, \"\");\n\n return { data: data ?? {}, content };\n}\n\nexport function stringifyFrontmatter(\n content: string,\n data: Record<string, unknown>,\n): string {\n const yamlStr = yaml.dump(data, { lineWidth: -1, noRefs: true }).trimEnd();\n return `---\\n${yamlStr}\\n---\\n${content}`;\n}\n","import { parseFrontmatter, stringifyFrontmatter } from \"../frontmatter.js\";\nimport type { ParsedSkill, SkillFrontmatter } from \"../types/skill.js\";\nimport type { CanonicalFormat } from \"../types/canonical.js\";\n\nconst REQUIRED_FIELDS = [\n \"schema_version\",\n \"name\",\n \"version\",\n \"author\",\n \"license\",\n \"description\",\n] as const;\n\nconst TRIGGER_REQUIRED = [\"description\", \"tags\", \"priority\"] as const;\n\nexport class SkillParseError extends Error {\n constructor(\n message: string,\n public readonly fields: string[] = [],\n ) {\n super(message);\n this.name = \"SkillParseError\";\n }\n}\n\n/**\n * Parse a SKILL.md string into frontmatter + body.\n */\nexport function parseSkill(content: string): ParsedSkill {\n const { data, content: body } = parseFrontmatter(content);\n\n const missing = REQUIRED_FIELDS.filter(\n (f) => data[f] === undefined || data[f] === \"\",\n );\n if (missing.length > 0) {\n throw new SkillParseError(\n `SKILL.md missing required fields: ${missing.join(\", \")}`,\n missing as unknown as string[],\n );\n }\n\n if (data.trigger) {\n const triggerMissing = TRIGGER_REQUIRED.filter(\n (f) => data.trigger[f] === undefined || data.trigger[f] === \"\",\n );\n if (triggerMissing.length > 0) {\n throw new SkillParseError(\n `trigger missing required fields: ${triggerMissing.join(\", \")}`,\n triggerMissing.map((f) => `trigger.${f}`),\n );\n }\n }\n\n return {\n frontmatter: data as SkillFrontmatter,\n body: body.trim(),\n };\n}\n\n/**\n * Serialize a ParsedSkill back to SKILL.md string.\n */\nexport function serializeSkill(skill: ParsedSkill): string {\n return stringifyFrontmatter(skill.body, skill.frontmatter as unknown as Record<string, unknown>);\n}\n\n/**\n * Split markdown body into preamble + H2 sections.\n */\nfunction splitBodyIntoSections(body: string): {\n preamble: string;\n sections: { label: string; content: string }[];\n} {\n const lines = body.split(\"\\n\");\n let preamble = \"\";\n const sections: { label: string; content: string }[] = [];\n let currentLabel: string | null = null;\n let currentLines: string[] = [];\n\n for (const line of lines) {\n const h2Match = line.match(/^## (.+)$/);\n if (h2Match) {\n if (currentLabel !== null) {\n sections.push({ label: currentLabel, content: currentLines.join(\"\\n\").trim() });\n } else {\n preamble = currentLines.join(\"\\n\").trim();\n }\n currentLabel = h2Match[1].trim();\n currentLines = [];\n } else {\n currentLines.push(line);\n }\n }\n\n // Flush last section\n if (currentLabel !== null) {\n sections.push({ label: currentLabel, content: currentLines.join(\"\\n\").trim() });\n } else {\n preamble = currentLines.join(\"\\n\").trim();\n }\n\n return { preamble, sections };\n}\n\n/**\n * Convert a ParsedSkill to CanonicalFormat.\n */\nexport function parsedSkillToCanonical(skill: ParsedSkill): CanonicalFormat {\n const fm = skill.frontmatter;\n\n const { preamble, sections } = splitBodyIntoSections(skill.body);\n\n const canonical: CanonicalFormat = {\n meta: {\n name: fm.name,\n version: fm.version,\n author: fm.author,\n license: fm.license,\n description: fm.description,\n schemaVersion: fm.schema_version,\n language: fm.language,\n repository: fm.repository,\n confidence: 1.0,\n },\n instructions: {\n content: preamble,\n ...(sections.length > 0 && {\n sections: sections.map((s) => ({\n type: \"custom\" as const,\n label: s.label,\n content: s.content,\n })),\n }),\n },\n rawBody: skill.body,\n sourceFormat: \"skill-md\",\n };\n\n if (fm.trigger) {\n canonical.scoping = {\n trigger: {\n description: fm.trigger.description,\n tags: fm.trigger.tags,\n priority: fm.trigger.priority,\n },\n filePatterns: fm.trigger.file_patterns,\n };\n }\n\n if (fm.security || fm.dependencies || fm.compatibility || fm.works_with) {\n canonical.dependencies = {};\n if (fm.dependencies) {\n canonical.dependencies.skills = fm.dependencies;\n }\n if (fm.security) {\n canonical.dependencies.security = {\n permissions: fm.security.permissions,\n fileScope: fm.security.file_scope,\n };\n }\n if (fm.compatibility) {\n canonical.dependencies.compatibility = {\n minContextTokens: fm.compatibility.min_context_tokens,\n requires: fm.compatibility.requires,\n models: fm.compatibility.models,\n };\n }\n if (fm.works_with) {\n canonical.dependencies.worksWith = fm.works_with;\n }\n }\n\n if (fm.docs) {\n canonical.knowledge = {\n docSources: fm.docs.sources.map((s) => ({\n type: s.type,\n url: s.url,\n scope: s.scope,\n depth: s.depth,\n include: s.include,\n exclude: s.exclude,\n label: s.label,\n blocks: s.blocks,\n snapshotVersion: s.snapshot_version,\n maxTokens: s.max_tokens,\n })),\n delivery: fm.docs.delivery,\n priorityPages: fm.docs.priority_pages,\n };\n }\n\n return canonical;\n}\n\n/**\n * Convert a CanonicalFormat back to ParsedSkill.\n */\nexport function canonicalToParsedSkill(canonical: CanonicalFormat): ParsedSkill {\n const fm: SkillFrontmatter = {\n schema_version: canonical.meta.schemaVersion,\n name: canonical.meta.name,\n version: canonical.meta.version,\n author: canonical.meta.author,\n license: canonical.meta.license,\n description: canonical.meta.description,\n };\n\n if (canonical.meta.language) {\n fm.language = canonical.meta.language;\n }\n if (canonical.meta.repository) {\n fm.repository = canonical.meta.repository;\n }\n\n if (canonical.scoping?.trigger) {\n fm.trigger = {\n description: canonical.scoping.trigger.description,\n tags: canonical.scoping.trigger.tags,\n priority: canonical.scoping.trigger.priority,\n };\n if (canonical.scoping.filePatterns) {\n fm.trigger.file_patterns = canonical.scoping.filePatterns;\n }\n }\n\n if (canonical.dependencies?.skills) {\n fm.dependencies = canonical.dependencies.skills;\n }\n if (canonical.dependencies?.security) {\n fm.security = {\n permissions: canonical.dependencies.security.permissions,\n file_scope: canonical.dependencies.security.fileScope,\n };\n }\n if (canonical.dependencies?.compatibility) {\n fm.compatibility = {\n min_context_tokens:\n canonical.dependencies.compatibility.minContextTokens ?? 0,\n requires: canonical.dependencies.compatibility.requires ?? [],\n models: canonical.dependencies.compatibility.models ?? [],\n };\n }\n if (canonical.dependencies?.worksWith) {\n fm.works_with = canonical.dependencies.worksWith;\n }\n\n if (canonical.knowledge?.docSources) {\n fm.docs = {\n sources: canonical.knowledge.docSources.map((s) => ({\n type: s.type,\n url: s.url,\n scope: s.scope,\n depth: s.depth,\n include: s.include,\n exclude: s.exclude,\n label: s.label,\n blocks: s.blocks,\n snapshot_version: s.snapshotVersion,\n max_tokens: s.maxTokens,\n })),\n delivery: canonical.knowledge.delivery,\n priority_pages: canonical.knowledge.priorityPages,\n };\n }\n\n const body = canonical.rawBody ?? canonical.instructions.content;\n\n return { frontmatter: fm, body };\n}\n","import { parseFrontmatter, stringifyFrontmatter } from \"../frontmatter.js\";\nimport type { ParsedSoul, SoulFrontmatter } from \"../types/soul.js\";\nimport type { CanonicalFormat } from \"../types/canonical.js\";\n\nconst REQUIRED_FIELDS = [\n \"name\",\n \"version\",\n \"author\",\n \"license\",\n \"description\",\n] as const;\n\nexport class SoulParseError extends Error {\n constructor(\n message: string,\n public readonly fields: string[] = [],\n ) {\n super(message);\n this.name = \"SoulParseError\";\n }\n}\n\n/**\n * Parse a SOUL.md string into frontmatter + body.\n */\nexport function parseSoul(content: string): ParsedSoul {\n const { data, content: body } = parseFrontmatter(content);\n\n const missing = REQUIRED_FIELDS.filter(\n (f) => data[f] === undefined || data[f] === \"\",\n );\n if (missing.length > 0) {\n throw new SoulParseError(\n `SOUL.md missing required fields: ${missing.join(\", \")}`,\n missing as unknown as string[],\n );\n }\n\n return {\n frontmatter: data as SoulFrontmatter,\n body: body.trim(),\n };\n}\n\n/**\n * Serialize a ParsedSoul back to SOUL.md string.\n */\nexport function serializeSoul(soul: ParsedSoul): string {\n return stringifyFrontmatter(soul.body, soul.frontmatter as unknown as Record<string, unknown>);\n}\n\n/**\n * Replace {{PLACEHOLDER}} tokens in body with provided values.\n */\nexport function resolveContextSlots(\n body: string,\n values: Record<string, string>,\n): string {\n return body.replace(/\\{\\{(\\w+)\\}\\}/g, (match, key: string) => {\n return values[key] ?? match;\n });\n}\n\n/**\n * Convert a ParsedSoul to CanonicalFormat.\n */\nexport function parsedSoulToCanonical(soul: ParsedSoul): CanonicalFormat {\n const fm = soul.frontmatter;\n const sb = fm.skillbase;\n\n const canonical: CanonicalFormat = {\n meta: {\n name: fm.name,\n version: fm.version,\n author: fm.author,\n license: fm.license,\n description: fm.description,\n schemaVersion: sb?.schema_version ?? 3,\n confidence: 1.0,\n },\n instructions: {\n content: soul.body,\n },\n rawBody: soul.body,\n sourceFormat: \"soul-md\",\n };\n\n if (sb?.trigger) {\n canonical.scoping = {\n trigger: {\n description: sb.trigger.description,\n tags: sb.trigger.tags,\n priority: sb.trigger.priority,\n },\n filePatterns: sb.trigger.file_patterns,\n };\n }\n\n if (sb?.skills) {\n canonical.dependencies = {\n ...canonical.dependencies,\n skills: sb.skills,\n };\n }\n\n if (sb?.constraints) {\n canonical.constraints = {\n always: sb.constraints.always,\n never: sb.constraints.never,\n };\n }\n\n if (sb?.identity) {\n canonical.identity = {\n role: sb.identity.role,\n tone: sb.identity.tone,\n expertise: sb.identity.expertise,\n };\n }\n\n if (sb?.settings) {\n canonical.settings = { ...sb.settings };\n }\n\n if (sb?.docs) {\n canonical.knowledge = {\n docSources: sb.docs.sources.map((s) => ({\n type: s.type,\n url: s.url,\n scope: s.scope,\n depth: s.depth,\n include: s.include,\n exclude: s.exclude,\n label: s.label,\n blocks: s.blocks,\n snapshotVersion: s.snapshot_version,\n maxTokens: s.max_tokens,\n })),\n delivery: sb.docs.delivery,\n priorityPages: sb.docs.priority_pages,\n };\n }\n\n return canonical;\n}\n\n/**\n * Convert a CanonicalFormat back to ParsedSoul.\n */\nexport function canonicalToParsedSoul(canonical: CanonicalFormat): ParsedSoul {\n const fm: SoulFrontmatter = {\n name: canonical.meta.name,\n version: canonical.meta.version,\n author: canonical.meta.author,\n license: canonical.meta.license,\n description: canonical.meta.description,\n };\n\n const hasSkillbase =\n canonical.scoping?.trigger ||\n canonical.dependencies?.skills ||\n canonical.constraints ||\n canonical.identity ||\n canonical.settings ||\n canonical.knowledge?.docSources;\n\n if (hasSkillbase) {\n fm.skillbase = {\n schema_version: canonical.meta.schemaVersion,\n };\n if (canonical.identity) {\n fm.skillbase.identity = {\n role: canonical.identity.role,\n tone: canonical.identity.tone,\n expertise: canonical.identity.expertise,\n };\n }\n if (canonical.scoping?.trigger) {\n fm.skillbase.trigger = {\n description: canonical.scoping.trigger.description,\n tags: canonical.scoping.trigger.tags,\n priority: canonical.scoping.trigger.priority,\n };\n if (canonical.scoping.filePatterns) {\n fm.skillbase.trigger.file_patterns = canonical.scoping.filePatterns;\n }\n }\n if (canonical.dependencies?.skills) {\n fm.skillbase.skills = canonical.dependencies.skills;\n }\n if (canonical.constraints) {\n fm.skillbase.constraints = {\n always: canonical.constraints.always,\n never: canonical.constraints.never,\n };\n }\n if (canonical.settings) {\n fm.skillbase.settings = { ...canonical.settings };\n }\n if (canonical.knowledge?.docSources) {\n fm.skillbase.docs = {\n sources: canonical.knowledge.docSources.map((s) => ({\n type: s.type,\n url: s.url,\n scope: s.scope,\n depth: s.depth,\n include: s.include,\n exclude: s.exclude,\n label: s.label,\n blocks: s.blocks,\n snapshot_version: s.snapshotVersion,\n max_tokens: s.maxTokens,\n })),\n delivery: canonical.knowledge.delivery,\n priority_pages: canonical.knowledge.priorityPages,\n };\n }\n }\n\n const body = canonical.rawBody ?? canonical.instructions.content;\n\n return { frontmatter: fm, body };\n}\n","import Ajv from \"ajv\";\nimport type { ValidationResult } from \"../types/common.js\";\n\nconst skillFrontmatterSchema = {\n type: \"object\" as const,\n required: [\n \"schema_version\",\n \"name\",\n \"version\",\n \"description\",\n \"author\",\n \"license\",\n ],\n additionalProperties: false,\n properties: {\n schema_version: { type: \"integer\" as const, minimum: 1 },\n name: {\n type: \"string\" as const,\n pattern: \"^[a-z0-9][a-z0-9-]*$\",\n },\n version: {\n type: \"string\" as const,\n pattern: \"^\\\\d+\\\\.\\\\d+\\\\.\\\\d+\",\n },\n language: { type: \"string\" as const, enum: [\"en\"], nullable: true },\n description: { type: \"string\" as const, minLength: 1 },\n trigger: {\n type: \"object\" as const,\n nullable: true,\n required: [\"description\", \"tags\", \"priority\"],\n additionalProperties: false,\n properties: {\n description: { type: \"string\" as const, minLength: 1 },\n tags: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n minItems: 1,\n },\n file_patterns: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n nullable: true,\n },\n priority: { type: \"integer\" as const, minimum: 0, maximum: 100 },\n },\n },\n dependencies: {\n type: \"object\" as const,\n nullable: true,\n additionalProperties: { type: \"string\" as const },\n },\n compatibility: {\n type: \"object\" as const,\n nullable: true,\n required: [\"min_context_tokens\", \"requires\", \"models\"],\n additionalProperties: false,\n properties: {\n min_context_tokens: { type: \"integer\" as const, minimum: 0 },\n requires: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n },\n models: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n },\n },\n },\n works_with: {\n type: \"array\" as const,\n nullable: true,\n items: {\n type: \"object\" as const,\n required: [\"skill\", \"relationship\", \"description\"],\n additionalProperties: false,\n properties: {\n skill: { type: \"string\" as const },\n relationship: {\n type: \"string\" as const,\n enum: [\"input\", \"output\", \"parallel\"],\n },\n description: { type: \"string\" as const },\n },\n },\n },\n security: {\n type: \"object\" as const,\n nullable: true,\n required: [\"permissions\"],\n additionalProperties: false,\n properties: {\n permissions: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n },\n file_scope: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n nullable: true,\n },\n integrity: { type: \"string\" as const, nullable: true },\n },\n },\n docs: {\n type: \"object\" as const,\n nullable: true,\n additionalProperties: false,\n properties: {\n sources: {\n type: \"array\" as const,\n items: {\n type: \"object\" as const,\n required: [\"type\", \"url\"],\n additionalProperties: false,\n properties: {\n type: {\n type: \"string\" as const,\n enum: [\"url\", \"llms-txt\", \"github\"],\n },\n url: { type: \"string\" as const, minLength: 1 },\n scope: {\n type: \"string\" as const,\n enum: [\"crawl\", \"page\", \"sitemap\"],\n nullable: true,\n },\n depth: {\n type: \"integer\" as const,\n minimum: 0,\n maximum: 5,\n nullable: true,\n },\n include: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n nullable: true,\n },\n exclude: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n nullable: true,\n },\n label: { type: \"string\" as const, nullable: true },\n blocks: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n nullable: true,\n },\n snapshot_version: { type: \"string\" as const, nullable: true },\n max_tokens: {\n type: \"integer\" as const,\n minimum: 0,\n nullable: true,\n },\n },\n },\n },\n delivery: {\n type: \"string\" as const,\n enum: [\"local\", \"remote\", \"auto\"],\n nullable: true,\n },\n priority_pages: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n nullable: true,\n },\n },\n },\n author: { type: \"string\" as const, minLength: 1 },\n license: { type: \"string\" as const, minLength: 1 },\n repository: { type: \"string\" as const, nullable: true },\n },\n};\n\nconst ajv = new Ajv.default({ allErrors: true });\nconst validateFn = ajv.compile(skillFrontmatterSchema);\n\nexport { type ValidationResult };\n\nexport function validateSkillFrontmatter(data: unknown): ValidationResult {\n const valid = validateFn(data);\n if (valid) {\n return { valid: true, errors: [] };\n }\n const errors = (validateFn.errors ?? []).map(\n (e: { instancePath?: string; message?: string }) => {\n const path = e.instancePath || \"/\";\n return `${path}: ${e.message}`;\n },\n );\n return { valid: false, errors };\n}\n","import Ajv from \"ajv\";\nimport type { ValidationResult } from \"../types/common.js\";\n\nconst soulFrontmatterSchema = {\n type: \"object\" as const,\n required: [\"name\", \"version\", \"author\", \"license\", \"description\"],\n additionalProperties: true,\n properties: {\n name: {\n type: \"string\" as const,\n pattern: \"^[a-z0-9][a-z0-9-]*$\",\n },\n version: {\n type: \"string\" as const,\n pattern: \"^\\\\d+\\\\.\\\\d+\\\\.\\\\d+\",\n },\n description: { type: \"string\" as const, minLength: 1 },\n author: { type: \"string\" as const, minLength: 1 },\n license: { type: \"string\" as const, minLength: 1 },\n skillbase: {\n type: \"object\" as const,\n nullable: true,\n additionalProperties: true,\n properties: {\n schema_version: { type: \"integer\" as const, minimum: 1 },\n trigger: {\n type: \"object\" as const,\n nullable: true,\n required: [\"description\", \"tags\", \"priority\"],\n properties: {\n description: { type: \"string\" as const, minLength: 1 },\n tags: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n minItems: 1,\n },\n priority: { type: \"integer\" as const, minimum: 0, maximum: 100 },\n },\n },\n skills: {\n type: \"object\" as const,\n nullable: true,\n additionalProperties: { type: \"string\" as const },\n },\n settings: {\n type: \"object\" as const,\n nullable: true,\n properties: {\n temperature: { type: \"number\" as const, minimum: 0, maximum: 2 },\n top_p: { type: \"number\" as const, minimum: 0, maximum: 1 },\n },\n },\n },\n },\n },\n};\n\nconst ajv = new Ajv.default({ allErrors: true });\nconst validateFn = ajv.compile(soulFrontmatterSchema);\n\nexport { type ValidationResult };\n\nexport function validateSoulFrontmatter(data: unknown): ValidationResult {\n const valid = validateFn(data);\n if (valid) {\n return { valid: true, errors: [] };\n }\n const errors = (validateFn.errors ?? []).map(\n (e: { instancePath?: string; message?: string }) => {\n const path = e.instancePath || \"/\";\n return `${path}: ${e.message}`;\n },\n );\n return { valid: false, errors };\n}\n","import type { ParsedSkill, SkillFrontmatter } from \"../types/skill.js\";\n\nexport interface VercelFrontmatter {\n name: string;\n description: string;\n license?: string;\n metadata?: Record<string, unknown>;\n \"allowed-tools\"?: string[];\n \"user-invocable\"?: boolean;\n [key: string]: unknown;\n}\n\nconst STOP_WORDS = new Set([\n \"a\", \"an\", \"the\", \"and\", \"or\", \"for\", \"to\", \"in\", \"on\", \"of\", \"is\", \"it\",\n \"with\", \"that\", \"this\", \"use\", \"when\", \"how\", \"what\", \"your\", \"you\",\n]);\n\nexport function inferTags(name: string, description: string): string[] {\n const tags = new Set<string>();\n\n for (const token of name.split(\"-\")) {\n if (token.length > 1 && !STOP_WORDS.has(token)) {\n tags.add(token);\n }\n }\n\n const words = description\n .toLowerCase()\n .replace(/[^a-z0-9\\s-]/g, \"\")\n .split(/\\s+/)\n .filter((w) => w.length > 2 && !STOP_WORDS.has(w));\n\n for (const word of words.slice(0, 10)) {\n if (tags.size >= 8) break;\n tags.add(word);\n }\n\n if (tags.size === 0) {\n tags.add(name);\n }\n\n return [...tags].slice(0, 8);\n}\n\nconst TOOL_TO_PERMISSION: Record<string, string> = {\n bash: \"bash:execute\",\n file_read: \"file:read\",\n file_write: \"file:write\",\n web_fetch: \"network:allowlist\",\n terminal: \"bash:execute\",\n shell: \"bash:execute\",\n};\n\nfunction mapPermissions(allowedTools?: string[]): string[] {\n if (!allowedTools || allowedTools.length === 0) return [];\n\n const permissions: string[] = [];\n for (const tool of allowedTools) {\n const normalized = tool.toLowerCase().replace(/-/g, \"_\");\n const mapped = TOOL_TO_PERMISSION[normalized];\n if (mapped && !permissions.includes(mapped)) {\n permissions.push(mapped);\n }\n }\n return permissions;\n}\n\nexport function isVercelFormat(data: Record<string, unknown>): boolean {\n return (\n !data.schema_version &&\n typeof data.name === \"string\" &&\n typeof data.description === \"string\"\n );\n}\n\nexport function convertVercelToSpm(\n vercel: VercelFrontmatter,\n body: string,\n options: { author: string; license?: string; repository?: string },\n): ParsedSkill {\n const name = vercel.name\n .toLowerCase()\n .replace(/[^a-z0-9-]/g, \"-\")\n .replace(/-+/g, \"-\")\n .replace(/^-|-$/g, \"\");\n\n const frontmatter: SkillFrontmatter = {\n schema_version: 3,\n name,\n version: \"1.0.0\",\n author: options.author,\n license: vercel.license || options.license || \"MIT\",\n description: vercel.description,\n language: \"en\",\n trigger: {\n description: vercel.description,\n tags: inferTags(name, vercel.description),\n priority: 50,\n },\n security: {\n permissions: mapPermissions(vercel[\"allowed-tools\"]),\n },\n };\n\n if (options.repository) {\n frontmatter.repository = options.repository;\n }\n\n return { frontmatter, body: body.trim() };\n}\n","import type { SoulFrontmatter, SoulSkillbaseBlock } from \"../types/soul.js\";\nimport type { LegacyPersonaManifest } from \"../types/legacy.js\";\n\n/**\n * Convert a legacy PersonaManifest to SoulFrontmatter.\n */\nexport function legacyPersonaToSoul(\n manifest: LegacyPersonaManifest,\n): SoulFrontmatter {\n const soul: SoulFrontmatter = {\n name: manifest.name,\n version: manifest.version,\n author: manifest.author,\n license: manifest.license,\n description: manifest.description,\n };\n\n const skillbase: SoulSkillbaseBlock = {\n schema_version: 3,\n };\n\n if (manifest.skills && Object.keys(manifest.skills).length > 0) {\n skillbase.skills = manifest.skills;\n }\n\n if (manifest.settings) {\n skillbase.settings = manifest.settings;\n }\n\n soul.skillbase = skillbase;\n return soul;\n}\n\n/**\n * Build markdown body from legacy persona character fields.\n */\nexport function buildLegacyBody(manifest: LegacyPersonaManifest): string {\n const parts: string[] = [];\n\n parts.push(`## Role\\n\\n${manifest.character.role}`);\n\n if (manifest.character.tone) {\n parts.push(`## Tone\\n\\n${manifest.character.tone}`);\n }\n\n if (\n manifest.character.guidelines &&\n manifest.character.guidelines.length > 0\n ) {\n const items = manifest.character.guidelines.map((g) => `- ${g}`).join(\"\\n\");\n parts.push(`## Guidelines\\n\\n${items}`);\n }\n\n if (manifest.character.instructions) {\n parts.push(`## Instructions\\n\\n${manifest.character.instructions}`);\n }\n\n return parts.join(\"\\n\\n\");\n}\n","/**\n * Convert a string to a valid skill name slug.\n */\nexport function slugify(input: string): string {\n return input\n .toLowerCase()\n .replace(/[^a-z0-9-]/g, \"-\")\n .replace(/-+/g, \"-\")\n .replace(/^-|-$/g, \"\")\n || \"unnamed\";\n}\n\n/**\n * Extract a meaningful name from a filename.\n * \"CLAUDE.md\" → \"claude\", \".cursorrules\" → \"cursorrules\", \"api-rules.mdc\" → \"api-rules\"\n */\nexport function extractName(filename: string): string {\n const base = filename.split(\"/\").pop() ?? filename;\n return base\n .replace(/^\\./, \"\")\n .replace(/\\.(md|mdc|txt|instructions\\.md)$/i, \"\")\n .replace(/^(CLAUDE|AGENTS|copilot-instructions)$/i, (m) =>\n m.toLowerCase(),\n );\n}\n","import type { CanonicalFormat } from \"../../types/canonical.js\";\nimport type { Importer, ImportOptions, ImportResult } from \"./types.js\";\nimport { slugify, extractName } from \"../../utils/slugify.js\";\n\n/**\n * Importer for legacy .cursorrules files.\n * Plain markdown, no frontmatter. Everything is instructions.\n */\nexport const cursorRulesImporter: Importer = {\n id: \"cursor-rules\",\n name: \"Cursor Rules (legacy)\",\n filePatterns: [\".cursorrules\"],\n\n import(content: string, options?: ImportOptions): ImportResult {\n const warnings: string[] = [];\n const reviewNeeded: string[] = [];\n const trimmed = content.trim();\n\n if (!trimmed) {\n warnings.push(\"Empty .cursorrules file\");\n }\n\n const name = options?.filename\n ? slugify(extractName(options.filename))\n : \"imported-cursor-rules\";\n\n reviewNeeded.push(\n \"meta.name\",\n \"meta.description\",\n \"identity\",\n \"scoping\",\n \"constraints\",\n );\n\n const canonical: CanonicalFormat = {\n meta: {\n name,\n version: \"1.0.0\",\n author: options?.defaultAuthor ?? \"unknown\",\n license: options?.defaultLicense ?? \"MIT\",\n description: \"Imported from .cursorrules\",\n schemaVersion: 3,\n confidence: 0.5,\n },\n instructions: {\n content: trimmed,\n },\n sourceFormat: \"cursor-rules\",\n };\n\n return { canonical, warnings, reviewNeeded };\n },\n};\n","import { parseFrontmatter } from \"../../frontmatter.js\";\nimport type { CanonicalFormat } from \"../../types/canonical.js\";\nimport type { Importer, ImportOptions, ImportResult } from \"./types.js\";\nimport { slugify, extractName } from \"../../utils/slugify.js\";\n\ninterface MdcFrontmatter {\n description?: string;\n globs?: string;\n alwaysApply?: boolean;\n}\n\n/**\n * Importer for Cursor MDC (.mdc) rule files.\n * YAML frontmatter with description, globs, alwaysApply + markdown body.\n */\nexport const cursorMdcImporter: Importer = {\n id: \"cursor-mdc\",\n name: \"Cursor MDC Rules\",\n filePatterns: [\".cursor/rules/*.mdc\", \"*.mdc\"],\n\n import(content: string, options?: ImportOptions): ImportResult {\n const warnings: string[] = [];\n const reviewNeeded: string[] = [];\n\n const { data, content: body } = parseFrontmatter(content);\n const fm = data as MdcFrontmatter;\n const trimmed = body.trim();\n\n const name = options?.filename\n ? slugify(extractName(options.filename))\n : \"imported-mdc-rule\";\n\n const canonical: CanonicalFormat = {\n meta: {\n name,\n version: \"1.0.0\",\n author: options?.defaultAuthor ?? \"unknown\",\n license: options?.defaultLicense ?? \"MIT\",\n description: fm.description || \"Imported from Cursor MDC\",\n schemaVersion: 3,\n confidence: 0.6,\n },\n instructions: {\n content: trimmed,\n },\n sourceFormat: \"cursor-mdc\",\n };\n\n // Map globs to scoping\n if (fm.globs || fm.alwaysApply !== undefined) {\n canonical.scoping = {};\n if (fm.globs) {\n canonical.scoping.globs = fm.globs\n .split(\",\")\n .map((g) => g.trim())\n .filter(Boolean);\n }\n if (fm.description) {\n canonical.scoping.trigger = {\n description: fm.description,\n tags: [],\n priority: fm.alwaysApply ? 90 : 50,\n };\n }\n }\n\n if (!fm.description) {\n reviewNeeded.push(\"meta.description\");\n }\n reviewNeeded.push(\"meta.name\", \"identity\", \"constraints\");\n\n return { canonical, warnings, reviewNeeded };\n },\n};\n","import { parseFrontmatter } from \"../../frontmatter.js\";\nimport type { CanonicalFormat } from \"../../types/canonical.js\";\nimport type { Importer, ImportOptions, ImportResult } from \"./types.js\";\nimport { slugify, extractName } from \"../../utils/slugify.js\";\n\ninterface ClaudeMdFrontmatter {\n paths?: string[];\n}\n\n/**\n * Importer for CLAUDE.md files.\n * Plain markdown, optionally with paths frontmatter (for .claude/rules/*.md).\n */\nexport const claudeMdImporter: Importer = {\n id: \"claude-md\",\n name: \"CLAUDE.md (Claude Code)\",\n filePatterns: [\"CLAUDE.md\", \".claude/rules/*.md\"],\n\n import(content: string, options?: ImportOptions): ImportResult {\n const warnings: string[] = [];\n const reviewNeeded: string[] = [];\n\n const { data, content: body } = parseFrontmatter(content);\n const fm = data as ClaudeMdFrontmatter;\n const trimmed = body.trim();\n\n const name = options?.filename\n ? slugify(extractName(options.filename))\n : \"imported-claude-md\";\n\n const canonical: CanonicalFormat = {\n meta: {\n name,\n version: \"1.0.0\",\n author: options?.defaultAuthor ?? \"unknown\",\n license: options?.defaultLicense ?? \"MIT\",\n description: \"Imported from CLAUDE.md\",\n schemaVersion: 3,\n confidence: 0.5,\n },\n instructions: {\n content: trimmed,\n },\n sourceFormat: \"claude-md\",\n };\n\n // Map paths to scoping\n if (fm.paths && fm.paths.length > 0) {\n canonical.scoping = {\n globs: fm.paths,\n };\n }\n\n reviewNeeded.push(\n \"meta.name\",\n \"meta.description\",\n \"identity\",\n \"scoping\",\n \"constraints\",\n );\n\n return { canonical, warnings, reviewNeeded };\n },\n};\n","import type { CanonicalFormat } from \"../../types/canonical.js\";\nimport type { Importer, ImportOptions, ImportResult } from \"./types.js\";\nimport { slugify, extractName } from \"../../utils/slugify.js\";\n\n/**\n * Importer for AGENTS.md files (GitHub Copilot coding agents).\n * Plain markdown, no frontmatter.\n */\nexport const agentsMdImporter: Importer = {\n id: \"agents-md\",\n name: \"AGENTS.md (GitHub Copilot)\",\n filePatterns: [\"AGENTS.md\"],\n\n import(content: string, options?: ImportOptions): ImportResult {\n const warnings: string[] = [];\n const reviewNeeded: string[] = [];\n const trimmed = content.trim();\n\n const name = options?.filename\n ? slugify(extractName(options.filename))\n : \"imported-agents-md\";\n\n const canonical: CanonicalFormat = {\n meta: {\n name,\n version: \"1.0.0\",\n author: options?.defaultAuthor ?? \"unknown\",\n license: options?.defaultLicense ?? \"MIT\",\n description: \"Imported from AGENTS.md\",\n schemaVersion: 3,\n confidence: 0.5,\n },\n instructions: {\n content: trimmed,\n },\n sourceFormat: \"agents-md\",\n };\n\n reviewNeeded.push(\n \"meta.name\",\n \"meta.description\",\n \"identity\",\n \"scoping\",\n \"constraints\",\n );\n\n return { canonical, warnings, reviewNeeded };\n },\n};\n","import { parseFrontmatter } from \"../../frontmatter.js\";\nimport type { CanonicalFormat } from \"../../types/canonical.js\";\nimport type { Importer, ImportOptions, ImportResult } from \"./types.js\";\nimport { slugify, extractName } from \"../../utils/slugify.js\";\n\ninterface WindsurfFrontmatter {\n trigger?: \"always_on\" | \"model_decision\" | \"manual\" | \"glob\";\n globs?: string;\n description?: string;\n}\n\n/**\n * Importer for Windsurf rules.\n * .windsurfrules (legacy, plain text) or .windsurf/rules/*.md (with frontmatter).\n */\nexport const windsurfRulesImporter: Importer = {\n id: \"windsurf-rules\",\n name: \"Windsurf Rules\",\n filePatterns: [\".windsurfrules\", \".windsurf/rules/*.md\"],\n\n import(content: string, options?: ImportOptions): ImportResult {\n const warnings: string[] = [];\n const reviewNeeded: string[] = [];\n\n const { data, content: body } = parseFrontmatter(content);\n const fm = data as WindsurfFrontmatter;\n const trimmed = body.trim();\n\n const name = options?.filename\n ? slugify(extractName(options.filename))\n : \"imported-windsurf-rules\";\n\n const canonical: CanonicalFormat = {\n meta: {\n name,\n version: \"1.0.0\",\n author: options?.defaultAuthor ?? \"unknown\",\n license: options?.defaultLicense ?? \"MIT\",\n description: fm.description || \"Imported from Windsurf rules\",\n schemaVersion: 3,\n confidence: 0.5,\n },\n instructions: {\n content: trimmed,\n },\n sourceFormat: \"windsurf-rules\",\n };\n\n if (fm.trigger === \"glob\" && fm.globs) {\n canonical.scoping = {\n globs: fm.globs\n .split(\",\")\n .map((g) => g.trim())\n .filter(Boolean),\n };\n }\n\n reviewNeeded.push(\n \"meta.name\",\n \"meta.description\",\n \"identity\",\n \"scoping\",\n \"constraints\",\n );\n\n return { canonical, warnings, reviewNeeded };\n },\n};\n","import { parseFrontmatter } from \"../../frontmatter.js\";\nimport type { CanonicalFormat } from \"../../types/canonical.js\";\nimport type { Importer, ImportOptions, ImportResult } from \"./types.js\";\nimport { slugify, extractName } from \"../../utils/slugify.js\";\n\ninterface CopilotFrontmatter {\n applyTo?: string;\n}\n\n/**\n * Importer for GitHub Copilot instructions.\n * copilot-instructions.md (no frontmatter) or *.instructions.md (with applyTo frontmatter).\n */\nexport const copilotImporter: Importer = {\n id: \"copilot\",\n name: \"GitHub Copilot Instructions\",\n filePatterns: [\n \".github/copilot-instructions.md\",\n \".github/instructions/*.instructions.md\",\n ],\n\n import(content: string, options?: ImportOptions): ImportResult {\n const warnings: string[] = [];\n const reviewNeeded: string[] = [];\n\n const { data, content: body } = parseFrontmatter(content);\n const fm = data as CopilotFrontmatter;\n const trimmed = body.trim();\n\n const name = options?.filename\n ? slugify(extractName(options.filename))\n : \"imported-copilot\";\n\n const canonical: CanonicalFormat = {\n meta: {\n name,\n version: \"1.0.0\",\n author: options?.defaultAuthor ?? \"unknown\",\n license: options?.defaultLicense ?? \"MIT\",\n description: \"Imported from Copilot instructions\",\n schemaVersion: 3,\n confidence: 0.5,\n },\n instructions: {\n content: trimmed,\n },\n sourceFormat: \"copilot\",\n };\n\n if (fm.applyTo) {\n canonical.scoping = {\n globs: [fm.applyTo],\n };\n }\n\n reviewNeeded.push(\n \"meta.name\",\n \"meta.description\",\n \"identity\",\n \"scoping\",\n \"constraints\",\n );\n\n return { canonical, warnings, reviewNeeded };\n },\n};\n","import { parseFrontmatter } from \"../../frontmatter.js\";\nimport type { CanonicalFormat } from \"../../types/canonical.js\";\nimport type { Importer, ImportOptions, ImportResult } from \"./types.js\";\nimport { slugify, extractName } from \"../../utils/slugify.js\";\n\ninterface ClineFrontmatter {\n description?: string;\n globs?: string;\n paths?: string[];\n}\n\n/**\n * Importer for Cline rules.\n * Single .clinerules file (plain text) or .clinerules/*.md (with optional frontmatter).\n */\nexport const clineImporter: Importer = {\n id: \"cline\",\n name: \"Cline Rules\",\n filePatterns: [\".clinerules\", \".clinerules/*.md\", \".clinerules/*.txt\"],\n\n import(content: string, options?: ImportOptions): ImportResult {\n const warnings: string[] = [];\n const reviewNeeded: string[] = [];\n\n const { data, content: body } = parseFrontmatter(content);\n const fm = data as ClineFrontmatter;\n const trimmed = body.trim();\n\n const name = options?.filename\n ? slugify(extractName(options.filename))\n : \"imported-cline-rules\";\n\n const canonical: CanonicalFormat = {\n meta: {\n name,\n version: \"1.0.0\",\n author: options?.defaultAuthor ?? \"unknown\",\n license: options?.defaultLicense ?? \"MIT\",\n description: fm.description || \"Imported from Cline rules\",\n schemaVersion: 3,\n confidence: 0.5,\n },\n instructions: {\n content: trimmed,\n },\n sourceFormat: \"cline\",\n };\n\n // Map glob patterns to scoping\n const globs: string[] = [];\n if (fm.globs) {\n globs.push(\n ...fm.globs\n .split(\",\")\n .map((g) => g.trim())\n .filter(Boolean),\n );\n }\n if (fm.paths) {\n globs.push(...fm.paths);\n }\n if (globs.length > 0) {\n canonical.scoping = { globs };\n }\n\n reviewNeeded.push(\n \"meta.name\",\n \"meta.description\",\n \"identity\",\n \"scoping\",\n \"constraints\",\n );\n\n return { canonical, warnings, reviewNeeded };\n },\n};\n","import type { SourceFormat } from \"../../types/canonical.js\";\nimport type { Importer, ImportOptions, ImportResult } from \"./types.js\";\nimport { cursorRulesImporter } from \"./cursor-rules.js\";\nimport { cursorMdcImporter } from \"./cursor-mdc.js\";\nimport { claudeMdImporter } from \"./claude-md.js\";\nimport { agentsMdImporter } from \"./agents-md.js\";\nimport { windsurfRulesImporter } from \"./windsurf-rules.js\";\nimport { copilotImporter } from \"./copilot.js\";\nimport { clineImporter } from \"./cline.js\";\n\nconst importers: Importer[] = [\n cursorRulesImporter,\n cursorMdcImporter,\n claudeMdImporter,\n agentsMdImporter,\n windsurfRulesImporter,\n copilotImporter,\n clineImporter,\n];\n\n/**\n * Detect format from filename.\n */\nexport function detectFormat(filename: string): SourceFormat | null {\n const lower = filename.toLowerCase();\n const base = lower.split(\"/\").pop() ?? lower;\n\n if (base === \".cursorrules\") return \"cursor-rules\";\n if (base.endsWith(\".mdc\")) return \"cursor-mdc\";\n if (base === \"claude.md\") return \"claude-md\";\n if (base === \"agents.md\") return \"agents-md\";\n if (base === \".windsurfrules\") return \"windsurf-rules\";\n if (lower.includes(\".windsurf/rules/\")) return \"windsurf-rules\";\n if (base === \"copilot-instructions.md\") return \"copilot\";\n if (base.endsWith(\".instructions.md\")) return \"copilot\";\n if (base === \".clinerules\") return \"cline\";\n if (lower.includes(\".clinerules/\")) return \"cline\";\n if (lower.includes(\".claude/rules/\")) return \"claude-md\";\n\n return null;\n}\n\n/**\n * Get importer by format ID.\n */\nexport function getImporter(format: SourceFormat): Importer | null {\n return importers.find((i) => i.id === format) ?? null;\n}\n\n/**\n * Import content from a foreign format.\n */\nexport function importFromFormat(\n content: string,\n format: SourceFormat,\n options?: ImportOptions,\n): ImportResult {\n const importer = getImporter(format);\n if (!importer) {\n throw new Error(`No importer for format: ${format}`);\n }\n return importer.import(content, options);\n}\n\n/**\n * List all available importers.\n */\nexport function listImporters(): Importer[] {\n return [...importers];\n}\n","import type { CanonicalFormat } from \"../types/canonical.js\";\nimport type { CompileOptions } from \"./types.js\";\n\n/**\n * Build inline knowledge section from knowledge blocks.\n */\nexport function buildKnowledgeSection(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n): string | null {\n const blocks = options?.knowledgeBlocks ?? canonical.knowledge?.inlineBlocks;\n if (!blocks || blocks.length === 0 || !options?.inlineKnowledge) {\n return null;\n }\n\n const parts = [\"## Reference Documentation\", \"\"];\n for (const block of blocks) {\n parts.push(`### ${block.label}`, \"\", block.content, \"\");\n }\n\n return parts.join(\"\\n\").trimEnd();\n}\n\n/**\n * Build a flat markdown body from canonical format for targets\n * that don't support structured frontmatter.\n */\nexport function buildFlatBody(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n): string {\n const parts: string[] = [];\n\n // Identity preamble\n if (canonical.identity) {\n if (canonical.identity.role) {\n parts.push(canonical.identity.role, \"\");\n }\n if (canonical.identity.tone) {\n parts.push(`Tone: ${canonical.identity.tone}`, \"\");\n }\n }\n\n // Main instructions\n parts.push(canonical.rawBody ?? canonical.instructions.content);\n\n // Constraints\n if (canonical.constraints) {\n if (\n canonical.constraints.always &&\n canonical.constraints.always.length > 0\n ) {\n parts.push(\n \"\",\n \"## Always\",\n \"\",\n ...canonical.constraints.always.map((c) => `- ${c}`),\n );\n }\n if (canonical.constraints.never && canonical.constraints.never.length > 0) {\n parts.push(\n \"\",\n \"## Never\",\n \"\",\n ...canonical.constraints.never.map((c) => `- ${c}`),\n );\n }\n }\n\n // Inline knowledge\n const knowledgeSection = buildKnowledgeSection(canonical, options);\n if (knowledgeSection) {\n parts.push(\"\", knowledgeSection);\n }\n\n return parts.join(\"\\n\").trim();\n}\n","import { stringifyFrontmatter } from \"../frontmatter.js\";\nimport type { CanonicalFormat } from \"../types/canonical.js\";\nimport type { SkillFrontmatter } from \"../types/skill.js\";\nimport type { Compiler, CompileResult, CompileOptions } from \"./types.js\";\nimport { buildKnowledgeSection } from \"./utils.js\";\n\nexport const skillMdCompiler: Compiler = {\n id: \"skill-md\",\n name: \"SKILL.md (Skillbase)\",\n multiFile: false,\n supports: {\n frontmatter: true,\n scoping: true,\n filePatterns: true,\n constraints: true,\n dependencies: true,\n knowledge: true,\n },\n\n compile(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n ): CompileResult {\n const warnings: string[] = [];\n const fm: SkillFrontmatter = {\n schema_version: canonical.meta.schemaVersion,\n name: canonical.meta.name,\n version: canonical.meta.version,\n author: canonical.meta.author,\n license: canonical.meta.license,\n description: canonical.meta.description,\n };\n\n if (canonical.meta.language) fm.language = canonical.meta.language;\n if (canonical.meta.repository) fm.repository = canonical.meta.repository;\n\n if (canonical.scoping?.trigger) {\n fm.trigger = {\n description: canonical.scoping.trigger.description,\n tags: canonical.scoping.trigger.tags,\n priority: canonical.scoping.trigger.priority,\n };\n if (canonical.scoping.filePatterns) {\n fm.trigger.file_patterns = canonical.scoping.filePatterns;\n }\n }\n\n if (canonical.dependencies?.skills) {\n fm.dependencies = canonical.dependencies.skills;\n }\n if (canonical.dependencies?.security) {\n fm.security = {\n permissions: canonical.dependencies.security.permissions,\n file_scope: canonical.dependencies.security.fileScope,\n };\n }\n if (canonical.dependencies?.compatibility) {\n fm.compatibility = {\n min_context_tokens:\n canonical.dependencies.compatibility.minContextTokens ?? 0,\n requires: canonical.dependencies.compatibility.requires ?? [],\n models: canonical.dependencies.compatibility.models ?? [],\n };\n }\n if (canonical.dependencies?.worksWith) {\n fm.works_with = canonical.dependencies.worksWith;\n }\n\n if (canonical.knowledge?.docSources) {\n fm.docs = {\n sources: canonical.knowledge.docSources.map((s) => ({\n type: s.type,\n url: s.url,\n scope: s.scope,\n depth: s.depth,\n include: s.include,\n exclude: s.exclude,\n label: s.label,\n blocks: s.blocks,\n snapshot_version: s.snapshotVersion,\n max_tokens: s.maxTokens,\n })),\n delivery: canonical.knowledge.delivery,\n priority_pages: canonical.knowledge.priorityPages,\n };\n }\n\n let body = canonical.rawBody ?? canonical.instructions.content;\n\n // Append inline knowledge if requested\n const knowledgeSection = buildKnowledgeSection(canonical, options);\n if (knowledgeSection) {\n body = body + \"\\n\\n\" + knowledgeSection;\n }\n\n const content = stringifyFrontmatter(body, fm as unknown as Record<string, unknown>);\n\n return {\n files: [{ path: \"SKILL.md\", content }],\n droppedFeatures: [],\n warnings,\n };\n },\n};\n","import { stringifyFrontmatter } from \"../frontmatter.js\";\nimport type { CanonicalFormat } from \"../types/canonical.js\";\nimport type { SoulFrontmatter } from \"../types/soul.js\";\nimport type { Compiler, CompileResult, CompileOptions } from \"./types.js\";\nimport { buildKnowledgeSection } from \"./utils.js\";\n\nexport const soulMdCompiler: Compiler = {\n id: \"soul-md\",\n name: \"SOUL.md (Skillbase)\",\n multiFile: false,\n supports: {\n frontmatter: true,\n scoping: true,\n filePatterns: true,\n constraints: true,\n dependencies: true,\n knowledge: true,\n },\n\n compile(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n ): CompileResult {\n const fm: SoulFrontmatter = {\n name: canonical.meta.name,\n version: canonical.meta.version,\n author: canonical.meta.author,\n license: canonical.meta.license,\n description: canonical.meta.description,\n };\n\n const hasSkillbase =\n canonical.scoping?.trigger ||\n canonical.dependencies?.skills ||\n canonical.constraints ||\n canonical.identity ||\n canonical.settings ||\n canonical.knowledge?.docSources;\n\n if (hasSkillbase) {\n fm.skillbase = {\n schema_version: canonical.meta.schemaVersion,\n };\n if (canonical.identity) {\n fm.skillbase.identity = {\n role: canonical.identity.role,\n tone: canonical.identity.tone,\n expertise: canonical.identity.expertise,\n };\n }\n if (canonical.scoping?.trigger) {\n fm.skillbase.trigger = {\n description: canonical.scoping.trigger.description,\n tags: canonical.scoping.trigger.tags,\n priority: canonical.scoping.trigger.priority,\n };\n if (canonical.scoping.filePatterns) {\n fm.skillbase.trigger.file_patterns = canonical.scoping.filePatterns;\n }\n }\n if (canonical.dependencies?.skills) {\n fm.skillbase.skills = canonical.dependencies.skills;\n }\n if (canonical.constraints) {\n fm.skillbase.constraints = {\n always: canonical.constraints.always,\n never: canonical.constraints.never,\n };\n }\n if (canonical.settings) {\n fm.skillbase.settings = { ...canonical.settings };\n }\n if (canonical.knowledge?.docSources) {\n fm.skillbase.docs = {\n sources: canonical.knowledge.docSources.map((s) => ({\n type: s.type,\n url: s.url,\n scope: s.scope,\n depth: s.depth,\n include: s.include,\n exclude: s.exclude,\n label: s.label,\n blocks: s.blocks,\n snapshot_version: s.snapshotVersion,\n max_tokens: s.maxTokens,\n })),\n delivery: canonical.knowledge.delivery,\n priority_pages: canonical.knowledge.priorityPages,\n };\n }\n }\n\n let body = canonical.rawBody ?? canonical.instructions.content;\n\n const knowledgeSection = buildKnowledgeSection(canonical, options);\n if (knowledgeSection) {\n body = body + \"\\n\\n\" + knowledgeSection;\n }\n\n const content = stringifyFrontmatter(body, fm as unknown as Record<string, unknown>);\n\n return {\n files: [{ path: \"SOUL.md\", content }],\n droppedFeatures: [],\n warnings: [],\n };\n },\n};\n","import type { CanonicalFormat } from \"../types/canonical.js\";\nimport type { Compiler, CompileResult, CompileOptions } from \"./types.js\";\nimport { buildFlatBody } from \"./utils.js\";\n\nexport const cursorMdcCompiler: Compiler = {\n id: \"cursor-mdc\",\n name: \"Cursor MDC (.mdc)\",\n multiFile: false,\n supports: {\n frontmatter: false,\n scoping: true,\n filePatterns: true,\n constraints: true,\n dependencies: false,\n knowledge: true,\n },\n\n compile(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n ): CompileResult {\n const droppedFeatures: string[] = [];\n\n // Build MDC frontmatter\n const description =\n canonical.scoping?.trigger?.description ?? canonical.meta.description;\n const globs =\n canonical.scoping?.globs ??\n canonical.scoping?.filePatterns ??\n [];\n const alwaysApply = globs.length === 0;\n\n const fmLines = [\n \"---\",\n `description: ${description}`,\n `globs: ${globs.join(\", \") || \"\"}`,\n `alwaysApply: ${alwaysApply}`,\n \"---\",\n ];\n\n const body = buildFlatBody(canonical, options);\n const content = fmLines.join(\"\\n\") + \"\\n\\n\" + body;\n\n const filename = canonical.meta.name + \".mdc\";\n const path = options?.basePath\n ? `${options.basePath}/${filename}`\n : `.cursor/rules/${filename}`;\n\n if (canonical.dependencies?.skills) {\n droppedFeatures.push(\"dependencies\");\n }\n\n return {\n files: [{ path, content }],\n droppedFeatures,\n warnings: [],\n };\n },\n};\n","import type { CanonicalFormat } from \"../types/canonical.js\";\nimport type { Compiler, CompileResult, CompileOptions } from \"./types.js\";\nimport { buildFlatBody } from \"./utils.js\";\n\nexport const cursorRulesCompiler: Compiler = {\n id: \"cursor-rules\",\n name: \".cursorrules (legacy)\",\n multiFile: false,\n supports: {\n frontmatter: false,\n scoping: false,\n filePatterns: false,\n constraints: true,\n dependencies: false,\n knowledge: true,\n },\n\n compile(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n ): CompileResult {\n const droppedFeatures: string[] = [];\n const content = buildFlatBody(canonical, options);\n\n if (canonical.scoping?.trigger || canonical.scoping?.filePatterns) {\n droppedFeatures.push(\"scoping\");\n }\n if (canonical.dependencies?.skills) {\n droppedFeatures.push(\"dependencies\");\n }\n\n return {\n files: [{ path: \".cursorrules\", content }],\n droppedFeatures,\n warnings: [],\n };\n },\n};\n","import type { CanonicalFormat } from \"../types/canonical.js\";\nimport type { Compiler, CompileResult, CompileOptions } from \"./types.js\";\nimport { buildFlatBody } from \"./utils.js\";\n\nexport const claudeMdCompiler: Compiler = {\n id: \"claude-md\",\n name: \"CLAUDE.md (Claude Code)\",\n multiFile: false,\n supports: {\n frontmatter: false,\n scoping: false,\n filePatterns: false,\n constraints: true,\n dependencies: false,\n knowledge: true,\n },\n\n compile(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n ): CompileResult {\n const droppedFeatures: string[] = [];\n const content = buildFlatBody(canonical, options);\n\n if (canonical.scoping?.trigger) {\n droppedFeatures.push(\"scoping\");\n }\n if (canonical.dependencies?.skills) {\n droppedFeatures.push(\"dependencies\");\n }\n\n return {\n files: [{ path: \"CLAUDE.md\", content }],\n droppedFeatures,\n warnings: [],\n };\n },\n};\n","import type { CanonicalFormat } from \"../types/canonical.js\";\nimport type { Compiler, CompileResult, CompileOptions } from \"./types.js\";\nimport { buildFlatBody } from \"./utils.js\";\n\nexport const agentsMdCompiler: Compiler = {\n id: \"agents-md\",\n name: \"AGENTS.md (GitHub Copilot)\",\n multiFile: false,\n supports: {\n frontmatter: false,\n scoping: false,\n filePatterns: false,\n constraints: true,\n dependencies: false,\n knowledge: true,\n },\n\n compile(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n ): CompileResult {\n const droppedFeatures: string[] = [];\n const content = buildFlatBody(canonical, options);\n\n if (canonical.scoping?.trigger) {\n droppedFeatures.push(\"scoping\");\n }\n if (canonical.dependencies?.skills) {\n droppedFeatures.push(\"dependencies\");\n }\n\n return {\n files: [{ path: \"AGENTS.md\", content }],\n droppedFeatures,\n warnings: [],\n };\n },\n};\n","import type { CanonicalFormat } from \"../types/canonical.js\";\nimport type { Compiler, CompileResult, CompileOptions } from \"./types.js\";\nimport { buildFlatBody } from \"./utils.js\";\n\nconst MAX_CHARS = 6000;\n\nexport const windsurfCompiler: Compiler = {\n id: \"windsurf\",\n name: \"Windsurf Rules\",\n multiFile: false,\n supports: {\n frontmatter: false,\n scoping: false,\n filePatterns: false,\n constraints: true,\n dependencies: false,\n knowledge: true,\n },\n\n compile(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n ): CompileResult {\n const droppedFeatures: string[] = [];\n const warnings: string[] = [];\n let content = buildFlatBody(canonical, options);\n\n if (content.length > MAX_CHARS) {\n warnings.push(\n `Content truncated from ${content.length} to ${MAX_CHARS} characters (.windsurfrules limit)`,\n );\n content = content.slice(0, MAX_CHARS);\n }\n\n if (canonical.scoping?.trigger) {\n droppedFeatures.push(\"scoping\");\n }\n if (canonical.dependencies?.skills) {\n droppedFeatures.push(\"dependencies\");\n }\n\n return {\n files: [{ path: \".windsurfrules\", content }],\n droppedFeatures,\n warnings,\n };\n },\n};\n","import type { CanonicalFormat } from \"../types/canonical.js\";\nimport type { Compiler, CompileResult, CompileOptions } from \"./types.js\";\nimport { buildFlatBody } from \"./utils.js\";\n\nexport const copilotCompiler: Compiler = {\n id: \"copilot\",\n name: \"GitHub Copilot Instructions\",\n multiFile: false,\n supports: {\n frontmatter: false,\n scoping: false,\n filePatterns: false,\n constraints: true,\n dependencies: false,\n knowledge: true,\n },\n\n compile(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n ): CompileResult {\n const droppedFeatures: string[] = [];\n const content = buildFlatBody(canonical, options);\n\n if (canonical.scoping?.trigger) {\n droppedFeatures.push(\"scoping\");\n }\n if (canonical.dependencies?.skills) {\n droppedFeatures.push(\"dependencies\");\n }\n\n return {\n files: [\n { path: \".github/copilot-instructions.md\", content },\n ],\n droppedFeatures,\n warnings: [],\n };\n },\n};\n","import type { CanonicalFormat } from \"../types/canonical.js\";\nimport type { Compiler, CompileResult, CompileOptions } from \"./types.js\";\nimport { buildFlatBody } from \"./utils.js\";\n\nexport const clineCompiler: Compiler = {\n id: \"cline\",\n name: \"Cline Rules\",\n multiFile: false,\n supports: {\n frontmatter: false,\n scoping: false,\n filePatterns: false,\n constraints: true,\n dependencies: false,\n knowledge: true,\n },\n\n compile(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n ): CompileResult {\n const droppedFeatures: string[] = [];\n const content = buildFlatBody(canonical, options);\n\n if (canonical.scoping?.trigger) {\n droppedFeatures.push(\"scoping\");\n }\n if (canonical.dependencies?.skills) {\n droppedFeatures.push(\"dependencies\");\n }\n\n const filename = canonical.meta.name + \".md\";\n\n return {\n files: [{ path: `.clinerules/${filename}`, content }],\n droppedFeatures,\n warnings: [],\n };\n },\n};\n","import type { CanonicalFormat } from \"../types/canonical.js\";\nimport type {\n Compiler,\n CompileTarget,\n CompileResult,\n CompileOptions,\n} from \"./types.js\";\n\nimport { skillMdCompiler } from \"./skill-md.js\";\nimport { soulMdCompiler } from \"./soul-md.js\";\nimport { cursorMdcCompiler } from \"./cursor-mdc.js\";\nimport { cursorRulesCompiler } from \"./cursor-rules.js\";\nimport { claudeMdCompiler } from \"./claude-md.js\";\nimport { agentsMdCompiler } from \"./agents-md.js\";\nimport { windsurfCompiler } from \"./windsurf.js\";\nimport { copilotCompiler } from \"./copilot.js\";\nimport { clineCompiler } from \"./cline.js\";\n\nconst compilers: Compiler[] = [\n skillMdCompiler,\n soulMdCompiler,\n cursorMdcCompiler,\n cursorRulesCompiler,\n claudeMdCompiler,\n agentsMdCompiler,\n windsurfCompiler,\n copilotCompiler,\n clineCompiler,\n];\n\n/**\n * Compile a CanonicalFormat to a target format.\n */\nexport function compile(\n canonical: CanonicalFormat,\n target: CompileTarget,\n options?: CompileOptions,\n): CompileResult {\n const compiler = compilers.find((c) => c.id === target);\n if (!compiler) {\n throw new Error(`No compiler for target: ${target}`);\n }\n return compiler.compile(canonical, options);\n}\n\n/**\n * List all available compile targets.\n */\nexport function listTargets(): Compiler[] {\n return [...compilers];\n}\n\n/**\n * Get a compiler by target ID.\n */\nexport function getCompiler(target: CompileTarget): Compiler | null {\n return compilers.find((c) => c.id === target) ?? null;\n}\n"],"mappings":"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","names":["yaml","REQUIRED_FIELDS","Ajv","import_ajv","ajv","Ajv","validateFn","validateFn"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/frontmatter.ts","../src/parse/skill-parser.ts","../src/parse/soul-parser.ts","../src/schema/skill-schema.ts","../src/schema/soul-schema.ts","../src/convert/vercel-to-spm.ts","../src/convert/legacy.ts","../src/utils/slugify.ts","../src/parse/importers/cursor-rules.ts","../src/parse/importers/cursor-mdc.ts","../src/parse/importers/claude-md.ts","../src/parse/importers/agents-md.ts","../src/parse/importers/windsurf-rules.ts","../src/parse/importers/copilot.ts","../src/parse/importers/cline.ts","../src/parse/importers/index.ts","../src/compile/utils.ts","../src/compile/skill-md.ts","../src/compile/soul-md.ts","../src/compile/cursor-mdc.ts","../src/compile/cursor-rules.ts","../src/compile/claude-md.ts","../src/compile/agents-md.ts","../src/compile/windsurf.ts","../src/compile/copilot.ts","../src/compile/cline.ts","../src/compile/index.ts"],"sourcesContent":["// Parsers\nexport {\n parseSkill,\n serializeSkill,\n SkillParseError,\n parsedSkillToCanonical,\n canonicalToParsedSkill,\n normalizeCanonical,\n} from \"./parse/skill-parser.js\";\n\nexport {\n parseSoul,\n serializeSoul,\n resolveContextSlots,\n SoulParseError,\n parsedSoulToCanonical,\n canonicalToParsedSoul,\n} from \"./parse/soul-parser.js\";\n\n// Schema validation\nexport { validateSkillFrontmatter } from \"./schema/skill-schema.js\";\nexport { validateSoulFrontmatter } from \"./schema/soul-schema.js\";\n\n// Converters\nexport {\n convertVercelToSpm,\n inferTags,\n isVercelFormat,\n} from \"./convert/vercel-to-spm.js\";\nexport type { VercelFrontmatter } from \"./convert/vercel-to-spm.js\";\n\nexport {\n legacyPersonaToSoul,\n buildLegacyBody,\n} from \"./convert/legacy.js\";\n\n// Importers\nexport {\n detectFormat,\n getImporter,\n importFromFormat,\n listImporters,\n} from \"./parse/importers/index.js\";\nexport type {\n Importer,\n ImportOptions,\n ImportResult,\n} from \"./parse/importers/types.js\";\n\n// Compilers\nexport { compile, listTargets, getCompiler } from \"./compile/index.js\";\nexport type {\n CompileTarget,\n CompileOptions,\n CompileFile,\n CompileResult,\n Compiler,\n} from \"./compile/types.js\";\n\n// Types\nexport type {\n SkillTrigger,\n SkillDependencies,\n SkillCompatibility,\n SkillWorksWithEntry,\n SkillSecurity,\n DocSource,\n SkillDocs,\n SkillFrontmatter,\n ParsedSkill,\n} from \"./types/skill.js\";\n\nexport type {\n SoulIdentityBlock,\n SoulSkillbaseBlock,\n SoulFrontmatter,\n ParsedSoul,\n} from \"./types/soul.js\";\n\nexport type {\n LegacySkillManifest,\n PersonaCharacter,\n LegacyPersonaManifest,\n} from \"./types/legacy.js\";\n\nexport type { ValidationResult } from \"./types/common.js\";\n\nexport type {\n SourceFormat,\n CanonicalMeta,\n CanonicalIdentity,\n InstructionSection,\n CanonicalInstructions,\n CanonicalConstraints,\n CanonicalScoping,\n CanonicalDependencies,\n CanonicalKnowledge,\n CanonicalSettings,\n CanonicalFormat,\n} from \"./types/canonical.js\";\n","import yaml from \"js-yaml\";\n\nconst DELIMITER = \"---\";\n\nexport function parseFrontmatter(raw: string): {\n data: Record<string, any>;\n content: string;\n} {\n const trimmed = raw.trimStart();\n if (!trimmed.startsWith(DELIMITER)) {\n return { data: {}, content: raw };\n }\n\n const end = trimmed.indexOf(`\\n${DELIMITER}`, DELIMITER.length);\n if (end === -1) {\n return { data: {}, content: raw };\n }\n\n const yamlStr = trimmed.slice(DELIMITER.length, end).trim();\n const data = yamlStr ? (yaml.load(yamlStr) as Record<string, unknown>) : {};\n const content = trimmed.slice(end + DELIMITER.length + 1).replace(/^\\n/, \"\");\n\n return { data: data ?? {}, content };\n}\n\nexport function stringifyFrontmatter(\n content: string,\n data: Record<string, unknown>,\n): string {\n const yamlStr = yaml.dump(data, { lineWidth: -1, noRefs: true }).trimEnd();\n return `---\\n${yamlStr}\\n---\\n${content}`;\n}\n","import { parseFrontmatter, stringifyFrontmatter } from \"../frontmatter.js\";\nimport type { ParsedSkill, SkillFrontmatter } from \"../types/skill.js\";\nimport type { CanonicalFormat } from \"../types/canonical.js\";\n\nconst REQUIRED_FIELDS = [\n \"schema_version\",\n \"name\",\n \"version\",\n \"author\",\n \"license\",\n \"description\",\n] as const;\n\nconst TRIGGER_REQUIRED = [\"description\", \"tags\", \"priority\"] as const;\n\nexport class SkillParseError extends Error {\n constructor(\n message: string,\n public readonly fields: string[] = [],\n ) {\n super(message);\n this.name = \"SkillParseError\";\n }\n}\n\n/**\n * Parse a SKILL.md string into frontmatter + body.\n */\nexport function parseSkill(content: string): ParsedSkill {\n const { data, content: body } = parseFrontmatter(content);\n\n const missing = REQUIRED_FIELDS.filter(\n (f) => data[f] === undefined || data[f] === \"\",\n );\n if (missing.length > 0) {\n throw new SkillParseError(\n `SKILL.md missing required fields: ${missing.join(\", \")}`,\n missing as unknown as string[],\n );\n }\n\n if (data.trigger) {\n const triggerMissing = TRIGGER_REQUIRED.filter(\n (f) => data.trigger[f] === undefined || data.trigger[f] === \"\",\n );\n if (triggerMissing.length > 0) {\n throw new SkillParseError(\n `trigger missing required fields: ${triggerMissing.join(\", \")}`,\n triggerMissing.map((f) => `trigger.${f}`),\n );\n }\n }\n\n return {\n frontmatter: data as SkillFrontmatter,\n body: body.trim(),\n };\n}\n\n/**\n * Serialize a ParsedSkill back to SKILL.md string.\n */\nexport function serializeSkill(skill: ParsedSkill): string {\n return stringifyFrontmatter(skill.body, skill.frontmatter as unknown as Record<string, unknown>);\n}\n\n/**\n * Split markdown body into preamble + H2 sections.\n */\nexport function splitBodyIntoSections(body: string): {\n preamble: string;\n sections: { label: string; content: string }[];\n} {\n const lines = body.split(\"\\n\");\n let preamble = \"\";\n const sections: { label: string; content: string }[] = [];\n let currentLabel: string | null = null;\n let currentLines: string[] = [];\n\n for (const line of lines) {\n const h2Match = line.match(/^## (.+)$/);\n if (h2Match) {\n if (currentLabel !== null) {\n sections.push({ label: currentLabel, content: currentLines.join(\"\\n\").trim() });\n } else {\n preamble = currentLines.join(\"\\n\").trim();\n }\n currentLabel = h2Match[1].trim();\n currentLines = [];\n } else {\n currentLines.push(line);\n }\n }\n\n if (currentLabel !== null) {\n sections.push({ label: currentLabel, content: currentLines.join(\"\\n\").trim() });\n } else {\n preamble = currentLines.join(\"\\n\").trim();\n }\n\n return { preamble, sections };\n}\n\n/**\n * Normalize a CanonicalFormat: split instructions.content by H2 headers\n * into sections if sections are not already populated.\n */\nexport function normalizeCanonical(canonical: CanonicalFormat): CanonicalFormat {\n const { content, sections } = canonical.instructions;\n if (sections && sections.length > 0) return canonical;\n if (!content || !content.includes(\"\\n## \")) return canonical;\n\n const { preamble, sections: parsed } = splitBodyIntoSections(content);\n if (parsed.length === 0) return canonical;\n\n return {\n ...canonical,\n instructions: {\n content: preamble,\n sections: parsed.map((s) => ({\n type: \"custom\" as const,\n label: s.label,\n content: s.content,\n })),\n },\n };\n}\n\n/**\n * Convert a ParsedSkill to CanonicalFormat.\n */\nexport function parsedSkillToCanonical(skill: ParsedSkill): CanonicalFormat {\n const fm = skill.frontmatter;\n\n const { preamble, sections } = splitBodyIntoSections(skill.body);\n\n const canonical: CanonicalFormat = {\n meta: {\n name: fm.name,\n version: fm.version,\n author: fm.author,\n license: fm.license,\n description: fm.description,\n schemaVersion: fm.schema_version,\n language: fm.language,\n repository: fm.repository,\n confidence: 1.0,\n },\n instructions: {\n content: preamble,\n ...(sections.length > 0 && {\n sections: sections.map((s) => ({\n type: \"custom\" as const,\n label: s.label,\n content: s.content,\n })),\n }),\n },\n rawBody: skill.body,\n sourceFormat: \"skill-md\",\n };\n\n if (fm.trigger) {\n canonical.scoping = {\n trigger: {\n description: fm.trigger.description,\n tags: fm.trigger.tags,\n priority: fm.trigger.priority,\n },\n filePatterns: fm.trigger.file_patterns,\n };\n }\n\n if (fm.security || fm.dependencies || fm.compatibility || fm.works_with) {\n canonical.dependencies = {};\n if (fm.dependencies) {\n canonical.dependencies.skills = fm.dependencies;\n }\n if (fm.security) {\n canonical.dependencies.security = {\n permissions: fm.security.permissions,\n fileScope: fm.security.file_scope,\n };\n }\n if (fm.compatibility) {\n canonical.dependencies.compatibility = {\n minContextTokens: fm.compatibility.min_context_tokens,\n requires: fm.compatibility.requires,\n models: fm.compatibility.models,\n };\n }\n if (fm.works_with) {\n canonical.dependencies.worksWith = fm.works_with;\n }\n }\n\n if (fm.docs) {\n canonical.knowledge = {\n docSources: fm.docs.sources.map((s) => ({\n type: s.type,\n url: s.url,\n scope: s.scope,\n depth: s.depth,\n include: s.include,\n exclude: s.exclude,\n label: s.label,\n blocks: s.blocks,\n snapshotVersion: s.snapshot_version,\n maxTokens: s.max_tokens,\n })),\n delivery: fm.docs.delivery,\n priorityPages: fm.docs.priority_pages,\n };\n }\n\n return canonical;\n}\n\n/**\n * Convert a CanonicalFormat back to ParsedSkill.\n */\nexport function canonicalToParsedSkill(canonical: CanonicalFormat): ParsedSkill {\n const fm: SkillFrontmatter = {\n schema_version: canonical.meta.schemaVersion,\n name: canonical.meta.name,\n version: canonical.meta.version,\n author: canonical.meta.author,\n license: canonical.meta.license,\n description: canonical.meta.description,\n };\n\n if (canonical.meta.language) {\n fm.language = canonical.meta.language;\n }\n if (canonical.meta.repository) {\n fm.repository = canonical.meta.repository;\n }\n\n if (canonical.scoping?.trigger) {\n fm.trigger = {\n description: canonical.scoping.trigger.description,\n tags: canonical.scoping.trigger.tags,\n priority: canonical.scoping.trigger.priority,\n };\n if (canonical.scoping.filePatterns) {\n fm.trigger.file_patterns = canonical.scoping.filePatterns;\n }\n }\n\n if (canonical.dependencies?.skills) {\n fm.dependencies = canonical.dependencies.skills;\n }\n if (canonical.dependencies?.security) {\n fm.security = {\n permissions: canonical.dependencies.security.permissions,\n file_scope: canonical.dependencies.security.fileScope,\n };\n }\n if (canonical.dependencies?.compatibility) {\n fm.compatibility = {\n min_context_tokens:\n canonical.dependencies.compatibility.minContextTokens ?? 0,\n requires: canonical.dependencies.compatibility.requires ?? [],\n models: canonical.dependencies.compatibility.models ?? [],\n };\n }\n if (canonical.dependencies?.worksWith) {\n fm.works_with = canonical.dependencies.worksWith;\n }\n\n if (canonical.knowledge?.docSources) {\n fm.docs = {\n sources: canonical.knowledge.docSources.map((s) => ({\n type: s.type,\n url: s.url,\n scope: s.scope,\n depth: s.depth,\n include: s.include,\n exclude: s.exclude,\n label: s.label,\n blocks: s.blocks,\n snapshot_version: s.snapshotVersion,\n max_tokens: s.maxTokens,\n })),\n delivery: canonical.knowledge.delivery,\n priority_pages: canonical.knowledge.priorityPages,\n };\n }\n\n const body = canonical.rawBody ?? canonical.instructions.content;\n\n return { frontmatter: fm, body };\n}\n","import { parseFrontmatter, stringifyFrontmatter } from \"../frontmatter.js\";\nimport type { ParsedSoul, SoulFrontmatter } from \"../types/soul.js\";\nimport type { CanonicalFormat } from \"../types/canonical.js\";\n\nconst REQUIRED_FIELDS = [\n \"name\",\n \"version\",\n \"author\",\n \"license\",\n \"description\",\n] as const;\n\nexport class SoulParseError extends Error {\n constructor(\n message: string,\n public readonly fields: string[] = [],\n ) {\n super(message);\n this.name = \"SoulParseError\";\n }\n}\n\n/**\n * Parse a SOUL.md string into frontmatter + body.\n */\nexport function parseSoul(content: string): ParsedSoul {\n const { data, content: body } = parseFrontmatter(content);\n\n const missing = REQUIRED_FIELDS.filter(\n (f) => data[f] === undefined || data[f] === \"\",\n );\n if (missing.length > 0) {\n throw new SoulParseError(\n `SOUL.md missing required fields: ${missing.join(\", \")}`,\n missing as unknown as string[],\n );\n }\n\n return {\n frontmatter: data as SoulFrontmatter,\n body: body.trim(),\n };\n}\n\n/**\n * Serialize a ParsedSoul back to SOUL.md string.\n */\nexport function serializeSoul(soul: ParsedSoul): string {\n return stringifyFrontmatter(soul.body, soul.frontmatter as unknown as Record<string, unknown>);\n}\n\n/**\n * Replace {{PLACEHOLDER}} tokens in body with provided values.\n */\nexport function resolveContextSlots(\n body: string,\n values: Record<string, string>,\n): string {\n return body.replace(/\\{\\{(\\w+)\\}\\}/g, (match, key: string) => {\n return values[key] ?? match;\n });\n}\n\n/**\n * Convert a ParsedSoul to CanonicalFormat.\n */\nexport function parsedSoulToCanonical(soul: ParsedSoul): CanonicalFormat {\n const fm = soul.frontmatter;\n const sb = fm.skillbase;\n\n const canonical: CanonicalFormat = {\n meta: {\n name: fm.name,\n version: fm.version,\n author: fm.author,\n license: fm.license,\n description: fm.description,\n schemaVersion: sb?.schema_version ?? 3,\n confidence: 1.0,\n },\n instructions: {\n content: soul.body,\n },\n rawBody: soul.body,\n sourceFormat: \"soul-md\",\n };\n\n if (sb?.trigger) {\n canonical.scoping = {\n trigger: {\n description: sb.trigger.description,\n tags: sb.trigger.tags,\n priority: sb.trigger.priority,\n },\n filePatterns: sb.trigger.file_patterns,\n };\n }\n\n if (sb?.skills) {\n canonical.dependencies = {\n ...canonical.dependencies,\n skills: sb.skills,\n };\n }\n\n if (sb?.constraints) {\n canonical.constraints = {\n always: sb.constraints.always,\n never: sb.constraints.never,\n };\n }\n\n if (sb?.identity) {\n canonical.identity = {\n role: sb.identity.role,\n tone: sb.identity.tone,\n expertise: sb.identity.expertise,\n };\n }\n\n if (sb?.settings) {\n canonical.settings = { ...sb.settings };\n }\n\n if (sb?.docs) {\n canonical.knowledge = {\n docSources: sb.docs.sources.map((s) => ({\n type: s.type,\n url: s.url,\n scope: s.scope,\n depth: s.depth,\n include: s.include,\n exclude: s.exclude,\n label: s.label,\n blocks: s.blocks,\n snapshotVersion: s.snapshot_version,\n maxTokens: s.max_tokens,\n })),\n delivery: sb.docs.delivery,\n priorityPages: sb.docs.priority_pages,\n };\n }\n\n return canonical;\n}\n\n/**\n * Convert a CanonicalFormat back to ParsedSoul.\n */\nexport function canonicalToParsedSoul(canonical: CanonicalFormat): ParsedSoul {\n const fm: SoulFrontmatter = {\n name: canonical.meta.name,\n version: canonical.meta.version,\n author: canonical.meta.author,\n license: canonical.meta.license,\n description: canonical.meta.description,\n };\n\n const hasSkillbase =\n canonical.scoping?.trigger ||\n canonical.dependencies?.skills ||\n canonical.constraints ||\n canonical.identity ||\n canonical.settings ||\n canonical.knowledge?.docSources;\n\n if (hasSkillbase) {\n fm.skillbase = {\n schema_version: canonical.meta.schemaVersion,\n };\n if (canonical.identity) {\n fm.skillbase.identity = {\n role: canonical.identity.role,\n tone: canonical.identity.tone,\n expertise: canonical.identity.expertise,\n };\n }\n if (canonical.scoping?.trigger) {\n fm.skillbase.trigger = {\n description: canonical.scoping.trigger.description,\n tags: canonical.scoping.trigger.tags,\n priority: canonical.scoping.trigger.priority,\n };\n if (canonical.scoping.filePatterns) {\n fm.skillbase.trigger.file_patterns = canonical.scoping.filePatterns;\n }\n }\n if (canonical.dependencies?.skills) {\n fm.skillbase.skills = canonical.dependencies.skills;\n }\n if (canonical.constraints) {\n fm.skillbase.constraints = {\n always: canonical.constraints.always,\n never: canonical.constraints.never,\n };\n }\n if (canonical.settings) {\n fm.skillbase.settings = { ...canonical.settings };\n }\n if (canonical.knowledge?.docSources) {\n fm.skillbase.docs = {\n sources: canonical.knowledge.docSources.map((s) => ({\n type: s.type,\n url: s.url,\n scope: s.scope,\n depth: s.depth,\n include: s.include,\n exclude: s.exclude,\n label: s.label,\n blocks: s.blocks,\n snapshot_version: s.snapshotVersion,\n max_tokens: s.maxTokens,\n })),\n delivery: canonical.knowledge.delivery,\n priority_pages: canonical.knowledge.priorityPages,\n };\n }\n }\n\n const body = canonical.rawBody ?? canonical.instructions.content;\n\n return { frontmatter: fm, body };\n}\n","import Ajv from \"ajv\";\nimport type { ValidationResult } from \"../types/common.js\";\n\nconst skillFrontmatterSchema = {\n type: \"object\" as const,\n required: [\n \"schema_version\",\n \"name\",\n \"version\",\n \"description\",\n \"author\",\n \"license\",\n ],\n additionalProperties: false,\n properties: {\n schema_version: { type: \"integer\" as const, minimum: 1 },\n name: {\n type: \"string\" as const,\n pattern: \"^[a-z0-9][a-z0-9-]*$\",\n },\n version: {\n type: \"string\" as const,\n pattern: \"^\\\\d+\\\\.\\\\d+\\\\.\\\\d+\",\n },\n language: { type: \"string\" as const, enum: [\"en\"], nullable: true },\n description: { type: \"string\" as const, minLength: 1 },\n trigger: {\n type: \"object\" as const,\n nullable: true,\n required: [\"description\", \"tags\", \"priority\"],\n additionalProperties: false,\n properties: {\n description: { type: \"string\" as const, minLength: 1 },\n tags: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n minItems: 1,\n },\n file_patterns: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n nullable: true,\n },\n priority: { type: \"integer\" as const, minimum: 0, maximum: 100 },\n },\n },\n dependencies: {\n type: \"object\" as const,\n nullable: true,\n additionalProperties: { type: \"string\" as const },\n },\n compatibility: {\n type: \"object\" as const,\n nullable: true,\n required: [\"min_context_tokens\", \"requires\", \"models\"],\n additionalProperties: false,\n properties: {\n min_context_tokens: { type: \"integer\" as const, minimum: 0 },\n requires: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n },\n models: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n },\n },\n },\n works_with: {\n type: \"array\" as const,\n nullable: true,\n items: {\n type: \"object\" as const,\n required: [\"skill\", \"relationship\", \"description\"],\n additionalProperties: false,\n properties: {\n skill: { type: \"string\" as const },\n relationship: {\n type: \"string\" as const,\n enum: [\"input\", \"output\", \"parallel\"],\n },\n description: { type: \"string\" as const },\n },\n },\n },\n security: {\n type: \"object\" as const,\n nullable: true,\n required: [\"permissions\"],\n additionalProperties: false,\n properties: {\n permissions: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n },\n file_scope: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n nullable: true,\n },\n integrity: { type: \"string\" as const, nullable: true },\n },\n },\n docs: {\n type: \"object\" as const,\n nullable: true,\n additionalProperties: false,\n properties: {\n sources: {\n type: \"array\" as const,\n items: {\n type: \"object\" as const,\n required: [\"type\", \"url\"],\n additionalProperties: false,\n properties: {\n type: {\n type: \"string\" as const,\n enum: [\"url\", \"llms-txt\", \"github\"],\n },\n url: { type: \"string\" as const, minLength: 1 },\n scope: {\n type: \"string\" as const,\n enum: [\"crawl\", \"page\", \"sitemap\"],\n nullable: true,\n },\n depth: {\n type: \"integer\" as const,\n minimum: 0,\n maximum: 5,\n nullable: true,\n },\n include: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n nullable: true,\n },\n exclude: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n nullable: true,\n },\n label: { type: \"string\" as const, nullable: true },\n blocks: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n nullable: true,\n },\n snapshot_version: { type: \"string\" as const, nullable: true },\n max_tokens: {\n type: \"integer\" as const,\n minimum: 0,\n nullable: true,\n },\n },\n },\n },\n delivery: {\n type: \"string\" as const,\n enum: [\"local\", \"remote\", \"auto\"],\n nullable: true,\n },\n priority_pages: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n nullable: true,\n },\n },\n },\n author: { type: \"string\" as const, minLength: 1 },\n license: { type: \"string\" as const, minLength: 1 },\n repository: { type: \"string\" as const, nullable: true },\n },\n};\n\nconst ajv = new Ajv.default({ allErrors: true });\nconst validateFn = ajv.compile(skillFrontmatterSchema);\n\nexport { type ValidationResult };\n\nexport function validateSkillFrontmatter(data: unknown): ValidationResult {\n const valid = validateFn(data);\n if (valid) {\n return { valid: true, errors: [] };\n }\n const errors = (validateFn.errors ?? []).map(\n (e: { instancePath?: string; message?: string }) => {\n const path = e.instancePath || \"/\";\n return `${path}: ${e.message}`;\n },\n );\n return { valid: false, errors };\n}\n","import Ajv from \"ajv\";\nimport type { ValidationResult } from \"../types/common.js\";\n\nconst soulFrontmatterSchema = {\n type: \"object\" as const,\n required: [\"name\", \"version\", \"author\", \"license\", \"description\"],\n additionalProperties: true,\n properties: {\n name: {\n type: \"string\" as const,\n pattern: \"^[a-z0-9][a-z0-9-]*$\",\n },\n version: {\n type: \"string\" as const,\n pattern: \"^\\\\d+\\\\.\\\\d+\\\\.\\\\d+\",\n },\n description: { type: \"string\" as const, minLength: 1 },\n author: { type: \"string\" as const, minLength: 1 },\n license: { type: \"string\" as const, minLength: 1 },\n skillbase: {\n type: \"object\" as const,\n nullable: true,\n additionalProperties: true,\n properties: {\n schema_version: { type: \"integer\" as const, minimum: 1 },\n trigger: {\n type: \"object\" as const,\n nullable: true,\n required: [\"description\", \"tags\", \"priority\"],\n properties: {\n description: { type: \"string\" as const, minLength: 1 },\n tags: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n minItems: 1,\n },\n priority: { type: \"integer\" as const, minimum: 0, maximum: 100 },\n },\n },\n skills: {\n type: \"object\" as const,\n nullable: true,\n additionalProperties: { type: \"string\" as const },\n },\n settings: {\n type: \"object\" as const,\n nullable: true,\n properties: {\n temperature: { type: \"number\" as const, minimum: 0, maximum: 2 },\n top_p: { type: \"number\" as const, minimum: 0, maximum: 1 },\n },\n },\n },\n },\n },\n};\n\nconst ajv = new Ajv.default({ allErrors: true });\nconst validateFn = ajv.compile(soulFrontmatterSchema);\n\nexport { type ValidationResult };\n\nexport function validateSoulFrontmatter(data: unknown): ValidationResult {\n const valid = validateFn(data);\n if (valid) {\n return { valid: true, errors: [] };\n }\n const errors = (validateFn.errors ?? []).map(\n (e: { instancePath?: string; message?: string }) => {\n const path = e.instancePath || \"/\";\n return `${path}: ${e.message}`;\n },\n );\n return { valid: false, errors };\n}\n","import type { ParsedSkill, SkillFrontmatter } from \"../types/skill.js\";\n\nexport interface VercelFrontmatter {\n name: string;\n description: string;\n license?: string;\n metadata?: Record<string, unknown>;\n \"allowed-tools\"?: string[];\n \"user-invocable\"?: boolean;\n [key: string]: unknown;\n}\n\nconst STOP_WORDS = new Set([\n \"a\", \"an\", \"the\", \"and\", \"or\", \"for\", \"to\", \"in\", \"on\", \"of\", \"is\", \"it\",\n \"with\", \"that\", \"this\", \"use\", \"when\", \"how\", \"what\", \"your\", \"you\",\n]);\n\nexport function inferTags(name: string, description: string): string[] {\n const tags = new Set<string>();\n\n for (const token of name.split(\"-\")) {\n if (token.length > 1 && !STOP_WORDS.has(token)) {\n tags.add(token);\n }\n }\n\n const words = description\n .toLowerCase()\n .replace(/[^a-z0-9\\s-]/g, \"\")\n .split(/\\s+/)\n .filter((w) => w.length > 2 && !STOP_WORDS.has(w));\n\n for (const word of words.slice(0, 10)) {\n if (tags.size >= 8) break;\n tags.add(word);\n }\n\n if (tags.size === 0) {\n tags.add(name);\n }\n\n return [...tags].slice(0, 8);\n}\n\nconst TOOL_TO_PERMISSION: Record<string, string> = {\n bash: \"bash:execute\",\n file_read: \"file:read\",\n file_write: \"file:write\",\n web_fetch: \"network:allowlist\",\n terminal: \"bash:execute\",\n shell: \"bash:execute\",\n};\n\nfunction mapPermissions(allowedTools?: string[]): string[] {\n if (!allowedTools || allowedTools.length === 0) return [];\n\n const permissions: string[] = [];\n for (const tool of allowedTools) {\n const normalized = tool.toLowerCase().replace(/-/g, \"_\");\n const mapped = TOOL_TO_PERMISSION[normalized];\n if (mapped && !permissions.includes(mapped)) {\n permissions.push(mapped);\n }\n }\n return permissions;\n}\n\nexport function isVercelFormat(data: Record<string, unknown>): boolean {\n return (\n !data.schema_version &&\n typeof data.name === \"string\" &&\n typeof data.description === \"string\"\n );\n}\n\nexport function convertVercelToSpm(\n vercel: VercelFrontmatter,\n body: string,\n options: { author: string; license?: string; repository?: string },\n): ParsedSkill {\n const name = vercel.name\n .toLowerCase()\n .replace(/[^a-z0-9-]/g, \"-\")\n .replace(/-+/g, \"-\")\n .replace(/^-|-$/g, \"\");\n\n const frontmatter: SkillFrontmatter = {\n schema_version: 3,\n name,\n version: \"1.0.0\",\n author: options.author,\n license: vercel.license || options.license || \"MIT\",\n description: vercel.description,\n language: \"en\",\n trigger: {\n description: vercel.description,\n tags: inferTags(name, vercel.description),\n priority: 50,\n },\n security: {\n permissions: mapPermissions(vercel[\"allowed-tools\"]),\n },\n };\n\n if (options.repository) {\n frontmatter.repository = options.repository;\n }\n\n return { frontmatter, body: body.trim() };\n}\n","import type { SoulFrontmatter, SoulSkillbaseBlock } from \"../types/soul.js\";\nimport type { LegacyPersonaManifest } from \"../types/legacy.js\";\n\n/**\n * Convert a legacy PersonaManifest to SoulFrontmatter.\n */\nexport function legacyPersonaToSoul(\n manifest: LegacyPersonaManifest,\n): SoulFrontmatter {\n const soul: SoulFrontmatter = {\n name: manifest.name,\n version: manifest.version,\n author: manifest.author,\n license: manifest.license,\n description: manifest.description,\n };\n\n const skillbase: SoulSkillbaseBlock = {\n schema_version: 3,\n };\n\n if (manifest.skills && Object.keys(manifest.skills).length > 0) {\n skillbase.skills = manifest.skills;\n }\n\n if (manifest.settings) {\n skillbase.settings = manifest.settings;\n }\n\n soul.skillbase = skillbase;\n return soul;\n}\n\n/**\n * Build markdown body from legacy persona character fields.\n */\nexport function buildLegacyBody(manifest: LegacyPersonaManifest): string {\n const parts: string[] = [];\n\n parts.push(`## Role\\n\\n${manifest.character.role}`);\n\n if (manifest.character.tone) {\n parts.push(`## Tone\\n\\n${manifest.character.tone}`);\n }\n\n if (\n manifest.character.guidelines &&\n manifest.character.guidelines.length > 0\n ) {\n const items = manifest.character.guidelines.map((g) => `- ${g}`).join(\"\\n\");\n parts.push(`## Guidelines\\n\\n${items}`);\n }\n\n if (manifest.character.instructions) {\n parts.push(`## Instructions\\n\\n${manifest.character.instructions}`);\n }\n\n return parts.join(\"\\n\\n\");\n}\n","/**\n * Convert a string to a valid skill name slug.\n */\nexport function slugify(input: string): string {\n return input\n .toLowerCase()\n .replace(/[^a-z0-9-]/g, \"-\")\n .replace(/-+/g, \"-\")\n .replace(/^-|-$/g, \"\")\n || \"unnamed\";\n}\n\n/**\n * Extract a meaningful name from a filename.\n * \"CLAUDE.md\" → \"claude\", \".cursorrules\" → \"cursorrules\", \"api-rules.mdc\" → \"api-rules\"\n */\nexport function extractName(filename: string): string {\n const base = filename.split(\"/\").pop() ?? filename;\n return base\n .replace(/^\\./, \"\")\n .replace(/\\.(md|mdc|txt|instructions\\.md)$/i, \"\")\n .replace(/^(CLAUDE|AGENTS|copilot-instructions)$/i, (m) =>\n m.toLowerCase(),\n );\n}\n","import type { CanonicalFormat } from \"../../types/canonical.js\";\nimport type { Importer, ImportOptions, ImportResult } from \"./types.js\";\nimport { slugify, extractName } from \"../../utils/slugify.js\";\n\n/**\n * Importer for legacy .cursorrules files.\n * Plain markdown, no frontmatter. Everything is instructions.\n */\nexport const cursorRulesImporter: Importer = {\n id: \"cursor-rules\",\n name: \"Cursor Rules (legacy)\",\n filePatterns: [\".cursorrules\"],\n\n import(content: string, options?: ImportOptions): ImportResult {\n const warnings: string[] = [];\n const reviewNeeded: string[] = [];\n const trimmed = content.trim();\n\n if (!trimmed) {\n warnings.push(\"Empty .cursorrules file\");\n }\n\n const name = options?.filename\n ? slugify(extractName(options.filename))\n : \"imported-cursor-rules\";\n\n reviewNeeded.push(\n \"meta.name\",\n \"meta.description\",\n \"identity\",\n \"scoping\",\n \"constraints\",\n );\n\n const canonical: CanonicalFormat = {\n meta: {\n name,\n version: \"1.0.0\",\n author: options?.defaultAuthor ?? \"unknown\",\n license: options?.defaultLicense ?? \"MIT\",\n description: \"Imported from .cursorrules\",\n schemaVersion: 3,\n confidence: 0.5,\n },\n instructions: {\n content: trimmed,\n },\n sourceFormat: \"cursor-rules\",\n };\n\n return { canonical, warnings, reviewNeeded };\n },\n};\n","import { parseFrontmatter } from \"../../frontmatter.js\";\nimport type { CanonicalFormat } from \"../../types/canonical.js\";\nimport type { Importer, ImportOptions, ImportResult } from \"./types.js\";\nimport { slugify, extractName } from \"../../utils/slugify.js\";\n\ninterface MdcFrontmatter {\n description?: string;\n globs?: string;\n alwaysApply?: boolean;\n}\n\n/**\n * Importer for Cursor MDC (.mdc) rule files.\n * YAML frontmatter with description, globs, alwaysApply + markdown body.\n */\nexport const cursorMdcImporter: Importer = {\n id: \"cursor-mdc\",\n name: \"Cursor MDC Rules\",\n filePatterns: [\".cursor/rules/*.mdc\", \"*.mdc\"],\n\n import(content: string, options?: ImportOptions): ImportResult {\n const warnings: string[] = [];\n const reviewNeeded: string[] = [];\n\n const { data, content: body } = parseFrontmatter(content);\n const fm = data as MdcFrontmatter;\n const trimmed = body.trim();\n\n const name = options?.filename\n ? slugify(extractName(options.filename))\n : \"imported-mdc-rule\";\n\n const canonical: CanonicalFormat = {\n meta: {\n name,\n version: \"1.0.0\",\n author: options?.defaultAuthor ?? \"unknown\",\n license: options?.defaultLicense ?? \"MIT\",\n description: fm.description || \"Imported from Cursor MDC\",\n schemaVersion: 3,\n confidence: 0.6,\n },\n instructions: {\n content: trimmed,\n },\n sourceFormat: \"cursor-mdc\",\n };\n\n // Map globs to scoping\n if (fm.globs || fm.alwaysApply !== undefined) {\n canonical.scoping = {};\n if (fm.globs) {\n canonical.scoping.globs = fm.globs\n .split(\",\")\n .map((g) => g.trim())\n .filter(Boolean);\n }\n if (fm.description) {\n canonical.scoping.trigger = {\n description: fm.description,\n tags: [],\n priority: fm.alwaysApply ? 90 : 50,\n };\n }\n }\n\n if (!fm.description) {\n reviewNeeded.push(\"meta.description\");\n }\n reviewNeeded.push(\"meta.name\", \"identity\", \"constraints\");\n\n return { canonical, warnings, reviewNeeded };\n },\n};\n","import { parseFrontmatter } from \"../../frontmatter.js\";\nimport type { CanonicalFormat } from \"../../types/canonical.js\";\nimport type { Importer, ImportOptions, ImportResult } from \"./types.js\";\nimport { slugify, extractName } from \"../../utils/slugify.js\";\n\ninterface ClaudeMdFrontmatter {\n paths?: string[];\n}\n\n/**\n * Importer for CLAUDE.md files.\n * Plain markdown, optionally with paths frontmatter (for .claude/rules/*.md).\n */\nexport const claudeMdImporter: Importer = {\n id: \"claude-md\",\n name: \"CLAUDE.md (Claude Code)\",\n filePatterns: [\"CLAUDE.md\", \".claude/rules/*.md\"],\n\n import(content: string, options?: ImportOptions): ImportResult {\n const warnings: string[] = [];\n const reviewNeeded: string[] = [];\n\n const { data, content: body } = parseFrontmatter(content);\n const fm = data as ClaudeMdFrontmatter;\n const trimmed = body.trim();\n\n const name = options?.filename\n ? slugify(extractName(options.filename))\n : \"imported-claude-md\";\n\n const canonical: CanonicalFormat = {\n meta: {\n name,\n version: \"1.0.0\",\n author: options?.defaultAuthor ?? \"unknown\",\n license: options?.defaultLicense ?? \"MIT\",\n description: \"Imported from CLAUDE.md\",\n schemaVersion: 3,\n confidence: 0.5,\n },\n instructions: {\n content: trimmed,\n },\n sourceFormat: \"claude-md\",\n };\n\n // Map paths to scoping\n if (fm.paths && fm.paths.length > 0) {\n canonical.scoping = {\n globs: fm.paths,\n };\n }\n\n reviewNeeded.push(\n \"meta.name\",\n \"meta.description\",\n \"identity\",\n \"scoping\",\n \"constraints\",\n );\n\n return { canonical, warnings, reviewNeeded };\n },\n};\n","import type { CanonicalFormat } from \"../../types/canonical.js\";\nimport type { Importer, ImportOptions, ImportResult } from \"./types.js\";\nimport { slugify, extractName } from \"../../utils/slugify.js\";\n\n/**\n * Importer for AGENTS.md files (GitHub Copilot coding agents).\n * Plain markdown, no frontmatter.\n */\nexport const agentsMdImporter: Importer = {\n id: \"agents-md\",\n name: \"AGENTS.md (GitHub Copilot)\",\n filePatterns: [\"AGENTS.md\"],\n\n import(content: string, options?: ImportOptions): ImportResult {\n const warnings: string[] = [];\n const reviewNeeded: string[] = [];\n const trimmed = content.trim();\n\n const name = options?.filename\n ? slugify(extractName(options.filename))\n : \"imported-agents-md\";\n\n const canonical: CanonicalFormat = {\n meta: {\n name,\n version: \"1.0.0\",\n author: options?.defaultAuthor ?? \"unknown\",\n license: options?.defaultLicense ?? \"MIT\",\n description: \"Imported from AGENTS.md\",\n schemaVersion: 3,\n confidence: 0.5,\n },\n instructions: {\n content: trimmed,\n },\n sourceFormat: \"agents-md\",\n };\n\n reviewNeeded.push(\n \"meta.name\",\n \"meta.description\",\n \"identity\",\n \"scoping\",\n \"constraints\",\n );\n\n return { canonical, warnings, reviewNeeded };\n },\n};\n","import { parseFrontmatter } from \"../../frontmatter.js\";\nimport type { CanonicalFormat } from \"../../types/canonical.js\";\nimport type { Importer, ImportOptions, ImportResult } from \"./types.js\";\nimport { slugify, extractName } from \"../../utils/slugify.js\";\n\ninterface WindsurfFrontmatter {\n trigger?: \"always_on\" | \"model_decision\" | \"manual\" | \"glob\";\n globs?: string;\n description?: string;\n}\n\n/**\n * Importer for Windsurf rules.\n * .windsurfrules (legacy, plain text) or .windsurf/rules/*.md (with frontmatter).\n */\nexport const windsurfRulesImporter: Importer = {\n id: \"windsurf-rules\",\n name: \"Windsurf Rules\",\n filePatterns: [\".windsurfrules\", \".windsurf/rules/*.md\"],\n\n import(content: string, options?: ImportOptions): ImportResult {\n const warnings: string[] = [];\n const reviewNeeded: string[] = [];\n\n const { data, content: body } = parseFrontmatter(content);\n const fm = data as WindsurfFrontmatter;\n const trimmed = body.trim();\n\n const name = options?.filename\n ? slugify(extractName(options.filename))\n : \"imported-windsurf-rules\";\n\n const canonical: CanonicalFormat = {\n meta: {\n name,\n version: \"1.0.0\",\n author: options?.defaultAuthor ?? \"unknown\",\n license: options?.defaultLicense ?? \"MIT\",\n description: fm.description || \"Imported from Windsurf rules\",\n schemaVersion: 3,\n confidence: 0.5,\n },\n instructions: {\n content: trimmed,\n },\n sourceFormat: \"windsurf-rules\",\n };\n\n if (fm.trigger === \"glob\" && fm.globs) {\n canonical.scoping = {\n globs: fm.globs\n .split(\",\")\n .map((g) => g.trim())\n .filter(Boolean),\n };\n }\n\n reviewNeeded.push(\n \"meta.name\",\n \"meta.description\",\n \"identity\",\n \"scoping\",\n \"constraints\",\n );\n\n return { canonical, warnings, reviewNeeded };\n },\n};\n","import { parseFrontmatter } from \"../../frontmatter.js\";\nimport type { CanonicalFormat } from \"../../types/canonical.js\";\nimport type { Importer, ImportOptions, ImportResult } from \"./types.js\";\nimport { slugify, extractName } from \"../../utils/slugify.js\";\n\ninterface CopilotFrontmatter {\n applyTo?: string;\n}\n\n/**\n * Importer for GitHub Copilot instructions.\n * copilot-instructions.md (no frontmatter) or *.instructions.md (with applyTo frontmatter).\n */\nexport const copilotImporter: Importer = {\n id: \"copilot\",\n name: \"GitHub Copilot Instructions\",\n filePatterns: [\n \".github/copilot-instructions.md\",\n \".github/instructions/*.instructions.md\",\n ],\n\n import(content: string, options?: ImportOptions): ImportResult {\n const warnings: string[] = [];\n const reviewNeeded: string[] = [];\n\n const { data, content: body } = parseFrontmatter(content);\n const fm = data as CopilotFrontmatter;\n const trimmed = body.trim();\n\n const name = options?.filename\n ? slugify(extractName(options.filename))\n : \"imported-copilot\";\n\n const canonical: CanonicalFormat = {\n meta: {\n name,\n version: \"1.0.0\",\n author: options?.defaultAuthor ?? \"unknown\",\n license: options?.defaultLicense ?? \"MIT\",\n description: \"Imported from Copilot instructions\",\n schemaVersion: 3,\n confidence: 0.5,\n },\n instructions: {\n content: trimmed,\n },\n sourceFormat: \"copilot\",\n };\n\n if (fm.applyTo) {\n canonical.scoping = {\n globs: [fm.applyTo],\n };\n }\n\n reviewNeeded.push(\n \"meta.name\",\n \"meta.description\",\n \"identity\",\n \"scoping\",\n \"constraints\",\n );\n\n return { canonical, warnings, reviewNeeded };\n },\n};\n","import { parseFrontmatter } from \"../../frontmatter.js\";\nimport type { CanonicalFormat } from \"../../types/canonical.js\";\nimport type { Importer, ImportOptions, ImportResult } from \"./types.js\";\nimport { slugify, extractName } from \"../../utils/slugify.js\";\n\ninterface ClineFrontmatter {\n description?: string;\n globs?: string;\n paths?: string[];\n}\n\n/**\n * Importer for Cline rules.\n * Single .clinerules file (plain text) or .clinerules/*.md (with optional frontmatter).\n */\nexport const clineImporter: Importer = {\n id: \"cline\",\n name: \"Cline Rules\",\n filePatterns: [\".clinerules\", \".clinerules/*.md\", \".clinerules/*.txt\"],\n\n import(content: string, options?: ImportOptions): ImportResult {\n const warnings: string[] = [];\n const reviewNeeded: string[] = [];\n\n const { data, content: body } = parseFrontmatter(content);\n const fm = data as ClineFrontmatter;\n const trimmed = body.trim();\n\n const name = options?.filename\n ? slugify(extractName(options.filename))\n : \"imported-cline-rules\";\n\n const canonical: CanonicalFormat = {\n meta: {\n name,\n version: \"1.0.0\",\n author: options?.defaultAuthor ?? \"unknown\",\n license: options?.defaultLicense ?? \"MIT\",\n description: fm.description || \"Imported from Cline rules\",\n schemaVersion: 3,\n confidence: 0.5,\n },\n instructions: {\n content: trimmed,\n },\n sourceFormat: \"cline\",\n };\n\n // Map glob patterns to scoping\n const globs: string[] = [];\n if (fm.globs) {\n globs.push(\n ...fm.globs\n .split(\",\")\n .map((g) => g.trim())\n .filter(Boolean),\n );\n }\n if (fm.paths) {\n globs.push(...fm.paths);\n }\n if (globs.length > 0) {\n canonical.scoping = { globs };\n }\n\n reviewNeeded.push(\n \"meta.name\",\n \"meta.description\",\n \"identity\",\n \"scoping\",\n \"constraints\",\n );\n\n return { canonical, warnings, reviewNeeded };\n },\n};\n","import type { SourceFormat } from \"../../types/canonical.js\";\nimport type { Importer, ImportOptions, ImportResult } from \"./types.js\";\nimport { cursorRulesImporter } from \"./cursor-rules.js\";\nimport { cursorMdcImporter } from \"./cursor-mdc.js\";\nimport { claudeMdImporter } from \"./claude-md.js\";\nimport { agentsMdImporter } from \"./agents-md.js\";\nimport { windsurfRulesImporter } from \"./windsurf-rules.js\";\nimport { copilotImporter } from \"./copilot.js\";\nimport { clineImporter } from \"./cline.js\";\n\nconst importers: Importer[] = [\n cursorRulesImporter,\n cursorMdcImporter,\n claudeMdImporter,\n agentsMdImporter,\n windsurfRulesImporter,\n copilotImporter,\n clineImporter,\n];\n\n/**\n * Detect format from filename.\n */\nexport function detectFormat(filename: string): SourceFormat | null {\n const lower = filename.toLowerCase();\n const base = lower.split(\"/\").pop() ?? lower;\n\n if (base === \".cursorrules\") return \"cursor-rules\";\n if (base.endsWith(\".mdc\")) return \"cursor-mdc\";\n if (base === \"claude.md\") return \"claude-md\";\n if (base === \"agents.md\") return \"agents-md\";\n if (base === \".windsurfrules\") return \"windsurf-rules\";\n if (lower.includes(\".windsurf/rules/\")) return \"windsurf-rules\";\n if (base === \"copilot-instructions.md\") return \"copilot\";\n if (base.endsWith(\".instructions.md\")) return \"copilot\";\n if (base === \".clinerules\") return \"cline\";\n if (lower.includes(\".clinerules/\")) return \"cline\";\n if (lower.includes(\".claude/rules/\")) return \"claude-md\";\n\n return null;\n}\n\n/**\n * Get importer by format ID.\n */\nexport function getImporter(format: SourceFormat): Importer | null {\n return importers.find((i) => i.id === format) ?? null;\n}\n\n/**\n * Import content from a foreign format.\n */\nexport function importFromFormat(\n content: string,\n format: SourceFormat,\n options?: ImportOptions,\n): ImportResult {\n const importer = getImporter(format);\n if (!importer) {\n throw new Error(`No importer for format: ${format}`);\n }\n return importer.import(content, options);\n}\n\n/**\n * List all available importers.\n */\nexport function listImporters(): Importer[] {\n return [...importers];\n}\n","import type { CanonicalFormat } from \"../types/canonical.js\";\nimport type { CompileOptions } from \"./types.js\";\n\n/**\n * Build inline knowledge section from knowledge blocks.\n */\nexport function buildKnowledgeSection(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n): string | null {\n const blocks = options?.knowledgeBlocks ?? canonical.knowledge?.inlineBlocks;\n if (!blocks || blocks.length === 0 || !options?.inlineKnowledge) {\n return null;\n }\n\n const parts = [\"## Reference Documentation\", \"\"];\n for (const block of blocks) {\n parts.push(`### ${block.label}`, \"\", block.content, \"\");\n }\n\n return parts.join(\"\\n\").trimEnd();\n}\n\n/**\n * Build a flat markdown body from canonical format for targets\n * that don't support structured frontmatter.\n */\nexport function buildFlatBody(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n): string {\n const parts: string[] = [];\n\n // Identity preamble\n if (canonical.identity) {\n if (canonical.identity.role) {\n parts.push(canonical.identity.role, \"\");\n }\n if (canonical.identity.tone) {\n parts.push(`Tone: ${canonical.identity.tone}`, \"\");\n }\n }\n\n // Main instructions\n parts.push(canonical.rawBody ?? canonical.instructions.content);\n\n // Constraints\n if (canonical.constraints) {\n if (\n canonical.constraints.always &&\n canonical.constraints.always.length > 0\n ) {\n parts.push(\n \"\",\n \"## Always\",\n \"\",\n ...canonical.constraints.always.map((c) => `- ${c}`),\n );\n }\n if (canonical.constraints.never && canonical.constraints.never.length > 0) {\n parts.push(\n \"\",\n \"## Never\",\n \"\",\n ...canonical.constraints.never.map((c) => `- ${c}`),\n );\n }\n }\n\n // Inline knowledge\n const knowledgeSection = buildKnowledgeSection(canonical, options);\n if (knowledgeSection) {\n parts.push(\"\", knowledgeSection);\n }\n\n return parts.join(\"\\n\").trim();\n}\n","import { stringifyFrontmatter } from \"../frontmatter.js\";\nimport type { CanonicalFormat } from \"../types/canonical.js\";\nimport type { SkillFrontmatter } from \"../types/skill.js\";\nimport type { Compiler, CompileResult, CompileOptions } from \"./types.js\";\nimport { buildKnowledgeSection } from \"./utils.js\";\n\nfunction buildBody(canonical: CanonicalFormat): string {\n const parts: string[] = [];\n\n // Identity block\n if (canonical.identity) {\n const id = canonical.identity;\n const lines: string[] = [];\n if (id.role) lines.push(id.role);\n if (id.expertise?.length) lines.push(`**Expertise:** ${id.expertise.join(\", \")}`);\n if (id.tone) lines.push(`**Tone:** ${id.tone}`);\n if (lines.length) parts.push(lines.join(\"\\n\"));\n }\n\n // Main instructions content (preamble)\n if (canonical.instructions.content) {\n parts.push(canonical.instructions.content);\n }\n\n // Instruction sections\n const sections = canonical.instructions.sections ?? [];\n for (const s of sections) {\n if (s.label || s.content) {\n parts.push(`## ${s.label}\\n\\n${s.content}`);\n }\n }\n\n // Constraints\n if (canonical.constraints) {\n const lines: string[] = [];\n if (canonical.constraints.always?.length) {\n lines.push(\"**Always:**\");\n for (const r of canonical.constraints.always) lines.push(`- ${r}`);\n }\n if (canonical.constraints.never?.length) {\n if (lines.length) lines.push(\"\");\n lines.push(\"**Never:**\");\n for (const r of canonical.constraints.never) lines.push(`- ${r}`);\n }\n if (lines.length) parts.push(`## Constraints\\n\\n${lines.join(\"\\n\")}`);\n }\n\n return parts.join(\"\\n\\n\");\n}\n\nexport const skillMdCompiler: Compiler = {\n id: \"skill-md\",\n name: \"SKILL.md (Skillbase)\",\n multiFile: false,\n supports: {\n frontmatter: true,\n scoping: true,\n filePatterns: true,\n constraints: true,\n dependencies: true,\n knowledge: true,\n },\n\n compile(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n ): CompileResult {\n const warnings: string[] = [];\n const fm: SkillFrontmatter = {\n schema_version: canonical.meta.schemaVersion,\n name: canonical.meta.name,\n version: canonical.meta.version,\n author: canonical.meta.author,\n license: canonical.meta.license,\n description: canonical.meta.description,\n };\n\n if (canonical.meta.language) fm.language = canonical.meta.language;\n if (canonical.meta.repository) fm.repository = canonical.meta.repository;\n\n if (canonical.scoping?.trigger) {\n fm.trigger = {\n description: canonical.scoping.trigger.description,\n tags: canonical.scoping.trigger.tags,\n priority: canonical.scoping.trigger.priority,\n };\n if (canonical.scoping.filePatterns) {\n fm.trigger.file_patterns = canonical.scoping.filePatterns;\n }\n }\n\n if (canonical.dependencies?.skills) {\n fm.dependencies = canonical.dependencies.skills;\n }\n if (canonical.dependencies?.security) {\n fm.security = {\n permissions: canonical.dependencies.security.permissions,\n file_scope: canonical.dependencies.security.fileScope,\n };\n }\n if (canonical.dependencies?.compatibility) {\n fm.compatibility = {\n min_context_tokens:\n canonical.dependencies.compatibility.minContextTokens ?? 0,\n requires: canonical.dependencies.compatibility.requires ?? [],\n models: canonical.dependencies.compatibility.models ?? [],\n };\n }\n if (canonical.dependencies?.worksWith) {\n fm.works_with = canonical.dependencies.worksWith;\n }\n\n if (canonical.knowledge?.docSources) {\n fm.docs = {\n sources: canonical.knowledge.docSources.map((s) => ({\n type: s.type,\n url: s.url,\n scope: s.scope,\n depth: s.depth,\n include: s.include,\n exclude: s.exclude,\n label: s.label,\n blocks: s.blocks,\n snapshot_version: s.snapshotVersion,\n max_tokens: s.maxTokens,\n })),\n delivery: canonical.knowledge.delivery,\n priority_pages: canonical.knowledge.priorityPages,\n };\n }\n\n let body = buildBody(canonical);\n\n // Append inline knowledge if requested\n const knowledgeSection = buildKnowledgeSection(canonical, options);\n if (knowledgeSection) {\n body = body + \"\\n\\n\" + knowledgeSection;\n }\n\n const content = stringifyFrontmatter(body, fm as unknown as Record<string, unknown>);\n\n return {\n files: [{ path: \"SKILL.md\", content }],\n droppedFeatures: [],\n warnings,\n };\n },\n};\n","import { stringifyFrontmatter } from \"../frontmatter.js\";\nimport type { CanonicalFormat } from \"../types/canonical.js\";\nimport type { SoulFrontmatter } from \"../types/soul.js\";\nimport type { Compiler, CompileResult, CompileOptions } from \"./types.js\";\nimport { buildKnowledgeSection } from \"./utils.js\";\n\nexport const soulMdCompiler: Compiler = {\n id: \"soul-md\",\n name: \"SOUL.md (Skillbase)\",\n multiFile: false,\n supports: {\n frontmatter: true,\n scoping: true,\n filePatterns: true,\n constraints: true,\n dependencies: true,\n knowledge: true,\n },\n\n compile(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n ): CompileResult {\n const fm: SoulFrontmatter = {\n name: canonical.meta.name,\n version: canonical.meta.version,\n author: canonical.meta.author,\n license: canonical.meta.license,\n description: canonical.meta.description,\n };\n\n const hasSkillbase =\n canonical.scoping?.trigger ||\n canonical.dependencies?.skills ||\n canonical.constraints ||\n canonical.identity ||\n canonical.settings ||\n canonical.knowledge?.docSources;\n\n if (hasSkillbase) {\n fm.skillbase = {\n schema_version: canonical.meta.schemaVersion,\n };\n if (canonical.identity) {\n fm.skillbase.identity = {\n role: canonical.identity.role,\n tone: canonical.identity.tone,\n expertise: canonical.identity.expertise,\n };\n }\n if (canonical.scoping?.trigger) {\n fm.skillbase.trigger = {\n description: canonical.scoping.trigger.description,\n tags: canonical.scoping.trigger.tags,\n priority: canonical.scoping.trigger.priority,\n };\n if (canonical.scoping.filePatterns) {\n fm.skillbase.trigger.file_patterns = canonical.scoping.filePatterns;\n }\n }\n if (canonical.dependencies?.skills) {\n fm.skillbase.skills = canonical.dependencies.skills;\n }\n if (canonical.constraints) {\n fm.skillbase.constraints = {\n always: canonical.constraints.always,\n never: canonical.constraints.never,\n };\n }\n if (canonical.settings) {\n fm.skillbase.settings = { ...canonical.settings };\n }\n if (canonical.knowledge?.docSources) {\n fm.skillbase.docs = {\n sources: canonical.knowledge.docSources.map((s) => ({\n type: s.type,\n url: s.url,\n scope: s.scope,\n depth: s.depth,\n include: s.include,\n exclude: s.exclude,\n label: s.label,\n blocks: s.blocks,\n snapshot_version: s.snapshotVersion,\n max_tokens: s.maxTokens,\n })),\n delivery: canonical.knowledge.delivery,\n priority_pages: canonical.knowledge.priorityPages,\n };\n }\n }\n\n let body = canonical.rawBody ?? canonical.instructions.content;\n\n const knowledgeSection = buildKnowledgeSection(canonical, options);\n if (knowledgeSection) {\n body = body + \"\\n\\n\" + knowledgeSection;\n }\n\n const content = stringifyFrontmatter(body, fm as unknown as Record<string, unknown>);\n\n return {\n files: [{ path: \"SOUL.md\", content }],\n droppedFeatures: [],\n warnings: [],\n };\n },\n};\n","import type { CanonicalFormat } from \"../types/canonical.js\";\nimport type { Compiler, CompileResult, CompileOptions } from \"./types.js\";\nimport { buildFlatBody } from \"./utils.js\";\n\nexport const cursorMdcCompiler: Compiler = {\n id: \"cursor-mdc\",\n name: \"Cursor MDC (.mdc)\",\n multiFile: false,\n supports: {\n frontmatter: false,\n scoping: true,\n filePatterns: true,\n constraints: true,\n dependencies: false,\n knowledge: true,\n },\n\n compile(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n ): CompileResult {\n const droppedFeatures: string[] = [];\n\n // Build MDC frontmatter\n const description =\n canonical.scoping?.trigger?.description ?? canonical.meta.description;\n const globs =\n canonical.scoping?.globs ??\n canonical.scoping?.filePatterns ??\n [];\n const alwaysApply = globs.length === 0;\n\n const fmLines = [\n \"---\",\n `description: ${description}`,\n `globs: ${globs.join(\", \") || \"\"}`,\n `alwaysApply: ${alwaysApply}`,\n \"---\",\n ];\n\n const body = buildFlatBody(canonical, options);\n const content = fmLines.join(\"\\n\") + \"\\n\\n\" + body;\n\n const filename = canonical.meta.name + \".mdc\";\n const path = options?.basePath\n ? `${options.basePath}/${filename}`\n : `.cursor/rules/${filename}`;\n\n if (canonical.dependencies?.skills) {\n droppedFeatures.push(\"dependencies\");\n }\n\n return {\n files: [{ path, content }],\n droppedFeatures,\n warnings: [],\n };\n },\n};\n","import type { CanonicalFormat } from \"../types/canonical.js\";\nimport type { Compiler, CompileResult, CompileOptions } from \"./types.js\";\nimport { buildFlatBody } from \"./utils.js\";\n\nexport const cursorRulesCompiler: Compiler = {\n id: \"cursor-rules\",\n name: \".cursorrules (legacy)\",\n multiFile: false,\n supports: {\n frontmatter: false,\n scoping: false,\n filePatterns: false,\n constraints: true,\n dependencies: false,\n knowledge: true,\n },\n\n compile(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n ): CompileResult {\n const droppedFeatures: string[] = [];\n const content = buildFlatBody(canonical, options);\n\n if (canonical.scoping?.trigger || canonical.scoping?.filePatterns) {\n droppedFeatures.push(\"scoping\");\n }\n if (canonical.dependencies?.skills) {\n droppedFeatures.push(\"dependencies\");\n }\n\n return {\n files: [{ path: \".cursorrules\", content }],\n droppedFeatures,\n warnings: [],\n };\n },\n};\n","import type { CanonicalFormat } from \"../types/canonical.js\";\nimport type { Compiler, CompileResult, CompileOptions } from \"./types.js\";\nimport { buildFlatBody } from \"./utils.js\";\n\nexport const claudeMdCompiler: Compiler = {\n id: \"claude-md\",\n name: \"CLAUDE.md (Claude Code)\",\n multiFile: false,\n supports: {\n frontmatter: false,\n scoping: false,\n filePatterns: false,\n constraints: true,\n dependencies: false,\n knowledge: true,\n },\n\n compile(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n ): CompileResult {\n const droppedFeatures: string[] = [];\n const content = buildFlatBody(canonical, options);\n\n if (canonical.scoping?.trigger) {\n droppedFeatures.push(\"scoping\");\n }\n if (canonical.dependencies?.skills) {\n droppedFeatures.push(\"dependencies\");\n }\n\n return {\n files: [{ path: \"CLAUDE.md\", content }],\n droppedFeatures,\n warnings: [],\n };\n },\n};\n","import type { CanonicalFormat } from \"../types/canonical.js\";\nimport type { Compiler, CompileResult, CompileOptions } from \"./types.js\";\nimport { buildFlatBody } from \"./utils.js\";\n\nexport const agentsMdCompiler: Compiler = {\n id: \"agents-md\",\n name: \"AGENTS.md (GitHub Copilot)\",\n multiFile: false,\n supports: {\n frontmatter: false,\n scoping: false,\n filePatterns: false,\n constraints: true,\n dependencies: false,\n knowledge: true,\n },\n\n compile(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n ): CompileResult {\n const droppedFeatures: string[] = [];\n const content = buildFlatBody(canonical, options);\n\n if (canonical.scoping?.trigger) {\n droppedFeatures.push(\"scoping\");\n }\n if (canonical.dependencies?.skills) {\n droppedFeatures.push(\"dependencies\");\n }\n\n return {\n files: [{ path: \"AGENTS.md\", content }],\n droppedFeatures,\n warnings: [],\n };\n },\n};\n","import type { CanonicalFormat } from \"../types/canonical.js\";\nimport type { Compiler, CompileResult, CompileOptions } from \"./types.js\";\nimport { buildFlatBody } from \"./utils.js\";\n\nconst MAX_CHARS = 6000;\n\nexport const windsurfCompiler: Compiler = {\n id: \"windsurf\",\n name: \"Windsurf Rules\",\n multiFile: false,\n supports: {\n frontmatter: false,\n scoping: false,\n filePatterns: false,\n constraints: true,\n dependencies: false,\n knowledge: true,\n },\n\n compile(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n ): CompileResult {\n const droppedFeatures: string[] = [];\n const warnings: string[] = [];\n let content = buildFlatBody(canonical, options);\n\n if (content.length > MAX_CHARS) {\n warnings.push(\n `Content truncated from ${content.length} to ${MAX_CHARS} characters (.windsurfrules limit)`,\n );\n content = content.slice(0, MAX_CHARS);\n }\n\n if (canonical.scoping?.trigger) {\n droppedFeatures.push(\"scoping\");\n }\n if (canonical.dependencies?.skills) {\n droppedFeatures.push(\"dependencies\");\n }\n\n return {\n files: [{ path: \".windsurfrules\", content }],\n droppedFeatures,\n warnings,\n };\n },\n};\n","import type { CanonicalFormat } from \"../types/canonical.js\";\nimport type { Compiler, CompileResult, CompileOptions } from \"./types.js\";\nimport { buildFlatBody } from \"./utils.js\";\n\nexport const copilotCompiler: Compiler = {\n id: \"copilot\",\n name: \"GitHub Copilot Instructions\",\n multiFile: false,\n supports: {\n frontmatter: false,\n scoping: false,\n filePatterns: false,\n constraints: true,\n dependencies: false,\n knowledge: true,\n },\n\n compile(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n ): CompileResult {\n const droppedFeatures: string[] = [];\n const content = buildFlatBody(canonical, options);\n\n if (canonical.scoping?.trigger) {\n droppedFeatures.push(\"scoping\");\n }\n if (canonical.dependencies?.skills) {\n droppedFeatures.push(\"dependencies\");\n }\n\n return {\n files: [\n { path: \".github/copilot-instructions.md\", content },\n ],\n droppedFeatures,\n warnings: [],\n };\n },\n};\n","import type { CanonicalFormat } from \"../types/canonical.js\";\nimport type { Compiler, CompileResult, CompileOptions } from \"./types.js\";\nimport { buildFlatBody } from \"./utils.js\";\n\nexport const clineCompiler: Compiler = {\n id: \"cline\",\n name: \"Cline Rules\",\n multiFile: false,\n supports: {\n frontmatter: false,\n scoping: false,\n filePatterns: false,\n constraints: true,\n dependencies: false,\n knowledge: true,\n },\n\n compile(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n ): CompileResult {\n const droppedFeatures: string[] = [];\n const content = buildFlatBody(canonical, options);\n\n if (canonical.scoping?.trigger) {\n droppedFeatures.push(\"scoping\");\n }\n if (canonical.dependencies?.skills) {\n droppedFeatures.push(\"dependencies\");\n }\n\n const filename = canonical.meta.name + \".md\";\n\n return {\n files: [{ path: `.clinerules/${filename}`, content }],\n droppedFeatures,\n warnings: [],\n };\n },\n};\n","import type { CanonicalFormat } from \"../types/canonical.js\";\nimport type {\n Compiler,\n CompileTarget,\n CompileResult,\n CompileOptions,\n} from \"./types.js\";\n\nimport { skillMdCompiler } from \"./skill-md.js\";\nimport { soulMdCompiler } from \"./soul-md.js\";\nimport { cursorMdcCompiler } from \"./cursor-mdc.js\";\nimport { cursorRulesCompiler } from \"./cursor-rules.js\";\nimport { claudeMdCompiler } from \"./claude-md.js\";\nimport { agentsMdCompiler } from \"./agents-md.js\";\nimport { windsurfCompiler } from \"./windsurf.js\";\nimport { copilotCompiler } from \"./copilot.js\";\nimport { clineCompiler } from \"./cline.js\";\n\nconst compilers: Compiler[] = [\n skillMdCompiler,\n soulMdCompiler,\n cursorMdcCompiler,\n cursorRulesCompiler,\n claudeMdCompiler,\n agentsMdCompiler,\n windsurfCompiler,\n copilotCompiler,\n clineCompiler,\n];\n\n/**\n * Compile a CanonicalFormat to a target format.\n */\nexport function compile(\n canonical: CanonicalFormat,\n target: CompileTarget,\n options?: CompileOptions,\n): CompileResult {\n const compiler = compilers.find((c) => c.id === target);\n if (!compiler) {\n throw new Error(`No compiler for target: ${target}`);\n }\n return compiler.compile(canonical, options);\n}\n\n/**\n * List all available compile targets.\n */\nexport function listTargets(): Compiler[] {\n return [...compilers];\n}\n\n/**\n * Get a compiler by target ID.\n */\nexport function getCompiler(target: CompileTarget): Compiler | null {\n return compilers.find((c) => c.id === target) ?? null;\n}\n"],"mappings":"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","names":["yaml","REQUIRED_FIELDS","Ajv","import_ajv","ajv","Ajv","validateFn","validateFn"]}
package/dist/index.d.cts CHANGED
@@ -177,6 +177,11 @@ declare function parseSkill(content: string): ParsedSkill;
177
177
  * Serialize a ParsedSkill back to SKILL.md string.
178
178
  */
179
179
  declare function serializeSkill(skill: ParsedSkill): string;
180
+ /**
181
+ * Normalize a CanonicalFormat: split instructions.content by H2 headers
182
+ * into sections if sections are not already populated.
183
+ */
184
+ declare function normalizeCanonical(canonical: CanonicalFormat): CanonicalFormat;
180
185
  /**
181
186
  * Convert a ParsedSkill to CanonicalFormat.
182
187
  */
@@ -463,4 +468,4 @@ declare function listTargets(): Compiler[];
463
468
  */
464
469
  declare function getCompiler(target: CompileTarget): Compiler | null;
465
470
 
466
- export { type CanonicalConstraints, type CanonicalDependencies, type CanonicalFormat, type CanonicalIdentity, type CanonicalInstructions, type CanonicalKnowledge, type CanonicalMeta, type CanonicalScoping, type CanonicalSettings, type CompileFile, type CompileOptions, type CompileResult, type CompileTarget, type Compiler, type DocSource, type ImportOptions, type ImportResult, type Importer, type InstructionSection, type LegacyPersonaManifest, type LegacySkillManifest, type ParsedSkill, type ParsedSoul, type PersonaCharacter, type SkillCompatibility, type SkillDependencies, type SkillDocs, type SkillFrontmatter, SkillParseError, type SkillSecurity, type SkillTrigger, type SkillWorksWithEntry, type SoulFrontmatter, type SoulIdentityBlock, SoulParseError, type SoulSkillbaseBlock, type SourceFormat, type ValidationResult, type VercelFrontmatter, buildLegacyBody, canonicalToParsedSkill, canonicalToParsedSoul, compile, convertVercelToSpm, detectFormat, getCompiler, getImporter, importFromFormat, inferTags, isVercelFormat, legacyPersonaToSoul, listImporters, listTargets, parseSkill, parseSoul, parsedSkillToCanonical, parsedSoulToCanonical, resolveContextSlots, serializeSkill, serializeSoul, validateSkillFrontmatter, validateSoulFrontmatter };
471
+ export { type CanonicalConstraints, type CanonicalDependencies, type CanonicalFormat, type CanonicalIdentity, type CanonicalInstructions, type CanonicalKnowledge, type CanonicalMeta, type CanonicalScoping, type CanonicalSettings, type CompileFile, type CompileOptions, type CompileResult, type CompileTarget, type Compiler, type DocSource, type ImportOptions, type ImportResult, type Importer, type InstructionSection, type LegacyPersonaManifest, type LegacySkillManifest, type ParsedSkill, type ParsedSoul, type PersonaCharacter, type SkillCompatibility, type SkillDependencies, type SkillDocs, type SkillFrontmatter, SkillParseError, type SkillSecurity, type SkillTrigger, type SkillWorksWithEntry, type SoulFrontmatter, type SoulIdentityBlock, SoulParseError, type SoulSkillbaseBlock, type SourceFormat, type ValidationResult, type VercelFrontmatter, buildLegacyBody, canonicalToParsedSkill, canonicalToParsedSoul, compile, convertVercelToSpm, detectFormat, getCompiler, getImporter, importFromFormat, inferTags, isVercelFormat, legacyPersonaToSoul, listImporters, listTargets, normalizeCanonical, parseSkill, parseSoul, parsedSkillToCanonical, parsedSoulToCanonical, resolveContextSlots, serializeSkill, serializeSoul, validateSkillFrontmatter, validateSoulFrontmatter };
package/dist/index.d.ts CHANGED
@@ -177,6 +177,11 @@ declare function parseSkill(content: string): ParsedSkill;
177
177
  * Serialize a ParsedSkill back to SKILL.md string.
178
178
  */
179
179
  declare function serializeSkill(skill: ParsedSkill): string;
180
+ /**
181
+ * Normalize a CanonicalFormat: split instructions.content by H2 headers
182
+ * into sections if sections are not already populated.
183
+ */
184
+ declare function normalizeCanonical(canonical: CanonicalFormat): CanonicalFormat;
180
185
  /**
181
186
  * Convert a ParsedSkill to CanonicalFormat.
182
187
  */
@@ -463,4 +468,4 @@ declare function listTargets(): Compiler[];
463
468
  */
464
469
  declare function getCompiler(target: CompileTarget): Compiler | null;
465
470
 
466
- export { type CanonicalConstraints, type CanonicalDependencies, type CanonicalFormat, type CanonicalIdentity, type CanonicalInstructions, type CanonicalKnowledge, type CanonicalMeta, type CanonicalScoping, type CanonicalSettings, type CompileFile, type CompileOptions, type CompileResult, type CompileTarget, type Compiler, type DocSource, type ImportOptions, type ImportResult, type Importer, type InstructionSection, type LegacyPersonaManifest, type LegacySkillManifest, type ParsedSkill, type ParsedSoul, type PersonaCharacter, type SkillCompatibility, type SkillDependencies, type SkillDocs, type SkillFrontmatter, SkillParseError, type SkillSecurity, type SkillTrigger, type SkillWorksWithEntry, type SoulFrontmatter, type SoulIdentityBlock, SoulParseError, type SoulSkillbaseBlock, type SourceFormat, type ValidationResult, type VercelFrontmatter, buildLegacyBody, canonicalToParsedSkill, canonicalToParsedSoul, compile, convertVercelToSpm, detectFormat, getCompiler, getImporter, importFromFormat, inferTags, isVercelFormat, legacyPersonaToSoul, listImporters, listTargets, parseSkill, parseSoul, parsedSkillToCanonical, parsedSoulToCanonical, resolveContextSlots, serializeSkill, serializeSoul, validateSkillFrontmatter, validateSoulFrontmatter };
471
+ export { type CanonicalConstraints, type CanonicalDependencies, type CanonicalFormat, type CanonicalIdentity, type CanonicalInstructions, type CanonicalKnowledge, type CanonicalMeta, type CanonicalScoping, type CanonicalSettings, type CompileFile, type CompileOptions, type CompileResult, type CompileTarget, type Compiler, type DocSource, type ImportOptions, type ImportResult, type Importer, type InstructionSection, type LegacyPersonaManifest, type LegacySkillManifest, type ParsedSkill, type ParsedSoul, type PersonaCharacter, type SkillCompatibility, type SkillDependencies, type SkillDocs, type SkillFrontmatter, SkillParseError, type SkillSecurity, type SkillTrigger, type SkillWorksWithEntry, type SoulFrontmatter, type SoulIdentityBlock, SoulParseError, type SoulSkillbaseBlock, type SourceFormat, type ValidationResult, type VercelFrontmatter, buildLegacyBody, canonicalToParsedSkill, canonicalToParsedSoul, compile, convertVercelToSpm, detectFormat, getCompiler, getImporter, importFromFormat, inferTags, isVercelFormat, legacyPersonaToSoul, listImporters, listTargets, normalizeCanonical, parseSkill, parseSoul, parsedSkillToCanonical, parsedSoulToCanonical, resolveContextSlots, serializeSkill, serializeSoul, validateSkillFrontmatter, validateSoulFrontmatter };
package/dist/index.js CHANGED
@@ -99,6 +99,24 @@ function splitBodyIntoSections(body) {
99
99
  }
100
100
  return { preamble, sections };
101
101
  }
102
+ function normalizeCanonical(canonical) {
103
+ const { content, sections } = canonical.instructions;
104
+ if (sections && sections.length > 0) return canonical;
105
+ if (!content || !content.includes("\n## ")) return canonical;
106
+ const { preamble, sections: parsed } = splitBodyIntoSections(content);
107
+ if (parsed.length === 0) return canonical;
108
+ return {
109
+ ...canonical,
110
+ instructions: {
111
+ content: preamble,
112
+ sections: parsed.map((s) => ({
113
+ type: "custom",
114
+ label: s.label,
115
+ content: s.content
116
+ }))
117
+ }
118
+ };
119
+ }
102
120
  function parsedSkillToCanonical(skill) {
103
121
  const fm = skill.frontmatter;
104
122
  const { preamble, sections } = splitBodyIntoSections(skill.body);
@@ -1220,6 +1238,44 @@ function buildFlatBody(canonical, options) {
1220
1238
  }
1221
1239
 
1222
1240
  // src/compile/skill-md.ts
1241
+ function buildBody(canonical) {
1242
+ const parts = [];
1243
+ if (canonical.identity) {
1244
+ const id = canonical.identity;
1245
+ const lines = [];
1246
+ if (id.role) lines.push(id.role);
1247
+ if (id.expertise?.length) lines.push(`**Expertise:** ${id.expertise.join(", ")}`);
1248
+ if (id.tone) lines.push(`**Tone:** ${id.tone}`);
1249
+ if (lines.length) parts.push(lines.join("\n"));
1250
+ }
1251
+ if (canonical.instructions.content) {
1252
+ parts.push(canonical.instructions.content);
1253
+ }
1254
+ const sections = canonical.instructions.sections ?? [];
1255
+ for (const s of sections) {
1256
+ if (s.label || s.content) {
1257
+ parts.push(`## ${s.label}
1258
+
1259
+ ${s.content}`);
1260
+ }
1261
+ }
1262
+ if (canonical.constraints) {
1263
+ const lines = [];
1264
+ if (canonical.constraints.always?.length) {
1265
+ lines.push("**Always:**");
1266
+ for (const r of canonical.constraints.always) lines.push(`- ${r}`);
1267
+ }
1268
+ if (canonical.constraints.never?.length) {
1269
+ if (lines.length) lines.push("");
1270
+ lines.push("**Never:**");
1271
+ for (const r of canonical.constraints.never) lines.push(`- ${r}`);
1272
+ }
1273
+ if (lines.length) parts.push(`## Constraints
1274
+
1275
+ ${lines.join("\n")}`);
1276
+ }
1277
+ return parts.join("\n\n");
1278
+ }
1223
1279
  var skillMdCompiler = {
1224
1280
  id: "skill-md",
1225
1281
  name: "SKILL.md (Skillbase)",
@@ -1291,7 +1347,7 @@ var skillMdCompiler = {
1291
1347
  priority_pages: canonical.knowledge.priorityPages
1292
1348
  };
1293
1349
  }
1294
- let body = canonical.rawBody ?? canonical.instructions.content;
1350
+ let body = buildBody(canonical);
1295
1351
  const knowledgeSection = buildKnowledgeSection(canonical, options);
1296
1352
  if (knowledgeSection) {
1297
1353
  body = body + "\n\n" + knowledgeSection;
@@ -1666,6 +1722,7 @@ export {
1666
1722
  legacyPersonaToSoul,
1667
1723
  listImporters,
1668
1724
  listTargets,
1725
+ normalizeCanonical,
1669
1726
  parseSkill,
1670
1727
  parseSoul,
1671
1728
  parsedSkillToCanonical,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/frontmatter.ts","../src/parse/skill-parser.ts","../src/parse/soul-parser.ts","../src/schema/skill-schema.ts","../src/schema/soul-schema.ts","../src/convert/vercel-to-spm.ts","../src/convert/legacy.ts","../src/utils/slugify.ts","../src/parse/importers/cursor-rules.ts","../src/parse/importers/cursor-mdc.ts","../src/parse/importers/claude-md.ts","../src/parse/importers/agents-md.ts","../src/parse/importers/windsurf-rules.ts","../src/parse/importers/copilot.ts","../src/parse/importers/cline.ts","../src/parse/importers/index.ts","../src/compile/utils.ts","../src/compile/skill-md.ts","../src/compile/soul-md.ts","../src/compile/cursor-mdc.ts","../src/compile/cursor-rules.ts","../src/compile/claude-md.ts","../src/compile/agents-md.ts","../src/compile/windsurf.ts","../src/compile/copilot.ts","../src/compile/cline.ts","../src/compile/index.ts"],"sourcesContent":["import yaml from \"js-yaml\";\n\nconst DELIMITER = \"---\";\n\nexport function parseFrontmatter(raw: string): {\n data: Record<string, any>;\n content: string;\n} {\n const trimmed = raw.trimStart();\n if (!trimmed.startsWith(DELIMITER)) {\n return { data: {}, content: raw };\n }\n\n const end = trimmed.indexOf(`\\n${DELIMITER}`, DELIMITER.length);\n if (end === -1) {\n return { data: {}, content: raw };\n }\n\n const yamlStr = trimmed.slice(DELIMITER.length, end).trim();\n const data = yamlStr ? (yaml.load(yamlStr) as Record<string, unknown>) : {};\n const content = trimmed.slice(end + DELIMITER.length + 1).replace(/^\\n/, \"\");\n\n return { data: data ?? {}, content };\n}\n\nexport function stringifyFrontmatter(\n content: string,\n data: Record<string, unknown>,\n): string {\n const yamlStr = yaml.dump(data, { lineWidth: -1, noRefs: true }).trimEnd();\n return `---\\n${yamlStr}\\n---\\n${content}`;\n}\n","import { parseFrontmatter, stringifyFrontmatter } from \"../frontmatter.js\";\nimport type { ParsedSkill, SkillFrontmatter } from \"../types/skill.js\";\nimport type { CanonicalFormat } from \"../types/canonical.js\";\n\nconst REQUIRED_FIELDS = [\n \"schema_version\",\n \"name\",\n \"version\",\n \"author\",\n \"license\",\n \"description\",\n] as const;\n\nconst TRIGGER_REQUIRED = [\"description\", \"tags\", \"priority\"] as const;\n\nexport class SkillParseError extends Error {\n constructor(\n message: string,\n public readonly fields: string[] = [],\n ) {\n super(message);\n this.name = \"SkillParseError\";\n }\n}\n\n/**\n * Parse a SKILL.md string into frontmatter + body.\n */\nexport function parseSkill(content: string): ParsedSkill {\n const { data, content: body } = parseFrontmatter(content);\n\n const missing = REQUIRED_FIELDS.filter(\n (f) => data[f] === undefined || data[f] === \"\",\n );\n if (missing.length > 0) {\n throw new SkillParseError(\n `SKILL.md missing required fields: ${missing.join(\", \")}`,\n missing as unknown as string[],\n );\n }\n\n if (data.trigger) {\n const triggerMissing = TRIGGER_REQUIRED.filter(\n (f) => data.trigger[f] === undefined || data.trigger[f] === \"\",\n );\n if (triggerMissing.length > 0) {\n throw new SkillParseError(\n `trigger missing required fields: ${triggerMissing.join(\", \")}`,\n triggerMissing.map((f) => `trigger.${f}`),\n );\n }\n }\n\n return {\n frontmatter: data as SkillFrontmatter,\n body: body.trim(),\n };\n}\n\n/**\n * Serialize a ParsedSkill back to SKILL.md string.\n */\nexport function serializeSkill(skill: ParsedSkill): string {\n return stringifyFrontmatter(skill.body, skill.frontmatter as unknown as Record<string, unknown>);\n}\n\n/**\n * Split markdown body into preamble + H2 sections.\n */\nfunction splitBodyIntoSections(body: string): {\n preamble: string;\n sections: { label: string; content: string }[];\n} {\n const lines = body.split(\"\\n\");\n let preamble = \"\";\n const sections: { label: string; content: string }[] = [];\n let currentLabel: string | null = null;\n let currentLines: string[] = [];\n\n for (const line of lines) {\n const h2Match = line.match(/^## (.+)$/);\n if (h2Match) {\n if (currentLabel !== null) {\n sections.push({ label: currentLabel, content: currentLines.join(\"\\n\").trim() });\n } else {\n preamble = currentLines.join(\"\\n\").trim();\n }\n currentLabel = h2Match[1].trim();\n currentLines = [];\n } else {\n currentLines.push(line);\n }\n }\n\n // Flush last section\n if (currentLabel !== null) {\n sections.push({ label: currentLabel, content: currentLines.join(\"\\n\").trim() });\n } else {\n preamble = currentLines.join(\"\\n\").trim();\n }\n\n return { preamble, sections };\n}\n\n/**\n * Convert a ParsedSkill to CanonicalFormat.\n */\nexport function parsedSkillToCanonical(skill: ParsedSkill): CanonicalFormat {\n const fm = skill.frontmatter;\n\n const { preamble, sections } = splitBodyIntoSections(skill.body);\n\n const canonical: CanonicalFormat = {\n meta: {\n name: fm.name,\n version: fm.version,\n author: fm.author,\n license: fm.license,\n description: fm.description,\n schemaVersion: fm.schema_version,\n language: fm.language,\n repository: fm.repository,\n confidence: 1.0,\n },\n instructions: {\n content: preamble,\n ...(sections.length > 0 && {\n sections: sections.map((s) => ({\n type: \"custom\" as const,\n label: s.label,\n content: s.content,\n })),\n }),\n },\n rawBody: skill.body,\n sourceFormat: \"skill-md\",\n };\n\n if (fm.trigger) {\n canonical.scoping = {\n trigger: {\n description: fm.trigger.description,\n tags: fm.trigger.tags,\n priority: fm.trigger.priority,\n },\n filePatterns: fm.trigger.file_patterns,\n };\n }\n\n if (fm.security || fm.dependencies || fm.compatibility || fm.works_with) {\n canonical.dependencies = {};\n if (fm.dependencies) {\n canonical.dependencies.skills = fm.dependencies;\n }\n if (fm.security) {\n canonical.dependencies.security = {\n permissions: fm.security.permissions,\n fileScope: fm.security.file_scope,\n };\n }\n if (fm.compatibility) {\n canonical.dependencies.compatibility = {\n minContextTokens: fm.compatibility.min_context_tokens,\n requires: fm.compatibility.requires,\n models: fm.compatibility.models,\n };\n }\n if (fm.works_with) {\n canonical.dependencies.worksWith = fm.works_with;\n }\n }\n\n if (fm.docs) {\n canonical.knowledge = {\n docSources: fm.docs.sources.map((s) => ({\n type: s.type,\n url: s.url,\n scope: s.scope,\n depth: s.depth,\n include: s.include,\n exclude: s.exclude,\n label: s.label,\n blocks: s.blocks,\n snapshotVersion: s.snapshot_version,\n maxTokens: s.max_tokens,\n })),\n delivery: fm.docs.delivery,\n priorityPages: fm.docs.priority_pages,\n };\n }\n\n return canonical;\n}\n\n/**\n * Convert a CanonicalFormat back to ParsedSkill.\n */\nexport function canonicalToParsedSkill(canonical: CanonicalFormat): ParsedSkill {\n const fm: SkillFrontmatter = {\n schema_version: canonical.meta.schemaVersion,\n name: canonical.meta.name,\n version: canonical.meta.version,\n author: canonical.meta.author,\n license: canonical.meta.license,\n description: canonical.meta.description,\n };\n\n if (canonical.meta.language) {\n fm.language = canonical.meta.language;\n }\n if (canonical.meta.repository) {\n fm.repository = canonical.meta.repository;\n }\n\n if (canonical.scoping?.trigger) {\n fm.trigger = {\n description: canonical.scoping.trigger.description,\n tags: canonical.scoping.trigger.tags,\n priority: canonical.scoping.trigger.priority,\n };\n if (canonical.scoping.filePatterns) {\n fm.trigger.file_patterns = canonical.scoping.filePatterns;\n }\n }\n\n if (canonical.dependencies?.skills) {\n fm.dependencies = canonical.dependencies.skills;\n }\n if (canonical.dependencies?.security) {\n fm.security = {\n permissions: canonical.dependencies.security.permissions,\n file_scope: canonical.dependencies.security.fileScope,\n };\n }\n if (canonical.dependencies?.compatibility) {\n fm.compatibility = {\n min_context_tokens:\n canonical.dependencies.compatibility.minContextTokens ?? 0,\n requires: canonical.dependencies.compatibility.requires ?? [],\n models: canonical.dependencies.compatibility.models ?? [],\n };\n }\n if (canonical.dependencies?.worksWith) {\n fm.works_with = canonical.dependencies.worksWith;\n }\n\n if (canonical.knowledge?.docSources) {\n fm.docs = {\n sources: canonical.knowledge.docSources.map((s) => ({\n type: s.type,\n url: s.url,\n scope: s.scope,\n depth: s.depth,\n include: s.include,\n exclude: s.exclude,\n label: s.label,\n blocks: s.blocks,\n snapshot_version: s.snapshotVersion,\n max_tokens: s.maxTokens,\n })),\n delivery: canonical.knowledge.delivery,\n priority_pages: canonical.knowledge.priorityPages,\n };\n }\n\n const body = canonical.rawBody ?? canonical.instructions.content;\n\n return { frontmatter: fm, body };\n}\n","import { parseFrontmatter, stringifyFrontmatter } from \"../frontmatter.js\";\nimport type { ParsedSoul, SoulFrontmatter } from \"../types/soul.js\";\nimport type { CanonicalFormat } from \"../types/canonical.js\";\n\nconst REQUIRED_FIELDS = [\n \"name\",\n \"version\",\n \"author\",\n \"license\",\n \"description\",\n] as const;\n\nexport class SoulParseError extends Error {\n constructor(\n message: string,\n public readonly fields: string[] = [],\n ) {\n super(message);\n this.name = \"SoulParseError\";\n }\n}\n\n/**\n * Parse a SOUL.md string into frontmatter + body.\n */\nexport function parseSoul(content: string): ParsedSoul {\n const { data, content: body } = parseFrontmatter(content);\n\n const missing = REQUIRED_FIELDS.filter(\n (f) => data[f] === undefined || data[f] === \"\",\n );\n if (missing.length > 0) {\n throw new SoulParseError(\n `SOUL.md missing required fields: ${missing.join(\", \")}`,\n missing as unknown as string[],\n );\n }\n\n return {\n frontmatter: data as SoulFrontmatter,\n body: body.trim(),\n };\n}\n\n/**\n * Serialize a ParsedSoul back to SOUL.md string.\n */\nexport function serializeSoul(soul: ParsedSoul): string {\n return stringifyFrontmatter(soul.body, soul.frontmatter as unknown as Record<string, unknown>);\n}\n\n/**\n * Replace {{PLACEHOLDER}} tokens in body with provided values.\n */\nexport function resolveContextSlots(\n body: string,\n values: Record<string, string>,\n): string {\n return body.replace(/\\{\\{(\\w+)\\}\\}/g, (match, key: string) => {\n return values[key] ?? match;\n });\n}\n\n/**\n * Convert a ParsedSoul to CanonicalFormat.\n */\nexport function parsedSoulToCanonical(soul: ParsedSoul): CanonicalFormat {\n const fm = soul.frontmatter;\n const sb = fm.skillbase;\n\n const canonical: CanonicalFormat = {\n meta: {\n name: fm.name,\n version: fm.version,\n author: fm.author,\n license: fm.license,\n description: fm.description,\n schemaVersion: sb?.schema_version ?? 3,\n confidence: 1.0,\n },\n instructions: {\n content: soul.body,\n },\n rawBody: soul.body,\n sourceFormat: \"soul-md\",\n };\n\n if (sb?.trigger) {\n canonical.scoping = {\n trigger: {\n description: sb.trigger.description,\n tags: sb.trigger.tags,\n priority: sb.trigger.priority,\n },\n filePatterns: sb.trigger.file_patterns,\n };\n }\n\n if (sb?.skills) {\n canonical.dependencies = {\n ...canonical.dependencies,\n skills: sb.skills,\n };\n }\n\n if (sb?.constraints) {\n canonical.constraints = {\n always: sb.constraints.always,\n never: sb.constraints.never,\n };\n }\n\n if (sb?.identity) {\n canonical.identity = {\n role: sb.identity.role,\n tone: sb.identity.tone,\n expertise: sb.identity.expertise,\n };\n }\n\n if (sb?.settings) {\n canonical.settings = { ...sb.settings };\n }\n\n if (sb?.docs) {\n canonical.knowledge = {\n docSources: sb.docs.sources.map((s) => ({\n type: s.type,\n url: s.url,\n scope: s.scope,\n depth: s.depth,\n include: s.include,\n exclude: s.exclude,\n label: s.label,\n blocks: s.blocks,\n snapshotVersion: s.snapshot_version,\n maxTokens: s.max_tokens,\n })),\n delivery: sb.docs.delivery,\n priorityPages: sb.docs.priority_pages,\n };\n }\n\n return canonical;\n}\n\n/**\n * Convert a CanonicalFormat back to ParsedSoul.\n */\nexport function canonicalToParsedSoul(canonical: CanonicalFormat): ParsedSoul {\n const fm: SoulFrontmatter = {\n name: canonical.meta.name,\n version: canonical.meta.version,\n author: canonical.meta.author,\n license: canonical.meta.license,\n description: canonical.meta.description,\n };\n\n const hasSkillbase =\n canonical.scoping?.trigger ||\n canonical.dependencies?.skills ||\n canonical.constraints ||\n canonical.identity ||\n canonical.settings ||\n canonical.knowledge?.docSources;\n\n if (hasSkillbase) {\n fm.skillbase = {\n schema_version: canonical.meta.schemaVersion,\n };\n if (canonical.identity) {\n fm.skillbase.identity = {\n role: canonical.identity.role,\n tone: canonical.identity.tone,\n expertise: canonical.identity.expertise,\n };\n }\n if (canonical.scoping?.trigger) {\n fm.skillbase.trigger = {\n description: canonical.scoping.trigger.description,\n tags: canonical.scoping.trigger.tags,\n priority: canonical.scoping.trigger.priority,\n };\n if (canonical.scoping.filePatterns) {\n fm.skillbase.trigger.file_patterns = canonical.scoping.filePatterns;\n }\n }\n if (canonical.dependencies?.skills) {\n fm.skillbase.skills = canonical.dependencies.skills;\n }\n if (canonical.constraints) {\n fm.skillbase.constraints = {\n always: canonical.constraints.always,\n never: canonical.constraints.never,\n };\n }\n if (canonical.settings) {\n fm.skillbase.settings = { ...canonical.settings };\n }\n if (canonical.knowledge?.docSources) {\n fm.skillbase.docs = {\n sources: canonical.knowledge.docSources.map((s) => ({\n type: s.type,\n url: s.url,\n scope: s.scope,\n depth: s.depth,\n include: s.include,\n exclude: s.exclude,\n label: s.label,\n blocks: s.blocks,\n snapshot_version: s.snapshotVersion,\n max_tokens: s.maxTokens,\n })),\n delivery: canonical.knowledge.delivery,\n priority_pages: canonical.knowledge.priorityPages,\n };\n }\n }\n\n const body = canonical.rawBody ?? canonical.instructions.content;\n\n return { frontmatter: fm, body };\n}\n","import Ajv from \"ajv\";\nimport type { ValidationResult } from \"../types/common.js\";\n\nconst skillFrontmatterSchema = {\n type: \"object\" as const,\n required: [\n \"schema_version\",\n \"name\",\n \"version\",\n \"description\",\n \"author\",\n \"license\",\n ],\n additionalProperties: false,\n properties: {\n schema_version: { type: \"integer\" as const, minimum: 1 },\n name: {\n type: \"string\" as const,\n pattern: \"^[a-z0-9][a-z0-9-]*$\",\n },\n version: {\n type: \"string\" as const,\n pattern: \"^\\\\d+\\\\.\\\\d+\\\\.\\\\d+\",\n },\n language: { type: \"string\" as const, enum: [\"en\"], nullable: true },\n description: { type: \"string\" as const, minLength: 1 },\n trigger: {\n type: \"object\" as const,\n nullable: true,\n required: [\"description\", \"tags\", \"priority\"],\n additionalProperties: false,\n properties: {\n description: { type: \"string\" as const, minLength: 1 },\n tags: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n minItems: 1,\n },\n file_patterns: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n nullable: true,\n },\n priority: { type: \"integer\" as const, minimum: 0, maximum: 100 },\n },\n },\n dependencies: {\n type: \"object\" as const,\n nullable: true,\n additionalProperties: { type: \"string\" as const },\n },\n compatibility: {\n type: \"object\" as const,\n nullable: true,\n required: [\"min_context_tokens\", \"requires\", \"models\"],\n additionalProperties: false,\n properties: {\n min_context_tokens: { type: \"integer\" as const, minimum: 0 },\n requires: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n },\n models: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n },\n },\n },\n works_with: {\n type: \"array\" as const,\n nullable: true,\n items: {\n type: \"object\" as const,\n required: [\"skill\", \"relationship\", \"description\"],\n additionalProperties: false,\n properties: {\n skill: { type: \"string\" as const },\n relationship: {\n type: \"string\" as const,\n enum: [\"input\", \"output\", \"parallel\"],\n },\n description: { type: \"string\" as const },\n },\n },\n },\n security: {\n type: \"object\" as const,\n nullable: true,\n required: [\"permissions\"],\n additionalProperties: false,\n properties: {\n permissions: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n },\n file_scope: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n nullable: true,\n },\n integrity: { type: \"string\" as const, nullable: true },\n },\n },\n docs: {\n type: \"object\" as const,\n nullable: true,\n additionalProperties: false,\n properties: {\n sources: {\n type: \"array\" as const,\n items: {\n type: \"object\" as const,\n required: [\"type\", \"url\"],\n additionalProperties: false,\n properties: {\n type: {\n type: \"string\" as const,\n enum: [\"url\", \"llms-txt\", \"github\"],\n },\n url: { type: \"string\" as const, minLength: 1 },\n scope: {\n type: \"string\" as const,\n enum: [\"crawl\", \"page\", \"sitemap\"],\n nullable: true,\n },\n depth: {\n type: \"integer\" as const,\n minimum: 0,\n maximum: 5,\n nullable: true,\n },\n include: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n nullable: true,\n },\n exclude: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n nullable: true,\n },\n label: { type: \"string\" as const, nullable: true },\n blocks: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n nullable: true,\n },\n snapshot_version: { type: \"string\" as const, nullable: true },\n max_tokens: {\n type: \"integer\" as const,\n minimum: 0,\n nullable: true,\n },\n },\n },\n },\n delivery: {\n type: \"string\" as const,\n enum: [\"local\", \"remote\", \"auto\"],\n nullable: true,\n },\n priority_pages: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n nullable: true,\n },\n },\n },\n author: { type: \"string\" as const, minLength: 1 },\n license: { type: \"string\" as const, minLength: 1 },\n repository: { type: \"string\" as const, nullable: true },\n },\n};\n\nconst ajv = new Ajv.default({ allErrors: true });\nconst validateFn = ajv.compile(skillFrontmatterSchema);\n\nexport { type ValidationResult };\n\nexport function validateSkillFrontmatter(data: unknown): ValidationResult {\n const valid = validateFn(data);\n if (valid) {\n return { valid: true, errors: [] };\n }\n const errors = (validateFn.errors ?? []).map(\n (e: { instancePath?: string; message?: string }) => {\n const path = e.instancePath || \"/\";\n return `${path}: ${e.message}`;\n },\n );\n return { valid: false, errors };\n}\n","import Ajv from \"ajv\";\nimport type { ValidationResult } from \"../types/common.js\";\n\nconst soulFrontmatterSchema = {\n type: \"object\" as const,\n required: [\"name\", \"version\", \"author\", \"license\", \"description\"],\n additionalProperties: true,\n properties: {\n name: {\n type: \"string\" as const,\n pattern: \"^[a-z0-9][a-z0-9-]*$\",\n },\n version: {\n type: \"string\" as const,\n pattern: \"^\\\\d+\\\\.\\\\d+\\\\.\\\\d+\",\n },\n description: { type: \"string\" as const, minLength: 1 },\n author: { type: \"string\" as const, minLength: 1 },\n license: { type: \"string\" as const, minLength: 1 },\n skillbase: {\n type: \"object\" as const,\n nullable: true,\n additionalProperties: true,\n properties: {\n schema_version: { type: \"integer\" as const, minimum: 1 },\n trigger: {\n type: \"object\" as const,\n nullable: true,\n required: [\"description\", \"tags\", \"priority\"],\n properties: {\n description: { type: \"string\" as const, minLength: 1 },\n tags: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n minItems: 1,\n },\n priority: { type: \"integer\" as const, minimum: 0, maximum: 100 },\n },\n },\n skills: {\n type: \"object\" as const,\n nullable: true,\n additionalProperties: { type: \"string\" as const },\n },\n settings: {\n type: \"object\" as const,\n nullable: true,\n properties: {\n temperature: { type: \"number\" as const, minimum: 0, maximum: 2 },\n top_p: { type: \"number\" as const, minimum: 0, maximum: 1 },\n },\n },\n },\n },\n },\n};\n\nconst ajv = new Ajv.default({ allErrors: true });\nconst validateFn = ajv.compile(soulFrontmatterSchema);\n\nexport { type ValidationResult };\n\nexport function validateSoulFrontmatter(data: unknown): ValidationResult {\n const valid = validateFn(data);\n if (valid) {\n return { valid: true, errors: [] };\n }\n const errors = (validateFn.errors ?? []).map(\n (e: { instancePath?: string; message?: string }) => {\n const path = e.instancePath || \"/\";\n return `${path}: ${e.message}`;\n },\n );\n return { valid: false, errors };\n}\n","import type { ParsedSkill, SkillFrontmatter } from \"../types/skill.js\";\n\nexport interface VercelFrontmatter {\n name: string;\n description: string;\n license?: string;\n metadata?: Record<string, unknown>;\n \"allowed-tools\"?: string[];\n \"user-invocable\"?: boolean;\n [key: string]: unknown;\n}\n\nconst STOP_WORDS = new Set([\n \"a\", \"an\", \"the\", \"and\", \"or\", \"for\", \"to\", \"in\", \"on\", \"of\", \"is\", \"it\",\n \"with\", \"that\", \"this\", \"use\", \"when\", \"how\", \"what\", \"your\", \"you\",\n]);\n\nexport function inferTags(name: string, description: string): string[] {\n const tags = new Set<string>();\n\n for (const token of name.split(\"-\")) {\n if (token.length > 1 && !STOP_WORDS.has(token)) {\n tags.add(token);\n }\n }\n\n const words = description\n .toLowerCase()\n .replace(/[^a-z0-9\\s-]/g, \"\")\n .split(/\\s+/)\n .filter((w) => w.length > 2 && !STOP_WORDS.has(w));\n\n for (const word of words.slice(0, 10)) {\n if (tags.size >= 8) break;\n tags.add(word);\n }\n\n if (tags.size === 0) {\n tags.add(name);\n }\n\n return [...tags].slice(0, 8);\n}\n\nconst TOOL_TO_PERMISSION: Record<string, string> = {\n bash: \"bash:execute\",\n file_read: \"file:read\",\n file_write: \"file:write\",\n web_fetch: \"network:allowlist\",\n terminal: \"bash:execute\",\n shell: \"bash:execute\",\n};\n\nfunction mapPermissions(allowedTools?: string[]): string[] {\n if (!allowedTools || allowedTools.length === 0) return [];\n\n const permissions: string[] = [];\n for (const tool of allowedTools) {\n const normalized = tool.toLowerCase().replace(/-/g, \"_\");\n const mapped = TOOL_TO_PERMISSION[normalized];\n if (mapped && !permissions.includes(mapped)) {\n permissions.push(mapped);\n }\n }\n return permissions;\n}\n\nexport function isVercelFormat(data: Record<string, unknown>): boolean {\n return (\n !data.schema_version &&\n typeof data.name === \"string\" &&\n typeof data.description === \"string\"\n );\n}\n\nexport function convertVercelToSpm(\n vercel: VercelFrontmatter,\n body: string,\n options: { author: string; license?: string; repository?: string },\n): ParsedSkill {\n const name = vercel.name\n .toLowerCase()\n .replace(/[^a-z0-9-]/g, \"-\")\n .replace(/-+/g, \"-\")\n .replace(/^-|-$/g, \"\");\n\n const frontmatter: SkillFrontmatter = {\n schema_version: 3,\n name,\n version: \"1.0.0\",\n author: options.author,\n license: vercel.license || options.license || \"MIT\",\n description: vercel.description,\n language: \"en\",\n trigger: {\n description: vercel.description,\n tags: inferTags(name, vercel.description),\n priority: 50,\n },\n security: {\n permissions: mapPermissions(vercel[\"allowed-tools\"]),\n },\n };\n\n if (options.repository) {\n frontmatter.repository = options.repository;\n }\n\n return { frontmatter, body: body.trim() };\n}\n","import type { SoulFrontmatter, SoulSkillbaseBlock } from \"../types/soul.js\";\nimport type { LegacyPersonaManifest } from \"../types/legacy.js\";\n\n/**\n * Convert a legacy PersonaManifest to SoulFrontmatter.\n */\nexport function legacyPersonaToSoul(\n manifest: LegacyPersonaManifest,\n): SoulFrontmatter {\n const soul: SoulFrontmatter = {\n name: manifest.name,\n version: manifest.version,\n author: manifest.author,\n license: manifest.license,\n description: manifest.description,\n };\n\n const skillbase: SoulSkillbaseBlock = {\n schema_version: 3,\n };\n\n if (manifest.skills && Object.keys(manifest.skills).length > 0) {\n skillbase.skills = manifest.skills;\n }\n\n if (manifest.settings) {\n skillbase.settings = manifest.settings;\n }\n\n soul.skillbase = skillbase;\n return soul;\n}\n\n/**\n * Build markdown body from legacy persona character fields.\n */\nexport function buildLegacyBody(manifest: LegacyPersonaManifest): string {\n const parts: string[] = [];\n\n parts.push(`## Role\\n\\n${manifest.character.role}`);\n\n if (manifest.character.tone) {\n parts.push(`## Tone\\n\\n${manifest.character.tone}`);\n }\n\n if (\n manifest.character.guidelines &&\n manifest.character.guidelines.length > 0\n ) {\n const items = manifest.character.guidelines.map((g) => `- ${g}`).join(\"\\n\");\n parts.push(`## Guidelines\\n\\n${items}`);\n }\n\n if (manifest.character.instructions) {\n parts.push(`## Instructions\\n\\n${manifest.character.instructions}`);\n }\n\n return parts.join(\"\\n\\n\");\n}\n","/**\n * Convert a string to a valid skill name slug.\n */\nexport function slugify(input: string): string {\n return input\n .toLowerCase()\n .replace(/[^a-z0-9-]/g, \"-\")\n .replace(/-+/g, \"-\")\n .replace(/^-|-$/g, \"\")\n || \"unnamed\";\n}\n\n/**\n * Extract a meaningful name from a filename.\n * \"CLAUDE.md\" → \"claude\", \".cursorrules\" → \"cursorrules\", \"api-rules.mdc\" → \"api-rules\"\n */\nexport function extractName(filename: string): string {\n const base = filename.split(\"/\").pop() ?? filename;\n return base\n .replace(/^\\./, \"\")\n .replace(/\\.(md|mdc|txt|instructions\\.md)$/i, \"\")\n .replace(/^(CLAUDE|AGENTS|copilot-instructions)$/i, (m) =>\n m.toLowerCase(),\n );\n}\n","import type { CanonicalFormat } from \"../../types/canonical.js\";\nimport type { Importer, ImportOptions, ImportResult } from \"./types.js\";\nimport { slugify, extractName } from \"../../utils/slugify.js\";\n\n/**\n * Importer for legacy .cursorrules files.\n * Plain markdown, no frontmatter. Everything is instructions.\n */\nexport const cursorRulesImporter: Importer = {\n id: \"cursor-rules\",\n name: \"Cursor Rules (legacy)\",\n filePatterns: [\".cursorrules\"],\n\n import(content: string, options?: ImportOptions): ImportResult {\n const warnings: string[] = [];\n const reviewNeeded: string[] = [];\n const trimmed = content.trim();\n\n if (!trimmed) {\n warnings.push(\"Empty .cursorrules file\");\n }\n\n const name = options?.filename\n ? slugify(extractName(options.filename))\n : \"imported-cursor-rules\";\n\n reviewNeeded.push(\n \"meta.name\",\n \"meta.description\",\n \"identity\",\n \"scoping\",\n \"constraints\",\n );\n\n const canonical: CanonicalFormat = {\n meta: {\n name,\n version: \"1.0.0\",\n author: options?.defaultAuthor ?? \"unknown\",\n license: options?.defaultLicense ?? \"MIT\",\n description: \"Imported from .cursorrules\",\n schemaVersion: 3,\n confidence: 0.5,\n },\n instructions: {\n content: trimmed,\n },\n sourceFormat: \"cursor-rules\",\n };\n\n return { canonical, warnings, reviewNeeded };\n },\n};\n","import { parseFrontmatter } from \"../../frontmatter.js\";\nimport type { CanonicalFormat } from \"../../types/canonical.js\";\nimport type { Importer, ImportOptions, ImportResult } from \"./types.js\";\nimport { slugify, extractName } from \"../../utils/slugify.js\";\n\ninterface MdcFrontmatter {\n description?: string;\n globs?: string;\n alwaysApply?: boolean;\n}\n\n/**\n * Importer for Cursor MDC (.mdc) rule files.\n * YAML frontmatter with description, globs, alwaysApply + markdown body.\n */\nexport const cursorMdcImporter: Importer = {\n id: \"cursor-mdc\",\n name: \"Cursor MDC Rules\",\n filePatterns: [\".cursor/rules/*.mdc\", \"*.mdc\"],\n\n import(content: string, options?: ImportOptions): ImportResult {\n const warnings: string[] = [];\n const reviewNeeded: string[] = [];\n\n const { data, content: body } = parseFrontmatter(content);\n const fm = data as MdcFrontmatter;\n const trimmed = body.trim();\n\n const name = options?.filename\n ? slugify(extractName(options.filename))\n : \"imported-mdc-rule\";\n\n const canonical: CanonicalFormat = {\n meta: {\n name,\n version: \"1.0.0\",\n author: options?.defaultAuthor ?? \"unknown\",\n license: options?.defaultLicense ?? \"MIT\",\n description: fm.description || \"Imported from Cursor MDC\",\n schemaVersion: 3,\n confidence: 0.6,\n },\n instructions: {\n content: trimmed,\n },\n sourceFormat: \"cursor-mdc\",\n };\n\n // Map globs to scoping\n if (fm.globs || fm.alwaysApply !== undefined) {\n canonical.scoping = {};\n if (fm.globs) {\n canonical.scoping.globs = fm.globs\n .split(\",\")\n .map((g) => g.trim())\n .filter(Boolean);\n }\n if (fm.description) {\n canonical.scoping.trigger = {\n description: fm.description,\n tags: [],\n priority: fm.alwaysApply ? 90 : 50,\n };\n }\n }\n\n if (!fm.description) {\n reviewNeeded.push(\"meta.description\");\n }\n reviewNeeded.push(\"meta.name\", \"identity\", \"constraints\");\n\n return { canonical, warnings, reviewNeeded };\n },\n};\n","import { parseFrontmatter } from \"../../frontmatter.js\";\nimport type { CanonicalFormat } from \"../../types/canonical.js\";\nimport type { Importer, ImportOptions, ImportResult } from \"./types.js\";\nimport { slugify, extractName } from \"../../utils/slugify.js\";\n\ninterface ClaudeMdFrontmatter {\n paths?: string[];\n}\n\n/**\n * Importer for CLAUDE.md files.\n * Plain markdown, optionally with paths frontmatter (for .claude/rules/*.md).\n */\nexport const claudeMdImporter: Importer = {\n id: \"claude-md\",\n name: \"CLAUDE.md (Claude Code)\",\n filePatterns: [\"CLAUDE.md\", \".claude/rules/*.md\"],\n\n import(content: string, options?: ImportOptions): ImportResult {\n const warnings: string[] = [];\n const reviewNeeded: string[] = [];\n\n const { data, content: body } = parseFrontmatter(content);\n const fm = data as ClaudeMdFrontmatter;\n const trimmed = body.trim();\n\n const name = options?.filename\n ? slugify(extractName(options.filename))\n : \"imported-claude-md\";\n\n const canonical: CanonicalFormat = {\n meta: {\n name,\n version: \"1.0.0\",\n author: options?.defaultAuthor ?? \"unknown\",\n license: options?.defaultLicense ?? \"MIT\",\n description: \"Imported from CLAUDE.md\",\n schemaVersion: 3,\n confidence: 0.5,\n },\n instructions: {\n content: trimmed,\n },\n sourceFormat: \"claude-md\",\n };\n\n // Map paths to scoping\n if (fm.paths && fm.paths.length > 0) {\n canonical.scoping = {\n globs: fm.paths,\n };\n }\n\n reviewNeeded.push(\n \"meta.name\",\n \"meta.description\",\n \"identity\",\n \"scoping\",\n \"constraints\",\n );\n\n return { canonical, warnings, reviewNeeded };\n },\n};\n","import type { CanonicalFormat } from \"../../types/canonical.js\";\nimport type { Importer, ImportOptions, ImportResult } from \"./types.js\";\nimport { slugify, extractName } from \"../../utils/slugify.js\";\n\n/**\n * Importer for AGENTS.md files (GitHub Copilot coding agents).\n * Plain markdown, no frontmatter.\n */\nexport const agentsMdImporter: Importer = {\n id: \"agents-md\",\n name: \"AGENTS.md (GitHub Copilot)\",\n filePatterns: [\"AGENTS.md\"],\n\n import(content: string, options?: ImportOptions): ImportResult {\n const warnings: string[] = [];\n const reviewNeeded: string[] = [];\n const trimmed = content.trim();\n\n const name = options?.filename\n ? slugify(extractName(options.filename))\n : \"imported-agents-md\";\n\n const canonical: CanonicalFormat = {\n meta: {\n name,\n version: \"1.0.0\",\n author: options?.defaultAuthor ?? \"unknown\",\n license: options?.defaultLicense ?? \"MIT\",\n description: \"Imported from AGENTS.md\",\n schemaVersion: 3,\n confidence: 0.5,\n },\n instructions: {\n content: trimmed,\n },\n sourceFormat: \"agents-md\",\n };\n\n reviewNeeded.push(\n \"meta.name\",\n \"meta.description\",\n \"identity\",\n \"scoping\",\n \"constraints\",\n );\n\n return { canonical, warnings, reviewNeeded };\n },\n};\n","import { parseFrontmatter } from \"../../frontmatter.js\";\nimport type { CanonicalFormat } from \"../../types/canonical.js\";\nimport type { Importer, ImportOptions, ImportResult } from \"./types.js\";\nimport { slugify, extractName } from \"../../utils/slugify.js\";\n\ninterface WindsurfFrontmatter {\n trigger?: \"always_on\" | \"model_decision\" | \"manual\" | \"glob\";\n globs?: string;\n description?: string;\n}\n\n/**\n * Importer for Windsurf rules.\n * .windsurfrules (legacy, plain text) or .windsurf/rules/*.md (with frontmatter).\n */\nexport const windsurfRulesImporter: Importer = {\n id: \"windsurf-rules\",\n name: \"Windsurf Rules\",\n filePatterns: [\".windsurfrules\", \".windsurf/rules/*.md\"],\n\n import(content: string, options?: ImportOptions): ImportResult {\n const warnings: string[] = [];\n const reviewNeeded: string[] = [];\n\n const { data, content: body } = parseFrontmatter(content);\n const fm = data as WindsurfFrontmatter;\n const trimmed = body.trim();\n\n const name = options?.filename\n ? slugify(extractName(options.filename))\n : \"imported-windsurf-rules\";\n\n const canonical: CanonicalFormat = {\n meta: {\n name,\n version: \"1.0.0\",\n author: options?.defaultAuthor ?? \"unknown\",\n license: options?.defaultLicense ?? \"MIT\",\n description: fm.description || \"Imported from Windsurf rules\",\n schemaVersion: 3,\n confidence: 0.5,\n },\n instructions: {\n content: trimmed,\n },\n sourceFormat: \"windsurf-rules\",\n };\n\n if (fm.trigger === \"glob\" && fm.globs) {\n canonical.scoping = {\n globs: fm.globs\n .split(\",\")\n .map((g) => g.trim())\n .filter(Boolean),\n };\n }\n\n reviewNeeded.push(\n \"meta.name\",\n \"meta.description\",\n \"identity\",\n \"scoping\",\n \"constraints\",\n );\n\n return { canonical, warnings, reviewNeeded };\n },\n};\n","import { parseFrontmatter } from \"../../frontmatter.js\";\nimport type { CanonicalFormat } from \"../../types/canonical.js\";\nimport type { Importer, ImportOptions, ImportResult } from \"./types.js\";\nimport { slugify, extractName } from \"../../utils/slugify.js\";\n\ninterface CopilotFrontmatter {\n applyTo?: string;\n}\n\n/**\n * Importer for GitHub Copilot instructions.\n * copilot-instructions.md (no frontmatter) or *.instructions.md (with applyTo frontmatter).\n */\nexport const copilotImporter: Importer = {\n id: \"copilot\",\n name: \"GitHub Copilot Instructions\",\n filePatterns: [\n \".github/copilot-instructions.md\",\n \".github/instructions/*.instructions.md\",\n ],\n\n import(content: string, options?: ImportOptions): ImportResult {\n const warnings: string[] = [];\n const reviewNeeded: string[] = [];\n\n const { data, content: body } = parseFrontmatter(content);\n const fm = data as CopilotFrontmatter;\n const trimmed = body.trim();\n\n const name = options?.filename\n ? slugify(extractName(options.filename))\n : \"imported-copilot\";\n\n const canonical: CanonicalFormat = {\n meta: {\n name,\n version: \"1.0.0\",\n author: options?.defaultAuthor ?? \"unknown\",\n license: options?.defaultLicense ?? \"MIT\",\n description: \"Imported from Copilot instructions\",\n schemaVersion: 3,\n confidence: 0.5,\n },\n instructions: {\n content: trimmed,\n },\n sourceFormat: \"copilot\",\n };\n\n if (fm.applyTo) {\n canonical.scoping = {\n globs: [fm.applyTo],\n };\n }\n\n reviewNeeded.push(\n \"meta.name\",\n \"meta.description\",\n \"identity\",\n \"scoping\",\n \"constraints\",\n );\n\n return { canonical, warnings, reviewNeeded };\n },\n};\n","import { parseFrontmatter } from \"../../frontmatter.js\";\nimport type { CanonicalFormat } from \"../../types/canonical.js\";\nimport type { Importer, ImportOptions, ImportResult } from \"./types.js\";\nimport { slugify, extractName } from \"../../utils/slugify.js\";\n\ninterface ClineFrontmatter {\n description?: string;\n globs?: string;\n paths?: string[];\n}\n\n/**\n * Importer for Cline rules.\n * Single .clinerules file (plain text) or .clinerules/*.md (with optional frontmatter).\n */\nexport const clineImporter: Importer = {\n id: \"cline\",\n name: \"Cline Rules\",\n filePatterns: [\".clinerules\", \".clinerules/*.md\", \".clinerules/*.txt\"],\n\n import(content: string, options?: ImportOptions): ImportResult {\n const warnings: string[] = [];\n const reviewNeeded: string[] = [];\n\n const { data, content: body } = parseFrontmatter(content);\n const fm = data as ClineFrontmatter;\n const trimmed = body.trim();\n\n const name = options?.filename\n ? slugify(extractName(options.filename))\n : \"imported-cline-rules\";\n\n const canonical: CanonicalFormat = {\n meta: {\n name,\n version: \"1.0.0\",\n author: options?.defaultAuthor ?? \"unknown\",\n license: options?.defaultLicense ?? \"MIT\",\n description: fm.description || \"Imported from Cline rules\",\n schemaVersion: 3,\n confidence: 0.5,\n },\n instructions: {\n content: trimmed,\n },\n sourceFormat: \"cline\",\n };\n\n // Map glob patterns to scoping\n const globs: string[] = [];\n if (fm.globs) {\n globs.push(\n ...fm.globs\n .split(\",\")\n .map((g) => g.trim())\n .filter(Boolean),\n );\n }\n if (fm.paths) {\n globs.push(...fm.paths);\n }\n if (globs.length > 0) {\n canonical.scoping = { globs };\n }\n\n reviewNeeded.push(\n \"meta.name\",\n \"meta.description\",\n \"identity\",\n \"scoping\",\n \"constraints\",\n );\n\n return { canonical, warnings, reviewNeeded };\n },\n};\n","import type { SourceFormat } from \"../../types/canonical.js\";\nimport type { Importer, ImportOptions, ImportResult } from \"./types.js\";\nimport { cursorRulesImporter } from \"./cursor-rules.js\";\nimport { cursorMdcImporter } from \"./cursor-mdc.js\";\nimport { claudeMdImporter } from \"./claude-md.js\";\nimport { agentsMdImporter } from \"./agents-md.js\";\nimport { windsurfRulesImporter } from \"./windsurf-rules.js\";\nimport { copilotImporter } from \"./copilot.js\";\nimport { clineImporter } from \"./cline.js\";\n\nconst importers: Importer[] = [\n cursorRulesImporter,\n cursorMdcImporter,\n claudeMdImporter,\n agentsMdImporter,\n windsurfRulesImporter,\n copilotImporter,\n clineImporter,\n];\n\n/**\n * Detect format from filename.\n */\nexport function detectFormat(filename: string): SourceFormat | null {\n const lower = filename.toLowerCase();\n const base = lower.split(\"/\").pop() ?? lower;\n\n if (base === \".cursorrules\") return \"cursor-rules\";\n if (base.endsWith(\".mdc\")) return \"cursor-mdc\";\n if (base === \"claude.md\") return \"claude-md\";\n if (base === \"agents.md\") return \"agents-md\";\n if (base === \".windsurfrules\") return \"windsurf-rules\";\n if (lower.includes(\".windsurf/rules/\")) return \"windsurf-rules\";\n if (base === \"copilot-instructions.md\") return \"copilot\";\n if (base.endsWith(\".instructions.md\")) return \"copilot\";\n if (base === \".clinerules\") return \"cline\";\n if (lower.includes(\".clinerules/\")) return \"cline\";\n if (lower.includes(\".claude/rules/\")) return \"claude-md\";\n\n return null;\n}\n\n/**\n * Get importer by format ID.\n */\nexport function getImporter(format: SourceFormat): Importer | null {\n return importers.find((i) => i.id === format) ?? null;\n}\n\n/**\n * Import content from a foreign format.\n */\nexport function importFromFormat(\n content: string,\n format: SourceFormat,\n options?: ImportOptions,\n): ImportResult {\n const importer = getImporter(format);\n if (!importer) {\n throw new Error(`No importer for format: ${format}`);\n }\n return importer.import(content, options);\n}\n\n/**\n * List all available importers.\n */\nexport function listImporters(): Importer[] {\n return [...importers];\n}\n","import type { CanonicalFormat } from \"../types/canonical.js\";\nimport type { CompileOptions } from \"./types.js\";\n\n/**\n * Build inline knowledge section from knowledge blocks.\n */\nexport function buildKnowledgeSection(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n): string | null {\n const blocks = options?.knowledgeBlocks ?? canonical.knowledge?.inlineBlocks;\n if (!blocks || blocks.length === 0 || !options?.inlineKnowledge) {\n return null;\n }\n\n const parts = [\"## Reference Documentation\", \"\"];\n for (const block of blocks) {\n parts.push(`### ${block.label}`, \"\", block.content, \"\");\n }\n\n return parts.join(\"\\n\").trimEnd();\n}\n\n/**\n * Build a flat markdown body from canonical format for targets\n * that don't support structured frontmatter.\n */\nexport function buildFlatBody(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n): string {\n const parts: string[] = [];\n\n // Identity preamble\n if (canonical.identity) {\n if (canonical.identity.role) {\n parts.push(canonical.identity.role, \"\");\n }\n if (canonical.identity.tone) {\n parts.push(`Tone: ${canonical.identity.tone}`, \"\");\n }\n }\n\n // Main instructions\n parts.push(canonical.rawBody ?? canonical.instructions.content);\n\n // Constraints\n if (canonical.constraints) {\n if (\n canonical.constraints.always &&\n canonical.constraints.always.length > 0\n ) {\n parts.push(\n \"\",\n \"## Always\",\n \"\",\n ...canonical.constraints.always.map((c) => `- ${c}`),\n );\n }\n if (canonical.constraints.never && canonical.constraints.never.length > 0) {\n parts.push(\n \"\",\n \"## Never\",\n \"\",\n ...canonical.constraints.never.map((c) => `- ${c}`),\n );\n }\n }\n\n // Inline knowledge\n const knowledgeSection = buildKnowledgeSection(canonical, options);\n if (knowledgeSection) {\n parts.push(\"\", knowledgeSection);\n }\n\n return parts.join(\"\\n\").trim();\n}\n","import { stringifyFrontmatter } from \"../frontmatter.js\";\nimport type { CanonicalFormat } from \"../types/canonical.js\";\nimport type { SkillFrontmatter } from \"../types/skill.js\";\nimport type { Compiler, CompileResult, CompileOptions } from \"./types.js\";\nimport { buildKnowledgeSection } from \"./utils.js\";\n\nexport const skillMdCompiler: Compiler = {\n id: \"skill-md\",\n name: \"SKILL.md (Skillbase)\",\n multiFile: false,\n supports: {\n frontmatter: true,\n scoping: true,\n filePatterns: true,\n constraints: true,\n dependencies: true,\n knowledge: true,\n },\n\n compile(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n ): CompileResult {\n const warnings: string[] = [];\n const fm: SkillFrontmatter = {\n schema_version: canonical.meta.schemaVersion,\n name: canonical.meta.name,\n version: canonical.meta.version,\n author: canonical.meta.author,\n license: canonical.meta.license,\n description: canonical.meta.description,\n };\n\n if (canonical.meta.language) fm.language = canonical.meta.language;\n if (canonical.meta.repository) fm.repository = canonical.meta.repository;\n\n if (canonical.scoping?.trigger) {\n fm.trigger = {\n description: canonical.scoping.trigger.description,\n tags: canonical.scoping.trigger.tags,\n priority: canonical.scoping.trigger.priority,\n };\n if (canonical.scoping.filePatterns) {\n fm.trigger.file_patterns = canonical.scoping.filePatterns;\n }\n }\n\n if (canonical.dependencies?.skills) {\n fm.dependencies = canonical.dependencies.skills;\n }\n if (canonical.dependencies?.security) {\n fm.security = {\n permissions: canonical.dependencies.security.permissions,\n file_scope: canonical.dependencies.security.fileScope,\n };\n }\n if (canonical.dependencies?.compatibility) {\n fm.compatibility = {\n min_context_tokens:\n canonical.dependencies.compatibility.minContextTokens ?? 0,\n requires: canonical.dependencies.compatibility.requires ?? [],\n models: canonical.dependencies.compatibility.models ?? [],\n };\n }\n if (canonical.dependencies?.worksWith) {\n fm.works_with = canonical.dependencies.worksWith;\n }\n\n if (canonical.knowledge?.docSources) {\n fm.docs = {\n sources: canonical.knowledge.docSources.map((s) => ({\n type: s.type,\n url: s.url,\n scope: s.scope,\n depth: s.depth,\n include: s.include,\n exclude: s.exclude,\n label: s.label,\n blocks: s.blocks,\n snapshot_version: s.snapshotVersion,\n max_tokens: s.maxTokens,\n })),\n delivery: canonical.knowledge.delivery,\n priority_pages: canonical.knowledge.priorityPages,\n };\n }\n\n let body = canonical.rawBody ?? canonical.instructions.content;\n\n // Append inline knowledge if requested\n const knowledgeSection = buildKnowledgeSection(canonical, options);\n if (knowledgeSection) {\n body = body + \"\\n\\n\" + knowledgeSection;\n }\n\n const content = stringifyFrontmatter(body, fm as unknown as Record<string, unknown>);\n\n return {\n files: [{ path: \"SKILL.md\", content }],\n droppedFeatures: [],\n warnings,\n };\n },\n};\n","import { stringifyFrontmatter } from \"../frontmatter.js\";\nimport type { CanonicalFormat } from \"../types/canonical.js\";\nimport type { SoulFrontmatter } from \"../types/soul.js\";\nimport type { Compiler, CompileResult, CompileOptions } from \"./types.js\";\nimport { buildKnowledgeSection } from \"./utils.js\";\n\nexport const soulMdCompiler: Compiler = {\n id: \"soul-md\",\n name: \"SOUL.md (Skillbase)\",\n multiFile: false,\n supports: {\n frontmatter: true,\n scoping: true,\n filePatterns: true,\n constraints: true,\n dependencies: true,\n knowledge: true,\n },\n\n compile(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n ): CompileResult {\n const fm: SoulFrontmatter = {\n name: canonical.meta.name,\n version: canonical.meta.version,\n author: canonical.meta.author,\n license: canonical.meta.license,\n description: canonical.meta.description,\n };\n\n const hasSkillbase =\n canonical.scoping?.trigger ||\n canonical.dependencies?.skills ||\n canonical.constraints ||\n canonical.identity ||\n canonical.settings ||\n canonical.knowledge?.docSources;\n\n if (hasSkillbase) {\n fm.skillbase = {\n schema_version: canonical.meta.schemaVersion,\n };\n if (canonical.identity) {\n fm.skillbase.identity = {\n role: canonical.identity.role,\n tone: canonical.identity.tone,\n expertise: canonical.identity.expertise,\n };\n }\n if (canonical.scoping?.trigger) {\n fm.skillbase.trigger = {\n description: canonical.scoping.trigger.description,\n tags: canonical.scoping.trigger.tags,\n priority: canonical.scoping.trigger.priority,\n };\n if (canonical.scoping.filePatterns) {\n fm.skillbase.trigger.file_patterns = canonical.scoping.filePatterns;\n }\n }\n if (canonical.dependencies?.skills) {\n fm.skillbase.skills = canonical.dependencies.skills;\n }\n if (canonical.constraints) {\n fm.skillbase.constraints = {\n always: canonical.constraints.always,\n never: canonical.constraints.never,\n };\n }\n if (canonical.settings) {\n fm.skillbase.settings = { ...canonical.settings };\n }\n if (canonical.knowledge?.docSources) {\n fm.skillbase.docs = {\n sources: canonical.knowledge.docSources.map((s) => ({\n type: s.type,\n url: s.url,\n scope: s.scope,\n depth: s.depth,\n include: s.include,\n exclude: s.exclude,\n label: s.label,\n blocks: s.blocks,\n snapshot_version: s.snapshotVersion,\n max_tokens: s.maxTokens,\n })),\n delivery: canonical.knowledge.delivery,\n priority_pages: canonical.knowledge.priorityPages,\n };\n }\n }\n\n let body = canonical.rawBody ?? canonical.instructions.content;\n\n const knowledgeSection = buildKnowledgeSection(canonical, options);\n if (knowledgeSection) {\n body = body + \"\\n\\n\" + knowledgeSection;\n }\n\n const content = stringifyFrontmatter(body, fm as unknown as Record<string, unknown>);\n\n return {\n files: [{ path: \"SOUL.md\", content }],\n droppedFeatures: [],\n warnings: [],\n };\n },\n};\n","import type { CanonicalFormat } from \"../types/canonical.js\";\nimport type { Compiler, CompileResult, CompileOptions } from \"./types.js\";\nimport { buildFlatBody } from \"./utils.js\";\n\nexport const cursorMdcCompiler: Compiler = {\n id: \"cursor-mdc\",\n name: \"Cursor MDC (.mdc)\",\n multiFile: false,\n supports: {\n frontmatter: false,\n scoping: true,\n filePatterns: true,\n constraints: true,\n dependencies: false,\n knowledge: true,\n },\n\n compile(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n ): CompileResult {\n const droppedFeatures: string[] = [];\n\n // Build MDC frontmatter\n const description =\n canonical.scoping?.trigger?.description ?? canonical.meta.description;\n const globs =\n canonical.scoping?.globs ??\n canonical.scoping?.filePatterns ??\n [];\n const alwaysApply = globs.length === 0;\n\n const fmLines = [\n \"---\",\n `description: ${description}`,\n `globs: ${globs.join(\", \") || \"\"}`,\n `alwaysApply: ${alwaysApply}`,\n \"---\",\n ];\n\n const body = buildFlatBody(canonical, options);\n const content = fmLines.join(\"\\n\") + \"\\n\\n\" + body;\n\n const filename = canonical.meta.name + \".mdc\";\n const path = options?.basePath\n ? `${options.basePath}/${filename}`\n : `.cursor/rules/${filename}`;\n\n if (canonical.dependencies?.skills) {\n droppedFeatures.push(\"dependencies\");\n }\n\n return {\n files: [{ path, content }],\n droppedFeatures,\n warnings: [],\n };\n },\n};\n","import type { CanonicalFormat } from \"../types/canonical.js\";\nimport type { Compiler, CompileResult, CompileOptions } from \"./types.js\";\nimport { buildFlatBody } from \"./utils.js\";\n\nexport const cursorRulesCompiler: Compiler = {\n id: \"cursor-rules\",\n name: \".cursorrules (legacy)\",\n multiFile: false,\n supports: {\n frontmatter: false,\n scoping: false,\n filePatterns: false,\n constraints: true,\n dependencies: false,\n knowledge: true,\n },\n\n compile(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n ): CompileResult {\n const droppedFeatures: string[] = [];\n const content = buildFlatBody(canonical, options);\n\n if (canonical.scoping?.trigger || canonical.scoping?.filePatterns) {\n droppedFeatures.push(\"scoping\");\n }\n if (canonical.dependencies?.skills) {\n droppedFeatures.push(\"dependencies\");\n }\n\n return {\n files: [{ path: \".cursorrules\", content }],\n droppedFeatures,\n warnings: [],\n };\n },\n};\n","import type { CanonicalFormat } from \"../types/canonical.js\";\nimport type { Compiler, CompileResult, CompileOptions } from \"./types.js\";\nimport { buildFlatBody } from \"./utils.js\";\n\nexport const claudeMdCompiler: Compiler = {\n id: \"claude-md\",\n name: \"CLAUDE.md (Claude Code)\",\n multiFile: false,\n supports: {\n frontmatter: false,\n scoping: false,\n filePatterns: false,\n constraints: true,\n dependencies: false,\n knowledge: true,\n },\n\n compile(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n ): CompileResult {\n const droppedFeatures: string[] = [];\n const content = buildFlatBody(canonical, options);\n\n if (canonical.scoping?.trigger) {\n droppedFeatures.push(\"scoping\");\n }\n if (canonical.dependencies?.skills) {\n droppedFeatures.push(\"dependencies\");\n }\n\n return {\n files: [{ path: \"CLAUDE.md\", content }],\n droppedFeatures,\n warnings: [],\n };\n },\n};\n","import type { CanonicalFormat } from \"../types/canonical.js\";\nimport type { Compiler, CompileResult, CompileOptions } from \"./types.js\";\nimport { buildFlatBody } from \"./utils.js\";\n\nexport const agentsMdCompiler: Compiler = {\n id: \"agents-md\",\n name: \"AGENTS.md (GitHub Copilot)\",\n multiFile: false,\n supports: {\n frontmatter: false,\n scoping: false,\n filePatterns: false,\n constraints: true,\n dependencies: false,\n knowledge: true,\n },\n\n compile(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n ): CompileResult {\n const droppedFeatures: string[] = [];\n const content = buildFlatBody(canonical, options);\n\n if (canonical.scoping?.trigger) {\n droppedFeatures.push(\"scoping\");\n }\n if (canonical.dependencies?.skills) {\n droppedFeatures.push(\"dependencies\");\n }\n\n return {\n files: [{ path: \"AGENTS.md\", content }],\n droppedFeatures,\n warnings: [],\n };\n },\n};\n","import type { CanonicalFormat } from \"../types/canonical.js\";\nimport type { Compiler, CompileResult, CompileOptions } from \"./types.js\";\nimport { buildFlatBody } from \"./utils.js\";\n\nconst MAX_CHARS = 6000;\n\nexport const windsurfCompiler: Compiler = {\n id: \"windsurf\",\n name: \"Windsurf Rules\",\n multiFile: false,\n supports: {\n frontmatter: false,\n scoping: false,\n filePatterns: false,\n constraints: true,\n dependencies: false,\n knowledge: true,\n },\n\n compile(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n ): CompileResult {\n const droppedFeatures: string[] = [];\n const warnings: string[] = [];\n let content = buildFlatBody(canonical, options);\n\n if (content.length > MAX_CHARS) {\n warnings.push(\n `Content truncated from ${content.length} to ${MAX_CHARS} characters (.windsurfrules limit)`,\n );\n content = content.slice(0, MAX_CHARS);\n }\n\n if (canonical.scoping?.trigger) {\n droppedFeatures.push(\"scoping\");\n }\n if (canonical.dependencies?.skills) {\n droppedFeatures.push(\"dependencies\");\n }\n\n return {\n files: [{ path: \".windsurfrules\", content }],\n droppedFeatures,\n warnings,\n };\n },\n};\n","import type { CanonicalFormat } from \"../types/canonical.js\";\nimport type { Compiler, CompileResult, CompileOptions } from \"./types.js\";\nimport { buildFlatBody } from \"./utils.js\";\n\nexport const copilotCompiler: Compiler = {\n id: \"copilot\",\n name: \"GitHub Copilot Instructions\",\n multiFile: false,\n supports: {\n frontmatter: false,\n scoping: false,\n filePatterns: false,\n constraints: true,\n dependencies: false,\n knowledge: true,\n },\n\n compile(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n ): CompileResult {\n const droppedFeatures: string[] = [];\n const content = buildFlatBody(canonical, options);\n\n if (canonical.scoping?.trigger) {\n droppedFeatures.push(\"scoping\");\n }\n if (canonical.dependencies?.skills) {\n droppedFeatures.push(\"dependencies\");\n }\n\n return {\n files: [\n { path: \".github/copilot-instructions.md\", content },\n ],\n droppedFeatures,\n warnings: [],\n };\n },\n};\n","import type { CanonicalFormat } from \"../types/canonical.js\";\nimport type { Compiler, CompileResult, CompileOptions } from \"./types.js\";\nimport { buildFlatBody } from \"./utils.js\";\n\nexport const clineCompiler: Compiler = {\n id: \"cline\",\n name: \"Cline Rules\",\n multiFile: false,\n supports: {\n frontmatter: false,\n scoping: false,\n filePatterns: false,\n constraints: true,\n dependencies: false,\n knowledge: true,\n },\n\n compile(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n ): CompileResult {\n const droppedFeatures: string[] = [];\n const content = buildFlatBody(canonical, options);\n\n if (canonical.scoping?.trigger) {\n droppedFeatures.push(\"scoping\");\n }\n if (canonical.dependencies?.skills) {\n droppedFeatures.push(\"dependencies\");\n }\n\n const filename = canonical.meta.name + \".md\";\n\n return {\n files: [{ path: `.clinerules/${filename}`, content }],\n droppedFeatures,\n warnings: [],\n };\n },\n};\n","import type { CanonicalFormat } from \"../types/canonical.js\";\nimport type {\n Compiler,\n CompileTarget,\n CompileResult,\n CompileOptions,\n} from \"./types.js\";\n\nimport { skillMdCompiler } from \"./skill-md.js\";\nimport { soulMdCompiler } from \"./soul-md.js\";\nimport { cursorMdcCompiler } from \"./cursor-mdc.js\";\nimport { cursorRulesCompiler } from \"./cursor-rules.js\";\nimport { claudeMdCompiler } from \"./claude-md.js\";\nimport { agentsMdCompiler } from \"./agents-md.js\";\nimport { windsurfCompiler } from \"./windsurf.js\";\nimport { copilotCompiler } from \"./copilot.js\";\nimport { clineCompiler } from \"./cline.js\";\n\nconst compilers: Compiler[] = [\n skillMdCompiler,\n soulMdCompiler,\n cursorMdcCompiler,\n cursorRulesCompiler,\n claudeMdCompiler,\n agentsMdCompiler,\n windsurfCompiler,\n copilotCompiler,\n clineCompiler,\n];\n\n/**\n * Compile a CanonicalFormat to a target format.\n */\nexport function compile(\n canonical: CanonicalFormat,\n target: CompileTarget,\n options?: CompileOptions,\n): CompileResult {\n const compiler = compilers.find((c) => c.id === target);\n if (!compiler) {\n throw new Error(`No compiler for target: ${target}`);\n }\n return compiler.compile(canonical, options);\n}\n\n/**\n * List all available compile targets.\n */\nexport function listTargets(): Compiler[] {\n return [...compilers];\n}\n\n/**\n * Get a compiler by target ID.\n */\nexport function getCompiler(target: CompileTarget): Compiler | null {\n return compilers.find((c) => c.id === target) ?? null;\n}\n"],"mappings":"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","names":["REQUIRED_FIELDS","Ajv","ajv","validateFn","validateFn"]}
1
+ {"version":3,"sources":["../src/frontmatter.ts","../src/parse/skill-parser.ts","../src/parse/soul-parser.ts","../src/schema/skill-schema.ts","../src/schema/soul-schema.ts","../src/convert/vercel-to-spm.ts","../src/convert/legacy.ts","../src/utils/slugify.ts","../src/parse/importers/cursor-rules.ts","../src/parse/importers/cursor-mdc.ts","../src/parse/importers/claude-md.ts","../src/parse/importers/agents-md.ts","../src/parse/importers/windsurf-rules.ts","../src/parse/importers/copilot.ts","../src/parse/importers/cline.ts","../src/parse/importers/index.ts","../src/compile/utils.ts","../src/compile/skill-md.ts","../src/compile/soul-md.ts","../src/compile/cursor-mdc.ts","../src/compile/cursor-rules.ts","../src/compile/claude-md.ts","../src/compile/agents-md.ts","../src/compile/windsurf.ts","../src/compile/copilot.ts","../src/compile/cline.ts","../src/compile/index.ts"],"sourcesContent":["import yaml from \"js-yaml\";\n\nconst DELIMITER = \"---\";\n\nexport function parseFrontmatter(raw: string): {\n data: Record<string, any>;\n content: string;\n} {\n const trimmed = raw.trimStart();\n if (!trimmed.startsWith(DELIMITER)) {\n return { data: {}, content: raw };\n }\n\n const end = trimmed.indexOf(`\\n${DELIMITER}`, DELIMITER.length);\n if (end === -1) {\n return { data: {}, content: raw };\n }\n\n const yamlStr = trimmed.slice(DELIMITER.length, end).trim();\n const data = yamlStr ? (yaml.load(yamlStr) as Record<string, unknown>) : {};\n const content = trimmed.slice(end + DELIMITER.length + 1).replace(/^\\n/, \"\");\n\n return { data: data ?? {}, content };\n}\n\nexport function stringifyFrontmatter(\n content: string,\n data: Record<string, unknown>,\n): string {\n const yamlStr = yaml.dump(data, { lineWidth: -1, noRefs: true }).trimEnd();\n return `---\\n${yamlStr}\\n---\\n${content}`;\n}\n","import { parseFrontmatter, stringifyFrontmatter } from \"../frontmatter.js\";\nimport type { ParsedSkill, SkillFrontmatter } from \"../types/skill.js\";\nimport type { CanonicalFormat } from \"../types/canonical.js\";\n\nconst REQUIRED_FIELDS = [\n \"schema_version\",\n \"name\",\n \"version\",\n \"author\",\n \"license\",\n \"description\",\n] as const;\n\nconst TRIGGER_REQUIRED = [\"description\", \"tags\", \"priority\"] as const;\n\nexport class SkillParseError extends Error {\n constructor(\n message: string,\n public readonly fields: string[] = [],\n ) {\n super(message);\n this.name = \"SkillParseError\";\n }\n}\n\n/**\n * Parse a SKILL.md string into frontmatter + body.\n */\nexport function parseSkill(content: string): ParsedSkill {\n const { data, content: body } = parseFrontmatter(content);\n\n const missing = REQUIRED_FIELDS.filter(\n (f) => data[f] === undefined || data[f] === \"\",\n );\n if (missing.length > 0) {\n throw new SkillParseError(\n `SKILL.md missing required fields: ${missing.join(\", \")}`,\n missing as unknown as string[],\n );\n }\n\n if (data.trigger) {\n const triggerMissing = TRIGGER_REQUIRED.filter(\n (f) => data.trigger[f] === undefined || data.trigger[f] === \"\",\n );\n if (triggerMissing.length > 0) {\n throw new SkillParseError(\n `trigger missing required fields: ${triggerMissing.join(\", \")}`,\n triggerMissing.map((f) => `trigger.${f}`),\n );\n }\n }\n\n return {\n frontmatter: data as SkillFrontmatter,\n body: body.trim(),\n };\n}\n\n/**\n * Serialize a ParsedSkill back to SKILL.md string.\n */\nexport function serializeSkill(skill: ParsedSkill): string {\n return stringifyFrontmatter(skill.body, skill.frontmatter as unknown as Record<string, unknown>);\n}\n\n/**\n * Split markdown body into preamble + H2 sections.\n */\nexport function splitBodyIntoSections(body: string): {\n preamble: string;\n sections: { label: string; content: string }[];\n} {\n const lines = body.split(\"\\n\");\n let preamble = \"\";\n const sections: { label: string; content: string }[] = [];\n let currentLabel: string | null = null;\n let currentLines: string[] = [];\n\n for (const line of lines) {\n const h2Match = line.match(/^## (.+)$/);\n if (h2Match) {\n if (currentLabel !== null) {\n sections.push({ label: currentLabel, content: currentLines.join(\"\\n\").trim() });\n } else {\n preamble = currentLines.join(\"\\n\").trim();\n }\n currentLabel = h2Match[1].trim();\n currentLines = [];\n } else {\n currentLines.push(line);\n }\n }\n\n if (currentLabel !== null) {\n sections.push({ label: currentLabel, content: currentLines.join(\"\\n\").trim() });\n } else {\n preamble = currentLines.join(\"\\n\").trim();\n }\n\n return { preamble, sections };\n}\n\n/**\n * Normalize a CanonicalFormat: split instructions.content by H2 headers\n * into sections if sections are not already populated.\n */\nexport function normalizeCanonical(canonical: CanonicalFormat): CanonicalFormat {\n const { content, sections } = canonical.instructions;\n if (sections && sections.length > 0) return canonical;\n if (!content || !content.includes(\"\\n## \")) return canonical;\n\n const { preamble, sections: parsed } = splitBodyIntoSections(content);\n if (parsed.length === 0) return canonical;\n\n return {\n ...canonical,\n instructions: {\n content: preamble,\n sections: parsed.map((s) => ({\n type: \"custom\" as const,\n label: s.label,\n content: s.content,\n })),\n },\n };\n}\n\n/**\n * Convert a ParsedSkill to CanonicalFormat.\n */\nexport function parsedSkillToCanonical(skill: ParsedSkill): CanonicalFormat {\n const fm = skill.frontmatter;\n\n const { preamble, sections } = splitBodyIntoSections(skill.body);\n\n const canonical: CanonicalFormat = {\n meta: {\n name: fm.name,\n version: fm.version,\n author: fm.author,\n license: fm.license,\n description: fm.description,\n schemaVersion: fm.schema_version,\n language: fm.language,\n repository: fm.repository,\n confidence: 1.0,\n },\n instructions: {\n content: preamble,\n ...(sections.length > 0 && {\n sections: sections.map((s) => ({\n type: \"custom\" as const,\n label: s.label,\n content: s.content,\n })),\n }),\n },\n rawBody: skill.body,\n sourceFormat: \"skill-md\",\n };\n\n if (fm.trigger) {\n canonical.scoping = {\n trigger: {\n description: fm.trigger.description,\n tags: fm.trigger.tags,\n priority: fm.trigger.priority,\n },\n filePatterns: fm.trigger.file_patterns,\n };\n }\n\n if (fm.security || fm.dependencies || fm.compatibility || fm.works_with) {\n canonical.dependencies = {};\n if (fm.dependencies) {\n canonical.dependencies.skills = fm.dependencies;\n }\n if (fm.security) {\n canonical.dependencies.security = {\n permissions: fm.security.permissions,\n fileScope: fm.security.file_scope,\n };\n }\n if (fm.compatibility) {\n canonical.dependencies.compatibility = {\n minContextTokens: fm.compatibility.min_context_tokens,\n requires: fm.compatibility.requires,\n models: fm.compatibility.models,\n };\n }\n if (fm.works_with) {\n canonical.dependencies.worksWith = fm.works_with;\n }\n }\n\n if (fm.docs) {\n canonical.knowledge = {\n docSources: fm.docs.sources.map((s) => ({\n type: s.type,\n url: s.url,\n scope: s.scope,\n depth: s.depth,\n include: s.include,\n exclude: s.exclude,\n label: s.label,\n blocks: s.blocks,\n snapshotVersion: s.snapshot_version,\n maxTokens: s.max_tokens,\n })),\n delivery: fm.docs.delivery,\n priorityPages: fm.docs.priority_pages,\n };\n }\n\n return canonical;\n}\n\n/**\n * Convert a CanonicalFormat back to ParsedSkill.\n */\nexport function canonicalToParsedSkill(canonical: CanonicalFormat): ParsedSkill {\n const fm: SkillFrontmatter = {\n schema_version: canonical.meta.schemaVersion,\n name: canonical.meta.name,\n version: canonical.meta.version,\n author: canonical.meta.author,\n license: canonical.meta.license,\n description: canonical.meta.description,\n };\n\n if (canonical.meta.language) {\n fm.language = canonical.meta.language;\n }\n if (canonical.meta.repository) {\n fm.repository = canonical.meta.repository;\n }\n\n if (canonical.scoping?.trigger) {\n fm.trigger = {\n description: canonical.scoping.trigger.description,\n tags: canonical.scoping.trigger.tags,\n priority: canonical.scoping.trigger.priority,\n };\n if (canonical.scoping.filePatterns) {\n fm.trigger.file_patterns = canonical.scoping.filePatterns;\n }\n }\n\n if (canonical.dependencies?.skills) {\n fm.dependencies = canonical.dependencies.skills;\n }\n if (canonical.dependencies?.security) {\n fm.security = {\n permissions: canonical.dependencies.security.permissions,\n file_scope: canonical.dependencies.security.fileScope,\n };\n }\n if (canonical.dependencies?.compatibility) {\n fm.compatibility = {\n min_context_tokens:\n canonical.dependencies.compatibility.minContextTokens ?? 0,\n requires: canonical.dependencies.compatibility.requires ?? [],\n models: canonical.dependencies.compatibility.models ?? [],\n };\n }\n if (canonical.dependencies?.worksWith) {\n fm.works_with = canonical.dependencies.worksWith;\n }\n\n if (canonical.knowledge?.docSources) {\n fm.docs = {\n sources: canonical.knowledge.docSources.map((s) => ({\n type: s.type,\n url: s.url,\n scope: s.scope,\n depth: s.depth,\n include: s.include,\n exclude: s.exclude,\n label: s.label,\n blocks: s.blocks,\n snapshot_version: s.snapshotVersion,\n max_tokens: s.maxTokens,\n })),\n delivery: canonical.knowledge.delivery,\n priority_pages: canonical.knowledge.priorityPages,\n };\n }\n\n const body = canonical.rawBody ?? canonical.instructions.content;\n\n return { frontmatter: fm, body };\n}\n","import { parseFrontmatter, stringifyFrontmatter } from \"../frontmatter.js\";\nimport type { ParsedSoul, SoulFrontmatter } from \"../types/soul.js\";\nimport type { CanonicalFormat } from \"../types/canonical.js\";\n\nconst REQUIRED_FIELDS = [\n \"name\",\n \"version\",\n \"author\",\n \"license\",\n \"description\",\n] as const;\n\nexport class SoulParseError extends Error {\n constructor(\n message: string,\n public readonly fields: string[] = [],\n ) {\n super(message);\n this.name = \"SoulParseError\";\n }\n}\n\n/**\n * Parse a SOUL.md string into frontmatter + body.\n */\nexport function parseSoul(content: string): ParsedSoul {\n const { data, content: body } = parseFrontmatter(content);\n\n const missing = REQUIRED_FIELDS.filter(\n (f) => data[f] === undefined || data[f] === \"\",\n );\n if (missing.length > 0) {\n throw new SoulParseError(\n `SOUL.md missing required fields: ${missing.join(\", \")}`,\n missing as unknown as string[],\n );\n }\n\n return {\n frontmatter: data as SoulFrontmatter,\n body: body.trim(),\n };\n}\n\n/**\n * Serialize a ParsedSoul back to SOUL.md string.\n */\nexport function serializeSoul(soul: ParsedSoul): string {\n return stringifyFrontmatter(soul.body, soul.frontmatter as unknown as Record<string, unknown>);\n}\n\n/**\n * Replace {{PLACEHOLDER}} tokens in body with provided values.\n */\nexport function resolveContextSlots(\n body: string,\n values: Record<string, string>,\n): string {\n return body.replace(/\\{\\{(\\w+)\\}\\}/g, (match, key: string) => {\n return values[key] ?? match;\n });\n}\n\n/**\n * Convert a ParsedSoul to CanonicalFormat.\n */\nexport function parsedSoulToCanonical(soul: ParsedSoul): CanonicalFormat {\n const fm = soul.frontmatter;\n const sb = fm.skillbase;\n\n const canonical: CanonicalFormat = {\n meta: {\n name: fm.name,\n version: fm.version,\n author: fm.author,\n license: fm.license,\n description: fm.description,\n schemaVersion: sb?.schema_version ?? 3,\n confidence: 1.0,\n },\n instructions: {\n content: soul.body,\n },\n rawBody: soul.body,\n sourceFormat: \"soul-md\",\n };\n\n if (sb?.trigger) {\n canonical.scoping = {\n trigger: {\n description: sb.trigger.description,\n tags: sb.trigger.tags,\n priority: sb.trigger.priority,\n },\n filePatterns: sb.trigger.file_patterns,\n };\n }\n\n if (sb?.skills) {\n canonical.dependencies = {\n ...canonical.dependencies,\n skills: sb.skills,\n };\n }\n\n if (sb?.constraints) {\n canonical.constraints = {\n always: sb.constraints.always,\n never: sb.constraints.never,\n };\n }\n\n if (sb?.identity) {\n canonical.identity = {\n role: sb.identity.role,\n tone: sb.identity.tone,\n expertise: sb.identity.expertise,\n };\n }\n\n if (sb?.settings) {\n canonical.settings = { ...sb.settings };\n }\n\n if (sb?.docs) {\n canonical.knowledge = {\n docSources: sb.docs.sources.map((s) => ({\n type: s.type,\n url: s.url,\n scope: s.scope,\n depth: s.depth,\n include: s.include,\n exclude: s.exclude,\n label: s.label,\n blocks: s.blocks,\n snapshotVersion: s.snapshot_version,\n maxTokens: s.max_tokens,\n })),\n delivery: sb.docs.delivery,\n priorityPages: sb.docs.priority_pages,\n };\n }\n\n return canonical;\n}\n\n/**\n * Convert a CanonicalFormat back to ParsedSoul.\n */\nexport function canonicalToParsedSoul(canonical: CanonicalFormat): ParsedSoul {\n const fm: SoulFrontmatter = {\n name: canonical.meta.name,\n version: canonical.meta.version,\n author: canonical.meta.author,\n license: canonical.meta.license,\n description: canonical.meta.description,\n };\n\n const hasSkillbase =\n canonical.scoping?.trigger ||\n canonical.dependencies?.skills ||\n canonical.constraints ||\n canonical.identity ||\n canonical.settings ||\n canonical.knowledge?.docSources;\n\n if (hasSkillbase) {\n fm.skillbase = {\n schema_version: canonical.meta.schemaVersion,\n };\n if (canonical.identity) {\n fm.skillbase.identity = {\n role: canonical.identity.role,\n tone: canonical.identity.tone,\n expertise: canonical.identity.expertise,\n };\n }\n if (canonical.scoping?.trigger) {\n fm.skillbase.trigger = {\n description: canonical.scoping.trigger.description,\n tags: canonical.scoping.trigger.tags,\n priority: canonical.scoping.trigger.priority,\n };\n if (canonical.scoping.filePatterns) {\n fm.skillbase.trigger.file_patterns = canonical.scoping.filePatterns;\n }\n }\n if (canonical.dependencies?.skills) {\n fm.skillbase.skills = canonical.dependencies.skills;\n }\n if (canonical.constraints) {\n fm.skillbase.constraints = {\n always: canonical.constraints.always,\n never: canonical.constraints.never,\n };\n }\n if (canonical.settings) {\n fm.skillbase.settings = { ...canonical.settings };\n }\n if (canonical.knowledge?.docSources) {\n fm.skillbase.docs = {\n sources: canonical.knowledge.docSources.map((s) => ({\n type: s.type,\n url: s.url,\n scope: s.scope,\n depth: s.depth,\n include: s.include,\n exclude: s.exclude,\n label: s.label,\n blocks: s.blocks,\n snapshot_version: s.snapshotVersion,\n max_tokens: s.maxTokens,\n })),\n delivery: canonical.knowledge.delivery,\n priority_pages: canonical.knowledge.priorityPages,\n };\n }\n }\n\n const body = canonical.rawBody ?? canonical.instructions.content;\n\n return { frontmatter: fm, body };\n}\n","import Ajv from \"ajv\";\nimport type { ValidationResult } from \"../types/common.js\";\n\nconst skillFrontmatterSchema = {\n type: \"object\" as const,\n required: [\n \"schema_version\",\n \"name\",\n \"version\",\n \"description\",\n \"author\",\n \"license\",\n ],\n additionalProperties: false,\n properties: {\n schema_version: { type: \"integer\" as const, minimum: 1 },\n name: {\n type: \"string\" as const,\n pattern: \"^[a-z0-9][a-z0-9-]*$\",\n },\n version: {\n type: \"string\" as const,\n pattern: \"^\\\\d+\\\\.\\\\d+\\\\.\\\\d+\",\n },\n language: { type: \"string\" as const, enum: [\"en\"], nullable: true },\n description: { type: \"string\" as const, minLength: 1 },\n trigger: {\n type: \"object\" as const,\n nullable: true,\n required: [\"description\", \"tags\", \"priority\"],\n additionalProperties: false,\n properties: {\n description: { type: \"string\" as const, minLength: 1 },\n tags: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n minItems: 1,\n },\n file_patterns: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n nullable: true,\n },\n priority: { type: \"integer\" as const, minimum: 0, maximum: 100 },\n },\n },\n dependencies: {\n type: \"object\" as const,\n nullable: true,\n additionalProperties: { type: \"string\" as const },\n },\n compatibility: {\n type: \"object\" as const,\n nullable: true,\n required: [\"min_context_tokens\", \"requires\", \"models\"],\n additionalProperties: false,\n properties: {\n min_context_tokens: { type: \"integer\" as const, minimum: 0 },\n requires: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n },\n models: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n },\n },\n },\n works_with: {\n type: \"array\" as const,\n nullable: true,\n items: {\n type: \"object\" as const,\n required: [\"skill\", \"relationship\", \"description\"],\n additionalProperties: false,\n properties: {\n skill: { type: \"string\" as const },\n relationship: {\n type: \"string\" as const,\n enum: [\"input\", \"output\", \"parallel\"],\n },\n description: { type: \"string\" as const },\n },\n },\n },\n security: {\n type: \"object\" as const,\n nullable: true,\n required: [\"permissions\"],\n additionalProperties: false,\n properties: {\n permissions: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n },\n file_scope: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n nullable: true,\n },\n integrity: { type: \"string\" as const, nullable: true },\n },\n },\n docs: {\n type: \"object\" as const,\n nullable: true,\n additionalProperties: false,\n properties: {\n sources: {\n type: \"array\" as const,\n items: {\n type: \"object\" as const,\n required: [\"type\", \"url\"],\n additionalProperties: false,\n properties: {\n type: {\n type: \"string\" as const,\n enum: [\"url\", \"llms-txt\", \"github\"],\n },\n url: { type: \"string\" as const, minLength: 1 },\n scope: {\n type: \"string\" as const,\n enum: [\"crawl\", \"page\", \"sitemap\"],\n nullable: true,\n },\n depth: {\n type: \"integer\" as const,\n minimum: 0,\n maximum: 5,\n nullable: true,\n },\n include: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n nullable: true,\n },\n exclude: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n nullable: true,\n },\n label: { type: \"string\" as const, nullable: true },\n blocks: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n nullable: true,\n },\n snapshot_version: { type: \"string\" as const, nullable: true },\n max_tokens: {\n type: \"integer\" as const,\n minimum: 0,\n nullable: true,\n },\n },\n },\n },\n delivery: {\n type: \"string\" as const,\n enum: [\"local\", \"remote\", \"auto\"],\n nullable: true,\n },\n priority_pages: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n nullable: true,\n },\n },\n },\n author: { type: \"string\" as const, minLength: 1 },\n license: { type: \"string\" as const, minLength: 1 },\n repository: { type: \"string\" as const, nullable: true },\n },\n};\n\nconst ajv = new Ajv.default({ allErrors: true });\nconst validateFn = ajv.compile(skillFrontmatterSchema);\n\nexport { type ValidationResult };\n\nexport function validateSkillFrontmatter(data: unknown): ValidationResult {\n const valid = validateFn(data);\n if (valid) {\n return { valid: true, errors: [] };\n }\n const errors = (validateFn.errors ?? []).map(\n (e: { instancePath?: string; message?: string }) => {\n const path = e.instancePath || \"/\";\n return `${path}: ${e.message}`;\n },\n );\n return { valid: false, errors };\n}\n","import Ajv from \"ajv\";\nimport type { ValidationResult } from \"../types/common.js\";\n\nconst soulFrontmatterSchema = {\n type: \"object\" as const,\n required: [\"name\", \"version\", \"author\", \"license\", \"description\"],\n additionalProperties: true,\n properties: {\n name: {\n type: \"string\" as const,\n pattern: \"^[a-z0-9][a-z0-9-]*$\",\n },\n version: {\n type: \"string\" as const,\n pattern: \"^\\\\d+\\\\.\\\\d+\\\\.\\\\d+\",\n },\n description: { type: \"string\" as const, minLength: 1 },\n author: { type: \"string\" as const, minLength: 1 },\n license: { type: \"string\" as const, minLength: 1 },\n skillbase: {\n type: \"object\" as const,\n nullable: true,\n additionalProperties: true,\n properties: {\n schema_version: { type: \"integer\" as const, minimum: 1 },\n trigger: {\n type: \"object\" as const,\n nullable: true,\n required: [\"description\", \"tags\", \"priority\"],\n properties: {\n description: { type: \"string\" as const, minLength: 1 },\n tags: {\n type: \"array\" as const,\n items: { type: \"string\" as const },\n minItems: 1,\n },\n priority: { type: \"integer\" as const, minimum: 0, maximum: 100 },\n },\n },\n skills: {\n type: \"object\" as const,\n nullable: true,\n additionalProperties: { type: \"string\" as const },\n },\n settings: {\n type: \"object\" as const,\n nullable: true,\n properties: {\n temperature: { type: \"number\" as const, minimum: 0, maximum: 2 },\n top_p: { type: \"number\" as const, minimum: 0, maximum: 1 },\n },\n },\n },\n },\n },\n};\n\nconst ajv = new Ajv.default({ allErrors: true });\nconst validateFn = ajv.compile(soulFrontmatterSchema);\n\nexport { type ValidationResult };\n\nexport function validateSoulFrontmatter(data: unknown): ValidationResult {\n const valid = validateFn(data);\n if (valid) {\n return { valid: true, errors: [] };\n }\n const errors = (validateFn.errors ?? []).map(\n (e: { instancePath?: string; message?: string }) => {\n const path = e.instancePath || \"/\";\n return `${path}: ${e.message}`;\n },\n );\n return { valid: false, errors };\n}\n","import type { ParsedSkill, SkillFrontmatter } from \"../types/skill.js\";\n\nexport interface VercelFrontmatter {\n name: string;\n description: string;\n license?: string;\n metadata?: Record<string, unknown>;\n \"allowed-tools\"?: string[];\n \"user-invocable\"?: boolean;\n [key: string]: unknown;\n}\n\nconst STOP_WORDS = new Set([\n \"a\", \"an\", \"the\", \"and\", \"or\", \"for\", \"to\", \"in\", \"on\", \"of\", \"is\", \"it\",\n \"with\", \"that\", \"this\", \"use\", \"when\", \"how\", \"what\", \"your\", \"you\",\n]);\n\nexport function inferTags(name: string, description: string): string[] {\n const tags = new Set<string>();\n\n for (const token of name.split(\"-\")) {\n if (token.length > 1 && !STOP_WORDS.has(token)) {\n tags.add(token);\n }\n }\n\n const words = description\n .toLowerCase()\n .replace(/[^a-z0-9\\s-]/g, \"\")\n .split(/\\s+/)\n .filter((w) => w.length > 2 && !STOP_WORDS.has(w));\n\n for (const word of words.slice(0, 10)) {\n if (tags.size >= 8) break;\n tags.add(word);\n }\n\n if (tags.size === 0) {\n tags.add(name);\n }\n\n return [...tags].slice(0, 8);\n}\n\nconst TOOL_TO_PERMISSION: Record<string, string> = {\n bash: \"bash:execute\",\n file_read: \"file:read\",\n file_write: \"file:write\",\n web_fetch: \"network:allowlist\",\n terminal: \"bash:execute\",\n shell: \"bash:execute\",\n};\n\nfunction mapPermissions(allowedTools?: string[]): string[] {\n if (!allowedTools || allowedTools.length === 0) return [];\n\n const permissions: string[] = [];\n for (const tool of allowedTools) {\n const normalized = tool.toLowerCase().replace(/-/g, \"_\");\n const mapped = TOOL_TO_PERMISSION[normalized];\n if (mapped && !permissions.includes(mapped)) {\n permissions.push(mapped);\n }\n }\n return permissions;\n}\n\nexport function isVercelFormat(data: Record<string, unknown>): boolean {\n return (\n !data.schema_version &&\n typeof data.name === \"string\" &&\n typeof data.description === \"string\"\n );\n}\n\nexport function convertVercelToSpm(\n vercel: VercelFrontmatter,\n body: string,\n options: { author: string; license?: string; repository?: string },\n): ParsedSkill {\n const name = vercel.name\n .toLowerCase()\n .replace(/[^a-z0-9-]/g, \"-\")\n .replace(/-+/g, \"-\")\n .replace(/^-|-$/g, \"\");\n\n const frontmatter: SkillFrontmatter = {\n schema_version: 3,\n name,\n version: \"1.0.0\",\n author: options.author,\n license: vercel.license || options.license || \"MIT\",\n description: vercel.description,\n language: \"en\",\n trigger: {\n description: vercel.description,\n tags: inferTags(name, vercel.description),\n priority: 50,\n },\n security: {\n permissions: mapPermissions(vercel[\"allowed-tools\"]),\n },\n };\n\n if (options.repository) {\n frontmatter.repository = options.repository;\n }\n\n return { frontmatter, body: body.trim() };\n}\n","import type { SoulFrontmatter, SoulSkillbaseBlock } from \"../types/soul.js\";\nimport type { LegacyPersonaManifest } from \"../types/legacy.js\";\n\n/**\n * Convert a legacy PersonaManifest to SoulFrontmatter.\n */\nexport function legacyPersonaToSoul(\n manifest: LegacyPersonaManifest,\n): SoulFrontmatter {\n const soul: SoulFrontmatter = {\n name: manifest.name,\n version: manifest.version,\n author: manifest.author,\n license: manifest.license,\n description: manifest.description,\n };\n\n const skillbase: SoulSkillbaseBlock = {\n schema_version: 3,\n };\n\n if (manifest.skills && Object.keys(manifest.skills).length > 0) {\n skillbase.skills = manifest.skills;\n }\n\n if (manifest.settings) {\n skillbase.settings = manifest.settings;\n }\n\n soul.skillbase = skillbase;\n return soul;\n}\n\n/**\n * Build markdown body from legacy persona character fields.\n */\nexport function buildLegacyBody(manifest: LegacyPersonaManifest): string {\n const parts: string[] = [];\n\n parts.push(`## Role\\n\\n${manifest.character.role}`);\n\n if (manifest.character.tone) {\n parts.push(`## Tone\\n\\n${manifest.character.tone}`);\n }\n\n if (\n manifest.character.guidelines &&\n manifest.character.guidelines.length > 0\n ) {\n const items = manifest.character.guidelines.map((g) => `- ${g}`).join(\"\\n\");\n parts.push(`## Guidelines\\n\\n${items}`);\n }\n\n if (manifest.character.instructions) {\n parts.push(`## Instructions\\n\\n${manifest.character.instructions}`);\n }\n\n return parts.join(\"\\n\\n\");\n}\n","/**\n * Convert a string to a valid skill name slug.\n */\nexport function slugify(input: string): string {\n return input\n .toLowerCase()\n .replace(/[^a-z0-9-]/g, \"-\")\n .replace(/-+/g, \"-\")\n .replace(/^-|-$/g, \"\")\n || \"unnamed\";\n}\n\n/**\n * Extract a meaningful name from a filename.\n * \"CLAUDE.md\" → \"claude\", \".cursorrules\" → \"cursorrules\", \"api-rules.mdc\" → \"api-rules\"\n */\nexport function extractName(filename: string): string {\n const base = filename.split(\"/\").pop() ?? filename;\n return base\n .replace(/^\\./, \"\")\n .replace(/\\.(md|mdc|txt|instructions\\.md)$/i, \"\")\n .replace(/^(CLAUDE|AGENTS|copilot-instructions)$/i, (m) =>\n m.toLowerCase(),\n );\n}\n","import type { CanonicalFormat } from \"../../types/canonical.js\";\nimport type { Importer, ImportOptions, ImportResult } from \"./types.js\";\nimport { slugify, extractName } from \"../../utils/slugify.js\";\n\n/**\n * Importer for legacy .cursorrules files.\n * Plain markdown, no frontmatter. Everything is instructions.\n */\nexport const cursorRulesImporter: Importer = {\n id: \"cursor-rules\",\n name: \"Cursor Rules (legacy)\",\n filePatterns: [\".cursorrules\"],\n\n import(content: string, options?: ImportOptions): ImportResult {\n const warnings: string[] = [];\n const reviewNeeded: string[] = [];\n const trimmed = content.trim();\n\n if (!trimmed) {\n warnings.push(\"Empty .cursorrules file\");\n }\n\n const name = options?.filename\n ? slugify(extractName(options.filename))\n : \"imported-cursor-rules\";\n\n reviewNeeded.push(\n \"meta.name\",\n \"meta.description\",\n \"identity\",\n \"scoping\",\n \"constraints\",\n );\n\n const canonical: CanonicalFormat = {\n meta: {\n name,\n version: \"1.0.0\",\n author: options?.defaultAuthor ?? \"unknown\",\n license: options?.defaultLicense ?? \"MIT\",\n description: \"Imported from .cursorrules\",\n schemaVersion: 3,\n confidence: 0.5,\n },\n instructions: {\n content: trimmed,\n },\n sourceFormat: \"cursor-rules\",\n };\n\n return { canonical, warnings, reviewNeeded };\n },\n};\n","import { parseFrontmatter } from \"../../frontmatter.js\";\nimport type { CanonicalFormat } from \"../../types/canonical.js\";\nimport type { Importer, ImportOptions, ImportResult } from \"./types.js\";\nimport { slugify, extractName } from \"../../utils/slugify.js\";\n\ninterface MdcFrontmatter {\n description?: string;\n globs?: string;\n alwaysApply?: boolean;\n}\n\n/**\n * Importer for Cursor MDC (.mdc) rule files.\n * YAML frontmatter with description, globs, alwaysApply + markdown body.\n */\nexport const cursorMdcImporter: Importer = {\n id: \"cursor-mdc\",\n name: \"Cursor MDC Rules\",\n filePatterns: [\".cursor/rules/*.mdc\", \"*.mdc\"],\n\n import(content: string, options?: ImportOptions): ImportResult {\n const warnings: string[] = [];\n const reviewNeeded: string[] = [];\n\n const { data, content: body } = parseFrontmatter(content);\n const fm = data as MdcFrontmatter;\n const trimmed = body.trim();\n\n const name = options?.filename\n ? slugify(extractName(options.filename))\n : \"imported-mdc-rule\";\n\n const canonical: CanonicalFormat = {\n meta: {\n name,\n version: \"1.0.0\",\n author: options?.defaultAuthor ?? \"unknown\",\n license: options?.defaultLicense ?? \"MIT\",\n description: fm.description || \"Imported from Cursor MDC\",\n schemaVersion: 3,\n confidence: 0.6,\n },\n instructions: {\n content: trimmed,\n },\n sourceFormat: \"cursor-mdc\",\n };\n\n // Map globs to scoping\n if (fm.globs || fm.alwaysApply !== undefined) {\n canonical.scoping = {};\n if (fm.globs) {\n canonical.scoping.globs = fm.globs\n .split(\",\")\n .map((g) => g.trim())\n .filter(Boolean);\n }\n if (fm.description) {\n canonical.scoping.trigger = {\n description: fm.description,\n tags: [],\n priority: fm.alwaysApply ? 90 : 50,\n };\n }\n }\n\n if (!fm.description) {\n reviewNeeded.push(\"meta.description\");\n }\n reviewNeeded.push(\"meta.name\", \"identity\", \"constraints\");\n\n return { canonical, warnings, reviewNeeded };\n },\n};\n","import { parseFrontmatter } from \"../../frontmatter.js\";\nimport type { CanonicalFormat } from \"../../types/canonical.js\";\nimport type { Importer, ImportOptions, ImportResult } from \"./types.js\";\nimport { slugify, extractName } from \"../../utils/slugify.js\";\n\ninterface ClaudeMdFrontmatter {\n paths?: string[];\n}\n\n/**\n * Importer for CLAUDE.md files.\n * Plain markdown, optionally with paths frontmatter (for .claude/rules/*.md).\n */\nexport const claudeMdImporter: Importer = {\n id: \"claude-md\",\n name: \"CLAUDE.md (Claude Code)\",\n filePatterns: [\"CLAUDE.md\", \".claude/rules/*.md\"],\n\n import(content: string, options?: ImportOptions): ImportResult {\n const warnings: string[] = [];\n const reviewNeeded: string[] = [];\n\n const { data, content: body } = parseFrontmatter(content);\n const fm = data as ClaudeMdFrontmatter;\n const trimmed = body.trim();\n\n const name = options?.filename\n ? slugify(extractName(options.filename))\n : \"imported-claude-md\";\n\n const canonical: CanonicalFormat = {\n meta: {\n name,\n version: \"1.0.0\",\n author: options?.defaultAuthor ?? \"unknown\",\n license: options?.defaultLicense ?? \"MIT\",\n description: \"Imported from CLAUDE.md\",\n schemaVersion: 3,\n confidence: 0.5,\n },\n instructions: {\n content: trimmed,\n },\n sourceFormat: \"claude-md\",\n };\n\n // Map paths to scoping\n if (fm.paths && fm.paths.length > 0) {\n canonical.scoping = {\n globs: fm.paths,\n };\n }\n\n reviewNeeded.push(\n \"meta.name\",\n \"meta.description\",\n \"identity\",\n \"scoping\",\n \"constraints\",\n );\n\n return { canonical, warnings, reviewNeeded };\n },\n};\n","import type { CanonicalFormat } from \"../../types/canonical.js\";\nimport type { Importer, ImportOptions, ImportResult } from \"./types.js\";\nimport { slugify, extractName } from \"../../utils/slugify.js\";\n\n/**\n * Importer for AGENTS.md files (GitHub Copilot coding agents).\n * Plain markdown, no frontmatter.\n */\nexport const agentsMdImporter: Importer = {\n id: \"agents-md\",\n name: \"AGENTS.md (GitHub Copilot)\",\n filePatterns: [\"AGENTS.md\"],\n\n import(content: string, options?: ImportOptions): ImportResult {\n const warnings: string[] = [];\n const reviewNeeded: string[] = [];\n const trimmed = content.trim();\n\n const name = options?.filename\n ? slugify(extractName(options.filename))\n : \"imported-agents-md\";\n\n const canonical: CanonicalFormat = {\n meta: {\n name,\n version: \"1.0.0\",\n author: options?.defaultAuthor ?? \"unknown\",\n license: options?.defaultLicense ?? \"MIT\",\n description: \"Imported from AGENTS.md\",\n schemaVersion: 3,\n confidence: 0.5,\n },\n instructions: {\n content: trimmed,\n },\n sourceFormat: \"agents-md\",\n };\n\n reviewNeeded.push(\n \"meta.name\",\n \"meta.description\",\n \"identity\",\n \"scoping\",\n \"constraints\",\n );\n\n return { canonical, warnings, reviewNeeded };\n },\n};\n","import { parseFrontmatter } from \"../../frontmatter.js\";\nimport type { CanonicalFormat } from \"../../types/canonical.js\";\nimport type { Importer, ImportOptions, ImportResult } from \"./types.js\";\nimport { slugify, extractName } from \"../../utils/slugify.js\";\n\ninterface WindsurfFrontmatter {\n trigger?: \"always_on\" | \"model_decision\" | \"manual\" | \"glob\";\n globs?: string;\n description?: string;\n}\n\n/**\n * Importer for Windsurf rules.\n * .windsurfrules (legacy, plain text) or .windsurf/rules/*.md (with frontmatter).\n */\nexport const windsurfRulesImporter: Importer = {\n id: \"windsurf-rules\",\n name: \"Windsurf Rules\",\n filePatterns: [\".windsurfrules\", \".windsurf/rules/*.md\"],\n\n import(content: string, options?: ImportOptions): ImportResult {\n const warnings: string[] = [];\n const reviewNeeded: string[] = [];\n\n const { data, content: body } = parseFrontmatter(content);\n const fm = data as WindsurfFrontmatter;\n const trimmed = body.trim();\n\n const name = options?.filename\n ? slugify(extractName(options.filename))\n : \"imported-windsurf-rules\";\n\n const canonical: CanonicalFormat = {\n meta: {\n name,\n version: \"1.0.0\",\n author: options?.defaultAuthor ?? \"unknown\",\n license: options?.defaultLicense ?? \"MIT\",\n description: fm.description || \"Imported from Windsurf rules\",\n schemaVersion: 3,\n confidence: 0.5,\n },\n instructions: {\n content: trimmed,\n },\n sourceFormat: \"windsurf-rules\",\n };\n\n if (fm.trigger === \"glob\" && fm.globs) {\n canonical.scoping = {\n globs: fm.globs\n .split(\",\")\n .map((g) => g.trim())\n .filter(Boolean),\n };\n }\n\n reviewNeeded.push(\n \"meta.name\",\n \"meta.description\",\n \"identity\",\n \"scoping\",\n \"constraints\",\n );\n\n return { canonical, warnings, reviewNeeded };\n },\n};\n","import { parseFrontmatter } from \"../../frontmatter.js\";\nimport type { CanonicalFormat } from \"../../types/canonical.js\";\nimport type { Importer, ImportOptions, ImportResult } from \"./types.js\";\nimport { slugify, extractName } from \"../../utils/slugify.js\";\n\ninterface CopilotFrontmatter {\n applyTo?: string;\n}\n\n/**\n * Importer for GitHub Copilot instructions.\n * copilot-instructions.md (no frontmatter) or *.instructions.md (with applyTo frontmatter).\n */\nexport const copilotImporter: Importer = {\n id: \"copilot\",\n name: \"GitHub Copilot Instructions\",\n filePatterns: [\n \".github/copilot-instructions.md\",\n \".github/instructions/*.instructions.md\",\n ],\n\n import(content: string, options?: ImportOptions): ImportResult {\n const warnings: string[] = [];\n const reviewNeeded: string[] = [];\n\n const { data, content: body } = parseFrontmatter(content);\n const fm = data as CopilotFrontmatter;\n const trimmed = body.trim();\n\n const name = options?.filename\n ? slugify(extractName(options.filename))\n : \"imported-copilot\";\n\n const canonical: CanonicalFormat = {\n meta: {\n name,\n version: \"1.0.0\",\n author: options?.defaultAuthor ?? \"unknown\",\n license: options?.defaultLicense ?? \"MIT\",\n description: \"Imported from Copilot instructions\",\n schemaVersion: 3,\n confidence: 0.5,\n },\n instructions: {\n content: trimmed,\n },\n sourceFormat: \"copilot\",\n };\n\n if (fm.applyTo) {\n canonical.scoping = {\n globs: [fm.applyTo],\n };\n }\n\n reviewNeeded.push(\n \"meta.name\",\n \"meta.description\",\n \"identity\",\n \"scoping\",\n \"constraints\",\n );\n\n return { canonical, warnings, reviewNeeded };\n },\n};\n","import { parseFrontmatter } from \"../../frontmatter.js\";\nimport type { CanonicalFormat } from \"../../types/canonical.js\";\nimport type { Importer, ImportOptions, ImportResult } from \"./types.js\";\nimport { slugify, extractName } from \"../../utils/slugify.js\";\n\ninterface ClineFrontmatter {\n description?: string;\n globs?: string;\n paths?: string[];\n}\n\n/**\n * Importer for Cline rules.\n * Single .clinerules file (plain text) or .clinerules/*.md (with optional frontmatter).\n */\nexport const clineImporter: Importer = {\n id: \"cline\",\n name: \"Cline Rules\",\n filePatterns: [\".clinerules\", \".clinerules/*.md\", \".clinerules/*.txt\"],\n\n import(content: string, options?: ImportOptions): ImportResult {\n const warnings: string[] = [];\n const reviewNeeded: string[] = [];\n\n const { data, content: body } = parseFrontmatter(content);\n const fm = data as ClineFrontmatter;\n const trimmed = body.trim();\n\n const name = options?.filename\n ? slugify(extractName(options.filename))\n : \"imported-cline-rules\";\n\n const canonical: CanonicalFormat = {\n meta: {\n name,\n version: \"1.0.0\",\n author: options?.defaultAuthor ?? \"unknown\",\n license: options?.defaultLicense ?? \"MIT\",\n description: fm.description || \"Imported from Cline rules\",\n schemaVersion: 3,\n confidence: 0.5,\n },\n instructions: {\n content: trimmed,\n },\n sourceFormat: \"cline\",\n };\n\n // Map glob patterns to scoping\n const globs: string[] = [];\n if (fm.globs) {\n globs.push(\n ...fm.globs\n .split(\",\")\n .map((g) => g.trim())\n .filter(Boolean),\n );\n }\n if (fm.paths) {\n globs.push(...fm.paths);\n }\n if (globs.length > 0) {\n canonical.scoping = { globs };\n }\n\n reviewNeeded.push(\n \"meta.name\",\n \"meta.description\",\n \"identity\",\n \"scoping\",\n \"constraints\",\n );\n\n return { canonical, warnings, reviewNeeded };\n },\n};\n","import type { SourceFormat } from \"../../types/canonical.js\";\nimport type { Importer, ImportOptions, ImportResult } from \"./types.js\";\nimport { cursorRulesImporter } from \"./cursor-rules.js\";\nimport { cursorMdcImporter } from \"./cursor-mdc.js\";\nimport { claudeMdImporter } from \"./claude-md.js\";\nimport { agentsMdImporter } from \"./agents-md.js\";\nimport { windsurfRulesImporter } from \"./windsurf-rules.js\";\nimport { copilotImporter } from \"./copilot.js\";\nimport { clineImporter } from \"./cline.js\";\n\nconst importers: Importer[] = [\n cursorRulesImporter,\n cursorMdcImporter,\n claudeMdImporter,\n agentsMdImporter,\n windsurfRulesImporter,\n copilotImporter,\n clineImporter,\n];\n\n/**\n * Detect format from filename.\n */\nexport function detectFormat(filename: string): SourceFormat | null {\n const lower = filename.toLowerCase();\n const base = lower.split(\"/\").pop() ?? lower;\n\n if (base === \".cursorrules\") return \"cursor-rules\";\n if (base.endsWith(\".mdc\")) return \"cursor-mdc\";\n if (base === \"claude.md\") return \"claude-md\";\n if (base === \"agents.md\") return \"agents-md\";\n if (base === \".windsurfrules\") return \"windsurf-rules\";\n if (lower.includes(\".windsurf/rules/\")) return \"windsurf-rules\";\n if (base === \"copilot-instructions.md\") return \"copilot\";\n if (base.endsWith(\".instructions.md\")) return \"copilot\";\n if (base === \".clinerules\") return \"cline\";\n if (lower.includes(\".clinerules/\")) return \"cline\";\n if (lower.includes(\".claude/rules/\")) return \"claude-md\";\n\n return null;\n}\n\n/**\n * Get importer by format ID.\n */\nexport function getImporter(format: SourceFormat): Importer | null {\n return importers.find((i) => i.id === format) ?? null;\n}\n\n/**\n * Import content from a foreign format.\n */\nexport function importFromFormat(\n content: string,\n format: SourceFormat,\n options?: ImportOptions,\n): ImportResult {\n const importer = getImporter(format);\n if (!importer) {\n throw new Error(`No importer for format: ${format}`);\n }\n return importer.import(content, options);\n}\n\n/**\n * List all available importers.\n */\nexport function listImporters(): Importer[] {\n return [...importers];\n}\n","import type { CanonicalFormat } from \"../types/canonical.js\";\nimport type { CompileOptions } from \"./types.js\";\n\n/**\n * Build inline knowledge section from knowledge blocks.\n */\nexport function buildKnowledgeSection(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n): string | null {\n const blocks = options?.knowledgeBlocks ?? canonical.knowledge?.inlineBlocks;\n if (!blocks || blocks.length === 0 || !options?.inlineKnowledge) {\n return null;\n }\n\n const parts = [\"## Reference Documentation\", \"\"];\n for (const block of blocks) {\n parts.push(`### ${block.label}`, \"\", block.content, \"\");\n }\n\n return parts.join(\"\\n\").trimEnd();\n}\n\n/**\n * Build a flat markdown body from canonical format for targets\n * that don't support structured frontmatter.\n */\nexport function buildFlatBody(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n): string {\n const parts: string[] = [];\n\n // Identity preamble\n if (canonical.identity) {\n if (canonical.identity.role) {\n parts.push(canonical.identity.role, \"\");\n }\n if (canonical.identity.tone) {\n parts.push(`Tone: ${canonical.identity.tone}`, \"\");\n }\n }\n\n // Main instructions\n parts.push(canonical.rawBody ?? canonical.instructions.content);\n\n // Constraints\n if (canonical.constraints) {\n if (\n canonical.constraints.always &&\n canonical.constraints.always.length > 0\n ) {\n parts.push(\n \"\",\n \"## Always\",\n \"\",\n ...canonical.constraints.always.map((c) => `- ${c}`),\n );\n }\n if (canonical.constraints.never && canonical.constraints.never.length > 0) {\n parts.push(\n \"\",\n \"## Never\",\n \"\",\n ...canonical.constraints.never.map((c) => `- ${c}`),\n );\n }\n }\n\n // Inline knowledge\n const knowledgeSection = buildKnowledgeSection(canonical, options);\n if (knowledgeSection) {\n parts.push(\"\", knowledgeSection);\n }\n\n return parts.join(\"\\n\").trim();\n}\n","import { stringifyFrontmatter } from \"../frontmatter.js\";\nimport type { CanonicalFormat } from \"../types/canonical.js\";\nimport type { SkillFrontmatter } from \"../types/skill.js\";\nimport type { Compiler, CompileResult, CompileOptions } from \"./types.js\";\nimport { buildKnowledgeSection } from \"./utils.js\";\n\nfunction buildBody(canonical: CanonicalFormat): string {\n const parts: string[] = [];\n\n // Identity block\n if (canonical.identity) {\n const id = canonical.identity;\n const lines: string[] = [];\n if (id.role) lines.push(id.role);\n if (id.expertise?.length) lines.push(`**Expertise:** ${id.expertise.join(\", \")}`);\n if (id.tone) lines.push(`**Tone:** ${id.tone}`);\n if (lines.length) parts.push(lines.join(\"\\n\"));\n }\n\n // Main instructions content (preamble)\n if (canonical.instructions.content) {\n parts.push(canonical.instructions.content);\n }\n\n // Instruction sections\n const sections = canonical.instructions.sections ?? [];\n for (const s of sections) {\n if (s.label || s.content) {\n parts.push(`## ${s.label}\\n\\n${s.content}`);\n }\n }\n\n // Constraints\n if (canonical.constraints) {\n const lines: string[] = [];\n if (canonical.constraints.always?.length) {\n lines.push(\"**Always:**\");\n for (const r of canonical.constraints.always) lines.push(`- ${r}`);\n }\n if (canonical.constraints.never?.length) {\n if (lines.length) lines.push(\"\");\n lines.push(\"**Never:**\");\n for (const r of canonical.constraints.never) lines.push(`- ${r}`);\n }\n if (lines.length) parts.push(`## Constraints\\n\\n${lines.join(\"\\n\")}`);\n }\n\n return parts.join(\"\\n\\n\");\n}\n\nexport const skillMdCompiler: Compiler = {\n id: \"skill-md\",\n name: \"SKILL.md (Skillbase)\",\n multiFile: false,\n supports: {\n frontmatter: true,\n scoping: true,\n filePatterns: true,\n constraints: true,\n dependencies: true,\n knowledge: true,\n },\n\n compile(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n ): CompileResult {\n const warnings: string[] = [];\n const fm: SkillFrontmatter = {\n schema_version: canonical.meta.schemaVersion,\n name: canonical.meta.name,\n version: canonical.meta.version,\n author: canonical.meta.author,\n license: canonical.meta.license,\n description: canonical.meta.description,\n };\n\n if (canonical.meta.language) fm.language = canonical.meta.language;\n if (canonical.meta.repository) fm.repository = canonical.meta.repository;\n\n if (canonical.scoping?.trigger) {\n fm.trigger = {\n description: canonical.scoping.trigger.description,\n tags: canonical.scoping.trigger.tags,\n priority: canonical.scoping.trigger.priority,\n };\n if (canonical.scoping.filePatterns) {\n fm.trigger.file_patterns = canonical.scoping.filePatterns;\n }\n }\n\n if (canonical.dependencies?.skills) {\n fm.dependencies = canonical.dependencies.skills;\n }\n if (canonical.dependencies?.security) {\n fm.security = {\n permissions: canonical.dependencies.security.permissions,\n file_scope: canonical.dependencies.security.fileScope,\n };\n }\n if (canonical.dependencies?.compatibility) {\n fm.compatibility = {\n min_context_tokens:\n canonical.dependencies.compatibility.minContextTokens ?? 0,\n requires: canonical.dependencies.compatibility.requires ?? [],\n models: canonical.dependencies.compatibility.models ?? [],\n };\n }\n if (canonical.dependencies?.worksWith) {\n fm.works_with = canonical.dependencies.worksWith;\n }\n\n if (canonical.knowledge?.docSources) {\n fm.docs = {\n sources: canonical.knowledge.docSources.map((s) => ({\n type: s.type,\n url: s.url,\n scope: s.scope,\n depth: s.depth,\n include: s.include,\n exclude: s.exclude,\n label: s.label,\n blocks: s.blocks,\n snapshot_version: s.snapshotVersion,\n max_tokens: s.maxTokens,\n })),\n delivery: canonical.knowledge.delivery,\n priority_pages: canonical.knowledge.priorityPages,\n };\n }\n\n let body = buildBody(canonical);\n\n // Append inline knowledge if requested\n const knowledgeSection = buildKnowledgeSection(canonical, options);\n if (knowledgeSection) {\n body = body + \"\\n\\n\" + knowledgeSection;\n }\n\n const content = stringifyFrontmatter(body, fm as unknown as Record<string, unknown>);\n\n return {\n files: [{ path: \"SKILL.md\", content }],\n droppedFeatures: [],\n warnings,\n };\n },\n};\n","import { stringifyFrontmatter } from \"../frontmatter.js\";\nimport type { CanonicalFormat } from \"../types/canonical.js\";\nimport type { SoulFrontmatter } from \"../types/soul.js\";\nimport type { Compiler, CompileResult, CompileOptions } from \"./types.js\";\nimport { buildKnowledgeSection } from \"./utils.js\";\n\nexport const soulMdCompiler: Compiler = {\n id: \"soul-md\",\n name: \"SOUL.md (Skillbase)\",\n multiFile: false,\n supports: {\n frontmatter: true,\n scoping: true,\n filePatterns: true,\n constraints: true,\n dependencies: true,\n knowledge: true,\n },\n\n compile(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n ): CompileResult {\n const fm: SoulFrontmatter = {\n name: canonical.meta.name,\n version: canonical.meta.version,\n author: canonical.meta.author,\n license: canonical.meta.license,\n description: canonical.meta.description,\n };\n\n const hasSkillbase =\n canonical.scoping?.trigger ||\n canonical.dependencies?.skills ||\n canonical.constraints ||\n canonical.identity ||\n canonical.settings ||\n canonical.knowledge?.docSources;\n\n if (hasSkillbase) {\n fm.skillbase = {\n schema_version: canonical.meta.schemaVersion,\n };\n if (canonical.identity) {\n fm.skillbase.identity = {\n role: canonical.identity.role,\n tone: canonical.identity.tone,\n expertise: canonical.identity.expertise,\n };\n }\n if (canonical.scoping?.trigger) {\n fm.skillbase.trigger = {\n description: canonical.scoping.trigger.description,\n tags: canonical.scoping.trigger.tags,\n priority: canonical.scoping.trigger.priority,\n };\n if (canonical.scoping.filePatterns) {\n fm.skillbase.trigger.file_patterns = canonical.scoping.filePatterns;\n }\n }\n if (canonical.dependencies?.skills) {\n fm.skillbase.skills = canonical.dependencies.skills;\n }\n if (canonical.constraints) {\n fm.skillbase.constraints = {\n always: canonical.constraints.always,\n never: canonical.constraints.never,\n };\n }\n if (canonical.settings) {\n fm.skillbase.settings = { ...canonical.settings };\n }\n if (canonical.knowledge?.docSources) {\n fm.skillbase.docs = {\n sources: canonical.knowledge.docSources.map((s) => ({\n type: s.type,\n url: s.url,\n scope: s.scope,\n depth: s.depth,\n include: s.include,\n exclude: s.exclude,\n label: s.label,\n blocks: s.blocks,\n snapshot_version: s.snapshotVersion,\n max_tokens: s.maxTokens,\n })),\n delivery: canonical.knowledge.delivery,\n priority_pages: canonical.knowledge.priorityPages,\n };\n }\n }\n\n let body = canonical.rawBody ?? canonical.instructions.content;\n\n const knowledgeSection = buildKnowledgeSection(canonical, options);\n if (knowledgeSection) {\n body = body + \"\\n\\n\" + knowledgeSection;\n }\n\n const content = stringifyFrontmatter(body, fm as unknown as Record<string, unknown>);\n\n return {\n files: [{ path: \"SOUL.md\", content }],\n droppedFeatures: [],\n warnings: [],\n };\n },\n};\n","import type { CanonicalFormat } from \"../types/canonical.js\";\nimport type { Compiler, CompileResult, CompileOptions } from \"./types.js\";\nimport { buildFlatBody } from \"./utils.js\";\n\nexport const cursorMdcCompiler: Compiler = {\n id: \"cursor-mdc\",\n name: \"Cursor MDC (.mdc)\",\n multiFile: false,\n supports: {\n frontmatter: false,\n scoping: true,\n filePatterns: true,\n constraints: true,\n dependencies: false,\n knowledge: true,\n },\n\n compile(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n ): CompileResult {\n const droppedFeatures: string[] = [];\n\n // Build MDC frontmatter\n const description =\n canonical.scoping?.trigger?.description ?? canonical.meta.description;\n const globs =\n canonical.scoping?.globs ??\n canonical.scoping?.filePatterns ??\n [];\n const alwaysApply = globs.length === 0;\n\n const fmLines = [\n \"---\",\n `description: ${description}`,\n `globs: ${globs.join(\", \") || \"\"}`,\n `alwaysApply: ${alwaysApply}`,\n \"---\",\n ];\n\n const body = buildFlatBody(canonical, options);\n const content = fmLines.join(\"\\n\") + \"\\n\\n\" + body;\n\n const filename = canonical.meta.name + \".mdc\";\n const path = options?.basePath\n ? `${options.basePath}/${filename}`\n : `.cursor/rules/${filename}`;\n\n if (canonical.dependencies?.skills) {\n droppedFeatures.push(\"dependencies\");\n }\n\n return {\n files: [{ path, content }],\n droppedFeatures,\n warnings: [],\n };\n },\n};\n","import type { CanonicalFormat } from \"../types/canonical.js\";\nimport type { Compiler, CompileResult, CompileOptions } from \"./types.js\";\nimport { buildFlatBody } from \"./utils.js\";\n\nexport const cursorRulesCompiler: Compiler = {\n id: \"cursor-rules\",\n name: \".cursorrules (legacy)\",\n multiFile: false,\n supports: {\n frontmatter: false,\n scoping: false,\n filePatterns: false,\n constraints: true,\n dependencies: false,\n knowledge: true,\n },\n\n compile(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n ): CompileResult {\n const droppedFeatures: string[] = [];\n const content = buildFlatBody(canonical, options);\n\n if (canonical.scoping?.trigger || canonical.scoping?.filePatterns) {\n droppedFeatures.push(\"scoping\");\n }\n if (canonical.dependencies?.skills) {\n droppedFeatures.push(\"dependencies\");\n }\n\n return {\n files: [{ path: \".cursorrules\", content }],\n droppedFeatures,\n warnings: [],\n };\n },\n};\n","import type { CanonicalFormat } from \"../types/canonical.js\";\nimport type { Compiler, CompileResult, CompileOptions } from \"./types.js\";\nimport { buildFlatBody } from \"./utils.js\";\n\nexport const claudeMdCompiler: Compiler = {\n id: \"claude-md\",\n name: \"CLAUDE.md (Claude Code)\",\n multiFile: false,\n supports: {\n frontmatter: false,\n scoping: false,\n filePatterns: false,\n constraints: true,\n dependencies: false,\n knowledge: true,\n },\n\n compile(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n ): CompileResult {\n const droppedFeatures: string[] = [];\n const content = buildFlatBody(canonical, options);\n\n if (canonical.scoping?.trigger) {\n droppedFeatures.push(\"scoping\");\n }\n if (canonical.dependencies?.skills) {\n droppedFeatures.push(\"dependencies\");\n }\n\n return {\n files: [{ path: \"CLAUDE.md\", content }],\n droppedFeatures,\n warnings: [],\n };\n },\n};\n","import type { CanonicalFormat } from \"../types/canonical.js\";\nimport type { Compiler, CompileResult, CompileOptions } from \"./types.js\";\nimport { buildFlatBody } from \"./utils.js\";\n\nexport const agentsMdCompiler: Compiler = {\n id: \"agents-md\",\n name: \"AGENTS.md (GitHub Copilot)\",\n multiFile: false,\n supports: {\n frontmatter: false,\n scoping: false,\n filePatterns: false,\n constraints: true,\n dependencies: false,\n knowledge: true,\n },\n\n compile(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n ): CompileResult {\n const droppedFeatures: string[] = [];\n const content = buildFlatBody(canonical, options);\n\n if (canonical.scoping?.trigger) {\n droppedFeatures.push(\"scoping\");\n }\n if (canonical.dependencies?.skills) {\n droppedFeatures.push(\"dependencies\");\n }\n\n return {\n files: [{ path: \"AGENTS.md\", content }],\n droppedFeatures,\n warnings: [],\n };\n },\n};\n","import type { CanonicalFormat } from \"../types/canonical.js\";\nimport type { Compiler, CompileResult, CompileOptions } from \"./types.js\";\nimport { buildFlatBody } from \"./utils.js\";\n\nconst MAX_CHARS = 6000;\n\nexport const windsurfCompiler: Compiler = {\n id: \"windsurf\",\n name: \"Windsurf Rules\",\n multiFile: false,\n supports: {\n frontmatter: false,\n scoping: false,\n filePatterns: false,\n constraints: true,\n dependencies: false,\n knowledge: true,\n },\n\n compile(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n ): CompileResult {\n const droppedFeatures: string[] = [];\n const warnings: string[] = [];\n let content = buildFlatBody(canonical, options);\n\n if (content.length > MAX_CHARS) {\n warnings.push(\n `Content truncated from ${content.length} to ${MAX_CHARS} characters (.windsurfrules limit)`,\n );\n content = content.slice(0, MAX_CHARS);\n }\n\n if (canonical.scoping?.trigger) {\n droppedFeatures.push(\"scoping\");\n }\n if (canonical.dependencies?.skills) {\n droppedFeatures.push(\"dependencies\");\n }\n\n return {\n files: [{ path: \".windsurfrules\", content }],\n droppedFeatures,\n warnings,\n };\n },\n};\n","import type { CanonicalFormat } from \"../types/canonical.js\";\nimport type { Compiler, CompileResult, CompileOptions } from \"./types.js\";\nimport { buildFlatBody } from \"./utils.js\";\n\nexport const copilotCompiler: Compiler = {\n id: \"copilot\",\n name: \"GitHub Copilot Instructions\",\n multiFile: false,\n supports: {\n frontmatter: false,\n scoping: false,\n filePatterns: false,\n constraints: true,\n dependencies: false,\n knowledge: true,\n },\n\n compile(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n ): CompileResult {\n const droppedFeatures: string[] = [];\n const content = buildFlatBody(canonical, options);\n\n if (canonical.scoping?.trigger) {\n droppedFeatures.push(\"scoping\");\n }\n if (canonical.dependencies?.skills) {\n droppedFeatures.push(\"dependencies\");\n }\n\n return {\n files: [\n { path: \".github/copilot-instructions.md\", content },\n ],\n droppedFeatures,\n warnings: [],\n };\n },\n};\n","import type { CanonicalFormat } from \"../types/canonical.js\";\nimport type { Compiler, CompileResult, CompileOptions } from \"./types.js\";\nimport { buildFlatBody } from \"./utils.js\";\n\nexport const clineCompiler: Compiler = {\n id: \"cline\",\n name: \"Cline Rules\",\n multiFile: false,\n supports: {\n frontmatter: false,\n scoping: false,\n filePatterns: false,\n constraints: true,\n dependencies: false,\n knowledge: true,\n },\n\n compile(\n canonical: CanonicalFormat,\n options?: CompileOptions,\n ): CompileResult {\n const droppedFeatures: string[] = [];\n const content = buildFlatBody(canonical, options);\n\n if (canonical.scoping?.trigger) {\n droppedFeatures.push(\"scoping\");\n }\n if (canonical.dependencies?.skills) {\n droppedFeatures.push(\"dependencies\");\n }\n\n const filename = canonical.meta.name + \".md\";\n\n return {\n files: [{ path: `.clinerules/${filename}`, content }],\n droppedFeatures,\n warnings: [],\n };\n },\n};\n","import type { CanonicalFormat } from \"../types/canonical.js\";\nimport type {\n Compiler,\n CompileTarget,\n CompileResult,\n CompileOptions,\n} from \"./types.js\";\n\nimport { skillMdCompiler } from \"./skill-md.js\";\nimport { soulMdCompiler } from \"./soul-md.js\";\nimport { cursorMdcCompiler } from \"./cursor-mdc.js\";\nimport { cursorRulesCompiler } from \"./cursor-rules.js\";\nimport { claudeMdCompiler } from \"./claude-md.js\";\nimport { agentsMdCompiler } from \"./agents-md.js\";\nimport { windsurfCompiler } from \"./windsurf.js\";\nimport { copilotCompiler } from \"./copilot.js\";\nimport { clineCompiler } from \"./cline.js\";\n\nconst compilers: Compiler[] = [\n skillMdCompiler,\n soulMdCompiler,\n cursorMdcCompiler,\n cursorRulesCompiler,\n claudeMdCompiler,\n agentsMdCompiler,\n windsurfCompiler,\n copilotCompiler,\n clineCompiler,\n];\n\n/**\n * Compile a CanonicalFormat to a target format.\n */\nexport function compile(\n canonical: CanonicalFormat,\n target: CompileTarget,\n options?: CompileOptions,\n): CompileResult {\n const compiler = compilers.find((c) => c.id === target);\n if (!compiler) {\n throw new Error(`No compiler for target: ${target}`);\n }\n return compiler.compile(canonical, options);\n}\n\n/**\n * List all available compile targets.\n */\nexport function listTargets(): Compiler[] {\n return [...compilers];\n}\n\n/**\n * Get a compiler by target ID.\n */\nexport function getCompiler(target: CompileTarget): Compiler | null {\n return compilers.find((c) => c.id === target) ?? null;\n}\n"],"mappings":"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","names":["REQUIRED_FIELDS","Ajv","ajv","validateFn","validateFn"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skillbase/compiler",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "description": "Parse, validate, compile, and convert SKILL.md / SOUL.md files",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",