@opengsd/gsd-pi 1.1.1-dev.a5a2de8 → 1.1.1-dev.b2556262

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 (325) hide show
  1. package/dist/headless-recover.js +56 -1
  2. package/dist/resources/.managed-resources-content-hash +1 -1
  3. package/dist/resources/extensions/browser-tools/engine/managed-gsd-browser.js +18 -2
  4. package/dist/resources/extensions/browser-tools/engine/selection.js +1 -1
  5. package/dist/resources/extensions/browser-tools/extension-manifest.json +1 -1
  6. package/dist/resources/extensions/browser-tools/index.js +68 -24
  7. package/dist/resources/extensions/browser-tools/state.js +12 -0
  8. package/dist/resources/extensions/browser-tools/tools/session.js +3 -2
  9. package/dist/resources/extensions/browser-tools/utils.js +3 -3
  10. package/dist/resources/extensions/browser-tools/web-app-detect.js +52 -0
  11. package/dist/resources/extensions/gsd/auto/loop.js +4 -2
  12. package/dist/resources/extensions/gsd/auto/phases.js +87 -12
  13. package/dist/resources/extensions/gsd/auto/session.js +22 -1
  14. package/dist/resources/extensions/gsd/auto/workflow-kernel.js +1 -0
  15. package/dist/resources/extensions/gsd/auto-dispatch.js +81 -13
  16. package/dist/resources/extensions/gsd/auto-model-selection.js +154 -9
  17. package/dist/resources/extensions/gsd/auto-post-unit.js +19 -2
  18. package/dist/resources/extensions/gsd/auto-prompts.js +26 -21
  19. package/dist/resources/extensions/gsd/auto-recovery.js +4 -2
  20. package/dist/resources/extensions/gsd/auto-runtime-state.js +3 -0
  21. package/dist/resources/extensions/gsd/auto-start.js +1 -1
  22. package/dist/resources/extensions/gsd/auto-timers.js +24 -10
  23. package/dist/resources/extensions/gsd/auto.js +40 -15
  24. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +3 -3
  25. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +192 -77
  26. package/dist/resources/extensions/gsd/bootstrap/system-context.js +1 -1
  27. package/dist/resources/extensions/gsd/closeout-wizard.js +32 -9
  28. package/dist/resources/extensions/gsd/commands/handlers/auto.js +10 -0
  29. package/dist/resources/extensions/gsd/commands/handlers/ops.js +2 -9
  30. package/dist/resources/extensions/gsd/commands-maintenance.js +93 -15
  31. package/dist/resources/extensions/gsd/commands-mcp-status.js +1 -1
  32. package/dist/resources/extensions/gsd/commands-prefs-wizard.js +2 -2
  33. package/dist/resources/extensions/gsd/config-overlay.js +1 -0
  34. package/dist/resources/extensions/gsd/context-masker.js +129 -5
  35. package/dist/resources/extensions/gsd/db-writer.js +35 -0
  36. package/dist/resources/extensions/gsd/docs/preferences-reference.md +50 -1
  37. package/dist/resources/extensions/gsd/gsd-db.js +480 -172
  38. package/dist/resources/extensions/gsd/guided-flow.js +4 -1
  39. package/dist/resources/extensions/gsd/markdown-renderer.js +37 -53
  40. package/dist/resources/extensions/gsd/md-importer.js +38 -3
  41. package/dist/resources/extensions/gsd/migration-auto-check.js +126 -31
  42. package/dist/resources/extensions/gsd/parsers-legacy.js +23 -0
  43. package/dist/resources/extensions/gsd/planner-handoff.js +98 -0
  44. package/dist/resources/extensions/gsd/planning-path-scope.js +22 -4
  45. package/dist/resources/extensions/gsd/pre-execution-checks.js +10 -2
  46. package/dist/resources/extensions/gsd/preferences-models.js +111 -43
  47. package/dist/resources/extensions/gsd/preferences-types.js +13 -0
  48. package/dist/resources/extensions/gsd/preferences-validation.js +68 -3
  49. package/dist/resources/extensions/gsd/preferences.js +4 -1
  50. package/dist/resources/extensions/gsd/prompts/gate-evaluate.md +1 -1
  51. package/dist/resources/extensions/gsd/prompts/plan-milestone.md +1 -1
  52. package/dist/resources/extensions/gsd/prompts/plan-slice.md +1 -1
  53. package/dist/resources/extensions/gsd/prompts/refine-slice.md +1 -1
  54. package/dist/resources/extensions/gsd/prompts/run-uat.md +2 -2
  55. package/dist/resources/extensions/gsd/prompts/system.md +1 -1
  56. package/dist/resources/extensions/gsd/roadmap-slices.js +5 -1
  57. package/dist/resources/extensions/gsd/safety/content-validator.js +6 -4
  58. package/dist/resources/extensions/gsd/skill-manifest.js +12 -0
  59. package/dist/resources/extensions/gsd/source-observations.js +306 -0
  60. package/dist/resources/extensions/gsd/state-reconciliation/drift/completion.js +15 -8
  61. package/dist/resources/extensions/gsd/state-reconciliation/drift/stale-render.js +33 -5
  62. package/dist/resources/extensions/gsd/state-reconciliation/drift/stale-worker.js +34 -13
  63. package/dist/resources/extensions/gsd/state-reconciliation/index.js +39 -14
  64. package/dist/resources/extensions/gsd/state-reconciliation/spawn-gate.js +4 -4
  65. package/dist/resources/extensions/gsd/state.js +7 -3
  66. package/dist/resources/extensions/gsd/tool-contract.js +15 -1
  67. package/dist/resources/extensions/gsd/tool-presentation-plan.js +24 -2
  68. package/dist/resources/extensions/gsd/tools/complete-slice.js +28 -0
  69. package/dist/resources/extensions/gsd/tools/plan-slice.js +42 -11
  70. package/dist/resources/extensions/gsd/tools/plan-task.js +7 -1
  71. package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +62 -406
  72. package/dist/resources/extensions/gsd/uat-policy.js +130 -0
  73. package/dist/resources/extensions/gsd/uat-run.js +414 -0
  74. package/dist/resources/extensions/gsd/unit-context-manifest.js +3 -4
  75. package/dist/resources/extensions/gsd/unit-tool-contracts.js +38 -14
  76. package/dist/resources/extensions/gsd/verdict-parser.js +3 -8
  77. package/dist/resources/extensions/gsd/workflow-manifest.js +132 -5
  78. package/dist/resources/extensions/gsd/workflow-mcp.js +2 -3
  79. package/dist/resources/extensions/gsd/workflow-projections.js +8 -0
  80. package/dist/resources/extensions/gsd/worktree-manager.js +26 -0
  81. package/dist/resources/extensions/gsd/worktree-reentry.js +96 -0
  82. package/dist/resources/extensions/gsd/worktree-state-projection.js +18 -17
  83. package/dist/resources/extensions/shared/gsd-browser-cli.js +6 -0
  84. package/dist/resources/extensions/subagent/agents.js +1 -0
  85. package/dist/resources/extensions/subagent/index.js +27 -12
  86. package/dist/resources/extensions/subagent/launch.js +7 -2
  87. package/dist/web/standalone/.next/BUILD_ID +1 -1
  88. package/dist/web/standalone/.next/app-path-routes-manifest.json +6 -6
  89. package/dist/web/standalone/.next/build-manifest.json +2 -2
  90. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  91. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  92. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  93. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  94. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  95. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  96. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  97. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  98. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  99. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  100. package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
  101. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  102. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  103. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  104. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  105. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  106. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  107. package/dist/web/standalone/.next/server/app/index.html +1 -1
  108. package/dist/web/standalone/.next/server/app/index.rsc +1 -1
  109. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  110. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
  111. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  112. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  113. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  114. package/dist/web/standalone/.next/server/app-paths-manifest.json +6 -6
  115. package/dist/web/standalone/.next/server/chunks/8357.js +1 -1
  116. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  117. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  118. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  119. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  120. package/dist/web/standalone/node_modules/@gsd/native/dist/native.js +22 -0
  121. package/dist/web/standalone/node_modules/node-pty/build/Makefile +1 -1
  122. package/package.json +4 -4
  123. package/packages/cloud-mcp-gateway/package.json +2 -2
  124. package/packages/contracts/package.json +1 -1
  125. package/packages/daemon/package.json +4 -4
  126. package/packages/gsd-agent-core/package.json +5 -5
  127. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  128. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js +21 -23
  129. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js.map +1 -1
  130. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts +3 -0
  131. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  132. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js +25 -0
  133. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js.map +1 -1
  134. package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.d.ts +1 -0
  135. package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.d.ts.map +1 -1
  136. package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.js +66 -12
  137. package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.js.map +1 -1
  138. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  139. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js +18 -11
  140. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  141. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.d.ts.map +1 -1
  142. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.js +16 -0
  143. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.js.map +1 -1
  144. package/packages/gsd-agent-modes/package.json +7 -7
  145. package/packages/mcp-server/dist/workflow-tools.js +1 -1
  146. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  147. package/packages/mcp-server/package.json +3 -3
  148. package/packages/native/dist/native.js +22 -0
  149. package/packages/native/package.json +1 -1
  150. package/packages/pi-agent-core/package.json +1 -1
  151. package/packages/pi-ai/dist/image-models.generated.d.ts +30 -0
  152. package/packages/pi-ai/dist/image-models.generated.d.ts.map +1 -1
  153. package/packages/pi-ai/dist/image-models.generated.js +30 -0
  154. package/packages/pi-ai/dist/image-models.generated.js.map +1 -1
  155. package/packages/pi-ai/dist/models.generated.d.ts +174 -29
  156. package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
  157. package/packages/pi-ai/dist/models.generated.js +178 -54
  158. package/packages/pi-ai/dist/models.generated.js.map +1 -1
  159. package/packages/pi-ai/dist/providers/transform-messages.d.ts.map +1 -1
  160. package/packages/pi-ai/dist/providers/transform-messages.js +8 -1
  161. package/packages/pi-ai/dist/providers/transform-messages.js.map +1 -1
  162. package/packages/pi-ai/package.json +1 -1
  163. package/packages/pi-coding-agent/dist/core/settings-manager.js +1 -1
  164. package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  165. package/packages/pi-coding-agent/dist/theme/themes.js +1 -1
  166. package/packages/pi-coding-agent/dist/theme/themes.js.map +1 -1
  167. package/packages/pi-coding-agent/package.json +7 -7
  168. package/packages/pi-tui/dist/utils.d.ts +11 -0
  169. package/packages/pi-tui/dist/utils.d.ts.map +1 -1
  170. package/packages/pi-tui/dist/utils.js +119 -6
  171. package/packages/pi-tui/dist/utils.js.map +1 -1
  172. package/packages/pi-tui/package.json +2 -1
  173. package/packages/rpc-client/package.json +2 -2
  174. package/pkg/dist/theme/themes.js +1 -1
  175. package/pkg/dist/theme/themes.js.map +1 -1
  176. package/pkg/package.json +1 -1
  177. package/scripts/install/handoff.js +16 -3
  178. package/src/resources/extensions/browser-tools/engine/managed-gsd-browser.ts +21 -2
  179. package/src/resources/extensions/browser-tools/engine/selection.ts +1 -1
  180. package/src/resources/extensions/browser-tools/extension-manifest.json +1 -1
  181. package/src/resources/extensions/browser-tools/index.ts +75 -27
  182. package/src/resources/extensions/browser-tools/state.ts +13 -0
  183. package/src/resources/extensions/browser-tools/tests/browser-engine-selection.test.mjs +2 -2
  184. package/src/resources/extensions/browser-tools/tests/browser-tools-unit.test.cjs +57 -0
  185. package/src/resources/extensions/browser-tools/tests/gsd-browser-launch-config.test.mjs +37 -0
  186. package/src/resources/extensions/browser-tools/tests/web-app-detect.test.mjs +68 -0
  187. package/src/resources/extensions/browser-tools/tools/session.ts +4 -2
  188. package/src/resources/extensions/browser-tools/utils.ts +3 -3
  189. package/src/resources/extensions/browser-tools/web-app-detect.ts +63 -0
  190. package/src/resources/extensions/gsd/auto/loop-deps.ts +1 -0
  191. package/src/resources/extensions/gsd/auto/loop.ts +4 -2
  192. package/src/resources/extensions/gsd/auto/phases.ts +89 -15
  193. package/src/resources/extensions/gsd/auto/session.ts +24 -1
  194. package/src/resources/extensions/gsd/auto/workflow-kernel.ts +1 -0
  195. package/src/resources/extensions/gsd/auto-dispatch.ts +117 -12
  196. package/src/resources/extensions/gsd/auto-model-selection.ts +190 -12
  197. package/src/resources/extensions/gsd/auto-post-unit.ts +20 -2
  198. package/src/resources/extensions/gsd/auto-prompts.ts +25 -22
  199. package/src/resources/extensions/gsd/auto-recovery.ts +22 -3
  200. package/src/resources/extensions/gsd/auto-runtime-state.ts +5 -0
  201. package/src/resources/extensions/gsd/auto-start.ts +1 -1
  202. package/src/resources/extensions/gsd/auto-timers.ts +25 -9
  203. package/src/resources/extensions/gsd/auto.ts +41 -14
  204. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +3 -3
  205. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +250 -78
  206. package/src/resources/extensions/gsd/bootstrap/system-context.ts +1 -1
  207. package/src/resources/extensions/gsd/closeout-wizard.ts +47 -13
  208. package/src/resources/extensions/gsd/commands/handlers/auto.ts +9 -0
  209. package/src/resources/extensions/gsd/commands/handlers/ops.ts +2 -17
  210. package/src/resources/extensions/gsd/commands-maintenance.ts +124 -13
  211. package/src/resources/extensions/gsd/commands-mcp-status.ts +1 -1
  212. package/src/resources/extensions/gsd/commands-prefs-wizard.ts +2 -2
  213. package/src/resources/extensions/gsd/config-overlay.ts +1 -0
  214. package/src/resources/extensions/gsd/context-masker.ts +152 -5
  215. package/src/resources/extensions/gsd/db-writer.ts +38 -0
  216. package/src/resources/extensions/gsd/docs/preferences-reference.md +50 -1
  217. package/src/resources/extensions/gsd/gsd-db.ts +564 -186
  218. package/src/resources/extensions/gsd/guided-flow.ts +4 -1
  219. package/src/resources/extensions/gsd/markdown-renderer.ts +44 -66
  220. package/src/resources/extensions/gsd/md-importer.ts +49 -2
  221. package/src/resources/extensions/gsd/migration-auto-check.ts +154 -34
  222. package/src/resources/extensions/gsd/parsers-legacy.ts +20 -0
  223. package/src/resources/extensions/gsd/planner-handoff.ts +149 -0
  224. package/src/resources/extensions/gsd/planning-path-scope.ts +22 -4
  225. package/src/resources/extensions/gsd/pre-execution-checks.ts +9 -2
  226. package/src/resources/extensions/gsd/preferences-models.ts +113 -43
  227. package/src/resources/extensions/gsd/preferences-types.ts +47 -0
  228. package/src/resources/extensions/gsd/preferences-validation.ts +76 -2
  229. package/src/resources/extensions/gsd/preferences.ts +5 -0
  230. package/src/resources/extensions/gsd/prompts/gate-evaluate.md +1 -1
  231. package/src/resources/extensions/gsd/prompts/plan-milestone.md +1 -1
  232. package/src/resources/extensions/gsd/prompts/plan-slice.md +1 -1
  233. package/src/resources/extensions/gsd/prompts/refine-slice.md +1 -1
  234. package/src/resources/extensions/gsd/prompts/run-uat.md +2 -2
  235. package/src/resources/extensions/gsd/prompts/system.md +1 -1
  236. package/src/resources/extensions/gsd/roadmap-slices.ts +6 -1
  237. package/src/resources/extensions/gsd/safety/content-validator.ts +8 -5
  238. package/src/resources/extensions/gsd/skill-manifest.ts +12 -0
  239. package/src/resources/extensions/gsd/source-observations.ts +402 -0
  240. package/src/resources/extensions/gsd/state-reconciliation/drift/completion.ts +20 -8
  241. package/src/resources/extensions/gsd/state-reconciliation/drift/stale-render.ts +44 -5
  242. package/src/resources/extensions/gsd/state-reconciliation/drift/stale-worker.ts +39 -11
  243. package/src/resources/extensions/gsd/state-reconciliation/index.ts +45 -15
  244. package/src/resources/extensions/gsd/state-reconciliation/spawn-gate.ts +4 -4
  245. package/src/resources/extensions/gsd/state.ts +7 -4
  246. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +114 -0
  247. package/src/resources/extensions/gsd/tests/auto-model-selection-tool-poisoning.test.ts +66 -4
  248. package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +299 -1
  249. package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +32 -0
  250. package/src/resources/extensions/gsd/tests/auto-phases-lifecycle.test.ts +75 -3
  251. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +22 -1
  252. package/src/resources/extensions/gsd/tests/auto-supervisor.test.mjs +4 -0
  253. package/src/resources/extensions/gsd/tests/before-provider-context-management.test.ts +145 -0
  254. package/src/resources/extensions/gsd/tests/bundled-skill-triggers.test.ts +9 -0
  255. package/src/resources/extensions/gsd/tests/closeout-wizard.test.ts +44 -0
  256. package/src/resources/extensions/gsd/tests/commands-dispatcher-unmerged-milestone.test.ts +26 -1
  257. package/src/resources/extensions/gsd/tests/complete-slice-verification-gate.test.ts +118 -0
  258. package/src/resources/extensions/gsd/tests/content-validator.test.ts +74 -0
  259. package/src/resources/extensions/gsd/tests/context-masker.test.ts +56 -1
  260. package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +17 -2
  261. package/src/resources/extensions/gsd/tests/dispatch-rule-coverage.test.ts +24 -0
  262. package/src/resources/extensions/gsd/tests/doctor-scope-db-unavailable.test.ts +1 -11
  263. package/src/resources/extensions/gsd/tests/gate-dispatch.test.ts +64 -0
  264. package/src/resources/extensions/gsd/tests/gate-storage.test.ts +15 -0
  265. package/src/resources/extensions/gsd/tests/gsd-recover.test.ts +62 -1
  266. package/src/resources/extensions/gsd/tests/integration/run-uat.test.ts +4 -1
  267. package/src/resources/extensions/gsd/tests/interrupted-session-auto.test.ts +27 -0
  268. package/src/resources/extensions/gsd/tests/journal-integration.test.ts +16 -0
  269. package/src/resources/extensions/gsd/tests/markdown-renderer.test.ts +42 -0
  270. package/src/resources/extensions/gsd/tests/mcp-project-config.test.ts +7 -1
  271. package/src/resources/extensions/gsd/tests/mcp-status.test.ts +1 -1
  272. package/src/resources/extensions/gsd/tests/migration-auto-check.test.ts +99 -0
  273. package/src/resources/extensions/gsd/tests/plan-slice.test.ts +99 -2
  274. package/src/resources/extensions/gsd/tests/plan-task.test.ts +19 -0
  275. package/src/resources/extensions/gsd/tests/planner-handoff.test.ts +100 -0
  276. package/src/resources/extensions/gsd/tests/preferences.test.ts +14 -0
  277. package/src/resources/extensions/gsd/tests/prefs-wizard-coverage.test.ts +1 -0
  278. package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +133 -0
  279. package/src/resources/extensions/gsd/tests/provider-switch-observer.test.ts +55 -0
  280. package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +101 -1
  281. package/src/resources/extensions/gsd/tests/repository-registry.test.ts +2 -2
  282. package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +28 -0
  283. package/src/resources/extensions/gsd/tests/schema-v21-sequence.test.ts +5 -3
  284. package/src/resources/extensions/gsd/tests/schema-v27-v28-sequence.test.ts +162 -18
  285. package/src/resources/extensions/gsd/tests/skill-manifest.test.ts +4 -3
  286. package/src/resources/extensions/gsd/tests/skipped-validation-db-atomicity.test.ts +8 -0
  287. package/src/resources/extensions/gsd/tests/source-observations.test.ts +275 -0
  288. package/src/resources/extensions/gsd/tests/stale-queued-milestone.test.ts +43 -0
  289. package/src/resources/extensions/gsd/tests/state-reconciliation-drift.test.ts +76 -21
  290. package/src/resources/extensions/gsd/tests/thinking-level-resolution.test.ts +203 -0
  291. package/src/resources/extensions/gsd/tests/uat-policy.test.ts +170 -0
  292. package/src/resources/extensions/gsd/tests/unit-context-manifest.test.ts +7 -1
  293. package/src/resources/extensions/gsd/tests/workflow-kernel.test.ts +7 -0
  294. package/src/resources/extensions/gsd/tests/workflow-manifest.test.ts +306 -1
  295. package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +77 -10
  296. package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +260 -5
  297. package/src/resources/extensions/gsd/tests/worktree-db.test.ts +511 -1
  298. package/src/resources/extensions/gsd/tests/worktree-reentry.test.ts +102 -0
  299. package/src/resources/extensions/gsd/tests/worktree-state-projection.test.ts +44 -0
  300. package/src/resources/extensions/gsd/tool-contract.ts +29 -1
  301. package/src/resources/extensions/gsd/tool-presentation-plan.ts +41 -6
  302. package/src/resources/extensions/gsd/tools/complete-slice.ts +29 -0
  303. package/src/resources/extensions/gsd/tools/plan-slice.ts +54 -12
  304. package/src/resources/extensions/gsd/tools/plan-task.ts +8 -1
  305. package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +71 -489
  306. package/src/resources/extensions/gsd/types.ts +1 -0
  307. package/src/resources/extensions/gsd/uat-policy.ts +191 -0
  308. package/src/resources/extensions/gsd/uat-run.ts +550 -0
  309. package/src/resources/extensions/gsd/unit-context-manifest.ts +3 -4
  310. package/src/resources/extensions/gsd/unit-tool-contracts.ts +38 -14
  311. package/src/resources/extensions/gsd/verdict-parser.ts +3 -10
  312. package/src/resources/extensions/gsd/workflow-manifest.ts +193 -7
  313. package/src/resources/extensions/gsd/workflow-mcp.ts +2 -3
  314. package/src/resources/extensions/gsd/workflow-projections.ts +9 -0
  315. package/src/resources/extensions/gsd/worktree-manager.ts +32 -0
  316. package/src/resources/extensions/gsd/worktree-reentry.ts +103 -0
  317. package/src/resources/extensions/gsd/worktree-state-projection.ts +22 -22
  318. package/src/resources/extensions/shared/gsd-browser-cli.ts +6 -0
  319. package/src/resources/extensions/shared/tests/format-utils.test.ts +8 -3
  320. package/src/resources/extensions/subagent/agents.ts +4 -0
  321. package/src/resources/extensions/subagent/index.ts +28 -3
  322. package/src/resources/extensions/subagent/launch.ts +8 -0
  323. package/src/resources/extensions/subagent/tests/model-override.test.ts +31 -0
  324. /package/dist/web/standalone/.next/static/{9y3LeeR2uGr2yRj9RjY3D → tJOKQbQRO-9MiFDO8DIDS}/_buildManifest.js +0 -0
  325. /package/dist/web/standalone/.next/static/{9y3LeeR2uGr2yRj9RjY3D → tJOKQbQRO-9MiFDO8DIDS}/_ssgManifest.js +0 -0
