specky-sdd 3.7.3 → 3.9.0

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.
Files changed (140) hide show
  1. package/.apm/agents/{design-architect.agent.md → specky-design-architect.agent.md} +2 -2
  2. package/.apm/agents/{implementer.agent.md → specky-implementer.agent.md} +9 -9
  3. package/.apm/agents/specky-onboarding.agent.md +2 -2
  4. package/.apm/agents/specky-orchestrator.agent.md +10 -10
  5. package/.apm/agents/{quality-reviewer.agent.md → specky-quality-reviewer.agent.md} +6 -6
  6. package/.apm/agents/{release-engineer.agent.md → specky-release-engineer.agent.md} +11 -11
  7. package/.apm/agents/{requirements-engineer.agent.md → specky-requirements-engineer.agent.md} +8 -8
  8. package/.apm/agents/{research-analyst.agent.md → specky-research-analyst.agent.md} +9 -9
  9. package/.apm/agents/{sdd-clarify.agent.md → specky-sdd-clarify.agent.md} +4 -3
  10. package/.apm/agents/{sdd-init.agent.md → specky-sdd-init.agent.md} +3 -3
  11. package/.apm/agents/{spec-engineer.agent.md → specky-spec-engineer.agent.md} +2 -2
  12. package/.apm/agents/{task-planner.agent.md → specky-task-planner.agent.md} +2 -2
  13. package/.apm/agents/{test-verifier.agent.md → specky-test-verifier.agent.md} +2 -2
  14. package/.apm/hooks/scripts/{artifact-validator.sh → specky-artifact-validator.sh} +11 -11
  15. package/.apm/hooks/scripts/{auto-checkpoint.sh → specky-auto-checkpoint.sh} +1 -1
  16. package/.apm/hooks/scripts/{branch-validator.sh → specky-branch-validator.sh} +3 -3
  17. package/.apm/hooks/scripts/{cognitive-debt-alert.sh → specky-cognitive-debt-alert.sh} +1 -1
  18. package/.apm/hooks/scripts/{drift-monitor.sh → specky-drift-monitor.sh} +1 -1
  19. package/.apm/hooks/scripts/{ears-validator.sh → specky-ears-validator.sh} +1 -1
  20. package/.apm/hooks/scripts/{lgtm-gate.sh → specky-lgtm-gate.sh} +1 -1
  21. package/.apm/hooks/scripts/{metrics-dashboard.sh → specky-metrics-dashboard.sh} +2 -2
  22. package/.apm/hooks/scripts/{phase-gate.sh → specky-phase-gate.sh} +1 -1
  23. package/.apm/hooks/scripts/{pipeline-guard.sh → specky-pipeline-guard.sh} +3 -3
  24. package/.apm/hooks/scripts/{release-gate.sh → specky-release-gate.sh} +1 -1
  25. package/.apm/hooks/scripts/{security-scan.sh → specky-security-scan.sh} +2 -2
  26. package/.apm/hooks/scripts/{session-banner.sh → specky-session-banner.sh} +4 -4
  27. package/.apm/hooks/scripts/{spec-quality.sh → specky-spec-quality.sh} +1 -1
  28. package/.apm/hooks/scripts/{spec-sync.sh → specky-spec-sync.sh} +2 -2
  29. package/.apm/hooks/scripts/{task-tracer.sh → specky-task-tracer.sh} +1 -1
  30. package/.apm/hooks/sdd-hooks.json +51 -51
  31. package/.apm/hooks/specky-run.sh +32 -0
  32. package/.apm/instructions/claude-instructions.instructions.md +74 -0
  33. package/.apm/instructions/copilot-instructions.instructions.md +19 -25
  34. package/.apm/instructions/cursor-instructions.instructions.md +20 -0
  35. package/.apm/prompts/specky-api.prompt.md +2 -2
  36. package/.apm/prompts/specky-brownfield.prompt.md +2 -2
  37. package/.apm/prompts/specky-clarify.prompt.md +1 -1
  38. package/.apm/prompts/specky-debug-hook.prompt.md +1 -1
  39. package/.apm/prompts/specky-deploy.prompt.md +1 -1
  40. package/.apm/prompts/specky-design.prompt.md +1 -1
  41. package/.apm/prompts/specky-from-meeting.prompt.md +1 -1
  42. package/.apm/prompts/specky-greenfield.prompt.md +2 -2
  43. package/.apm/prompts/specky-implement.prompt.md +1 -1
  44. package/.apm/prompts/specky-migration.prompt.md +3 -3
  45. package/.apm/prompts/specky-onboarding.prompt.md +1 -0
  46. package/.apm/prompts/specky-pipeline-status.prompt.md +1 -0
  47. package/.apm/prompts/specky-release.prompt.md +1 -1
  48. package/.apm/prompts/specky-research.prompt.md +1 -1
  49. package/.apm/prompts/specky-specify.prompt.md +1 -1
  50. package/.apm/prompts/specky-tasks.prompt.md +1 -1
  51. package/.apm/prompts/specky-verify.prompt.md +1 -1
  52. package/.apm/skills/specky-design-architect/SKILL.md +21 -0
  53. package/.apm/skills/{implementer → specky-implementer}/SKILL.md +3 -3
  54. package/.apm/skills/specky-onboarding/SKILL.md +37 -31
  55. package/.apm/skills/specky-orchestrator/SKILL.md +28 -28
  56. package/.apm/skills/specky-quality-reviewer/SKILL.md +28 -0
  57. package/.apm/skills/{release-engineer → specky-release-engineer}/SKILL.md +7 -7
  58. package/.apm/skills/{research-analyst → specky-research-analyst}/SKILL.md +2 -2
  59. package/.apm/skills/specky-sdd-clarify/SKILL.md +25 -0
  60. package/.apm/skills/specky-sdd-init/SKILL.md +28 -0
  61. package/.apm/skills/{sdd-markdown-standard → specky-sdd-markdown-standard}/SKILL.md +2 -2
  62. package/.apm/skills/{sdd-pipeline → specky-sdd-pipeline}/SKILL.md +42 -49
  63. package/.apm/skills/specky-spec-engineer/SKILL.md +27 -0
  64. package/.apm/skills/specky-task-planner/SKILL.md +20 -0
  65. package/.apm/skills/{test-verifier → specky-test-verifier}/SKILL.md +2 -2
  66. package/CHANGELOG.md +57 -0
  67. package/README.md +189 -96
  68. package/apm-policy.yml +19 -0
  69. package/apm.lock.yaml +70 -61
  70. package/apm.yml +10 -7
  71. package/config.yml +35 -33
  72. package/dist/claude-hooks.json +51 -51
  73. package/dist/cli/commands/compile.d.ts +7 -0
  74. package/dist/cli/commands/compile.d.ts.map +1 -0
  75. package/dist/cli/commands/compile.js +127 -0
  76. package/dist/cli/commands/compile.js.map +1 -0
  77. package/dist/cli/commands/doctor.d.ts.map +1 -1
  78. package/dist/cli/commands/doctor.js +167 -18
  79. package/dist/cli/commands/doctor.js.map +1 -1
  80. package/dist/cli/commands/hooks.js +2 -2
  81. package/dist/cli/commands/hooks.js.map +1 -1
  82. package/dist/cli/commands/init.d.ts +1 -0
  83. package/dist/cli/commands/init.d.ts.map +1 -1
  84. package/dist/cli/commands/init.js +121 -19
  85. package/dist/cli/commands/init.js.map +1 -1
  86. package/dist/cli/commands/upgrade.d.ts.map +1 -1
  87. package/dist/cli/commands/upgrade.js +5 -2
  88. package/dist/cli/commands/upgrade.js.map +1 -1
  89. package/dist/cli/index.js +21 -2
  90. package/dist/cli/index.js.map +1 -1
  91. package/dist/cli/lib/apm/policy.d.ts.map +1 -1
  92. package/dist/cli/lib/apm/policy.js +47 -33
  93. package/dist/cli/lib/apm/policy.js.map +1 -1
  94. package/dist/cli/lib/asset-copier.d.ts +13 -0
  95. package/dist/cli/lib/asset-copier.d.ts.map +1 -1
  96. package/dist/cli/lib/asset-copier.js +107 -32
  97. package/dist/cli/lib/asset-copier.js.map +1 -1
  98. package/dist/cli/lib/gitignore-writer.d.ts.map +1 -1
  99. package/dist/cli/lib/gitignore-writer.js +11 -0
  100. package/dist/cli/lib/gitignore-writer.js.map +1 -1
  101. package/dist/cli/lib/harness/compilers/agent-skills.d.ts +7 -0
  102. package/dist/cli/lib/harness/compilers/agent-skills.d.ts.map +1 -0
  103. package/dist/cli/lib/harness/compilers/agent-skills.js +23 -0
  104. package/dist/cli/lib/harness/compilers/agent-skills.js.map +1 -0
  105. package/dist/cli/lib/harness/compilers/cursor.d.ts +8 -0
  106. package/dist/cli/lib/harness/compilers/cursor.d.ts.map +1 -0
  107. package/dist/cli/lib/harness/compilers/cursor.js +28 -0
  108. package/dist/cli/lib/harness/compilers/cursor.js.map +1 -0
  109. package/dist/cli/lib/harness/compilers/opencode.d.ts +7 -0
  110. package/dist/cli/lib/harness/compilers/opencode.d.ts.map +1 -0
  111. package/dist/cli/lib/harness/compilers/opencode.js +26 -0
  112. package/dist/cli/lib/harness/compilers/opencode.js.map +1 -0
  113. package/dist/cli/lib/harness/index.d.ts.map +1 -1
  114. package/dist/cli/lib/harness/index.js +6 -0
  115. package/dist/cli/lib/harness/index.js.map +1 -1
  116. package/dist/cli/lib/harness/tool-map.d.ts.map +1 -1
  117. package/dist/cli/lib/harness/tool-map.js +23 -1
  118. package/dist/cli/lib/harness/tool-map.js.map +1 -1
  119. package/dist/cli/lib/harness/types.d.ts +2 -2
  120. package/dist/cli/lib/harness/types.d.ts.map +1 -1
  121. package/dist/cli/lib/mcp-writer.d.ts +1 -0
  122. package/dist/cli/lib/mcp-writer.d.ts.map +1 -1
  123. package/dist/cli/lib/mcp-writer.js +5 -1
  124. package/dist/cli/lib/mcp-writer.js.map +1 -1
  125. package/dist/cli/lib/paths.d.ts +19 -0
  126. package/dist/cli/lib/paths.d.ts.map +1 -1
  127. package/dist/cli/lib/paths.js +21 -0
  128. package/dist/cli/lib/paths.js.map +1 -1
  129. package/dist/copilot-hooks.json +46 -46
  130. package/dist/cursor-hooks.json +288 -0
  131. package/dist/index.js +2 -3
  132. package/dist/index.js.map +1 -1
  133. package/dist/services/state-machine.d.ts +4 -3
  134. package/dist/services/state-machine.d.ts.map +1 -1
  135. package/dist/services/state-machine.js +17 -9
  136. package/dist/services/state-machine.js.map +1 -1
  137. package/package.json +6 -7
  138. package/site/specky-icon.png +0 -0
  139. /package/.apm/skills/{sdd-pipeline → specky-sdd-pipeline}/references/ears-notation.md +0 -0
  140. /package/.apm/skills/{sdd-pipeline → specky-sdd-pipeline}/references/model-routing.md +0 -0
