@opengsd/gsd-pi 1.3.0 → 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 (912) hide show
  1. package/README.md +10 -10
  2. package/dist/cli.js +32 -4
  3. package/dist/headless-answers.js +1 -1
  4. package/dist/headless-context.js +0 -1
  5. package/dist/headless-ui.d.ts +1 -1
  6. package/dist/headless-ui.js +1 -1
  7. package/dist/headless.js +1 -1
  8. package/dist/help-text.js +29 -0
  9. package/dist/hermes-integration-install.d.ts +17 -0
  10. package/dist/hermes-integration-install.js +199 -0
  11. package/dist/jiti-workspace-aliases.d.ts +11 -2
  12. package/dist/jiti-workspace-aliases.js +19 -3
  13. package/dist/read-cli.d.ts +23 -0
  14. package/dist/read-cli.js +90 -0
  15. package/dist/resource-loader.d.ts +3 -3
  16. package/dist/resource-loader.js +4 -13
  17. package/dist/resources/.managed-resources-content-hash +1 -1
  18. package/dist/resources/GSD-WORKFLOW.md +22 -22
  19. package/dist/resources/extensions/claude-code-cli/index.js +7 -1
  20. package/dist/resources/extensions/claude-code-cli/models.js +9 -0
  21. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +84 -22
  22. package/dist/resources/extensions/google-cli/stream-adapter.js +82 -15
  23. package/dist/resources/extensions/gsd/artifact-verification.js +427 -0
  24. package/dist/resources/extensions/gsd/auto/dispatch-history.js +6 -1
  25. package/dist/resources/extensions/gsd/auto/loop.js +67 -2
  26. package/dist/resources/extensions/gsd/auto/orchestrator.js +28 -10
  27. package/dist/resources/extensions/gsd/auto/session.js +11 -0
  28. package/dist/resources/extensions/gsd/auto/verification-retry-policy.js +1 -1
  29. package/dist/resources/extensions/gsd/auto/workflow-kernel.js +15 -1
  30. package/dist/resources/extensions/gsd/auto-artifact-paths.js +108 -19
  31. package/dist/resources/extensions/gsd/auto-budget.js +5 -1
  32. package/dist/resources/extensions/gsd/auto-dispatch.js +62 -27
  33. package/dist/resources/extensions/gsd/auto-model-selection.js +8 -5
  34. package/dist/resources/extensions/gsd/auto-post-unit.js +28 -22
  35. package/dist/resources/extensions/gsd/auto-prompts.js +68 -43
  36. package/dist/resources/extensions/gsd/auto-recovery.js +14 -483
  37. package/dist/resources/extensions/gsd/auto-runtime-state.js +17 -5
  38. package/dist/resources/extensions/gsd/auto-start.js +56 -30
  39. package/dist/resources/extensions/gsd/auto-timeout-recovery.js +3 -3
  40. package/dist/resources/extensions/gsd/auto-verification.js +10 -4
  41. package/dist/resources/extensions/gsd/auto-worktree.js +117 -91
  42. package/dist/resources/extensions/gsd/auto.js +40 -15
  43. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +141 -65
  44. package/dist/resources/extensions/gsd/bootstrap/core-session-tools.js +39 -0
  45. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +11 -5
  46. package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +2 -0
  47. package/dist/resources/extensions/gsd/bootstrap/fallback-continuation.js +25 -0
  48. package/dist/resources/extensions/gsd/bootstrap/register-extension.js +23 -1
  49. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +117 -27
  50. package/dist/resources/extensions/gsd/bootstrap/system-context.js +190 -43
  51. package/dist/resources/extensions/gsd/bootstrap/tool-call-loop-guard.js +96 -10
  52. package/dist/resources/extensions/gsd/bootstrap/tool-search-shim.js +22 -3
  53. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +73 -16
  54. package/dist/resources/extensions/gsd/closeout-consistency-gate.js +95 -5
  55. package/dist/resources/extensions/gsd/codebase-generator.js +5 -8
  56. package/dist/resources/extensions/gsd/commands/catalog.js +6 -0
  57. package/dist/resources/extensions/gsd/commands/dispatcher.js +3 -0
  58. package/dist/resources/extensions/gsd/commands/gsd-core-aliases-handler.js +39 -0
  59. package/dist/resources/extensions/gsd/commands/gsd-core-aliases.js +44 -0
  60. package/dist/resources/extensions/gsd/commands/handlers/auto.js +1 -1
  61. package/dist/resources/extensions/gsd/commands/handlers/core.js +30 -0
  62. package/dist/resources/extensions/gsd/commands/handlers/ops.js +225 -1
  63. package/dist/resources/extensions/gsd/commands-cmux.js +3 -1
  64. package/dist/resources/extensions/gsd/commands-context.js +19 -1
  65. package/dist/resources/extensions/gsd/commands-gsd-core.js +868 -0
  66. package/dist/resources/extensions/gsd/commands-handlers.js +67 -1
  67. package/dist/resources/extensions/gsd/commands-maintenance.js +79 -2
  68. package/dist/resources/extensions/gsd/commands-prefs-wizard.js +23 -12
  69. package/dist/resources/extensions/gsd/commands-usage.js +1 -1
  70. package/dist/resources/extensions/gsd/commands-verdict.js +17 -11
  71. package/dist/resources/extensions/gsd/commands-worktree.js +12 -10
  72. package/dist/resources/extensions/gsd/compat/compat-marker.js +172 -0
  73. package/dist/resources/extensions/gsd/compat/index.js +3 -0
  74. package/dist/resources/extensions/gsd/compat/planning-compat.js +142 -0
  75. package/dist/resources/extensions/gsd/config-overlay.js +2 -2
  76. package/dist/resources/extensions/gsd/consent-question.js +12 -0
  77. package/dist/resources/extensions/gsd/consent-verdict.js +10 -0
  78. package/dist/resources/extensions/gsd/dashboard-overlay.js +71 -6
  79. package/dist/resources/extensions/gsd/db/engine.js +31 -1
  80. package/dist/resources/extensions/gsd/db/queries.js +114 -0
  81. package/dist/resources/extensions/gsd/db/unit-dispatches.js +22 -1
  82. package/dist/resources/extensions/gsd/db-memory-fts-schema.js +34 -0
  83. package/dist/resources/extensions/gsd/db-workspace.js +68 -4
  84. package/dist/resources/extensions/gsd/delegation-policy.js +1 -1
  85. package/dist/resources/extensions/gsd/discussion-handoff.js +9 -5
  86. package/dist/resources/extensions/gsd/docs/preferences-reference.md +2 -2
  87. package/dist/resources/extensions/gsd/doctor-engine-checks.js +192 -4
  88. package/dist/resources/extensions/gsd/doctor-git-checks.js +25 -3
  89. package/dist/resources/extensions/gsd/doctor-providers.js +92 -8
  90. package/dist/resources/extensions/gsd/doctor-runtime-checks.js +5 -15
  91. package/dist/resources/extensions/gsd/doctor.js +28 -7
  92. package/dist/resources/extensions/gsd/error-classifier.js +13 -1
  93. package/dist/resources/extensions/gsd/escalation.js +11 -4
  94. package/dist/resources/extensions/gsd/exec-sandbox.js +53 -11
  95. package/dist/resources/extensions/gsd/export-html.js +10 -3
  96. package/dist/resources/extensions/gsd/export.js +73 -0
  97. package/dist/resources/extensions/gsd/file-lock.js +1 -1
  98. package/dist/resources/extensions/gsd/flat-phase-migration.js +221 -0
  99. package/dist/resources/extensions/gsd/forensics.js +4 -33
  100. package/dist/resources/extensions/gsd/git-service.js +68 -8
  101. package/dist/resources/extensions/gsd/gitignore.js +10 -3
  102. package/dist/resources/extensions/gsd/guidance.js +7 -7
  103. package/dist/resources/extensions/gsd/guided-flow-queue.js +66 -5
  104. package/dist/resources/extensions/gsd/guided-flow.js +11 -6
  105. package/dist/resources/extensions/gsd/health-widget.js +55 -29
  106. package/dist/resources/extensions/gsd/json-persistence.js +20 -0
  107. package/dist/resources/extensions/gsd/knowledge-backfill.js +18 -11
  108. package/dist/resources/extensions/gsd/layout-policy.js +77 -0
  109. package/dist/resources/extensions/gsd/markdown-renderer.js +396 -122
  110. package/dist/resources/extensions/gsd/mcp-filter.js +44 -10
  111. package/dist/resources/extensions/gsd/md-importer.js +153 -51
  112. package/dist/resources/extensions/gsd/memory-backfill.js +28 -21
  113. package/dist/resources/extensions/gsd/memory-consolidation-scanner.js +44 -21
  114. package/dist/resources/extensions/gsd/metrics.js +22 -14
  115. package/dist/resources/extensions/gsd/migrate/layout-detect.js +32 -0
  116. package/dist/resources/extensions/gsd/migrate/planning-writer.js +203 -0
  117. package/dist/resources/extensions/gsd/migrate-external.js +62 -8
  118. package/dist/resources/extensions/gsd/migration-auto-check.js +27 -14
  119. package/dist/resources/extensions/gsd/milestone-actions.js +5 -3
  120. package/dist/resources/extensions/gsd/milestone-closeout.js +12 -2
  121. package/dist/resources/extensions/gsd/milestone-ids.js +79 -18
  122. package/dist/resources/extensions/gsd/milestone-implementation-evidence.js +26 -20
  123. package/dist/resources/extensions/gsd/milestone-planning-persistence.js +8 -0
  124. package/dist/resources/extensions/gsd/milestone-validation-verdict.js +7 -4
  125. package/dist/resources/extensions/gsd/model-router.js +79 -20
  126. package/dist/resources/extensions/gsd/notification-store.js +22 -29
  127. package/dist/resources/extensions/gsd/notifications.js +36 -7
  128. package/dist/resources/extensions/gsd/observability-validator.js +12 -4
  129. package/dist/resources/extensions/gsd/orphan-stash-audit.js +92 -16
  130. package/dist/resources/extensions/gsd/parallel-monitor-overlay.js +133 -35
  131. package/dist/resources/extensions/gsd/parsers-legacy.js +40 -14
  132. package/dist/resources/extensions/gsd/paths.js +356 -44
  133. package/dist/resources/extensions/gsd/planning-depth.js +2 -1
  134. package/dist/resources/extensions/gsd/post-execution-checks.js +26 -3
  135. package/dist/resources/extensions/gsd/preferences-models.js +23 -11
  136. package/dist/resources/extensions/gsd/preferences.js +62 -13
  137. package/dist/resources/extensions/gsd/prompts/ai-integration-phase.md +28 -0
  138. package/dist/resources/extensions/gsd/prompts/audit-fix.md +39 -0
  139. package/dist/resources/extensions/gsd/prompts/audit-milestone.md +26 -0
  140. package/dist/resources/extensions/gsd/prompts/audit-uat.md +24 -0
  141. package/dist/resources/extensions/gsd/prompts/autonomous.md +31 -0
  142. package/dist/resources/extensions/gsd/prompts/code-review.md +39 -0
  143. package/dist/resources/extensions/gsd/prompts/complete-slice.md +21 -16
  144. package/dist/resources/extensions/gsd/prompts/discuss-phase.md +31 -0
  145. package/dist/resources/extensions/gsd/prompts/docs-update.md +13 -0
  146. package/dist/resources/extensions/gsd/prompts/execute-phase.md +33 -0
  147. package/dist/resources/extensions/gsd/prompts/explore.md +58 -0
  148. package/dist/resources/extensions/gsd/prompts/graphify.md +27 -0
  149. package/dist/resources/extensions/gsd/prompts/health.md +37 -0
  150. package/dist/resources/extensions/gsd/prompts/import.md +30 -0
  151. package/dist/resources/extensions/gsd/prompts/inbox.md +27 -0
  152. package/dist/resources/extensions/gsd/prompts/ingest-docs.md +30 -0
  153. package/dist/resources/extensions/gsd/prompts/manager.md +21 -0
  154. package/dist/resources/extensions/gsd/prompts/map-codebase.md +42 -0
  155. package/dist/resources/extensions/gsd/prompts/milestone-summary.md +27 -0
  156. package/dist/resources/extensions/gsd/prompts/mvp-phase.md +23 -0
  157. package/dist/resources/extensions/gsd/prompts/pause-work.md +24 -0
  158. package/dist/resources/extensions/gsd/prompts/phase.md +22 -0
  159. package/dist/resources/extensions/gsd/prompts/plan-milestone.md +2 -2
  160. package/dist/resources/extensions/gsd/prompts/plan-phase.md +34 -0
  161. package/dist/resources/extensions/gsd/prompts/plan-review-convergence.md +34 -0
  162. package/dist/resources/extensions/gsd/prompts/plan-slice.md +3 -3
  163. package/dist/resources/extensions/gsd/prompts/profile-user.md +28 -0
  164. package/dist/resources/extensions/gsd/prompts/progress.md +30 -0
  165. package/dist/resources/extensions/gsd/prompts/resume-work.md +20 -0
  166. package/dist/resources/extensions/gsd/prompts/review-backlog.md +21 -0
  167. package/dist/resources/extensions/gsd/prompts/review.md +27 -0
  168. package/dist/resources/extensions/gsd/prompts/secure-phase.md +24 -0
  169. package/dist/resources/extensions/gsd/prompts/settings.md +24 -0
  170. package/dist/resources/extensions/gsd/prompts/sketch.md +59 -0
  171. package/dist/resources/extensions/gsd/prompts/spec-phase.md +29 -0
  172. package/dist/resources/extensions/gsd/prompts/spike.md +59 -0
  173. package/dist/resources/extensions/gsd/prompts/stats.md +43 -0
  174. package/dist/resources/extensions/gsd/prompts/surface.md +25 -0
  175. package/dist/resources/extensions/gsd/prompts/thread.md +24 -0
  176. package/dist/resources/extensions/gsd/prompts/ui-phase.md +29 -0
  177. package/dist/resources/extensions/gsd/prompts/ui-review.md +29 -0
  178. package/dist/resources/extensions/gsd/prompts/ultraplan-phase.md +24 -0
  179. package/dist/resources/extensions/gsd/prompts/validate-phase.md +26 -0
  180. package/dist/resources/extensions/gsd/prompts/verify-work.md +24 -0
  181. package/dist/resources/extensions/gsd/prompts/workspace.md +22 -0
  182. package/dist/resources/extensions/gsd/prompts/workstreams.md +24 -0
  183. package/dist/resources/extensions/gsd/queue-order.js +3 -2
  184. package/dist/resources/extensions/gsd/quick.js +45 -2
  185. package/dist/resources/extensions/gsd/recovery-classification.js +8 -0
  186. package/dist/resources/extensions/gsd/roadmap-slices.js +1 -1
  187. package/dist/resources/extensions/gsd/root-write-leak-guard.js +7 -1
  188. package/dist/resources/extensions/gsd/safety/content-validator.js +2 -1
  189. package/dist/resources/extensions/gsd/safety/destructive-guard.js +8 -1
  190. package/dist/resources/extensions/gsd/safety/evidence-collector.js +16 -1
  191. package/dist/resources/extensions/gsd/safety/evidence-cross-ref.js +43 -1
  192. package/dist/resources/extensions/gsd/safety/file-change-validator.js +5 -2
  193. package/dist/resources/extensions/gsd/service-tier.js +2 -1
  194. package/dist/resources/extensions/gsd/session-forensics.js +11 -1
  195. package/dist/resources/extensions/gsd/session-lock.js +7 -6
  196. package/dist/resources/extensions/gsd/skills/gsd-headless/SKILL.md +3 -0
  197. package/dist/resources/extensions/gsd/skills/gsd-headless/references/commands.md +51 -0
  198. package/dist/resources/extensions/gsd/state/derive/cache.js +28 -0
  199. package/dist/resources/extensions/gsd/state/derive/db-open.js +39 -0
  200. package/dist/resources/extensions/gsd/state/derive/from-db.js +452 -0
  201. package/dist/resources/extensions/gsd/state/derive/index.js +75 -0
  202. package/dist/resources/extensions/gsd/state/derive/interrupted-work.js +21 -0
  203. package/dist/resources/extensions/gsd/state-reconciliation/drift/artifact-db.js +38 -4
  204. package/dist/resources/extensions/gsd/state-reconciliation/drift/completion.js +24 -3
  205. package/dist/resources/extensions/gsd/state-reconciliation/drift/external-markdown-edit.js +82 -0
  206. package/dist/resources/extensions/gsd/state-reconciliation/drift/external-planning-edit.js +142 -0
  207. package/dist/resources/extensions/gsd/state-reconciliation/drift/project-md.js +19 -6
  208. package/dist/resources/extensions/gsd/state-reconciliation/drift/roadmap.js +2 -2
  209. package/dist/resources/extensions/gsd/state-reconciliation/drift/stale-render.js +138 -19
  210. package/dist/resources/extensions/gsd/state-reconciliation/index.js +84 -26
  211. package/dist/resources/extensions/gsd/state-reconciliation/registry.js +34 -18
  212. package/dist/resources/extensions/gsd/state.js +13 -581
  213. package/dist/resources/extensions/gsd/sync-lock.js +11 -18
  214. package/dist/resources/extensions/gsd/tool-surface-readiness.js +205 -16
  215. package/dist/resources/extensions/gsd/tools/complete-milestone.js +8 -4
  216. package/dist/resources/extensions/gsd/tools/complete-slice.js +14 -4
  217. package/dist/resources/extensions/gsd/tools/complete-task.js +58 -15
  218. package/dist/resources/extensions/gsd/tools/exec-tool.js +7 -2
  219. package/dist/resources/extensions/gsd/tools/plan-slice.js +60 -47
  220. package/dist/resources/extensions/gsd/tools/plan-task.js +40 -2
  221. package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +9 -3
  222. package/dist/resources/extensions/gsd/tools/validate-milestone.js +8 -3
  223. package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +44 -5
  224. package/dist/resources/extensions/gsd/triage-resolution.js +14 -7
  225. package/dist/resources/extensions/gsd/undo.js +51 -15
  226. package/dist/resources/extensions/gsd/unit-context-composer.js +23 -7
  227. package/dist/resources/extensions/gsd/unit-registry.js +63 -9
  228. package/dist/resources/extensions/gsd/unmerged-milestone-guard.js +91 -5
  229. package/dist/resources/extensions/gsd/validation-block-guard.js +54 -4
  230. package/dist/resources/extensions/gsd/verification-gate.js +7 -0
  231. package/dist/resources/extensions/gsd/visualizer-data.js +35 -0
  232. package/dist/resources/extensions/gsd/visualizer-views.js +21 -2
  233. package/dist/resources/extensions/gsd/workflow-manifest.js +126 -13
  234. package/dist/resources/extensions/gsd/workflow-mcp.js +9 -1
  235. package/dist/resources/extensions/gsd/workflow-projections.js +44 -18
  236. package/dist/resources/extensions/gsd/workspace-git-preflight.js +30 -1
  237. package/dist/resources/extensions/gsd/worktree-command.js +6 -6
  238. package/dist/resources/extensions/gsd/worktree-health.js +6 -3
  239. package/dist/resources/extensions/gsd/worktree-manager.js +59 -17
  240. package/dist/resources/extensions/gsd/worktree-safety.js +20 -11
  241. package/dist/resources/extensions/mcp-client/manager.js +3 -3
  242. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  243. package/dist/update-check.js +15 -4
  244. package/dist/web/standalone/.next/BUILD_ID +1 -1
  245. package/dist/web/standalone/.next/app-path-routes-manifest.json +11 -11
  246. package/dist/web/standalone/.next/build-manifest.json +3 -3
  247. package/dist/web/standalone/.next/react-loadable-manifest.json +9 -9
  248. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  249. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  250. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  251. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  252. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  253. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  254. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  255. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  256. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  257. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  258. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  259. package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
  260. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  261. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  262. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  263. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  264. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  265. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  266. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  267. package/dist/web/standalone/.next/server/app/index.html +1 -1
  268. package/dist/web/standalone/.next/server/app/index.rsc +2 -2
  269. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  270. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +2 -2
  271. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  272. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  273. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  274. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  275. package/dist/web/standalone/.next/server/app-paths-manifest.json +11 -11
  276. package/dist/web/standalone/.next/server/chunks/1128.js +1 -1
  277. package/dist/web/standalone/.next/server/chunks/5124.js +1 -1
  278. package/dist/web/standalone/.next/server/chunks/8357.js +1 -1
  279. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  280. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  281. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  282. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  283. package/dist/web/standalone/.next/static/chunks/{2659.b7b129ee6a769448.js → 2659.58e950899a9bb82f.js} +1 -1
  284. package/dist/web/standalone/.next/static/chunks/2772.a7c1fcc69a4685ef.js +1 -0
  285. package/dist/web/standalone/.next/static/chunks/{3616.3c60753b8ffcbd2e.js → 3616.61a2af74bb8833c8.js} +1 -1
  286. package/dist/web/standalone/.next/static/chunks/{4283.e4873b058df143a1.js → 4283.d0d9e0a955e441cb.js} +2 -2
  287. package/dist/web/standalone/.next/static/chunks/{5826.a46ecdd1cfe8dabc.js → 5826.5421d66c72b9f34e.js} +1 -1
  288. package/dist/web/standalone/.next/static/chunks/8785.e29b3134cab1d153.js +1 -0
  289. package/dist/web/standalone/.next/static/chunks/8937.640dc9c2aaa1dfad.js +10 -0
  290. package/dist/web/standalone/.next/static/chunks/app/{page-a48b7c48333b31c8.js → page-bc4c723c6a19c6f0.js} +1 -1
  291. package/dist/web/standalone/.next/static/chunks/webpack-9c401904f87ded16.js +1 -0
  292. package/dist/web/standalone/node_modules/@gsd/native/package.json +1 -1
  293. package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
  294. package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
  295. package/dist/web-mode.d.ts +3 -1
  296. package/dist/web-mode.js +7 -5
  297. package/integrations/hermes/README.md +48 -0
  298. package/integrations/hermes/docs/setup.md +272 -0
  299. package/integrations/hermes/docs/upstream-hermes-pr.md +40 -0
  300. package/integrations/hermes/open_gsd_hermes/__init__.py +105 -0
  301. package/integrations/hermes/open_gsd_hermes/binding.py +107 -0
  302. package/integrations/hermes/open_gsd_hermes/commands.py +186 -0
  303. package/integrations/hermes/open_gsd_hermes/config.py +59 -0
  304. package/integrations/hermes/open_gsd_hermes/credentials.py +51 -0
  305. package/integrations/hermes/open_gsd_hermes/cron.py +85 -0
  306. package/integrations/hermes/open_gsd_hermes/formatting.py +13 -0
  307. package/integrations/hermes/open_gsd_hermes/gsd_client.py +269 -0
  308. package/integrations/hermes/open_gsd_hermes/inject.py +31 -0
  309. package/integrations/hermes/open_gsd_hermes/memory.py +66 -0
  310. package/integrations/hermes/open_gsd_hermes/notifications.py +71 -0
  311. package/integrations/hermes/open_gsd_hermes/snapshot.py +42 -0
  312. package/integrations/hermes/open_gsd_hermes/supervisor.py +180 -0
  313. package/integrations/hermes/open_gsd_hermes/types.py +100 -0
  314. package/integrations/hermes/plugin.yaml +38 -0
  315. package/integrations/hermes/pyproject.toml +32 -0
  316. package/integrations/hermes/scripts/preflight.sh +92 -0
  317. package/integrations/hermes/tests/fixtures/minimal-project/.gsd/STATE.md +17 -0
  318. package/integrations/hermes/tests/golden/memory_prefetch.txt +5 -0
  319. package/integrations/hermes/tests/golden/snapshot.txt +8 -0
  320. package/integrations/hermes/tests/test_binding.py +103 -0
  321. package/integrations/hermes/tests/test_config.py +36 -0
  322. package/integrations/hermes/tests/test_cron.py +34 -0
  323. package/integrations/hermes/tests/test_gsd_client_cache.py +120 -0
  324. package/integrations/hermes/tests/test_memory.py +59 -0
  325. package/integrations/hermes/tests/test_read_cli_contract.py +50 -0
  326. package/integrations/hermes/tests/test_register.py +56 -0
  327. package/integrations/hermes/tests/test_snapshot.py +53 -0
  328. package/integrations/hermes/tests/test_supervisor_fsm.py +581 -0
  329. package/package.json +7 -6
  330. package/packages/cloud-mcp-gateway/dist/runtime-registry.d.ts +8 -0
  331. package/packages/cloud-mcp-gateway/dist/runtime-registry.d.ts.map +1 -1
  332. package/packages/cloud-mcp-gateway/dist/runtime-registry.js +19 -2
  333. package/packages/cloud-mcp-gateway/dist/runtime-registry.js.map +1 -1
  334. package/packages/cloud-mcp-gateway/dist/runtime-registry.test.js +71 -2
  335. package/packages/cloud-mcp-gateway/dist/runtime-registry.test.js.map +1 -1
  336. package/packages/cloud-mcp-gateway/package.json +2 -2
  337. package/packages/contracts/dist/workflow.d.ts +1 -0
  338. package/packages/contracts/dist/workflow.d.ts.map +1 -1
  339. package/packages/contracts/dist/workflow.js +2 -0
  340. package/packages/contracts/dist/workflow.js.map +1 -1
  341. package/packages/contracts/package.json +1 -1
  342. package/packages/daemon/package.json +4 -4
  343. package/packages/gsd-agent-core/dist/agent-session.d.ts +1 -0
  344. package/packages/gsd-agent-core/dist/agent-session.d.ts.map +1 -1
  345. package/packages/gsd-agent-core/dist/agent-session.js +3 -0
  346. package/packages/gsd-agent-core/dist/agent-session.js.map +1 -1
  347. package/packages/gsd-agent-core/dist/extension-ui-snapshot.d.ts +41 -0
  348. package/packages/gsd-agent-core/dist/extension-ui-snapshot.d.ts.map +1 -0
  349. package/packages/gsd-agent-core/dist/extension-ui-snapshot.js +62 -0
  350. package/packages/gsd-agent-core/dist/extension-ui-snapshot.js.map +1 -0
  351. package/packages/gsd-agent-core/dist/index.d.ts +2 -0
  352. package/packages/gsd-agent-core/dist/index.d.ts.map +1 -1
  353. package/packages/gsd-agent-core/dist/index.js +2 -0
  354. package/packages/gsd-agent-core/dist/index.js.map +1 -1
  355. package/packages/gsd-agent-core/dist/session/agent-session-events.js +1 -1
  356. package/packages/gsd-agent-core/dist/session/agent-session-events.js.map +1 -1
  357. package/packages/gsd-agent-core/dist/session/agent-session-host.d.ts +1 -0
  358. package/packages/gsd-agent-core/dist/session/agent-session-host.d.ts.map +1 -1
  359. package/packages/gsd-agent-core/dist/session/agent-session-host.js.map +1 -1
  360. package/packages/gsd-agent-core/dist/session/agent-session-prompt.d.ts +5 -0
  361. package/packages/gsd-agent-core/dist/session/agent-session-prompt.d.ts.map +1 -1
  362. package/packages/gsd-agent-core/dist/session/agent-session-prompt.js +60 -3
  363. package/packages/gsd-agent-core/dist/session/agent-session-prompt.js.map +1 -1
  364. package/packages/gsd-agent-core/dist/transcript-store.d.ts +58 -0
  365. package/packages/gsd-agent-core/dist/transcript-store.d.ts.map +1 -0
  366. package/packages/gsd-agent-core/dist/transcript-store.js +132 -0
  367. package/packages/gsd-agent-core/dist/transcript-store.js.map +1 -0
  368. package/packages/gsd-agent-core/package.json +5 -5
  369. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts +2 -0
  370. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  371. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js +25 -11
  372. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js.map +1 -1
  373. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller-latency.d.ts +4 -0
  374. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller-latency.d.ts.map +1 -0
  375. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller-latency.js +7 -0
  376. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller-latency.js.map +1 -0
  377. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts +3 -24
  378. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  379. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js +26 -829
  380. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  381. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-handoff-filter.d.ts +58 -0
  382. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-handoff-filter.d.ts.map +1 -0
  383. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-handoff-filter.js +312 -0
  384. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-handoff-filter.js.map +1 -0
  385. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-pinned-zone.d.ts +31 -0
  386. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-pinned-zone.d.ts.map +1 -0
  387. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-pinned-zone.js +130 -0
  388. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-pinned-zone.js.map +1 -0
  389. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-segment-walker.d.ts +15 -0
  390. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-segment-walker.d.ts.map +1 -0
  391. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-segment-walker.js +258 -0
  392. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-segment-walker.js.map +1 -0
  393. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-tool-rollup.d.ts +13 -0
  394. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-tool-rollup.d.ts.map +1 -0
  395. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-tool-rollup.js +118 -0
  396. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-tool-rollup.js.map +1 -0
  397. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts +9 -0
  398. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts.map +1 -1
  399. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.js +1 -1
  400. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.js.map +1 -1
  401. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-ui-state.d.ts +54 -0
  402. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-ui-state.d.ts.map +1 -0
  403. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-ui-state.js +20 -0
  404. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-ui-state.js.map +1 -0
  405. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts +4 -1
  406. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  407. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js +9 -0
  408. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js.map +1 -1
  409. package/packages/gsd-agent-modes/dist/modes/interactive/streaming-render-state.d.ts +56 -0
  410. package/packages/gsd-agent-modes/dist/modes/interactive/streaming-render-state.d.ts.map +1 -0
  411. package/packages/gsd-agent-modes/dist/modes/interactive/streaming-render-state.js +44 -0
  412. package/packages/gsd-agent-modes/dist/modes/interactive/streaming-render-state.js.map +1 -0
  413. package/packages/gsd-agent-modes/dist/modes/interactive/tui-transcript-tracker.d.ts +5 -0
  414. package/packages/gsd-agent-modes/dist/modes/interactive/tui-transcript-tracker.d.ts.map +1 -0
  415. package/packages/gsd-agent-modes/dist/modes/interactive/tui-transcript-tracker.js +77 -0
  416. package/packages/gsd-agent-modes/dist/modes/interactive/tui-transcript-tracker.js.map +1 -0
  417. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.d.ts +2 -0
  418. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  419. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.js +23 -5
  420. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.js.map +1 -1
  421. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  422. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js +18 -0
  423. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js.map +1 -1
  424. package/packages/gsd-agent-modes/package.json +7 -7
  425. package/packages/mcp-server/README.md +11 -1
  426. package/packages/mcp-server/dist/cli-errors.d.ts +11 -0
  427. package/packages/mcp-server/dist/cli-errors.d.ts.map +1 -1
  428. package/packages/mcp-server/dist/cli-errors.js +12 -0
  429. package/packages/mcp-server/dist/cli-errors.js.map +1 -1
  430. package/packages/mcp-server/dist/cli-runner.d.ts.map +1 -1
  431. package/packages/mcp-server/dist/cli-runner.js +33 -0
  432. package/packages/mcp-server/dist/cli-runner.js.map +1 -1
  433. package/packages/mcp-server/dist/cli.d.ts +1 -0
  434. package/packages/mcp-server/dist/cli.d.ts.map +1 -1
  435. package/packages/mcp-server/dist/cli.js +1 -0
  436. package/packages/mcp-server/dist/cli.js.map +1 -1
  437. package/packages/mcp-server/dist/server.d.ts +30 -1
  438. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  439. package/packages/mcp-server/dist/server.js +85 -6
  440. package/packages/mcp-server/dist/server.js.map +1 -1
  441. package/packages/mcp-server/dist/workflow-tools.d.ts +13 -1
  442. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  443. package/packages/mcp-server/dist/workflow-tools.js +35 -21
  444. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  445. package/packages/mcp-server/package.json +21 -5
  446. package/packages/native/package.json +1 -1
  447. package/packages/pi-agent-core/dist/agent-loop.js +3 -2
  448. package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
  449. package/packages/pi-agent-core/package.json +1 -1
  450. package/packages/pi-ai/dist/models.generated.d.ts +46 -0
  451. package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
  452. package/packages/pi-ai/dist/models.generated.js +38 -0
  453. package/packages/pi-ai/dist/models.generated.js.map +1 -1
  454. package/packages/pi-ai/package.json +1 -1
  455. package/packages/pi-coding-agent/README.md +3 -2
  456. package/packages/pi-coding-agent/dist/core/session-manager-context.d.ts +9 -0
  457. package/packages/pi-coding-agent/dist/core/session-manager-context.d.ts.map +1 -0
  458. package/packages/pi-coding-agent/dist/core/session-manager-context.js +94 -0
  459. package/packages/pi-coding-agent/dist/core/session-manager-context.js.map +1 -0
  460. package/packages/pi-coding-agent/dist/core/session-manager-list.d.ts +8 -0
  461. package/packages/pi-coding-agent/dist/core/session-manager-list.d.ts.map +1 -0
  462. package/packages/pi-coding-agent/dist/core/session-manager-list.js +244 -0
  463. package/packages/pi-coding-agent/dist/core/session-manager-list.js.map +1 -0
  464. package/packages/pi-coding-agent/dist/core/session-manager-migration.d.ts +12 -0
  465. package/packages/pi-coding-agent/dist/core/session-manager-migration.d.ts.map +1 -0
  466. package/packages/pi-coding-agent/dist/core/session-manager-migration.js +84 -0
  467. package/packages/pi-coding-agent/dist/core/session-manager-migration.js.map +1 -0
  468. package/packages/pi-coding-agent/dist/core/session-manager-types.d.ts +135 -0
  469. package/packages/pi-coding-agent/dist/core/session-manager-types.d.ts.map +1 -0
  470. package/packages/pi-coding-agent/dist/core/session-manager-types.js +2 -0
  471. package/packages/pi-coding-agent/dist/core/session-manager-types.js.map +1 -0
  472. package/packages/pi-coding-agent/dist/core/session-manager.d.ts +6 -154
  473. package/packages/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -1
  474. package/packages/pi-coding-agent/dist/core/session-manager.js +22 -459
  475. package/packages/pi-coding-agent/dist/core/session-manager.js.map +1 -1
  476. package/packages/pi-coding-agent/dist/theme/theme-schema.d.ts +75 -75
  477. package/packages/pi-coding-agent/dist/theme/theme-schema.d.ts.map +1 -1
  478. package/packages/pi-coding-agent/dist/theme/theme-schema.js +1 -1
  479. package/packages/pi-coding-agent/dist/theme/theme-schema.js.map +1 -1
  480. package/packages/pi-coding-agent/dist/theme/theme.d.ts.map +1 -1
  481. package/packages/pi-coding-agent/dist/theme/theme.js +11 -7
  482. package/packages/pi-coding-agent/dist/theme/theme.js.map +1 -1
  483. package/packages/pi-coding-agent/package.json +7 -7
  484. package/packages/pi-tui/package.json +2 -2
  485. package/packages/rpc-client/package.json +2 -2
  486. package/pkg/dist/theme/theme-schema.d.ts +75 -75
  487. package/pkg/dist/theme/theme-schema.d.ts.map +1 -1
  488. package/pkg/dist/theme/theme-schema.js +1 -1
  489. package/pkg/dist/theme/theme-schema.js.map +1 -1
  490. package/pkg/dist/theme/theme.d.ts.map +1 -1
  491. package/pkg/dist/theme/theme.js +11 -7
  492. package/pkg/dist/theme/theme.js.map +1 -1
  493. package/pkg/package.json +1 -1
  494. package/src/resources/GSD-WORKFLOW.md +22 -22
  495. package/src/resources/extensions/claude-code-cli/index.ts +8 -1
  496. package/src/resources/extensions/claude-code-cli/models.ts +9 -0
  497. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +103 -22
  498. package/src/resources/extensions/claude-code-cli/tests/index.test.ts +61 -0
  499. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +262 -10
  500. package/src/resources/extensions/google-cli/stream-adapter.ts +106 -19
  501. package/src/resources/extensions/gsd/artifact-verification.ts +464 -0
  502. package/src/resources/extensions/gsd/auto/dispatch-history.ts +19 -1
  503. package/src/resources/extensions/gsd/auto/loop-deps.ts +1 -0
  504. package/src/resources/extensions/gsd/auto/loop.ts +69 -2
  505. package/src/resources/extensions/gsd/auto/orchestrator.ts +38 -13
  506. package/src/resources/extensions/gsd/auto/session.ts +14 -0
  507. package/src/resources/extensions/gsd/auto/verification-retry-policy.ts +3 -1
  508. package/src/resources/extensions/gsd/auto/workflow-kernel.ts +25 -3
  509. package/src/resources/extensions/gsd/auto-artifact-paths.ts +129 -20
  510. package/src/resources/extensions/gsd/auto-budget.ts +12 -1
  511. package/src/resources/extensions/gsd/auto-dispatch.ts +68 -34
  512. package/src/resources/extensions/gsd/auto-model-selection.ts +8 -1
  513. package/src/resources/extensions/gsd/auto-post-unit.ts +37 -23
  514. package/src/resources/extensions/gsd/auto-prompts.ts +81 -44
  515. package/src/resources/extensions/gsd/auto-recovery.ts +21 -484
  516. package/src/resources/extensions/gsd/auto-runtime-state.ts +17 -5
  517. package/src/resources/extensions/gsd/auto-start.ts +63 -34
  518. package/src/resources/extensions/gsd/auto-timeout-recovery.ts +3 -2
  519. package/src/resources/extensions/gsd/auto-verification.ts +10 -8
  520. package/src/resources/extensions/gsd/auto-worktree.ts +48 -15
  521. package/src/resources/extensions/gsd/auto.ts +46 -11
  522. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +164 -71
  523. package/src/resources/extensions/gsd/bootstrap/core-session-tools.ts +44 -0
  524. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +11 -5
  525. package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +2 -0
  526. package/src/resources/extensions/gsd/bootstrap/fallback-continuation.ts +31 -0
  527. package/src/resources/extensions/gsd/bootstrap/register-extension.ts +23 -1
  528. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +139 -27
  529. package/src/resources/extensions/gsd/bootstrap/system-context.ts +219 -46
  530. package/src/resources/extensions/gsd/bootstrap/tests/write-gate-basepath.test.ts +49 -1
  531. package/src/resources/extensions/gsd/bootstrap/tool-call-loop-guard.ts +104 -10
  532. package/src/resources/extensions/gsd/bootstrap/tool-search-shim.ts +21 -3
  533. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +86 -18
  534. package/src/resources/extensions/gsd/closeout-consistency-gate.ts +109 -4
  535. package/src/resources/extensions/gsd/codebase-generator.ts +6 -9
  536. package/src/resources/extensions/gsd/commands/catalog.ts +6 -0
  537. package/src/resources/extensions/gsd/commands/dispatcher.ts +3 -0
  538. package/src/resources/extensions/gsd/commands/gsd-core-aliases-handler.ts +48 -0
  539. package/src/resources/extensions/gsd/commands/gsd-core-aliases.ts +63 -0
  540. package/src/resources/extensions/gsd/commands/handlers/auto.ts +1 -1
  541. package/src/resources/extensions/gsd/commands/handlers/core.ts +31 -0
  542. package/src/resources/extensions/gsd/commands/handlers/ops.ts +225 -1
  543. package/src/resources/extensions/gsd/commands-cmux.ts +3 -0
  544. package/src/resources/extensions/gsd/commands-context.ts +18 -1
  545. package/src/resources/extensions/gsd/commands-gsd-core.ts +1142 -0
  546. package/src/resources/extensions/gsd/commands-handlers.ts +76 -1
  547. package/src/resources/extensions/gsd/commands-maintenance.ts +98 -2
  548. package/src/resources/extensions/gsd/commands-prefs-wizard.ts +21 -10
  549. package/src/resources/extensions/gsd/commands-usage.ts +1 -1
  550. package/src/resources/extensions/gsd/commands-verdict.ts +16 -15
  551. package/src/resources/extensions/gsd/commands-worktree.ts +12 -10
  552. package/src/resources/extensions/gsd/compat/compat-marker.ts +210 -0
  553. package/src/resources/extensions/gsd/compat/index.ts +12 -0
  554. package/src/resources/extensions/gsd/compat/planning-compat.ts +168 -0
  555. package/src/resources/extensions/gsd/config-overlay.ts +3 -1
  556. package/src/resources/extensions/gsd/consent-question.ts +11 -1
  557. package/src/resources/extensions/gsd/consent-verdict.ts +30 -1
  558. package/src/resources/extensions/gsd/dashboard-overlay.ts +73 -7
  559. package/src/resources/extensions/gsd/db/engine.ts +34 -1
  560. package/src/resources/extensions/gsd/db/queries.ts +157 -0
  561. package/src/resources/extensions/gsd/db/unit-dispatches.ts +24 -0
  562. package/src/resources/extensions/gsd/db-memory-fts-schema.ts +45 -0
  563. package/src/resources/extensions/gsd/db-workspace.ts +76 -3
  564. package/src/resources/extensions/gsd/delegation-policy.ts +1 -1
  565. package/src/resources/extensions/gsd/discussion-handoff.ts +9 -5
  566. package/src/resources/extensions/gsd/docs/preferences-reference.md +2 -2
  567. package/src/resources/extensions/gsd/doctor-engine-checks.ts +233 -5
  568. package/src/resources/extensions/gsd/doctor-git-checks.ts +24 -2
  569. package/src/resources/extensions/gsd/doctor-providers.ts +103 -9
  570. package/src/resources/extensions/gsd/doctor-runtime-checks.ts +5 -15
  571. package/src/resources/extensions/gsd/doctor-types.ts +4 -0
  572. package/src/resources/extensions/gsd/doctor.ts +30 -7
  573. package/src/resources/extensions/gsd/error-classifier.ts +14 -1
  574. package/src/resources/extensions/gsd/escalation.ts +9 -4
  575. package/src/resources/extensions/gsd/exec-sandbox.ts +56 -11
  576. package/src/resources/extensions/gsd/export-html.ts +11 -4
  577. package/src/resources/extensions/gsd/export.ts +88 -1
  578. package/src/resources/extensions/gsd/file-lock.ts +1 -1
  579. package/src/resources/extensions/gsd/flat-phase-migration.ts +249 -0
  580. package/src/resources/extensions/gsd/forensics.ts +4 -34
  581. package/src/resources/extensions/gsd/git-constants.ts +1 -1
  582. package/src/resources/extensions/gsd/git-service.ts +76 -7
  583. package/src/resources/extensions/gsd/gitignore.ts +11 -4
  584. package/src/resources/extensions/gsd/guidance.ts +7 -7
  585. package/src/resources/extensions/gsd/guided-flow-queue.ts +89 -4
  586. package/src/resources/extensions/gsd/guided-flow.ts +11 -6
  587. package/src/resources/extensions/gsd/health-widget.ts +69 -32
  588. package/src/resources/extensions/gsd/json-persistence.ts +20 -0
  589. package/src/resources/extensions/gsd/knowledge-backfill.ts +16 -10
  590. package/src/resources/extensions/gsd/layout-policy.ts +86 -0
  591. package/src/resources/extensions/gsd/markdown-renderer.ts +409 -112
  592. package/src/resources/extensions/gsd/mcp-filter.ts +59 -10
  593. package/src/resources/extensions/gsd/md-importer.ts +215 -65
  594. package/src/resources/extensions/gsd/memory-backfill.ts +26 -20
  595. package/src/resources/extensions/gsd/memory-consolidation-scanner.ts +51 -19
  596. package/src/resources/extensions/gsd/metrics.ts +26 -13
  597. package/src/resources/extensions/gsd/migrate/layout-detect.ts +38 -0
  598. package/src/resources/extensions/gsd/migrate/planning-writer.ts +259 -0
  599. package/src/resources/extensions/gsd/migrate-external.ts +57 -8
  600. package/src/resources/extensions/gsd/migration-auto-check.ts +27 -13
  601. package/src/resources/extensions/gsd/milestone-actions.ts +5 -2
  602. package/src/resources/extensions/gsd/milestone-closeout.ts +13 -2
  603. package/src/resources/extensions/gsd/milestone-ids.ts +78 -19
  604. package/src/resources/extensions/gsd/milestone-implementation-evidence.ts +35 -21
  605. package/src/resources/extensions/gsd/milestone-planning-persistence.ts +8 -0
  606. package/src/resources/extensions/gsd/milestone-validation-verdict.ts +7 -9
  607. package/src/resources/extensions/gsd/model-router.ts +98 -18
  608. package/src/resources/extensions/gsd/notification-store.ts +17 -28
  609. package/src/resources/extensions/gsd/notifications.ts +37 -6
  610. package/src/resources/extensions/gsd/observability-validator.ts +12 -4
  611. package/src/resources/extensions/gsd/orphan-stash-audit.ts +108 -20
  612. package/src/resources/extensions/gsd/parallel-monitor-overlay.ts +151 -31
  613. package/src/resources/extensions/gsd/parsers-legacy.ts +42 -15
  614. package/src/resources/extensions/gsd/paths.ts +348 -39
  615. package/src/resources/extensions/gsd/planning-depth.ts +2 -1
  616. package/src/resources/extensions/gsd/post-execution-checks.ts +43 -3
  617. package/src/resources/extensions/gsd/preferences-models.ts +25 -9
  618. package/src/resources/extensions/gsd/preferences.ts +80 -12
  619. package/src/resources/extensions/gsd/prompts/ai-integration-phase.md +28 -0
  620. package/src/resources/extensions/gsd/prompts/audit-fix.md +39 -0
  621. package/src/resources/extensions/gsd/prompts/audit-milestone.md +26 -0
  622. package/src/resources/extensions/gsd/prompts/audit-uat.md +24 -0
  623. package/src/resources/extensions/gsd/prompts/autonomous.md +31 -0
  624. package/src/resources/extensions/gsd/prompts/code-review.md +39 -0
  625. package/src/resources/extensions/gsd/prompts/complete-slice.md +21 -16
  626. package/src/resources/extensions/gsd/prompts/discuss-phase.md +31 -0
  627. package/src/resources/extensions/gsd/prompts/docs-update.md +13 -0
  628. package/src/resources/extensions/gsd/prompts/execute-phase.md +33 -0
  629. package/src/resources/extensions/gsd/prompts/explore.md +58 -0
  630. package/src/resources/extensions/gsd/prompts/graphify.md +27 -0
  631. package/src/resources/extensions/gsd/prompts/health.md +37 -0
  632. package/src/resources/extensions/gsd/prompts/import.md +30 -0
  633. package/src/resources/extensions/gsd/prompts/inbox.md +27 -0
  634. package/src/resources/extensions/gsd/prompts/ingest-docs.md +30 -0
  635. package/src/resources/extensions/gsd/prompts/manager.md +21 -0
  636. package/src/resources/extensions/gsd/prompts/map-codebase.md +42 -0
  637. package/src/resources/extensions/gsd/prompts/milestone-summary.md +27 -0
  638. package/src/resources/extensions/gsd/prompts/mvp-phase.md +23 -0
  639. package/src/resources/extensions/gsd/prompts/pause-work.md +24 -0
  640. package/src/resources/extensions/gsd/prompts/phase.md +22 -0
  641. package/src/resources/extensions/gsd/prompts/plan-milestone.md +2 -2
  642. package/src/resources/extensions/gsd/prompts/plan-phase.md +34 -0
  643. package/src/resources/extensions/gsd/prompts/plan-review-convergence.md +34 -0
  644. package/src/resources/extensions/gsd/prompts/plan-slice.md +3 -3
  645. package/src/resources/extensions/gsd/prompts/profile-user.md +28 -0
  646. package/src/resources/extensions/gsd/prompts/progress.md +30 -0
  647. package/src/resources/extensions/gsd/prompts/resume-work.md +20 -0
  648. package/src/resources/extensions/gsd/prompts/review-backlog.md +21 -0
  649. package/src/resources/extensions/gsd/prompts/review.md +27 -0
  650. package/src/resources/extensions/gsd/prompts/secure-phase.md +24 -0
  651. package/src/resources/extensions/gsd/prompts/settings.md +24 -0
  652. package/src/resources/extensions/gsd/prompts/sketch.md +59 -0
  653. package/src/resources/extensions/gsd/prompts/spec-phase.md +29 -0
  654. package/src/resources/extensions/gsd/prompts/spike.md +59 -0
  655. package/src/resources/extensions/gsd/prompts/stats.md +43 -0
  656. package/src/resources/extensions/gsd/prompts/surface.md +25 -0
  657. package/src/resources/extensions/gsd/prompts/thread.md +24 -0
  658. package/src/resources/extensions/gsd/prompts/ui-phase.md +29 -0
  659. package/src/resources/extensions/gsd/prompts/ui-review.md +29 -0
  660. package/src/resources/extensions/gsd/prompts/ultraplan-phase.md +24 -0
  661. package/src/resources/extensions/gsd/prompts/validate-phase.md +26 -0
  662. package/src/resources/extensions/gsd/prompts/verify-work.md +24 -0
  663. package/src/resources/extensions/gsd/prompts/workspace.md +22 -0
  664. package/src/resources/extensions/gsd/prompts/workstreams.md +24 -0
  665. package/src/resources/extensions/gsd/queue-order.ts +3 -2
  666. package/src/resources/extensions/gsd/quick.ts +43 -2
  667. package/src/resources/extensions/gsd/recovery-classification.ts +7 -0
  668. package/src/resources/extensions/gsd/roadmap-slices.ts +1 -1
  669. package/src/resources/extensions/gsd/root-write-leak-guard.ts +13 -1
  670. package/src/resources/extensions/gsd/safety/content-validator.ts +2 -1
  671. package/src/resources/extensions/gsd/safety/destructive-guard.ts +9 -1
  672. package/src/resources/extensions/gsd/safety/evidence-collector.ts +16 -1
  673. package/src/resources/extensions/gsd/safety/evidence-cross-ref.ts +45 -1
  674. package/src/resources/extensions/gsd/safety/file-change-validator.ts +8 -2
  675. package/src/resources/extensions/gsd/service-tier.ts +2 -0
  676. package/src/resources/extensions/gsd/session-forensics.ts +11 -1
  677. package/src/resources/extensions/gsd/session-lock.ts +7 -6
  678. package/src/resources/extensions/gsd/skills/gsd-headless/SKILL.md +3 -0
  679. package/src/resources/extensions/gsd/skills/gsd-headless/references/commands.md +51 -0
  680. package/src/resources/extensions/gsd/state/derive/cache.ts +46 -0
  681. package/src/resources/extensions/gsd/state/derive/db-open.ts +45 -0
  682. package/src/resources/extensions/gsd/state/derive/from-db.ts +561 -0
  683. package/src/resources/extensions/gsd/state/derive/index.ts +104 -0
  684. package/src/resources/extensions/gsd/state/derive/interrupted-work.ts +31 -0
  685. package/src/resources/extensions/gsd/state-reconciliation/drift/artifact-db.ts +35 -4
  686. package/src/resources/extensions/gsd/state-reconciliation/drift/completion.ts +22 -2
  687. package/src/resources/extensions/gsd/state-reconciliation/drift/external-markdown-edit.ts +105 -0
  688. package/src/resources/extensions/gsd/state-reconciliation/drift/external-planning-edit.ts +180 -0
  689. package/src/resources/extensions/gsd/state-reconciliation/drift/project-md.ts +19 -6
  690. package/src/resources/extensions/gsd/state-reconciliation/drift/roadmap.ts +2 -2
  691. package/src/resources/extensions/gsd/state-reconciliation/drift/stale-render.ts +176 -30
  692. package/src/resources/extensions/gsd/state-reconciliation/index.ts +86 -27
  693. package/src/resources/extensions/gsd/state-reconciliation/registry.ts +45 -18
  694. package/src/resources/extensions/gsd/state-reconciliation/types.ts +19 -0
  695. package/src/resources/extensions/gsd/state.ts +37 -695
  696. package/src/resources/extensions/gsd/sync-lock.ts +11 -20
  697. package/src/resources/extensions/gsd/tests/__fixtures__/flat-phase/.gsd/phases/01-foundation/01-01-PLAN.md +13 -0
  698. package/src/resources/extensions/gsd/tests/__fixtures__/flat-phase/.gsd/phases/01-foundation/01-ROADMAP.md +8 -0
  699. package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/m001-basic/.gsd/milestones/M001/M001-ROADMAP.md +13 -0
  700. package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/m001-basic/.gsd/milestones/M001/slices/S01/S01-PLAN.md +5 -0
  701. package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/planning-flat-phases/.planning/PROJECT.md +1 -0
  702. package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/planning-flat-phases/.planning/ROADMAP.md +5 -0
  703. package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/planning-flat-phases/.planning/STATE.md +10 -0
  704. package/src/resources/extensions/gsd/tests/__fixtures__/round-trip/planning-flat-phases/.planning/phases/01-foundation/01-01-PLAN.md +13 -0
  705. package/src/resources/extensions/gsd/tests/artifact-retry-cap.test.ts +4 -3
  706. package/src/resources/extensions/gsd/tests/auto-artifact-paths.test.ts +420 -2
  707. package/src/resources/extensions/gsd/tests/auto-budget-alerts.test.ts +14 -5
  708. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +104 -0
  709. package/src/resources/extensions/gsd/tests/auto-migrating-recovery.test.ts +32 -1
  710. package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +15 -12
  711. package/src/resources/extensions/gsd/tests/auto-pause-double-entry-guard.test.ts +36 -0
  712. package/src/resources/extensions/gsd/tests/auto-paused-session-validation.test.ts +11 -2
  713. package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +182 -4
  714. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +146 -1
  715. package/src/resources/extensions/gsd/tests/auto-retry-mcp-churn-fixes.test.ts +30 -0
  716. package/src/resources/extensions/gsd/tests/auto-worktree-auto-resolve.test.ts +17 -0
  717. package/src/resources/extensions/gsd/tests/codebase-generator.test.ts +15 -11
  718. package/src/resources/extensions/gsd/tests/commands-context.test.ts +26 -0
  719. package/src/resources/extensions/gsd/tests/commands-dispatcher-unmerged-milestone.test.ts +89 -0
  720. package/src/resources/extensions/gsd/tests/commands-dispatcher-validation-block.test.ts +37 -1
  721. package/src/resources/extensions/gsd/tests/commands-eval-review.test.ts +31 -30
  722. package/src/resources/extensions/gsd/tests/commands-gsd-core.test.ts +863 -0
  723. package/src/resources/extensions/gsd/tests/commands-verdict.test.ts +1 -1
  724. package/src/resources/extensions/gsd/tests/commands-worktree-clean.test.ts +80 -0
  725. package/src/resources/extensions/gsd/tests/compat-health-line.test.ts +102 -0
  726. package/src/resources/extensions/gsd/tests/compat-marker-invalidation.test.ts +51 -0
  727. package/src/resources/extensions/gsd/tests/compat-marker.test.ts +105 -0
  728. package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +28 -0
  729. package/src/resources/extensions/gsd/tests/complete-slice-reopen-handoff.test.ts +151 -0
  730. package/src/resources/extensions/gsd/tests/complete-slice.test.ts +18 -7
  731. package/src/resources/extensions/gsd/tests/complete-task-rollback-evidence.test.ts +48 -8
  732. package/src/resources/extensions/gsd/tests/complete-task.test.ts +82 -7
  733. package/src/resources/extensions/gsd/tests/consent-question.test.ts +45 -0
  734. package/src/resources/extensions/gsd/tests/dashboard-overlay.test.ts +90 -0
  735. package/src/resources/extensions/gsd/tests/db-authority-regression.test.ts +1 -1
  736. package/src/resources/extensions/gsd/tests/db-memory-fts-schema.test.ts +58 -3
  737. package/src/resources/extensions/gsd/tests/decisions-projection-from-memories.test.ts +51 -0
  738. package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +63 -1
  739. package/src/resources/extensions/gsd/tests/derive-state-helpers.test.ts +49 -5
  740. package/src/resources/extensions/gsd/tests/destructive-guard.test.ts +44 -0
  741. package/src/resources/extensions/gsd/tests/discuss-cold-start-db-open.test.ts +10 -27
  742. package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +20 -1
  743. package/src/resources/extensions/gsd/tests/dispatch-history.test.ts +102 -0
  744. package/src/resources/extensions/gsd/tests/dispatch-missing-task-plans.test.ts +175 -43
  745. package/src/resources/extensions/gsd/tests/dispatch-rule-coverage.test.ts +26 -1
  746. package/src/resources/extensions/gsd/tests/dist-redirect.mjs +7 -0
  747. package/src/resources/extensions/gsd/tests/doctor-forensics-db-open-regression.test.ts +70 -2
  748. package/src/resources/extensions/gsd/tests/doctor-git-checks-autoresolve.test.ts +149 -0
  749. package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +107 -0
  750. package/src/resources/extensions/gsd/tests/doctor-scope-db-unavailable.test.ts +239 -2
  751. package/src/resources/extensions/gsd/tests/ensure-preconditions-guard-4996.test.ts +17 -10
  752. package/src/resources/extensions/gsd/tests/evidence-cross-ref.test.ts +95 -0
  753. package/src/resources/extensions/gsd/tests/exec-graceful-kill.test.ts +38 -0
  754. package/src/resources/extensions/gsd/tests/exec-sandbox.test.ts +16 -0
  755. package/src/resources/extensions/gsd/tests/exec-tool.test.ts +45 -1
  756. package/src/resources/extensions/gsd/tests/export-html-enhancements.test.ts +25 -0
  757. package/src/resources/extensions/gsd/tests/export-memory.test.ts +179 -0
  758. package/src/resources/extensions/gsd/tests/extension-bootstrap-isolation.test.ts +53 -0
  759. package/src/resources/extensions/gsd/tests/external-markdown-edit.test.ts +137 -0
  760. package/src/resources/extensions/gsd/tests/external-planning-edit.test.ts +199 -0
  761. package/src/resources/extensions/gsd/tests/fallback-continuation.test.ts +36 -0
  762. package/src/resources/extensions/gsd/tests/file-change-validator.test.ts +40 -0
  763. package/src/resources/extensions/gsd/tests/file-lock.test.ts +43 -0
  764. package/src/resources/extensions/gsd/tests/flat-phase-migration.test.ts +149 -0
  765. package/src/resources/extensions/gsd/tests/flat-phase-renderer.test.ts +83 -0
  766. package/src/resources/extensions/gsd/tests/flat-phase-round-trip.test.ts +72 -0
  767. package/src/resources/extensions/gsd/tests/flat-phase-validation-integration.test.ts +120 -0
  768. package/src/resources/extensions/gsd/tests/flat-phase-validation-path.test.ts +74 -0
  769. package/src/resources/extensions/gsd/tests/forensics-error-filter.test.ts +88 -0
  770. package/src/resources/extensions/gsd/tests/gitignore-bg-shell-runtime.test.ts +4 -0
  771. package/src/resources/extensions/gsd/tests/gsd-core-parity-routing.test.ts +183 -0
  772. package/src/resources/extensions/gsd/tests/guidance.test.ts +25 -0
  773. package/src/resources/extensions/gsd/tests/guided-discuss-milestone-prompt-rendering.test.ts +42 -0
  774. package/src/resources/extensions/gsd/tests/health-widget.test.ts +268 -3
  775. package/src/resources/extensions/gsd/tests/integration/auto-recovery.test.ts +19 -11
  776. package/src/resources/extensions/gsd/tests/integration/commands-eval-review.integration.test.ts +6 -2
  777. package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +130 -3
  778. package/src/resources/extensions/gsd/tests/integration/gitignore-tracked-gsd.test.ts +55 -0
  779. package/src/resources/extensions/gsd/tests/integration/idle-recovery.test.ts +4 -3
  780. package/src/resources/extensions/gsd/tests/integration/integration-proof.test.ts +11 -7
  781. package/src/resources/extensions/gsd/tests/integration/queue-active-milestone-context-budget.test.ts +93 -0
  782. package/src/resources/extensions/gsd/tests/integration/quick-branch-lifecycle.test.ts +56 -9
  783. package/src/resources/extensions/gsd/tests/json-persistence-atomic.test.ts +47 -0
  784. package/src/resources/extensions/gsd/tests/knowledge-backfill-projection.test.ts +35 -0
  785. package/src/resources/extensions/gsd/tests/knowledge-cold-start.test.ts +386 -0
  786. package/src/resources/extensions/gsd/tests/layout-policy.test.ts +59 -0
  787. package/src/resources/extensions/gsd/tests/markdown-renderer-parse-cache.test.ts +1 -1
  788. package/src/resources/extensions/gsd/tests/markdown-renderer.test.ts +214 -82
  789. package/src/resources/extensions/gsd/tests/mcp-filter.test.ts +74 -1
  790. package/src/resources/extensions/gsd/tests/memory-consolidation-scanner.test.ts +78 -0
  791. package/src/resources/extensions/gsd/tests/memory-store.test.ts +48 -0
  792. package/src/resources/extensions/gsd/tests/merge-closeout-consistency-gate.test.ts +31 -1
  793. package/src/resources/extensions/gsd/tests/metrics-ledger-cap.test.ts +239 -0
  794. package/src/resources/extensions/gsd/tests/metrics-prune-cache-invalidation.test.ts +6 -0
  795. package/src/resources/extensions/gsd/tests/metrics.test.ts +1 -0
  796. package/src/resources/extensions/gsd/tests/migrate-external-worktree.test.ts +57 -0
  797. package/src/resources/extensions/gsd/tests/migration-auto-check.test.ts +70 -0
  798. package/src/resources/extensions/gsd/tests/milestone-closeout.test.ts +7 -2
  799. package/src/resources/extensions/gsd/tests/milestone-settlement.test.ts +6 -1
  800. package/src/resources/extensions/gsd/tests/model-router.test.ts +204 -7
  801. package/src/resources/extensions/gsd/tests/notification-store.test.ts +23 -0
  802. package/src/resources/extensions/gsd/tests/notifications.test.ts +33 -0
  803. package/src/resources/extensions/gsd/tests/observability-validator-boundary.test.ts +194 -0
  804. package/src/resources/extensions/gsd/tests/orchestrator-logs.test.ts +47 -1
  805. package/src/resources/extensions/gsd/tests/orphan-stash-audit.test.ts +91 -7
  806. package/src/resources/extensions/gsd/tests/orphaned-worktree-audit.test.ts +52 -1
  807. package/src/resources/extensions/gsd/tests/parallel-monitor-overlay.test.ts +91 -0
  808. package/src/resources/extensions/gsd/tests/parallel-research-dispatch.test.ts +26 -0
  809. package/src/resources/extensions/gsd/tests/parsers-legacy-importers.test.ts +4 -1
  810. package/src/resources/extensions/gsd/tests/pipeline-variant-dispatch.test.ts +1 -1
  811. package/src/resources/extensions/gsd/tests/plan-milestone-boundary-map-preservation.test.ts +7 -2
  812. package/src/resources/extensions/gsd/tests/plan-milestone-sketch-render.test.ts +7 -2
  813. package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +9 -6
  814. package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +10 -0
  815. package/src/resources/extensions/gsd/tests/plan-slice.test.ts +161 -27
  816. package/src/resources/extensions/gsd/tests/plan-task.test.ts +48 -5
  817. package/src/resources/extensions/gsd/tests/planning-crossval.test.ts +19 -0
  818. package/src/resources/extensions/gsd/tests/planning-layout-detect.test.ts +84 -0
  819. package/src/resources/extensions/gsd/tests/planning-marker.test.ts +107 -0
  820. package/src/resources/extensions/gsd/tests/planning-projection-hook.test.ts +123 -0
  821. package/src/resources/extensions/gsd/tests/planning-round-trip-property.test.ts +164 -0
  822. package/src/resources/extensions/gsd/tests/planning-writer.test.ts +82 -0
  823. package/src/resources/extensions/gsd/tests/post-execution-checks.test.ts +48 -1
  824. package/src/resources/extensions/gsd/tests/post-mutation-hook.test.ts +4 -2
  825. package/src/resources/extensions/gsd/tests/preferences.test.ts +47 -1
  826. package/src/resources/extensions/gsd/tests/prefs-wizard-coverage.test.ts +54 -1
  827. package/src/resources/extensions/gsd/tests/progressive-planning.test.ts +50 -14
  828. package/src/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +58 -0
  829. package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +23 -6
  830. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +301 -0
  831. package/src/resources/extensions/gsd/tests/read-uat-gate-verdict.test.ts +185 -0
  832. package/src/resources/extensions/gsd/tests/ready-phrase-no-files-4573.test.ts +22 -13
  833. package/src/resources/extensions/gsd/tests/reassess-handler.test.ts +9 -8
  834. package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +166 -4
  835. package/src/resources/extensions/gsd/tests/register-hooks-loop-guard-auto.test.ts +103 -0
  836. package/src/resources/extensions/gsd/tests/replan-handler.test.ts +4 -4
  837. package/src/resources/extensions/gsd/tests/root-write-leak-guard.test.ts +20 -1
  838. package/src/resources/extensions/gsd/tests/round-trip-property.test.ts +137 -0
  839. package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +15 -3
  840. package/src/resources/extensions/gsd/tests/session-lock-transient-read.test.ts +28 -2
  841. package/src/resources/extensions/gsd/tests/single-writer-invariant.test.ts +1 -0
  842. package/src/resources/extensions/gsd/tests/stale-dirlistcache-4648.test.ts +7 -1
  843. package/src/resources/extensions/gsd/tests/stalled-tool-recovery.test.ts +56 -0
  844. package/src/resources/extensions/gsd/tests/state-reconciliation-drift.test.ts +329 -57
  845. package/src/resources/extensions/gsd/tests/stop-backtrack.test.ts +6 -2
  846. package/src/resources/extensions/gsd/tests/stuck-state-via-db.test.ts +85 -0
  847. package/src/resources/extensions/gsd/tests/sync-lock.test.ts +23 -0
  848. package/src/resources/extensions/gsd/tests/system-context-message-routing.test.ts +29 -1
  849. package/src/resources/extensions/gsd/tests/terminal-tool-surface-classification.test.ts +80 -0
  850. package/src/resources/extensions/gsd/tests/tool-call-loop-guard.test.ts +208 -0
  851. package/src/resources/extensions/gsd/tests/tool-param-optionality.test.ts +32 -3
  852. package/src/resources/extensions/gsd/tests/tool-schema-model-fallback.test.ts +64 -0
  853. package/src/resources/extensions/gsd/tests/tool-search-shim.test.ts +71 -0
  854. package/src/resources/extensions/gsd/tests/tool-surface-readiness.test.ts +26 -7
  855. package/src/resources/extensions/gsd/tests/tool-unavailable-retry.test.ts +23 -0
  856. package/src/resources/extensions/gsd/tests/undo.test.ts +113 -37
  857. package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +212 -11
  858. package/src/resources/extensions/gsd/tests/unmerged-milestone-guard.test.ts +87 -0
  859. package/src/resources/extensions/gsd/tests/uok-gitops-turn-action.test.ts +110 -1
  860. package/src/resources/extensions/gsd/tests/validate-milestone-write-order.test.ts +9 -1
  861. package/src/resources/extensions/gsd/tests/validation-block-guard.test.ts +130 -0
  862. package/src/resources/extensions/gsd/tests/validation-gate-patterns.test.ts +34 -6
  863. package/src/resources/extensions/gsd/tests/verification-retry-policy.test.ts +69 -4
  864. package/src/resources/extensions/gsd/tests/verify-artifact-tightened.test.ts +156 -0
  865. package/src/resources/extensions/gsd/tests/visualizer-data.test.ts +87 -0
  866. package/src/resources/extensions/gsd/tests/visualizer-views.test.ts +27 -0
  867. package/src/resources/extensions/gsd/tests/workflow-kernel.test.ts +51 -0
  868. package/src/resources/extensions/gsd/tests/workflow-manifest.test.ts +96 -15
  869. package/src/resources/extensions/gsd/tests/workflow-mcp-preflight.test.ts +134 -0
  870. package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +42 -12
  871. package/src/resources/extensions/gsd/tests/workflow-projections.test.ts +3 -4
  872. package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +70 -13
  873. package/src/resources/extensions/gsd/tests/workspace-git-preflight.test.ts +151 -2
  874. package/src/resources/extensions/gsd/tests/worktree-health.test.ts +43 -3
  875. package/src/resources/extensions/gsd/tests/worktree-manager.test.ts +65 -0
  876. package/src/resources/extensions/gsd/tests/worktree-safety.test.ts +39 -18
  877. package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +4 -1
  878. package/src/resources/extensions/gsd/tests/write-gate.test.ts +103 -0
  879. package/src/resources/extensions/gsd/tool-surface-readiness.ts +226 -16
  880. package/src/resources/extensions/gsd/tools/complete-milestone.ts +7 -9
  881. package/src/resources/extensions/gsd/tools/complete-slice.ts +14 -11
  882. package/src/resources/extensions/gsd/tools/complete-task.ts +68 -16
  883. package/src/resources/extensions/gsd/tools/exec-tool.ts +7 -3
  884. package/src/resources/extensions/gsd/tools/plan-slice.ts +61 -50
  885. package/src/resources/extensions/gsd/tools/plan-task.ts +43 -2
  886. package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +9 -10
  887. package/src/resources/extensions/gsd/tools/validate-milestone.ts +8 -13
  888. package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +43 -4
  889. package/src/resources/extensions/gsd/triage-resolution.ts +14 -7
  890. package/src/resources/extensions/gsd/undo.ts +55 -15
  891. package/src/resources/extensions/gsd/unit-context-composer.ts +33 -7
  892. package/src/resources/extensions/gsd/unit-registry.ts +63 -9
  893. package/src/resources/extensions/gsd/unmerged-milestone-guard.ts +101 -6
  894. package/src/resources/extensions/gsd/validation-block-guard.ts +59 -7
  895. package/src/resources/extensions/gsd/verification-gate.ts +8 -0
  896. package/src/resources/extensions/gsd/visualizer-data.ts +55 -0
  897. package/src/resources/extensions/gsd/visualizer-views.ts +27 -2
  898. package/src/resources/extensions/gsd/workflow-manifest.ts +141 -7
  899. package/src/resources/extensions/gsd/workflow-mcp.ts +12 -1
  900. package/src/resources/extensions/gsd/workflow-projections.ts +44 -18
  901. package/src/resources/extensions/gsd/workspace-git-preflight.ts +31 -0
  902. package/src/resources/extensions/gsd/worktree-command.ts +6 -6
  903. package/src/resources/extensions/gsd/worktree-health.ts +6 -3
  904. package/src/resources/extensions/gsd/worktree-manager.ts +72 -16
  905. package/src/resources/extensions/gsd/worktree-safety.ts +31 -11
  906. package/src/resources/extensions/mcp-client/manager.ts +3 -3
  907. package/dist/web/standalone/.next/static/chunks/2772.bfa657f49f955239.js +0 -1
  908. package/dist/web/standalone/.next/static/chunks/796.e0bdc932325d7e03.js +0 -10
  909. package/dist/web/standalone/.next/static/chunks/8785.2e5a118797fb2dd2.js +0 -1
  910. package/dist/web/standalone/.next/static/chunks/webpack-f0285ce91d4ec9ef.js +0 -1
  911. /package/dist/web/standalone/.next/static/{Mh74c-rhxHjKHKoRwd2ij → zQLcXm0Za8lexoXtgDpMG}/_buildManifest.js +0 -0
  912. /package/dist/web/standalone/.next/static/{Mh74c-rhxHjKHKoRwd2ij → zQLcXm0Za8lexoXtgDpMG}/_ssgManifest.js +0 -0
