specky-sdd 3.8.0 → 3.10.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 (87) hide show
  1. package/.apm/agents/specky-design-architect.agent.md +1 -1
  2. package/.apm/agents/specky-implementer.agent.md +7 -7
  3. package/.apm/agents/specky-onboarding.agent.md +1 -1
  4. package/.apm/agents/specky-quality-reviewer.agent.md +5 -5
  5. package/.apm/agents/specky-release-engineer.agent.md +7 -7
  6. package/.apm/agents/specky-requirements-engineer.agent.md +6 -6
  7. package/.apm/agents/specky-research-analyst.agent.md +7 -7
  8. package/.apm/agents/specky-sdd-clarify.agent.md +3 -2
  9. package/.apm/agents/specky-sdd-init.agent.md +1 -1
  10. package/.apm/agents/specky-spec-engineer.agent.md +1 -1
  11. package/.apm/agents/specky-task-planner.agent.md +1 -1
  12. package/.apm/hooks/specky-run.sh +32 -0
  13. package/.apm/instructions/claude-instructions.instructions.md +74 -0
  14. package/.apm/instructions/copilot-instructions.instructions.md +3 -9
  15. package/.apm/instructions/cursor-instructions.instructions.md +69 -0
  16. package/.apm/instructions/opencode-instructions.instructions.md +45 -0
  17. package/.apm/prompts/specky-onboarding.prompt.md +1 -0
  18. package/.apm/prompts/specky-pipeline-status.prompt.md +1 -0
  19. package/.apm/skills/specky-design-architect/SKILL.md +21 -0
  20. package/.apm/skills/specky-onboarding/SKILL.md +8 -2
  21. package/.apm/skills/specky-quality-reviewer/SKILL.md +28 -0
  22. package/.apm/skills/specky-sdd-clarify/SKILL.md +25 -0
  23. package/.apm/skills/specky-sdd-init/SKILL.md +28 -0
  24. package/.apm/skills/specky-sdd-pipeline/SKILL.md +20 -19
  25. package/.apm/skills/specky-spec-engineer/SKILL.md +27 -0
  26. package/.apm/skills/specky-task-planner/SKILL.md +20 -0
  27. package/CHANGELOG.md +64 -0
  28. package/README.md +177 -82
  29. package/apm-policy.yml +7 -0
  30. package/apm.lock.yaml +29 -19
  31. package/apm.yml +2 -2
  32. package/config.yml +5 -3
  33. package/dist/cli/commands/compile.d.ts.map +1 -1
  34. package/dist/cli/commands/compile.js +36 -14
  35. package/dist/cli/commands/compile.js.map +1 -1
  36. package/dist/cli/commands/doctor.d.ts.map +1 -1
  37. package/dist/cli/commands/doctor.js +220 -12
  38. package/dist/cli/commands/doctor.js.map +1 -1
  39. package/dist/cli/commands/hooks.js +2 -2
  40. package/dist/cli/commands/hooks.js.map +1 -1
  41. package/dist/cli/commands/init.d.ts.map +1 -1
  42. package/dist/cli/commands/init.js +8 -5
  43. package/dist/cli/commands/init.js.map +1 -1
  44. package/dist/cli/lib/apm/lock.js +2 -2
  45. package/dist/cli/lib/apm/lock.js.map +1 -1
  46. package/dist/cli/lib/asset-copier.d.ts.map +1 -1
  47. package/dist/cli/lib/asset-copier.js +73 -36
  48. package/dist/cli/lib/asset-copier.js.map +1 -1
  49. package/dist/cli/lib/gitignore-writer.d.ts.map +1 -1
  50. package/dist/cli/lib/gitignore-writer.js +2 -1
  51. package/dist/cli/lib/gitignore-writer.js.map +1 -1
  52. package/dist/cli/lib/harness/compilers/claude.d.ts.map +1 -1
  53. package/dist/cli/lib/harness/compilers/claude.js +2 -2
  54. package/dist/cli/lib/harness/compilers/claude.js.map +1 -1
  55. package/dist/cli/lib/harness/compilers/common.d.ts +2 -0
  56. package/dist/cli/lib/harness/compilers/common.d.ts.map +1 -1
  57. package/dist/cli/lib/harness/compilers/common.js +6 -0
  58. package/dist/cli/lib/harness/compilers/common.js.map +1 -1
  59. package/dist/cli/lib/harness/compilers/cursor.d.ts.map +1 -1
  60. package/dist/cli/lib/harness/compilers/cursor.js +3 -2
  61. package/dist/cli/lib/harness/compilers/cursor.js.map +1 -1
  62. package/dist/cli/lib/harness/tool-map.js +2 -2
  63. package/dist/cli/lib/harness/tool-map.js.map +1 -1
  64. package/dist/cli/lib/mcp-writer.d.ts.map +1 -1
  65. package/dist/cli/lib/mcp-writer.js +2 -0
  66. package/dist/cli/lib/mcp-writer.js.map +1 -1
  67. package/dist/cli/lib/paths.d.ts +4 -0
  68. package/dist/cli/lib/paths.d.ts.map +1 -1
  69. package/dist/cli/lib/paths.js +4 -0
  70. package/dist/cli/lib/paths.js.map +1 -1
  71. package/dist/cursor-hooks.json +288 -0
  72. package/dist/index.js +2 -3
  73. package/dist/index.js.map +1 -1
  74. package/dist/services/state-machine.d.ts +22 -1
  75. package/dist/services/state-machine.d.ts.map +1 -1
  76. package/dist/services/state-machine.js +95 -5
  77. package/dist/services/state-machine.js.map +1 -1
  78. package/dist/templates/specification.md +2 -0
  79. package/dist/tools/pipeline.d.ts.map +1 -1
  80. package/dist/tools/pipeline.js +96 -42
  81. package/dist/tools/pipeline.js.map +1 -1
  82. package/dist/tools/tool-enforcement.d.ts.map +1 -1
  83. package/dist/tools/tool-enforcement.js +13 -0
  84. package/dist/tools/tool-enforcement.js.map +1 -1
  85. package/package.json +5 -6
  86. package/site/specky-icon.png +0 -0
  87. package/templates/specification.md +2 -0
