@opengsd/gsd-core 1.3.0-rc.1 → 1.3.1

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 +823 -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
@@ -0,0 +1,218 @@
1
+ "use strict";
2
+ /**
3
+ * Update-context resolver (issue #498, candidate 3).
4
+ *
5
+ * ADR-457 build-at-publish: the hand-written bin/lib/update-context.cjs
6
+ * collapsed to a TypeScript source of truth. Behaviour is preserved
7
+ * byte-for-behaviour from the prior hand-written .cjs; only types are added.
8
+ */
9
+ var __importDefault = (this && this.__importDefault) || function (mod) {
10
+ return (mod && mod.__esModule) ? mod : { "default": mod };
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.RUNTIME_DIRS = void 0;
14
+ exports.inferPreferredRuntime = inferPreferredRuntime;
15
+ exports.envRuntimeDirs = envRuntimeDirs;
16
+ exports.resolveUpdateContext = resolveUpdateContext;
17
+ exports.loadUpdateContext = loadUpdateContext;
18
+ const node_path_1 = __importDefault(require("node:path"));
19
+ const node_fs_1 = __importDefault(require("node:fs"));
20
+ const node_os_1 = __importDefault(require("node:os"));
21
+ // Runtime -> candidate relative dir. Order matters: it is the probe order, and
22
+ // mirrors the RUNTIME_DIRS array the bash used (a runtime may have several
23
+ // candidate dirs). Kept here, not derived from the installer's getDirName,
24
+ // because update detection probes ALL historical dirs per runtime.
25
+ exports.RUNTIME_DIRS = [
26
+ ['claude', '.claude'],
27
+ ['opencode', '.config/opencode'],
28
+ ['opencode', '.opencode'],
29
+ ['antigravity', '.gemini/antigravity-ide'],
30
+ ['antigravity', '.gemini/antigravity-cli'],
31
+ ['antigravity', '.gemini/antigravity'],
32
+ ['antigravity', '.agent'], // local Antigravity install dir (#503; bin/install.js getDirName('antigravity'))
33
+ ['gemini', '.gemini'],
34
+ ['kilo', '.config/kilo'],
35
+ ['kilo', '.kilo'],
36
+ ['codex', '.codex'],
37
+ ];
38
+ const SEMVER_PREFIX = /^\d+\.\d+\.\d+/;
39
+ function expandHome(p, home) {
40
+ if (!p)
41
+ return '';
42
+ return p.startsWith('~/') ? node_path_1.default.join(home, p.slice(2)) : p;
43
+ }
44
+ function versionFile(dir) { return node_path_1.default.join(dir, 'gsd-core', 'VERSION'); }
45
+ function markerFile(dir) { return node_path_1.default.join(dir, 'gsd-core', 'workflows', 'update.md'); }
46
+ // Detection: a dir "has GSD" if it carries a VERSION file or the update.md
47
+ // workflow marker.
48
+ function hasInstall(fs, dir) {
49
+ return fs.exists(versionFile(dir)) || fs.exists(markerFile(dir));
50
+ }
51
+ // Read VERSION at dir; return a trimmed semver string, or null if missing/invalid.
52
+ function validVersionAt(fs, dir) {
53
+ const raw = fs.readFile(versionFile(dir));
54
+ if (raw == null)
55
+ return null;
56
+ const trimmed = String(raw).trim();
57
+ return SEMVER_PREFIX.test(trimmed) ? trimmed : null;
58
+ }
59
+ // A version is TRUSTED only when BOTH the VERSION file and the update.md marker
60
+ // exist (and VERSION is valid semver).
61
+ function trustedVersionAt(fs, dir) {
62
+ return dir && fs.exists(markerFile(dir)) ? validVersionAt(fs, dir) : null;
63
+ }
64
+ // Infer the preferred runtime from preferredConfigDir config files, then env.
65
+ function inferPreferredRuntime({ fs, env, preferredConfigDir }) {
66
+ if (preferredConfigDir) {
67
+ if (fs.exists(node_path_1.default.join(preferredConfigDir, 'kilo.json')) ||
68
+ fs.exists(node_path_1.default.join(preferredConfigDir, 'kilo.jsonc')))
69
+ return 'kilo';
70
+ if (fs.exists(node_path_1.default.join(preferredConfigDir, 'opencode.json')) ||
71
+ fs.exists(node_path_1.default.join(preferredConfigDir, 'opencode.jsonc')))
72
+ return 'opencode';
73
+ if (fs.exists(node_path_1.default.join(preferredConfigDir, 'config.toml')))
74
+ return 'codex';
75
+ }
76
+ if (env['CODEX_HOME'])
77
+ return 'codex';
78
+ if (env['ANTIGRAVITY_CONFIG_DIR'])
79
+ return 'antigravity';
80
+ if (env['GEMINI_CONFIG_DIR'])
81
+ return 'gemini';
82
+ if (env['KILO_CONFIG_DIR'] || env['KILO_CONFIG'])
83
+ return 'kilo';
84
+ if (env['OPENCODE_CONFIG_DIR'] || env['OPENCODE_CONFIG'])
85
+ return 'opencode';
86
+ if (env['CLAUDE_CONFIG_DIR'])
87
+ return 'claude';
88
+ return 'claude';
89
+ }
90
+ // Absolute env-override candidates, mirroring the bash ENV_RUNTIME_DIRS block.
91
+ function envRuntimeDirs({ env, home }) {
92
+ const out = [];
93
+ const ex = (v) => expandHome(v, home);
94
+ if (env['CLAUDE_CONFIG_DIR'])
95
+ out.push(['claude', ex(env['CLAUDE_CONFIG_DIR'])]);
96
+ if (env['ANTIGRAVITY_CONFIG_DIR'])
97
+ out.push(['antigravity', ex(env['ANTIGRAVITY_CONFIG_DIR'])]);
98
+ if (env['GEMINI_CONFIG_DIR'])
99
+ out.push(['gemini', ex(env['GEMINI_CONFIG_DIR'])]);
100
+ if (env['KILO_CONFIG_DIR'])
101
+ out.push(['kilo', ex(env['KILO_CONFIG_DIR'])]);
102
+ else if (env['KILO_CONFIG'])
103
+ out.push(['kilo', node_path_1.default.dirname(ex(env['KILO_CONFIG']))]);
104
+ else if (env['XDG_CONFIG_HOME'])
105
+ out.push(['kilo', node_path_1.default.join(ex(env['XDG_CONFIG_HOME']), 'kilo')]);
106
+ if (env['OPENCODE_CONFIG_DIR'])
107
+ out.push(['opencode', ex(env['OPENCODE_CONFIG_DIR'])]);
108
+ else if (env['OPENCODE_CONFIG'])
109
+ out.push(['opencode', node_path_1.default.dirname(ex(env['OPENCODE_CONFIG']))]);
110
+ else if (env['XDG_CONFIG_HOME'])
111
+ out.push(['opencode', node_path_1.default.join(ex(env['XDG_CONFIG_HOME']), 'opencode')]);
112
+ if (env['CODEX_HOME'])
113
+ out.push(['codex', ex(env['CODEX_HOME'])]);
114
+ return out;
115
+ }
116
+ // Stable reorder: entries whose runtime === preferred first, original order kept.
117
+ function preferFirst(entries, preferred) {
118
+ const pref = entries.filter(([rt]) => rt === preferred);
119
+ const rest = entries.filter(([rt]) => rt !== preferred);
120
+ return [...pref, ...rest];
121
+ }
122
+ /**
123
+ * Pure resolver. Returns { installedVersion, scope, runtime, gsdDir }.
124
+ */
125
+ function resolveUpdateContext({ home, cwd, env = {}, fs, preferredConfigDir = '', preferredRuntime = '', }) {
126
+ // Expand a leading `~/` before any probe.
127
+ preferredConfigDir = expandHome(preferredConfigDir, home);
128
+ const preferred = preferredRuntime || inferPreferredRuntime({ fs, env, preferredConfigDir });
129
+ // Fast path: a validated preferredConfigDir (custom --config-dir install).
130
+ if (preferredConfigDir && hasInstall(fs, preferredConfigDir)) {
131
+ const resolvedPref = node_path_1.default.resolve(preferredConfigDir);
132
+ let scope = 'GLOBAL';
133
+ for (const [, reldir] of exports.RUNTIME_DIRS) {
134
+ if (node_path_1.default.resolve(cwd, reldir) === resolvedPref) {
135
+ scope = 'LOCAL';
136
+ break;
137
+ }
138
+ }
139
+ return {
140
+ installedVersion: trustedVersionAt(fs, preferredConfigDir) ?? '0.0.0',
141
+ scope,
142
+ runtime: preferred,
143
+ gsdDir: preferredConfigDir,
144
+ };
145
+ }
146
+ const orderedEnv = preferFirst(envRuntimeDirs({ env, home }), preferred);
147
+ const orderedRuntime = preferFirst(exports.RUNTIME_DIRS, preferred);
148
+ // LOCAL probe (relative to cwd).
149
+ let localRuntime = '', localDir = '';
150
+ for (const [rt, reldir] of orderedRuntime) {
151
+ const cand = node_path_1.default.resolve(cwd, reldir);
152
+ if (hasInstall(fs, cand)) {
153
+ localRuntime = rt;
154
+ localDir = cand;
155
+ break;
156
+ }
157
+ }
158
+ // GLOBAL probe: absolute env candidates first, then $HOME-relative.
159
+ let globalRuntime = '', globalDir = '';
160
+ for (const [rt, absdir] of orderedEnv) {
161
+ if (hasInstall(fs, absdir)) {
162
+ globalRuntime = rt;
163
+ globalDir = node_path_1.default.resolve(absdir);
164
+ break;
165
+ }
166
+ }
167
+ if (!globalRuntime) {
168
+ for (const [rt, reldir] of orderedRuntime) {
169
+ const cand = node_path_1.default.resolve(home, reldir);
170
+ if (hasInstall(fs, cand)) {
171
+ globalRuntime = rt;
172
+ globalDir = cand;
173
+ break;
174
+ }
175
+ }
176
+ }
177
+ const localValid = trustedVersionAt(fs, localDir);
178
+ const isLocal = !!localValid && (!globalDir || localDir !== globalDir);
179
+ if (isLocal) {
180
+ return { installedVersion: localValid, scope: 'LOCAL', runtime: localRuntime, gsdDir: localDir };
181
+ }
182
+ const globalValid = trustedVersionAt(fs, globalDir);
183
+ if (globalValid) {
184
+ return { installedVersion: globalValid, scope: 'GLOBAL', runtime: globalRuntime, gsdDir: globalDir };
185
+ }
186
+ // A runtime dir was detected (VERSION or marker present) but is not a
187
+ // complete, valid install: keep scope/runtime/dir and report 0.0.0 so the
188
+ // caller re-installs.
189
+ if (localRuntime && (!globalDir || localDir !== globalDir)) {
190
+ return { installedVersion: '0.0.0', scope: 'LOCAL', runtime: localRuntime, gsdDir: localDir };
191
+ }
192
+ if (globalRuntime) {
193
+ return { installedVersion: '0.0.0', scope: 'GLOBAL', runtime: globalRuntime, gsdDir: globalDir };
194
+ }
195
+ return { installedVersion: '0.0.0', scope: 'UNKNOWN', runtime: 'claude', gsdDir: '' };
196
+ }
197
+ /**
198
+ * CLI wiring: resolve against the real filesystem.
199
+ */
200
+ function loadUpdateContext(opts = {}) {
201
+ const fs = {
202
+ exists: (p) => node_fs_1.default.existsSync(p),
203
+ readFile: (p) => { try {
204
+ return node_fs_1.default.readFileSync(p, 'utf8');
205
+ }
206
+ catch {
207
+ return null;
208
+ } },
209
+ };
210
+ return resolveUpdateContext({
211
+ home: opts.home ?? node_os_1.default.homedir(),
212
+ cwd: opts.cwd ?? process.cwd(),
213
+ env: opts.env ?? process.env,
214
+ fs,
215
+ preferredConfigDir: opts.preferredConfigDir ?? '',
216
+ preferredRuntime: opts.preferredRuntime ?? '',
217
+ });
218
+ }
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ /**
3
+ * Manifest-backed validate subcommand router.
4
+ * Keeps gsd-tools.cjs thin while preserving existing command semantics.
5
+ *
6
+ * Phase 6: validate.consistency, validate.health, validate.agents are
7
+ * dispatched via executeForCjs when the SDK is available. CJS fallback
8
+ * retained when:
9
+ * - GSD_WORKSTREAM is active (workstream-scoped requests fall through to CJS).
10
+ * - SDK is unavailable (build not present).
11
+ *
12
+ * CJS-only subcommands:
13
+ * - context: complex inline logic using classifyContextUtilization and
14
+ * output formatting that has no direct SDK counterpart. Remains CJS-native.
15
+ *
16
+ * SDK-only (unsupported in CJS router): none.
17
+ *
18
+ * ADR-457 build-at-publish: the hand-written bin/lib/validate-command-router.cjs
19
+ * collapsed to a TypeScript source of truth. Behaviour is preserved byte-for-behaviour
20
+ * from the prior hand-written .cjs; only types are added.
21
+ */
22
+ const command_aliases_cjs_1 = require("./command-aliases.cjs");
23
+ const runtime_slash_cjs_1 = require("./runtime-slash.cjs");
24
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
25
+ const cjsCommandRouterAdapter = require("./cjs-command-router-adapter.cjs");
26
+ const { routeCjsCommandFamily } = cjsCommandRouterAdapter;
27
+ const command_arg_projection_cjs_1 = require("./command-arg-projection.cjs");
28
+ const context_utilization_cjs_1 = require("./context-utilization.cjs");
29
+ // ─── Implementation ───────────────────────────────────────────────────────────
30
+ function routeValidateCommand({ verify, args, cwd, raw, output: outputFn, error }) {
31
+ routeCjsCommandFamily({
32
+ args,
33
+ subcommands: command_aliases_cjs_1.VALIDATE_SUBCOMMANDS,
34
+ unsupported: {},
35
+ error,
36
+ unknownMessage: (_subcommand, available) => `Unknown validate subcommand. Available: ${available.join(', ')}`,
37
+ handlers: {
38
+ consistency: () => verify.cmdValidateConsistency(cwd, raw),
39
+ // Keep health on CJS for now so fix hints are rendered via runtime-slash
40
+ // helpers (codex expects $gsd-* command shape).
41
+ health: () => {
42
+ const repairFlag = args.includes('--repair');
43
+ const backfillFlag = args.includes('--backfill');
44
+ verify.cmdValidateHealth(cwd, { repair: repairFlag, backfill: backfillFlag }, raw);
45
+ },
46
+ agents: () => verify.cmdValidateAgents(cwd, raw),
47
+ // context: CJS-only — complex inline logic using classifyContextUtilization
48
+ // with custom output formatting that has no direct SDK counterpart.
49
+ context: () => {
50
+ const opts = (0, command_arg_projection_cjs_1.parseNamedArgs)(args, ['tokens-used', 'context-window']);
51
+ if (opts['tokens-used'] === null) {
52
+ error('--tokens-used <integer> is required for `validate context`');
53
+ return;
54
+ }
55
+ if (opts['context-window'] === null) {
56
+ error('--context-window <integer> is required for `validate context`');
57
+ return;
58
+ }
59
+ const threadCmd = String((0, runtime_slash_cjs_1.formatGsdSlash)('thread', (0, runtime_slash_cjs_1.resolveRuntime)(cwd)));
60
+ const RECOMMENDATIONS = {
61
+ [context_utilization_cjs_1.STATES.HEALTHY]: null,
62
+ [context_utilization_cjs_1.STATES.WARNING]: `Context is approaching the fracture zone — consider ${threadCmd} to continue in a fresh window.`,
63
+ [context_utilization_cjs_1.STATES.CRITICAL]: `Reasoning quality may degrade past 70% utilization (fracture point). Run ${threadCmd} now to preserve output quality.`,
64
+ };
65
+ let classified;
66
+ try {
67
+ classified = (0, context_utilization_cjs_1.classifyContextUtilization)(Number(opts['tokens-used']), Number(opts['context-window']));
68
+ }
69
+ catch (e) {
70
+ const msg = e.message;
71
+ const flag = /tokensUsed/.test(msg) ? '--tokens-used' : '--context-window';
72
+ error(`${flag} must be a non-negative integer (window > 0), got the values supplied`);
73
+ return;
74
+ }
75
+ const result = { ...classified, recommendation: RECOMMENDATIONS[classified.state] };
76
+ if (args.includes('--json')) {
77
+ outputFn(result, raw);
78
+ }
79
+ else {
80
+ const lines = [`Context utilization: ${result.percent}% (${result.state})`];
81
+ if (result.recommendation)
82
+ lines.push(result.recommendation);
83
+ outputFn(result, true, lines.join('\n'));
84
+ }
85
+ },
86
+ },
87
+ });
88
+ }
89
+ module.exports = {
90
+ routeValidateCommand,
91
+ };
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ /**
3
+ * Validate Helpers — pure computation helpers and regex constants extracted from
4
+ * sdk/src/query/validate.ts (ADR-457 build-at-publish: the hand-written
5
+ * bin/lib/validate.cjs collapsed to a TypeScript source of truth). Behaviour is
6
+ * preserved byte-for-behaviour from the prior hand-written .cjs; only types are
7
+ * added.
8
+ *
9
+ * No I/O. No async. No filesystem operations.
10
+ *
11
+ * Issue #6 drift items (three helpers):
12
+ * 1. phaseVariants() — replaces parseInt-based padded/unpadded check in verify.cjs
13
+ * Check 8 (W006 disk-existence and W007 roadmap-membership checks).
14
+ * 2. buildRoadmapPhaseVariants() — replaces raw roadmapPhases set in W007 loop.
15
+ * 3. buildNotStartedPhaseVariants() — replaces raw+zero-padded notStartedPhases
16
+ * in W006 skip logic.
17
+ *
18
+ * Issue #26 drift items (four constants/helpers):
19
+ * 4. phaseDirNameRe — W005 phase directory naming regex (was inline in verify.cjs Check 6).
20
+ * 5. PHASE_TOKEN_FROM_DIR_RE — extracts phase token from dir name (was inline in
21
+ * verify.cjs forEachArchivedPhaseToken / collectDiskPhases).
22
+ * 6. MILESTONE_ARCHIVE_DIR_RE — identifies milestone archive directories (was inline).
23
+ * 7. canonicalPlanStem() — I001 PLAN/SUMMARY stem canonicalization (was inline in Check 7).
24
+ *
25
+ * I/O adapter pattern (ADR-3524 §4): pure transforms extracted from the SDK.
26
+ *
27
+ * References:
28
+ * - ADR-3524 (docs/adr/3524-cjs-sdk-hard-seam.md)
29
+ * - Issue #6 (open-gsd/gsd-core)
30
+ * - Issue #26 (open-gsd/gsd-core)
31
+ * - PR #154 (issue #4) — generator pattern precedent
32
+ * - PR #156 (issue #6) — validate.ts generator that #26 extends
33
+ */
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ exports.MILESTONE_ARCHIVE_DIR_RE = exports.PHASE_TOKEN_FROM_DIR_RE = exports.phaseDirNameRe = void 0;
36
+ exports.canonicalPlanStem = canonicalPlanStem;
37
+ exports.phaseVariants = phaseVariants;
38
+ exports.buildRoadmapPhaseVariants = buildRoadmapPhaseVariants;
39
+ exports.buildNotStartedPhaseVariants = buildNotStartedPhaseVariants;
40
+ // ── Issue #26: regex constants (W005, W006-archived) ────────────────────────
41
+ // Matches legacy numeric dirs (01-setup), milestone-prefixed dirs (02-01-setup),
42
+ // deep dirs (02-04-01-deep), and project-code-prefixed variants (GSD-02-01-setup).
43
+ exports.phaseDirNameRe = /^(?:[A-Z]{1,6}-)?\d{2,}(?:-\d+)*(?:\.\d+)*-[\w-]+$/i;
44
+ // Extracts the full phase token from a directory name, including milestone-prefixed
45
+ // multi-segment tokens like "02-01" from "02-01-setup" or "GSD-02-01-setup".
46
+ // Greedily captures all leading all-digit segments before the first letter-start segment.
47
+ exports.PHASE_TOKEN_FROM_DIR_RE = /^(?:[A-Z]{1,6}-)?(\d+(?:-\d+)*[A-Z]?(?:\.\d+)*)(?:-[a-z]|$)/i;
48
+ exports.MILESTONE_ARCHIVE_DIR_RE = /^v\d+.*-phases$/i;
49
+ // ── Issue #26: I001 canonicalization ────────────────────────────────────────
50
+ function canonicalPlanStem(stem) {
51
+ const m = stem.match(/^(\d+[A-Z]?(?:\.\d+)*-\d+)/i);
52
+ return m ? m[1] : stem;
53
+ }
54
+ // ── Issue #6: phase variant helpers (W006/W007) ──────────────────────────────
55
+ function phaseVariants(phase) {
56
+ const variants = new Set([phase]);
57
+ const dotIdx = phase.indexOf('.');
58
+ const head = dotIdx === -1 ? phase : phase.slice(0, dotIdx);
59
+ const tail = dotIdx === -1 ? '' : phase.slice(dotIdx);
60
+ // Milestone-prefixed IDs: M-NN or M-N-N. Add padding-normalized variant.
61
+ // e.g. "2-01" → also "02-01"; "02-01" → also "2-01"
62
+ const milestoneHeadMatch = head.match(/^(\d+)((?:-\d+)+)([A-Z]?)$/i);
63
+ if (milestoneHeadMatch) {
64
+ const major = milestoneHeadMatch[1];
65
+ const subSegs = milestoneHeadMatch[2]; // e.g. "-01" or "-04-01"
66
+ const letter = milestoneHeadMatch[3] || '';
67
+ const paddedMajor = major.padStart(2, '0');
68
+ const unpaddedMajor = String(parseInt(major, 10));
69
+ // Pad/unpad sub-segments individually
70
+ const paddedSubs = subSegs.slice(1).split('-').map(s => s.padStart(2, '0')).join('-');
71
+ const unpaddedSubs = subSegs.slice(1).split('-').map(s => String(parseInt(s, 10))).join('-');
72
+ variants.add(`${paddedMajor}-${paddedSubs}${letter}${tail}`);
73
+ variants.add(`${unpaddedMajor}-${unpaddedSubs}${letter}${tail}`);
74
+ variants.add(`${unpaddedMajor}-${paddedSubs}${letter}${tail}`);
75
+ variants.add(`${paddedMajor}-${unpaddedSubs}${letter}${tail}`);
76
+ return variants;
77
+ }
78
+ // Plain numeric/decimal IDs: "1", "01", "12A", "12.1"
79
+ const headMatch = head.match(/^(\d+)([A-Z]?)$/i);
80
+ if (!headMatch)
81
+ return variants;
82
+ const numericHead = headMatch[1];
83
+ const letterSuffix = headMatch[2] || '';
84
+ variants.add(`${String(parseInt(numericHead, 10))}${letterSuffix}${tail}`);
85
+ variants.add(`${numericHead.padStart(2, '0')}${letterSuffix}${tail}`);
86
+ return variants;
87
+ }
88
+ function buildRoadmapPhaseVariants(roadmapContent) {
89
+ const roadmapPhases = new Set();
90
+ const roadmapPhaseVariants = new Set();
91
+ // Matches both legacy numeric (Phase 1:), decimal (Phase 2.1:), milestone-prefixed (Phase 2-01:),
92
+ // and bracket-prefixed (### [GSD] Phase 2-01:) headings.
93
+ const phasePattern = /#{2,4}\s*(?:\[[^\]]+\]\s*)?Phase\s+([\w][\w.-]*(?:-[\w.-]+)*)\s*:/gi;
94
+ let m;
95
+ while ((m = phasePattern.exec(roadmapContent)) !== null) {
96
+ roadmapPhases.add(m[1]);
97
+ for (const variant of phaseVariants(m[1]))
98
+ roadmapPhaseVariants.add(variant);
99
+ }
100
+ return { roadmapPhases, roadmapPhaseVariants };
101
+ }
102
+ function buildNotStartedPhaseVariants(roadmapContent) {
103
+ const notStartedPhases = new Set();
104
+ // Also matches milestone-prefixed and bracket-prefixed checklist items.
105
+ const uncheckedPattern = /-\s*\[\s\]\s*\*{0,2}Phase\s+([\w][\w.-]*(?:-[\w.-]+)*)[:\s*]/gi;
106
+ let um;
107
+ while ((um = uncheckedPattern.exec(roadmapContent)) !== null) {
108
+ for (const variant of phaseVariants(um[1]))
109
+ notStartedPhases.add(variant);
110
+ }
111
+ return notStartedPhases;
112
+ }
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ /**
3
+ * Manifest-backed verify subcommand router.
4
+ * Keeps gsd-tools.cjs thin while preserving existing command semantics.
5
+ *
6
+ * ADR-457 build-at-publish: the hand-written bin/lib/verify-command-router.cjs
7
+ * collapsed 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
+ const command_aliases_cjs_1 = require("./command-aliases.cjs");
11
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
12
+ const cjsCommandRouterAdapter = require("./cjs-command-router-adapter.cjs");
13
+ const { routeCjsCommandFamily } = cjsCommandRouterAdapter;
14
+ // ─── Implementation ───────────────────────────────────────────────────────────
15
+ function routeVerifyCommand({ verify, args, cwd, raw, error }) {
16
+ routeCjsCommandFamily({
17
+ args,
18
+ subcommands: command_aliases_cjs_1.VERIFY_SUBCOMMANDS,
19
+ unsupported: {},
20
+ error,
21
+ unknownMessage: (_subcommand, available) => `Unknown verify subcommand. Available: ${available.join(', ')}`,
22
+ handlers: {
23
+ 'plan-structure': () => verify.cmdVerifyPlanStructure(cwd, args[2], raw),
24
+ 'phase-completeness': () => verify.cmdVerifyPhaseCompleteness(cwd, args[2], raw),
25
+ references: () => verify.cmdVerifyReferences(cwd, args[2], raw),
26
+ commits: () => verify.cmdVerifyCommits(cwd, args.slice(2), raw),
27
+ artifacts: () => verify.cmdVerifyArtifacts(cwd, args[2], raw),
28
+ 'key-links': () => verify.cmdVerifyKeyLinks(cwd, args[2], raw),
29
+ 'schema-drift': () => {
30
+ const rest = args.slice(2);
31
+ const skipFlag = rest.includes('--skip');
32
+ const phaseArg = rest.find((arg) => !arg.startsWith('-'));
33
+ verify.cmdVerifySchemaDrift(cwd, phaseArg, skipFlag, raw);
34
+ },
35
+ // verify codebase-drift dispatches direct to CJS — drift is out-of-seam
36
+ // per ADR/PRD 3524 §3 / L160 (CJS-only by design). Routing through
37
+ // recursive dispatch would re-enter this router path.
38
+ 'codebase-drift': () => verify.cmdVerifyCodebaseDrift(cwd, raw),
39
+ },
40
+ });
41
+ }
42
+ module.exports = {
43
+ routeVerifyCommand,
44
+ };