@opengsd/gsd-core 1.2.0 → 1.3.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 (532) hide show
  1. package/README.ja-JP.md +46 -791
  2. package/README.ko-KR.md +44 -780
  3. package/README.md +42 -218
  4. package/README.pt-BR.md +47 -414
  5. package/README.zh-CN.md +46 -763
  6. package/agents/gsd-ai-researcher.md +2 -2
  7. package/agents/gsd-debug-session-manager.md +1 -1
  8. package/agents/gsd-debugger.md +8 -8
  9. package/agents/gsd-doc-writer.md +7 -6
  10. package/agents/gsd-domain-researcher.md +15 -2
  11. package/agents/gsd-eval-auditor.md +1 -1
  12. package/agents/gsd-eval-planner.md +2 -2
  13. package/agents/gsd-executor.md +21 -8
  14. package/agents/gsd-framework-selector.md +1 -1
  15. package/agents/gsd-intel-updater.md +4 -4
  16. package/agents/gsd-phase-researcher.md +19 -6
  17. package/agents/gsd-plan-checker.md +3 -3
  18. package/agents/gsd-planner.md +36 -23
  19. package/agents/gsd-project-researcher.md +13 -0
  20. package/agents/gsd-research-synthesizer.md +6 -2
  21. package/agents/gsd-roadmapper.md +6 -6
  22. package/agents/gsd-ui-researcher.md +16 -3
  23. package/agents/gsd-user-profiler.md +2 -2
  24. package/agents/gsd-verifier.md +8 -8
  25. package/assets/gsd-logo-2000-transparent.png +0 -0
  26. package/assets/gsd-logo-2000-transparent.svg +17 -0
  27. package/assets/gsd-logo-2000.png +0 -0
  28. package/assets/gsd-logo-2000.svg +21 -0
  29. package/assets/terminal.svg +68 -0
  30. package/bin/install.js +255 -103
  31. package/commands/gsd/add-tests.md +1 -1
  32. package/commands/gsd/ai-integration-phase.md +3 -3
  33. package/commands/gsd/audit-fix.md +1 -1
  34. package/commands/gsd/audit-milestone.md +1 -1
  35. package/commands/gsd/audit-uat.md +1 -1
  36. package/commands/gsd/autonomous.md +2 -2
  37. package/commands/gsd/capture.md +6 -6
  38. package/commands/gsd/cleanup.md +1 -1
  39. package/commands/gsd/code-review.md +1 -1
  40. package/commands/gsd/complete-milestone.md +2 -2
  41. package/commands/gsd/config.md +3 -3
  42. package/commands/gsd/debug.md +1 -1
  43. package/commands/gsd/discuss-phase.md +5 -4
  44. package/commands/gsd/docs-update.md +1 -1
  45. package/commands/gsd/eval-review.md +2 -2
  46. package/commands/gsd/execute-phase.md +2 -2
  47. package/commands/gsd/explore.md +1 -1
  48. package/commands/gsd/extract-learnings.md +2 -2
  49. package/commands/gsd/fast.md +1 -1
  50. package/commands/gsd/forensics.md +1 -1
  51. package/commands/gsd/graphify.md +9 -9
  52. package/commands/gsd/health.md +1 -1
  53. package/commands/gsd/help.md +2 -2
  54. package/commands/gsd/import.md +5 -5
  55. package/commands/gsd/inbox.md +1 -1
  56. package/commands/gsd/ingest-docs.md +4 -4
  57. package/commands/gsd/manager.md +3 -3
  58. package/commands/gsd/map-codebase.md +1 -1
  59. package/commands/gsd/milestone-summary.md +1 -1
  60. package/commands/gsd/mvp-phase.md +4 -4
  61. package/commands/gsd/new-milestone.md +5 -5
  62. package/commands/gsd/new-project.md +5 -5
  63. package/commands/gsd/pause-work.md +2 -2
  64. package/commands/gsd/phase.md +4 -4
  65. package/commands/gsd/plan-phase.md +2 -2
  66. package/commands/gsd/plan-review-convergence.md +4 -4
  67. package/commands/gsd/pr-branch.md +1 -1
  68. package/commands/gsd/profile-user.md +2 -2
  69. package/commands/gsd/progress.md +4 -4
  70. package/commands/gsd/quick.md +1 -1
  71. package/commands/gsd/resume-work.md +1 -1
  72. package/commands/gsd/review.md +3 -2
  73. package/commands/gsd/secure-phase.md +1 -1
  74. package/commands/gsd/settings.md +1 -1
  75. package/commands/gsd/ship.md +2 -2
  76. package/commands/gsd/sketch.md +7 -7
  77. package/commands/gsd/spec-phase.md +2 -2
  78. package/commands/gsd/spike.md +3 -3
  79. package/commands/gsd/stats.md +1 -1
  80. package/commands/gsd/surface.md +4 -4
  81. package/commands/gsd/thread.md +1 -1
  82. package/commands/gsd/ui-phase.md +2 -2
  83. package/commands/gsd/ui-review.md +2 -2
  84. package/commands/gsd/ultraplan-phase.md +2 -2
  85. package/commands/gsd/undo.md +3 -3
  86. package/commands/gsd/update.md +3 -3
  87. package/commands/gsd/validate-phase.md +1 -1
  88. package/commands/gsd/verify-work.md +2 -2
  89. package/commands/gsd/workspace.md +4 -4
  90. package/{get-shit-done → gsd-core}/bin/check-latest-version.cjs +1 -1
  91. package/{get-shit-done → gsd-core}/bin/gsd-tools.cjs +50 -4
  92. package/gsd-core/bin/lib/active-workstream-store.cjs +291 -0
  93. package/gsd-core/bin/lib/adr-parser.cjs +399 -0
  94. package/gsd-core/bin/lib/agent-command-router.cjs +68 -0
  95. package/gsd-core/bin/lib/artifacts.cjs +51 -0
  96. package/gsd-core/bin/lib/audit.cjs +743 -0
  97. package/gsd-core/bin/lib/check-command-router.cjs +342 -0
  98. package/gsd-core/bin/lib/cjs-command-router-adapter.cjs +81 -0
  99. package/gsd-core/bin/lib/clock.cjs +95 -0
  100. package/gsd-core/bin/lib/clusters.cjs +128 -0
  101. package/gsd-core/bin/lib/code-review-flags.cjs +59 -0
  102. package/gsd-core/bin/lib/command-aliases.cjs +809 -0
  103. package/gsd-core/bin/lib/command-arg-projection.cjs +55 -0
  104. package/gsd-core/bin/lib/command-routing-hub.cjs +300 -0
  105. package/gsd-core/bin/lib/commands.cjs +1202 -0
  106. package/gsd-core/bin/lib/config-schema.cjs +29 -0
  107. package/gsd-core/bin/lib/config-types.cjs +19 -0
  108. package/gsd-core/bin/lib/config.cjs +714 -0
  109. package/{get-shit-done → gsd-core}/bin/lib/configuration.cjs +76 -85
  110. package/gsd-core/bin/lib/context-utilization.cjs +48 -0
  111. package/gsd-core/bin/lib/core.cjs +2007 -0
  112. package/{get-shit-done → gsd-core}/bin/lib/decisions.cjs +9 -7
  113. package/gsd-core/bin/lib/docs.cjs +252 -0
  114. package/gsd-core/bin/lib/drift.cjs +364 -0
  115. package/gsd-core/bin/lib/fallow-runner.cjs +115 -0
  116. package/gsd-core/bin/lib/frontmatter.cjs +442 -0
  117. package/gsd-core/bin/lib/gap-checker.cjs +257 -0
  118. package/gsd-core/bin/lib/graphify.cjs +496 -0
  119. package/gsd-core/bin/lib/gsd2-import.cjs +456 -0
  120. package/gsd-core/bin/lib/init-command-router.cjs +62 -0
  121. package/gsd-core/bin/lib/init.cjs +1799 -0
  122. package/gsd-core/bin/lib/install-profiles.cjs +526 -0
  123. package/gsd-core/bin/lib/installer-migration-authoring.cjs +122 -0
  124. package/gsd-core/bin/lib/installer-migration-report.cjs +347 -0
  125. package/gsd-core/bin/lib/installer-migrations/000-first-time-baseline.cjs +218 -0
  126. package/gsd-core/bin/lib/installer-migrations/001-legacy-orphan-files.cjs +48 -0
  127. package/gsd-core/bin/lib/installer-migrations/002-codex-legacy-hooks-json.cjs +94 -0
  128. package/gsd-core/bin/lib/installer-migrations/003-rename-get-shit-done-to-gsd-core.cjs +108 -0
  129. package/gsd-core/bin/lib/installer-migrations.cjs +784 -0
  130. package/gsd-core/bin/lib/intel.cjs +607 -0
  131. package/gsd-core/bin/lib/learnings.cjs +270 -0
  132. package/gsd-core/bin/lib/legacy-cleanup.cjs +253 -0
  133. package/gsd-core/bin/lib/milestone.cjs +373 -0
  134. package/gsd-core/bin/lib/model-catalog.cjs +154 -0
  135. package/gsd-core/bin/lib/model-profiles.cjs +24 -0
  136. package/gsd-core/bin/lib/observability/event.cjs +51 -0
  137. package/gsd-core/bin/lib/observability/logger.cjs +146 -0
  138. package/{get-shit-done → gsd-core}/bin/lib/observability/redaction.cjs +19 -21
  139. package/{get-shit-done → gsd-core}/bin/lib/package-identity.cjs +5 -1
  140. package/gsd-core/bin/lib/phase-command-router.cjs +189 -0
  141. package/gsd-core/bin/lib/phase-lifecycle.cjs +74 -0
  142. package/gsd-core/bin/lib/phase.cjs +1307 -0
  143. package/gsd-core/bin/lib/phases-command-router.cjs +43 -0
  144. package/{get-shit-done → gsd-core}/bin/lib/plan-scan.cjs +18 -24
  145. package/gsd-core/bin/lib/planning-workspace.cjs +245 -0
  146. package/gsd-core/bin/lib/profile-output.cjs +1120 -0
  147. package/gsd-core/bin/lib/profile-pipeline.cjs +517 -0
  148. package/gsd-core/bin/lib/project-root.cjs +119 -0
  149. package/gsd-core/bin/lib/prompt-budget.cjs +305 -0
  150. package/gsd-core/bin/lib/review-reviewer-selection.cjs +121 -0
  151. package/gsd-core/bin/lib/roadmap-command-router.cjs +166 -0
  152. package/gsd-core/bin/lib/roadmap-upgrade.cjs +491 -0
  153. package/gsd-core/bin/lib/roadmap.cjs +600 -0
  154. package/gsd-core/bin/lib/runtime-artifact-layout.cjs +254 -0
  155. package/gsd-core/bin/lib/runtime-homes.cjs +169 -0
  156. package/gsd-core/bin/lib/runtime-name-policy.cjs +96 -0
  157. package/gsd-core/bin/lib/runtime-slash.cjs +119 -0
  158. package/{get-shit-done → gsd-core}/bin/lib/schema-detect.cjs +20 -26
  159. package/gsd-core/bin/lib/secrets.cjs +34 -0
  160. package/gsd-core/bin/lib/security.cjs +407 -0
  161. package/gsd-core/bin/lib/semver-compare.cjs +42 -0
  162. package/gsd-core/bin/lib/shell-command-projection.cjs +524 -0
  163. package/gsd-core/bin/lib/state-command-router.cjs +160 -0
  164. package/{get-shit-done → gsd-core}/bin/lib/state-document.cjs +78 -82
  165. package/gsd-core/bin/lib/state.cjs +2010 -0
  166. package/gsd-core/bin/lib/surface.cjs +406 -0
  167. package/gsd-core/bin/lib/task-command-router.cjs +85 -0
  168. package/gsd-core/bin/lib/template.cjs +237 -0
  169. package/gsd-core/bin/lib/uat.cjs +297 -0
  170. package/gsd-core/bin/lib/ui-safety-gate.cjs +98 -0
  171. package/gsd-core/bin/lib/update-context.cjs +218 -0
  172. package/gsd-core/bin/lib/validate-command-router.cjs +91 -0
  173. package/gsd-core/bin/lib/validate.cjs +112 -0
  174. package/gsd-core/bin/lib/verify-command-router.cjs +44 -0
  175. package/gsd-core/bin/lib/verify.cjs +1451 -0
  176. package/{get-shit-done → gsd-core}/bin/lib/workstream-inventory-builder.cjs +19 -12
  177. package/gsd-core/bin/lib/workstream-inventory.cjs +147 -0
  178. package/{get-shit-done → gsd-core}/bin/lib/workstream-name-policy.cjs +28 -31
  179. package/gsd-core/bin/lib/workstream.cjs +380 -0
  180. package/gsd-core/bin/lib/worktree-safety.cjs +912 -0
  181. package/{get-shit-done → gsd-core}/bin/shared/config-defaults.manifest.json +1 -0
  182. package/{get-shit-done → gsd-core}/bin/shared/config-schema.manifest.json +17 -1
  183. package/{get-shit-done → gsd-core}/bin/shared/model-catalog.json +27 -0
  184. package/{get-shit-done → gsd-core}/references/artifact-types.md +1 -1
  185. package/{get-shit-done → gsd-core}/references/checkpoints.md +1 -1
  186. package/{get-shit-done → gsd-core}/references/few-shot-examples/plan-checker.md +2 -2
  187. package/{get-shit-done → gsd-core}/references/few-shot-examples/verifier.md +12 -12
  188. package/{get-shit-done → gsd-core}/references/model-profile-resolution.md +1 -1
  189. package/{get-shit-done → gsd-core}/references/mvp-concepts.md +1 -1
  190. package/{get-shit-done → gsd-core}/references/planner-graphify-auto-update.md +2 -2
  191. package/{get-shit-done → gsd-core}/references/planner-human-verify-mode.md +1 -1
  192. package/{get-shit-done → gsd-core}/references/planner-mvp-mode.md +1 -1
  193. package/{get-shit-done → gsd-core}/references/ui-brand.md +4 -2
  194. package/{get-shit-done → gsd-core}/references/verification-patterns.md +1 -1
  195. package/gsd-core/references/worktree-branch-check.md +38 -0
  196. package/{get-shit-done → gsd-core}/references/worktree-path-safety.md +4 -26
  197. package/{get-shit-done → gsd-core}/templates/README.md +2 -2
  198. package/{get-shit-done → gsd-core}/templates/codebase/structure.md +10 -10
  199. package/{get-shit-done → gsd-core}/templates/copilot-instructions.md +1 -1
  200. package/{get-shit-done → gsd-core}/templates/phase-prompt.md +10 -10
  201. package/gsd-core/workflows/_runtime-launcher.snippet.sh +1 -0
  202. package/{get-shit-done → gsd-core}/workflows/add-backlog.md +1 -1
  203. package/{get-shit-done → gsd-core}/workflows/add-phase.md +1 -1
  204. package/{get-shit-done → gsd-core}/workflows/add-tests.md +1 -1
  205. package/{get-shit-done → gsd-core}/workflows/add-todo.md +1 -1
  206. package/{get-shit-done → gsd-core}/workflows/ai-integration-phase.md +4 -4
  207. package/{get-shit-done → gsd-core}/workflows/audit-fix.md +2 -2
  208. package/{get-shit-done → gsd-core}/workflows/audit-milestone.md +3 -1
  209. package/{get-shit-done → gsd-core}/workflows/audit-uat.md +1 -1
  210. package/{get-shit-done → gsd-core}/workflows/autonomous.md +10 -8
  211. package/{get-shit-done → gsd-core}/workflows/check-todos.md +1 -1
  212. package/{get-shit-done → gsd-core}/workflows/cleanup.md +44 -4
  213. package/{get-shit-done → gsd-core}/workflows/code-review-fix.md +4 -4
  214. package/{get-shit-done → gsd-core}/workflows/code-review.md +6 -4
  215. package/{get-shit-done → gsd-core}/workflows/complete-milestone.md +2 -2
  216. package/{get-shit-done → gsd-core}/workflows/debug.md +7 -2
  217. package/{get-shit-done → gsd-core}/workflows/diagnose-issues.md +6 -2
  218. package/{get-shit-done → gsd-core}/workflows/discovery-phase.md +5 -5
  219. package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/advisor.md +5 -5
  220. package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/auto.md +1 -1
  221. package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/chain.md +1 -1
  222. package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/power.md +1 -1
  223. package/{get-shit-done → gsd-core}/workflows/discuss-phase-assumptions.md +4 -4
  224. package/{get-shit-done → gsd-core}/workflows/discuss-phase.md +6 -6
  225. package/{get-shit-done → gsd-core}/workflows/do.md +1 -1
  226. package/{get-shit-done → gsd-core}/workflows/docs-update.md +19 -5
  227. package/{get-shit-done → gsd-core}/workflows/edit-phase.md +1 -1
  228. package/{get-shit-done → gsd-core}/workflows/eval-review.md +3 -3
  229. package/{get-shit-done → gsd-core}/workflows/execute-phase/steps/codebase-drift-gate.md +16 -3
  230. package/{get-shit-done → gsd-core}/workflows/execute-phase/steps/post-merge-gate.md +1 -1
  231. package/{get-shit-done → gsd-core}/workflows/execute-phase.md +89 -57
  232. package/{get-shit-done → gsd-core}/workflows/execute-plan.md +8 -8
  233. package/{get-shit-done → gsd-core}/workflows/explore.md +5 -3
  234. package/{get-shit-done → gsd-core}/workflows/extract-learnings.md +1 -1
  235. package/{get-shit-done → gsd-core}/workflows/forensics.md +1 -1
  236. package/{get-shit-done → gsd-core}/workflows/graduation.md +1 -1
  237. package/{get-shit-done → gsd-core}/workflows/health.md +1 -1
  238. package/{get-shit-done → gsd-core}/workflows/help/modes/default.md +3 -3
  239. package/{get-shit-done → gsd-core}/workflows/help/modes/full.md +6 -6
  240. package/{get-shit-done → gsd-core}/workflows/import.md +3 -1
  241. package/{get-shit-done → gsd-core}/workflows/ingest-docs.md +5 -5
  242. package/{get-shit-done → gsd-core}/workflows/insert-phase.md +1 -1
  243. package/{get-shit-done → gsd-core}/workflows/list-workspaces.md +1 -1
  244. package/{get-shit-done → gsd-core}/workflows/manager.md +3 -3
  245. package/{get-shit-done → gsd-core}/workflows/map-codebase.md +3 -1
  246. package/{get-shit-done → gsd-core}/workflows/milestone-summary.md +1 -1
  247. package/{get-shit-done → gsd-core}/workflows/mvp-phase.md +7 -7
  248. package/{get-shit-done → gsd-core}/workflows/new-milestone.md +5 -5
  249. package/{get-shit-done → gsd-core}/workflows/new-project.md +8 -8
  250. package/{get-shit-done → gsd-core}/workflows/new-workspace.md +1 -1
  251. package/{get-shit-done → gsd-core}/workflows/next.md +1 -1
  252. package/{get-shit-done → gsd-core}/workflows/pause-work.md +1 -1
  253. package/{get-shit-done → gsd-core}/workflows/plan-milestone-gaps.md +1 -1
  254. package/{get-shit-done → gsd-core}/workflows/plan-phase.md +29 -28
  255. package/{get-shit-done → gsd-core}/workflows/plan-review-convergence.md +10 -10
  256. package/{get-shit-done → gsd-core}/workflows/plant-seed.md +1 -1
  257. package/{get-shit-done → gsd-core}/workflows/profile-user.md +11 -11
  258. package/{get-shit-done → gsd-core}/workflows/progress.md +1 -1
  259. package/{get-shit-done → gsd-core}/workflows/quick.md +7 -29
  260. package/{get-shit-done → gsd-core}/workflows/reapply-patches.md +2 -2
  261. package/{get-shit-done → gsd-core}/workflows/remove-phase.md +1 -1
  262. package/{get-shit-done → gsd-core}/workflows/remove-workspace.md +1 -1
  263. package/{get-shit-done → gsd-core}/workflows/resume-project.md +2 -2
  264. package/{get-shit-done → gsd-core}/workflows/review.md +110 -2
  265. package/{get-shit-done → gsd-core}/workflows/scan.md +3 -1
  266. package/{get-shit-done → gsd-core}/workflows/secure-phase.md +5 -3
  267. package/{get-shit-done → gsd-core}/workflows/settings-advanced.md +196 -6
  268. package/{get-shit-done → gsd-core}/workflows/settings-integrations.md +2 -2
  269. package/{get-shit-done → gsd-core}/workflows/settings.md +16 -2
  270. package/{get-shit-done → gsd-core}/workflows/ship.md +56 -4
  271. package/{get-shit-done → gsd-core}/workflows/sketch-wrap-up.md +1 -1
  272. package/{get-shit-done → gsd-core}/workflows/sketch.md +5 -5
  273. package/{get-shit-done → gsd-core}/workflows/spec-phase.md +2 -2
  274. package/{get-shit-done → gsd-core}/workflows/spike-wrap-up.md +1 -1
  275. package/{get-shit-done → gsd-core}/workflows/spike.md +1 -1
  276. package/{get-shit-done → gsd-core}/workflows/stats.md +1 -1
  277. package/{get-shit-done → gsd-core}/workflows/sync-skills.md +3 -3
  278. package/{get-shit-done → gsd-core}/workflows/thread.md +1 -1
  279. package/{get-shit-done → gsd-core}/workflows/transition.md +2 -2
  280. package/{get-shit-done → gsd-core}/workflows/ui-phase.md +5 -5
  281. package/{get-shit-done → gsd-core}/workflows/ui-review.md +3 -3
  282. package/{get-shit-done → gsd-core}/workflows/ultraplan-phase.md +1 -1
  283. package/{get-shit-done → gsd-core}/workflows/undo.md +2 -2
  284. package/{get-shit-done → gsd-core}/workflows/update.md +41 -16
  285. package/{get-shit-done → gsd-core}/workflows/validate-phase.md +5 -3
  286. package/{get-shit-done → gsd-core}/workflows/verify-phase.md +4 -4
  287. package/{get-shit-done → gsd-core}/workflows/verify-work.md +7 -7
  288. package/hooks/dist/gsd-check-update-worker.js +16 -3
  289. package/hooks/dist/gsd-check-update.js +7 -5
  290. package/hooks/dist/gsd-context-monitor.js +2 -2
  291. package/hooks/dist/gsd-statusline.js +39 -21
  292. package/hooks/dist/gsd-update-banner.js +6 -2
  293. package/hooks/dist/gsd-worktree-path-guard.js +169 -0
  294. package/hooks/dist/managed-hooks-registry.cjs +35 -0
  295. package/hooks/gsd-check-update-worker.js +16 -3
  296. package/hooks/gsd-check-update.js +7 -5
  297. package/hooks/gsd-context-monitor.js +2 -2
  298. package/hooks/gsd-statusline.js +39 -21
  299. package/hooks/gsd-update-banner.js +6 -2
  300. package/hooks/gsd-worktree-path-guard.js +169 -0
  301. package/hooks/managed-hooks-registry.cjs +1 -0
  302. package/package.json +17 -11
  303. package/scripts/affected-tests-lib.cjs +1 -1
  304. package/scripts/base64-scan.sh +12 -0
  305. package/scripts/build-hooks.js +5 -1
  306. package/scripts/changeset/cli.cjs +2 -2
  307. package/scripts/changeset/github-release-notes.cjs +1 -1
  308. package/scripts/changeset/lint.cjs +1 -1
  309. package/scripts/check-alias-drift.cjs +8 -8
  310. package/scripts/check-env.cjs +5 -1
  311. package/scripts/ci-test-scope.cjs +34 -9
  312. package/scripts/command-contract-helpers.cjs +1 -1
  313. package/scripts/fix-slash-commands.cjs +5 -5
  314. package/scripts/gen-inventory-manifest.cjs +3 -3
  315. package/scripts/generate-package-identity.cjs +28 -7
  316. package/scripts/lib/allowlist-ratchet.cjs +136 -0
  317. package/scripts/lint-command-contract.cjs +1 -1
  318. package/scripts/lint-legacy-dir-name.cjs +156 -0
  319. package/scripts/lint-package-identity-drift.cjs +8 -8
  320. package/scripts/lint-pr-check-project-dir.cjs +0 -1
  321. package/scripts/lint-shell-command-projection-drift.cjs +1 -1
  322. package/scripts/lint-skill-deps.cjs +1 -1
  323. package/scripts/lint-test-file-count.allowlist.json +129 -32
  324. package/scripts/lint-test-file-count.cjs +85 -30
  325. package/scripts/mutation-matrix.cjs +219 -0
  326. package/scripts/prompt-injection-scan.sh +5 -1
  327. package/scripts/release-notes/format-github-release-notes.cjs +256 -0
  328. package/scripts/release-tarball-smoke.cjs +9 -9
  329. package/scripts/run-tests.cjs +34 -2
  330. package/scripts/strip-prose-atrefs.cjs +2 -2
  331. package/scripts/sync-runtime-launcher.cjs +2 -2
  332. package/scripts/verify-npm-publish.cjs +252 -0
  333. package/get-shit-done/bin/lib/active-workstream-store.cjs +0 -302
  334. package/get-shit-done/bin/lib/adr-parser.cjs +0 -394
  335. package/get-shit-done/bin/lib/agent-command-router.cjs +0 -65
  336. package/get-shit-done/bin/lib/artifacts.cjs +0 -53
  337. package/get-shit-done/bin/lib/audit.cjs +0 -755
  338. package/get-shit-done/bin/lib/check-command-router.cjs +0 -333
  339. package/get-shit-done/bin/lib/cjs-command-router-adapter.cjs +0 -118
  340. package/get-shit-done/bin/lib/clock.cjs +0 -96
  341. package/get-shit-done/bin/lib/clusters.cjs +0 -135
  342. package/get-shit-done/bin/lib/code-review-flags.cjs +0 -74
  343. package/get-shit-done/bin/lib/command-aliases.cjs +0 -815
  344. package/get-shit-done/bin/lib/command-arg-projection.cjs +0 -62
  345. package/get-shit-done/bin/lib/command-routing-hub.cjs +0 -388
  346. package/get-shit-done/bin/lib/commands.cjs +0 -1188
  347. package/get-shit-done/bin/lib/config-schema.cjs +0 -31
  348. package/get-shit-done/bin/lib/config.cjs +0 -728
  349. package/get-shit-done/bin/lib/context-utilization.cjs +0 -47
  350. package/get-shit-done/bin/lib/core.cjs +0 -2121
  351. package/get-shit-done/bin/lib/docs.cjs +0 -270
  352. package/get-shit-done/bin/lib/drift.cjs +0 -388
  353. package/get-shit-done/bin/lib/fallow-runner.cjs +0 -109
  354. package/get-shit-done/bin/lib/frontmatter.cjs +0 -389
  355. package/get-shit-done/bin/lib/gap-checker.cjs +0 -205
  356. package/get-shit-done/bin/lib/graphify.cjs +0 -592
  357. package/get-shit-done/bin/lib/gsd2-import.cjs +0 -514
  358. package/get-shit-done/bin/lib/init-command-router.cjs +0 -58
  359. package/get-shit-done/bin/lib/init.cjs +0 -2112
  360. package/get-shit-done/bin/lib/install-profiles.cjs +0 -603
  361. package/get-shit-done/bin/lib/installer-migration-authoring.cjs +0 -117
  362. package/get-shit-done/bin/lib/installer-migration-report.cjs +0 -354
  363. package/get-shit-done/bin/lib/installer-migrations/000-first-time-baseline.cjs +0 -220
  364. package/get-shit-done/bin/lib/installer-migrations/001-legacy-orphan-files.cjs +0 -41
  365. package/get-shit-done/bin/lib/installer-migrations/002-codex-legacy-hooks-json.cjs +0 -80
  366. package/get-shit-done/bin/lib/installer-migrations.cjs +0 -778
  367. package/get-shit-done/bin/lib/intel.cjs +0 -708
  368. package/get-shit-done/bin/lib/learnings.cjs +0 -421
  369. package/get-shit-done/bin/lib/milestone.cjs +0 -314
  370. package/get-shit-done/bin/lib/model-catalog.cjs +0 -212
  371. package/get-shit-done/bin/lib/model-profiles.cjs +0 -31
  372. package/get-shit-done/bin/lib/observability/event.cjs +0 -82
  373. package/get-shit-done/bin/lib/observability/logger.cjs +0 -174
  374. package/get-shit-done/bin/lib/phase-command-router.cjs +0 -191
  375. package/get-shit-done/bin/lib/phase-lifecycle.cjs +0 -80
  376. package/get-shit-done/bin/lib/phase.cjs +0 -1607
  377. package/get-shit-done/bin/lib/phases-command-router.cjs +0 -39
  378. package/get-shit-done/bin/lib/planning-workspace.cjs +0 -238
  379. package/get-shit-done/bin/lib/profile-output.cjs +0 -1141
  380. package/get-shit-done/bin/lib/profile-pipeline.cjs +0 -539
  381. package/get-shit-done/bin/lib/project-root.cjs +0 -112
  382. package/get-shit-done/bin/lib/prompt-budget.cjs +0 -399
  383. package/get-shit-done/bin/lib/review-reviewer-selection.cjs +0 -125
  384. package/get-shit-done/bin/lib/roadmap-command-router.cjs +0 -28
  385. package/get-shit-done/bin/lib/roadmap.cjs +0 -650
  386. package/get-shit-done/bin/lib/runtime-artifact-layout.cjs +0 -301
  387. package/get-shit-done/bin/lib/runtime-homes.cjs +0 -222
  388. package/get-shit-done/bin/lib/runtime-name-policy.cjs +0 -83
  389. package/get-shit-done/bin/lib/runtime-slash.cjs +0 -112
  390. package/get-shit-done/bin/lib/secrets.cjs +0 -32
  391. package/get-shit-done/bin/lib/security.cjs +0 -600
  392. package/get-shit-done/bin/lib/semver-compare.cjs +0 -35
  393. package/get-shit-done/bin/lib/shell-command-projection.cjs +0 -500
  394. package/get-shit-done/bin/lib/state-command-router.cjs +0 -252
  395. package/get-shit-done/bin/lib/state.cjs +0 -2038
  396. package/get-shit-done/bin/lib/surface.cjs +0 -470
  397. package/get-shit-done/bin/lib/task-command-router.cjs +0 -81
  398. package/get-shit-done/bin/lib/template.cjs +0 -228
  399. package/get-shit-done/bin/lib/uat.cjs +0 -289
  400. package/get-shit-done/bin/lib/update-context.cjs +0 -209
  401. package/get-shit-done/bin/lib/validate-command-router.cjs +0 -83
  402. package/get-shit-done/bin/lib/validate.cjs +0 -92
  403. package/get-shit-done/bin/lib/verify-command-router.cjs +0 -40
  404. package/get-shit-done/bin/lib/verify.cjs +0 -1511
  405. package/get-shit-done/bin/lib/workstream-inventory.cjs +0 -146
  406. package/get-shit-done/bin/lib/workstream.cjs +0 -389
  407. package/get-shit-done/bin/lib/worktree-safety.cjs +0 -985
  408. package/get-shit-done/workflows/_runtime-launcher.snippet.sh +0 -1
  409. package/scripts/lint-no-source-grep-extras.cjs +0 -81
  410. package/scripts/lint-no-source-grep.cjs +0 -174
  411. package/scripts/lint-shared-module-handsync.cjs +0 -388
  412. package/scripts/shared-module-handsync-allowlist.json +0 -183
  413. /package/{get-shit-done → gsd-core}/bin/shared/runtime-aliases.manifest.json +0 -0
  414. /package/{get-shit-done → gsd-core}/bin/verify-reapply-patches.cjs +0 -0
  415. /package/{get-shit-done → gsd-core}/contexts/dev.md +0 -0
  416. /package/{get-shit-done → gsd-core}/contexts/research.md +0 -0
  417. /package/{get-shit-done → gsd-core}/contexts/review.md +0 -0
  418. /package/{get-shit-done → gsd-core}/references/agent-contracts.md +0 -0
  419. /package/{get-shit-done → gsd-core}/references/ai-evals.md +0 -0
  420. /package/{get-shit-done → gsd-core}/references/ai-frameworks.md +0 -0
  421. /package/{get-shit-done → gsd-core}/references/autonomous-smart-discuss.md +0 -0
  422. /package/{get-shit-done → gsd-core}/references/common-bug-patterns.md +0 -0
  423. /package/{get-shit-done → gsd-core}/references/context-budget.md +0 -0
  424. /package/{get-shit-done → gsd-core}/references/continuation-format.md +0 -0
  425. /package/{get-shit-done → gsd-core}/references/debugger-philosophy.md +0 -0
  426. /package/{get-shit-done → gsd-core}/references/decimal-phase-calculation.md +0 -0
  427. /package/{get-shit-done → gsd-core}/references/doc-conflict-engine.md +0 -0
  428. /package/{get-shit-done → gsd-core}/references/domain-probes.md +0 -0
  429. /package/{get-shit-done → gsd-core}/references/execute-mvp-tdd.md +0 -0
  430. /package/{get-shit-done → gsd-core}/references/executor-examples.md +0 -0
  431. /package/{get-shit-done → gsd-core}/references/gate-prompts.md +0 -0
  432. /package/{get-shit-done → gsd-core}/references/gates.md +0 -0
  433. /package/{get-shit-done → gsd-core}/references/git-integration.md +0 -0
  434. /package/{get-shit-done → gsd-core}/references/git-planning-commit.md +0 -0
  435. /package/{get-shit-done → gsd-core}/references/ios-scaffold.md +0 -0
  436. /package/{get-shit-done → gsd-core}/references/mandatory-initial-read.md +0 -0
  437. /package/{get-shit-done → gsd-core}/references/model-profiles.md +0 -0
  438. /package/{get-shit-done → gsd-core}/references/phase-argument-parsing.md +0 -0
  439. /package/{get-shit-done → gsd-core}/references/planner-antipatterns.md +0 -0
  440. /package/{get-shit-done → gsd-core}/references/planner-chunked.md +0 -0
  441. /package/{get-shit-done → gsd-core}/references/planner-gap-closure.md +0 -0
  442. /package/{get-shit-done → gsd-core}/references/planner-interface-context.md +0 -0
  443. /package/{get-shit-done → gsd-core}/references/planner-reviews.md +0 -0
  444. /package/{get-shit-done → gsd-core}/references/planner-revision.md +0 -0
  445. /package/{get-shit-done → gsd-core}/references/planner-source-audit.md +0 -0
  446. /package/{get-shit-done → gsd-core}/references/planning-config.md +0 -0
  447. /package/{get-shit-done → gsd-core}/references/project-skills-discovery.md +0 -0
  448. /package/{get-shit-done → gsd-core}/references/questioning.md +0 -0
  449. /package/{get-shit-done → gsd-core}/references/revision-loop.md +0 -0
  450. /package/{get-shit-done → gsd-core}/references/scout-codebase.md +0 -0
  451. /package/{get-shit-done → gsd-core}/references/skeleton-template.md +0 -0
  452. /package/{get-shit-done → gsd-core}/references/sketch-interactivity.md +0 -0
  453. /package/{get-shit-done → gsd-core}/references/sketch-theme-system.md +0 -0
  454. /package/{get-shit-done → gsd-core}/references/sketch-tooling.md +0 -0
  455. /package/{get-shit-done → gsd-core}/references/sketch-variant-patterns.md +0 -0
  456. /package/{get-shit-done → gsd-core}/references/spidr-splitting.md +0 -0
  457. /package/{get-shit-done → gsd-core}/references/tdd.md +0 -0
  458. /package/{get-shit-done → gsd-core}/references/thinking-models-debug.md +0 -0
  459. /package/{get-shit-done → gsd-core}/references/thinking-models-execution.md +0 -0
  460. /package/{get-shit-done → gsd-core}/references/thinking-models-planning.md +0 -0
  461. /package/{get-shit-done → gsd-core}/references/thinking-models-research.md +0 -0
  462. /package/{get-shit-done → gsd-core}/references/thinking-models-verification.md +0 -0
  463. /package/{get-shit-done → gsd-core}/references/thinking-partner.md +0 -0
  464. /package/{get-shit-done → gsd-core}/references/universal-anti-patterns.md +0 -0
  465. /package/{get-shit-done → gsd-core}/references/user-profiling.md +0 -0
  466. /package/{get-shit-done → gsd-core}/references/user-story-template.md +0 -0
  467. /package/{get-shit-done → gsd-core}/references/verification-overrides.md +0 -0
  468. /package/{get-shit-done → gsd-core}/references/verify-mvp-mode.md +0 -0
  469. /package/{get-shit-done → gsd-core}/references/workstream-flag.md +0 -0
  470. /package/{get-shit-done → gsd-core}/templates/AI-SPEC.md +0 -0
  471. /package/{get-shit-done → gsd-core}/templates/DEBUG.md +0 -0
  472. /package/{get-shit-done → gsd-core}/templates/SECURITY.md +0 -0
  473. /package/{get-shit-done → gsd-core}/templates/UAT.md +0 -0
  474. /package/{get-shit-done → gsd-core}/templates/UI-SPEC.md +0 -0
  475. /package/{get-shit-done → gsd-core}/templates/VALIDATION.md +0 -0
  476. /package/{get-shit-done → gsd-core}/templates/claude-md.md +0 -0
  477. /package/{get-shit-done → gsd-core}/templates/codebase/architecture.md +0 -0
  478. /package/{get-shit-done → gsd-core}/templates/codebase/concerns.md +0 -0
  479. /package/{get-shit-done → gsd-core}/templates/codebase/conventions.md +0 -0
  480. /package/{get-shit-done → gsd-core}/templates/codebase/integrations.md +0 -0
  481. /package/{get-shit-done → gsd-core}/templates/codebase/stack.md +0 -0
  482. /package/{get-shit-done → gsd-core}/templates/codebase/testing.md +0 -0
  483. /package/{get-shit-done → gsd-core}/templates/config.json +0 -0
  484. /package/{get-shit-done → gsd-core}/templates/context.md +0 -0
  485. /package/{get-shit-done → gsd-core}/templates/continue-here.md +0 -0
  486. /package/{get-shit-done → gsd-core}/templates/debug-subagent-prompt.md +0 -0
  487. /package/{get-shit-done → gsd-core}/templates/dev-preferences.md +0 -0
  488. /package/{get-shit-done → gsd-core}/templates/discovery.md +0 -0
  489. /package/{get-shit-done → gsd-core}/templates/discussion-log.md +0 -0
  490. /package/{get-shit-done → gsd-core}/templates/milestone-archive.md +0 -0
  491. /package/{get-shit-done → gsd-core}/templates/milestone.md +0 -0
  492. /package/{get-shit-done → gsd-core}/templates/planner-subagent-prompt.md +0 -0
  493. /package/{get-shit-done → gsd-core}/templates/project.md +0 -0
  494. /package/{get-shit-done → gsd-core}/templates/requirements.md +0 -0
  495. /package/{get-shit-done → gsd-core}/templates/research-project/ARCHITECTURE.md +0 -0
  496. /package/{get-shit-done → gsd-core}/templates/research-project/FEATURES.md +0 -0
  497. /package/{get-shit-done → gsd-core}/templates/research-project/PITFALLS.md +0 -0
  498. /package/{get-shit-done → gsd-core}/templates/research-project/STACK.md +0 -0
  499. /package/{get-shit-done → gsd-core}/templates/research-project/SUMMARY.md +0 -0
  500. /package/{get-shit-done → gsd-core}/templates/research.md +0 -0
  501. /package/{get-shit-done → gsd-core}/templates/retrospective.md +0 -0
  502. /package/{get-shit-done → gsd-core}/templates/roadmap.md +0 -0
  503. /package/{get-shit-done → gsd-core}/templates/spec.md +0 -0
  504. /package/{get-shit-done → gsd-core}/templates/state.md +0 -0
  505. /package/{get-shit-done → gsd-core}/templates/summary-complex.md +0 -0
  506. /package/{get-shit-done → gsd-core}/templates/summary-minimal.md +0 -0
  507. /package/{get-shit-done → gsd-core}/templates/summary-standard.md +0 -0
  508. /package/{get-shit-done → gsd-core}/templates/summary.md +0 -0
  509. /package/{get-shit-done → gsd-core}/templates/user-profile.md +0 -0
  510. /package/{get-shit-done → gsd-core}/templates/user-setup.md +0 -0
  511. /package/{get-shit-done → gsd-core}/templates/verification-report.md +0 -0
  512. /package/{get-shit-done → gsd-core}/workflows/analyze-dependencies.md +0 -0
  513. /package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/all.md +0 -0
  514. /package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/analyze.md +0 -0
  515. /package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/batch.md +0 -0
  516. /package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/default.md +0 -0
  517. /package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/text.md +0 -0
  518. /package/{get-shit-done → gsd-core}/workflows/discuss-phase/templates/checkpoint.json +0 -0
  519. /package/{get-shit-done → gsd-core}/workflows/discuss-phase/templates/context.md +0 -0
  520. /package/{get-shit-done → gsd-core}/workflows/discuss-phase/templates/discussion-log.md +0 -0
  521. /package/{get-shit-done → gsd-core}/workflows/discuss-phase-power.md +0 -0
  522. /package/{get-shit-done → gsd-core}/workflows/execute-phase/steps/per-plan-worktree-gate.md +0 -0
  523. /package/{get-shit-done → gsd-core}/workflows/fast.md +0 -0
  524. /package/{get-shit-done → gsd-core}/workflows/help/modes/brief.md +0 -0
  525. /package/{get-shit-done → gsd-core}/workflows/help/modes/topic.md +0 -0
  526. /package/{get-shit-done → gsd-core}/workflows/help.md +0 -0
  527. /package/{get-shit-done → gsd-core}/workflows/inbox.md +0 -0
  528. /package/{get-shit-done → gsd-core}/workflows/list-phase-assumptions.md +0 -0
  529. /package/{get-shit-done → gsd-core}/workflows/node-repair.md +0 -0
  530. /package/{get-shit-done → gsd-core}/workflows/note.md +0 -0
  531. /package/{get-shit-done → gsd-core}/workflows/pr-branch.md +0 -0
  532. /package/{get-shit-done → gsd-core}/workflows/session-report.md +0 -0