package/README.md CHANGED
@@ -28,16 +28,16 @@ See [CHANGELOG.md](./CHANGELOG.md) for release-by-release fixes and [Legacy Rele
28
28
  ## Latest Release Highlights
29
29
 
30
30
  <!-- release-highlights:start -->
31
- Latest release: **v1.3.0**
31
+ Latest release: **v1.4.0**
32
32
 
33
- - **update:** Reconcile stale PATH gsd-browser binary after install.
34
- - **gsd:** Route UAT sign-off and worktree-degradation blockers through the guidance catalog.
35
- - **gsd:** Fix shell-tool selection uncapped sync bash, interruptible await, graceful kills.
36
- - **browser-tools:** Proven engine resolution gsd-browser primary for web apps (ADR-037).
37
- - **gsd:** Add the Unit Closeout module with the Interactive Closeout adapter (ADR-032).
38
- - **gsd:** Tool Surface Readiness gate verify live tool surface at SDK init before the first model turn.
39
- - **claude-code-cli:** Expose Claude Fable 5 as an Opus-tier model.
40
- - **pi-ai:** Add Claude Fable 5 with Opus-tier thinking.
33
+ - **models:** Add Claude Sonnet 5.
34
+ - **Added:** Add Hermes plugin installer.
35
+ - **compat:** Report .planning/ drift in /gsd sync and doctor.
36
+ - **compat:** Project to .planning/ inside renderAllFromDb.
37
+ - **compat:** Add external-planning-edit drift handler.
38
+ - **compat:** Add DB .planning/ projection writer.
39
+ - **compat:** Extract .planning/ layout detector.
40
+ - **compat:** Extend marker schema 1→2 with planning field.
41
41
 
42
42
  <!-- release-highlights:end -->
43
43
 
@@ -158,7 +158,7 @@ Need help choosing settings? Use the [GSD Pi web configurator](https://pi.opengs
158
158
  gsd
159
159
  ```
160
160
 
161
- Run the setup flow, choose your preferred model provider, and open a project directory. GSD stores project planning and runtime state in `.gsd/`.
161
+ Run the setup flow, choose your preferred model provider, and open a project directory. GSD stores project planning and runtime state in `.gsd/`, with gitignored sibling runtime directories such as `.gsd-backups/` for migration snapshots. Stale `.gsd-backups/migrate-*` snapshots are pruned after 30 days once the flat-phase `.gsd/phases/` migration is complete.
162
162
 
163
163
  For a full first-run walkthrough, see [Getting Started With gsd-pi](./docs/user-docs/getting-started.md).
164
164
 
package/dist/cli.js CHANGED
@@ -22,15 +22,23 @@ import { markStartup, printStartupTimings } from './startup-timings.js';
22
22
  import { applyRtkProcessEnv, GSD_RTK_DISABLED_ENV, isTruthy } from './rtk-shared.js';
23
23
  let piCodingAgentModulePromise;
24
24
  let agentCoreModulePromise;
25
- let agentModesModulePromise;
25
+ let interactiveModeModulePromise;
26
+ let printModeModulePromise;
27
+ let rpcModeModulePromise;
26
28
  function loadPiCodingAgentModule() {
27
29
  return (piCodingAgentModulePromise ??= import('@gsd/pi-coding-agent'));
28
30
  }
29
31
  function loadAgentCoreModule() {
30
32
  return (agentCoreModulePromise ??= import('@gsd/agent-core'));
31
33
  }
32
- function loadAgentModesModule() {
33
- return (agentModesModulePromise ??= import('@gsd/agent-modes'));
34
+ function loadInteractiveModeModule() {
35
+ return (interactiveModeModulePromise ??= import('@gsd/agent-modes/modes/interactive/interactive-mode.js'));
36
+ }
37
+ function loadPrintModeModule() {
38
+ return (printModeModulePromise ??= import('@gsd/agent-modes/modes/print-mode.js'));
39
+ }
40
+ function loadRpcModeModule() {
41
+ return (rpcModeModulePromise ??= import('@gsd/agent-modes/modes/rpc/rpc-mode.js'));
34
42
  }
35
43
  // ---------------------------------------------------------------------------
36
44
  // V8 compile cache — Node 22+ can cache compiled bytecode across runs,
@@ -194,6 +202,14 @@ if (shouldBypassManagedResourceMismatchGate(cliFlags.messages[0])) {
194
202
  process.exit(0);
195
203
  }
196
204
  // ---------------------------------------------------------------------------
205
+ // Hermes integration subcommand — `gsd hermes install`
206
+ // ---------------------------------------------------------------------------
207
+ if (cliFlags.messages[0] === 'hermes') {
208
+ const { runHermesIntegrationCommand } = await import('./hermes-integration-install.js');
209
+ const exitCode = await runHermesIntegrationCommand(process.argv);
210
+ process.exit(exitCode);
211
+ }
212
+ // ---------------------------------------------------------------------------
197
213
  // Graph subcommand — `gsd graph build|status|query|diff`
198
214
  // ---------------------------------------------------------------------------
199
215
  if (cliFlags.messages[0] === 'graph') {
@@ -291,6 +307,8 @@ const subcommandsExemptFromEarlyTtyCheck = new Set([
291
307
  'config',
292
308
  'graph',
293
309
  'headless',
310
+ 'hermes',
311
+ 'read',
294
312
  'install',
295
313
  'list',
296
314
  'remove',
@@ -409,6 +427,11 @@ if (cliFlags.messages[0] === 'sessions') {
409
427
  cliFlags.continue = true;
410
428
  cliFlags._selectedSessionPath = selected.path;
411
429
  }
430
+ // `gsd read` — JSON read seam for integrations (Hermes 6c)
431
+ if (cliFlags.messages[0] === 'read') {
432
+ const { runReadCli } = await import('./read-cli.js');
433
+ process.exit(await runReadCli(process.argv));
434
+ }
412
435
  // `gsd headless` — run auto-mode without TUI
413
436
  if (cliFlags.messages[0] === 'headless') {
414
437
  await ensureRtkBootstrap();
@@ -496,7 +519,6 @@ if (!isPrintMode &&
496
519
  }
497
520
  const { AuthStorage, DefaultResourceLoader, ModelRegistry, SettingsManager, SessionManager, } = await loadPiCodingAgentModule();
498
521
  const { createAgentSession } = await loadAgentCoreModule();
499
- const { InteractiveMode, runPrintMode, runRpcMode } = await loadAgentModesModule();
500
522
  markStartup('loadPiCodingAgent');
501
523
  // Pi's tool bootstrap can mis-detect already-installed fd/rg on some systems
502
524
  // because spawnSync(..., ["--version"]) returns EPERM despite a zero exit code.
@@ -515,6 +537,9 @@ markStartup('ModelRegistry');
515
537
  const settingsManager = SettingsManager.create(process.cwd(), agentDir);
516
538
  applySecurityOverrides(settingsManager);
517
539
  markStartup('SettingsManager.create');
540
+ const { configureHttpDispatcher } = await import('@gsd/pi-coding-agent/core/http-dispatcher.js');
541
+ configureHttpDispatcher(settingsManager.getHttpIdleTimeoutMs());
542
+ markStartup('configureHttpDispatcher');
518
543
  // Run onboarding wizard on first launch (no LLM provider configured)
519
544
  if (!isPrintMode && shouldRunOnboarding(authStorage, settingsManager.getDefaultProvider())) {
520
545
  await runOnboarding(authStorage);
@@ -636,6 +661,7 @@ if (isPrintMode) {
636
661
  applyModelOverride(session, modelRegistry, cliFlags.model);
637
662
  const mode = cliFlags.mode || 'text';
638
663
  if (mode === 'rpc') {
664
+ const { runRpcMode } = await loadRpcModeModule();
639
665
  printStartupTimings();
640
666
  await runRpcMode(session);
641
667
  process.exit(0);
@@ -659,6 +685,7 @@ if (isPrintMode) {
659
685
  // MCP server runs until the transport closes; keep alive
660
686
  await new Promise(() => { });
661
687
  }
688
+ const { runPrintMode } = await loadPrintModeModule();
662
689
  printStartupTimings();
663
690
  await runPrintMode(session, {
664
691
  mode: mode,
@@ -794,6 +821,7 @@ if (!process.stdin.isTTY || !process.stdout.isTTY) {
794
821
  : 'stdout is';
795
822
  printNonTtyErrorAndExit(missing, true);
796
823
  }
824
+ const { InteractiveMode } = await loadInteractiveModeModule();
797
825
  const interactiveMode = new InteractiveMode(session);
798
826
  markStartup('InteractiveMode');
799
827
  printStartupTimings();
@@ -6,7 +6,7 @@
6
6
  * default auto-responder or supervised mode.
7
7
  */
8
8
  import { readFileSync } from 'node:fs';
9
- import { serializeJsonLine } from '@gsd/agent-modes';
9
+ import { serializeJsonLine } from '@gsd/agent-modes/modes/rpc/jsonl.js';
10
10
  import { canonicalHeadlessToolName } from './headless-events.js';
11
11
  export function normalizeQuestionId(id) {
12
12
  return id.trim().toLowerCase().replace(/[-\s]+/g, '_').replace(/_confirm$/, '');
@@ -39,6 +39,5 @@ export async function loadContext(options) {
39
39
  */
40
40
  export function bootstrapGsdProject(basePath) {
41
41
  const gsdDir = join(basePath, '.gsd');
42
- mkdirSync(join(gsdDir, 'milestones'), { recursive: true });
43
42
  mkdirSync(join(gsdDir, 'runtime'), { recursive: true });
44
43
  }
@@ -5,7 +5,7 @@
5
5
  * formats progress events for stderr output, and reads orchestrator
6
6
  * commands from stdin in supervised mode.
7
7
  */
8
- import { RpcClient } from '@gsd/agent-modes';
8
+ import type { RpcClient } from '@gsd/agent-modes/modes/rpc/rpc-client.js';
9
9
  interface ExtensionUIRequest {
10
10
  type: 'extension_ui_request';
11
11
  id: string;
@@ -5,7 +5,7 @@
5
5
  * formats progress events for stderr output, and reads orchestrator
6
6
  * commands from stdin in supervised mode.
7
7
  */
8
- import { attachJsonlLineReader } from '@gsd/agent-modes';
8
+ import { attachJsonlLineReader } from '@gsd/agent-modes/modes/rpc/jsonl.js';
9
9
  // ---------------------------------------------------------------------------
10
10
  // ANSI Color Helpers
11
11
  // ---------------------------------------------------------------------------
package/dist/headless.js CHANGED
@@ -14,7 +14,7 @@
14
14
  import { existsSync, mkdirSync, writeFileSync, writeSync } from 'node:fs';
15
15
  import { join } from 'node:path';
16
16
  import { resolve } from 'node:path';
17
- import { RpcClient } from '@gsd/agent-modes';
17
+ import { RpcClient } from '@gsd/agent-modes/modes/rpc/rpc-client.js';
18
18
  import { SessionManager } from '@gsd/pi-coding-agent';
19
19
  import { getProjectSessionsDir } from './project-sessions.js';
20
20
  import { loadAndValidateAnswerFile, AnswerInjector } from './headless-answers.js';
package/dist/help-text.js CHANGED
@@ -122,6 +122,34 @@ const SUBCOMMAND_HELP = {
122
122
  ' gsd graph query auth Find nodes related to "auth"',
123
123
  ' gsd graph diff Show changes since last snapshot',
124
124
  ].join('\n'),
125
+ hermes: [
126
+ 'Usage: gsd hermes install [options]',
127
+ '',
128
+ 'Install the bundled open-gsd-hermes plugin into Hermes Agent.',
129
+ '',
130
+ 'Options:',
131
+ ' --hermes-home <path> Hermes home (default: $HERMES_HOME or ~/.hermes)',
132
+ ' --project <path> Default GSD project to write into gsd.yaml',
133
+ ' --plugin-source <path> Override bundled integrations/hermes source',
134
+ ' --skip-pip Copy plugin only; do not pip install editable package',
135
+ ' --skip-enable Do not run hermes plugins enable',
136
+ ' --dry-run Print intended actions without writing',
137
+ '',
138
+ 'Examples:',
139
+ ' gsd hermes install --project ~/code/myapp',
140
+ ' HERMES_HOME=~/.hermes gsd hermes install --skip-enable',
141
+ ].join('\n'),
142
+ read: [
143
+ 'Usage: gsd read <progress|roadmap|memory> --json --project <path>',
144
+ '',
145
+ 'JSON read seam for external integrations (e.g. open-gsd-hermes).',
146
+ 'Emits envelope: { integration_version, kind, projectDir, data }.',
147
+ '',
148
+ 'Examples:',
149
+ ' gsd read progress --json --project ~/code/myapp',
150
+ ' gsd read roadmap --json --project ~/code/myapp --milestone M001',
151
+ ' gsd read memory --json --project ~/code/myapp --query auth',
152
+ ].join('\n'),
125
153
  headless: [
126
154
  'Usage: gsd headless [flags] [command] [args...]',
127
155
  '',
@@ -211,6 +239,7 @@ export function printHelp(version) {
211
239
  process.stdout.write(' auto [args] Run auto-mode without TUI (pipeable)\n');
212
240
  process.stdout.write(' headless [cmd] [args] Run /gsd commands without TUI (default: auto)\n');
213
241
  process.stdout.write(' graph <subcommand> Manage knowledge graph (build, query, status, diff)\n');
242
+ process.stdout.write(' hermes install Install the Hermes Agent plugin\n');
214
243
  process.stdout.write('\nRun gsd <subcommand> --help for subcommand-specific help.\n');
215
244
  }
216
245
  export function printSubcommandHelp(subcommand, version) {
@@ -0,0 +1,17 @@
1
+ export interface HermesInstallOptions {
2
+ hermesHome: string;
3
+ pluginSource: string;
4
+ project?: string;
5
+ dryRun: boolean;
6
+ skipPip: boolean;
7
+ skipEnable: boolean;
8
+ }
9
+ export interface HermesInstallResult {
10
+ pluginTarget: string;
11
+ configPath: string;
12
+ actions: string[];
13
+ warnings: string[];
14
+ }
15
+ export declare function runHermesIntegrationCommand(argv: string[]): Promise<number>;
16
+ export declare function parseHermesInstallArgs(args: string[]): HermesInstallOptions;
17
+ export declare function installHermesPlugin(options: HermesInstallOptions): HermesInstallResult;
@@ -0,0 +1,199 @@
1
+ import { existsSync, mkdirSync, rmSync, cpSync, writeFileSync, readFileSync } from 'node:fs';
2
+ import { dirname, resolve, join, isAbsolute } from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { homedir } from 'node:os';
5
+ import { spawnSync } from 'node:child_process';
6
+ const PLUGIN_NAME = 'open-gsd-hermes';
7
+ export async function runHermesIntegrationCommand(argv) {
8
+ const hermesIndex = argv.indexOf('hermes', 2);
9
+ if (hermesIndex === -1) {
10
+ printHermesHelp();
11
+ return 0;
12
+ }
13
+ const sub = argv[hermesIndex + 1];
14
+ if (!sub || sub === 'help' || sub === '--help' || sub === '-h') {
15
+ printHermesHelp();
16
+ return 0;
17
+ }
18
+ if (sub !== 'install') {
19
+ process.stderr.write(`[gsd] Unknown hermes command: ${sub}\n`);
20
+ printHermesHelp(process.stderr);
21
+ return 1;
22
+ }
23
+ let options;
24
+ try {
25
+ options = parseHermesInstallArgs(argv.slice(hermesIndex + 2));
26
+ }
27
+ catch (err) {
28
+ process.stderr.write(`[gsd] hermes install: ${err instanceof Error ? err.message : String(err)}\n`);
29
+ return 1;
30
+ }
31
+ try {
32
+ const result = installHermesPlugin(options);
33
+ for (const action of result.actions)
34
+ process.stdout.write(`✓ ${action}\n`);
35
+ for (const warning of result.warnings)
36
+ process.stderr.write(`[gsd] Warning: ${warning}\n`);
37
+ process.stdout.write(`\nHermes plugin installed at: ${result.pluginTarget}\n`);
38
+ process.stdout.write(`Config path: ${result.configPath}\n`);
39
+ process.stdout.write('Next: restart Hermes/gateway, then run `hermes plugins list` and `/gsd status`.\n');
40
+ return 0;
41
+ }
42
+ catch (err) {
43
+ process.stderr.write(`[gsd] hermes install failed: ${err instanceof Error ? err.message : String(err)}\n`);
44
+ return 1;
45
+ }
46
+ }
47
+ export function parseHermesInstallArgs(args) {
48
+ let hermesHome = process.env.HERMES_HOME || join(homedir(), '.hermes');
49
+ let pluginSource = process.env.GSD_HERMES_PLUGIN_SOURCE || findBundledHermesPluginSource();
50
+ let project;
51
+ let dryRun = false;
52
+ let skipPip = false;
53
+ let skipEnable = false;
54
+ for (let i = 0; i < args.length; i++) {
55
+ const arg = args[i];
56
+ const next = () => {
57
+ const value = args[++i];
58
+ if (!value)
59
+ throw new Error(`${arg} requires a value`);
60
+ return value;
61
+ };
62
+ if (arg === '--hermes-home')
63
+ hermesHome = next();
64
+ else if (arg === '--plugin-source')
65
+ pluginSource = next();
66
+ else if (arg === '--project')
67
+ project = next();
68
+ else if (arg === '--dry-run')
69
+ dryRun = true;
70
+ else if (arg === '--skip-pip')
71
+ skipPip = true;
72
+ else if (arg === '--skip-enable')
73
+ skipEnable = true;
74
+ else
75
+ throw new Error(`unknown option: ${arg}`);
76
+ }
77
+ return {
78
+ hermesHome: expandHome(hermesHome),
79
+ pluginSource: expandHome(pluginSource),
80
+ project: project ? resolve(expandHome(project)) : undefined,
81
+ dryRun,
82
+ skipPip,
83
+ skipEnable,
84
+ };
85
+ }
86
+ export function installHermesPlugin(options) {
87
+ const source = resolve(options.pluginSource);
88
+ if (!existsSync(join(source, 'plugin.yaml'))) {
89
+ throw new Error(`plugin source does not contain plugin.yaml: ${source}`);
90
+ }
91
+ const hermesHome = resolve(options.hermesHome);
92
+ const pluginRoot = join(hermesHome, 'plugins');
93
+ const pluginTarget = join(pluginRoot, PLUGIN_NAME);
94
+ const configPath = join(hermesHome, 'gsd.yaml');
95
+ const actions = [];
96
+ const warnings = [];
97
+ if (!options.dryRun) {
98
+ mkdirSync(pluginRoot, { recursive: true });
99
+ if (existsSync(pluginTarget)) {
100
+ rmSync(pluginTarget, { recursive: true, force: true });
101
+ }
102
+ cpSync(source, pluginTarget, {
103
+ recursive: true,
104
+ filter: (src) => !src.includes('__pycache__') && !src.includes('.pytest_cache'),
105
+ });
106
+ }
107
+ actions.push(`${options.dryRun ? 'Would copy' : 'Copied'} ${PLUGIN_NAME} into Hermes plugin directory`);
108
+ const config = renderGsdYaml(options.project);
109
+ if (!existsSync(configPath)) {
110
+ if (!options.dryRun)
111
+ writeFileSync(configPath, config, 'utf8');
112
+ actions.push(`${options.dryRun ? 'Would create' : 'Created'} ${configPath}`);
113
+ }
114
+ else if (!readFileSync(configPath, 'utf8').includes('gsd:')) {
115
+ warnings.push(`${configPath} exists but does not contain a gsd: section; merge the sample config from ${pluginTarget}/docs/setup.md`);
116
+ }
117
+ else {
118
+ actions.push(`Left existing ${configPath} unchanged`);
119
+ }
120
+ if (!options.skipPip) {
121
+ const python = findHermesPython(hermesHome);
122
+ const pipArgs = ['-m', 'pip', 'install', '-e', pluginTarget];
123
+ if (options.dryRun) {
124
+ actions.push(`Would run ${python} ${pipArgs.join(' ')}`);
125
+ }
126
+ else {
127
+ const pip = spawnSync(python, pipArgs, { stdio: 'pipe', encoding: 'utf8' });
128
+ if (pip.status !== 0) {
129
+ warnings.push(`Python package install failed with ${python}; Hermes may not import the plugin until you run: ${python} ${pipArgs.join(' ')}`);
130
+ if (pip.stderr.trim())
131
+ warnings.push(pip.stderr.trim().split('\n').slice(-3).join(' | '));
132
+ }
133
+ else {
134
+ actions.push('Installed Python package into Hermes environment');
135
+ }
136
+ }
137
+ }
138
+ if (!options.skipEnable) {
139
+ if (options.dryRun) {
140
+ actions.push(`Would run HERMES_HOME=${hermesHome} hermes plugins enable ${PLUGIN_NAME}`);
141
+ }
142
+ else {
143
+ const enable = spawnSync('hermes', ['plugins', 'enable', PLUGIN_NAME], {
144
+ stdio: 'pipe',
145
+ encoding: 'utf8',
146
+ env: { ...process.env, HERMES_HOME: hermesHome },
147
+ });
148
+ if (enable.status !== 0) {
149
+ warnings.push(`Could not auto-enable plugin; run manually: HERMES_HOME=${hermesHome} hermes plugins enable ${PLUGIN_NAME}`);
150
+ }
151
+ else {
152
+ actions.push('Enabled plugin in Hermes');
153
+ }
154
+ }
155
+ }
156
+ return { pluginTarget, configPath, actions, warnings };
157
+ }
158
+ function quoteYamlScalar(value) {
159
+ return `'${value.replace(/'/g, "''")}'`;
160
+ }
161
+ function renderGsdYaml(project) {
162
+ const defaultProject = project ?? '~/code/myapp';
163
+ return `# open-gsd-hermes configuration. Edit paths for your machine.\ngsd:\n cli_path: gsd\n mcp_server_path: gsd-mcp-server\n credential_source: gsd\n default_project: ${quoteYamlScalar(defaultProject)}\n poll_interval_seconds: 12\n cache_ttl_seconds: 45\n notification_level: normal\n bindings: {}\n`;
164
+ }
165
+ function findHermesPython(hermesHome) {
166
+ const suffix = process.platform === 'win32' ? join('Scripts', 'python.exe') : join('bin', 'python');
167
+ const bundled = join(hermesHome, 'hermes-agent', 'venv', suffix);
168
+ if (existsSync(bundled))
169
+ return bundled;
170
+ return process.env.PYTHON || 'python3';
171
+ }
172
+ function findBundledHermesPluginSource() {
173
+ const here = dirname(fileURLToPath(import.meta.url));
174
+ const candidates = [
175
+ resolve(process.cwd(), 'integrations/hermes'),
176
+ resolve(here, '../integrations/hermes'),
177
+ resolve(here, '../../integrations/hermes'),
178
+ ];
179
+ const found = candidates.find((candidate) => existsSync(join(candidate, 'plugin.yaml')));
180
+ return found ?? candidates[0];
181
+ }
182
+ function expandHome(value) {
183
+ if (value === '~')
184
+ return homedir();
185
+ if (value.startsWith('~/'))
186
+ return join(homedir(), value.slice(2));
187
+ return isAbsolute(value) ? value : resolve(value);
188
+ }
189
+ function printHermesHelp(stream = process.stdout) {
190
+ stream.write('Usage: gsd hermes install [options]\n');
191
+ stream.write('\nInstall the bundled open-gsd-hermes plugin into a Hermes Agent home.\n\n');
192
+ stream.write('Options:\n');
193
+ stream.write(' --hermes-home <path> Hermes home (default: $HERMES_HOME or ~/.hermes)\n');
194
+ stream.write(' --project <path> Default GSD project to write into gsd.yaml\n');
195
+ stream.write(' --plugin-source <path> Override bundled integrations/hermes source\n');
196
+ stream.write(' --skip-pip Copy plugin only; do not pip install editable package\n');
197
+ stream.write(' --skip-enable Do not run hermes plugins enable\n');
198
+ stream.write(' --dry-run Print intended actions without writing\n');
199
+ }
@@ -1,2 +1,11 @@
1
- /** jiti alias map for @gsd/* workspace packages (CJS require cannot load ESM file:// URLs). */
2
- export declare function getJitiWorkspaceAliases(importUrl: string): Record<string, string>;
1
+ export type FileExists = (path: string) => boolean;
2
+ /**
3
+ * jiti alias map for @gsd/* workspace packages (CJS require cannot load ESM file:// URLs).
4
+ *
5
+ * In the monorepo the canonical entry points are raw TypeScript under `packages/<name>/src/`,
6
+ * which jiti loads directly. The published tarball ships only the compiled `packages/<name>/dist/`
7
+ * (see each package's `files` field) — `src/` is absent. Resolve each alias to the `src/*.ts`
8
+ * entry when present, otherwise fall back to the compiled `dist/*.js`, so the merge CLI loads in
9
+ * both layouts instead of crashing with MODULE_NOT_FOUND on the missing source path.
10
+ */
11
+ export declare function getJitiWorkspaceAliases(importUrl: string, fileExists?: FileExists): Record<string, string>;
@@ -1,9 +1,25 @@
1
+ import { existsSync } from "node:fs";
1
2
  import { join } from "node:path";