package/apm.lock.yaml CHANGED
@@ -2,20 +2,20 @@
2
2
  schemaVersion: 1
3
3
  package:
4
4
  name: specky-sdd
5
- version: 3.8.0
5
+ version: 3.10.0
6
6
  primitives:
7
- .apm/agents/specky-design-architect.agent.md: sha256:2f12be707aae3fe040042e5cd6f52c5f4cf8a54141f2fc2cdf4a21c9faea4ea7
8
- .apm/agents/specky-implementer.agent.md: sha256:9bb72a3b82156b2e15d8b56cdc317881b630046b2b288337289688f47df4a67d
9
- .apm/agents/specky-onboarding.agent.md: sha256:af84ea48222526be6a5c05eae282551632f771dd4c7b271185bd80aca05c8918
7
+ .apm/agents/specky-design-architect.agent.md: sha256:a9411a98bd2fe4c4aa1e6eab66e84eaf9a010897d408e1737a279fe58f7023b2
8
+ .apm/agents/specky-implementer.agent.md: sha256:76c546fe70fe3f5399ba25f0e6de3d9b280880fe7c12d88f093cee55c0b02ece
9
+ .apm/agents/specky-onboarding.agent.md: sha256:755a51c27eb1fe044ce4940fe6dda3a8eb0ff983c04d1c00e1d59be59723aa9d
10
10
  .apm/agents/specky-orchestrator.agent.md: sha256:aae379a2dd8833fc9861ee9302f244032856a739b3fb31f568713f866a16f0c8
11
- .apm/agents/specky-quality-reviewer.agent.md: sha256:69246d0f2bc3cd8acc9e4961a8443c2e0f6cd6c88db32c4498793cd78c30d587
12
- .apm/agents/specky-release-engineer.agent.md: sha256:e8130b6eafc12fdd5c08f8236b7d77c8ca9a91d8a19b121082077365a8956ab9
13
- .apm/agents/specky-requirements-engineer.agent.md: sha256:10d56e07f8b1351adfd35c73a67d1a2b664427e54223fff11db2b8e7a1b2b516
14
- .apm/agents/specky-research-analyst.agent.md: sha256:036249a79df8d19b5507cee583705ea9a7946c010ace0c46f10d8b8ba3a9611d
15
- .apm/agents/specky-sdd-clarify.agent.md: sha256:020f13f8f99e8734fdd28f59f372d1c8bd2dd967236a1317c24dd4fd04cfced2
16
- .apm/agents/specky-sdd-init.agent.md: sha256:eaff90a9cac828f5e796de2c85c57731a1de411506ca7bc0f7bf0b172d8a84ef
17
- .apm/agents/specky-spec-engineer.agent.md: sha256:0e2abf1fc8980a85b1716d6c6d4dc62c7e0a3dd5175b2d124cad2e47f6845c77
18
- .apm/agents/specky-task-planner.agent.md: sha256:bfccde52d4bb0674e2e9e48e90e9a3efaba03e16cad4e7ac78d6e150dee2c8e2
11
+ .apm/agents/specky-quality-reviewer.agent.md: sha256:cdcbe7bee2a4c669b52b8a67d5f31bc01ea0b518ca6daabf57a4603af2312c83
12
+ .apm/agents/specky-release-engineer.agent.md: sha256:b33e0f64b6fe23fb427c9368945d76e780aff1d8d848ab67bbcb2fa1a03f50e9
13
+ .apm/agents/specky-requirements-engineer.agent.md: sha256:69f84bf9a9f7d76475f7a21e9067c906b73c2a867db9fefe50abee2a4942b762
14
+ .apm/agents/specky-research-analyst.agent.md: sha256:4bc469d91b8c573cde9097efdbf1ba9fc0bc9580b4e0148e679bb689fbf744b0
15
+ .apm/agents/specky-sdd-clarify.agent.md: sha256:6dcd4879b2fff198a1fa80d61003eec852d4b1a82b7da1bf46c037a00bd463b6
16
+ .apm/agents/specky-sdd-init.agent.md: sha256:dff5a301375885781085f0421524cd58ef2305c43084c71e09625c2255182e8a
17
+ .apm/agents/specky-spec-engineer.agent.md: sha256:1a119fb44d1e48189726d61a1fbe11b2291535defed71316a8dba01f43401efd
18
+ .apm/agents/specky-task-planner.agent.md: sha256:5be3951932c925d09ff7c0a6066ccad2e25bc9fcc3950088b6966cefe6b98fde
19
19
  .apm/agents/specky-test-verifier.agent.md: sha256:26291f7940f909649da55f8755f0b4a03bbaeae15e2fd61c18f00e7488d44220
