@opengsd/gsd-core 1.3.0-rc.1 → 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 (521) hide show
  1. package/README.ja-JP.md +44 -790
  2. package/README.ko-KR.md +41 -778
  3. package/README.md +39 -180
  4. package/README.pt-BR.md +45 -413
  5. package/README.zh-CN.md +43 -761
  6. package/agents/gsd-ai-researcher.md +1 -1
  7. package/agents/gsd-debugger.md +8 -8
  8. package/agents/gsd-domain-researcher.md +14 -1
  9. package/agents/gsd-eval-auditor.md +1 -1
  10. package/agents/gsd-eval-planner.md +1 -1
  11. package/agents/gsd-executor.md +21 -8
  12. package/agents/gsd-framework-selector.md +1 -1
  13. package/agents/gsd-intel-updater.md +4 -4
  14. package/agents/gsd-phase-researcher.md +18 -5
  15. package/agents/gsd-plan-checker.md +3 -3
  16. package/agents/gsd-planner.md +36 -23
  17. package/agents/gsd-project-researcher.md +13 -0
  18. package/agents/gsd-research-synthesizer.md +6 -2
  19. package/agents/gsd-roadmapper.md +6 -6
  20. package/agents/gsd-ui-researcher.md +15 -2
  21. package/agents/gsd-user-profiler.md +2 -2
  22. package/agents/gsd-verifier.md +7 -7
  23. package/bin/install.js +169 -59
  24. package/commands/gsd/add-tests.md +1 -1
  25. package/commands/gsd/ai-integration-phase.md +3 -3
  26. package/commands/gsd/audit-fix.md +1 -1
  27. package/commands/gsd/audit-milestone.md +1 -1
  28. package/commands/gsd/audit-uat.md +1 -1
  29. package/commands/gsd/autonomous.md +2 -2
  30. package/commands/gsd/capture.md +6 -6
  31. package/commands/gsd/cleanup.md +1 -1
  32. package/commands/gsd/code-review.md +1 -1
  33. package/commands/gsd/complete-milestone.md +2 -2
  34. package/commands/gsd/config.md +3 -3
  35. package/commands/gsd/debug.md +1 -1
  36. package/commands/gsd/discuss-phase.md +5 -4
  37. package/commands/gsd/docs-update.md +1 -1
  38. package/commands/gsd/eval-review.md +2 -2
  39. package/commands/gsd/execute-phase.md +2 -2
  40. package/commands/gsd/explore.md +1 -1
  41. package/commands/gsd/extract-learnings.md +2 -2
  42. package/commands/gsd/fast.md +1 -1
  43. package/commands/gsd/forensics.md +1 -1
  44. package/commands/gsd/graphify.md +9 -9
  45. package/commands/gsd/health.md +1 -1
  46. package/commands/gsd/help.md +2 -2
  47. package/commands/gsd/import.md +5 -5
  48. package/commands/gsd/inbox.md +1 -1
  49. package/commands/gsd/ingest-docs.md +4 -4
  50. package/commands/gsd/manager.md +3 -3
  51. package/commands/gsd/map-codebase.md +1 -1
  52. package/commands/gsd/milestone-summary.md +1 -1
  53. package/commands/gsd/mvp-phase.md +4 -4
  54. package/commands/gsd/new-milestone.md +5 -5
  55. package/commands/gsd/new-project.md +5 -5
  56. package/commands/gsd/pause-work.md +2 -2
  57. package/commands/gsd/phase.md +4 -4
  58. package/commands/gsd/plan-phase.md +2 -2
  59. package/commands/gsd/plan-review-convergence.md +4 -4
  60. package/commands/gsd/pr-branch.md +1 -1
  61. package/commands/gsd/profile-user.md +2 -2
  62. package/commands/gsd/progress.md +4 -4
  63. package/commands/gsd/quick.md +1 -1
  64. package/commands/gsd/resume-work.md +1 -1
  65. package/commands/gsd/review.md +1 -1
  66. package/commands/gsd/secure-phase.md +1 -1
  67. package/commands/gsd/settings.md +1 -1
  68. package/commands/gsd/ship.md +2 -2
  69. package/commands/gsd/sketch.md +7 -7
  70. package/commands/gsd/spec-phase.md +2 -2
  71. package/commands/gsd/spike.md +3 -3
  72. package/commands/gsd/stats.md +1 -1
  73. package/commands/gsd/surface.md +4 -4
  74. package/commands/gsd/thread.md +1 -1
  75. package/commands/gsd/ui-phase.md +2 -2
  76. package/commands/gsd/ui-review.md +2 -2
  77. package/commands/gsd/ultraplan-phase.md +2 -2
  78. package/commands/gsd/undo.md +3 -3
  79. package/commands/gsd/update.md +3 -3
  80. package/commands/gsd/validate-phase.md +1 -1
  81. package/commands/gsd/verify-work.md +2 -2
  82. package/commands/gsd/workspace.md +4 -4
  83. package/{get-shit-done → gsd-core}/bin/check-latest-version.cjs +1 -1
  84. package/{get-shit-done → gsd-core}/bin/gsd-tools.cjs +13 -3
  85. package/gsd-core/bin/lib/active-workstream-store.cjs +291 -0
  86. package/gsd-core/bin/lib/adr-parser.cjs +399 -0
  87. package/gsd-core/bin/lib/agent-command-router.cjs +68 -0
  88. package/gsd-core/bin/lib/artifacts.cjs +51 -0
  89. package/gsd-core/bin/lib/audit.cjs +743 -0
  90. package/gsd-core/bin/lib/check-command-router.cjs +342 -0
  91. package/gsd-core/bin/lib/cjs-command-router-adapter.cjs +81 -0
  92. package/gsd-core/bin/lib/clock.cjs +95 -0
  93. package/gsd-core/bin/lib/clusters.cjs +128 -0
  94. package/gsd-core/bin/lib/code-review-flags.cjs +59 -0
  95. package/gsd-core/bin/lib/command-aliases.cjs +809 -0
  96. package/gsd-core/bin/lib/command-arg-projection.cjs +55 -0
  97. package/gsd-core/bin/lib/command-routing-hub.cjs +300 -0
  98. package/gsd-core/bin/lib/commands.cjs +1202 -0
  99. package/gsd-core/bin/lib/config-schema.cjs +29 -0
  100. package/{get-shit-done → gsd-core}/bin/lib/config-types.cjs +1 -1
  101. package/gsd-core/bin/lib/config.cjs +714 -0
  102. package/{get-shit-done → gsd-core}/bin/lib/configuration.cjs +76 -85
  103. package/gsd-core/bin/lib/context-utilization.cjs +48 -0
  104. package/gsd-core/bin/lib/core.cjs +2007 -0
  105. package/{get-shit-done → gsd-core}/bin/lib/decisions.cjs +9 -7
  106. package/gsd-core/bin/lib/docs.cjs +252 -0
  107. package/gsd-core/bin/lib/drift.cjs +364 -0
  108. package/gsd-core/bin/lib/fallow-runner.cjs +115 -0
  109. package/gsd-core/bin/lib/frontmatter.cjs +442 -0
  110. package/gsd-core/bin/lib/gap-checker.cjs +257 -0
  111. package/gsd-core/bin/lib/graphify.cjs +496 -0
  112. package/gsd-core/bin/lib/gsd2-import.cjs +456 -0
  113. package/gsd-core/bin/lib/init-command-router.cjs +62 -0
  114. package/gsd-core/bin/lib/init.cjs +1799 -0
  115. package/gsd-core/bin/lib/install-profiles.cjs +526 -0
  116. package/gsd-core/bin/lib/installer-migration-authoring.cjs +122 -0
  117. package/gsd-core/bin/lib/installer-migration-report.cjs +347 -0
  118. package/gsd-core/bin/lib/installer-migrations/000-first-time-baseline.cjs +218 -0
  119. package/gsd-core/bin/lib/installer-migrations/001-legacy-orphan-files.cjs +48 -0
  120. package/gsd-core/bin/lib/installer-migrations/002-codex-legacy-hooks-json.cjs +94 -0
  121. package/gsd-core/bin/lib/installer-migrations/003-rename-get-shit-done-to-gsd-core.cjs +108 -0
  122. package/gsd-core/bin/lib/installer-migrations.cjs +784 -0
  123. package/gsd-core/bin/lib/intel.cjs +607 -0
  124. package/gsd-core/bin/lib/learnings.cjs +270 -0
  125. package/gsd-core/bin/lib/legacy-cleanup.cjs +253 -0
  126. package/gsd-core/bin/lib/milestone.cjs +373 -0
  127. package/gsd-core/bin/lib/model-catalog.cjs +154 -0
  128. package/gsd-core/bin/lib/model-profiles.cjs +24 -0
  129. package/gsd-core/bin/lib/observability/event.cjs +51 -0
  130. package/gsd-core/bin/lib/observability/logger.cjs +146 -0
  131. package/{get-shit-done → gsd-core}/bin/lib/observability/redaction.cjs +19 -21
  132. package/{get-shit-done → gsd-core}/bin/lib/package-identity.cjs +5 -1
  133. package/gsd-core/bin/lib/phase-command-router.cjs +189 -0
  134. package/gsd-core/bin/lib/phase-lifecycle.cjs +74 -0
  135. package/gsd-core/bin/lib/phase.cjs +1307 -0
  136. package/gsd-core/bin/lib/phases-command-router.cjs +43 -0
  137. package/{get-shit-done → gsd-core}/bin/lib/plan-scan.cjs +18 -24
  138. package/gsd-core/bin/lib/planning-workspace.cjs +245 -0
  139. package/gsd-core/bin/lib/profile-output.cjs +1120 -0
  140. package/gsd-core/bin/lib/profile-pipeline.cjs +517 -0
  141. package/gsd-core/bin/lib/project-root.cjs +119 -0
  142. package/gsd-core/bin/lib/prompt-budget.cjs +305 -0
  143. package/gsd-core/bin/lib/review-reviewer-selection.cjs +121 -0
  144. package/gsd-core/bin/lib/roadmap-command-router.cjs +166 -0
  145. package/gsd-core/bin/lib/roadmap-upgrade.cjs +491 -0
  146. package/gsd-core/bin/lib/roadmap.cjs +600 -0
  147. package/gsd-core/bin/lib/runtime-artifact-layout.cjs +254 -0
  148. package/gsd-core/bin/lib/runtime-homes.cjs +169 -0
  149. package/gsd-core/bin/lib/runtime-name-policy.cjs +96 -0
  150. package/gsd-core/bin/lib/runtime-slash.cjs +119 -0
  151. package/{get-shit-done → gsd-core}/bin/lib/schema-detect.cjs +20 -26
  152. package/gsd-core/bin/lib/secrets.cjs +34 -0
  153. package/gsd-core/bin/lib/security.cjs +407 -0
  154. package/{get-shit-done → gsd-core}/bin/lib/semver-compare.cjs +1 -1
  155. package/gsd-core/bin/lib/shell-command-projection.cjs +524 -0
  156. package/gsd-core/bin/lib/state-command-router.cjs +160 -0
  157. package/{get-shit-done → gsd-core}/bin/lib/state-document.cjs +78 -78
  158. package/gsd-core/bin/lib/state.cjs +2010 -0
  159. package/gsd-core/bin/lib/surface.cjs +406 -0
  160. package/gsd-core/bin/lib/task-command-router.cjs +85 -0
  161. package/gsd-core/bin/lib/template.cjs +237 -0
  162. package/gsd-core/bin/lib/uat.cjs +297 -0
  163. package/gsd-core/bin/lib/ui-safety-gate.cjs +98 -0
  164. package/gsd-core/bin/lib/update-context.cjs +218 -0
  165. package/gsd-core/bin/lib/validate-command-router.cjs +91 -0
  166. package/gsd-core/bin/lib/validate.cjs +112 -0
  167. package/gsd-core/bin/lib/verify-command-router.cjs +44 -0
  168. package/gsd-core/bin/lib/verify.cjs +1451 -0
  169. package/{get-shit-done → gsd-core}/bin/lib/workstream-inventory-builder.cjs +19 -12
  170. package/gsd-core/bin/lib/workstream-inventory.cjs +147 -0
  171. package/{get-shit-done → gsd-core}/bin/lib/workstream-name-policy.cjs +28 -31
  172. package/gsd-core/bin/lib/workstream.cjs +380 -0
  173. package/gsd-core/bin/lib/worktree-safety.cjs +912 -0
  174. package/{get-shit-done → gsd-core}/bin/shared/config-schema.manifest.json +5 -0
  175. package/{get-shit-done → gsd-core}/references/artifact-types.md +1 -1
  176. package/{get-shit-done → gsd-core}/references/few-shot-examples/plan-checker.md +2 -2
  177. package/{get-shit-done → gsd-core}/references/few-shot-examples/verifier.md +12 -12
  178. package/{get-shit-done → gsd-core}/references/model-profile-resolution.md +1 -1
  179. package/{get-shit-done → gsd-core}/references/mvp-concepts.md +1 -1
  180. package/{get-shit-done → gsd-core}/references/planner-graphify-auto-update.md +2 -2
  181. package/{get-shit-done → gsd-core}/references/planner-mvp-mode.md +1 -1
  182. package/{get-shit-done → gsd-core}/references/verification-patterns.md +1 -1
  183. package/gsd-core/references/worktree-branch-check.md +38 -0
  184. package/{get-shit-done → gsd-core}/references/worktree-path-safety.md +4 -26
  185. package/{get-shit-done → gsd-core}/templates/README.md +2 -2
  186. package/{get-shit-done → gsd-core}/templates/codebase/structure.md +10 -10
  187. package/{get-shit-done → gsd-core}/templates/copilot-instructions.md +1 -1
  188. package/{get-shit-done → gsd-core}/templates/phase-prompt.md +10 -10
  189. package/gsd-core/workflows/_runtime-launcher.snippet.sh +1 -0
  190. package/{get-shit-done → gsd-core}/workflows/add-backlog.md +1 -1
  191. package/{get-shit-done → gsd-core}/workflows/add-phase.md +1 -1
  192. package/{get-shit-done → gsd-core}/workflows/add-tests.md +1 -1
  193. package/{get-shit-done → gsd-core}/workflows/add-todo.md +1 -1
  194. package/{get-shit-done → gsd-core}/workflows/ai-integration-phase.md +4 -4
  195. package/{get-shit-done → gsd-core}/workflows/audit-fix.md +1 -1
  196. package/{get-shit-done → gsd-core}/workflows/audit-milestone.md +1 -1
  197. package/{get-shit-done → gsd-core}/workflows/audit-uat.md +1 -1
  198. package/{get-shit-done → gsd-core}/workflows/autonomous.md +4 -4
  199. package/{get-shit-done → gsd-core}/workflows/check-todos.md +1 -1
  200. package/{get-shit-done → gsd-core}/workflows/cleanup.md +1 -1
  201. package/{get-shit-done → gsd-core}/workflows/code-review-fix.md +1 -1
  202. package/{get-shit-done → gsd-core}/workflows/code-review.md +4 -4
  203. package/{get-shit-done → gsd-core}/workflows/complete-milestone.md +2 -2
  204. package/{get-shit-done → gsd-core}/workflows/debug.md +1 -1
  205. package/{get-shit-done → gsd-core}/workflows/diagnose-issues.md +4 -2
  206. package/{get-shit-done → gsd-core}/workflows/discovery-phase.md +5 -5
  207. package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/advisor.md +4 -4
  208. package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/auto.md +1 -1
  209. package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/chain.md +1 -1
  210. package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/power.md +1 -1
  211. package/{get-shit-done → gsd-core}/workflows/discuss-phase-assumptions.md +2 -2
  212. package/{get-shit-done → gsd-core}/workflows/discuss-phase.md +6 -6
  213. package/{get-shit-done → gsd-core}/workflows/do.md +1 -1
  214. package/{get-shit-done → gsd-core}/workflows/docs-update.md +1 -1
  215. package/{get-shit-done → gsd-core}/workflows/edit-phase.md +1 -1
  216. package/{get-shit-done → gsd-core}/workflows/eval-review.md +2 -2
  217. package/{get-shit-done → gsd-core}/workflows/execute-phase/steps/codebase-drift-gate.md +15 -2
  218. package/{get-shit-done → gsd-core}/workflows/execute-phase/steps/post-merge-gate.md +1 -1
  219. package/{get-shit-done → gsd-core}/workflows/execute-phase.md +68 -46
  220. package/{get-shit-done → gsd-core}/workflows/execute-plan.md +8 -8
  221. package/{get-shit-done → gsd-core}/workflows/explore.md +3 -3
  222. package/{get-shit-done → gsd-core}/workflows/extract-learnings.md +1 -1
  223. package/{get-shit-done → gsd-core}/workflows/forensics.md +1 -1
  224. package/{get-shit-done → gsd-core}/workflows/graduation.md +1 -1
  225. package/{get-shit-done → gsd-core}/workflows/health.md +1 -1
  226. package/{get-shit-done → gsd-core}/workflows/help/modes/full.md +1 -1
  227. package/{get-shit-done → gsd-core}/workflows/import.md +1 -1
  228. package/{get-shit-done → gsd-core}/workflows/ingest-docs.md +3 -3
  229. package/{get-shit-done → gsd-core}/workflows/insert-phase.md +1 -1
  230. package/{get-shit-done → gsd-core}/workflows/list-workspaces.md +1 -1
  231. package/{get-shit-done → gsd-core}/workflows/manager.md +1 -1
  232. package/{get-shit-done → gsd-core}/workflows/map-codebase.md +1 -1
  233. package/{get-shit-done → gsd-core}/workflows/milestone-summary.md +1 -1
  234. package/{get-shit-done → gsd-core}/workflows/mvp-phase.md +7 -7
  235. package/{get-shit-done → gsd-core}/workflows/new-milestone.md +3 -3
  236. package/{get-shit-done → gsd-core}/workflows/new-project.md +6 -6
  237. package/{get-shit-done → gsd-core}/workflows/new-workspace.md +1 -1
  238. package/{get-shit-done → gsd-core}/workflows/next.md +1 -1
  239. package/{get-shit-done → gsd-core}/workflows/pause-work.md +1 -1
  240. package/{get-shit-done → gsd-core}/workflows/plan-milestone-gaps.md +1 -1
  241. package/{get-shit-done → gsd-core}/workflows/plan-phase.md +15 -15
  242. package/{get-shit-done → gsd-core}/workflows/plan-review-convergence.md +7 -7
  243. package/{get-shit-done → gsd-core}/workflows/plant-seed.md +1 -1
  244. package/{get-shit-done → gsd-core}/workflows/profile-user.md +11 -11
  245. package/{get-shit-done → gsd-core}/workflows/progress.md +1 -1
  246. package/{get-shit-done → gsd-core}/workflows/quick.md +2 -26
  247. package/{get-shit-done → gsd-core}/workflows/reapply-patches.md +2 -2
  248. package/{get-shit-done → gsd-core}/workflows/remove-phase.md +1 -1
  249. package/{get-shit-done → gsd-core}/workflows/remove-workspace.md +1 -1
  250. package/{get-shit-done → gsd-core}/workflows/resume-project.md +2 -2
  251. package/{get-shit-done → gsd-core}/workflows/review.md +1 -1
  252. package/{get-shit-done → gsd-core}/workflows/scan.md +1 -1
  253. package/{get-shit-done → gsd-core}/workflows/secure-phase.md +3 -3
  254. package/{get-shit-done → gsd-core}/workflows/settings-advanced.md +1 -1
  255. package/{get-shit-done → gsd-core}/workflows/settings-integrations.md +2 -2
  256. package/{get-shit-done → gsd-core}/workflows/settings.md +1 -1
  257. package/{get-shit-done → gsd-core}/workflows/ship.md +56 -4
  258. package/{get-shit-done → gsd-core}/workflows/sketch-wrap-up.md +1 -1
  259. package/{get-shit-done → gsd-core}/workflows/sketch.md +5 -5
  260. package/{get-shit-done → gsd-core}/workflows/spec-phase.md +2 -2
  261. package/{get-shit-done → gsd-core}/workflows/spike-wrap-up.md +1 -1
  262. package/{get-shit-done → gsd-core}/workflows/spike.md +1 -1
  263. package/{get-shit-done → gsd-core}/workflows/stats.md +1 -1
  264. package/{get-shit-done → gsd-core}/workflows/sync-skills.md +3 -3
  265. package/{get-shit-done → gsd-core}/workflows/thread.md +1 -1
  266. package/{get-shit-done → gsd-core}/workflows/transition.md +2 -2
  267. package/{get-shit-done → gsd-core}/workflows/ui-phase.md +3 -3
  268. package/{get-shit-done → gsd-core}/workflows/ui-review.md +2 -2
  269. package/{get-shit-done → gsd-core}/workflows/ultraplan-phase.md +1 -1
  270. package/{get-shit-done → gsd-core}/workflows/undo.md +2 -2
  271. package/{get-shit-done → gsd-core}/workflows/update.md +41 -16
  272. package/{get-shit-done → gsd-core}/workflows/validate-phase.md +3 -3
  273. package/{get-shit-done → gsd-core}/workflows/verify-phase.md +4 -4
  274. package/{get-shit-done → gsd-core}/workflows/verify-work.md +5 -5
  275. package/hooks/dist/gsd-check-update-worker.js +16 -3
  276. package/hooks/dist/gsd-check-update.js +7 -5
  277. package/hooks/dist/gsd-context-monitor.js +2 -2
  278. package/hooks/dist/gsd-statusline.js +39 -21
  279. package/hooks/dist/gsd-update-banner.js +6 -2
  280. package/hooks/dist/managed-hooks-registry.cjs +35 -0
  281. package/hooks/gsd-check-update-worker.js +16 -3
  282. package/hooks/gsd-check-update.js +7 -5
  283. package/hooks/gsd-context-monitor.js +2 -2
  284. package/hooks/gsd-statusline.js +39 -21
  285. package/hooks/gsd-update-banner.js +6 -2
  286. package/package.json +9 -6
  287. package/scripts/affected-tests-lib.cjs +1 -1
  288. package/scripts/base64-scan.sh +12 -0
  289. package/scripts/build-hooks.js +4 -1
  290. package/scripts/changeset/cli.cjs +2 -2
  291. package/scripts/changeset/github-release-notes.cjs +1 -1
  292. package/scripts/changeset/lint.cjs +1 -1
  293. package/scripts/check-alias-drift.cjs +8 -8
  294. package/scripts/check-env.cjs +5 -1
  295. package/scripts/ci-test-scope.cjs +25 -10
  296. package/scripts/command-contract-helpers.cjs +1 -1
  297. package/scripts/fix-slash-commands.cjs +5 -5
  298. package/scripts/gen-inventory-manifest.cjs +3 -3
  299. package/scripts/generate-package-identity.cjs +28 -7
  300. package/scripts/lib/allowlist-ratchet.cjs +136 -0
  301. package/scripts/lint-command-contract.cjs +1 -1
  302. package/scripts/lint-legacy-dir-name.cjs +156 -0
  303. package/scripts/lint-package-identity-drift.cjs +8 -8
  304. package/scripts/lint-pr-check-project-dir.cjs +0 -1
  305. package/scripts/lint-shell-command-projection-drift.cjs +1 -1
  306. package/scripts/lint-skill-deps.cjs +1 -1
  307. package/scripts/lint-test-file-count.allowlist.json +129 -32
  308. package/scripts/lint-test-file-count.cjs +85 -30
  309. package/scripts/mutation-matrix.cjs +219 -0
  310. package/scripts/prompt-injection-scan.sh +5 -1
  311. package/scripts/release-notes/format-github-release-notes.cjs +256 -0
  312. package/scripts/release-tarball-smoke.cjs +9 -9
  313. package/scripts/run-tests.cjs +11 -3
  314. package/scripts/strip-prose-atrefs.cjs +2 -2
  315. package/scripts/sync-runtime-launcher.cjs +2 -2
  316. package/scripts/verify-npm-publish.cjs +252 -0
  317. package/get-shit-done/bin/lib/active-workstream-store.cjs +0 -302
  318. package/get-shit-done/bin/lib/adr-parser.cjs +0 -394
  319. package/get-shit-done/bin/lib/agent-command-router.cjs +0 -65
  320. package/get-shit-done/bin/lib/artifacts.cjs +0 -53
  321. package/get-shit-done/bin/lib/audit.cjs +0 -755
  322. package/get-shit-done/bin/lib/check-command-router.cjs +0 -333
  323. package/get-shit-done/bin/lib/cjs-command-router-adapter.cjs +0 -118
  324. package/get-shit-done/bin/lib/clock.cjs +0 -96
  325. package/get-shit-done/bin/lib/clusters.cjs +0 -135
  326. package/get-shit-done/bin/lib/code-review-flags.cjs +0 -74
  327. package/get-shit-done/bin/lib/command-aliases.cjs +0 -831
  328. package/get-shit-done/bin/lib/command-arg-projection.cjs +0 -62
  329. package/get-shit-done/bin/lib/command-routing-hub.cjs +0 -388
  330. package/get-shit-done/bin/lib/commands.cjs +0 -1292
  331. package/get-shit-done/bin/lib/config-schema.cjs +0 -31
  332. package/get-shit-done/bin/lib/config.cjs +0 -728
  333. package/get-shit-done/bin/lib/context-utilization.cjs +0 -47
  334. package/get-shit-done/bin/lib/core.cjs +0 -2513
  335. package/get-shit-done/bin/lib/docs.cjs +0 -270
  336. package/get-shit-done/bin/lib/drift.cjs +0 -388
  337. package/get-shit-done/bin/lib/fallow-runner.cjs +0 -109
  338. package/get-shit-done/bin/lib/frontmatter.cjs +0 -389
  339. package/get-shit-done/bin/lib/gap-checker.cjs +0 -254
  340. package/get-shit-done/bin/lib/graphify.cjs +0 -592
  341. package/get-shit-done/bin/lib/gsd2-import.cjs +0 -514
  342. package/get-shit-done/bin/lib/init-command-router.cjs +0 -58
  343. package/get-shit-done/bin/lib/init.cjs +0 -2112
  344. package/get-shit-done/bin/lib/install-profiles.cjs +0 -603
  345. package/get-shit-done/bin/lib/installer-migration-authoring.cjs +0 -117
  346. package/get-shit-done/bin/lib/installer-migration-report.cjs +0 -355
  347. package/get-shit-done/bin/lib/installer-migrations/000-first-time-baseline.cjs +0 -220
  348. package/get-shit-done/bin/lib/installer-migrations/001-legacy-orphan-files.cjs +0 -41
  349. package/get-shit-done/bin/lib/installer-migrations/002-codex-legacy-hooks-json.cjs +0 -80
  350. package/get-shit-done/bin/lib/installer-migrations.cjs +0 -778
  351. package/get-shit-done/bin/lib/intel.cjs +0 -708
  352. package/get-shit-done/bin/lib/learnings.cjs +0 -421
  353. package/get-shit-done/bin/lib/milestone.cjs +0 -372
  354. package/get-shit-done/bin/lib/model-catalog.cjs +0 -229
  355. package/get-shit-done/bin/lib/model-profiles.cjs +0 -31
  356. package/get-shit-done/bin/lib/observability/event.cjs +0 -82
  357. package/get-shit-done/bin/lib/observability/logger.cjs +0 -174
  358. package/get-shit-done/bin/lib/phase-command-router.cjs +0 -191
  359. package/get-shit-done/bin/lib/phase-lifecycle.cjs +0 -79
  360. package/get-shit-done/bin/lib/phase.cjs +0 -1607
  361. package/get-shit-done/bin/lib/phases-command-router.cjs +0 -39
  362. package/get-shit-done/bin/lib/planning-workspace.cjs +0 -238
  363. package/get-shit-done/bin/lib/profile-output.cjs +0 -1141
  364. package/get-shit-done/bin/lib/profile-pipeline.cjs +0 -539
  365. package/get-shit-done/bin/lib/project-root.cjs +0 -112
  366. package/get-shit-done/bin/lib/prompt-budget.cjs +0 -399
  367. package/get-shit-done/bin/lib/review-reviewer-selection.cjs +0 -126
  368. package/get-shit-done/bin/lib/roadmap-command-router.cjs +0 -162
  369. package/get-shit-done/bin/lib/roadmap-upgrade.cjs +0 -569
  370. package/get-shit-done/bin/lib/roadmap.cjs +0 -651
  371. package/get-shit-done/bin/lib/runtime-artifact-layout.cjs +0 -301
  372. package/get-shit-done/bin/lib/runtime-homes.cjs +0 -222
  373. package/get-shit-done/bin/lib/runtime-name-policy.cjs +0 -83
  374. package/get-shit-done/bin/lib/runtime-slash.cjs +0 -112
  375. package/get-shit-done/bin/lib/secrets.cjs +0 -32
  376. package/get-shit-done/bin/lib/security.cjs +0 -600
  377. package/get-shit-done/bin/lib/shell-command-projection.cjs +0 -535
  378. package/get-shit-done/bin/lib/state-command-router.cjs +0 -252
  379. package/get-shit-done/bin/lib/state.cjs +0 -2073
  380. package/get-shit-done/bin/lib/surface.cjs +0 -470
  381. package/get-shit-done/bin/lib/task-command-router.cjs +0 -81
  382. package/get-shit-done/bin/lib/template.cjs +0 -228
  383. package/get-shit-done/bin/lib/uat.cjs +0 -289
  384. package/get-shit-done/bin/lib/ui-safety-gate.cjs +0 -111
  385. package/get-shit-done/bin/lib/update-context.cjs +0 -209
  386. package/get-shit-done/bin/lib/validate-command-router.cjs +0 -83
  387. package/get-shit-done/bin/lib/validate.cjs +0 -118
  388. package/get-shit-done/bin/lib/verify-command-router.cjs +0 -40
  389. package/get-shit-done/bin/lib/verify.cjs +0 -1614
  390. package/get-shit-done/bin/lib/workstream-inventory.cjs +0 -146
  391. package/get-shit-done/bin/lib/workstream.cjs +0 -389
  392. package/get-shit-done/bin/lib/worktree-safety.cjs +0 -985
  393. package/get-shit-done/workflows/_runtime-launcher.snippet.sh +0 -1
  394. package/scripts/lint-no-source-grep-extras.cjs +0 -81
  395. package/scripts/lint-no-source-grep.cjs +0 -174
  396. /package/{get-shit-done → gsd-core}/bin/shared/config-defaults.manifest.json +0 -0
  397. /package/{get-shit-done → gsd-core}/bin/shared/model-catalog.json +0 -0
  398. /package/{get-shit-done → gsd-core}/bin/shared/runtime-aliases.manifest.json +0 -0
  399. /package/{get-shit-done → gsd-core}/bin/verify-reapply-patches.cjs +0 -0
  400. /package/{get-shit-done → gsd-core}/contexts/dev.md +0 -0
  401. /package/{get-shit-done → gsd-core}/contexts/research.md +0 -0
  402. /package/{get-shit-done → gsd-core}/contexts/review.md +0 -0
  403. /package/{get-shit-done → gsd-core}/references/agent-contracts.md +0 -0
  404. /package/{get-shit-done → gsd-core}/references/ai-evals.md +0 -0
  405. /package/{get-shit-done → gsd-core}/references/ai-frameworks.md +0 -0
  406. /package/{get-shit-done → gsd-core}/references/autonomous-smart-discuss.md +0 -0
  407. /package/{get-shit-done → gsd-core}/references/checkpoints.md +0 -0
  408. /package/{get-shit-done → gsd-core}/references/common-bug-patterns.md +0 -0
  409. /package/{get-shit-done → gsd-core}/references/context-budget.md +0 -0
  410. /package/{get-shit-done → gsd-core}/references/continuation-format.md +0 -0
  411. /package/{get-shit-done → gsd-core}/references/debugger-philosophy.md +0 -0
  412. /package/{get-shit-done → gsd-core}/references/decimal-phase-calculation.md +0 -0
  413. /package/{get-shit-done → gsd-core}/references/doc-conflict-engine.md +0 -0
  414. /package/{get-shit-done → gsd-core}/references/domain-probes.md +0 -0
  415. /package/{get-shit-done → gsd-core}/references/execute-mvp-tdd.md +0 -0
  416. /package/{get-shit-done → gsd-core}/references/executor-examples.md +0 -0
  417. /package/{get-shit-done → gsd-core}/references/gate-prompts.md +0 -0
  418. /package/{get-shit-done → gsd-core}/references/gates.md +0 -0
  419. /package/{get-shit-done → gsd-core}/references/git-integration.md +0 -0
  420. /package/{get-shit-done → gsd-core}/references/git-planning-commit.md +0 -0
  421. /package/{get-shit-done → gsd-core}/references/ios-scaffold.md +0 -0
  422. /package/{get-shit-done → gsd-core}/references/mandatory-initial-read.md +0 -0
  423. /package/{get-shit-done → gsd-core}/references/model-profiles.md +0 -0
  424. /package/{get-shit-done → gsd-core}/references/phase-argument-parsing.md +0 -0
  425. /package/{get-shit-done → gsd-core}/references/planner-antipatterns.md +0 -0
  426. /package/{get-shit-done → gsd-core}/references/planner-chunked.md +0 -0
  427. /package/{get-shit-done → gsd-core}/references/planner-gap-closure.md +0 -0
  428. /package/{get-shit-done → gsd-core}/references/planner-human-verify-mode.md +0 -0
  429. /package/{get-shit-done → gsd-core}/references/planner-interface-context.md +0 -0
  430. /package/{get-shit-done → gsd-core}/references/planner-reviews.md +0 -0
  431. /package/{get-shit-done → gsd-core}/references/planner-revision.md +0 -0
  432. /package/{get-shit-done → gsd-core}/references/planner-source-audit.md +0 -0
  433. /package/{get-shit-done → gsd-core}/references/planning-config.md +0 -0
  434. /package/{get-shit-done → gsd-core}/references/project-skills-discovery.md +0 -0
  435. /package/{get-shit-done → gsd-core}/references/questioning.md +0 -0
  436. /package/{get-shit-done → gsd-core}/references/revision-loop.md +0 -0
  437. /package/{get-shit-done → gsd-core}/references/scout-codebase.md +0 -0
  438. /package/{get-shit-done → gsd-core}/references/skeleton-template.md +0 -0
  439. /package/{get-shit-done → gsd-core}/references/sketch-interactivity.md +0 -0
  440. /package/{get-shit-done → gsd-core}/references/sketch-theme-system.md +0 -0
  441. /package/{get-shit-done → gsd-core}/references/sketch-tooling.md +0 -0
  442. /package/{get-shit-done → gsd-core}/references/sketch-variant-patterns.md +0 -0
  443. /package/{get-shit-done → gsd-core}/references/spidr-splitting.md +0 -0
  444. /package/{get-shit-done → gsd-core}/references/tdd.md +0 -0
  445. /package/{get-shit-done → gsd-core}/references/thinking-models-debug.md +0 -0
  446. /package/{get-shit-done → gsd-core}/references/thinking-models-execution.md +0 -0
  447. /package/{get-shit-done → gsd-core}/references/thinking-models-planning.md +0 -0
  448. /package/{get-shit-done → gsd-core}/references/thinking-models-research.md +0 -0
  449. /package/{get-shit-done → gsd-core}/references/thinking-models-verification.md +0 -0
  450. /package/{get-shit-done → gsd-core}/references/thinking-partner.md +0 -0
  451. /package/{get-shit-done → gsd-core}/references/ui-brand.md +0 -0
  452. /package/{get-shit-done → gsd-core}/references/universal-anti-patterns.md +0 -0
  453. /package/{get-shit-done → gsd-core}/references/user-profiling.md +0 -0
  454. /package/{get-shit-done → gsd-core}/references/user-story-template.md +0 -0
  455. /package/{get-shit-done → gsd-core}/references/verification-overrides.md +0 -0
  456. /package/{get-shit-done → gsd-core}/references/verify-mvp-mode.md +0 -0
  457. /package/{get-shit-done → gsd-core}/references/workstream-flag.md +0 -0
  458. /package/{get-shit-done → gsd-core}/templates/AI-SPEC.md +0 -0
  459. /package/{get-shit-done → gsd-core}/templates/DEBUG.md +0 -0
  460. /package/{get-shit-done → gsd-core}/templates/SECURITY.md +0 -0
  461. /package/{get-shit-done → gsd-core}/templates/UAT.md +0 -0
  462. /package/{get-shit-done → gsd-core}/templates/UI-SPEC.md +0 -0
  463. /package/{get-shit-done → gsd-core}/templates/VALIDATION.md +0 -0
  464. /package/{get-shit-done → gsd-core}/templates/claude-md.md +0 -0
  465. /package/{get-shit-done → gsd-core}/templates/codebase/architecture.md +0 -0
  466. /package/{get-shit-done → gsd-core}/templates/codebase/concerns.md +0 -0
  467. /package/{get-shit-done → gsd-core}/templates/codebase/conventions.md +0 -0
  468. /package/{get-shit-done → gsd-core}/templates/codebase/integrations.md +0 -0
  469. /package/{get-shit-done → gsd-core}/templates/codebase/stack.md +0 -0
  470. /package/{get-shit-done → gsd-core}/templates/codebase/testing.md +0 -0
  471. /package/{get-shit-done → gsd-core}/templates/config.json +0 -0
  472. /package/{get-shit-done → gsd-core}/templates/context.md +0 -0
  473. /package/{get-shit-done → gsd-core}/templates/continue-here.md +0 -0
  474. /package/{get-shit-done → gsd-core}/templates/debug-subagent-prompt.md +0 -0
  475. /package/{get-shit-done → gsd-core}/templates/dev-preferences.md +0 -0
  476. /package/{get-shit-done → gsd-core}/templates/discovery.md +0 -0
  477. /package/{get-shit-done → gsd-core}/templates/discussion-log.md +0 -0
  478. /package/{get-shit-done → gsd-core}/templates/milestone-archive.md +0 -0
  479. /package/{get-shit-done → gsd-core}/templates/milestone.md +0 -0
  480. /package/{get-shit-done → gsd-core}/templates/planner-subagent-prompt.md +0 -0
  481. /package/{get-shit-done → gsd-core}/templates/project.md +0 -0
  482. /package/{get-shit-done → gsd-core}/templates/requirements.md +0 -0
  483. /package/{get-shit-done → gsd-core}/templates/research-project/ARCHITECTURE.md +0 -0
  484. /package/{get-shit-done → gsd-core}/templates/research-project/FEATURES.md +0 -0
  485. /package/{get-shit-done → gsd-core}/templates/research-project/PITFALLS.md +0 -0
  486. /package/{get-shit-done → gsd-core}/templates/research-project/STACK.md +0 -0
  487. /package/{get-shit-done → gsd-core}/templates/research-project/SUMMARY.md +0 -0
  488. /package/{get-shit-done → gsd-core}/templates/research.md +0 -0
  489. /package/{get-shit-done → gsd-core}/templates/retrospective.md +0 -0
  490. /package/{get-shit-done → gsd-core}/templates/roadmap.md +0 -0
  491. /package/{get-shit-done → gsd-core}/templates/spec.md +0 -0
  492. /package/{get-shit-done → gsd-core}/templates/state.md +0 -0
  493. /package/{get-shit-done → gsd-core}/templates/summary-complex.md +0 -0
  494. /package/{get-shit-done → gsd-core}/templates/summary-minimal.md +0 -0
  495. /package/{get-shit-done → gsd-core}/templates/summary-standard.md +0 -0
  496. /package/{get-shit-done → gsd-core}/templates/summary.md +0 -0
  497. /package/{get-shit-done → gsd-core}/templates/user-profile.md +0 -0
  498. /package/{get-shit-done → gsd-core}/templates/user-setup.md +0 -0
  499. /package/{get-shit-done → gsd-core}/templates/verification-report.md +0 -0
  500. /package/{get-shit-done → gsd-core}/workflows/analyze-dependencies.md +0 -0
  501. /package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/all.md +0 -0
  502. /package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/analyze.md +0 -0
  503. /package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/batch.md +0 -0
  504. /package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/default.md +0 -0
  505. /package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/text.md +0 -0
  506. /package/{get-shit-done → gsd-core}/workflows/discuss-phase/templates/checkpoint.json +0 -0
  507. /package/{get-shit-done → gsd-core}/workflows/discuss-phase/templates/context.md +0 -0
  508. /package/{get-shit-done → gsd-core}/workflows/discuss-phase/templates/discussion-log.md +0 -0
  509. /package/{get-shit-done → gsd-core}/workflows/discuss-phase-power.md +0 -0
  510. /package/{get-shit-done → gsd-core}/workflows/execute-phase/steps/per-plan-worktree-gate.md +0 -0
  511. /package/{get-shit-done → gsd-core}/workflows/fast.md +0 -0
  512. /package/{get-shit-done → gsd-core}/workflows/help/modes/brief.md +0 -0
  513. /package/{get-shit-done → gsd-core}/workflows/help/modes/default.md +0 -0
  514. /package/{get-shit-done → gsd-core}/workflows/help/modes/topic.md +0 -0
  515. /package/{get-shit-done → gsd-core}/workflows/help.md +0 -0
  516. /package/{get-shit-done → gsd-core}/workflows/inbox.md +0 -0
  517. /package/{get-shit-done → gsd-core}/workflows/list-phase-assumptions.md +0 -0
  518. /package/{get-shit-done → gsd-core}/workflows/node-repair.md +0 -0
  519. /package/{get-shit-done → gsd-core}/workflows/note.md +0 -0
  520. /package/{get-shit-done → gsd-core}/workflows/pr-branch.md +0 -0
  521. /package/{get-shit-done → gsd-core}/workflows/session-report.md +0 -0