package/dist/cli/index.js CHANGED
@@ -3,7 +3,8 @@
3
3
  * cli/index.ts — Specky unified CLI entry point.
4
4
  *
5
5
  * Subcommands:
6
- * specky init [--ide=claude|copilot|both|auto] [--force] [--dry-run]
6
+ * specky init [--target=TARGET[,TARGET...]] [--force] [--dry-run]
7
+ * specky compile [--target=TARGET[,TARGET...]] [--dry-run]
7
8
  * specky doctor [--fix] [--verbose]
8
9
  * specky status
9
10
  * specky upgrade
@@ -51,7 +52,10 @@ Usage:
51
52
  Commands:
52
53
  install Install Specky assets into the current workspace
53
54
  init Alias of 'install' (same command)
55
+ --target=<targets> comma-list: copilot, claude, cursor,
56
+ opencode, agent-skills, both, all, auto
54
57
  --ide=<claude|copilot|both|auto> Default: auto
58
+ Deprecated alias for --target
55
59
  --force Overwrite existing files
56
60
  --dry-run Show changes without writing
57
61
 
@@ -61,6 +65,11 @@ Commands:
61
65
 
62
66
  status Show install + pipeline status
63
67
 
68
+ compile Compile instruction primitives into root context files
69
+ --target=<targets> comma-list: copilot, claude, cursor,
70
+ opencode, agent-skills, both, all
71
+ --dry-run Show output paths without writing
72
+
64
73
  upgrade Refresh installed assets (preserves .specs/)