@@ -9,7 +9,8 @@ import {
9
9
  openDatabase,
10
10
  closeDatabase,
11
11
  _getAdapter,
12
- insertGateRow,
12
+ getArtifact,
13
+ getAssessment,
13
14
  insertAssessment,
14
15
  upsertRequirement,
15
16
  getAllMilestones,
@@ -632,16 +633,40 @@ test("executeUatResultSave accepts gsd_uat_exec evidence written in a milestone
632
633
  assert.equal(result.isError, undefined);
633
634
  assert.equal(result.details.operation, "save_uat_result");
634
635
  assert.equal(result.details.verdict, "PASS");
636
+ assert.equal(result.details.runId, "uat:M001:S02:attempt-1");
637
+ assert.equal(result.details.worktreeRoot, worktree);
638
+ assert.equal(result.details.browserToolsPresented, false);
635
639
  assert.ok(
636
640
  existsSync(join(base, ".gsd", "uat", "M001", "S02", "attempt-1.json")),
637
641
  "attempt JSON should be persisted under the authoritative project .gsd",
638
642
  );
643
+ const attempt = JSON.parse(readFileSync(
644
+ join(base, ".gsd", "uat", "M001", "S02", "attempt-1.json"),
645
+ "utf-8",
646
+ )) as {
647
+ runId?: string;
648
+ worktreeRoot?: string;
649
+ browserToolsPresented?: boolean;
650
+ modePolicy?: { requiredAnyModes?: string[] };
651
+ };
652
+ assert.equal(attempt.runId, "uat:M001:S02:attempt-1");
653
+ assert.equal(attempt.worktreeRoot, worktree);
654
+ assert.equal(attempt.browserToolsPresented, false);
655
+ assert.deepEqual(attempt.modePolicy?.requiredAnyModes, ["runtime"]);
639
656
  const assessment = readFileSync(
640
657
  join(base, ".gsd", "milestones", "M001", "slices", "S02", "S02-ASSESSMENT.md"),
641
658
  "utf-8",
642
659
  );
660
+ assert.match(assessment, /runId: uat:M001:S02:attempt-1/);
661
+ assert.ok(assessment.includes(`worktreeRoot: ${worktree}`));
643
662
  assert.match(assessment, /Runtime path C:\\\\tmp\\\|uat evidence/);
644
663
  assert.match(assessment, /backslash \\\\ and pipe \\\|/);
664
+
665
+ const artifactPath = "milestones/M001/slices/S02/S02-ASSESSMENT.md";
666
+ const assessmentPath = `.gsd/${artifactPath}`;
667
+ assert.equal(getArtifact(artifactPath)?.artifact_type, "ASSESSMENT");
668
+ assert.equal(getAssessment(assessmentPath)?.scope, "run-uat");
669
+ assert.equal(getAssessment(assessmentPath)?.status, "pass");
645
670
  } finally {
646
671
  closeDatabase();
647
672
  cleanup(base);
@@ -705,6 +730,67 @@ test("executeUatResultSave supplies canonical presentation and normalizes verdic
705
730
  }
706
731
  });