@@ -0,0 +1,456 @@
1
+ "use strict";
2
+ /**
3
+ * gsd2-import — Reverse migration from GSD-2 (.gsd/) to GSD v1 (.planning/)
4
+ *
5
+ * Reads a GSD-2 project directory structure and produces a complete
6
+ * .planning/ artifact tree in GSD v1 format.
7
+ *
8
+ * GSD-2 hierarchy: Milestone → Slice → Task
9
+ * GSD v1 hierarchy: Milestone (in ROADMAP.md) → Phase → Plan
10
+ *
11
+ * Mapping rules:
12
+ * - Slices are numbered sequentially across all milestones (01, 02, …)
13
+ * - Tasks within a slice become plans (01-01, 01-02, …)
14
+ * - Completed slices ([x] in ROADMAP) → [x] phases in ROADMAP.md
15
+ * - Tasks with a SUMMARY file → SUMMARY.md written
16
+ * - Slice RESEARCH.md → phase XX-RESEARCH.md
17
+ *
18
+ * ADR-457 build-at-publish: the hand-written bin/lib/gsd2-import.cjs collapsed
19
+ * to a TypeScript source of truth. Behaviour is preserved byte-for-behaviour
20
+ * from the prior hand-written .cjs; only strict types are added.
21
+ */
22
+ var __importDefault = (this && this.__importDefault) || function (mod) {
23
+ return (mod && mod.__esModule) ? mod : { "default": mod };
24
+ };
25
+ const node_fs_1 = __importDefault(require("node:fs"));
26
+ const node_path_1 = __importDefault(require("node:path"));
27
+ const shell_command_projection_cjs_1 = require("./shell-command-projection.cjs");
28
+ const runtime_slash_cjs_1 = require("./runtime-slash.cjs");
29
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
30
+ const core = require("./core.cjs");
31
+ const { output } = core;
32
+ // ─── Utilities ──────────────────────────────────────────────────────────────
33
+ function readOptional(filePath) {
34
+ try {
35
+ return node_fs_1.default.readFileSync(filePath, 'utf8');
36
+ }
37
+ catch {
38
+ return null;
39
+ }
40
+ }
41
+ function zeroPad(n, width = 2) {
42
+ return String(n).padStart(width, '0');
43
+ }
44
+ function slugify(title) {
45
+ return title.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');
46
+ }
47
+ // ─── GSD-2 Parser ───────────────────────────────────────────────────────────
48
+ /**
49
+ * Find the .gsd/ directory starting from a project root.
50
+ * Returns the absolute path or null if not found.
51
+ */
52
+ function findGsd2Root(startPath) {
53
+ if (node_path_1.default.basename(startPath) === '.gsd' && node_fs_1.default.existsSync(startPath)) {
54
+ return startPath;
55
+ }
56
+ const candidate = node_path_1.default.join(startPath, '.gsd');
57
+ if (node_fs_1.default.existsSync(candidate) && node_fs_1.default.statSync(candidate).isDirectory()) {
58
+ return candidate;
59
+ }
60
+ return null;
61
+ }
62
+ /**
63
+ * Parse the ## Slices section from a GSD-2 milestone ROADMAP.md.
64
+ * Each slice entry looks like:
65
+ * - [x] **S01: Title** `risk:medium` `depends:[S00]`
66
+ */
67
+ function parseSlicesFromRoadmap(content) {
68
+ const slices = [];
69
+ const sectionMatch = content.match(/## Slices\n([\s\S]*?)(?:\n## |\n# |$)/);
70
+ if (!sectionMatch)
71
+ return slices;
72
+ for (const line of sectionMatch[1].split('\n')) {
73
+ const m = line.match(/^- \[([x ])\]\s+\*\*(\w+):\s*([^*]+)\*\*/);
74
+ if (!m)
75
+ continue;
76
+ slices.push({ done: m[1] === 'x', id: m[2].trim(), title: m[3].trim() });
77
+ }
78
+ return slices;
79
+ }
80
+ /**
81
+ * Parse the milestone title from the first heading in a GSD-2 ROADMAP.md.
82
+ * Format: # M001: Title
83
+ */
84
+ function parseMilestoneTitle(content) {
85
+ const m = content.match(/^# \w+:\s*(.+)/m);
86
+ return m ? m[1].trim() : null;
87
+ }
88
+ /**
89
+ * Parse a task title from a GSD-2 T##-PLAN.md.
90
+ * Format: # T01: Title
91
+ */
92
+ function parseTaskTitle(content, fallback) {
93
+ const m = content.match(/^# \w+:\s*(.+)/m);
94
+ return m ? m[1].trim() : fallback;
95
+ }
96
+ /**
97
+ * Parse the ## Description body from a GSD-2 task plan.
98
+ */
99
+ function parseTaskDescription(content) {
100
+ const m = content.match(/## Description\n+([\s\S]+?)(?:\n## |\n# |$)/);
101
+ return m ? m[1].trim() : '';
102
+ }
103
+ /**
104
+ * Parse ## Must-Haves items from a GSD-2 task plan.
105
+ */
106
+ function parseTaskMustHaves(content) {
107
+ const m = content.match(/## Must-Haves\n+([\s\S]+?)(?:\n## |\n# |$)/);
108
+ if (!m)
109
+ return [];
110
+ return m[1].split('\n')
111
+ .map(l => l.match(/^- \[[ x]\]\s*(.+)/))
112
+ .filter((match) => match !== null)
113
+ .map(match => match[1].trim());
114
+ }
115
+ /**
116
+ * Read all task plan files from a GSD-2 tasks/ directory.
117
+ */
118
+ function readTasksDir(tasksDir) {
119
+ if (!node_fs_1.default.existsSync(tasksDir))
120
+ return [];
121
+ return node_fs_1.default.readdirSync(tasksDir)
122
+ .filter(f => f.endsWith('-PLAN.md'))
123
+ .sort()
124
+ .map(tf => {
125
+ const tid = tf.replace('-PLAN.md', '');
126
+ const plan = readOptional(node_path_1.default.join(tasksDir, tf));
127
+ const summary = readOptional(node_path_1.default.join(tasksDir, `${tid}-SUMMARY.md`));
128
+ return {
129
+ id: tid,
130
+ title: plan ? parseTaskTitle(plan, tid) : tid,
131
+ description: plan ? parseTaskDescription(plan) : '',
132
+ mustHaves: plan ? parseTaskMustHaves(plan) : [],
133
+ plan,
134
+ summary,
135
+ done: !!summary,
136
+ };
137
+ });
138
+ }
139
+ /**
140
+ * Parse a complete GSD-2 .gsd/ directory into a structured representation.
141
+ */
142
+ function parseGsd2(gsdDir) {
143
+ const data = {
144
+ projectContent: readOptional(node_path_1.default.join(gsdDir, 'PROJECT.md')),
145
+ requirements: readOptional(node_path_1.default.join(gsdDir, 'REQUIREMENTS.md')),
146
+ milestones: [],
147
+ };
148
+ const milestonesBase = node_path_1.default.join(gsdDir, 'milestones');
149
+ if (!node_fs_1.default.existsSync(milestonesBase))
150
+ return data;
151
+ const milestoneIds = node_fs_1.default.readdirSync(milestonesBase)
152
+ .filter(d => node_fs_1.default.statSync(node_path_1.default.join(milestonesBase, d)).isDirectory())
153
+ .sort();
154
+ for (const mid of milestoneIds) {
155
+ const mDir = node_path_1.default.join(milestonesBase, mid);
156
+ const roadmapContent = readOptional(node_path_1.default.join(mDir, `${mid}-ROADMAP.md`));
157
+ const slicesDir = node_path_1.default.join(mDir, 'slices');
158
+ const sliceInfos = roadmapContent ? parseSlicesFromRoadmap(roadmapContent) : [];
159
+ const slices = sliceInfos.map(info => {
160
+ const sDir = node_path_1.default.join(slicesDir, info.id);
161
+ const hasSDir = node_fs_1.default.existsSync(sDir);
162
+ return {
163
+ id: info.id,
164
+ title: info.title,
165
+ done: info.done,
166
+ plan: hasSDir ? readOptional(node_path_1.default.join(sDir, `${info.id}-PLAN.md`)) : null,
167
+ summary: hasSDir ? readOptional(node_path_1.default.join(sDir, `${info.id}-SUMMARY.md`)) : null,
168
+ research: hasSDir ? readOptional(node_path_1.default.join(sDir, `${info.id}-RESEARCH.md`)) : null,
169
+ context: hasSDir ? readOptional(node_path_1.default.join(sDir, `${info.id}-CONTEXT.md`)) : null,
170
+ tasks: hasSDir ? readTasksDir(node_path_1.default.join(sDir, 'tasks')) : [],
171
+ };
172
+ });
173
+ data.milestones.push({
174
+ id: mid,
175
+ title: roadmapContent ? (parseMilestoneTitle(roadmapContent) ?? mid) : mid,
176
+ research: readOptional(node_path_1.default.join(mDir, `${mid}-RESEARCH.md`)),
177
+ slices,
178
+ });
179
+ }
180
+ return data;
181
+ }
182
+ // ─── Artifact Builders ──────────────────────────────────────────────────────
183
+ /**
184
+ * Build a GSD v1 PLAN.md from a GSD-2 task.
185
+ */
186
+ function buildPlanMd(task, phasePrefix, planPrefix, phaseSlug, milestoneTitle) {
187
+ const lines = [
188
+ '---',
189
+ `phase: "${phasePrefix}"`,
190
+ `plan: "${planPrefix}"`,
191
+ 'type: "implementation"',
192
+ '---',
193
+ '',
194
+ '<objective>',
195
+ task.title,
196
+ '</objective>',
197
+ '',
198
+ '<context>',
199
+ `Phase: ${phasePrefix} (${phaseSlug}) — Milestone: ${milestoneTitle}`,
200
+ ];
201
+ if (task.description) {
202
+ lines.push('', task.description);
203
+ }
204
+ lines.push('</context>');
205
+ if (task.mustHaves.length > 0) {
206
+ lines.push('', '<must_haves>');
207
+ for (const mh of task.mustHaves) {
208
+ lines.push(`- ${mh}`);
209
+ }
210
+ lines.push('</must_haves>');
211
+ }
212
+ return lines.join('\n') + '\n';
213
+ }
214
+ /**
215
+ * Build a GSD v1 SUMMARY.md from a GSD-2 task summary.
216
+ * Strips the GSD-2 frontmatter and preserves the body.
217
+ */
218
+ function buildSummaryMd(task, phasePrefix, planPrefix) {
219
+ const raw = task.summary || '';
220
+ // Strip GSD-2 frontmatter block (--- ... ---) if present
221
+ const bodyMatch = raw.match(/^---[\s\S]*?---\n+([\s\S]*)$/);
222
+ const body = bodyMatch ? bodyMatch[1].trim() : raw.trim();
223
+ return [
224
+ '---',
225
+ `phase: "${phasePrefix}"`,
226
+ `plan: "${planPrefix}"`,
227
+ '---',
228
+ '',
229
+ body || 'Task completed (migrated from GSD-2).',
230
+ '',
231
+ ].join('\n');
232
+ }
233
+ /**
234
+ * Build a GSD v1 XX-CONTEXT.md from a GSD-2 slice.
235
+ */
236
+ function buildContextMd(slice, phasePrefix) {
237
+ const lines = [
238
+ `# Phase ${phasePrefix} Context`,
239
+ '',
240
+ `Migrated from GSD-2 slice ${slice.id}: ${slice.title}`,
241
+ ];
242
+ const extra = slice.context || '';
243
+ if (extra.trim()) {
244
+ lines.push('', extra.trim());
245
+ }
246
+ return lines.join('\n') + '\n';
247
+ }
248
+ /**
249
+ * Build the GSD v1 ROADMAP.md with milestone-sectioned format.
250
+ */
251
+ function buildRoadmapMd(milestones, phaseMap) {
252
+ const lines = ['# Roadmap', ''];
253
+ for (const milestone of milestones) {
254
+ lines.push(`## ${milestone.id}: ${milestone.title}`, '');
255
+ const mPhases = phaseMap.filter(p => p.milestoneId === milestone.id);
256
+ for (const { slice, phaseNum } of mPhases) {
257
+ const prefix = zeroPad(phaseNum);
258
+ const slug = slugify(slice.title);
259
+ const check = slice.done ? 'x' : ' ';
260
+ lines.push(`- [${check}] **Phase ${prefix}: ${slug}** — ${slice.title}`);
261
+ }
262
+ lines.push('');
263
+ }
264
+ return lines.join('\n');
265
+ }
266
+ /**
267
+ * Build the GSD v1 STATE.md reflecting the current position in the project.
268
+ */
269
+ function buildStateMd(phaseMap) {
270
+ const currentEntry = phaseMap.find(p => !p.slice.done);
271
+ const totalPhases = phaseMap.length;
272
+ const donePhases = phaseMap.filter(p => p.slice.done).length;
273
+ const pct = totalPhases > 0 ? Math.round((donePhases / totalPhases) * 100) : 0;
274
+ const currentPhaseNum = currentEntry ? zeroPad(currentEntry.phaseNum) : zeroPad(totalPhases);
275
+ const currentSlug = currentEntry ? slugify(currentEntry.slice.title) : 'complete';
276
+ const status = currentEntry ? 'Ready to plan' : 'All phases complete';
277
+ const filled = Math.round(pct / 10);
278
+ const bar = `[${'█'.repeat(filled)}${'░'.repeat(10 - filled)}]`;
279
+ const today = new Date().toISOString().split('T')[0];
280
+ return [
281
+ '# Project State',
282
+ '',
283
+ '## Project Reference',
284
+ '',
285
+ 'See: .planning/PROJECT.md',
286
+ '',
287
+ `**Current focus:** Phase ${currentPhaseNum} (${currentSlug})`,
288
+ '',
289
+ '## Current Position',
290
+ '',
291
+ `Phase: ${currentPhaseNum} of ${zeroPad(totalPhases)} (${currentSlug})`,
292
+ `Status: ${status}`,
293
+ `Last activity: ${today} — Migrated from GSD-2`,
294
+ '',
295
+ `Progress: ${bar} ${pct}%`,
296
+ '',
297
+ '## Accumulated Context',
298
+ '',
299
+ '### Decisions',
300
+ '',
301
+ 'Migrated from GSD-2. Review PROJECT.md for key decisions.',
302
+ '',
303
+ '### Blockers/Concerns',
304
+ '',
305
+ 'None.',
306
+ '',
307
+ '## Session Continuity',
308
+ '',
309
+ `Last session: ${today}`,
310
+ 'Stopped at: Migration from GSD-2 completed',
311
+ 'Resume file: None',
312
+ '',
313
+ ].join('\n');
314
+ }
315
+ // ─── Transformer ─────────────────────────────────────────────────────────────
316
+ /**
317
+ * Convert parsed GSD-2 data into a map of relative path → file content.
318
+ * All paths are relative to the .planning/ root.
319
+ */
320
+ function buildPlanningArtifacts(gsd2Data) {
321
+ const artifacts = new Map();
322
+ // Passthrough files
323
+ artifacts.set('PROJECT.md', gsd2Data.projectContent || '# Project\n\n(Migrated from GSD-2)\n');
324
+ if (gsd2Data.requirements) {
325
+ artifacts.set('REQUIREMENTS.md', gsd2Data.requirements);
326
+ }
327
+ // Minimal valid v1 config
328
+ artifacts.set('config.json', JSON.stringify({ version: 1 }, null, 2) + '\n');
329
+ // Build sequential phase map: flatten Milestones → Slices into numbered phases
330
+ const phaseMap = [];
331
+ let phaseNum = 1;
332
+ for (const milestone of gsd2Data.milestones) {
333
+ for (const slice of milestone.slices) {
334
+ phaseMap.push({ milestoneId: milestone.id, milestoneTitle: milestone.title, slice, phaseNum });
335
+ phaseNum++;
336
+ }
337
+ }
338
+ artifacts.set('ROADMAP.md', buildRoadmapMd(gsd2Data.milestones, phaseMap));
339
+ artifacts.set('STATE.md', buildStateMd(phaseMap));
340
+ for (const { slice, phaseNum: pNum, milestoneTitle } of phaseMap) {
341
+ const prefix = zeroPad(pNum);
342
+ const slug = slugify(slice.title);
343
+ const dir = `phases/${prefix}-${slug}`;
344
+ artifacts.set(`${dir}/${prefix}-CONTEXT.md`, buildContextMd(slice, prefix));
345
+ if (slice.research) {
346
+ artifacts.set(`${dir}/${prefix}-RESEARCH.md`, slice.research);
347
+ }
348
+ for (let i = 0; i < slice.tasks.length; i++) {
349
+ const task = slice.tasks[i];
350
+ const planPrefix = zeroPad(i + 1);
351
+ artifacts.set(`${dir}/${prefix}-${planPrefix}-PLAN.md`, buildPlanMd(task, prefix, planPrefix, slug, milestoneTitle));
352
+ if (task.done && task.summary) {
353
+ artifacts.set(`${dir}/${prefix}-${planPrefix}-SUMMARY.md`, buildSummaryMd(task, prefix, planPrefix));
354
+ }
355
+ }
356
+ }
357
+ return artifacts;
358
+ }
359
+ // ─── Preview ─────────────────────────────────────────────────────────────────
360
+ /**
361
+ * Format a dry-run preview string for display before writing.
362
+ */
363
+ function buildPreview(gsd2Data, artifacts, projectDir) {
364
+ const lines = ['Preview — files that will be created in .planning/:'];
365
+ for (const rel of artifacts.keys()) {
366
+ lines.push(` ${rel}`);
367
+ }
368
+ const totalSlices = gsd2Data.milestones.reduce((s, m) => s + m.slices.length, 0);
369
+ const doneSlices = gsd2Data.milestones.reduce((s, m) => s + m.slices.filter(sl => sl.done).length, 0);
370
+ const allTasks = gsd2Data.milestones.flatMap(m => m.slices.flatMap(sl => sl.tasks));
371
+ const doneTasks = allTasks.filter(t => t.done).length;
372
+ lines.push('');
373
+ lines.push(`Milestones: ${gsd2Data.milestones.length}`);
374
+ lines.push(`Phases (slices): ${totalSlices} (${doneSlices} completed)`);
375
+ lines.push(`Plans (tasks): ${allTasks.length} (${doneTasks} completed)`);
376
+ lines.push('');
377
+ lines.push('Cannot migrate automatically:');
378
+ lines.push(' - GSD-2 cost/token ledger (no v1 equivalent)');
379
+ lines.push(` - GSD-2 database state (rebuilt from files on first ${(0, runtime_slash_cjs_1.formatGsdSlash)('health', (0, runtime_slash_cjs_1.resolveRuntime)(projectDir))})`);
380
+ lines.push(' - VS Code extension state');
381
+ return lines.join('\n');
382
+ }
383
+ // ─── Writer ───────────────────────────────────────────────────────────────────
384
+ /**
385
+ * Write all artifacts to the .planning/ directory.
386
+ */
387
+ function writePlanningDir(artifacts, planningRoot) {
388
+ for (const [rel, content] of artifacts) {
389
+ const absPath = node_path_1.default.join(planningRoot, rel);
390
+ (0, shell_command_projection_cjs_1.platformWriteSync)(absPath, content);
391
+ }
392
+ }
393
+ // ─── Command Handler ──────────────────────────────────────────────────────────
394
+ /**
395
+ * Entry point called from gsd-tools.cjs.
396
+ * Supports: --force, --dry-run, --path <dir>
397
+ */
398
+ function cmdFromGsd2(args, cwd, raw) {
399
+ const force = args.includes('--force');
400
+ const dryRun = args.includes('--dry-run');
401
+ const pathIdx = args.indexOf('--path');
402
+ const projectDir = pathIdx >= 0 && args[pathIdx + 1]
403
+ ? node_path_1.default.resolve(cwd, args[pathIdx + 1])
404
+ : cwd;
405
+ const gsdDir = findGsd2Root(projectDir);
406
+ if (!gsdDir) {
407
+ output({ success: false, error: `No .gsd/ directory found in ${projectDir}` }, raw, undefined);
408
+ return;
409
+ }
410
+ const planningRoot = node_path_1.default.join(node_path_1.default.dirname(gsdDir), '.planning');
411
+ if (node_fs_1.default.existsSync(planningRoot) && !force) {
412
+ output({
413
+ success: false,
414
+ error: `.planning/ already exists at ${planningRoot}. Pass --force to overwrite.`,
415
+ }, raw, undefined);
416
+ return;
417
+ }
418
+ const gsd2Data = parseGsd2(gsdDir);
419
+ const artifacts = buildPlanningArtifacts(gsd2Data);
420
+ // Use projectDir (resolved from --path) — not the process cwd — so the
421
+ // preview command targets the project actually being imported (#3584).
422
+ const preview = buildPreview(gsd2Data, artifacts, projectDir);
423
+ if (dryRun) {
424
+ output({ success: true, dryRun: true, preview }, raw, undefined);
425
+ return;
426
+ }
427
+ writePlanningDir(artifacts, planningRoot);
428
+ output({
429
+ success: true,
430
+ planningDir: planningRoot,
431
+ filesWritten: artifacts.size,
432
+ milestones: gsd2Data.milestones.length,
433
+ preview,
434
+ }, raw, undefined);
435
+ }
436
+ module.exports = {
437
+ findGsd2Root,
438
+ parseGsd2,
439
+ buildPlanningArtifacts,
440
+ buildPreview,
441
+ writePlanningDir,
442
+ cmdFromGsd2,
443
+ // Exported for unit tests
444
+ parseSlicesFromRoadmap,
445
+ parseMilestoneTitle,
446
+ parseTaskTitle,
447
+ parseTaskDescription,
448
+ parseTaskMustHaves,
449
+ buildPlanMd,
450
+ buildSummaryMd,
451
+ buildContextMd,
452
+ buildRoadmapMd,
453
+ buildStateMd,
454
+ slugify,
455
+ zeroPad,
456
+ };
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ /**
3
+ * Manifest-backed init subcommand router.
4
+ * Keeps gsd-tools.cjs thin while preserving existing command semantics.
5
+ *
6
+ * Phase 6: all init.* subcommands have SDK equivalents and are dispatched
7
+ * via executeForCjs (the sync bridge). CJS fallback retained when:
8
+ * - GSD_WORKSTREAM is active (workstream-scoped requests fall through to CJS).
9
+ * - SDK is unavailable (build not present).
10
+ *
11
+ * CJS-only subcommands: none.
12
+ * SDK-only (unsupported in CJS router): none.
13
+ *
14
+ * ADR-457 build-at-publish: the hand-written bin/lib/init-command-router.cjs
15
+ * collapsed to a TypeScript source of truth. Behaviour is preserved byte-for-behaviour
16
+ * from the prior hand-written .cjs; only types are added.
17
+ */
18
+ const command_aliases_cjs_1 = require("./command-aliases.cjs");
19
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
20
+ const cjsCommandRouterAdapter = require("./cjs-command-router-adapter.cjs");
21
+ const { routeCjsCommandFamily } = cjsCommandRouterAdapter;
22
+ const command_arg_projection_cjs_1 = require("./command-arg-projection.cjs");
23
+ // ─── Implementation ───────────────────────────────────────────────────────────
24
+ function routeInitCommand({ init, args, cwd, raw, error }) {
25
+ routeCjsCommandFamily({
26
+ args,
27
+ subcommands: command_aliases_cjs_1.INIT_SUBCOMMANDS,
28
+ unsupported: {},
29
+ error,
30
+ unknownMessage: (_subcommand, available) => `Unknown init workflow: ${_subcommand}\nAvailable: ${available.join(', ')}`,
31
+ handlers: {
32
+ 'execute-phase': () => {
33
+ const namedArgs = (0, command_arg_projection_cjs_1.parseNamedArgs)(args, [], ['validate', 'tdd']);
34
+ init.cmdInitExecutePhase(cwd, args[2], raw, { validate: namedArgs['validate'], tdd: namedArgs['tdd'] });
35
+ },
36
+ 'plan-phase': () => {
37
+ const namedArgs = (0, command_arg_projection_cjs_1.parseNamedArgs)(args, [], ['validate', 'tdd']);
38
+ init.cmdInitPlanPhase(cwd, args[2], raw, { validate: namedArgs['validate'], tdd: namedArgs['tdd'] });
39
+ },
40
+ 'new-project': () => init.cmdInitNewProject(cwd, raw),
41
+ 'new-milestone': () => init.cmdInitNewMilestone(cwd, raw),
42
+ quick: () => init.cmdInitQuick(cwd, args.slice(2).join(' '), raw),
43
+ 'ingest-docs': () => init.cmdInitIngestDocs(cwd, raw),
44
+ resume: () => init.cmdInitResume(cwd, raw),
45
+ 'verify-work': () => init.cmdInitVerifyWork(cwd, args[2], raw),
46
+ 'phase-op': () => init.cmdInitPhaseOp(cwd, args[2], raw),
47
+ todos: () => init.cmdInitTodos(cwd, args[2], raw),
48
+ 'milestone-op': () => init.cmdInitMilestoneOp(cwd, raw),
49
+ 'map-codebase': () => init.cmdInitMapCodebase(cwd, raw),
50
+ progress: () => init.cmdInitProgress(cwd, raw),
51
+ // Keep manager on CJS for now so runtime-specific command rendering
52
+ // (e.g. $gsd-* for codex) stays consistent with runtime-slash helpers.
53
+ manager: () => init.cmdInitManager(cwd, raw),
54
+ 'new-workspace': () => init.cmdInitNewWorkspace(cwd, raw),
55
+ 'list-workspaces': () => init.cmdInitListWorkspaces(cwd, raw),
56
+ 'remove-workspace': () => init.cmdInitRemoveWorkspace(cwd, args[2], raw),
57
+ },
58
+ });
59
+ }
60
+ module.exports = {
61
+ routeInitCommand,
62
+ };