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