707
732
 
733
+ test("executeUatResultSave supplies direct browser tools for browser-executable UAT", async () => {
734
+ const base = makeTmpBase();
735
+ const worktree = join(base, ".gsd", "worktrees", "M001");
736
+ const worktreeExecDir = join(worktree, ".gsd", "exec");
737
+ const evidenceId = "uat-direct-browser-evidence";
738
+ try {
739
+ openTestDb(base);
740
+ seedMilestone("M001", "Milestone One");
741
+ seedSlice("M001", "S06", "complete");
742
+ mkdirSync(worktreeExecDir, { recursive: true });
743
+ writeFileSync(
744
+ join(worktreeExecDir, `${evidenceId}.meta.json`),
745
+ JSON.stringify({
746
+ id: evidenceId,
747
+ metadata: {
748
+ kind: "uat_exec",
749
+ milestoneId: "M001",
750
+ sliceId: "S06",
751
+ checkId: "UAT-01",
752
+ intent: "uat-browser-check",
753
+ },
754
+ }),
755
+ "utf-8",
756
+ );
757
+
758
+ const result = await inProjectDir(worktree, () => executeUatResultSave({
759
+ milestoneId: "M001",
760
+ sliceId: "S06",
761
+ uatType: "browser-executable",
762
+ verdict: "PASS",
763
+ checks: [{
764
+ id: "UAT-01",
765
+ description: "Browser flow used browser tools",
766
+ mode: "browser",
767
+ result: "PASS",
768
+ evidence: [{ kind: "gsd_uat_exec", ref: evidenceId }],
769
+ notes: "Browser check passed.",
770
+ }],
771
+ notes: "UAT passed with browser evidence.",
772
+ } as unknown as Parameters<typeof executeUatResultSave>[0], worktree));
773
+
774
+ assert.equal(result.isError, undefined);
775
+ const attempt = JSON.parse(readFileSync(
776
+ join(base, ".gsd", "uat", "M001", "S06", "attempt-1.json"),
777
+ "utf-8",
778
+ )) as { browserToolsPresented?: boolean; presentation?: { presentedTools?: string[] } };
779
+
780
+ assert.equal(result.details.browserToolsPresented, true);
781
+ assert.equal(attempt.browserToolsPresented, true);
782
+ assert.ok(attempt.presentation?.presentedTools?.includes("browser_navigate"));
783
+ assert.ok(attempt.presentation?.presentedTools?.includes("browser_assert"));
784
+ assert.equal(
785
+ attempt.presentation?.presentedTools?.some((toolName) => toolName.startsWith("mcp__gsd-browser__")),
786
+ false,
787
+ );
788
+ } finally {
789
+ closeDatabase();
790
+ cleanup(base);
791
+ }
792
+ });
793
+
708
794
  test("executeUatResultSave merges canonical plan ID and read-only tools when presentation lacks plan ID", async () => {
709
795
  const base = makeTmpBase();
710
796
  const worktree = join(base, ".gsd", "worktrees", "M001");
@@ -777,6 +863,135 @@ test("executeUatResultSave merges canonical plan ID and read-only tools when pre
777
863
  }
778
864
  });
