claude-code-pilot 2.0.0 → 3.0.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 (455) hide show
  1. package/bin/install.js +267 -250
  2. package/manifest.json +5 -18
  3. package/package.json +5 -7
  4. package/src/agents/build-error-resolver.md +114 -0
  5. package/src/agents/ccp-advisor-researcher.md +104 -0
  6. package/src/agents/ccp-assumptions-analyzer.md +105 -0
  7. package/{gsd/agents/gsd-codebase-mapper.md → src/agents/ccp-codebase-mapper.md} +7 -7
  8. package/{gsd/agents/gsd-debugger.md → src/agents/ccp-debugger.md} +125 -8
  9. package/{gsd/agents/gsd-executor.md → src/agents/ccp-executor.md} +31 -20
  10. package/{gsd/agents/gsd-integration-checker.md → src/agents/ccp-integration-checker.md} +2 -2
  11. package/{gsd/agents/gsd-nyquist-auditor.md → src/agents/ccp-nyquist-auditor.md} +3 -3
  12. package/{gsd/agents/gsd-phase-researcher.md → src/agents/ccp-phase-researcher.md} +127 -13
  13. package/{gsd/agents/gsd-plan-checker.md → src/agents/ccp-plan-checker.md} +57 -21
  14. package/{gsd/agents/gsd-planner.md → src/agents/ccp-planner.md} +61 -23
  15. package/{gsd/agents/gsd-project-researcher.md → src/agents/ccp-project-researcher.md} +33 -6
  16. package/{gsd/agents/gsd-research-synthesizer.md → src/agents/ccp-research-synthesizer.md} +11 -11
  17. package/{gsd/agents/gsd-roadmapper.md → src/agents/ccp-roadmapper.md} +39 -10
  18. package/src/agents/ccp-ui-auditor.md +439 -0
  19. package/src/agents/ccp-ui-checker.md +300 -0
  20. package/src/agents/ccp-ui-researcher.md +357 -0
  21. package/{gsd/agents/gsd-verifier.md → src/agents/ccp-verifier.md} +81 -15
  22. package/src/agents/cpp-build-resolver.md +90 -0
  23. package/src/agents/cpp-reviewer.md +72 -0
  24. package/src/agents/database-reviewer.md +91 -0
  25. package/src/agents/docs-lookup.md +68 -0
  26. package/src/agents/flutter-reviewer.md +243 -0
  27. package/src/agents/go-build-resolver.md +94 -0
  28. package/src/agents/go-reviewer.md +76 -0
  29. package/src/agents/java-build-resolver.md +153 -0
  30. package/src/agents/java-reviewer.md +92 -0
  31. package/src/agents/kotlin-build-resolver.md +118 -0
  32. package/src/agents/kotlin-reviewer.md +159 -0
  33. package/src/agents/planner.md +212 -0
  34. package/src/agents/python-reviewer.md +98 -0
  35. package/src/agents/pytorch-build-resolver.md +120 -0
  36. package/src/agents/refactor-cleaner.md +85 -0
  37. package/src/agents/rust-build-resolver.md +148 -0
  38. package/src/agents/rust-reviewer.md +94 -0
  39. package/src/agents/typescript-reviewer.md +112 -0
  40. package/src/available-rules/README.md +80 -0
  41. package/src/available-rules/cpp/coding-style.md +44 -0
  42. package/src/available-rules/cpp/hooks.md +39 -0
  43. package/src/available-rules/cpp/patterns.md +51 -0
  44. package/src/available-rules/cpp/security.md +51 -0
  45. package/src/available-rules/cpp/testing.md +44 -0
  46. package/src/available-rules/csharp/coding-style.md +72 -0
  47. package/src/available-rules/csharp/hooks.md +25 -0
  48. package/src/available-rules/csharp/patterns.md +50 -0
  49. package/src/available-rules/csharp/security.md +58 -0
  50. package/src/available-rules/csharp/testing.md +46 -0
  51. package/src/available-rules/java/coding-style.md +114 -0
  52. package/src/available-rules/java/hooks.md +18 -0
  53. package/src/available-rules/java/patterns.md +146 -0
  54. package/src/available-rules/java/security.md +100 -0
  55. package/src/available-rules/java/testing.md +131 -0
  56. package/src/available-rules/kotlin/hooks.md +17 -0
  57. package/src/available-rules/rust/coding-style.md +151 -0
  58. package/src/available-rules/rust/hooks.md +16 -0
  59. package/src/available-rules/rust/patterns.md +168 -0
  60. package/src/available-rules/rust/security.md +141 -0
  61. package/src/available-rules/rust/testing.md +154 -0
  62. package/src/commands/aside.md +164 -0
  63. package/src/commands/build-fix.md +62 -0
  64. package/src/commands/ccp/add-backlog.md +76 -0
  65. package/{gsd/commands-gsd → src/commands/ccp}/add-phase.md +3 -3
  66. package/{gsd/commands-gsd → src/commands/ccp}/add-tests.md +5 -5
  67. package/{gsd/commands-gsd → src/commands/ccp}/add-todo.md +4 -4
  68. package/{gsd/commands-gsd → src/commands/ccp}/audit-milestone.md +3 -3
  69. package/src/commands/ccp/audit-uat.md +24 -0
  70. package/src/commands/ccp/autonomous.md +41 -0
  71. package/{gsd/commands-gsd → src/commands/ccp}/check-todos.md +3 -3
  72. package/{gsd/commands-gsd → src/commands/ccp}/cleanup.md +3 -3
  73. package/{gsd/commands-gsd → src/commands/ccp}/complete-milestone.md +9 -9
  74. package/{gsd/commands-gsd → src/commands/ccp}/debug.md +14 -9
  75. package/src/commands/ccp/discuss-phase.md +64 -0
  76. package/src/commands/ccp/do.md +30 -0
  77. package/src/commands/ccp/execute-phase.md +59 -0
  78. package/src/commands/ccp/fast.md +30 -0
  79. package/src/commands/ccp/forensics.md +56 -0
  80. package/{gsd/commands-gsd → src/commands/ccp}/health.md +3 -3
  81. package/{gsd/commands-gsd → src/commands/ccp}/help.md +5 -5
  82. package/{gsd/commands-gsd → src/commands/ccp}/insert-phase.md +3 -3
  83. package/{gsd/commands-gsd → src/commands/ccp}/list-phase-assumptions.md +2 -2
  84. package/src/commands/ccp/manager.md +39 -0
  85. package/{gsd/commands-gsd → src/commands/ccp}/map-codebase.md +7 -7
  86. package/src/commands/ccp/milestone-summary.md +51 -0
  87. package/{gsd/commands-gsd → src/commands/ccp}/new-milestone.md +8 -8
  88. package/{gsd/commands-gsd → src/commands/ccp}/new-project.md +8 -8
  89. package/src/commands/ccp/next.md +24 -0
  90. package/src/commands/ccp/note.md +34 -0
  91. package/{gsd/commands-gsd → src/commands/ccp}/pause-work.md +3 -3
  92. package/{gsd/commands-gsd → src/commands/ccp}/plan-milestone-gaps.md +5 -5
  93. package/{gsd/commands-gsd → src/commands/ccp}/plan-phase.md +9 -7
  94. package/src/commands/ccp/plant-seed.md +28 -0
  95. package/src/commands/ccp/pr-branch.md +25 -0
  96. package/{gsd/commands-gsd → src/commands/ccp}/progress.md +3 -3
  97. package/{gsd/commands-gsd → src/commands/ccp}/quick.md +10 -8
  98. package/{gsd/commands-gsd → src/commands/ccp}/remove-phase.md +3 -3
  99. package/{gsd/commands-gsd → src/commands/ccp}/research-phase.md +17 -12
  100. package/{gsd/commands-gsd → src/commands/ccp}/resume-work.md +3 -3
  101. package/src/commands/ccp/review-backlog.md +61 -0
  102. package/src/commands/ccp/session-report.md +19 -0
  103. package/src/commands/ccp/set-profile.md +12 -0
  104. package/{gsd/commands-gsd → src/commands/ccp}/settings.md +5 -5
  105. package/src/commands/ccp/ship.md +23 -0
  106. package/src/commands/ccp/stats.md +18 -0
  107. package/src/commands/ccp/thread.md +127 -0
  108. package/src/commands/ccp/ui-phase.md +34 -0
  109. package/src/commands/ccp/ui-review.md +32 -0
  110. package/{gsd/commands-gsd → src/commands/ccp}/update.md +5 -5
  111. package/{gsd/commands-gsd → src/commands/ccp}/validate-phase.md +3 -3
  112. package/{gsd/commands-gsd → src/commands/ccp}/verify-work.md +5 -5
  113. package/src/commands/code-review.md +40 -0
  114. package/src/commands/context-budget.md +29 -0
  115. package/src/commands/cpp-build.md +173 -0
  116. package/src/commands/cpp-review.md +132 -0
  117. package/src/commands/cpp-test.md +251 -0
  118. package/src/commands/docs.md +31 -0
  119. package/src/commands/e2e.md +364 -0
  120. package/src/commands/eval.md +120 -0
  121. package/{ecc → src}/commands/evolve.md +2 -2
  122. package/src/commands/go-build.md +183 -0
  123. package/src/commands/go-review.md +148 -0
  124. package/src/commands/go-test.md +268 -0
  125. package/src/commands/gradle-build.md +70 -0
  126. package/src/commands/harness-audit.md +71 -0
  127. package/src/commands/kotlin-build.md +174 -0
  128. package/src/commands/kotlin-review.md +140 -0
  129. package/src/commands/kotlin-test.md +312 -0
  130. package/src/commands/orchestrate.md +231 -0
  131. package/src/commands/plan.md +114 -0
  132. package/src/commands/prompt-optimize.md +38 -0
  133. package/src/commands/prune.md +25 -0
  134. package/src/commands/python-review.md +297 -0
  135. package/{ecc → src}/commands/quality-gate.md +1 -1
  136. package/src/commands/refactor-clean.md +80 -0
  137. package/src/commands/rules-distill.md +11 -0
  138. package/src/commands/rust-build.md +187 -0
  139. package/src/commands/rust-review.md +142 -0
  140. package/src/commands/rust-test.md +308 -0
  141. package/{ecc → src}/commands/sessions.md +10 -10
  142. package/src/commands/setup-pm.md +80 -0
  143. package/{kit → src}/commands/setup.md +45 -19
  144. package/src/commands/skill-create.md +172 -0
  145. package/src/commands/skill-health.md +51 -0
  146. package/src/commands/tdd.md +328 -0
  147. package/src/commands/test-coverage.md +69 -0
  148. package/src/commands/update-codemaps.md +72 -0
  149. package/src/commands/update-docs.md +84 -0
  150. package/{gsd/hooks/gsd-context-monitor.js → src/hooks/ccp-context-monitor.js} +3 -3
  151. package/src/hooks/ccp-prompt-guard.js +96 -0
  152. package/{gsd/hooks/gsd-statusline.js → src/hooks/ccp-statusline.js} +7 -7
  153. package/src/hooks/ccp-workflow-guard.js +94 -0
  154. package/src/hooks/config-protection.js +141 -0
  155. package/{kit → src}/hooks/kit-check-update.js +7 -4
  156. package/src/hooks/mcp-health-check.js +620 -0
  157. package/{ecc/scripts → src}/hooks/run-with-flags-shell.sh +1 -1
  158. package/{ecc/scripts → src}/hooks/run-with-flags.js +74 -13
  159. package/src/hooks/session-end-marker.js +29 -0
  160. package/{ecc/scripts → src}/hooks/session-end.js +83 -40
  161. package/{ecc/scripts → src}/hooks/session-start.js +75 -9
  162. package/{ecc/scripts → src}/lib/hook-flags.js +8 -4
  163. package/{ecc/scripts → src}/lib/project-detect.js +2 -1
  164. package/{ecc/scripts → src}/lib/session-manager.d.ts +5 -1
  165. package/{ecc/scripts → src}/lib/session-manager.js +202 -92
  166. package/{ecc/scripts → src}/lib/utils.d.ts +23 -1
  167. package/{ecc/scripts → src}/lib/utils.js +91 -3
  168. package/{gsd/get-shit-done/bin/gsd-tools.cjs → src/pilot/bin/ccp-tools.cjs} +257 -86
  169. package/{gsd/get-shit-done → src/pilot}/bin/lib/commands.cjs +1 -1
  170. package/src/pilot/bin/lib/config.cjs +444 -0
  171. package/src/pilot/bin/lib/core.cjs +1190 -0
  172. package/src/pilot/bin/lib/init.cjs +1281 -0
  173. package/src/pilot/bin/lib/model-profiles.cjs +67 -0
  174. package/{gsd/get-shit-done → src/pilot}/bin/lib/phase.cjs +2 -2
  175. package/src/pilot/bin/lib/security.cjs +382 -0
  176. package/{gsd/get-shit-done → src/pilot}/bin/lib/state.cjs +1 -1
  177. package/src/pilot/bin/lib/uat.cjs +282 -0
  178. package/{gsd/get-shit-done → src/pilot}/bin/lib/verify.cjs +10 -10
  179. package/{gsd/get-shit-done → src/pilot}/references/continuation-format.md +16 -16
  180. package/{gsd/get-shit-done → src/pilot}/references/decimal-phase-calculation.md +5 -5
  181. package/{gsd/get-shit-done → src/pilot}/references/git-integration.md +5 -5
  182. package/{gsd/get-shit-done → src/pilot}/references/git-planning-commit.md +4 -4
  183. package/src/pilot/references/mcp-servers.json +153 -0
  184. package/{gsd/get-shit-done → src/pilot}/references/model-profile-resolution.md +2 -2
  185. package/{gsd/get-shit-done → src/pilot}/references/model-profiles.md +20 -20
  186. package/{gsd/get-shit-done → src/pilot}/references/phase-argument-parsing.md +4 -4
  187. package/{gsd/get-shit-done → src/pilot}/references/planning-config.md +15 -15
  188. package/{gsd/get-shit-done → src/pilot}/references/ui-brand.md +5 -5
  189. package/{gsd/get-shit-done → src/pilot}/references/verification-patterns.md +1 -1
  190. package/{gsd/get-shit-done → src/pilot}/templates/DEBUG.md +1 -1
  191. package/{gsd/get-shit-done → src/pilot}/templates/UAT.md +3 -3
  192. package/src/pilot/templates/UI-SPEC.md +100 -0
  193. package/{gsd/get-shit-done → src/pilot}/templates/VALIDATION.md +1 -1
  194. package/src/pilot/templates/claude-md.md +122 -0
  195. package/{gsd/get-shit-done → src/pilot}/templates/codebase/architecture.md +2 -2
  196. package/{gsd/get-shit-done → src/pilot}/templates/codebase/structure.md +13 -13
  197. package/{gsd/get-shit-done → src/pilot}/templates/context.md +4 -4
  198. package/src/pilot/templates/copilot-instructions.md +7 -0
  199. package/{gsd/get-shit-done → src/pilot}/templates/debug-subagent-prompt.md +4 -4
  200. package/src/pilot/templates/dev-preferences.md +21 -0
  201. package/{gsd/get-shit-done → src/pilot}/templates/discovery.md +2 -2
  202. package/src/pilot/templates/discussion-log.md +63 -0
  203. package/{gsd/get-shit-done → src/pilot}/templates/phase-prompt.md +12 -12
  204. package/{gsd/get-shit-done → src/pilot}/templates/planner-subagent-prompt.md +7 -7
  205. package/{gsd/get-shit-done → src/pilot}/templates/project.md +1 -1
  206. package/{gsd/get-shit-done → src/pilot}/templates/research.md +2 -2
  207. package/{gsd/get-shit-done → src/pilot}/templates/state.md +2 -2
  208. package/{gsd/get-shit-done → src/pilot}/templates/summary-complex.md +1 -1
  209. package/{gsd/get-shit-done → src/pilot}/workflows/add-phase.md +11 -11
  210. package/{gsd/get-shit-done → src/pilot}/workflows/add-tests.md +15 -15
  211. package/{gsd/get-shit-done → src/pilot}/workflows/add-todo.md +7 -7
  212. package/{gsd/get-shit-done → src/pilot}/workflows/audit-milestone.md +24 -16
  213. package/src/pilot/workflows/audit-uat.md +109 -0
  214. package/src/pilot/workflows/autonomous.md +891 -0
  215. package/{gsd/get-shit-done → src/pilot}/workflows/check-todos.md +10 -10
  216. package/{gsd/get-shit-done → src/pilot}/workflows/cleanup.md +3 -3
  217. package/{gsd/get-shit-done → src/pilot}/workflows/complete-milestone.md +19 -16
  218. package/{gsd/get-shit-done → src/pilot}/workflows/diagnose-issues.md +9 -4
  219. package/{gsd/get-shit-done → src/pilot}/workflows/discovery-phase.md +8 -8
  220. package/src/pilot/workflows/discuss-phase-assumptions.md +653 -0
  221. package/{gsd/get-shit-done → src/pilot}/workflows/discuss-phase.md +407 -49
  222. package/src/pilot/workflows/do.md +104 -0
  223. package/src/pilot/workflows/execute-phase.md +821 -0
  224. package/{gsd/get-shit-done → src/pilot}/workflows/execute-plan.md +79 -28
  225. package/src/pilot/workflows/fast.md +105 -0
  226. package/src/pilot/workflows/forensics.md +265 -0
  227. package/{gsd/get-shit-done → src/pilot}/workflows/health.md +34 -11
  228. package/src/pilot/workflows/help.md +775 -0
  229. package/{gsd/get-shit-done → src/pilot}/workflows/insert-phase.md +10 -10
  230. package/{gsd/get-shit-done → src/pilot}/workflows/list-phase-assumptions.md +4 -4
  231. package/src/pilot/workflows/manager.md +362 -0
  232. package/{gsd/get-shit-done → src/pilot}/workflows/map-codebase.md +27 -17
  233. package/src/pilot/workflows/milestone-summary.md +223 -0
  234. package/{gsd/get-shit-done → src/pilot}/workflows/new-milestone.md +135 -33
  235. package/{gsd/get-shit-done → src/pilot}/workflows/new-project.md +152 -79
  236. package/src/pilot/workflows/next.md +97 -0
  237. package/src/pilot/workflows/node-repair.md +92 -0
  238. package/src/pilot/workflows/note.md +156 -0
  239. package/src/pilot/workflows/pause-work.md +177 -0
  240. package/{gsd/get-shit-done → src/pilot}/workflows/plan-milestone-gaps.md +10 -11
  241. package/src/pilot/workflows/plan-phase.md +859 -0
  242. package/src/pilot/workflows/plant-seed.md +169 -0
  243. package/src/pilot/workflows/pr-branch.md +129 -0
  244. package/{gsd/get-shit-done → src/pilot}/workflows/progress.md +95 -34
  245. package/{gsd/get-shit-done → src/pilot}/workflows/quick.md +33 -21
  246. package/{gsd/get-shit-done → src/pilot}/workflows/remove-phase.md +14 -14
  247. package/{gsd/get-shit-done → src/pilot}/workflows/research-phase.md +18 -10
  248. package/{gsd/get-shit-done → src/pilot}/workflows/resume-project.md +37 -18
  249. package/src/pilot/workflows/session-report.md +146 -0
  250. package/{gsd/get-shit-done → src/pilot}/workflows/set-profile.md +7 -7
  251. package/{gsd/get-shit-done → src/pilot}/workflows/settings.md +75 -22
  252. package/src/pilot/workflows/ship.md +228 -0
  253. package/src/pilot/workflows/stats.md +60 -0
  254. package/{gsd/get-shit-done → src/pilot}/workflows/transition.md +57 -17
  255. package/src/pilot/workflows/ui-phase.md +302 -0
  256. package/src/pilot/workflows/ui-review.md +165 -0
  257. package/{gsd/get-shit-done → src/pilot}/workflows/update.md +88 -58
  258. package/{gsd/get-shit-done → src/pilot}/workflows/validate-phase.md +24 -17
  259. package/{gsd/get-shit-done → src/pilot}/workflows/verify-phase.md +26 -15
  260. package/{gsd/get-shit-done → src/pilot}/workflows/verify-work.md +89 -37
  261. package/{ecc → src}/rules/common/agents.md +1 -0
  262. package/{ecc → src}/rules/common/coding-style.md +21 -0
  263. package/src/skills/agentic-engineering/SKILL.md +63 -0
  264. package/src/skills/ai-first-engineering/SKILL.md +51 -0
  265. package/src/skills/ai-regression-testing/SKILL.md +385 -0
  266. package/src/skills/api-design/SKILL.md +523 -0
  267. package/src/skills/architecture-decision-records/SKILL.md +179 -0
  268. package/src/skills/backend-patterns/SKILL.md +598 -0
  269. package/src/skills/benchmark/SKILL.md +87 -0
  270. package/src/skills/blueprint/SKILL.md +90 -0
  271. package/src/skills/browser-qa/SKILL.md +81 -0
  272. package/src/skills/claude-api/SKILL.md +337 -0
  273. package/src/skills/codebase-onboarding/SKILL.md +233 -0
  274. package/src/skills/coding-standards/SKILL.md +530 -0
  275. package/src/skills/context-budget/SKILL.md +135 -0
  276. package/{ecc → src}/skills/continuous-learning-v2/SKILL.md +2 -2
  277. package/{ecc → src}/skills/continuous-learning-v2/agents/observer-loop.sh +1 -1
  278. package/src/skills/cpp-coding-standards/SKILL.md +723 -0
  279. package/src/skills/cpp-testing/SKILL.md +324 -0
  280. package/src/skills/database-migrations/SKILL.md +429 -0
  281. package/src/skills/deep-research/SKILL.md +155 -0
  282. package/src/skills/deployment-patterns/SKILL.md +427 -0
  283. package/src/skills/django-patterns/SKILL.md +734 -0
  284. package/src/skills/django-security/SKILL.md +593 -0
  285. package/src/skills/django-tdd/SKILL.md +729 -0
  286. package/src/skills/django-verification/SKILL.md +469 -0
  287. package/src/skills/docker-patterns/SKILL.md +364 -0
  288. package/src/skills/documentation-lookup/SKILL.md +90 -0
  289. package/src/skills/e2e-testing/SKILL.md +326 -0
  290. package/src/skills/exa-search/SKILL.md +103 -0
  291. package/src/skills/frontend-patterns/SKILL.md +642 -0
  292. package/src/skills/golang-patterns/SKILL.md +674 -0
  293. package/src/skills/golang-testing/SKILL.md +720 -0
  294. package/src/skills/java-coding-standards/SKILL.md +147 -0
  295. package/src/skills/jpa-patterns/SKILL.md +151 -0
  296. package/src/skills/kotlin-coroutines-flows/SKILL.md +284 -0
  297. package/src/skills/kotlin-exposed-patterns/SKILL.md +719 -0
  298. package/src/skills/kotlin-ktor-patterns/SKILL.md +689 -0
  299. package/src/skills/kotlin-patterns/SKILL.md +711 -0
  300. package/src/skills/kotlin-testing/SKILL.md +824 -0
  301. package/src/skills/laravel-patterns/SKILL.md +415 -0
  302. package/src/skills/laravel-security/SKILL.md +285 -0
  303. package/src/skills/laravel-tdd/SKILL.md +283 -0
  304. package/src/skills/laravel-verification/SKILL.md +179 -0
  305. package/src/skills/mcp-server-patterns/SKILL.md +67 -0
  306. package/src/skills/perl-patterns/SKILL.md +504 -0
  307. package/src/skills/perl-testing/SKILL.md +475 -0
  308. package/src/skills/postgres-patterns/SKILL.md +147 -0
  309. package/src/skills/prompt-optimizer/SKILL.md +397 -0
  310. package/src/skills/python-patterns/SKILL.md +750 -0
  311. package/src/skills/python-testing/SKILL.md +816 -0
  312. package/src/skills/rust-patterns/SKILL.md +499 -0
  313. package/src/skills/rust-testing/SKILL.md +500 -0
  314. package/src/skills/safety-guard/SKILL.md +69 -0
  315. package/src/skills/search-first/SKILL.md +161 -0
  316. package/src/skills/security-review/SKILL.md +495 -0
  317. package/src/skills/security-review/cloud-infrastructure-security.md +361 -0
  318. package/src/skills/security-scan/SKILL.md +165 -0
  319. package/src/skills/springboot-patterns/SKILL.md +314 -0
  320. package/src/skills/springboot-security/SKILL.md +272 -0
  321. package/src/skills/springboot-tdd/SKILL.md +158 -0
  322. package/src/skills/springboot-verification/SKILL.md +231 -0
  323. package/src/skills/tdd-workflow/SKILL.md +410 -0
  324. package/ecc/scripts/hooks/session-end-marker.js +0 -15
  325. package/gsd/LICENSE +0 -21
  326. package/gsd/commands-gsd/discuss-phase.md +0 -90
  327. package/gsd/commands-gsd/execute-phase.md +0 -41
  328. package/gsd/commands-gsd/join-discord.md +0 -18
  329. package/gsd/commands-gsd/reapply-patches.md +0 -123
  330. package/gsd/commands-gsd/set-profile.md +0 -34
  331. package/gsd/get-shit-done/bin/lib/config.cjs +0 -169
  332. package/gsd/get-shit-done/bin/lib/core.cjs +0 -492
  333. package/gsd/get-shit-done/bin/lib/init.cjs +0 -710
  334. package/gsd/get-shit-done/workflows/execute-phase.md +0 -459
  335. package/gsd/get-shit-done/workflows/help.md +0 -489
  336. package/gsd/get-shit-done/workflows/pause-work.md +0 -122
  337. package/gsd/get-shit-done/workflows/plan-phase.md +0 -560
  338. package/gsd/hooks/gsd-check-update.js +0 -81
  339. package/kit/CLAUDE.md +0 -43
  340. package/kit/commands/kit/update.md +0 -46
  341. package/kit/mcp.json +0 -10
  342. package/kit/rules/code-style.md +0 -24
  343. /package/{ecc → src}/agents/architect.md +0 -0
  344. /package/{ecc → src}/agents/code-reviewer.md +0 -0
  345. /package/{ecc → src}/agents/doc-updater.md +0 -0
  346. /package/{ecc → src}/agents/e2e-runner.md +0 -0
  347. /package/{ecc → src}/agents/security-reviewer.md +0 -0
  348. /package/{ecc → src}/agents/tdd-guide.md +0 -0
  349. /package/{ecc/rules → src/available-rules}/golang/coding-style.md +0 -0
  350. /package/{ecc/rules → src/available-rules}/golang/hooks.md +0 -0
  351. /package/{ecc/rules → src/available-rules}/golang/patterns.md +0 -0
  352. /package/{ecc/rules → src/available-rules}/golang/security.md +0 -0
  353. /package/{ecc/rules → src/available-rules}/golang/testing.md +0 -0
  354. /package/{ecc/rules → src/available-rules}/kotlin/coding-style.md +0 -0
  355. /package/{ecc/rules → src/available-rules}/kotlin/patterns.md +0 -0
  356. /package/{ecc/rules → src/available-rules}/kotlin/security.md +0 -0
  357. /package/{ecc/rules → src/available-rules}/kotlin/testing.md +0 -0
  358. /package/{ecc/rules → src/available-rules}/perl/coding-style.md +0 -0
  359. /package/{ecc/rules → src/available-rules}/perl/hooks.md +0 -0
  360. /package/{ecc/rules → src/available-rules}/perl/patterns.md +0 -0
  361. /package/{ecc/rules → src/available-rules}/perl/security.md +0 -0
  362. /package/{ecc/rules → src/available-rules}/perl/testing.md +0 -0
  363. /package/{ecc/rules → src/available-rules}/php/coding-style.md +0 -0
  364. /package/{ecc/rules → src/available-rules}/php/hooks.md +0 -0
  365. /package/{ecc/rules → src/available-rules}/php/patterns.md +0 -0
  366. /package/{ecc/rules → src/available-rules}/php/security.md +0 -0
  367. /package/{ecc/rules → src/available-rules}/php/testing.md +0 -0
  368. /package/{ecc/rules → src/available-rules}/python/coding-style.md +0 -0
  369. /package/{ecc/rules → src/available-rules}/python/hooks.md +0 -0
  370. /package/{ecc/rules → src/available-rules}/python/patterns.md +0 -0
  371. /package/{ecc/rules → src/available-rules}/python/security.md +0 -0
  372. /package/{ecc/rules → src/available-rules}/python/testing.md +0 -0
  373. /package/{ecc/rules → src/available-rules}/swift/coding-style.md +0 -0
  374. /package/{ecc/rules → src/available-rules}/swift/hooks.md +0 -0
  375. /package/{ecc/rules → src/available-rules}/swift/patterns.md +0 -0
  376. /package/{ecc/rules → src/available-rules}/swift/security.md +0 -0
  377. /package/{ecc/rules → src/available-rules}/swift/testing.md +0 -0
  378. /package/{ecc/rules → src/available-rules}/typescript/coding-style.md +0 -0
  379. /package/{ecc/rules → src/available-rules}/typescript/hooks.md +0 -0
  380. /package/{ecc/rules → src/available-rules}/typescript/patterns.md +0 -0
  381. /package/{ecc/rules → src/available-rules}/typescript/security.md +0 -0
  382. /package/{ecc/rules → src/available-rules}/typescript/testing.md +0 -0
  383. /package/{ecc → src}/commands/checkpoint.md +0 -0
  384. /package/{ecc → src}/commands/learn.md +0 -0
  385. /package/{ecc → src}/commands/model-route.md +0 -0
  386. /package/{ecc → src}/commands/resume-session.md +0 -0
  387. /package/{ecc → src}/commands/save-session.md +0 -0
  388. /package/{kit → src}/commands/setup-refresh.md +0 -0
  389. /package/{kit → src}/commands/tool-guide.md +0 -0
  390. /package/{ecc → src}/commands/verify.md +0 -0
  391. /package/{ecc → src}/contexts/dev.md +0 -0
  392. /package/{ecc → src}/contexts/research.md +0 -0
  393. /package/{ecc → src}/contexts/review.md +0 -0
  394. /package/{ecc → src}/examples/CLAUDE.md +0 -0
  395. /package/{ecc → src}/examples/django-api-CLAUDE.md +0 -0
  396. /package/{ecc → src}/examples/go-microservice-CLAUDE.md +0 -0
  397. /package/{ecc → src}/examples/rust-api-CLAUDE.md +0 -0
  398. /package/{ecc → src}/examples/saas-nextjs-CLAUDE.md +0 -0
  399. /package/{ecc → src}/examples/user-CLAUDE.md +0 -0
  400. /package/{ecc/scripts → src}/hooks/check-hook-enabled.js +0 -0
  401. /package/{ecc/scripts → src}/hooks/evaluate-session.js +0 -0
  402. /package/{ecc/scripts → src}/hooks/pre-compact.js +0 -0
  403. /package/{ecc/scripts → src}/hooks/suggest-compact.js +0 -0
  404. /package/{ecc/scripts → src}/lib/package-manager.d.ts +0 -0
  405. /package/{ecc/scripts → src}/lib/package-manager.js +0 -0
  406. /package/{ecc/scripts → src}/lib/resolve-formatter.js +0 -0
  407. /package/{ecc/scripts → src}/lib/session-aliases.d.ts +0 -0
  408. /package/{ecc/scripts → src}/lib/session-aliases.js +0 -0
  409. /package/{ecc/scripts → src}/lib/shell-split.js +0 -0
  410. /package/{gsd/get-shit-done → src/pilot}/bin/lib/frontmatter.cjs +0 -0
  411. /package/{gsd/get-shit-done → src/pilot}/bin/lib/milestone.cjs +0 -0
  412. /package/{gsd/get-shit-done → src/pilot}/bin/lib/roadmap.cjs +0 -0
  413. /package/{gsd/get-shit-done → src/pilot}/bin/lib/template.cjs +0 -0
  414. /package/{gsd/get-shit-done → src/pilot}/references/checkpoints.md +0 -0
  415. /package/{gsd/get-shit-done → src/pilot}/references/questioning.md +0 -0
  416. /package/{gsd/get-shit-done → src/pilot}/references/tdd.md +0 -0
  417. /package/{gsd/get-shit-done → src/pilot}/templates/codebase/concerns.md +0 -0
  418. /package/{gsd/get-shit-done → src/pilot}/templates/codebase/conventions.md +0 -0
  419. /package/{gsd/get-shit-done → src/pilot}/templates/codebase/integrations.md +0 -0
  420. /package/{gsd/get-shit-done → src/pilot}/templates/codebase/stack.md +0 -0
  421. /package/{gsd/get-shit-done → src/pilot}/templates/codebase/testing.md +0 -0
  422. /package/{gsd/get-shit-done → src/pilot}/templates/config.json +0 -0
  423. /package/{gsd/get-shit-done → src/pilot}/templates/continue-here.md +0 -0
  424. /package/{gsd/get-shit-done → src/pilot}/templates/milestone-archive.md +0 -0
  425. /package/{gsd/get-shit-done → src/pilot}/templates/milestone.md +0 -0
  426. /package/{gsd/get-shit-done → src/pilot}/templates/requirements.md +0 -0
  427. /package/{gsd/get-shit-done → src/pilot}/templates/research-project/ARCHITECTURE.md +0 -0
  428. /package/{gsd/get-shit-done → src/pilot}/templates/research-project/FEATURES.md +0 -0
  429. /package/{gsd/get-shit-done → src/pilot}/templates/research-project/PITFALLS.md +0 -0
  430. /package/{gsd/get-shit-done → src/pilot}/templates/research-project/STACK.md +0 -0
  431. /package/{gsd/get-shit-done → src/pilot}/templates/research-project/SUMMARY.md +0 -0
  432. /package/{gsd/get-shit-done → src/pilot}/templates/retrospective.md +0 -0
  433. /package/{gsd/get-shit-done → src/pilot}/templates/roadmap.md +0 -0
  434. /package/{gsd/get-shit-done → src/pilot}/templates/summary-minimal.md +0 -0
  435. /package/{gsd/get-shit-done → src/pilot}/templates/summary-standard.md +0 -0
  436. /package/{gsd/get-shit-done → src/pilot}/templates/summary.md +0 -0
  437. /package/{gsd/get-shit-done → src/pilot}/templates/user-setup.md +0 -0
  438. /package/{gsd/get-shit-done → src/pilot}/templates/verification-report.md +0 -0
  439. /package/{ecc → src}/rules/common/development-workflow.md +0 -0
  440. /package/{ecc → src}/rules/common/git-workflow.md +0 -0
  441. /package/{ecc → src}/rules/common/hooks.md +0 -0
  442. /package/{ecc → src}/rules/common/patterns.md +0 -0
  443. /package/{ecc → src}/rules/common/performance.md +0 -0
  444. /package/{ecc → src}/rules/common/security.md +0 -0
  445. /package/{ecc → src}/rules/common/testing.md +0 -0
  446. /package/{ecc → src}/skills/continuous-learning-v2/agents/observer.md +0 -0
  447. /package/{ecc → src}/skills/continuous-learning-v2/agents/start-observer.sh +0 -0
  448. /package/{ecc → src}/skills/continuous-learning-v2/config.json +0 -0
  449. /package/{ecc → src}/skills/continuous-learning-v2/hooks/observe.sh +0 -0
  450. /package/{ecc → src}/skills/continuous-learning-v2/scripts/detect-project.sh +0 -0
  451. /package/{ecc → src}/skills/continuous-learning-v2/scripts/instinct-cli.py +0 -0
  452. /package/{ecc → src}/skills/continuous-learning-v2/scripts/test_parse_instinct.py +0 -0
  453. /package/{ecc → src}/skills/strategic-compact/SKILL.md +0 -0
  454. /package/{ecc → src}/skills/strategic-compact/suggest-compact.sh +0 -0
  455. /package/{ecc/skills/verification-loop-SKILL.md → src/skills/verification-loop/SKILL.md} +0 -0