20
20
  .apm/hooks/scripts/specky-artifact-validator.sh: sha256:2c255e3221cca919ace520ce319c66cc4904aa9c917ce08a52547fe63f8d9770
21
21
  .apm/hooks/scripts/specky-auto-checkpoint.sh: sha256:46d5a336b20c844469574b2281b5cae24ee5116547a262bb160135aaef38d62e
@@ -34,7 +34,11 @@ primitives:
34
34
  .apm/hooks/scripts/specky-spec-sync.sh: sha256:48072608e947a19df03b136627c8b7cf01597cee0aed4b15d01fc9f2a5daccea
35
35
  .apm/hooks/scripts/specky-task-tracer.sh: sha256:fe7bf1d20dc48f21b68b78b8540ce6c9bbeb6b1e299b3099579b7cc922fd3588
36
36
  .apm/hooks/sdd-hooks.json: sha256:ec018c950bfca25d9e67da9eb69bdaf6ca9d38ed7ebc5696f6bd06bffdec55f5
37
- .apm/instructions/copilot-instructions.instructions.md: sha256:5deefa455c7a3dbf08688bcbadbc5746583e1170dde358dbb3ed657d6cc0313b
37
+ .apm/hooks/specky-run.sh: sha256:0cb829414419cc05d5a592df130630045ef94d319f292815203b378b571bd721
38
+ .apm/instructions/claude-instructions.instructions.md: sha256:9b3b77bb220950b3d087b0d5b5999bc60aa4a6d7a07b87fff914e4c1aa872982
39
+ .apm/instructions/copilot-instructions.instructions.md: sha256:9acf227bde8f64f18b15c174171fa148f6d08dec48f163ad4524da77b4a0c93c
40
+ .apm/instructions/cursor-instructions.instructions.md: sha256:ee58c87b29de0c58f373834ebee31c469943821f655153febec6bd1f6c649051
41
+ .apm/instructions/opencode-instructions.instructions.md: sha256:a93d80cef598d99ea4d5116aa64c1e5c8c392316dea31b0448975677a9aac450
38
42
  .apm/prompts/specky-api.prompt.md: sha256:4a13ba39ba58773cbb0bf39c12e462a80d2348aa5fdc4ce612f924658f00c7ed
39
43
  .apm/prompts/specky-brownfield.prompt.md: sha256:0f66839cc82434fead66a7dd5e26934f385afc95a3537b414471f3603b31b4ec
40
44
  .apm/prompts/specky-check-drift.prompt.md: sha256:f3a04b00ef10167cbd1cdcf63f8b8595d3bc8196d107b48963f8b123f711f3af
@@ -47,9 +51,9 @@ primitives:
47
51
  .apm/prompts/specky-greenfield.prompt.md: sha256:64f6cce93ad3fad4f61c72aa079b27bc8c78f43915a8ceff022a3b703fadb230
48
52
  .apm/prompts/specky-implement.prompt.md: sha256:94cb003d5a096b28c099a09cf003dfc3c4da2eb841b859cf1f56f79f5e1bfaec
49
53
  .apm/prompts/specky-migration.prompt.md: sha256:b0ec812513f30718be36666dd2a4cc377ec099d68928e9bfc691ac14360e36f6
50
- .apm/prompts/specky-onboarding.prompt.md: sha256:41e623d0730f7e9bfe5c30569149a4f7ecc925a256645b2b30eee058ffa1c5fc
54
+ .apm/prompts/specky-onboarding.prompt.md: sha256:164d338bf9b48b6f4bbaf78ebcdc504f96c871913add892188b53f35f9b72911
51
55
  .apm/prompts/specky-orchestrate.prompt.md: sha256:8b40cc61bed8f85103c0bf6ea5ff4fa4741b0b8af6a18ec71dc8a049434cf62e
52
- .apm/prompts/specky-pipeline-status.prompt.md: sha256:aa0f65c88a190b02532125acef55174559d997ad0deb3336577fb61b7e7f6fed
56
+ .apm/prompts/specky-pipeline-status.prompt.md: sha256:3c796d1c8e46c635eda5cb08d890b711ce129308ffa309923874361e7912cc27
53
57
  .apm/prompts/specky-release.prompt.md: sha256:6bf07516853fc1ce31d73af9ecaf8c9c49d02c060fd4fe7f9cda329805f3c1c5
54
58
  .apm/prompts/specky-research.prompt.md: sha256:bb1040cbfeb90f9c3ecd0ae6f31e3dbfa09e7937c970844d107414fc7b7f54de
55
59
  .apm/prompts/specky-reset-phase.prompt.md: sha256:81218d63f7d8fdd8b7b9de8e8115f180ced3086dc4bc0853c46268ce335361de
@@ -57,15 +61,21 @@ primitives:
57
61
  .apm/prompts/specky-specify.prompt.md: sha256:b160f1e6d90657702430a404bd7a372f98161b4c78a1d2f43e827cb0b2dc3e04