@@ -1,302 +0,0 @@
1
- /**
2
- * Active Workstream Pointer Store Module
3
- *
4
- * Owns active workstream source precedence, session identity, and pointer IO:
5
- * CLI --ws > GSD_WORKSTREAM env > stored active workstream pointer.
6
- */
7
-
8
- const fs = require('fs');
9
- const os = require('os');
10
- const path = require('path');
11
- const crypto = require('crypto');
12
- const { probeTty, platformWriteSync, platformReadSync, platformEnsureDir } = require('./shell-command-projection.cjs');
13
- const { isValidActiveWorkstreamName } = require('./workstream-name-policy.cjs');
14
-
15
- const WORKSTREAM_SESSION_ENV_KEYS = [
16
- 'GSD_SESSION_KEY',
17
- 'CODEX_THREAD_ID',
18
- 'CLAUDE_SESSION_ID',
19
- 'CLAUDE_CODE_SSE_PORT',
20
- 'OPENCODE_SESSION_ID',
21
- 'GEMINI_SESSION_ID',
22
- 'CURSOR_SESSION_ID',
23
- 'WINDSURF_SESSION_ID',
24
- 'TERM_SESSION_ID',
25
- 'WT_SESSION',
26
- 'TMUX_PANE',
27
- 'ZELLIJ_SESSION_NAME',
28
- ];
29
-
30
- let cachedControllingTtyToken = null;
31
- let didProbeControllingTtyToken = false;
32
-
33
- function planningRoot(cwd) {
34
- return path.join(cwd, '.planning');
35
- }
36
-
37
- function validateWorkstreamName(name) {
38
- return isValidActiveWorkstreamName(name);
39
- }
40
-
41
- function sanitizeWorkstreamSessionToken(value) {
42
- if (value === null || value === undefined) return null;
43
- const token = String(value).trim().replace(/[^a-zA-Z0-9._-]+/g, '_').replace(/^_+|_+$/g, '');
44
- return token ? token.slice(0, 160) : null;
45
- }
46
-
47
- function probeControllingTtyToken() {
48
- if (didProbeControllingTtyToken) return cachedControllingTtyToken;
49
- didProbeControllingTtyToken = true;
50
-
51
- if (!(process.stdin && process.stdin.isTTY)) {
52
- return cachedControllingTtyToken;
53
- }
54
-
55
- const ttyPath = probeTty();
56
- if (ttyPath) {
57
- const token = sanitizeWorkstreamSessionToken(ttyPath.replace(/^\/dev\//, ''));
58
- if (token) cachedControllingTtyToken = `tty-${token}`;
59
- }
60
-
61
- return cachedControllingTtyToken;
62
- }
63
-
64
- function getControllingTtyToken() {
65
- for (const envKey of ['TTY', 'SSH_TTY']) {
66
- const token = sanitizeWorkstreamSessionToken(process.env[envKey]);
67
- if (token) return `tty-${token.replace(/^dev_/, '')}`;
68
- }
69
-
70
- return probeControllingTtyToken();
71
- }
72
-
73
- function getWorkstreamSessionKey() {
74
- for (const envKey of WORKSTREAM_SESSION_ENV_KEYS) {
75
- const raw = process.env[envKey];
76
- const token = sanitizeWorkstreamSessionToken(raw);
77
- if (token) return `${envKey.toLowerCase().replace(/[^a-z0-9]+/g, '-')}-${token}`;
78
- }
79
-
80
- return getControllingTtyToken();
81
- }
82
-
83
- function getSessionScopedWorkstreamFile(cwd, fixedSessionKey) {
84
- const sessionKey = fixedSessionKey || getWorkstreamSessionKey();
85
- if (!sessionKey) return null;
86
-
87
- let planningAbs;
88
- try {
89
- planningAbs = fs.realpathSync.native(planningRoot(cwd));
90
- } catch {
91
- planningAbs = path.resolve(planningRoot(cwd));
92
- }
93
- const projectId = crypto
94
- .createHash('sha1')
95
- .update(planningAbs)
96
- .digest('hex')
97
- .slice(0, 16);
98
-
99
- const dirPath = path.join(os.tmpdir(), 'gsd-workstream-sessions', projectId);
100
- return {
101
- sessionKey,
102
- dirPath,
103
- filePath: path.join(dirPath, sessionKey),
104
- };
105
- }
106
-
107
- function createSharedPointerAdapter(cwd) {
108
- const filePath = path.join(planningRoot(cwd), 'active-workstream');
109
- return {
110
- read() {
111
- const raw = platformReadSync(filePath);
112
- return raw ? raw.trim() || null : null;
113
- },
114
- write(name) {
115
- platformWriteSync(filePath, name + '\n');
116
- },
117
- clear() {
118
- try { fs.unlinkSync(filePath); } catch {}
119
- },
120
- };
121
- }
122
-
123
- function createSessionScopedPointerAdapter(cwd, fixedSessionKey) {
124
- const scoped = getSessionScopedWorkstreamFile(cwd, fixedSessionKey);
125
- if (!scoped) return null;
126
-
127
- return {
128
- read() {
129
- const raw = platformReadSync(scoped.filePath);
130
- return raw ? raw.trim() || null : null;
131
- },
132
- write(name) {
133
- platformEnsureDir(scoped.dirPath);
134
- platformWriteSync(scoped.filePath, name + '\n');
135
- },
136
- clear() {
137
- try { fs.unlinkSync(scoped.filePath); } catch {}
138
- try {
139
- const remaining = fs.readdirSync(scoped.dirPath);
140
- if (remaining.length === 0) {
141
- fs.rmdirSync(scoped.dirPath);
142
- }
143
- } catch {}
144
- },
145
- };
146
- }
147
-
148
- function createMemoryPointerAdapter(initialName = null) {
149
- let value = initialName;
150
- return {
151
- read() {
152
- return value;
153
- },
154
- write(name) {
155
- value = name;
156
- },
157
- clear() {
158
- value = null;
159
- },
160
- };
161
- }
162
-
163
- function pickActiveWorkstreamAdapter(cwd, opts = {}) {
164
- if (opts.activeWorkstreamAdapter) {
165
- return opts.activeWorkstreamAdapter;
166
- }
167
-
168
- const sessionKey = getWorkstreamSessionKey();
169
- if (sessionKey) {
170
- if (opts.activeWorkstreamAdapters && opts.activeWorkstreamAdapters.session) {
171
- return opts.activeWorkstreamAdapters.session;
172
- }
173
- return createSessionScopedPointerAdapter(cwd, sessionKey);
174
- }
175
-
176
- if (opts.activeWorkstreamAdapters && opts.activeWorkstreamAdapters.shared) {
177
- return opts.activeWorkstreamAdapters.shared;
178
- }
179
- return createSharedPointerAdapter(cwd);
180
- }
181
-
182
- function getActiveWorkstream(cwd, opts = {}) {
183
- const adapter = pickActiveWorkstreamAdapter(cwd, opts);
184
- if (!adapter) return null;
185
-
186
- const name = adapter.read();
187
- if (!name || !validateWorkstreamName(name)) {
188
- adapter.clear();
189
- return null;
190
- }
191
-
192
- const wsDir = path.join(planningRoot(cwd), 'workstreams', name);
193
- if (!fs.existsSync(wsDir)) {
194
- adapter.clear();
195
- return null;
196
- }
197
-
198
- return name;
199
- }
200
-
201
- function setActiveWorkstream(cwd, name, opts = {}) {
202
- const adapter = pickActiveWorkstreamAdapter(cwd, opts);
203
- if (!adapter) return;
204
-
205
- if (!name) {
206
- adapter.clear();
207
- return;
208
- }
209
- if (!validateWorkstreamName(name)) {
210
- throw new Error('Invalid workstream name: must be alphanumeric, hyphens, underscores, or dots');
211
- }
212
-
213
- const wsDir = path.join(planningRoot(cwd), 'workstreams', name);
214
- platformEnsureDir(wsDir);
215
- adapter.write(name);
216
- }
217
-
218
- function clearActiveWorkstream(cwd, opts = {}) {
219
- const adapter = pickActiveWorkstreamAdapter(cwd, opts);
220
- if (!adapter) return;
221
- adapter.clear();
222
- }
223
-
224
- function parseCliWorkstream(args) {
225
- const wsEqArg = args.find(arg => arg.startsWith('--ws='));
226
- const wsIdx = args.indexOf('--ws');
227
-
228
- if (wsEqArg) {
229
- const value = wsEqArg.slice('--ws='.length).trim();
230
- if (!value) throw new Error('Missing value for --ws');
231
- return {
232
- value,
233
- source: 'cli',
234
- args: args.filter(arg => arg !== wsEqArg),
235
- };
236
- }
237
-
238
- if (wsIdx !== -1) {
239
- const value = args[wsIdx + 1];
240
- if (!value || value.startsWith('--')) throw new Error('Missing value for --ws');
241
- return {
242
- value,
243
- source: 'cli',
244
- args: args.filter((_, idx) => idx !== wsIdx && idx !== wsIdx + 1),
245
- };
246
- }
247
-
248
- return {
249
- value: null,
250
- source: null,
251
- args: args.slice(),
252
- };
253
- }
254
-
255
- function resolveActiveWorkstream(cwd, args, env = process.env, deps = {}) {
256
- const parsed = parseCliWorkstream(args);
257
- const getStored = deps.getStored || ((dir) => getActiveWorkstream(dir, deps));
258
-
259
- let ws = null;
260
- let source = 'none';
261
-
262
- if (parsed.value) {
263
- ws = parsed.value;
264
- source = parsed.source;
265
- } else if (env && typeof env.GSD_WORKSTREAM === 'string' && env.GSD_WORKSTREAM.trim()) {
266
- ws = env.GSD_WORKSTREAM.trim();
267
- source = 'env';
268
- } else {
269
- ws = getStored(cwd) || null;
270
- source = ws ? 'store' : 'none';
271
- }
272
-
273
- if (ws && !validateWorkstreamName(ws)) {
274
- throw new Error('Invalid workstream name: must be alphanumeric, hyphens, underscores, or dots');
275
- }
276
-
277
- return {
278
- ws,
279
- source,
280
- args: parsed.args,
281
- };
282
- }
283
-
284
- function applyResolvedWorkstreamEnv(resolution, env = process.env) {
285
- if (!resolution || !resolution.ws) return;
286
- env.GSD_WORKSTREAM = resolution.ws;
287
- }
288
-
289
- module.exports = {
290
- validateWorkstreamName,
291
- getWorkstreamSessionKey,
292
- createSharedPointerAdapter,
293
- createSessionScopedPointerAdapter,
294
- createMemoryPointerAdapter,
295
- pickActiveWorkstreamAdapter,
296
- getActiveWorkstream,
297
- setActiveWorkstream,
298
- clearActiveWorkstream,
299
- parseCliWorkstream,
300
- resolveActiveWorkstream,
301
- applyResolvedWorkstreamEnv,
302
- };
@@ -1,394 +0,0 @@
1
- 'use strict';
2
-
3
- const fs = require('fs');
4
- const path = require('path');
5
- const { requireSafePath } = require('./security.cjs');
6
-
7
- const STATUS_REJECT_SET = new Set(['superseded', 'rejected', 'deprecated']);
8
-
9
- const CANONICAL_HEADERS = {
10
- status: ['status', 'state', 'lifecycle', 'stage'],
11
- goal: [
12
- 'context',
13
- 'background',
14
- 'problem statement',
15
- 'problem',
16
- 'situation',
17
- 'forces',
18
- 'motivation',
19
- 'issue',
20
- 'drivers',
21
- 'pain points',
22
- 'story',
23
- 'setting',
24
- 'premise',
25
- 'status quo',
26
- 'context and problem statement',
27
- ],
28
- decisions: [
29
- 'decision',
30
- 'decisions',
31
- 'resolution',
32
- 'conclusion',
33
- 'choice',
34
- 'we decided',
35
- 'direction',
36
- 'approach',
37
- 'solution',
38
- 'outcome',
39
- 'selected option',
40
- 'recommendation',
41
- 'strategy',
42
- 'decision outcome',
43
- ],
44
- considered_options: [
45
- 'considered options',
46
- 'alternatives',
47
- 'options',
48
- 'choices',
49
- 'candidates',
50
- 'approaches considered',
51
- 'variants',
52
- 'trade-offs',
53
- 'pros and cons of the options',
54
- 'discussion',
55
- ],
56
- risks: [
57
- 'risks',
58
- 'trade-offs',
59
- 'drawbacks',
60
- 'cost',
61
- 'tensions',
62
- 'liabilities',
63
- 'negative consequences',
64
- 'side effects',
65
- ],
66
- success_criteria: [
67
- 'success criteria',
68
- 'acceptance criteria',
69
- 'validation',
70
- "how we'll know",
71
- 'metrics',
72
- 'kpis',
73
- 'verification',
74
- 'test strategy',
75
- 'compliance',
76
- 'definition of done',
77
- 'exit criteria',
78
- 'positive consequences',
79
- ],
80
- plan_sequence: [
81
- 'implementation plan',
82
- 'implementation notes',
83
- 'steps',
84
- 'tasks',
85
- 'roadmap',
86
- 'sequence',
87
- 'migration plan',
88
- 'plan',
89
- 'action items',
90
- 'work breakdown',
91
- 'phases',
92
- 'milestones',
93
- 'stages',
94
- ],
95
- key_files: [
96
- 'affected files',
97
- 'files touched',
98
- 'surface area',
99
- 'modules affected',
100
- 'code locations',
101
- 'file changes',
102
- 'diff summary',
103
- 'touched code',
104
- ],
105
- out_of_scope: [
106
- 'out of scope',
107
- 'non-goals',
108
- 'excluded',
109
- 'not in this adr',
110
- 'out of bounds',
111
- "won't do",
112
- "won't have",
113
- 'beyond scope',
114
- 'anti-goals',
115
- ],
116
- deferred: [
117
- 'future work',
118
- 'deferred',
119
- 'future',
120
- 'later',
121
- 'follow-up',
122
- 'next steps',
123
- ],
124
- dependencies: [
125
- 'dependencies',
126
- 'depends on',
127
- 'prerequisites',
128
- 'sequencing',
129
- 'order',
130
- 'blocked by',
131
- 'cross-cuts',
132
- 'related adrs',
133
- 'links',
134
- 'references',
135
- 'see also',
136
- 'upstream',
137
- 'inbound',
138
- ],
139
- update: [
140
- 'update',
141
- 'revision',
142
- 'amendment',
143
- 'locked design',
144
- 'final decision',
145
- 'post-grilling',
146
- 'addendum',
147
- ],
148
- consequences: [
149
- 'consequences',
150
- 'implications',
151
- 'impact',
152
- 'what this means',
153
- 'result',
154
- ],
155
- };
156
-
157
- const CONSEQUENCE_NEGATIVE_HINTS = [
158
- 'negative',
159
- 'drawback',
160
- 'risk',
161
- 'cost',
162
- 'liability',
163
- 'trade-off',
164
- 'tension',
165
- 'side effect',
166
- ];
167
-
168
- const CONSEQUENCE_POSITIVE_HINTS = [
169
- 'positive',
170
- 'success',
171
- 'metric',
172
- 'kpi',
173
- 'verification',
174
- 'acceptance',
175
- 'benefit',
176
- ];
177
-
178
- function normalizeAdrHeader(raw) {
179
- return String(raw || '')
180
- .trim()
181
- .toLowerCase()
182
- .replace(/[\s:._-]+/g, ' ')
183
- .replace(/[^\w\s]/g, '')
184
- .trim();
185
- }
186
-
187
- function classifyHeader(normalizedHeader) {
188
- for (const [canonical, synonyms] of Object.entries(CANONICAL_HEADERS)) {
189
- for (const synonym of synonyms) {
190
- if (normalizedHeader === synonym) return canonical;
191
- if (normalizedHeader.startsWith(`${synonym} `)) return canonical;
192
- }
193
- }
194
- return null;
195
- }
196
-
197
- function splitEntries(blockText) {
198
- return String(blockText || '')
199
- .split(/\r?\n/)
200
- .map((line) => line.trim())
201
- .filter(Boolean)
202
- .map((line) => line.replace(/^[-*+]\s+/, '').trim())
203
- .filter(Boolean);
204
- }
205
-
206
- function parseSections(markdown) {
207
- const lines = String(markdown || '').split(/\r?\n/);
208
- const sections = [];
209
- let current = { heading: null, body: [] };
210
-
211
- for (const line of lines) {
212
- const m = line.match(/^#{1,6}\s+(.*)$/);
213
- if (m) {
214
- if (current.heading || current.body.length) sections.push(current);
215
- current = { heading: m[1].trim(), body: [] };
216
- } else {
217
- current.body.push(line);
218
- }
219
- }
220
-
221
- if (current.heading || current.body.length) sections.push(current);
222
- return sections;
223
- }
224
-
225
- function parseStatusFromSections(sections) {
226
- for (const section of sections) {
227
- const canonical = classifyHeader(normalizeAdrHeader(section.heading));
228
- if (canonical !== 'status') continue;
229
- const line = splitEntries(section.body.join('\n'))[0] || '';
230
- const norm = normalizeAdrHeader(line);
231
- if (!norm) return '';
232
- if (norm.includes('accepted')) return 'accepted';
233
- if (norm.includes('proposed')) return 'proposed';
234
- if (norm.includes('superseded')) return 'superseded';
235
- if (norm.includes('rejected')) return 'rejected';
236
- if (norm.includes('deprecated')) return 'deprecated';
237
- return norm;
238
- }
239
- return '';
240
- }
241
-
242
- function pushUnique(target, values) {
243
- const seen = new Set(target);
244
- for (const value of values) {
245
- if (!seen.has(value)) {
246
- target.push(value);
247
- seen.add(value);
248
- }
249
- }
250
- }
251
-
252
- function parseConsequences(lines, out) {
253
- for (const entry of lines) {
254
- const lower = entry.toLowerCase();
255
- if (CONSEQUENCE_NEGATIVE_HINTS.some((hint) => lower.includes(hint))) {
256
- out.consequences_negative.push(entry);
257
- continue;
258
- }
259
- if (CONSEQUENCE_POSITIVE_HINTS.some((hint) => lower.includes(hint))) {
260
- out.consequences_positive.push(entry);
261
- continue;
262
- }
263
- out.consequences_positive.push(entry);
264
- }
265
- }
266
-
267
- function parseAdrMarkdown(markdown, { sourcePath = '', format = 'auto' } = {}) {
268
- const sections = parseSections(markdown);
269
- const titleLine = String(markdown || '').split(/\r?\n/).find((line) => /^#\s+/.test(line)) || '';
270
- const title = titleLine.replace(/^#\s+/, '').trim();
271
-
272
- const out = {
273
- title,
274
- status: parseStatusFromSections(sections) || 'accepted',
275
- context: '',
276
- decisions: [],
277
- options_considered: [],
278
- consequences_positive: [],
279
- consequences_negative: [],
280
- out_of_scope: [],
281
- deferred: [],
282
- dependencies: [],
283
- updates: [],
284
- source_path: sourcePath,
285
- key_files: [],
286
- plan_sequence: [],
287
- format,
288
- unmapped_headers: [],
289
- };
290
-
291
- for (const section of sections) {
292
- const heading = section.heading || '';
293
- if (!heading) continue;
294
- const canonical = classifyHeader(normalizeAdrHeader(heading));
295
- const entries = splitEntries(section.body.join('\n'));
296
- const prose = section.body.join('\n').trim();
297
-
298
- if (!canonical) {
299
- out.unmapped_headers.push(heading);
300
- continue;
301
- }
302
-
303
- switch (canonical) {
304
- case 'goal':
305
- if (!out.context && prose) out.context = prose;
306
- break;
307
- case 'decisions':
308
- pushUnique(out.decisions, entries);
309
- break;
310
- case 'considered_options':
311
- pushUnique(out.options_considered, entries);
312
- break;
313
- case 'risks':
314
- pushUnique(out.consequences_negative, entries);
315
- break;
316
- case 'success_criteria':
317
- pushUnique(out.consequences_positive, entries);
318
- break;
319
- case 'plan_sequence':
320
- pushUnique(out.plan_sequence, entries);
321
- break;
322
- case 'key_files':
323
- pushUnique(out.key_files, entries);
324
- break;
325
- case 'out_of_scope':
326
- pushUnique(out.out_of_scope, entries);
327
- break;
328
- case 'deferred':
329
- pushUnique(out.deferred, entries);
330
- break;
331
- case 'dependencies':
332
- pushUnique(out.dependencies, entries);
333
- break;
334
- case 'update':
335
- out.updates.push({ heading, entries });
336
- break;
337
- case 'consequences':
338
- parseConsequences(entries, out);
339
- break;
340
- default:
341
- break;
342
- }
343
- }
344
-
345
- return out;
346
- }
347
-
348
- function shouldRejectAdrStatus(status) {
349
- return STATUS_REJECT_SET.has(normalizeAdrHeader(status));
350
- }
351
-
352
- function parseCliArgs(argv) {
353
- const opts = { input: null, format: 'auto', projectDir: process.cwd() };
354
- for (let i = 0; i < argv.length; i++) {
355
- const arg = argv[i];
356
- if (arg === '--input') {
357
- opts.input = argv[++i] || null;
358
- } else if (arg === '--format') {
359
- opts.format = argv[++i] || 'auto';
360
- } else if (arg === '--project-dir') {
361
- opts.projectDir = argv[++i] || process.cwd();
362
- } else {
363
- throw new Error(`Unknown argument: ${arg}`);
364
- }
365
- }
366
- if (!opts.input) {
367
- throw new Error('Missing required --input <path>');
368
- }
369
- return opts;
370
- }
371
-
372
- function main(argv) {
373
- const opts = parseCliArgs(argv);
374
- const safePath = requireSafePath(opts.input, path.resolve(opts.projectDir), 'ADR input path', { allowAbsolute: true });
375
- const content = fs.readFileSync(safePath, 'utf8');
376
- const parsed = parseAdrMarkdown(content, { sourcePath: opts.input, format: opts.format });
377
- process.stdout.write(JSON.stringify(parsed, null, 2));
378
- }
379
-
380
- if (require.main === module) {
381
- try {
382
- main(process.argv.slice(2));
383
- } catch (error) {
384
- process.stderr.write(`Error: ${error.message}\n`);
385
- process.exit(1);
386
- }
387
- }
388
-
389
- module.exports = {
390
- CANONICAL_HEADERS,
391
- normalizeAdrHeader,
392
- parseAdrMarkdown,
393
- shouldRejectAdrStatus,
394
- };