@@ -1,710 +0,0 @@
1
- /**
2
- * Init — Compound init commands for workflow bootstrapping
3
- */
4
-
5
- const fs = require('fs');
6
- const path = require('path');
7
- const { execSync } = require('child_process');
8
- const { loadConfig, resolveModelInternal, findPhaseInternal, getRoadmapPhaseInternal, pathExistsInternal, generateSlugInternal, getMilestoneInfo, normalizePhaseName, toPosixPath, output, error } = require('./core.cjs');
9
-
10
- function cmdInitExecutePhase(cwd, phase, raw) {
11
- if (!phase) {
12
- error('phase required for init execute-phase');
13
- }
14
-
15
- const config = loadConfig(cwd);
16
- const phaseInfo = findPhaseInternal(cwd, phase);
17
- const milestone = getMilestoneInfo(cwd);
18
-
19
- const roadmapPhase = getRoadmapPhaseInternal(cwd, phase);
20
- const reqMatch = roadmapPhase?.section?.match(/^\*\*Requirements\*\*:[^\S\n]*([^\n]*)$/m);
21
- const reqExtracted = reqMatch
22
- ? reqMatch[1].replace(/[\[\]]/g, '').split(',').map(s => s.trim()).filter(Boolean).join(', ')
23
- : null;
24
- const phase_req_ids = (reqExtracted && reqExtracted !== 'TBD') ? reqExtracted : null;
25
-
26
- const result = {
27
- // Models
28
- executor_model: resolveModelInternal(cwd, 'gsd-executor'),
29
- verifier_model: resolveModelInternal(cwd, 'gsd-verifier'),
30
-
31
- // Config flags
32
- commit_docs: config.commit_docs,
33
- parallelization: config.parallelization,
34
- branching_strategy: config.branching_strategy,
35
- phase_branch_template: config.phase_branch_template,
36
- milestone_branch_template: config.milestone_branch_template,
37
- verifier_enabled: config.verifier,
38
-
39
- // Phase info
40
- phase_found: !!phaseInfo,
41
- phase_dir: phaseInfo?.directory || null,
42
- phase_number: phaseInfo?.phase_number || null,
43
- phase_name: phaseInfo?.phase_name || null,
44
- phase_slug: phaseInfo?.phase_slug || null,
45
- phase_req_ids,
46
-
47
- // Plan inventory
48
- plans: phaseInfo?.plans || [],
49
- summaries: phaseInfo?.summaries || [],
50
- incomplete_plans: phaseInfo?.incomplete_plans || [],
51
- plan_count: phaseInfo?.plans?.length || 0,
52
- incomplete_count: phaseInfo?.incomplete_plans?.length || 0,
53
-
54
- // Branch name (pre-computed)
55
- branch_name: config.branching_strategy === 'phase' && phaseInfo
56
- ? config.phase_branch_template
57
- .replace('{phase}', phaseInfo.phase_number)
58
- .replace('{slug}', phaseInfo.phase_slug || 'phase')
59
- : config.branching_strategy === 'milestone'
60
- ? config.milestone_branch_template
61
- .replace('{milestone}', milestone.version)
62
- .replace('{slug}', generateSlugInternal(milestone.name) || 'milestone')
63
- : null,
64
-
65
- // Milestone info
66
- milestone_version: milestone.version,
67
- milestone_name: milestone.name,
68
- milestone_slug: generateSlugInternal(milestone.name),
69
-
70
- // File existence
71
- state_exists: pathExistsInternal(cwd, '.planning/STATE.md'),
72
- roadmap_exists: pathExistsInternal(cwd, '.planning/ROADMAP.md'),
73
- config_exists: pathExistsInternal(cwd, '.planning/config.json'),
74
- // File paths
75
- state_path: '.planning/STATE.md',
76
- roadmap_path: '.planning/ROADMAP.md',
77
- config_path: '.planning/config.json',
78
- };
79
-
80
- output(result, raw);
81
- }
82
-
83
- function cmdInitPlanPhase(cwd, phase, raw) {
84
- if (!phase) {
85
- error('phase required for init plan-phase');
86
- }
87
-
88
- const config = loadConfig(cwd);
89
- const phaseInfo = findPhaseInternal(cwd, phase);
90
-
91
- const roadmapPhase = getRoadmapPhaseInternal(cwd, phase);
92
- const reqMatch = roadmapPhase?.section?.match(/^\*\*Requirements\*\*:[^\S\n]*([^\n]*)$/m);
93
- const reqExtracted = reqMatch
94
- ? reqMatch[1].replace(/[\[\]]/g, '').split(',').map(s => s.trim()).filter(Boolean).join(', ')
95
- : null;
96
- const phase_req_ids = (reqExtracted && reqExtracted !== 'TBD') ? reqExtracted : null;
97
-
98
- const result = {
99
- // Models
100
- researcher_model: resolveModelInternal(cwd, 'gsd-phase-researcher'),
101
- planner_model: resolveModelInternal(cwd, 'gsd-planner'),
102
- checker_model: resolveModelInternal(cwd, 'gsd-plan-checker'),
103
-
104
- // Workflow flags
105
- research_enabled: config.research,
106
- plan_checker_enabled: config.plan_checker,
107
- nyquist_validation_enabled: config.nyquist_validation,
108
- commit_docs: config.commit_docs,
109
-
110
- // Phase info
111
- phase_found: !!phaseInfo,
112
- phase_dir: phaseInfo?.directory || null,
113
- phase_number: phaseInfo?.phase_number || null,
114
- phase_name: phaseInfo?.phase_name || null,
115
- phase_slug: phaseInfo?.phase_slug || null,
116
- padded_phase: phaseInfo?.phase_number?.padStart(2, '0') || null,
117
- phase_req_ids,
118
-
119
- // Existing artifacts
120
- has_research: phaseInfo?.has_research || false,
121
- has_context: phaseInfo?.has_context || false,
122
- has_plans: (phaseInfo?.plans?.length || 0) > 0,
123
- plan_count: phaseInfo?.plans?.length || 0,
124
-
125
- // Environment
126
- planning_exists: pathExistsInternal(cwd, '.planning'),
127
- roadmap_exists: pathExistsInternal(cwd, '.planning/ROADMAP.md'),
128
-
129
- // File paths
130
- state_path: '.planning/STATE.md',
131
- roadmap_path: '.planning/ROADMAP.md',
132
- requirements_path: '.planning/REQUIREMENTS.md',
133
- };
134
-
135
- if (phaseInfo?.directory) {
136
- // Find *-CONTEXT.md in phase directory
137
- const phaseDirFull = path.join(cwd, phaseInfo.directory);
138
- try {
139
- const files = fs.readdirSync(phaseDirFull);
140
- const contextFile = files.find(f => f.endsWith('-CONTEXT.md') || f === 'CONTEXT.md');
141
- if (contextFile) {
142
- result.context_path = toPosixPath(path.join(phaseInfo.directory, contextFile));
143
- }
144
- const researchFile = files.find(f => f.endsWith('-RESEARCH.md') || f === 'RESEARCH.md');
145
- if (researchFile) {
146
- result.research_path = toPosixPath(path.join(phaseInfo.directory, researchFile));
147
- }
148
- const verificationFile = files.find(f => f.endsWith('-VERIFICATION.md') || f === 'VERIFICATION.md');
149
- if (verificationFile) {
150
- result.verification_path = toPosixPath(path.join(phaseInfo.directory, verificationFile));
151
- }
152
- const uatFile = files.find(f => f.endsWith('-UAT.md') || f === 'UAT.md');
153
- if (uatFile) {
154
- result.uat_path = toPosixPath(path.join(phaseInfo.directory, uatFile));
155
- }
156
- } catch {}
157
- }
158
-
159
- output(result, raw);
160
- }
161
-
162
- function cmdInitNewProject(cwd, raw) {
163
- const config = loadConfig(cwd);
164
-
165
- // Detect Brave Search API key availability
166
- const homedir = require('os').homedir();
167
- const braveKeyFile = path.join(homedir, '.gsd', 'brave_api_key');
168
- const hasBraveSearch = !!(process.env.BRAVE_API_KEY || fs.existsSync(braveKeyFile));
169
-
170
- // Detect existing code
171
- let hasCode = false;
172
- let hasPackageFile = false;
173
- try {
174
- const files = execSync('find . -maxdepth 3 \\( -name "*.ts" -o -name "*.js" -o -name "*.py" -o -name "*.go" -o -name "*.rs" -o -name "*.swift" -o -name "*.java" \\) 2>/dev/null | grep -v node_modules | grep -v .git | head -5', {
175
- cwd,
176
- encoding: 'utf-8',
177
- stdio: ['pipe', 'pipe', 'pipe'],
178
- });
179
- hasCode = files.trim().length > 0;
180
- } catch {}
181
-
182
- hasPackageFile = pathExistsInternal(cwd, 'package.json') ||
183
- pathExistsInternal(cwd, 'requirements.txt') ||
184
- pathExistsInternal(cwd, 'Cargo.toml') ||
185
- pathExistsInternal(cwd, 'go.mod') ||
186
- pathExistsInternal(cwd, 'Package.swift');
187
-
188
- const result = {
189
- // Models
190
- researcher_model: resolveModelInternal(cwd, 'gsd-project-researcher'),
191
- synthesizer_model: resolveModelInternal(cwd, 'gsd-research-synthesizer'),
192
- roadmapper_model: resolveModelInternal(cwd, 'gsd-roadmapper'),
193
-
194
- // Config
195
- commit_docs: config.commit_docs,
196
-
197
- // Existing state
198
- project_exists: pathExistsInternal(cwd, '.planning/PROJECT.md'),
199
- has_codebase_map: pathExistsInternal(cwd, '.planning/codebase'),
200
- planning_exists: pathExistsInternal(cwd, '.planning'),
201
-
202
- // Brownfield detection
203
- has_existing_code: hasCode,
204
- has_package_file: hasPackageFile,
205
- is_brownfield: hasCode || hasPackageFile,
206
- needs_codebase_map: (hasCode || hasPackageFile) && !pathExistsInternal(cwd, '.planning/codebase'),
207
-
208
- // Git state
209
- has_git: pathExistsInternal(cwd, '.git'),
210
-
211
- // Enhanced search
212
- brave_search_available: hasBraveSearch,
213
-
214
- // File paths
215
- project_path: '.planning/PROJECT.md',
216
- };
217
-
218
- output(result, raw);
219
- }
220
-
221
- function cmdInitNewMilestone(cwd, raw) {
222
- const config = loadConfig(cwd);
223
- const milestone = getMilestoneInfo(cwd);
224
-
225
- const result = {
226
- // Models
227
- researcher_model: resolveModelInternal(cwd, 'gsd-project-researcher'),
228
- synthesizer_model: resolveModelInternal(cwd, 'gsd-research-synthesizer'),
229
- roadmapper_model: resolveModelInternal(cwd, 'gsd-roadmapper'),
230
-
231
- // Config
232
- commit_docs: config.commit_docs,
233
- research_enabled: config.research,
234
-
235
- // Current milestone
236
- current_milestone: milestone.version,
237
- current_milestone_name: milestone.name,
238
-
239
- // File existence
240
- project_exists: pathExistsInternal(cwd, '.planning/PROJECT.md'),
241
- roadmap_exists: pathExistsInternal(cwd, '.planning/ROADMAP.md'),
242
- state_exists: pathExistsInternal(cwd, '.planning/STATE.md'),
243
-
244
- // File paths
245
- project_path: '.planning/PROJECT.md',
246
- roadmap_path: '.planning/ROADMAP.md',
247
- state_path: '.planning/STATE.md',
248
- };
249
-
250
- output(result, raw);
251
- }
252
-
253
- function cmdInitQuick(cwd, description, raw) {
254
- const config = loadConfig(cwd);
255
- const now = new Date();
256
- const slug = description ? generateSlugInternal(description)?.substring(0, 40) : null;
257
-
258
- // Find next quick task number
259
- const quickDir = path.join(cwd, '.planning', 'quick');
260
- let nextNum = 1;
261
- try {
262
- const existing = fs.readdirSync(quickDir)
263
- .filter(f => /^\d+-/.test(f))
264
- .map(f => parseInt(f.split('-')[0], 10))
265
- .filter(n => !isNaN(n));
266
- if (existing.length > 0) {
267
- nextNum = Math.max(...existing) + 1;
268
- }
269
- } catch {}
270
-
271
- const result = {
272
- // Models
273
- planner_model: resolveModelInternal(cwd, 'gsd-planner'),
274
- executor_model: resolveModelInternal(cwd, 'gsd-executor'),
275
- checker_model: resolveModelInternal(cwd, 'gsd-plan-checker'),
276
- verifier_model: resolveModelInternal(cwd, 'gsd-verifier'),
277
-
278
- // Config
279
- commit_docs: config.commit_docs,
280
-
281
- // Quick task info
282
- next_num: nextNum,
283
- slug: slug,
284
- description: description || null,
285
-
286
- // Timestamps
287
- date: now.toISOString().split('T')[0],
288
- timestamp: now.toISOString(),
289
-
290
- // Paths
291
- quick_dir: '.planning/quick',
292
- task_dir: slug ? `.planning/quick/${nextNum}-${slug}` : null,
293
-
294
- // File existence
295
- roadmap_exists: pathExistsInternal(cwd, '.planning/ROADMAP.md'),
296
- planning_exists: pathExistsInternal(cwd, '.planning'),
297
-
298
- };
299
-
300
- output(result, raw);
301
- }
302
-
303
- function cmdInitResume(cwd, raw) {
304
- const config = loadConfig(cwd);
305
-
306
- // Check for interrupted agent
307
- let interruptedAgentId = null;
308
- try {
309
- interruptedAgentId = fs.readFileSync(path.join(cwd, '.planning', 'current-agent-id.txt'), 'utf-8').trim();
310
- } catch {}
311
-
312
- const result = {
313
- // File existence
314
- state_exists: pathExistsInternal(cwd, '.planning/STATE.md'),
315
- roadmap_exists: pathExistsInternal(cwd, '.planning/ROADMAP.md'),
316
- project_exists: pathExistsInternal(cwd, '.planning/PROJECT.md'),
317
- planning_exists: pathExistsInternal(cwd, '.planning'),
318
-
319
- // File paths
320
- state_path: '.planning/STATE.md',
321
- roadmap_path: '.planning/ROADMAP.md',
322
- project_path: '.planning/PROJECT.md',
323
-
324
- // Agent state
325
- has_interrupted_agent: !!interruptedAgentId,
326
- interrupted_agent_id: interruptedAgentId,
327
-
328
- // Config
329
- commit_docs: config.commit_docs,
330
- };
331
-
332
- output(result, raw);
333
- }
334
-
335
- function cmdInitVerifyWork(cwd, phase, raw) {
336
- if (!phase) {
337
- error('phase required for init verify-work');
338
- }
339
-
340
- const config = loadConfig(cwd);
341
- const phaseInfo = findPhaseInternal(cwd, phase);
342
-
343
- const result = {
344
- // Models
345
- planner_model: resolveModelInternal(cwd, 'gsd-planner'),
346
- checker_model: resolveModelInternal(cwd, 'gsd-plan-checker'),
347
-
348
- // Config
349
- commit_docs: config.commit_docs,
350
-
351
- // Phase info
352
- phase_found: !!phaseInfo,
353
- phase_dir: phaseInfo?.directory || null,
354
- phase_number: phaseInfo?.phase_number || null,
355
- phase_name: phaseInfo?.phase_name || null,
356
-
357
- // Existing artifacts
358
- has_verification: phaseInfo?.has_verification || false,
359
- };
360
-
361
- output(result, raw);
362
- }
363
-
364
- function cmdInitPhaseOp(cwd, phase, raw) {
365
- const config = loadConfig(cwd);
366
- let phaseInfo = findPhaseInternal(cwd, phase);
367
-
368
- // Fallback to ROADMAP.md if no directory exists (e.g., Plans: TBD)
369
- if (!phaseInfo) {
370
- const roadmapPhase = getRoadmapPhaseInternal(cwd, phase);
371
- if (roadmapPhase?.found) {
372
- const phaseName = roadmapPhase.phase_name;
373
- phaseInfo = {
374
- found: true,
375
- directory: null,
376
- phase_number: roadmapPhase.phase_number,
377
- phase_name: phaseName,
378
- phase_slug: phaseName ? phaseName.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '') : null,
379
- plans: [],
380
- summaries: [],
381
- incomplete_plans: [],
382
- has_research: false,
383
- has_context: false,
384
- has_verification: false,
385
- };
386
- }
387
- }
388
-
389
- const result = {
390
- // Config
391
- commit_docs: config.commit_docs,
392
- brave_search: config.brave_search,
393
-
394
- // Phase info
395
- phase_found: !!phaseInfo,
396
- phase_dir: phaseInfo?.directory || null,
397
- phase_number: phaseInfo?.phase_number || null,
398
- phase_name: phaseInfo?.phase_name || null,
399
- phase_slug: phaseInfo?.phase_slug || null,
400
- padded_phase: phaseInfo?.phase_number?.padStart(2, '0') || null,
401
-
402
- // Existing artifacts
403
- has_research: phaseInfo?.has_research || false,
404
- has_context: phaseInfo?.has_context || false,
405
- has_plans: (phaseInfo?.plans?.length || 0) > 0,
406
- has_verification: phaseInfo?.has_verification || false,
407
- plan_count: phaseInfo?.plans?.length || 0,
408
-
409
- // File existence
410
- roadmap_exists: pathExistsInternal(cwd, '.planning/ROADMAP.md'),
411
- planning_exists: pathExistsInternal(cwd, '.planning'),
412
-
413
- // File paths
414
- state_path: '.planning/STATE.md',
415
- roadmap_path: '.planning/ROADMAP.md',
416
- requirements_path: '.planning/REQUIREMENTS.md',
417
- };
418
-
419
- if (phaseInfo?.directory) {
420
- const phaseDirFull = path.join(cwd, phaseInfo.directory);
421
- try {
422
- const files = fs.readdirSync(phaseDirFull);
423
- const contextFile = files.find(f => f.endsWith('-CONTEXT.md') || f === 'CONTEXT.md');
424
- if (contextFile) {
425
- result.context_path = toPosixPath(path.join(phaseInfo.directory, contextFile));
426
- }
427
- const researchFile = files.find(f => f.endsWith('-RESEARCH.md') || f === 'RESEARCH.md');
428
- if (researchFile) {
429
- result.research_path = toPosixPath(path.join(phaseInfo.directory, researchFile));
430
- }
431
- const verificationFile = files.find(f => f.endsWith('-VERIFICATION.md') || f === 'VERIFICATION.md');
432
- if (verificationFile) {
433
- result.verification_path = toPosixPath(path.join(phaseInfo.directory, verificationFile));
434
- }
435
- const uatFile = files.find(f => f.endsWith('-UAT.md') || f === 'UAT.md');
436
- if (uatFile) {
437
- result.uat_path = toPosixPath(path.join(phaseInfo.directory, uatFile));
438
- }
439
- } catch {}
440
- }
441
-
442
- output(result, raw);
443
- }
444
-
445
- function cmdInitTodos(cwd, area, raw) {
446
- const config = loadConfig(cwd);
447
- const now = new Date();
448
-
449
- // List todos (reuse existing logic)
450
- const pendingDir = path.join(cwd, '.planning', 'todos', 'pending');
451
- let count = 0;
452
- const todos = [];
453
-
454
- try {
455
- const files = fs.readdirSync(pendingDir).filter(f => f.endsWith('.md'));
456
- for (const file of files) {
457
- try {
458
- const content = fs.readFileSync(path.join(pendingDir, file), 'utf-8');
459
- const createdMatch = content.match(/^created:\s*(.+)$/m);
460
- const titleMatch = content.match(/^title:\s*(.+)$/m);
461
- const areaMatch = content.match(/^area:\s*(.+)$/m);
462
- const todoArea = areaMatch ? areaMatch[1].trim() : 'general';
463
-
464
- if (area && todoArea !== area) continue;
465
-
466
- count++;
467
- todos.push({
468
- file,
469
- created: createdMatch ? createdMatch[1].trim() : 'unknown',
470
- title: titleMatch ? titleMatch[1].trim() : 'Untitled',
471
- area: todoArea,
472
- path: '.planning/todos/pending/' + file,
473
- });
474
- } catch {}
475
- }
476
- } catch {}
477
-
478
- const result = {
479
- // Config
480
- commit_docs: config.commit_docs,
481
-
482
- // Timestamps
483
- date: now.toISOString().split('T')[0],
484
- timestamp: now.toISOString(),
485
-
486
- // Todo inventory
487
- todo_count: count,
488
- todos,
489
- area_filter: area || null,
490
-
491
- // Paths
492
- pending_dir: '.planning/todos/pending',
493
- completed_dir: '.planning/todos/completed',
494
-
495
- // File existence
496
- planning_exists: pathExistsInternal(cwd, '.planning'),
497
- todos_dir_exists: pathExistsInternal(cwd, '.planning/todos'),
498
- pending_dir_exists: pathExistsInternal(cwd, '.planning/todos/pending'),
499
- };
500
-
501
- output(result, raw);
502
- }
503
-
504
- function cmdInitMilestoneOp(cwd, raw) {
505
- const config = loadConfig(cwd);
506
- const milestone = getMilestoneInfo(cwd);
507
-
508
- // Count phases
509
- let phaseCount = 0;
510
- let completedPhases = 0;
511
- const phasesDir = path.join(cwd, '.planning', 'phases');
512
- try {
513
- const entries = fs.readdirSync(phasesDir, { withFileTypes: true });
514
- const dirs = entries.filter(e => e.isDirectory()).map(e => e.name);
515
- phaseCount = dirs.length;
516
-
517
- // Count phases with summaries (completed)
518
- for (const dir of dirs) {
519
- try {
520
- const phaseFiles = fs.readdirSync(path.join(phasesDir, dir));
521
- const hasSummary = phaseFiles.some(f => f.endsWith('-SUMMARY.md') || f === 'SUMMARY.md');
522
- if (hasSummary) completedPhases++;
523
- } catch {}
524
- }
525
- } catch {}
526
-
527
- // Check archive
528
- const archiveDir = path.join(cwd, '.planning', 'archive');
529
- let archivedMilestones = [];
530
- try {
531
- archivedMilestones = fs.readdirSync(archiveDir, { withFileTypes: true })
532
- .filter(e => e.isDirectory())
533
- .map(e => e.name);
534
- } catch {}
535
-
536
- const result = {
537
- // Config
538
- commit_docs: config.commit_docs,
539
-
540
- // Current milestone
541
- milestone_version: milestone.version,
542
- milestone_name: milestone.name,
543
- milestone_slug: generateSlugInternal(milestone.name),
544
-
545
- // Phase counts
546
- phase_count: phaseCount,
547
- completed_phases: completedPhases,
548
- all_phases_complete: phaseCount > 0 && phaseCount === completedPhases,
549
-
550
- // Archive
551
- archived_milestones: archivedMilestones,
552
- archive_count: archivedMilestones.length,
553
-
554
- // File existence
555
- project_exists: pathExistsInternal(cwd, '.planning/PROJECT.md'),
556
- roadmap_exists: pathExistsInternal(cwd, '.planning/ROADMAP.md'),
557
- state_exists: pathExistsInternal(cwd, '.planning/STATE.md'),
558
- archive_exists: pathExistsInternal(cwd, '.planning/archive'),
559
- phases_dir_exists: pathExistsInternal(cwd, '.planning/phases'),
560
- };
561
-
562
- output(result, raw);
563
- }
564
-
565
- function cmdInitMapCodebase(cwd, raw) {
566
- const config = loadConfig(cwd);
567
-
568
- // Check for existing codebase maps
569
- const codebaseDir = path.join(cwd, '.planning', 'codebase');
570
- let existingMaps = [];
571
- try {
572
- existingMaps = fs.readdirSync(codebaseDir).filter(f => f.endsWith('.md'));
573
- } catch {}
574
-
575
- const result = {
576
- // Models
577
- mapper_model: resolveModelInternal(cwd, 'gsd-codebase-mapper'),
578
-
579
- // Config
580
- commit_docs: config.commit_docs,
581
- search_gitignored: config.search_gitignored,
582
- parallelization: config.parallelization,
583
-
584
- // Paths
585
- codebase_dir: '.planning/codebase',
586
-
587
- // Existing maps
588
- existing_maps: existingMaps,
589
- has_maps: existingMaps.length > 0,
590
-
591
- // File existence
592
- planning_exists: pathExistsInternal(cwd, '.planning'),
593
- codebase_dir_exists: pathExistsInternal(cwd, '.planning/codebase'),
594
- };
595
-
596
- output(result, raw);
597
- }
598
-
599
- function cmdInitProgress(cwd, raw) {
600
- const config = loadConfig(cwd);
601
- const milestone = getMilestoneInfo(cwd);
602
-
603
- // Analyze phases
604
- const phasesDir = path.join(cwd, '.planning', 'phases');
605
- const phases = [];
606
- let currentPhase = null;
607
- let nextPhase = null;
608
-
609
- try {
610
- const entries = fs.readdirSync(phasesDir, { withFileTypes: true });
611
- const dirs = entries.filter(e => e.isDirectory()).map(e => e.name).sort();
612
-
613
- for (const dir of dirs) {
614
- const match = dir.match(/^(\d+(?:\.\d+)*)-?(.*)/);
615
- const phaseNumber = match ? match[1] : dir;
616
- const phaseName = match && match[2] ? match[2] : null;
617
-
618
- const phasePath = path.join(phasesDir, dir);
619
- const phaseFiles = fs.readdirSync(phasePath);
620
-
621
- const plans = phaseFiles.filter(f => f.endsWith('-PLAN.md') || f === 'PLAN.md');
622
- const summaries = phaseFiles.filter(f => f.endsWith('-SUMMARY.md') || f === 'SUMMARY.md');
623
- const hasResearch = phaseFiles.some(f => f.endsWith('-RESEARCH.md') || f === 'RESEARCH.md');
624
-
625
- const status = summaries.length >= plans.length && plans.length > 0 ? 'complete' :
626
- plans.length > 0 ? 'in_progress' :
627
- hasResearch ? 'researched' : 'pending';
628
-
629
- const phaseInfo = {
630
- number: phaseNumber,
631
- name: phaseName,
632
- directory: '.planning/phases/' + dir,
633
- status,
634
- plan_count: plans.length,
635
- summary_count: summaries.length,
636
- has_research: hasResearch,
637
- };
638
-
639
- phases.push(phaseInfo);
640
-
641
- // Find current (first incomplete with plans) and next (first pending)
642
- if (!currentPhase && (status === 'in_progress' || status === 'researched')) {
643
- currentPhase = phaseInfo;
644
- }
645
- if (!nextPhase && status === 'pending') {
646
- nextPhase = phaseInfo;
647
- }
648
- }
649
- } catch {}
650
-
651
- // Check for paused work
652
- let pausedAt = null;
653
- try {
654
- const state = fs.readFileSync(path.join(cwd, '.planning', 'STATE.md'), 'utf-8');
655
- const pauseMatch = state.match(/\*\*Paused At:\*\*\s*(.+)/);
656
- if (pauseMatch) pausedAt = pauseMatch[1].trim();
657
- } catch {}
658
-
659
- const result = {
660
- // Models
661
- executor_model: resolveModelInternal(cwd, 'gsd-executor'),
662
- planner_model: resolveModelInternal(cwd, 'gsd-planner'),
663
-
664
- // Config
665
- commit_docs: config.commit_docs,
666
-
667
- // Milestone
668
- milestone_version: milestone.version,
669
- milestone_name: milestone.name,
670
-
671
- // Phase overview
672
- phases,
673
- phase_count: phases.length,
674
- completed_count: phases.filter(p => p.status === 'complete').length,
675
- in_progress_count: phases.filter(p => p.status === 'in_progress').length,
676
-
677
- // Current state
678
- current_phase: currentPhase,
679
- next_phase: nextPhase,
680
- paused_at: pausedAt,
681
- has_work_in_progress: !!currentPhase,
682
-
683
- // File existence
684
- project_exists: pathExistsInternal(cwd, '.planning/PROJECT.md'),
685
- roadmap_exists: pathExistsInternal(cwd, '.planning/ROADMAP.md'),
686
- state_exists: pathExistsInternal(cwd, '.planning/STATE.md'),
687
- // File paths
688
- state_path: '.planning/STATE.md',
689
- roadmap_path: '.planning/ROADMAP.md',
690
- project_path: '.planning/PROJECT.md',
691
- config_path: '.planning/config.json',
692
- };
693
-
694
- output(result, raw);
695
- }
696
-
697
- module.exports = {
698
- cmdInitExecutePhase,
699
- cmdInitPlanPhase,
700
- cmdInitNewProject,
701
- cmdInitNewMilestone,
702
- cmdInitQuick,
703
- cmdInitResume,
704
- cmdInitVerifyWork,
705
- cmdInitPhaseOp,
706
- cmdInitTodos,
707
- cmdInitMilestoneOp,
708
- cmdInitMapCodebase,
709
- cmdInitProgress,
710
- };