58
62
  .apm/prompts/specky-tasks.prompt.md: sha256:e06dd4cd6c4e7edddd2bc8319bacc6b4b4c849d3e52ba892fa08f4a77ed711cc
59
63
  .apm/prompts/specky-verify.prompt.md: sha256:217327ac0c25b1d39c2fa41390f535aaae38e7c81d8e4cf3127917f44f98d3b9
64
+ .apm/skills/specky-design-architect/SKILL.md: sha256:2fd4cfccbef9083e5b124b026bceb7caab664675fc72b8144488b14bc4dfbaae
60
65
  .apm/skills/specky-implementer/SKILL.md: sha256:fba84269cb3dc350d5c9dfe307e2dceec635ed4bafe9c4a59e460846acbd267b
61
- .apm/skills/specky-onboarding/SKILL.md: sha256:49e86f1c73fd3997f9a942eab295e6b92984b2f275ddd4f714dfcf8d8fcfe219
66
+ .apm/skills/specky-onboarding/SKILL.md: sha256:52ad70e7b3962745bd49e636cf2ec27f893f5e8b231c5eabf342db6378af73bd
62
67
  .apm/skills/specky-orchestrator/SKILL.md: sha256:7164ed55355028c8ebb40631b90d9901640aece221039d9fa9764f081643fb1d
68
+ .apm/skills/specky-quality-reviewer/SKILL.md: sha256:0ed6a9f62d16b0e65eb491f4c30fbf9b87bc4ffd67fce0759f94c85be816db32
63
69
  .apm/skills/specky-release-engineer/SKILL.md: sha256:45e642cca21ca4b27bf78e96d8f16d59a30a3fd9b7d913ac00470d6c0a8ebeea
64
70
  .apm/skills/specky-research-analyst/SKILL.md: sha256:2a136457af156ce9225798a9c25097b0fcf1e6e9582ac55afd60cc03085b38fa
71
+ .apm/skills/specky-sdd-clarify/SKILL.md: sha256:7d4958d33b71671fa932b82d88da90f7f055c9ba97e45e1083f7db1b9097f42d
72
+ .apm/skills/specky-sdd-init/SKILL.md: sha256:a64c25719b1fbc3b74fe85a5b3284261023382dd393f79d73269c7ebe12f7e67
65
73
  .apm/skills/specky-sdd-markdown-standard/SKILL.md: sha256:ca74b956fa30cc40f2223e6692797f3d7048ddf5b3e082835476fa3e0de1af66
66
74
  .apm/skills/specky-sdd-pipeline/references/ears-notation.md: sha256:580dc051802750904ef409b9f89873ad250326bc17c992bd53366b3b1a04f1c5
67
75
  .apm/skills/specky-sdd-pipeline/references/model-routing.md: sha256:6ca9bd5cde2a8d227c795d37c4d43b712dd183c10d5d87b987514b494f7c28f3
68
- .apm/skills/specky-sdd-pipeline/SKILL.md: sha256:b3eff6d615a598e11178fc8feb32463dcd9e9eed5f6ac66103327bb17f15ab32
76
+ .apm/skills/specky-sdd-pipeline/SKILL.md: sha256:a056e76afcc13964ace69f5fdca001d02870c83e171286b0763919048bbd1027
77
+ .apm/skills/specky-spec-engineer/SKILL.md: sha256:b5722dacc513a69b54a2d474e1dfa4a25029c5f6f2a930fae3b0ed8f3c9eb49e
78
+ .apm/skills/specky-task-planner/SKILL.md: sha256:bf391eaa0541ae507f99eacd18a8747b597bcde4ff84d9a389fdc4aad5e76ed7
69
79
  .apm/skills/specky-test-verifier/SKILL.md: sha256:7e663a68f597f409a7209e07830b90b467052583bde8557eed389848baaa8609
70
- apm-policy.yml: sha256:11aaf7c0555b2b863c5ff0a3ae896397a09bd4c27b8a7003d938680a3fd66fb4
71
- apm.yml: sha256:d28d600234bf9e44caf51dcebd1e86d98d3f52dc3c719fb97c556d9e0265f436
80
+ apm-policy.yml: sha256:421910c17b1a7431f1336d8374538c111245c0c1de58adc6d8eddc185010a639
81
+ apm.yml: sha256:cb3ef9774dc99859582549a6670702e68c0bbc176e9acdc18919cc47d6fb7b32
package/apm.yml CHANGED
@@ -1,6 +1,6 @@
1
1
  name: specky-sdd
2
- version: 3.8.0
3
- description: "Agentic Spec-Driven Development — 10-phase pipeline with 58 MCP tools, 13 agents, 22 prompts, 8 skills, 16 hooks, EARS notation, model routing, and enterprise security"
2
+ version: 3.10.0
3
+ description: "Agentic Spec-Driven Development — 10-phase pipeline with 58 MCP tools, 13 agents, 22 prompts, 14 skills, 16 hooks, EARS notation, model routing, and enterprise security"
4
4
  author: Paula Silva
5
5
  license: MIT
6
6
 
package/config.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  audit_enabled: true
2
- version: "3.8.0"
2
+ version: "3.10.0"
3
3
  pipeline:
4
4
  phases: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
5
5
  phase_names:
@@ -28,8 +28,10 @@ pipeline:
28
28
  9: "specky-release-engineer"
29
29
  lgtm_gates: [2, 4, 5]
30
30
  hooks:
31
- # Source scripts ship at .apm/hooks/scripts and are installed per IDE to
32
- # .claude/hooks/scripts (Claude Code) or .github/hooks/specky/scripts (Copilot).
31
+ # Source scripts ship at .apm/hooks/scripts and are installed per IDE:
32
+ # claude -> .claude/hooks/scripts
33
+ # copilot -> .github/hooks/specky/scripts
34
+ # cursor -> .cursor/hooks.json + .cursor/hooks/scripts
33
35
  shared_path: ".apm/hooks/scripts"
34
36
  blocking:
35
37
  - "specky-artifact-validator"
@@ -1 +1 @@
1
- {"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/compile.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,cAAc;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAoED,wBAAsB,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAmCtE"}
1
+ {"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/compile.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,cAAc;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AA0FD,wBAAsB,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAsCtE"}
@@ -40,17 +40,37 @@ function stripFrontmatter(content) {
40
40
  return content;
41
41
  return content.slice(end + "\n---\n".length).trimStart();
42
42
  }
43
- function readInstructions(instructionsDir) {
43
+ function instructionFileForTarget(target) {
44
+ switch (target) {
45
+ case "claude":
46
+ return "claude-instructions.instructions.md";
47
+ case "cursor":
48
+ return "cursor-instructions.instructions.md";
49
+ case "opencode":
50
+ return "opencode-instructions.instructions.md";
51
+ default:
52
+ return "copilot-instructions.instructions.md";
53
+ }
54
+ }
55
+ /**
56
+ * Select the single instruction primitive for a target. Each target has its own
57
+ * native variant; the Copilot primitive is the neutral fallback. Never merge all
58
+ * primitives — that would leak cross-target naming and duplicate content.
59
+ */
60
+ function readInstructionForTarget(instructionsDir, target) {
44
61
  if (!existsSync(instructionsDir))
45
- return [];
46
- const contents = [];
47
- for (const entry of readdirSync(instructionsDir).sort()) {
48
- const path = resolve(instructionsDir, entry);
49
- if (!statSync(path).isFile() || !entry.endsWith(".md"))
50
- continue;
51
- contents.push(readFileSync(path, "utf8"));
62
+ return null;
63
+ const candidates = [
64
+ instructionFileForTarget(target),
65
+ "copilot-instructions.instructions.md",
66
+ ];
67
+ for (const candidate of candidates) {
68
+ const path = resolve(instructionsDir, candidate);
69
+ if (existsSync(path) && statSync(path).isFile()) {
70
+ return readFileSync(path, "utf8");
71
+ }
52
72
  }
53
- return contents;
73
+ return null;
54
74
  }
55
75
  function outputPathForTarget(workspace, target) {
56
76
  switch (target) {
@@ -76,8 +96,7 @@ export async function runCompile(opts) {
76
96
  const pkg = packageRoot();
77
97
  const src = sourcePaths(pkg);
78
98
  const targets = resolveTargets(opts.target);
79
- const instructions = readInstructions(src.instructionsDir);
80
- if (instructions.length === 0) {
99
+ if (!existsSync(src.instructionsDir) || readdirSync(src.instructionsDir).length === 0) {
81
100
  console.error(`[specky compile] No instruction primitives found at ${src.instructionsDir}`);
82
101
  return 1;
83
102
  }
@@ -92,10 +111,13 @@ export async function runCompile(opts) {
92
111
  console.log(`[specky compile] ${target}: already covered by ${out}`);
93
112
  continue;
94
113
  }
114
+ const content = readInstructionForTarget(src.instructionsDir, target);
115
+ if (!content) {
116
+ console.error(`[specky compile] ${target}: no instruction primitive found`);
117
+ continue;
118
+ }
95
119
  const compiler = getCompiler(target);
96
- const body = instructions
97
- .map((content) => stripFrontmatter(compiler.compileInstruction(content)))
98
- .join("\n\n---\n\n");
120
+ const body = stripFrontmatter(compiler.compileInstruction(content));
99
121
  const compiled = `<!-- Generated by Specky CLI from .apm/instructions -->\n\n${body}`;
100
122
  writeCompiled(out, compiled, opts.dryRun);
101
123
  written.add(out);
@@ -1 +1 @@
1
- {"version":3,"file":"compile.js","sourceRoot":"","sources":["../../../src/cli/commands/compile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compile.js","sourceRoot":"","sources":["../../../src/cli/commands/compile.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,OAAO,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA8OD,wBAAsB,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAkEpE"}
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,OAAO,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAwdD,wBAAsB,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAkEpE"}
@@ -7,7 +7,7 @@
7
7
  * - .vscode/settings.json has Copilot MCP discovery enabled
8
8
  * - .mcp.json / .vscode/mcp.json register the specky server
9
9
  */
10
- import { existsSync, readFileSync, statSync } from "node:fs";
10
+ import { existsSync, readFileSync, readdirSync, statSync } from "node:fs";
11
11
  import { resolve } from "node:path";
12
12
  import { VERSION } from "../../constants.js";
13
13
  import { hashFile } from "../lib/asset-copier.js";
@@ -101,6 +101,212 @@ function checkMcpRegistration(path, label) {
101
101
  detail: hasServer ? "specky server registered" : "specky entry missing",
102
102
  };
103
103
  }
104
+ function checkFileExists(path, label) {
105
+ return {
106
+ name: label,
107
+ pass: existsSync(path),
108
+ detail: existsSync(path) ? "present" : "missing",
109
+ };
110
+ }
111
+ function countEntries(dir, predicate) {
112
+ if (!existsSync(dir))
113
+ return 0;
114
+ try {
115
+ return readdirSync(dir).filter((name) => predicate(name, resolve(dir, name))).length;
116
+ }
117
+ catch {
118
+ return 0;
119
+ }
120
+ }
121
+ function checkFileCount(dir, minCount, label, predicate = (name) => name.length > 0) {
122
+ const count = countEntries(dir, predicate);
123
+ return {
124
+ name: label,
125
+ pass: count >= minCount,
126
+ detail: `${count}/${minCount} present`,
127
+ };
128
+ }
129
+ function walkFiles(dir) {
130
+ if (!existsSync(dir))
131
+ return [];
132
+ const files = [];
133
+ for (const name of readdirSync(dir)) {
134
+ const path = resolve(dir, name);
135
+ const st = statSync(path);
136
+ if (st.isDirectory())
137
+ files.push(...walkFiles(path));
138
+ else if (st.isFile())
139
+ files.push(path);
140
+ }
141
+ return files;
142
+ }
143
+ function checkCursorRule(targets) {
144
+ const path = resolve(targets.cursor.rules, "specky-sdd.mdc");
145
+ if (!existsSync(path)) {
146
+ return { name: "Cursor rule", pass: false, detail: "specky-sdd.mdc missing" };
147
+ }
148
+ const text = readFileSync(path, "utf8");
149
+ const ruleLines = text.trimEnd().split(/\r?\n/);
150
+ const hasDescription = ruleLines.some((line) => line.startsWith("description:") && line.trim() !== "description:");
151
+ const hasAlwaysApply = ruleLines.some((line) => line.trim() === "alwaysApply: true");
152
+ const hasSpeckyTitle = text.includes("Specky SDD");
153
+ const noWorkspaceLeak = !text.includes("@workspace");
154
+ const ok = hasDescription && hasAlwaysApply && hasSpeckyTitle && noWorkspaceLeak;
155
+ const details = [
156
+ hasDescription ? "description" : "missing description",
157
+ hasAlwaysApply ? "alwaysApply" : "missing alwaysApply",
158
+ hasSpeckyTitle ? "specky-sdd" : "missing title",
159
+ noWorkspaceLeak ? "no @workspace" : "has @workspace leak",
160
+ ];
161
+ return { name: "Cursor rule", pass: ok, detail: details.join(", ") };
162
+ }
163
+ function checkNoCopilotLeak(root, workspace, label) {
164
+ const needles = ["applyTo", "@workspace", ".vscode/mcp.json", "Copilot Instructions"];
165
+ const hits = [];
166
+ for (const file of walkFiles(root)) {
167
+ const text = readFileSync(file, "utf8");
168
+ if (needles.some((needle) => text.includes(needle))) {
169
+ hits.push(file.replace(workspace + "/", ""));
170
+ }
171
+ }
172
+ return {
173
+ name: label,
174
+ pass: hits.length === 0,
175
+ detail: hits.length === 0 ? "no Copilot/.vscode tokens" : hits.slice(0, 3).join(", "),
176
+ };
177
+ }
178
+ function checkCopilotHooksManifest(targets) {
179
+ const manifest = readJsonSafe(targets.copilot.hooksManifest);
180
+ if (!manifest) {
181
+ return { name: "Copilot hooks manifest", pass: false, detail: "sdd-hooks.json missing" };
182
+ }
183
+ const serialized = JSON.stringify(manifest);
184
+ const hasSddMatcher = serialized.includes("sdd_");
185
+ return {
186
+ name: "Copilot hooks manifest",
187
+ pass: hasSddMatcher,
188
+ detail: hasSddMatcher ? "sdd-hooks.json with sdd_* matchers" : "no sdd_* matchers in manifest",
189
+ };
190
+ }
191
+ function checkClaudeHooksInSettings(targets, installTargets) {
192
+ if (installTargets.includes("copilot")) {
193
+ return {
194
+ name: "Claude hooks in settings",
195
+ pass: true,
196
+ detail: "intentionally omitted (Copilot co-install strips .claude hooks)",
197
+ };
198
+ }
199
+ const settings = readJsonSafe(targets.claude.settingsJson);
200
+ if (!settings?.hooks) {
201
+ return { name: "Claude hooks in settings", pass: false, detail: "no hooks key in .claude/settings.json" };
202
+ }
203
+ const serialized = JSON.stringify(settings.hooks);
204
+ const hasSpecky = serialized.includes("specky");
205
+ const hasLifecycle = serialized.includes("PreToolUse") || serialized.includes("preToolUse");
206
+ return {
207
+ name: "Claude hooks in settings",
208
+ pass: hasSpecky && hasLifecycle,
209
+ detail: hasSpecky && hasLifecycle ? "Specky hooks registered" : "Specky hooks missing from settings",
210
+ };
211
+ }
212
+ function checkAgentsMd(workspace) {
213
+ const path = resolve(workspace, "AGENTS.md");
214
+ if (!existsSync(path)) {
215
+ return {
216
+ name: "AGENTS.md context",
217
+ pass: true,
218
+ detail: "recommended: run specky compile --target=opencode",
219
+ };
220
+ }
221
+ const text = readFileSync(path, "utf8");
222
+ const ok = text.includes("Specky SDD");
223
+ return {
224
+ name: "AGENTS.md context",
225
+ pass: ok,
226
+ detail: ok ? "contains Specky SDD guidance" : "missing Specky SDD section",
227
+ };
228
+ }
229
+ function detectWorkspaceHarnessTargets(workspace) {
230
+ const found = [];
231
+ if (existsSync(resolve(workspace, ".cursor/mcp.json")) || existsSync(resolve(workspace, ".cursor/rules"))) {
232
+ found.push("cursor");
233
+ }
234
+ if (existsSync(resolve(workspace, "opencode.json"))) {
235
+ found.push("opencode");
236
+ }
237
+ if (existsSync(resolve(workspace, ".agents/skills"))) {
238
+ const skills = readdirSync(resolve(workspace, ".agents/skills"));
239
+ if (skills.some((name) => name.startsWith("specky-"))) {
240
+ found.push("agent-skills");
241
+ }
242
+ }
243
+ const detected = detectIde(workspace);
244
+ if (detected.claudeCode)
245
+ found.push("claude");
246
+ if (detected.copilot)
247
+ found.push("copilot");
248
+ return [...new Set(found)];
249
+ }
250
+ function checkCursorHooksManifest(targets) {
251
+ const manifest = readJsonSafe(targets.cursor.hooksManifest);
252
+ if (!manifest) {
253
+ return { name: "Cursor hooks.json", pass: false, detail: "missing or unreadable" };
254
+ }
255
+ const hasMcpHooks = Boolean(manifest.hooks?.beforeMCPExecution?.length) && Boolean(manifest.hooks?.afterMCPExecution?.length);
256
+ return {
257
+ name: "Cursor hooks.json",
258
+ pass: manifest.version === 1 && hasMcpHooks,
259
+ detail: manifest.version === 1 && hasMcpHooks ? "version 1 with MCP hooks" : "missing version 1 or MCP hooks",
260
+ };
261
+ }
262
+ function checkCursorInstall(targets, workspace) {
263
+ return [
264
+ checkMcpRegistration(targets.cursor.mcp, ".cursor/mcp.json"),
265
+ checkFileCount(targets.cursor.agents, 13, "Cursor agents", (name) => name.startsWith("specky-") && name.endsWith(".md")),
266
+ checkFileCount(targets.cursor.commands, 22, "Cursor commands", (name) => name.startsWith("specky-") && name.endsWith(".md")),
267
+ checkFileCount(targets.shared.agentSkills, 14, "Cursor skills", (name, path) => name.startsWith("specky-") && statSync(path).isDirectory()),
268
+ checkCursorRule(targets),
269
+ checkNoCopilotLeak(targets.cursor.root, workspace, "Cursor leakage"),
270
+ checkCursorHooksManifest(targets),
271
+ checkFileCount(targets.cursor.hooksScripts, 16, "Cursor hook scripts", (name) => name.endsWith(".sh") || name.endsWith(".mjs")),
272
+ checkFileExists(targets.cursor.hooksRunner, "Cursor hook runner"),
273
+ ];
274
+ }
275
+ function checkCopilotInstall(targets, workspace) {
276
+ return [
277
+ checkMcpRegistration(targets.shared.vscodeMcp, ".vscode/mcp.json"),
278
+ checkVscodeSettings(workspace),
279
+ checkFileCount(targets.copilot.agents, 13, "Copilot agents", (name) => name.startsWith("specky-") && name.endsWith(".md")),
280
+ checkFileCount(targets.copilot.prompts, 22, "Copilot prompts", (name) => name.startsWith("specky-") && name.endsWith(".md")),
281
+ checkFileCount(targets.copilot.skills, 14, "Copilot skills", (name, path) => name.startsWith("specky-") && statSync(path).isDirectory()),
282
+ checkFileExists(resolve(targets.copilot.instructions, "copilot-instructions.instructions.md"), "Copilot instruction"),
283
+ checkFileCount(targets.copilot.hooksScripts, 16, "Copilot hook scripts", (name) => name.endsWith(".sh") || name.endsWith(".mjs")),
284
+ checkCopilotHooksManifest(targets),
285
+ ];
286
+ }
287
+ function checkClaudeInstall(targets, workspace, installTargets) {
288
+ return [
289
+ checkMcpRegistration(targets.shared.claudeMcp, ".mcp.json"),
290
+ checkClaudePermissions(targets),
291
+ checkFileCount(targets.claude.agents, 13, "Claude agents", (name) => name.startsWith("specky-") && name.endsWith(".md")),
292
+ checkFileCount(targets.claude.commands, 22, "Claude commands", (name) => name.startsWith("specky-") && name.endsWith(".md")),
293
+ checkFileCount(targets.claude.skills, 14, "Claude skills", (name, path) => name.startsWith("specky-") && statSync(path).isDirectory()),
294
+ checkFileExists(resolve(targets.claude.rules, "specky-sdd.md"), "Claude rule"),
295
+ checkNoCopilotLeak(targets.claude.root, workspace, "Claude leakage"),
296
+ checkFileCount(targets.claude.hooksScripts, 16, "Claude hook scripts", (name) => name.endsWith(".sh") || name.endsWith(".mjs")),
297
+ checkClaudeHooksInSettings(targets, installTargets),
298
+ ];
299
+ }
300
+ function checkOpenCodeInstall(targets, workspace) {
301
+ return [
302
+ checkMcpRegistration(targets.opencode.mcp, "opencode.json"),
303
+ checkFileCount(targets.opencode.agents, 13, "OpenCode agents", (name) => name.startsWith("specky-") && name.endsWith(".md")),
304
+ checkFileCount(targets.opencode.commands, 22, "OpenCode commands", (name) => name.startsWith("specky-") && name.endsWith(".md")),
305
+ checkFileCount(targets.shared.agentSkills, 14, "OpenCode skills", (name, path) => name.startsWith("specky-") && statSync(path).isDirectory()),
306
+ checkNoCopilotLeak(targets.opencode.root, workspace, "OpenCode leakage"),
307
+ checkAgentsMd(workspace),
308
+ ];
309
+ }
104
310
  function loadInstallMeta(path) {
105
311
  return readJsonSafe(path);
106
312
  }
@@ -127,34 +333,36 @@ function resolveInstalledTargets(installMeta, workspace) {
127
333
  };
128
334
  }
129
335
  const detected = detectIde(workspace);
130
- if (detected.signals.length > 0) {
336
+ const harnessTargets = detectWorkspaceHarnessTargets(workspace);
337
+ if (harnessTargets.length > 0) {
131
338
  return {
132
- targets: targetsFromIde(detected.recommendation),
339
+ targets: harnessTargets,
133
340
  source: "workspace-signals",
134
- detail: `inferred from workspace signals: ${detected.signals.join(", ")}`,
341
+ detail: `inferred from workspace signals: ${detected.signals.join(", ") || harnessTargets.join(", ")}`,
135
342
  };
136
343
  }
137
344
  return {
138
- targets: ["claude", "copilot"],
345
+ targets: [],
139
346
  source: "default",
140
- detail: "no install metadata or IDE signals found; validating shared defaults only",
347
+ detail: "no install metadata or IDE signals found; run specky install --target=<harness>",
141
348
  };
142
349
  }
143
350
  function runConfigChecks(targets, workspace, installTargets) {
144
351
  const checks = [];
145
352
  if (installTargets.includes("claude")) {
146
- checks.push(checkClaudePermissions(targets));
147
- checks.push(checkMcpRegistration(targets.shared.claudeMcp, ".mcp.json"));
353
+ checks.push(...checkClaudeInstall(targets, workspace, installTargets));
148
354
  }
149
355
  if (installTargets.includes("copilot")) {
150
- checks.push(checkMcpRegistration(targets.shared.vscodeMcp, ".vscode/mcp.json"));
151
- checks.push(checkVscodeSettings(workspace));
356
+ checks.push(...checkCopilotInstall(targets, workspace));
152
357
  }
153
358
  if (installTargets.includes("cursor")) {
154
- checks.push(checkMcpRegistration(targets.cursor.mcp, ".cursor/mcp.json"));
359
+ checks.push(...checkCursorInstall(targets, workspace));
155
360
  }
156
361
  if (installTargets.includes("opencode")) {
157
- checks.push(checkMcpRegistration(targets.opencode.mcp, "opencode.json"));
362
+ checks.push(...checkOpenCodeInstall(targets, workspace));
363
+ }
364
+ if (installTargets.includes("agent-skills")) {
365
+ checks.push(checkFileCount(targets.shared.agentSkills, 14, "Agent skills bundle", (name, path) => name.startsWith("specky-") && statSync(path).isDirectory()));
158
366
  }
159
367
  return checks;
160
368
  }
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -8,8 +8,8 @@ import { targetPaths } from "../lib/paths.js";
8
8
  export async function runHooks(opts) {
9
9
  const workspace = opts.workspace ?? process.cwd();
10
10
  const t = targetPaths(workspace);
11
- // Prefer .claude/hooks/scripts; fall back to .github/hooks/specky/scripts
12
- const candidates = [t.claude.hooksScripts, t.copilot.hooksScripts];
11
+ // Prefer Cursor hooks for Cursor-only workspaces, then Claude/Copilot.
12
+ const candidates = [t.cursor.hooksScripts, t.claude.hooksScripts, t.copilot.hooksScripts];
13
13
  const hooksDir = candidates.find((d) => existsSync(d));
14
14
  if (!hooksDir) {
15
15
  console.error("[specky hooks] No hooks directory found. Run `npx specky init` first.");
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/cli/commands/hooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/cli/commands/hooks.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAQjE,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAoND,wBAAsB,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAgEhE"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAQjE,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAuND,wBAAsB,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAgEhE"}