65
74
 
66
75
  hooks <list|test|run NAME>
@@ -91,9 +100,11 @@ async function dispatch(command, rest) {
91
100
  case "init": {
92
101
  const { runInit } = await import("./commands/init.js");
93
102
  const ideRaw = flags["ide"];
103
+ const targetRaw = flags["target"];
94
104
  const ide = typeof ideRaw === "string" ? ideRaw : "auto";
95
105
  return runInit({
96
106
  ide,
107
+ target: typeof targetRaw === "string" ? targetRaw : undefined,
97
108
  force: flags["force"] === true,
98
109
  dryRun: flags["dry-run"] === true,
99
110
  });
@@ -109,6 +120,14 @@ async function dispatch(command, rest) {
109
120
  const { runStatus } = await import("./commands/status.js");
110
121
  return runStatus({});
111
122
  }
123
+ case "compile": {
124
+ const { runCompile } = await import("./commands/compile.js");
125
+ const targetRaw = flags["target"];
126
+ return runCompile({
127
+ target: typeof targetRaw === "string" ? targetRaw : undefined,
128
+ dryRun: flags["dry-run"] === true,
129
+ });
130
+ }
112
131
  case "upgrade": {
113
132
  const { runUpgrade } = await import("./commands/upgrade.js");
114
133
  return runUpgrade({ keepSpecs: flags["keep-specs"] === true });
@@ -185,7 +204,7 @@ async function main() {
185
204
  const isLegacyBin = binName === "specky-sdd" || binName.endsWith("specky-sdd");
186
205
  // Legacy back-compat: `specky-sdd` with no subcommand OR with --http maps to serve
187
206
  const knownCommands = new Set([
188
- "install", "init", "doctor", "status", "upgrade", "hooks", "apm", "serve",
207
+ "install", "init", "doctor", "status", "compile", "upgrade", "hooks", "apm", "serve",
189
208
  "help", "--help", "-h", "--version", "-v",
190
209
  ]);
191
210
  const firstArg = args[0];
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/apm/policy.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,SAAS;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,GAAG,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAC/D,KAAK,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;CAC7D;AASD,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAIrD;AAED,MAAM,WAAW,YAAY;IACzB,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACtB;AAMD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAgEzD"}
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/apm/policy.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,SAAS;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,GAAG,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAC/D,KAAK,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;CAC7D;AAYD,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAIrD;AAED,MAAM,WAAW,YAAY;IACzB,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACtB;AAqFD,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAiBzD"}
@@ -16,6 +16,9 @@ const TARGET_ALIASES = {
16
16
  copilot: "copilot",
17
17
  "claude-code": "claude",
18
18
  claude: "claude",
19
+ cursor: "cursor",
20
+ opencode: "opencode",
21
+ "agent-skills": "agent-skills",
19
22
  };
20
23
  export function policyPath(pkgRoot) {
21
24
  return resolve(pkgRoot, "apm-policy.yml");
@@ -29,16 +32,7 @@ export function loadPolicy(pkgRoot) {
29
32
  function toolsLine(content) {
30
33
  return content.split("\n").find((line) => line.startsWith("tools:")) ?? "";
31
34
  }
32
- export function checkPolicy(pkgRoot) {
33
- const errors = [];
34
- const warnings = [];
35
- const policy = loadPolicy(pkgRoot);
36
- if (!existsSync(policyPath(pkgRoot))) {
37
- warnings.push("apm-policy.yml not found — governance checks are skipped");
38
- return { ok: true, errors, warnings };
39
- }
40
- const { agentsDir, hooksManifest } = sourcePaths(pkgRoot);
41
- // 1. MCP allowlist.
35
+ function checkMcpAllowlist(pkgRoot, policy, errors) {
42
36
  const allowedServers = policy.mcp?.allowedServers ?? [];
43
37
  const manifest = loadManifest(pkgRoot);
44
38
  for (const server of manifest.mcp?.servers ?? []) {
@@ -46,40 +40,60 @@ export function checkPolicy(pkgRoot) {
46
40
  errors.push(`MCP server "${server.name}" is not in policy allowedServers`);
47
41
  }
48
42
  }
49
- // 2. Hook event allowlist.
43
+ }
44
+ function checkHookEvents(policy, hooksManifest, errors) {
50
45
  const allowedEvents = policy.hooks?.allowedEvents;
51
- if (allowedEvents && existsSync(hooksManifest)) {
52
- const manifestJson = JSON.parse(readFileSync(hooksManifest, "utf8"));
53
- for (const event of Object.keys(manifestJson)) {
54
- if (!allowedEvents.includes(event)) {
55
- errors.push(`Hook manifest registers disallowed event "${event}"`);
56
- }
46
+ if (!allowedEvents || !existsSync(hooksManifest))
47
+ return;
48
+ const manifestJson = JSON.parse(readFileSync(hooksManifest, "utf8"));
49
+ for (const event of Object.keys(manifestJson)) {
50
+ if (!allowedEvents.includes(event)) {
51
+ errors.push(`Hook manifest registers disallowed event "${event}"`);
57
52
  }
58
53
  }
59
- // 3. Per-target tool-name isolation.
60
- const agentFiles = existsSync(agentsDir)
61
- ? readdirSync(agentsDir).filter((f) => f.endsWith(".agent.md"))
54
+ }
55
+ function policyAgentFiles(agentsDir) {
56
+ return existsSync(agentsDir)
57
+ ? readdirSync(agentsDir).filter((file) => file.endsWith(".agent.md"))
62
58
  : [];
59
+ }
60
+ function checkForbiddenTokens(targetName, target, forbidden, agentsDir, agentFiles, errors) {
61
+ if (forbidden.length === 0)
62
+ return;
63
+ const compiler = getCompiler(target);
64
+ for (const file of agentFiles) {
65
+ const source = readFileSync(resolve(agentsDir, file), "utf8");
66
+ const line = toolsLine(compiler.compileAgent(source));
67
+ for (const token of forbidden) {
68
+ if (line.includes(token)) {
69
+ errors.push(`${targetName}: agent "${file}" compiles to a forbidden tool token "${token}"`);
70
+ }
71
+ }
72
+ }
73
+ }
74
+ function checkTargetIsolation(policy, agentsDir, errors, warnings) {
75
+ const agentFiles = policyAgentFiles(agentsDir);
63
76
  for (const [targetName, rules] of Object.entries(policy.targets ?? {})) {
64
77
  const target = TARGET_ALIASES[targetName];
65
78
  if (!target) {
66
79
  warnings.push(`policy targets: unknown target "${targetName}"`);
67
80
  continue;
68
81
  }
69
- const forbidden = rules.forbidToolTokens ?? [];
70
- if (forbidden.length === 0)
71
- continue;
72
- const compiler = getCompiler(target);
73
- for (const file of agentFiles) {
74
- const source = readFileSync(resolve(agentsDir, file), "utf8");
75
- const line = toolsLine(compiler.compileAgent(source));
76
- for (const token of forbidden) {
77
- if (line.includes(token)) {
78
- errors.push(`${targetName}: agent "${file}" compiles to a forbidden tool token "${token}"`);
79
- }
80
- }
81
- }
82
+ checkForbiddenTokens(targetName, target, rules.forbidToolTokens ?? [], agentsDir, agentFiles, errors);
82
83
  }
84
+ }
85
+ export function checkPolicy(pkgRoot) {
86
+ const errors = [];
87
+ const warnings = [];
88
+ const policy = loadPolicy(pkgRoot);
89
+ if (!existsSync(policyPath(pkgRoot))) {
90
+ warnings.push("apm-policy.yml not found — governance checks are skipped");
91
+ return { ok: true, errors, warnings };
92
+ }
93
+ const { agentsDir, hooksManifest } = sourcePaths(pkgRoot);
94
+ checkMcpAllowlist(pkgRoot, policy, errors);
95
+ checkHookEvents(policy, hooksManifest, errors);
96
+ checkTargetIsolation(policy, agentsDir, errors, warnings);
83
97
  return { ok: errors.length === 0, errors, warnings };
84
98
  }
85
99
  //# sourceMappingURL=policy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../../../src/cli/lib/apm/policy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../../../src/cli/lib/apm/policy.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,19 @@ export declare function copyToClaude(pkgRoot: string, targets: Targets, opts: Co
16
16
  * Copy assets to GitHub Copilot `.github/` layout.
17
17
  */
18
18
  export declare function copyToCopilot(pkgRoot: string, targets: Targets, opts: CopyOptions): CopyResult;
19
+ /**
20
+ * Copy assets to Cursor `.cursor/` layout.
21
+ */
22
+ export declare function copyToCursor(pkgRoot: string, targets: Targets, opts: CopyOptions): CopyResult;
23
+ /**
24
+ * Copy assets to OpenCode `.opencode/` layout. OpenCode has no hooks concept,
25
+ * so Specky hook primitives are intentionally skipped for this target.
26
+ */
27
+ export declare function copyToOpenCode(pkgRoot: string, targets: Targets, opts: CopyOptions): CopyResult;
28
+ /**
29
+ * Copy neutral Agent Skills to the cross-client `.agents/skills/` directory.
30
+ */
31
+ export declare function copyToAgentSkills(pkgRoot: string, targets: Targets, opts: CopyOptions): CopyResult;
19
32
  /**
20
33
  * Compute SHA256 of every copied file so `specky doctor` can detect drift.
21
34
  */
@@ -1 +1 @@
1
- {"version":3,"file":"asset-copier.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/asset-copier.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,QAAQ,EAAqB,MAAM,WAAW,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAI1C,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;CACjB;AAmFD;;GAEG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,WAAW,GAChB,UAAU,CA2CZ;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,WAAW,GAChB,UAAU,CAoDZ;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG7C;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,UAAU,EAAE,EACpB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,WAAW,GAChB,MAAM,CAwBR;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,GAAG,MAAM,CAEjE;AAGD,OAAO,EAAE,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"asset-copier.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/asset-copier.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,QAAQ,EAAqB,MAAM,WAAW,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAI1C,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;CACjB;AAiGD;;GAEG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,WAAW,GAChB,UAAU,CAiCZ;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,WAAW,GAChB,UAAU,CAwDZ;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,WAAW,GAChB,UAAU,CA+CZ;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,WAAW,GAChB,UAAU,CAUZ;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,WAAW,GAChB,UAAU,CAOZ;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG7C;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,UAAU,EAAE,EACpB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,WAAW,GAChB,MAAM,CAwBR;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,GAAG,MAAM,CAEjE;AAGD,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -64,11 +64,25 @@ function copyDir(src, dest, opts, result, renamer, transformer) {
64
64
  if (st.isDirectory()) {
65
65
  copyDir(srcPath, destPath, opts, result, renamer, transformer);
66
66
  }
67
+ else if (transformer) {
68
+ copyTextFile(srcPath, destPath, opts, result, transformer);
69
+ }
67
70
  else {
68
- if (transformer)
69
- copyTextFile(srcPath, destPath, opts, result, transformer);
70
- else
71
- copyFile(srcPath, destPath, opts, result);
71
+ copyFile(srcPath, destPath, opts, result);
72
+ }
73
+ }
74
+ }
75
+ function chmodHookScripts(dir, opts) {
76
+ if (opts.dryRun || process.platform === "win32" || !existsSync(dir))
77
+ return;
78
+ for (const f of readdirSync(dir)) {
79
+ if (f.endsWith(".sh") || f.endsWith(".mjs")) {
80
+ try {
81
+ chmodSync(resolve(dir, f), 0o755);
82
+ }
83
+ catch {
84
+ // ignore
85
+ }
72
86
  }
73
87
  }
74
88
  }
@@ -83,25 +97,21 @@ export function copyToClaude(pkgRoot, targets, opts) {
83
97
  copyDir(src.promptsDir, targets.claude.commands, opts, result, claude.renamePrompt, claude.compilePrompt);
84
98
  copyDir(src.skillsDir, targets.claude.skills, opts, result);
85
99
  copyDir(src.hookScriptsDir, targets.claude.hooksScripts, opts, result);
86
- // Make hook scripts executable (Unix only — Windows ignores mode)
87
- if (!opts.dryRun &&
88
- process.platform !== "win32" &&
89
- existsSync(targets.claude.hooksScripts)) {
90
- for (const f of readdirSync(targets.claude.hooksScripts)) {
91
- if (f.endsWith(".sh") || f.endsWith(".mjs")) {
92
- try {
93
- chmodSync(resolve(targets.claude.hooksScripts, f), 0o755);
94
- }
95
- catch {
96
- // ignore
97
- }
98
- }
100
+ chmodHookScripts(targets.claude.hooksScripts, opts);
101
+ // Install the Specky rule to .claude/rules/. Prefer the dedicated Claude
102
+ // instruction primitive; fall back to the Copilot one only if it is absent.
103
+ const staleClaudeRule = resolve(targets.claude.rules, "copilot-instructions.md");
104
+ if (!opts.dryRun && existsSync(staleClaudeRule)) {
105
+ try {
106
+ unlinkSync(staleClaudeRule);
99
107
  }
108
+ catch { /* ignore — might be read-only */ }
100
109
  }
101
- // Copy copilot-instructions to .claude/rules/
102
- const instructionSrc = resolve(src.instructionsDir, "copilot-instructions.instructions.md");
110
+ const claudeInstructionSrc = resolve(src.instructionsDir, "claude-instructions.instructions.md");
111
+ const fallbackInstructionSrc = resolve(src.instructionsDir, "copilot-instructions.instructions.md");
112
+ const instructionSrc = existsSync(claudeInstructionSrc) ? claudeInstructionSrc : fallbackInstructionSrc;
103
113
  if (existsSync(instructionSrc)) {
104
- copyFile(instructionSrc, resolve(targets.claude.rules, "copilot-instructions.md"), opts, result, claude.compileInstruction);
114
+ copyFile(instructionSrc, resolve(targets.claude.rules, "specky-sdd.md"), opts, result, claude.compileInstruction);
105
115
  }
106
116
  return result;
107
117
  }
@@ -140,21 +150,86 @@ export function copyToCopilot(pkgRoot, targets, opts) {
140
150
  "Run `npm run build` to generate it; SDD hook automation stays disabled until then.");
141
151
  }
142
152
  }
143
- copyDir(src.instructionsDir, targets.copilot.instructions, opts, result);
144
- if (!opts.dryRun &&
145
- process.platform !== "win32" &&
146
- existsSync(targets.copilot.hooksScripts)) {
147
- for (const f of readdirSync(targets.copilot.hooksScripts)) {
148
- if (f.endsWith(".sh") || f.endsWith(".mjs")) {
149
- try {
150
- chmodSync(resolve(targets.copilot.hooksScripts, f), 0o755);
151
- }
152
- catch {
153
- // ignore
154
- }
153
+ // Install ONLY the Copilot instruction primitive. Never copy the whole
154
+ // instructions dir — it also contains cursor/claude primitives that would
155
+ // leak non-Copilot naming (and stray applyTo files) into .github/instructions/.
156
+ for (const stale of ["cursor-instructions.instructions.md", "claude-instructions.instructions.md"]) {
157
+ const stalePath = resolve(targets.copilot.instructions, stale);
158
+ if (!opts.dryRun && existsSync(stalePath)) {
159
+ try {
160
+ unlinkSync(stalePath);
155
161
  }
162
+ catch { /* ignore — might be read-only */ }
156
163
  }
157
164
  }
165
+ const copilotInstruction = resolve(src.instructionsDir, "copilot-instructions.instructions.md");
166
+ if (existsSync(copilotInstruction)) {
167
+ copyFile(copilotInstruction, resolve(targets.copilot.instructions, "copilot-instructions.instructions.md"), opts, result, copilot.compileInstruction);
168
+ }
169
+ chmodHookScripts(targets.copilot.hooksScripts, opts);
170
+ return result;
171
+ }
172
+ /**
173
+ * Copy assets to Cursor `.cursor/` layout.
174
+ */
175
+ export function copyToCursor(pkgRoot, targets, opts) {
176
+ const src = sourcePaths(pkgRoot);
177
+ const result = { written: [], skipped: [] };
178
+ const cursor = getCompiler("cursor");
179
+ copyDir(src.agentsDir, targets.cursor.agents, opts, result, cursor.renameAgent, cursor.compileAgent);
180
+ copyDir(src.promptsDir, targets.cursor.commands, opts, result, cursor.renamePrompt, cursor.compilePrompt);
181
+ copyDir(src.skillsDir, targets.shared.agentSkills, opts, result);
182
+ const staleRule = resolve(targets.cursor.rules, "copilot-instructions.mdc");
183
+ if (!opts.dryRun && existsSync(staleRule)) {
184
+ try {
185
+ unlinkSync(staleRule);
186
+ }
187
+ catch { /* ignore — might be read-only */ }
188
+ }
189
+ const cursorInstructionSrc = resolve(src.instructionsDir, "cursor-instructions.instructions.md");
190
+ const fallbackInstructionSrc = resolve(src.instructionsDir, "copilot-instructions.instructions.md");
191
+ const instructionSrc = existsSync(cursorInstructionSrc) ? cursorInstructionSrc : fallbackInstructionSrc;
192
+ if (existsSync(instructionSrc)) {
193
+ copyFile(instructionSrc, resolve(targets.cursor.rules, "specky-sdd.mdc"), opts, result, cursor.compileInstruction);
194
+ }
195
+ copyDir(src.hookScriptsDir, targets.cursor.hooksScripts, opts, result);
196
+ if (existsSync(src.speckyRunScript)) {
197
+ copyFile(src.speckyRunScript, targets.cursor.hooksRunner, opts, result);
198
+ }
199
+ if (existsSync(src.cursorHooksManifest)) {
200
+ copyFile(src.cursorHooksManifest, targets.cursor.hooksManifest, opts, result);
201
+ }
202
+ else {
203
+ result.skipped.push(targets.cursor.hooksManifest);
204
+ if (!opts.dryRun) {
205
+ console.warn("[specky] Skipped Cursor hooks manifest: dist/cursor-hooks.json is missing. " +
206
+ "Run `npm run build` to generate it; Cursor hook automation stays disabled until then.");
207
+ }
208
+ }
209
+ chmodHookScripts(targets.cursor.hooksScripts, opts);
210
+ chmodHookScripts(resolve(targets.cursor.hooksRunner, ".."), opts);
211
+ return result;
212
+ }
213
+ /**
214
+ * Copy assets to OpenCode `.opencode/` layout. OpenCode has no hooks concept,
215
+ * so Specky hook primitives are intentionally skipped for this target.
216
+ */
217
+ export function copyToOpenCode(pkgRoot, targets, opts) {
218
+ const src = sourcePaths(pkgRoot);
219
+ const result = { written: [], skipped: [] };
220
+ const opencode = getCompiler("opencode");
221
+ copyDir(src.agentsDir, targets.opencode.agents, opts, result, opencode.renameAgent, opencode.compileAgent);
222
+ copyDir(src.promptsDir, targets.opencode.commands, opts, result, opencode.renamePrompt, opencode.compilePrompt);
223
+ copyDir(src.skillsDir, targets.shared.agentSkills, opts, result);
224
+ return result;
225
+ }
226
+ /**
227
+ * Copy neutral Agent Skills to the cross-client `.agents/skills/` directory.
228
+ */
229
+ export function copyToAgentSkills(pkgRoot, targets, opts) {
230
+ const src = sourcePaths(pkgRoot);
231
+ const result = { written: [], skipped: [] };
232
+ copyDir(src.skillsDir, targets.shared.agentSkills, opts, result);
158
233
  return result;
159
234
  }
160
235
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"asset-copier.js","sourceRoot":"","sources":["../../../src/cli/lib/asset-copier.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"asset-copier.js","sourceRoot":"","sources":["../../../src/cli/lib/asset-copier.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"gitignore-writer.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/gitignore-writer.ts"],"names":[],"mappings":"AA2DA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,iBAAiB,CAAC;IAClD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,GACxB,eAAe,CAiCjB"}
1
+ {"version":3,"file":"gitignore-writer.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/gitignore-writer.ts"],"names":[],"mappings":"AAsEA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,iBAAiB,CAAC;IAClD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,GACxB,eAAe,CAiCjB"}
@@ -12,6 +12,8 @@
12
12
  * .claude/agents/, .claude/commands/, .claude/skills/, .claude/hooks/,
13
13
  * .claude/rules/, .github/agents/, .github/prompts/, .github/skills/,
14
14
  * .github/hooks/specky/, .github/instructions/,
15
+ * .cursor/agents/, .cursor/commands/, .cursor/rules/, .cursor/hooks/,
16
+ * .opencode/agents/, .opencode/commands/, .agents/skills/,
15
17
  * .specky/install.lock, .specky/install.json
16
18
  *
17
19
  * What we keep (project-specific):
@@ -35,6 +37,13 @@ const IGNORED_PATHS = [
35
37
  ".github/skills/",
36
38
  ".github/hooks/specky/",
37
39
  ".github/instructions/",
40
+ ".cursor/agents/",
41
+ ".cursor/commands/",
42
+ ".cursor/rules/",
43
+ ".cursor/hooks/",
44
+ ".opencode/agents/",
45
+ ".opencode/commands/",
46
+ ".agents/skills/",
38
47
  ".specky/install.lock",
39
48
  ".specky/install.json",
40
49
  ];
@@ -49,6 +58,8 @@ const BLOCK_BODY = [
49
58
  "# .specs/ your pipeline artifacts",
50
59
  "# .claude/settings.json team-shared permissions + hooks",
51
60
  "# .mcp.json MCP server registration",
61
+ "# .cursor/mcp.json MCP server registration (Cursor)",
62
+ "# opencode.json MCP server registration (OpenCode)",
52
63
  "# .vscode/mcp.json MCP server registration (Copilot)",
53
64
  "# .vscode/settings.json team-shared VS Code settings",
54
65
  BLOCK_END,
@@ -1 +1 @@
1
- {"version":3,"file":"gitignore-writer.js","sourceRoot":"","sources":["../../../src/cli/lib/gitignore-writer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gitignore-writer.js","sourceRoot":"","sources":["../../../src/cli/lib/gitignore-writer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * harness/compilers/agent-skills.ts — neutral skills-only target. It preserves
3
+ * primitive content and names because only `.apm/skills` is deployed.
4
+ */
5
+ import type { HarnessCompiler } from "../types.js";
6
+ export declare const agentSkillsCompiler: HarnessCompiler;
7
+ //# sourceMappingURL=agent-skills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-skills.d.ts","sourceRoot":"","sources":["../../../../../src/cli/lib/harness/compilers/agent-skills.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,eAAO,MAAM,mBAAmB,EAAE,eAsBjC,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * harness/compilers/agent-skills.ts — neutral skills-only target. It preserves
3
+ * primitive content and names because only `.apm/skills` is deployed.
4
+ */
5
+ export const agentSkillsCompiler = {
6
+ target: "agent-skills",
7
+ compileAgent(content) {
8
+ return content;
9
+ },
10
+ compilePrompt(content) {
11
+ return content;
12
+ },
13
+ compileInstruction(content) {
14
+ return content;
15
+ },
16
+ renameAgent(fileName) {
17
+ return fileName;
18
+ },
19
+ renamePrompt(fileName) {
20
+ return fileName;
21
+ },
22
+ };
23
+ //# sourceMappingURL=agent-skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-skills.js","sourceRoot":"","sources":["../../../../../src/cli/lib/harness/compilers/agent-skills.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,CAAC,MAAM,mBAAmB,GAAoB;IAChD,MAAM,EAAE,cAAc;IAEtB,YAAY,CAAC,OAAO;QAChB,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,aAAa,CAAC,OAAO;QACjB,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,kBAAkB,CAAC,OAAO;QACtB,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,WAAW,CAAC,QAAQ;QAChB,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,YAAY,CAAC,QAAQ;QACjB,OAAO,QAAQ,CAAC;IACpB,CAAC;CACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * harness/compilers/cursor.ts — renders canonical primitives into Cursor native
3
+ * form: `.cursor/agents/*.md`, `.cursor/commands/*.md`, comma-list `tools:`
4
+ * compatible with Cursor's Claude-like command/agent surface, and `.mdc` rules.
5
+ */
6
+ import type { HarnessCompiler } from "../types.js";
7
+ export declare const cursorCompiler: HarnessCompiler;
8
+ //# sourceMappingURL=cursor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../../../../src/cli/lib/harness/compilers/cursor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGnD,eAAO,MAAM,cAAc,EAAE,eAyB5B,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * harness/compilers/cursor.ts — renders canonical primitives into Cursor native
3
+ * form: `.cursor/agents/*.md`, `.cursor/commands/*.md`, comma-list `tools:`
4
+ * compatible with Cursor's Claude-like command/agent surface, and `.mdc` rules.
5
+ */
6
+ import { transformToolsLine } from "./common.js";
7
+ export const cursorCompiler = {
8
+ target: "cursor",
9
+ compileAgent(content) {
10
+ return transformToolsLine(content, "cursor", "comma-list");
11
+ },
12
+ compilePrompt(content) {
13
+ return content
14
+ .replace(/^agent:\s*agent\s*\n/m, "")
15
+ .replace(/^mode:\s*agent\s*\n/m, "");
16
+ },
17
+ compileInstruction(content) {
18
+ const body = content.replace(/^---[\s\S]*?---\n/, "");
19
+ return `---\ndescription: Specky SDD pipeline rules\nalwaysApply: true\n---\n${body}`;
20
+ },
21
+ renameAgent(fileName) {
22
+ return fileName.replace(/\.agent\.md$/, ".md");
23
+ },
24
+ renamePrompt(fileName) {
25
+ return fileName.replace(/\.prompt\.md$/, ".md");
26
+ },
27
+ };
28
+ //# sourceMappingURL=cursor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../../../../src/cli/lib/harness/compilers/cursor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,CAAC,MAAM,cAAc,GAAoB;IAC3C,MAAM,EAAE,QAAQ;IAEhB,YAAY,CAAC,OAAO;QAChB,OAAO,kBAAkB,CAAC,OAAO,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC/D,CAAC;IAED,aAAa,CAAC,OAAO;QACjB,OAAO,OAAO;aACT,OAAO,CAAC,uBAAuB,EAAE,EAAE,CAAC;aACpC,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,kBAAkB,CAAC,OAAO;QACtB,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;QACtD,OAAO,wEAAwE,IAAI,EAAE,CAAC;IAC1F,CAAC;IAED,WAAW,CAAC,QAAQ;QAChB,OAAO,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACnD,CAAC;IAED,YAAY,CAAC,QAAQ;QACjB,OAAO,QAAQ,CAAC,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC;CACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * harness/compilers/opencode.ts — renders canonical primitives into OpenCode
3
+ * native form: `.opencode/agents/*.md` and `.opencode/commands/*.md`.
4
+ */
5
+ import type { HarnessCompiler } from "../types.js";
6
+ export declare const opencodeCompiler: HarnessCompiler;
7
+ //# sourceMappingURL=opencode.d.ts.map