779
865
 
866
+ test("executeUatResultSave surfaces the worktree validation path for NEEDS-HUMAN checks", async () => {
867
+ const base = makeTmpBase();
868
+ const worktree = join(base, ".gsd", "worktrees", "M001");
869
+ const worktreeExecDir = join(worktree, ".gsd", "exec");
870
+ const evidenceId = "uat-human-validation-evidence";
871
+ try {
872
+ openTestDb(base);
873
+ seedMilestone("M001", "Milestone One");
874
+ seedSlice("M001", "S07", "complete");
875
+ mkdirSync(worktreeExecDir, { recursive: true });
876
+ writeFileSync(
877
+ join(worktreeExecDir, `${evidenceId}.meta.json`),
878
+ JSON.stringify({
879
+ id: evidenceId,
880
+ metadata: {
881
+ kind: "uat_exec",
882
+ milestoneId: "M001",
883
+ sliceId: "S07",
884
+ checkId: "UAT-01",
885
+ intent: "uat-runtime-check",
886
+ },
887
+ }),
888
+ "utf-8",
889
+ );
890
+
891
+ const result = await inProjectDir(worktree, () => executeUatResultSave({
892
+ milestoneId: "M001",
893
+ sliceId: "S07",
894
+ uatType: "human-experience",
895
+ verdict: "PASS",
896
+ checks: [
897
+ {
898
+ id: "UAT-01",
899
+ description: "Service boots and renders the dashboard",
900
+ mode: "runtime",
901
+ result: "PASS",
902
+ evidence: [{ kind: "gsd_uat_exec", ref: evidenceId }],
903
+ notes: "Boot check passed.",
904
+ },
905
+ {
906
+ id: "UAT-02",
907
+ description: "Dashboard layout feels balanced",
908
+ mode: "human-follow-up",
909
+ result: "NEEDS-HUMAN",
910
+ nonAutomatable: true,
911
+ notes: "Open the app and eyeball the spacing.",
912
+ },
913
+ ],
914
+ notes: "Automatable checks passed; layout taste needs a human.",
915
+ } as unknown as Parameters<typeof executeUatResultSave>[0], worktree));
916
+
917
+ assert.equal(result.isError, undefined);
918
+ assert.equal(result.details.verdict, "PASS");
919
+ // The reviewer needs the buried worktree checkout path, not just the file.
920
+ assert.equal(result.details.manualValidationPath, worktree);
921
+ const returnedText = (result.content[0] as { text: string }).text;
922
+ assert.match(returnedText, /Manual validation needed/);
923
+ assert.ok(returnedText.includes(worktree), "tool return should include the worktree path");
924
+
925
+ const assessment = readFileSync(
926
+ join(base, ".gsd", "milestones", "M001", "slices", "S07", "S07-ASSESSMENT.md"),
927
+ "utf-8",
928
+ );
929
+ assert.match(assessment, /## Manual Validation/);
930
+ assert.ok(assessment.includes(worktree), "assessment should include the worktree checkout path");
931
+ assert.match(assessment, /git worktree/);
932
+ } finally {
933
+ closeDatabase();
934
+ cleanup(base);
935
+ }
936
+ });
937
+
938
+ test("executeUatResultSave omits manual-validation guidance when no human checks remain", async () => {
939
+ const base = makeTmpBase();
940
+ const worktree = join(base, ".gsd", "worktrees", "M001");
941
+ const worktreeExecDir = join(worktree, ".gsd", "exec");
942
+ const evidenceId = "uat-no-human-evidence";
943
+ try {
944
+ openTestDb(base);
945
+ seedMilestone("M001", "Milestone One");
946
+ seedSlice("M001", "S08", "complete");
947
+ mkdirSync(worktreeExecDir, { recursive: true });
948
+ writeFileSync(
949
+ join(worktreeExecDir, `${evidenceId}.meta.json`),
950
+ JSON.stringify({
951
+ id: evidenceId,
952
+ metadata: {
953
+ kind: "uat_exec",
954
+ milestoneId: "M001",
955
+ sliceId: "S08",
956
+ checkId: "UAT-01",
957
+ intent: "uat-artifact-check",
958
+ },
959
+ }),
960
+ "utf-8",
961
+ );
962
+
963
+ const result = await inProjectDir(worktree, () => executeUatResultSave({
964
+ milestoneId: "M001",
965
+ sliceId: "S08",
966
+ uatType: "artifact-driven",
967
+ verdict: "PASS",
968
+ checks: [{
969
+ id: "UAT-01",
970
+ description: "Config file exists",
971
+ mode: "artifact",
972
+ result: "PASS",
973
+ evidence: [{ kind: "gsd_uat_exec", ref: evidenceId }],
974
+ notes: "Artifact present.",
975
+ }],
976
+ notes: "Fully automated pass.",
977
+ } as unknown as Parameters<typeof executeUatResultSave>[0], worktree));
978
+
979
+ assert.equal(result.isError, undefined);
980
+ assert.equal(result.details.manualValidationPath, undefined);
981
+ const returnedText = (result.content[0] as { text: string }).text;
982
+ assert.equal(returnedText.includes("Manual validation needed"), false);
983
+
984
+ const assessment = readFileSync(
985
+ join(base, ".gsd", "milestones", "M001", "slices", "S08", "S08-ASSESSMENT.md"),
986
+ "utf-8",
987
+ );
988
+ assert.equal(assessment.includes("## Manual Validation"), false);
989
+ } finally {
990
+ closeDatabase();
991
+ cleanup(base);
992
+ }
993
+ });
994
+
780
995
  test("executeUatResultSave rejects saved UAT without fresh UAT-owned evidence", async () => {
781
996
  const base = makeTmpBase();
782
997
  const worktree = join(base, ".gsd", "worktrees", "M001");
@@ -1259,12 +1474,25 @@ test("executeSaveGateResult validates inputs and persists verdicts", async () =>
1259
1474
  openTestDb(base);
1260
1475
  seedMilestone("M005", "Milestone Five");
1261
1476
  seedSlice("M005", "S05", "pending");
1262
- insertGateRow({
1477
+ mkdirSync(join(base, "src"), { recursive: true });
1478
+ writeFileSync(join(base, "src", "gate.ts"), "export const gate = true;\n", "utf-8");
1479
+ await inProjectDir(base, () => executePlanSlice({
1263
1480
  milestoneId: "M005",
1264
1481
  sliceId: "S05",
1265
- gateId: "Q3",
1266
- scope: "slice",
1267
- });
1482
+ goal: "Plan gate save projection.",
1483
+ tasks: [
1484
+ {
1485
+ taskId: "T01",
1486
+ title: "Add gate fixture",
1487
+ description: "Create a fixture touched by gate evaluation.",
1488
+ estimate: "10m",
1489
+ files: ["src/gate.ts"],
1490
+ verify: "node --test",
1491
+ inputs: [],
1492
+ expectedOutput: ["src/gate.ts"],
1493
+ },
1494
+ ],
1495
+ }, base));
1268
1496
 
1269
1497
  const result = await inProjectDir(base, () => executeSaveGateResult({
1270
1498
  milestoneId: "M005",
@@ -1283,6 +1511,33 @@ test("executeSaveGateResult validates inputs and persists verdicts", async () =>
1283
1511
  assert.equal(row?.status, "complete");
1284
1512
  assert.equal(row?.verdict, "pass");
1285
1513
  assert.equal(row?.rationale, "Looks good.");
1514
+ const planPath = join(base, ".gsd", "milestones", "M005", "slices", "S05", "S05-PLAN.md");
1515
+ assert.match(readFileSync(planPath, "utf-8"), /No issues found\./);
1516
+ } finally {
1517
+ closeDatabase();
1518
+ cleanup(base);
1519
+ }
1520
+ });
1521
+
1522
+ test("executeSaveGateResult fails when no canonical gate row is updated", async () => {
1523
+ const base = makeTmpBase();
1524
+ try {
1525
+ openTestDb(base);
1526
+ seedMilestone("M005", "Milestone Five");
1527
+ seedSlice("M005", "S05", "pending");
1528
+
1529
+ const result = await inProjectDir(base, () => executeSaveGateResult({
1530
+ milestoneId: "M005",
1531
+ sliceId: "S05",
1532
+ gateId: "Q3",
1533
+ verdict: "pass",
1534
+ rationale: "Looks good.",
1535
+ findings: "No issues found.",
1536
+ }, base));
1537
+
1538
+ assert.equal(result.isError, true);
1539
+ assert.equal(result.details.operation, "save_gate_result");
1540
+ assert.match(String(result.details.error), /quality gate row not found/);
1286
1541
  } finally {
1287
1542
  closeDatabase();
1288
1543
  cleanup(base);