2
3
  import { resolvePackageRoot } from "./bundled-resource-path.js";
3
- /** jiti alias map for @gsd/* workspace packages (CJS require cannot load ESM file:// URLs). */
4
- export function getJitiWorkspaceAliases(importUrl) {
4
+ /**
5
+ * jiti alias map for @gsd/* workspace packages (CJS require cannot load ESM file:// URLs).
6
+ *
7
+ * In the monorepo the canonical entry points are raw TypeScript under `packages/<name>/src/`,
8
+ * which jiti loads directly. The published tarball ships only the compiled `packages/<name>/dist/`
9
+ * (see each package's `files` field) — `src/` is absent. Resolve each alias to the `src/*.ts`
10
+ * entry when present, otherwise fall back to the compiled `dist/*.js`, so the merge CLI loads in
11
+ * both layouts instead of crashing with MODULE_NOT_FOUND on the missing source path.
12
+ */
13
+ export function getJitiWorkspaceAliases(importUrl, fileExists = existsSync) {
5
14
  const root = resolvePackageRoot(importUrl);
6
- const pkg = (dir, ...segments) => join(root, "packages", dir, "src", ...segments);
15
+ // Prefer the source `.ts` entry (monorepo); fall back to the compiled `.js` (published tarball).
16
+ const pkg = (dir, ...segments) => {
17
+ const srcEntry = join(root, "packages", dir, "src", ...segments);
18
+ if (fileExists(srcEntry))
19
+ return srcEntry;
20
+ const distSegments = segments.map((s) => s.replace(/\.ts$/, ".js"));
21
+ return join(root, "packages", dir, "dist", ...distSegments);
22
+ };
7
23
  const piAi = pkg("pi-ai", "index.ts");
8
24
  const piAiOauth = pkg("pi-ai", "utils", "oauth", "index.ts");
9
25
  const piAgentCore = pkg("pi-agent-core", "index.ts");
@@ -0,0 +1,23 @@
1
+ /**
2
+ * `gsd read` — JSON read seam for integrations (Hermes 6c).
3
+ *
4
+ * gsd read progress --json --project /path
5
+ * gsd read roadmap --json --project /path [--milestone M001]
6
+ * gsd read memory --json --project /path --query "auth"
7
+ */
8
+ export declare const INTEGRATION_VERSION = 1;
9
+ export type ReadKind = 'progress' | 'roadmap' | 'memory';
10
+ export interface ReadEnvelope<T = unknown> {
11
+ integration_version: number;
12
+ kind: ReadKind;
13
+ projectDir: string;
14
+ data: T;
15
+ }
16
+ export interface ReadCliOptions {
17
+ kind: ReadKind;
18
+ project: string;
19
+ milestone?: string;
20
+ query?: string;
21
+ json: boolean;
22
+ }
23
+ export declare function runReadCli(argv: string[]): Promise<number>;
@@ -0,0 +1,90 @@
1
+ /**
2
+ * `gsd read` — JSON read seam for integrations (Hermes 6c).
3
+ *
4
+ * gsd read progress --json --project /path
5
+ * gsd read roadmap --json --project /path [--milestone M001]
6
+ * gsd read memory --json --project /path --query "auth"
7
+ */
8
+ import { resolve } from 'node:path';
9
+ import { graphQuery } from '@opengsd/mcp-server/readers/graph';
10
+ import { resolveGsdRoot } from '@opengsd/mcp-server/readers/paths';
11
+ import { readRoadmap } from '@opengsd/mcp-server/readers/roadmap';
12
+ import { readProgress } from '@opengsd/mcp-server/readers/state';
13
+ export const INTEGRATION_VERSION = 1;
14
+ function parseReadArgs(argv) {
15
+ const readIndex = argv.indexOf('read', 2);
16
+ if (readIndex === -1)
17
+ return null;
18
+ const args = argv.slice(readIndex + 1);
19
+ if (args.length < 1)
20
+ return null;
21
+ const kind = args[0];
22
+ if (!['progress', 'roadmap', 'memory'].includes(kind))
23
+ return null;
24
+ let project;
25
+ let milestone;
26
+ let query;
27
+ let json = false;
28
+ for (let i = 1; i < args.length; i++) {
29
+ const a = args[i];
30
+ if (a === '--json')
31
+ json = true;
32
+ else if (a === '--project' && i + 1 < args.length)
33
+ project = args[++i];
34
+ else if (a === '--milestone' && i + 1 < args.length)
35
+ milestone = args[++i];
36
+ else if (a === '--query' && i + 1 < args.length)
37
+ query = args[++i];
38
+ }
39
+ if (!project)
40
+ return null;
41
+ return { kind, project, milestone, query, json };
42
+ }
43
+ export async function runReadCli(argv) {
44
+ const opts = parseReadArgs(argv);
45
+ if (!opts) {
46
+ process.stderr.write('Usage: gsd read <progress|roadmap|memory> --json --project <path> [--milestone M001] [--query text]\n');
47
+ return 1;
48
+ }
49
+ const projectDir = resolve(opts.project);
50
+ try {
51
+ resolveGsdRoot(projectDir);
52
+ }
53
+ catch (err) {
54
+ process.stderr.write(`[gsd read] ${err instanceof Error ? err.message : String(err)}\n`);
55
+ return 1;
56
+ }
57
+ let data;
58
+ switch (opts.kind) {
59
+ case 'progress':
60
+ data = readProgress(projectDir);
61
+ break;
62
+ case 'roadmap':
63
+ data = readRoadmap(projectDir, opts.milestone);
64
+ break;
65
+ case 'memory': {
66
+ const term = opts.query?.trim() || '';
67
+ if (term.length < 2) {
68
+ process.stderr.write('[gsd read] memory requires --query with at least 2 characters\n');
69
+ return 1;
70
+ }
71
+ data = await graphQuery(projectDir, term);
72
+ break;
73
+ }
74
+ default:
75
+ return 1;
76
+ }
77
+ const envelope = {
78
+ integration_version: INTEGRATION_VERSION,
79
+ kind: opts.kind,
80
+ projectDir,
81
+ data,
82
+ };
83
+ if (opts.json) {
84
+ process.stdout.write(JSON.stringify(envelope, null, 2) + '\n');
85
+ }
86
+ else {
87
+ process.stdout.write(JSON.stringify(envelope.data, null, 2) + '\n');
88
+ }
89
+ return 0;
90
+ }
@@ -61,9 +61,9 @@ export declare function mergedFingerprint(hoisted: string, internal: string): st
61
61
  * - gsd-browser skill → ~/.gsd/agent/skills/gsd-browser/ from @opengsd/gsd-browser
62
62
  * - GSD-WORKFLOW.md → ~/.gsd/agent/GSD-WORKFLOW.md (fallback for env var miss)
63
63
  *
64
- * Skips the full copy only when the managed-resources.json version, content
65
- * fingerprint, and package-owned gsd-browser skill all match the current
66
- * install, avoiding ~128ms of synchronous cpSync on steady-state startup.
64
+ * Skips the full copy when the managed-resources.json version and content
65
+ * fingerprint match the current install, avoiding ~128ms of synchronous cpSync
66
+ * on steady-state startup.
67
67
  * After `npm update -g @opengsd/gsd-pi`, versions will differ and the copy
68
68
  * runs once to land the new resources.
69
69
  *
@@ -676,9 +676,9 @@ function pruneRemovedBundledExtensions(manifest, agentDir) {
676
676
  * - gsd-browser skill → ~/.gsd/agent/skills/gsd-browser/ from @opengsd/gsd-browser
677
677
  * - GSD-WORKFLOW.md → ~/.gsd/agent/GSD-WORKFLOW.md (fallback for env var miss)
678
678
  *
679
- * Skips the full copy only when the managed-resources.json version, content
680
- * fingerprint, and package-owned gsd-browser skill all match the current
681
- * install, avoiding ~128ms of synchronous cpSync on steady-state startup.
679
+ * Skips the full copy when the managed-resources.json version and content
680
+ * fingerprint match the current install, avoiding ~128ms of synchronous cpSync
681
+ * on steady-state startup.
682
682
  * After `npm update -g @opengsd/gsd-pi`, versions will differ and the copy
683
683
  * runs once to land the new resources.
684
684
  *
@@ -712,16 +712,7 @@ export function initResources(agentDir, skillsDir = join(agentDir, 'skills')) {
712
712
  if (manifest && isCurrentPackageManifest(manifest) && manifest.gsdVersion === currentVersion) {
713
713
  // Version matches — check content fingerprint for same-version staleness.
714
714
  const currentHash = getCurrentResourceFingerprint();
715
- const hasStaleExtensionFiles = hasStaleCompiledExtensionSiblings(extensionsDir, bundledExtensionsDir);
716
- const hasMissingSharedFiles = hasMissingBundledResourceFiles(join(agentDir, 'shared'), join(resourcesDir, 'shared'));
717
- const hasMissingSkillFiles = hasMissingBundledResourceFiles(skillsDir, join(resourcesDir, 'skills'));
718
- const hasStaleGsdBrowserSkill = hasStaleGsdBrowserPackageSkill(skillsDir);
719
- if (manifest.contentHash &&
720
- manifest.contentHash === currentHash &&
721
- !hasStaleExtensionFiles &&
722
- !hasMissingSharedFiles &&
723
- !hasMissingSkillFiles &&
724
- !hasStaleGsdBrowserSkill) {
715
+ if (manifest.contentHash && manifest.contentHash === currentHash) {
725
716
  return;
726
717
  }
727
718
  }
@@ -1 +1 @@
1
- 173573359f5af483
1
+ 6cd0d33f2832351c