gsd-pi 2.58.0-dev.778d6ac → 2.58.0-dev.d63175c

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 (628) hide show
  1. package/README.md +1 -1
  2. package/dist/cli.js +35 -49
  3. package/dist/headless-ui.d.ts +0 -17
  4. package/dist/headless-ui.js +3 -97
  5. package/dist/headless.js +6 -67
  6. package/dist/help-text.js +0 -1
  7. package/dist/onboarding.js +0 -44
  8. package/dist/resource-loader.js +1 -16
  9. package/dist/resources/agents/researcher.md +1 -1
  10. package/dist/resources/extensions/ask-user-questions.js +3 -16
  11. package/dist/resources/extensions/async-jobs/extension-manifest.json +1 -1
  12. package/dist/resources/extensions/bg-shell/extension-manifest.json +1 -1
  13. package/dist/resources/extensions/browser-tools/extension-manifest.json +1 -1
  14. package/dist/resources/extensions/claude-code-cli/partial-builder.js +6 -14
  15. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +36 -59
  16. package/dist/resources/extensions/context7/extension-manifest.json +1 -1
  17. package/dist/resources/extensions/get-secrets-from-user.js +5 -8
  18. package/dist/resources/extensions/google-search/extension-manifest.json +1 -1
  19. package/dist/resources/extensions/google-search/index.js +1 -2
  20. package/dist/resources/extensions/gsd/auto/phases.js +21 -25
  21. package/dist/resources/extensions/gsd/auto-artifact-paths.js +2 -2
  22. package/dist/resources/extensions/gsd/auto-dashboard.js +20 -37
  23. package/dist/resources/extensions/gsd/auto-dispatch.js +2 -17
  24. package/dist/resources/extensions/gsd/auto-model-selection.js +3 -26
  25. package/dist/resources/extensions/gsd/auto-post-unit.js +4 -16
  26. package/dist/resources/extensions/gsd/auto-prompts.js +1 -1
  27. package/dist/resources/extensions/gsd/auto-recovery.js +5 -13
  28. package/dist/resources/extensions/gsd/auto-start.js +22 -35
  29. package/dist/resources/extensions/gsd/auto-worktree.js +12 -196
  30. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +0 -32
  31. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +8 -80
  32. package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +1 -32
  33. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +18 -33
  34. package/dist/resources/extensions/gsd/bootstrap/system-context.js +11 -44
  35. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +0 -67
  36. package/dist/resources/extensions/gsd/captures.js +4 -56
  37. package/dist/resources/extensions/gsd/db-writer.js +8 -116
  38. package/dist/resources/extensions/gsd/doctor-git-checks.js +0 -28
  39. package/dist/resources/extensions/gsd/doctor-providers.js +1 -2
  40. package/dist/resources/extensions/gsd/doctor-runtime-checks.js +4 -5
  41. package/dist/resources/extensions/gsd/doctor.js +1 -3
  42. package/dist/resources/extensions/gsd/error-classifier.js +10 -13
  43. package/dist/resources/extensions/gsd/extension-manifest.json +1 -16
  44. package/dist/resources/extensions/gsd/forensics.js +20 -123
  45. package/dist/resources/extensions/gsd/git-service.js +1 -23
  46. package/dist/resources/extensions/gsd/gitignore.js +0 -33
  47. package/dist/resources/extensions/gsd/gsd-db.js +9 -36
  48. package/dist/resources/extensions/gsd/guided-flow.js +44 -106
  49. package/dist/resources/extensions/gsd/health-widget-core.js +0 -31
  50. package/dist/resources/extensions/gsd/health-widget.js +0 -17
  51. package/dist/resources/extensions/gsd/index.js +1 -1
  52. package/dist/resources/extensions/gsd/memory-extractor.js +0 -7
  53. package/dist/resources/extensions/gsd/migrate-external.js +1 -8
  54. package/dist/resources/extensions/gsd/model-cost-table.js +0 -18
  55. package/dist/resources/extensions/gsd/model-router.js +1 -35
  56. package/dist/resources/extensions/gsd/native-git-bridge.js +0 -17
  57. package/dist/resources/extensions/gsd/notifications.js +1 -16
  58. package/dist/resources/extensions/gsd/parallel-eligibility.js +2 -13
  59. package/dist/resources/extensions/gsd/parallel-merge.js +5 -78
  60. package/dist/resources/extensions/gsd/parsers-legacy.js +3 -20
  61. package/dist/resources/extensions/gsd/paths.js +0 -43
  62. package/dist/resources/extensions/gsd/preferences-models.js +1 -14
  63. package/dist/resources/extensions/gsd/preferences-types.js +1 -2
  64. package/dist/resources/extensions/gsd/preferences.js +16 -13
  65. package/dist/resources/extensions/gsd/prompt-loader.js +1 -4
  66. package/dist/resources/extensions/gsd/prompts/complete-milestone.md +1 -1
  67. package/dist/resources/extensions/gsd/prompts/complete-slice.md +2 -4
  68. package/dist/resources/extensions/gsd/prompts/discuss-headless.md +1 -1
  69. package/dist/resources/extensions/gsd/prompts/discuss.md +1 -1
  70. package/dist/resources/extensions/gsd/prompts/execute-task.md +1 -3
  71. package/dist/resources/extensions/gsd/prompts/forensics.md +2 -2
  72. package/dist/resources/extensions/gsd/prompts/guided-discuss-milestone.md +1 -1
  73. package/dist/resources/extensions/gsd/prompts/guided-discuss-slice.md +1 -1
  74. package/dist/resources/extensions/gsd/prompts/plan-slice.md +0 -2
  75. package/dist/resources/extensions/gsd/prompts/rethink.md +1 -1
  76. package/dist/resources/extensions/gsd/prompts/triage-captures.md +0 -1
  77. package/dist/resources/extensions/gsd/repo-identity.js +11 -205
  78. package/dist/resources/extensions/gsd/rethink.js +0 -5
  79. package/dist/resources/extensions/gsd/roadmap-slices.js +4 -5
  80. package/dist/resources/extensions/gsd/state.js +27 -85
  81. package/dist/resources/extensions/gsd/tests/dist-redirect.mjs +1 -20
  82. package/dist/resources/extensions/gsd/tools/complete-task.js +71 -34
  83. package/dist/resources/extensions/gsd/tools/plan-milestone.js +2 -12
  84. package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +1 -29
  85. package/dist/resources/extensions/gsd/tools/validate-milestone.js +3 -14
  86. package/dist/resources/extensions/gsd/triage-resolution.js +7 -22
  87. package/dist/resources/extensions/gsd/undo.js +2 -2
  88. package/dist/resources/extensions/gsd/unit-ownership.js +33 -164
  89. package/dist/resources/extensions/gsd/verdict-parser.js +8 -20
  90. package/dist/resources/extensions/gsd/workflow-manifest.js +5 -24
  91. package/dist/resources/extensions/gsd/workflow-projections.js +63 -95
  92. package/dist/resources/extensions/gsd/workflow-reconcile.js +5 -35
  93. package/dist/resources/extensions/gsd/workspace-index.js +0 -24
  94. package/dist/resources/extensions/gsd/worktree-manager.js +1 -105
  95. package/dist/resources/extensions/gsd/worktree-resolver.js +3 -20
  96. package/dist/resources/extensions/mcp-client/index.js +7 -11
  97. package/dist/resources/extensions/search-the-web/extension-manifest.json +1 -1
  98. package/dist/resources/extensions/shared/interview-ui.js +1 -11
  99. package/dist/resources/skills/create-gsd-extension/SKILL.md +3 -5
  100. package/dist/resources/skills/create-gsd-extension/references/key-rules-gotchas.md +4 -5
  101. package/dist/resources/skills/create-gsd-extension/workflows/add-capability.md +2 -2
  102. package/dist/resources/skills/create-gsd-extension/workflows/create-extension.md +4 -4
  103. package/dist/resources/skills/create-gsd-extension/workflows/debug-extension.md +3 -5
  104. package/dist/web/standalone/.next/BUILD_ID +1 -1
  105. package/dist/web/standalone/.next/app-path-routes-manifest.json +17 -17
  106. package/dist/web/standalone/.next/build-manifest.json +3 -3
  107. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  108. package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
  109. package/dist/web/standalone/.next/required-server-files.json +1 -1
  110. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  111. package/dist/web/standalone/.next/server/app/_global-error.html +2 -2
  112. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  113. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  114. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  115. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  116. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  117. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  118. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  119. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  120. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  121. package/dist/web/standalone/.next/server/app/_not-found.rsc +2 -2
  122. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  123. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  124. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  125. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  126. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  127. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  128. package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
  129. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
  130. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
  131. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
  132. package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
  133. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  134. package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
  135. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  136. package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  137. package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
  138. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  139. package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
  140. package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
  141. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  142. package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
  143. package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  144. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  145. package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
  146. package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  147. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  148. package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  149. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  150. package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  151. package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
  152. package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
  153. package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
  154. package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  155. package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  156. package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  157. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  158. package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
  159. package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
  160. package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
  161. package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
  162. package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
  163. package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
  164. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  165. package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
  166. package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  167. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  168. package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
  169. package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
  170. package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
  171. package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
  172. package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
  173. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
  174. package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
  175. package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
  176. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  177. package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
  178. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  179. package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  180. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  181. package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
  182. package/dist/web/standalone/.next/server/app/index.html +1 -1
  183. package/dist/web/standalone/.next/server/app/index.rsc +2 -2
  184. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  185. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +2 -2
  186. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  187. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +2 -2
  188. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  189. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  190. package/dist/web/standalone/.next/server/app-paths-manifest.json +17 -17
  191. package/dist/web/standalone/.next/server/chunks/2229.js +2 -2
  192. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  193. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  194. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  195. package/dist/web/standalone/.next/server/pages/500.html +2 -2
  196. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  197. package/dist/web/standalone/.next/static/chunks/6502.8b732f67a11b11b4.js +9 -0
  198. package/dist/web/standalone/.next/static/chunks/{webpack-a1c1e452c6b32d04.js → webpack-61d3afac6d0f0ce7.js} +1 -1
  199. package/dist/web/standalone/.next/static/css/a58ef8a151aa0493.css +1 -0
  200. package/dist/web/standalone/server.js +1 -1
  201. package/dist/web-mode.js +1 -2
  202. package/package.json +2 -2
  203. package/packages/native/dist/ast/index.js +5 -9
  204. package/packages/native/dist/ast/types.js +1 -2
  205. package/packages/native/dist/clipboard/index.js +7 -12
  206. package/packages/native/dist/clipboard/types.js +1 -2
  207. package/packages/native/dist/diff/index.js +7 -12
  208. package/packages/native/dist/diff/types.js +1 -2
  209. package/packages/native/dist/fd/index.js +3 -6
  210. package/packages/native/dist/fd/types.js +1 -2
  211. package/packages/native/dist/glob/index.js +5 -9
  212. package/packages/native/dist/glob/types.js +1 -2
  213. package/packages/native/dist/grep/index.js +5 -9
  214. package/packages/native/dist/grep/types.js +1 -2
  215. package/packages/native/dist/gsd-parser/index.js +11 -18
  216. package/packages/native/dist/gsd-parser/types.js +1 -2
  217. package/packages/native/dist/highlight/index.js +7 -12
  218. package/packages/native/dist/highlight/types.js +1 -2
  219. package/packages/native/dist/html/index.js +3 -6
  220. package/packages/native/dist/html/types.js +1 -2
  221. package/packages/native/dist/image/index.js +5 -10
  222. package/packages/native/dist/image/types.js +4 -7
  223. package/packages/native/dist/index.js +17 -70
  224. package/packages/native/dist/json-parse/index.js +8 -13
  225. package/packages/native/dist/native.js +10 -47
  226. package/packages/native/dist/ps/index.js +9 -15
  227. package/packages/native/dist/ps/types.js +1 -2
  228. package/packages/native/dist/stream-process/index.js +7 -12
  229. package/packages/native/dist/text/index.js +14 -24
  230. package/packages/native/dist/text/types.js +2 -5
  231. package/packages/native/dist/truncate/index.js +7 -12
  232. package/packages/native/dist/ttsr/index.js +7 -12
  233. package/packages/native/dist/ttsr/types.js +1 -2
  234. package/packages/native/dist/xxhash/index.js +5 -9
  235. package/packages/native/package.json +19 -19
  236. package/packages/native/src/native.ts +8 -9
  237. package/packages/pi-agent-core/dist/agent-loop.js +2 -3
  238. package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
  239. package/packages/pi-agent-core/dist/proxy.d.ts +1 -1
  240. package/packages/pi-agent-core/dist/proxy.d.ts.map +1 -1
  241. package/packages/pi-agent-core/dist/proxy.js.map +1 -1
  242. package/packages/pi-agent-core/src/agent-loop.ts +2 -3
  243. package/packages/pi-agent-core/src/proxy.ts +1 -1
  244. package/packages/pi-ai/dist/env-api-keys.js +0 -1
  245. package/packages/pi-ai/dist/env-api-keys.js.map +1 -1
  246. package/packages/pi-ai/dist/index.d.ts +0 -1
  247. package/packages/pi-ai/dist/index.d.ts.map +1 -1
  248. package/packages/pi-ai/dist/index.js +0 -1
  249. package/packages/pi-ai/dist/index.js.map +1 -1
  250. package/packages/pi-ai/dist/providers/anthropic-shared.d.ts.map +1 -1
  251. package/packages/pi-ai/dist/providers/anthropic-shared.js +2 -19
  252. package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
  253. package/packages/pi-ai/dist/types.d.ts +3 -3
  254. package/packages/pi-ai/dist/types.d.ts.map +1 -1
  255. package/packages/pi-ai/dist/types.js.map +1 -1
  256. package/packages/pi-ai/dist/utils/json-parse.d.ts +0 -3
  257. package/packages/pi-ai/dist/utils/json-parse.d.ts.map +1 -1
  258. package/packages/pi-ai/dist/utils/json-parse.js +1 -24
  259. package/packages/pi-ai/dist/utils/json-parse.js.map +1 -1
  260. package/packages/pi-ai/src/env-api-keys.ts +0 -1
  261. package/packages/pi-ai/src/index.ts +0 -1
  262. package/packages/pi-ai/src/providers/anthropic-shared.ts +2 -17
  263. package/packages/pi-ai/src/types.ts +2 -3
  264. package/packages/pi-ai/src/utils/json-parse.ts +1 -28
  265. package/packages/pi-coding-agent/dist/core/agent-session.d.ts +0 -4
  266. package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  267. package/packages/pi-coding-agent/dist/core/agent-session.js +0 -31
  268. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  269. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts +1 -17
  270. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
  271. package/packages/pi-coding-agent/dist/core/compaction/compaction.js +2 -62
  272. package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
  273. package/packages/pi-coding-agent/dist/core/exec.d.ts.map +1 -1
  274. package/packages/pi-coding-agent/dist/core/exec.js +1 -3
  275. package/packages/pi-coding-agent/dist/core/exec.js.map +1 -1
  276. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +0 -4
  277. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
  278. package/packages/pi-coding-agent/dist/core/extensions/index.js +0 -2
  279. package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
  280. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts +0 -5
  281. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
  282. package/packages/pi-coding-agent/dist/core/extensions/loader.js +0 -5
  283. package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
  284. package/packages/pi-coding-agent/dist/core/index.d.ts +1 -1
  285. package/packages/pi-coding-agent/dist/core/index.d.ts.map +1 -1
  286. package/packages/pi-coding-agent/dist/core/index.js +1 -1
  287. package/packages/pi-coding-agent/dist/core/index.js.map +1 -1
  288. package/packages/pi-coding-agent/dist/core/lsp/index.d.ts.map +1 -1
  289. package/packages/pi-coding-agent/dist/core/lsp/index.js +0 -3
  290. package/packages/pi-coding-agent/dist/core/lsp/index.js.map +1 -1
  291. package/packages/pi-coding-agent/dist/core/lsp/lspmux.d.ts.map +1 -1
  292. package/packages/pi-coding-agent/dist/core/lsp/lspmux.js +0 -3
  293. package/packages/pi-coding-agent/dist/core/lsp/lspmux.js.map +1 -1
  294. package/packages/pi-coding-agent/dist/core/messages.d.ts.map +1 -1
  295. package/packages/pi-coding-agent/dist/core/messages.js +2 -31
  296. package/packages/pi-coding-agent/dist/core/messages.js.map +1 -1
  297. package/packages/pi-coding-agent/dist/core/model-resolver.d.ts.map +1 -1
  298. package/packages/pi-coding-agent/dist/core/model-resolver.js +0 -1
  299. package/packages/pi-coding-agent/dist/core/model-resolver.js.map +1 -1
  300. package/packages/pi-coding-agent/dist/core/resource-loader.d.ts +0 -10
  301. package/packages/pi-coding-agent/dist/core/resource-loader.d.ts.map +1 -1
  302. package/packages/pi-coding-agent/dist/core/resource-loader.js +1 -12
  303. package/packages/pi-coding-agent/dist/core/resource-loader.js.map +1 -1
  304. package/packages/pi-coding-agent/dist/core/retry-handler.d.ts +0 -6
  305. package/packages/pi-coding-agent/dist/core/retry-handler.d.ts.map +1 -1
  306. package/packages/pi-coding-agent/dist/core/retry-handler.js +1 -48
  307. package/packages/pi-coding-agent/dist/core/retry-handler.js.map +1 -1
  308. package/packages/pi-coding-agent/dist/core/tools/hashline-read.d.ts.map +1 -1
  309. package/packages/pi-coding-agent/dist/core/tools/hashline-read.js +3 -10
  310. package/packages/pi-coding-agent/dist/core/tools/hashline-read.js.map +1 -1
  311. package/packages/pi-coding-agent/dist/core/tools/read.d.ts.map +1 -1
  312. package/packages/pi-coding-agent/dist/core/tools/read.js +4 -13
  313. package/packages/pi-coding-agent/dist/core/tools/read.js.map +1 -1
  314. package/packages/pi-coding-agent/dist/index.d.ts +2 -2
  315. package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
  316. package/packages/pi-coding-agent/dist/index.js +1 -1
  317. package/packages/pi-coding-agent/dist/index.js.map +1 -1
  318. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  319. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +0 -4
  320. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  321. package/packages/pi-coding-agent/dist/modes/rpc/remote-terminal.d.ts +0 -1
  322. package/packages/pi-coding-agent/dist/modes/rpc/remote-terminal.d.ts.map +1 -1
  323. package/packages/pi-coding-agent/dist/modes/rpc/remote-terminal.js +0 -5
  324. package/packages/pi-coding-agent/dist/modes/rpc/remote-terminal.js.map +1 -1
  325. package/packages/pi-coding-agent/src/core/agent-session.ts +1 -38
  326. package/packages/pi-coding-agent/src/core/compaction/compaction.ts +1 -94
  327. package/packages/pi-coding-agent/src/core/exec.ts +1 -3
  328. package/packages/pi-coding-agent/src/core/extensions/index.ts +0 -4
  329. package/packages/pi-coding-agent/src/core/extensions/loader.ts +0 -5
  330. package/packages/pi-coding-agent/src/core/index.ts +0 -6
  331. package/packages/pi-coding-agent/src/core/lsp/index.ts +0 -3
  332. package/packages/pi-coding-agent/src/core/lsp/lspmux.ts +0 -3
  333. package/packages/pi-coding-agent/src/core/messages.ts +2 -29
  334. package/packages/pi-coding-agent/src/core/model-resolver.ts +0 -1
  335. package/packages/pi-coding-agent/src/core/resource-loader.ts +1 -20
  336. package/packages/pi-coding-agent/src/core/retry-handler.ts +1 -52
  337. package/packages/pi-coding-agent/src/core/tools/hashline-read.ts +3 -11
  338. package/packages/pi-coding-agent/src/core/tools/read.ts +4 -14
  339. package/packages/pi-coding-agent/src/index.ts +0 -6
  340. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +0 -7
  341. package/packages/pi-coding-agent/src/modes/rpc/remote-terminal.ts +0 -6
  342. package/packages/pi-tui/dist/terminal.d.ts +0 -2
  343. package/packages/pi-tui/dist/terminal.d.ts.map +1 -1
  344. package/packages/pi-tui/dist/terminal.js +0 -9
  345. package/packages/pi-tui/dist/terminal.js.map +1 -1
  346. package/packages/pi-tui/dist/tui.d.ts.map +1 -1
  347. package/packages/pi-tui/dist/tui.js +0 -9
  348. package/packages/pi-tui/dist/tui.js.map +1 -1
  349. package/packages/pi-tui/src/terminal.ts +0 -14
  350. package/packages/pi-tui/src/tui.ts +0 -8
  351. package/scripts/ensure-workspace-builds.cjs +14 -45
  352. package/src/resources/agents/researcher.md +1 -1
  353. package/src/resources/extensions/ask-user-questions.ts +3 -21
  354. package/src/resources/extensions/async-jobs/extension-manifest.json +1 -1
  355. package/src/resources/extensions/bg-shell/extension-manifest.json +1 -1
  356. package/src/resources/extensions/browser-tools/extension-manifest.json +1 -1
  357. package/src/resources/extensions/claude-code-cli/partial-builder.ts +6 -13
  358. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +35 -63
  359. package/src/resources/extensions/claude-code-cli/tests/partial-builder.test.ts +0 -28
  360. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +1 -108
  361. package/src/resources/extensions/context7/extension-manifest.json +1 -1
  362. package/src/resources/extensions/get-secrets-from-user.ts +5 -8
  363. package/src/resources/extensions/google-search/extension-manifest.json +1 -1
  364. package/src/resources/extensions/google-search/index.ts +1 -2
  365. package/src/resources/extensions/gsd/auto/loop-deps.ts +0 -1
  366. package/src/resources/extensions/gsd/auto/phases.ts +34 -43
  367. package/src/resources/extensions/gsd/auto-artifact-paths.ts +2 -2
  368. package/src/resources/extensions/gsd/auto-dashboard.ts +19 -37
  369. package/src/resources/extensions/gsd/auto-dispatch.ts +2 -18
  370. package/src/resources/extensions/gsd/auto-model-selection.ts +5 -26
  371. package/src/resources/extensions/gsd/auto-post-unit.ts +4 -18
  372. package/src/resources/extensions/gsd/auto-prompts.ts +1 -1
  373. package/src/resources/extensions/gsd/auto-recovery.ts +5 -12
  374. package/src/resources/extensions/gsd/auto-start.ts +26 -35
  375. package/src/resources/extensions/gsd/auto-worktree.ts +9 -190
  376. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +0 -31
  377. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +8 -85
  378. package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +1 -38
  379. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +19 -31
  380. package/src/resources/extensions/gsd/bootstrap/system-context.ts +11 -50
  381. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +0 -75
  382. package/src/resources/extensions/gsd/captures.ts +3 -63
  383. package/src/resources/extensions/gsd/db-writer.ts +7 -140
  384. package/src/resources/extensions/gsd/doctor-git-checks.ts +0 -26
  385. package/src/resources/extensions/gsd/doctor-providers.ts +1 -2
  386. package/src/resources/extensions/gsd/doctor-runtime-checks.ts +4 -5
  387. package/src/resources/extensions/gsd/doctor.ts +1 -3
  388. package/src/resources/extensions/gsd/error-classifier.ts +11 -14
  389. package/src/resources/extensions/gsd/extension-manifest.json +1 -16
  390. package/src/resources/extensions/gsd/forensics.ts +20 -144
  391. package/src/resources/extensions/gsd/git-service.ts +3 -26
  392. package/src/resources/extensions/gsd/gitignore.ts +0 -33
  393. package/src/resources/extensions/gsd/gsd-db.ts +7 -43
  394. package/src/resources/extensions/gsd/guided-flow.ts +45 -114
  395. package/src/resources/extensions/gsd/health-widget-core.ts +0 -34
  396. package/src/resources/extensions/gsd/health-widget.ts +0 -17
  397. package/src/resources/extensions/gsd/index.ts +0 -1
  398. package/src/resources/extensions/gsd/memory-extractor.ts +0 -8
  399. package/src/resources/extensions/gsd/migrate-external.ts +1 -9
  400. package/src/resources/extensions/gsd/model-cost-table.ts +0 -19
  401. package/src/resources/extensions/gsd/model-router.ts +1 -35
  402. package/src/resources/extensions/gsd/native-git-bridge.ts +0 -17
  403. package/src/resources/extensions/gsd/notifications.ts +0 -16
  404. package/src/resources/extensions/gsd/parallel-eligibility.ts +2 -15
  405. package/src/resources/extensions/gsd/parallel-merge.ts +4 -87
  406. package/src/resources/extensions/gsd/parsers-legacy.ts +3 -22
  407. package/src/resources/extensions/gsd/paths.ts +0 -42
  408. package/src/resources/extensions/gsd/preferences-models.ts +1 -14
  409. package/src/resources/extensions/gsd/preferences-types.ts +1 -2
  410. package/src/resources/extensions/gsd/preferences.ts +15 -13
  411. package/src/resources/extensions/gsd/prompt-loader.ts +1 -4
  412. package/src/resources/extensions/gsd/prompts/complete-milestone.md +1 -1
  413. package/src/resources/extensions/gsd/prompts/complete-slice.md +2 -4
  414. package/src/resources/extensions/gsd/prompts/discuss-headless.md +1 -1
  415. package/src/resources/extensions/gsd/prompts/discuss.md +1 -1
  416. package/src/resources/extensions/gsd/prompts/execute-task.md +1 -3
  417. package/src/resources/extensions/gsd/prompts/forensics.md +2 -2
  418. package/src/resources/extensions/gsd/prompts/guided-discuss-milestone.md +1 -1
  419. package/src/resources/extensions/gsd/prompts/guided-discuss-slice.md +1 -1
  420. package/src/resources/extensions/gsd/prompts/plan-slice.md +0 -2
  421. package/src/resources/extensions/gsd/prompts/rethink.md +1 -1
  422. package/src/resources/extensions/gsd/prompts/triage-captures.md +0 -1
  423. package/src/resources/extensions/gsd/repo-identity.ts +11 -186
  424. package/src/resources/extensions/gsd/rethink.ts +0 -6
  425. package/src/resources/extensions/gsd/roadmap-slices.ts +4 -5
  426. package/src/resources/extensions/gsd/state.ts +32 -84
  427. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +0 -29
  428. package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +1 -71
  429. package/src/resources/extensions/gsd/tests/captures.test.ts +0 -103
  430. package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +0 -27
  431. package/src/resources/extensions/gsd/tests/complete-slice.test.ts +0 -21
  432. package/src/resources/extensions/gsd/tests/db-writer.test.ts +12 -7
  433. package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +5 -78
  434. package/src/resources/extensions/gsd/tests/derive-state.test.ts +0 -29
  435. package/src/resources/extensions/gsd/tests/discuss-queued-milestones.test.ts +0 -40
  436. package/src/resources/extensions/gsd/tests/dist-redirect.mjs +1 -20
  437. package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +0 -117
  438. package/src/resources/extensions/gsd/tests/empty-db-reconciliation.test.ts +79 -0
  439. package/src/resources/extensions/gsd/tests/forensics-dedup.test.ts +0 -31
  440. package/src/resources/extensions/gsd/tests/gsd-tools.test.ts +12 -125
  441. package/src/resources/extensions/gsd/tests/health-widget.test.ts +0 -67
  442. package/src/resources/extensions/gsd/tests/integration/auto-recovery.test.ts +1 -111
  443. package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +0 -101
  444. package/src/resources/extensions/gsd/tests/integration/auto-worktree.test.ts +0 -59
  445. package/src/resources/extensions/gsd/tests/integration/parallel-merge.test.ts +0 -110
  446. package/src/resources/extensions/gsd/tests/integration/run-uat.test.ts +1 -1
  447. package/src/resources/extensions/gsd/tests/memory-extractor.test.ts +2 -85
  448. package/src/resources/extensions/gsd/tests/model-cost-table.test.ts +0 -34
  449. package/src/resources/extensions/gsd/tests/model-router.test.ts +3 -68
  450. package/src/resources/extensions/gsd/tests/model-unittype-mapping.test.ts +0 -28
  451. package/src/resources/extensions/gsd/tests/notifications.test.ts +0 -45
  452. package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +1 -33
  453. package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +0 -29
  454. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +0 -38
  455. package/src/resources/extensions/gsd/tests/reassess-handler.test.ts +0 -117
  456. package/src/resources/extensions/gsd/tests/roadmap-slices.test.ts +0 -97
  457. package/src/resources/extensions/gsd/tests/secure-env-collect.test.ts +0 -134
  458. package/src/resources/extensions/gsd/tests/tool-naming.test.ts +1 -2
  459. package/src/resources/extensions/gsd/tests/triage-resolution.test.ts +0 -8
  460. package/src/resources/extensions/gsd/tests/unit-ownership.test.ts +17 -100
  461. package/src/resources/extensions/gsd/tests/validate-milestone-write-order.test.ts +1 -4
  462. package/src/resources/extensions/gsd/tests/workflow-logger.test.ts +0 -48
  463. package/src/resources/extensions/gsd/tests/workflow-manifest.test.ts +0 -92
  464. package/src/resources/extensions/gsd/tests/workflow-projections.test.ts +2 -4
  465. package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +1 -48
  466. package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +5 -29
  467. package/src/resources/extensions/gsd/tools/complete-task.ts +74 -36
  468. package/src/resources/extensions/gsd/tools/plan-milestone.ts +1 -13
  469. package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +0 -36
  470. package/src/resources/extensions/gsd/tools/validate-milestone.ts +2 -20
  471. package/src/resources/extensions/gsd/triage-resolution.ts +6 -23
  472. package/src/resources/extensions/gsd/types.ts +2 -4
  473. package/src/resources/extensions/gsd/undo.ts +2 -2
  474. package/src/resources/extensions/gsd/unit-ownership.ts +35 -206
  475. package/src/resources/extensions/gsd/verdict-parser.ts +6 -21
  476. package/src/resources/extensions/gsd/workflow-logger.ts +1 -3
  477. package/src/resources/extensions/gsd/workflow-manifest.ts +5 -22
  478. package/src/resources/extensions/gsd/workflow-projections.ts +64 -97
  479. package/src/resources/extensions/gsd/workflow-reconcile.ts +10 -39
  480. package/src/resources/extensions/gsd/workspace-index.ts +0 -30
  481. package/src/resources/extensions/gsd/worktree-manager.ts +1 -120
  482. package/src/resources/extensions/gsd/worktree-resolver.ts +3 -22
  483. package/src/resources/extensions/mcp-client/index.ts +7 -13
  484. package/src/resources/extensions/search-the-web/extension-manifest.json +1 -1
  485. package/src/resources/extensions/shared/interview-ui.ts +1 -12
  486. package/src/resources/skills/create-gsd-extension/SKILL.md +3 -5
  487. package/src/resources/skills/create-gsd-extension/references/key-rules-gotchas.md +4 -5
  488. package/src/resources/skills/create-gsd-extension/workflows/add-capability.md +2 -2
  489. package/src/resources/skills/create-gsd-extension/workflows/create-extension.md +4 -4
  490. package/src/resources/skills/create-gsd-extension/workflows/debug-extension.md +3 -5
  491. package/dist/resources/extensions/gsd/milestone-validation-gates.js +0 -45
  492. package/dist/resources/extensions/ollama/index.js +0 -112
  493. package/dist/resources/extensions/ollama/model-capabilities.js +0 -115
  494. package/dist/resources/extensions/ollama/ollama-client.js +0 -168
  495. package/dist/resources/extensions/ollama/ollama-commands.js +0 -194
  496. package/dist/resources/extensions/ollama/ollama-discovery.js +0 -69
  497. package/dist/resources/extensions/ollama/ollama-tool.js +0 -184
  498. package/dist/resources/extensions/ollama/types.js +0 -2
  499. package/dist/startup-model-validation.d.ts +0 -39
  500. package/dist/startup-model-validation.js +0 -50
  501. package/dist/web/standalone/.next/static/chunks/6502.7593d7797a4b3999.js +0 -9
  502. package/dist/web/standalone/.next/static/css/f6e8833d46e738d8.css +0 -1
  503. package/packages/native/src/__tests__/module-compat.test.mjs +0 -91
  504. package/packages/pi-agent-core/src/agent-loop.test.ts +0 -45
  505. package/packages/pi-ai/dist/providers/anthropic-shared.test.d.ts +0 -2
  506. package/packages/pi-ai/dist/providers/anthropic-shared.test.d.ts.map +0 -1
  507. package/packages/pi-ai/dist/providers/anthropic-shared.test.js +0 -25
  508. package/packages/pi-ai/dist/providers/anthropic-shared.test.js.map +0 -1
  509. package/packages/pi-ai/dist/utils/repair-tool-json.d.ts +0 -37
  510. package/packages/pi-ai/dist/utils/repair-tool-json.d.ts.map +0 -1
  511. package/packages/pi-ai/dist/utils/repair-tool-json.js +0 -75
  512. package/packages/pi-ai/dist/utils/repair-tool-json.js.map +0 -1
  513. package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.d.ts +0 -2
  514. package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.d.ts.map +0 -1
  515. package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.js +0 -73
  516. package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.js.map +0 -1
  517. package/packages/pi-ai/src/providers/anthropic-shared.test.ts +0 -29
  518. package/packages/pi-ai/src/utils/repair-tool-json.ts +0 -88
  519. package/packages/pi-ai/src/utils/tests/repair-tool-json.test.ts +0 -102
  520. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.d.ts +0 -6
  521. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.d.ts.map +0 -1
  522. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js +0 -176
  523. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js.map +0 -1
  524. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.d.ts +0 -28
  525. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.d.ts.map +0 -1
  526. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.js +0 -37
  527. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.js.map +0 -1
  528. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.d.ts +0 -2
  529. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.d.ts.map +0 -1
  530. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.js +0 -63
  531. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.js.map +0 -1
  532. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.d.ts +0 -19
  533. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.d.ts.map +0 -1
  534. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.js +0 -115
  535. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.js.map +0 -1
  536. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.d.ts +0 -2
  537. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.d.ts.map +0 -1
  538. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.js +0 -109
  539. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.js.map +0 -1
  540. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.d.ts +0 -44
  541. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.d.ts.map +0 -1
  542. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.js +0 -97
  543. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.js.map +0 -1
  544. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.test.d.ts +0 -2
  545. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.test.d.ts.map +0 -1
  546. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.test.js +0 -181
  547. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.test.js.map +0 -1
  548. package/packages/pi-coding-agent/dist/core/messages.test.d.ts +0 -9
  549. package/packages/pi-coding-agent/dist/core/messages.test.d.ts.map +0 -1
  550. package/packages/pi-coding-agent/dist/core/messages.test.js +0 -86
  551. package/packages/pi-coding-agent/dist/core/messages.test.js.map +0 -1
  552. package/packages/pi-coding-agent/dist/core/retry-handler.test.d.ts +0 -9
  553. package/packages/pi-coding-agent/dist/core/retry-handler.test.d.ts.map +0 -1
  554. package/packages/pi-coding-agent/dist/core/retry-handler.test.js +0 -193
  555. package/packages/pi-coding-agent/dist/core/retry-handler.test.js.map +0 -1
  556. package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.d.ts +0 -16
  557. package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.d.ts.map +0 -1
  558. package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.js +0 -80
  559. package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.js.map +0 -1
  560. package/packages/pi-coding-agent/src/core/compaction/compaction.test.ts +0 -236
  561. package/packages/pi-coding-agent/src/core/extensions/extension-manifest.test.ts +0 -77
  562. package/packages/pi-coding-agent/src/core/extensions/extension-manifest.ts +0 -62
  563. package/packages/pi-coding-agent/src/core/extensions/extension-sort.test.ts +0 -134
  564. package/packages/pi-coding-agent/src/core/extensions/extension-sort.ts +0 -137
  565. package/packages/pi-coding-agent/src/core/image-overflow-recovery.test.ts +0 -228
  566. package/packages/pi-coding-agent/src/core/image-overflow-recovery.ts +0 -118
  567. package/packages/pi-coding-agent/src/core/messages.test.ts +0 -114
  568. package/packages/pi-coding-agent/src/core/retry-handler.test.ts +0 -255
  569. package/packages/pi-coding-agent/src/core/tools/spawn-shell-windows.test.ts +0 -92
  570. package/src/resources/extensions/gsd/milestone-validation-gates.ts +0 -56
  571. package/src/resources/extensions/gsd/tests/auto-mode-interactive-guard.test.ts +0 -71
  572. package/src/resources/extensions/gsd/tests/cli-provider-rate-limit.test.ts +0 -47
  573. package/src/resources/extensions/gsd/tests/completion-hierarchy-guards.test.ts +0 -192
  574. package/src/resources/extensions/gsd/tests/db-path-worktree-symlink.test.ts +0 -131
  575. package/src/resources/extensions/gsd/tests/discord-invite-links.test.ts +0 -47
  576. package/src/resources/extensions/gsd/tests/discuss-empty-db-fallback.test.ts +0 -127
  577. package/src/resources/extensions/gsd/tests/dynamic-routing-default.test.ts +0 -20
  578. package/src/resources/extensions/gsd/tests/empty-content-abort-loop.test.ts +0 -74
  579. package/src/resources/extensions/gsd/tests/event-replay-idempotency.test.ts +0 -140
  580. package/src/resources/extensions/gsd/tests/forensics-context-persist.test.ts +0 -129
  581. package/src/resources/extensions/gsd/tests/forensics-db-completion.test.ts +0 -96
  582. package/src/resources/extensions/gsd/tests/gsdroot-worktree-detection.test.ts +0 -164
  583. package/src/resources/extensions/gsd/tests/guided-flow-dynamic-routing.test.ts +0 -135
  584. package/src/resources/extensions/gsd/tests/guided-flow-session-isolation.test.ts +0 -97
  585. package/src/resources/extensions/gsd/tests/hook-key-parsing.test.ts +0 -107
  586. package/src/resources/extensions/gsd/tests/integration/doctor-false-positives.test.ts +0 -243
  587. package/src/resources/extensions/gsd/tests/integration/gitignore-staging-2570.test.ts +0 -150
  588. package/src/resources/extensions/gsd/tests/integration/state-machine-live-validation.test.ts +0 -959
  589. package/src/resources/extensions/gsd/tests/migrate-external-worktree.test.ts +0 -105
  590. package/src/resources/extensions/gsd/tests/milestone-status-authoritative.test.ts +0 -116
  591. package/src/resources/extensions/gsd/tests/parallel-commit-scope.test.ts +0 -159
  592. package/src/resources/extensions/gsd/tests/parallel-eligibility-ghost.test.ts +0 -150
  593. package/src/resources/extensions/gsd/tests/plan-milestone-title.test.ts +0 -70
  594. package/src/resources/extensions/gsd/tests/project-relocation-recovery.test.ts +0 -297
  595. package/src/resources/extensions/gsd/tests/prompt-loader-replacement.test.ts +0 -178
  596. package/src/resources/extensions/gsd/tests/prompt-tool-names.test.ts +0 -69
  597. package/src/resources/extensions/gsd/tests/queue-execution-guard.test.ts +0 -157
  598. package/src/resources/extensions/gsd/tests/quick-turn-end-cleanup.test.ts +0 -90
  599. package/src/resources/extensions/gsd/tests/reconciliation-edge-cases.test.ts +0 -162
  600. package/src/resources/extensions/gsd/tests/slice-disk-reconcile.test.ts +0 -233
  601. package/src/resources/extensions/gsd/tests/stash-queued-context-files.test.ts +0 -305
  602. package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +0 -405
  603. package/src/resources/extensions/gsd/tests/state-derivation-parity.test.ts +0 -257
  604. package/src/resources/extensions/gsd/tests/state-machine-full-walkthrough.test.ts +0 -1628
  605. package/src/resources/extensions/gsd/tests/stop-auto-race-null-unit.test.ts +0 -106
  606. package/src/resources/extensions/gsd/tests/stuck-detection-coverage.test.ts +0 -174
  607. package/src/resources/extensions/gsd/tests/summary-render-parity.test.ts +0 -221
  608. package/src/resources/extensions/gsd/tests/uat-stuck-loop-orphaned-worktree.test.ts +0 -289
  609. package/src/resources/extensions/gsd/tests/vacuum-recovery.test.ts +0 -154
  610. package/src/resources/extensions/gsd/tests/verdict-parser.test.ts +0 -156
  611. package/src/resources/extensions/gsd/tests/verification-operational-gate.test.ts +0 -82
  612. package/src/resources/extensions/gsd/tests/worktree-db-respawn-truncation.test.ts +0 -140
  613. package/src/resources/extensions/gsd/tests/worktree-nested-git-safety.test.ts +0 -101
  614. package/src/resources/extensions/gsd/tests/zombie-gsd-state.test.ts +0 -95
  615. package/src/resources/extensions/mcp-client/tests/server-name-spaces.test.ts +0 -55
  616. package/src/resources/extensions/ollama/index.ts +0 -130
  617. package/src/resources/extensions/ollama/model-capabilities.ts +0 -145
  618. package/src/resources/extensions/ollama/ollama-client.ts +0 -196
  619. package/src/resources/extensions/ollama/ollama-commands.ts +0 -248
  620. package/src/resources/extensions/ollama/ollama-discovery.ts +0 -106
  621. package/src/resources/extensions/ollama/ollama-tool.ts +0 -218
  622. package/src/resources/extensions/ollama/tests/model-capabilities.test.ts +0 -162
  623. package/src/resources/extensions/ollama/tests/ollama-client.test.ts +0 -38
  624. package/src/resources/extensions/ollama/tests/ollama-discovery.test.ts +0 -28
  625. package/src/resources/extensions/ollama/types.ts +0 -130
  626. package/src/resources/extensions/shared/tests/ask-user-freetext.test.ts +0 -156
  627. /package/dist/web/standalone/.next/static/{R0D4xaIPl5kg93edN7Oo0 → 5DLsjFHdSB6_a1EDQVjr7}/_buildManifest.js +0 -0
  628. /package/dist/web/standalone/.next/static/{R0D4xaIPl5kg93edN7Oo0 → 5DLsjFHdSB6_a1EDQVjr7}/_ssgManifest.js +0 -0
@@ -15,41 +15,79 @@ import { checkOwnership, taskUnitKey } from "../unit-ownership.js";
15
15
  import { saveFile, clearParseCache } from "../files.js";
16
16
  import { invalidateStateCache } from "../state.js";
17
17
  import { renderPlanCheckboxes } from "../markdown-renderer.js";
18
- import { renderAllProjections, renderSummaryContent } from "../workflow-projections.js";
18
+ import { renderAllProjections } from "../workflow-projections.js";
19
19
  import { writeManifest } from "../workflow-manifest.js";
20
20
  import { appendEvent } from "../workflow-events.js";
21
21
  /**
22
- * Build a TaskRow-shaped object from CompleteTaskParams so the unified
23
- * renderSummaryContent() can be used at completion time (#2720).
22
+ * Render task summary markdown matching the template format.
23
+ * YAML frontmatter uses snake_case keys for parseSummary() compatibility.
24
24
  */
25
- function paramsToTaskRow(params, completedAt) {
26
- return {
27
- milestone_id: params.milestoneId,
28
- slice_id: params.sliceId,
29
- id: params.taskId,
30
- title: params.oneLiner || params.taskId,
31
- status: "complete",
32
- one_liner: params.oneLiner,
33
- narrative: params.narrative,
34
- verification_result: params.verification,
35
- duration: "",
36
- completed_at: completedAt,
37
- blocker_discovered: params.blockerDiscovered,
38
- deviations: params.deviations,
39
- known_issues: params.knownIssues,
40
- key_files: params.keyFiles,
41
- key_decisions: params.keyDecisions,
42
- full_summary_md: "",
43
- description: "",
44
- estimate: "",
45
- files: [],
46
- verify: "",
47
- inputs: [],
48
- expected_output: [],
49
- observability_impact: "",
50
- full_plan_md: "",
51
- sequence: 0,
52
- };
25
+ function renderSummaryMarkdown(params) {
26
+ const now = new Date().toISOString();
27
+ const keyFilesYaml = params.keyFiles.length > 0
28
+ ? params.keyFiles.map(f => ` - ${f}`).join("\n")
29
+ : " - (none)";
30
+ const keyDecisionsYaml = params.keyDecisions.length > 0
31
+ ? params.keyDecisions.map(d => ` - ${d}`).join("\n")
32
+ : " - (none)";
33
+ // Build verification evidence table rows
34
+ let evidenceTable = "| # | Command | Exit Code | Verdict | Duration |\n|---|---------|-----------|---------|----------|\n";
35
+ if (params.verificationEvidence.length > 0) {
36
+ params.verificationEvidence.forEach((e, i) => {
37
+ evidenceTable += `| ${i + 1} | \`${e.command}\` | ${e.exitCode} | ${e.verdict} | ${e.durationMs}ms |\n`;
38
+ });
39
+ }
40
+ else {
41
+ evidenceTable += "| — | No verification commands discovered | — | — | — |\n";
42
+ }
43
+ // Determine verification_result from evidence
44
+ const allPassed = params.verificationEvidence.length > 0 &&
45
+ params.verificationEvidence.every(e => e.exitCode === 0 || e.verdict.includes("✅") || e.verdict.toLowerCase().includes("pass"));
46
+ const verificationResult = allPassed ? "passed" : (params.verificationEvidence.length === 0 ? "untested" : "mixed");
47
+ // Extract a title from the oneLiner or taskId
48
+ const title = params.oneLiner || params.taskId;
49
+ return `---
50
+ id: ${params.taskId}
51
+ parent: ${params.sliceId}
52
+ milestone: ${params.milestoneId}
53
+ key_files:
54
+ ${keyFilesYaml}
55
+ key_decisions:
56
+ ${keyDecisionsYaml}
57
+ duration: ""
58
+ verification_result: ${verificationResult}
59
+ completed_at: ${now}
60
+ blocker_discovered: ${params.blockerDiscovered}
61
+ ---
62
+
63
+ # ${params.taskId}: ${title}
64
+
65
+ **${params.oneLiner}**
66
+
67
+ ## What Happened
68
+
69
+ ${params.narrative}
70
+
71
+ ## Verification
72
+
73
+ ${params.verification}
74
+
75
+ ## Verification Evidence
76
+
77
+ ${evidenceTable}
78
+
79
+ ## Deviations
80
+
81
+ ${params.deviations || "None."}
82
+
83
+ ## Known Issues
84
+
85
+ ${params.knownIssues || "None."}
86
+
87
+ ## Files Created/Modified
88
+
89
+ ${params.keyFiles.map(f => `- \`${f}\``).join("\n") || "None."}
90
+ `;
53
91
  }
54
92
  /**
55
93
  * Handle the complete_task operation end-to-end.
@@ -136,9 +174,8 @@ export async function handleCompleteTask(params, basePath) {
136
174
  // ── Filesystem operations (outside transaction) ─────────────────────────
137
175
  // If disk render fails, roll back the DB status so deriveState() and
138
176
  // verifyExpectedArtifact() stay consistent (both say "not done").
139
- // Render summary markdown via the single source of truth (#2720)
140
- const taskRow = paramsToTaskRow(params, completedAt);
141
- const summaryMd = renderSummaryContent(taskRow, params.sliceId, params.milestoneId, params.verificationEvidence);
177
+ // Render summary markdown
178
+ const summaryMd = renderSummaryMarkdown(params);
142
179
  // Resolve and write summary to disk
143
180
  let summaryPath;
144
181
  const tasksDir = resolveTasksDir(basePath, params.milestoneId, params.sliceId);
@@ -1,7 +1,7 @@
1
1
  import { clearParseCache } from "../files.js";
2
2
  import { isClosedStatus } from "../status-guards.js";
3
3
  import { isNonEmptyString, validateStringArray } from "../validation.js";
4
- import { transaction, getMilestone, getMilestoneSlices, insertMilestone, insertSlice, upsertMilestonePlanning, upsertSlicePlanning, } from "../gsd-db.js";
4
+ import { transaction, getMilestone, insertMilestone, insertSlice, upsertMilestonePlanning, upsertSlicePlanning, } from "../gsd-db.js";
5
5
  import { invalidateStateCache } from "../state.js";
6
6
  import { renderRoadmapFromDb } from "../markdown-renderer.js";
7
7
  import { renderAllProjections } from "../workflow-projections.js";
@@ -146,16 +146,6 @@ export async function handlePlanMilestone(rawParams, basePath) {
146
146
  guardError = `cannot re-plan milestone ${params.milestoneId}: it is already complete`;
147
147
  return;
148
148
  }
149
- // Guard: refuse to re-plan a milestone that has completed slices (#2960).
150
- // INSERT OR IGNORE on slices won't overwrite existing rows, but a full
151
- // re-plan after worktree recreation or DB resync can create new slice rows
152
- // that shadow completed work. Block early when any slice is already done.
153
- const existingSlices = getMilestoneSlices(params.milestoneId);
154
- const completedSlices = existingSlices.filter(s => isClosedStatus(s.status));
155
- if (completedSlices.length > 0) {
156
- guardError = `cannot re-plan milestone ${params.milestoneId}: ${completedSlices.length} slice(s) already completed (${completedSlices.map(s => s.id).join(", ")}). Use gsd_reassess_roadmap to modify the roadmap.`;
157
- return;
158
- }
159
149
  // Validate depends_on: all dependencies must exist and be complete
160
150
  if (params.dependsOn && params.dependsOn.length > 0) {
161
151
  for (const depId of params.dependsOn) {
@@ -188,7 +178,7 @@ export async function handlePlanMilestone(rawParams, basePath) {
188
178
  definitionOfDone: params.definitionOfDone,
189
179
  requirementCoverage: params.requirementCoverage,
190
180
  boundaryMapMarkdown: params.boundaryMapMarkdown,
191
- }, params.title);
181
+ });
192
182
  for (const slice of params.slices) {
193
183
  insertSlice({
194
184
  id: slice.sliceId,
@@ -1,9 +1,8 @@
1
1
  import { join } from "node:path";
2
- import { existsSync, unlinkSync } from "node:fs";
3
2
  import { clearParseCache } from "../files.js";
4
3
  import { isClosedStatus } from "../status-guards.js";
5
4
  import { isNonEmptyString } from "../validation.js";
6
- import { transaction, getMilestone, getMilestoneSlices, getSlice, insertSlice, updateSliceFields, insertAssessment, deleteAssessmentByScope, deleteSlice, } from "../gsd-db.js";
5
+ import { transaction, getMilestone, getMilestoneSlices, getSlice, insertSlice, updateSliceFields, insertAssessment, deleteSlice, } from "../gsd-db.js";
7
6
  import { invalidateStateCache } from "../state.js";
8
7
  import { renderRoadmapFromDb, renderAssessmentFromDb } from "../markdown-renderer.js";
9
8
  import { renderAllProjections } from "../workflow-projections.js";
@@ -144,18 +143,6 @@ export async function handleReassessRoadmap(rawParams, basePath) {
144
143
  for (const removedId of params.sliceChanges.removed) {
145
144
  deleteSlice(params.milestoneId, removedId);
146
145
  }
147
- // ── Invalidate stale milestone validation (#2957) ──────────────
148
- // When roadmap structure changes (slices added/modified/removed),
149
- // any prior milestone-validation verdict is stale. Delete the DB
150
- // row so deriveState() returns phase: 'validating-milestone' once
151
- // the new slices complete, rather than advancing directly to
152
- // 'completing-milestone' with a stale needs-remediation verdict.
153
- const hasStructuralChanges = params.sliceChanges.added.length > 0 ||
154
- params.sliceChanges.modified.length > 0 ||
155
- params.sliceChanges.removed.length > 0;
156
- if (hasStructuralChanges) {
157
- deleteAssessmentByScope(params.milestoneId, "milestone-validation");
158
- }
159
146
  });
160
147
  }
161
148
  catch (err) {
@@ -172,21 +159,6 @@ export async function handleReassessRoadmap(rawParams, basePath) {
172
159
  assessment: params.assessment,
173
160
  completedSliceId: params.completedSliceId,
174
161
  });
175
- // ── Remove stale VALIDATION file from disk (#2957) ────────────
176
- const hasStructuralChanges = params.sliceChanges.added.length > 0 ||
177
- params.sliceChanges.modified.length > 0 ||
178
- params.sliceChanges.removed.length > 0;
179
- if (hasStructuralChanges) {
180
- const validationFile = join(basePath, ".gsd", "milestones", params.milestoneId, `${params.milestoneId}-VALIDATION.md`);
181
- try {
182
- if (existsSync(validationFile))
183
- unlinkSync(validationFile);
184
- }
185
- catch {
186
- // Best-effort: DB row is already deleted, so state derivation
187
- // will not see the file-based verdict as authoritative.
188
- }
189
- }
190
162
  // ── Invalidate caches ─────────────────────────────────────────
191
163
  invalidateStateCache();
192
164
  clearParseCache();
@@ -1,20 +1,15 @@
1
1
  /**
2
2
  * validate-milestone handler — the core operation behind gsd_validate_milestone.
3
3
  *
4
- * Persists milestone validation results to the assessments table and
5
- * quality_gates table, renders VALIDATION.md to disk, and invalidates caches.
6
- *
7
- * #2945 Bug 4: Previously only wrote to assessments — quality_gates records
8
- * were never persisted, causing M002+ milestones to have zero gate records
9
- * despite passing validation.
4
+ * Persists milestone validation results to the assessments table,
5
+ * renders VALIDATION.md to disk, and invalidates caches.
10
6
  */
11
7
  import { join } from "node:path";
12
- import { transaction, insertAssessment, deleteAssessmentByScope, getMilestoneSlices, } from "../gsd-db.js";
8
+ import { transaction, insertAssessment, deleteAssessmentByScope, } from "../gsd-db.js";
13
9
  import { resolveMilestonePath, clearPathCache } from "../paths.js";
14
10
  import { saveFile, clearParseCache } from "../files.js";
15
11
  import { invalidateStateCache } from "../state.js";
16
12
  import { VALIDATION_VERDICTS, isValidMilestoneVerdict } from "../verdict-parser.js";
17
- import { insertMilestoneValidationGates } from "../milestone-validation-gates.js";
18
13
  function renderValidationMarkdown(params) {
19
14
  let md = `---
20
15
  verdict: ${params.verdict}
@@ -82,12 +77,6 @@ export async function handleValidateMilestone(params, basePath) {
82
77
  scope: 'milestone-validation',
83
78
  fullContent: validationMd,
84
79
  });
85
- // #2945 Bug 4: persist quality_gates records alongside the assessment.
86
- // Previously only the assessment was written, leaving M002+ milestones
87
- // with zero quality_gate records despite passing validation.
88
- const slices = getMilestoneSlices(params.milestoneId);
89
- const sliceId = slices.length > 0 ? slices[0].id : "_milestone";
90
- insertMilestoneValidationGates(params.milestoneId, sliceId, params.verdict, validatedAt);
91
80
  });
92
81
  // ── Filesystem render (outside transaction) ────────────────────────────
93
82
  // If disk render fails, roll back the DB row so state stays consistent.
@@ -14,7 +14,7 @@ import { join } from "node:path";
14
14
  import { createRequire } from "node:module";
15
15
  import { gsdRoot, milestonesDir } from "./paths.js";
16
16
  import { MILESTONE_ID_RE } from "./milestone-ids.js";
17
- import { loadAllCaptures, loadActionableCaptures, markCaptureExecuted, stampCaptureMilestone, } from "./captures.js";
17
+ import { loadAllCaptures, loadActionableCaptures, markCaptureExecuted, } from "./captures.js";
18
18
  // ─── Resolution Executors ─────────────────────────────────────────────────────
19
19
  /**
20
20
  * Inject a new task into the current slice plan.
@@ -209,15 +209,11 @@ export function buildQuickTaskPrompt(capture) {
209
209
  ``,
210
210
  `## Instructions`,
211
211
  ``,
212
- `1. **Verify the issue still exists.** Before making any changes, inspect the`,
213
- ` relevant code to confirm the problem described above is actually present in`,
214
- ` the current codebase. If the issue has already been fixed (e.g., by planned`,
215
- ` milestone work), report "Already resolved no changes needed." and stop.`,
216
- `2. Execute this task as a small, self-contained change.`,
217
- `3. Do NOT modify any \`.gsd/\` plan files — this is a one-off, not a planned task.`,
218
- `4. Commit your changes with a descriptive message.`,
219
- `5. Keep changes minimal and focused on the capture text.`,
220
- `6. When done, say: "Quick task complete."`,
212
+ `1. Execute this task as a small, self-contained change.`,
213
+ `2. Do NOT modify any \`.gsd/\` plan files — this is a one-off, not a planned task.`,
214
+ `3. Commit your changes with a descriptive message.`,
215
+ `4. Keep changes minimal and focused on the capture text.`,
216
+ `5. When done, say: "Quick task complete."`,
221
217
  ].join("\n");
222
218
  }
223
219
  /**
@@ -242,18 +238,7 @@ export function executeTriageResolutions(basePath, mid, sid) {
242
238
  quickTasks: [],
243
239
  actions: [],
244
240
  };
245
- const actionable = loadActionableCaptures(basePath, mid || undefined);
246
- // Reconciliation: stamp actionable captures that are missing the Milestone field
247
- // with the current milestone ID. This covers captures resolved by the triage LLM
248
- // before the prompt included the Milestone instruction, and acts as a safety net
249
- // when the LLM omits the field (#2872).
250
- if (mid) {
251
- for (const capture of actionable) {
252
- if (!capture.resolvedInMilestone) {
253
- stampCaptureMilestone(basePath, capture.id, mid);
254
- }
255
- }
256
- }
241
+ const actionable = loadActionableCaptures(basePath);
257
242
  // Also process deferred captures that target milestone IDs — create
258
243
  // milestone directories so deriveState() discovers them.
259
244
  const deferred = loadAllCaptures(basePath).filter(c => c.status === "resolved" && !c.executed && c.classification === "defer");
@@ -3,7 +3,7 @@
3
3
  // handleUndoTask: Reset a single task's DB status to "pending" and re-render markdown.
4
4
  // handleResetSlice: Reset a slice and all its tasks, re-rendering plan + roadmap.
5
5
  import { existsSync, readFileSync, writeFileSync, unlinkSync, readdirSync } from "node:fs";
6
- import { join, basename } from "node:path";
6
+ import { join } from "node:path";
7
7
  import { nativeRevertCommit, nativeRevertAbort } from "./native-git-bridge.js";
8
8
  import { parseUnitId } from "./unit-id.js";
9
9
  import { deriveState } from "./state.js";
@@ -124,7 +124,7 @@ export async function handleUndo(args, ctx, _pi, basePath) {
124
124
  results.push(` Review with 'git diff --cached' then 'git commit' or 'git reset HEAD'`);
125
125
  }
126
126
  ctx.ui.notify(results.join("\n"), "success");
127
- sendDesktopNotification("GSD", `Undone: ${unitType} (${unitId})`, "info", "complete", basename(basePath));
127
+ sendDesktopNotification("GSD", `Undone: ${unitType} (${unitId})`, "info", "complete");
128
128
  }
129
129
  // ─── Targeted State Reset ────────────────────────────────────────────────────
130
130
  /**
@@ -3,112 +3,17 @@
3
3
  //
4
4
  // An agent can claim a unit (task, slice) before working on it.
5
5
  // complete-task and complete-slice enforce ownership when claims exist.
6
- // Claims are stored in SQLite (.gsd/unit-claims.db) for atomic
7
- // first-writer-wins semantics via INSERT OR IGNORE.
6
+ // If no claim file is present, ownership is not enforced (backward compatible).
8
7
  //
8
+ // Claim file location: .gsd/unit-claims.json
9
9
  // Unit key format:
10
10
  // task: "<milestoneId>/<sliceId>/<taskId>"
11
11
  // slice: "<milestoneId>/<sliceId>"
12
12
  //
13
13
  // Copyright (c) 2026 Jeremy McSpadden <jeremy@fluxlabs.net>
14
- import { createRequire } from "node:module";
15
- import { mkdirSync } from "node:fs";
14
+ import { existsSync, readFileSync, mkdirSync } from "node:fs";
16
15
  import { join } from "node:path";
17
- const _require = createRequire(import.meta.url);
18
- let providerName = null;
19
- let providerModule = null;
20
- let loadAttempted = false;
21
- function suppressSqliteWarning() {
22
- const origEmit = process.emit;
23
- // @ts-expect-error overriding process.emit for warning filter
24
- process.emit = function (event, ...args) {
25
- if (event === "warning" &&
26
- args[0] &&
27
- typeof args[0] === "object" &&
28
- "name" in args[0] &&
29
- args[0].name === "ExperimentalWarning" &&
30
- "message" in args[0] &&
31
- typeof args[0].message === "string" &&
32
- args[0].message.includes("SQLite")) {
33
- return false;
34
- }
35
- return origEmit.apply(process, [event, ...args]);
36
- };
37
- }
38
- function loadProvider() {
39
- if (loadAttempted)
40
- return;
41
- loadAttempted = true;
42
- try {
43
- suppressSqliteWarning();
44
- const mod = _require("node:sqlite");
45
- if (mod.DatabaseSync) {
46
- providerModule = mod;
47
- providerName = "node:sqlite";
48
- return;
49
- }
50
- }
51
- catch {
52
- // unavailable
53
- }
54
- try {
55
- const mod = _require("better-sqlite3");
56
- if (typeof mod === "function" || (mod && mod.default)) {
57
- providerModule = mod.default || mod;
58
- providerName = "better-sqlite3";
59
- return;
60
- }
61
- }
62
- catch {
63
- // unavailable
64
- }
65
- }
66
- function normalizeRow(row) {
67
- if (row == null)
68
- return undefined;
69
- if (Object.getPrototypeOf(row) === null) {
70
- return { ...row };
71
- }
72
- return row;
73
- }
74
- function openRawDb(path) {
75
- loadProvider();
76
- if (!providerModule || !providerName)
77
- return null;
78
- if (providerName === "node:sqlite") {
79
- const { DatabaseSync } = providerModule;
80
- return new DatabaseSync(path);
81
- }
82
- const Database = providerModule;
83
- return new Database(path);
84
- }
85
- function wrapDb(rawDb) {
86
- const db = rawDb;
87
- return {
88
- exec(sql) { db.exec(sql); },
89
- prepare(sql) {
90
- const raw = db.prepare(sql);
91
- return {
92
- run(...params) { return raw.run(...params); },
93
- get(...params) {
94
- return normalizeRow(raw.get(...params));
95
- },
96
- };
97
- },
98
- close() { db.close(); },
99
- };
100
- }
101
- // ─── Per-basePath DB pool ────────────────────────────────────────────────
102
- const dbPool = new Map();
103
- function claimsDbPath(basePath) {
104
- return join(basePath, ".gsd", "unit-claims.db");
105
- }
106
- function getDb(basePath) {
107
- const existing = dbPool.get(basePath);
108
- if (existing)
109
- return existing;
110
- return null;
111
- }
16
+ import { atomicWriteSync } from "./atomic-write.js";
112
17
  // ─── Key Builders ────────────────────────────────────────────────────────
113
18
  export function taskUnitKey(milestoneId, sliceId, taskId) {
114
19
  return `${milestoneId}/${sliceId}/${taskId}`;
@@ -116,92 +21,56 @@ export function taskUnitKey(milestoneId, sliceId, taskId) {
116
21
  export function sliceUnitKey(milestoneId, sliceId) {
117
22
  return `${milestoneId}/${sliceId}`;
118
23
  }
119
- // ─── Lifecycle ───────────────────────────────────────────────────────────
120
- /**
121
- * Initialize the ownership SQLite database for a given basePath.
122
- * Creates .gsd/ directory and unit-claims.db with the unit_claims table.
123
- * Safe to call multiple times (idempotent).
124
- */
125
- export function initOwnershipTable(basePath) {
126
- if (dbPool.has(basePath))
127
- return;
128
- const dir = join(basePath, ".gsd");
129
- mkdirSync(dir, { recursive: true });
130
- const raw = openRawDb(claimsDbPath(basePath));
131
- if (!raw) {
132
- throw new Error("No SQLite provider available for unit-ownership");
133
- }
134
- const db = wrapDb(raw);
135
- db.exec("PRAGMA journal_mode=WAL");
136
- db.exec("PRAGMA busy_timeout = 5000");
137
- db.exec("PRAGMA synchronous = NORMAL");
138
- db.exec(`
139
- CREATE TABLE IF NOT EXISTS unit_claims (
140
- unit_key TEXT PRIMARY KEY,
141
- agent_name TEXT NOT NULL,
142
- claimed_at TEXT NOT NULL
143
- )
144
- `);
145
- dbPool.set(basePath, db);
24
+ // ─── File Path ───────────────────────────────────────────────────────────
25
+ function claimsPath(basePath) {
26
+ return join(basePath, ".gsd", "unit-claims.json");
146
27
  }
147
- /**
148
- * Close the ownership database for a given basePath.
149
- * Safe to call even if not initialized.
150
- */
151
- export function closeOwnershipDb(basePath) {
152
- const db = dbPool.get(basePath);
153
- if (!db)
154
- return;
28
+ // ─── Read Claims ─────────────────────────────────────────────────────────
29
+ function readClaims(basePath) {
30
+ const path = claimsPath(basePath);
31
+ if (!existsSync(path))
32
+ return null;
155
33
  try {
156
- db.close();
34
+ return JSON.parse(readFileSync(path, "utf-8"));
35
+ }
36
+ catch {
37
+ return null;
157
38
  }
158
- catch { /* swallow */ }
159
- dbPool.delete(basePath);
160
39
  }
161
40
  // ─── Public API ──────────────────────────────────────────────────────────
162
41
  /**
163
42
  * Claim a unit for an agent.
164
- * Uses INSERT OR IGNORE for atomic first-writer-wins semantics.
165
- * Returns true if the claim was acquired (or the same agent already owns it).
166
- * Returns false if a different agent already owns the unit.
43
+ * Overwrites any existing claim for this unit (last writer wins).
167
44
  */
168
45
  export function claimUnit(basePath, unitKey, agentName) {
169
- const db = getDb(basePath);
170
- if (!db) {
171
- // Auto-init if not already initialized (backward compat)
172
- initOwnershipTable(basePath);
173
- return claimUnit(basePath, unitKey, agentName);
174
- }
175
- // INSERT OR IGNORE: if the row already exists, this is a no-op.
176
- // The PRIMARY KEY constraint on unit_key prevents duplicate claims.
177
- db.prepare("INSERT OR IGNORE INTO unit_claims (unit_key, agent_name, claimed_at) VALUES (?, ?, ?)").run(unitKey, agentName, new Date().toISOString());
178
- // Check who owns it now
179
- const row = db.prepare("SELECT agent_name FROM unit_claims WHERE unit_key = ?").get(unitKey);
180
- const owner = row?.agent_name;
181
- return owner === agentName;
46
+ const claims = readClaims(basePath) ?? {};
47
+ claims[unitKey] = { agent: agentName, claimed_at: new Date().toISOString() };
48
+ const dir = join(basePath, ".gsd");
49
+ mkdirSync(dir, { recursive: true });
50
+ atomicWriteSync(claimsPath(basePath), JSON.stringify(claims, null, 2) + "\n");
182
51
  }
183
52
  /**
184
- * Release a unit claim (remove it from the claims table).
53
+ * Release a unit claim (remove it from the claims map).
185
54
  */
186
55
  export function releaseUnit(basePath, unitKey) {
187
- const db = getDb(basePath);
188
- if (!db)
56
+ const claims = readClaims(basePath);
57
+ if (!claims || !(unitKey in claims))
189
58
  return;
190
- db.prepare("DELETE FROM unit_claims WHERE unit_key = ?").run(unitKey);
59
+ delete claims[unitKey];
60
+ atomicWriteSync(claimsPath(basePath), JSON.stringify(claims, null, 2) + "\n");
191
61
  }
192
62
  /**
193
- * Get the current owner of a unit, or null if unclaimed.
63
+ * Get the current owner of a unit, or null if unclaimed / no claims file.
194
64
  */
195
65
  export function getOwner(basePath, unitKey) {
196
- const db = getDb(basePath);
197
- if (!db)
66
+ const claims = readClaims(basePath);
67
+ if (!claims)
198
68
  return null;
199
- const row = db.prepare("SELECT agent_name FROM unit_claims WHERE unit_key = ?").get(unitKey);
200
- return row?.agent_name ?? null;
69
+ return claims[unitKey]?.agent ?? null;
201
70
  }
202
71
  /**
203
72
  * Check if an actor is authorized to operate on a unit.
204
- * Returns null if ownership passes (or is unclaimed).
73
+ * Returns null if ownership passes (or is unclaimed / no file).
205
74
  * Returns an error string if a different agent owns the unit.
206
75
  */
207
76
  export function checkOwnership(basePath, unitKey, actorName) {
@@ -209,7 +78,7 @@ export function checkOwnership(basePath, unitKey, actorName) {
209
78
  return null; // no actor identity provided — opt-in, so allow
210
79
  const owner = getOwner(basePath, unitKey);
211
80
  if (owner === null)
212
- return null; // unit unclaimed
81
+ return null; // unit unclaimed or no claims file
213
82
  if (owner === actorName)
214
83
  return null; // actor is the owner
215
84
  return `Unit ${unitKey} is owned by ${owner}, not ${actorName}`;
@@ -16,28 +16,16 @@ import { extractUatType } from "./files.js";
16
16
  * Returns `undefined` when frontmatter is absent or has no `verdict` field.
17
17
  */
18
18
  export function extractVerdict(content) {
19
- // Primary: YAML frontmatter verdict (canonical format)
20
19
  const fmMatch = content.match(/^---\n([\s\S]*?)\n---/);
21
- if (fmMatch) {
22
- const verdictMatch = fmMatch[1].match(/verdict:\s*([\w-]+)/i);
23
- if (verdictMatch) {
24
- let v = verdictMatch[1].toLowerCase();
25
- if (v === "passed")
26
- v = "pass";
27
- return v;
28
- }
20
+ if (!fmMatch)
29
21
  return undefined;
30
- }
31
- // Fallback: detect verdict in markdown body (LLM manual writes, #2960).
32
- // Matches patterns like: **Verdict:** PASS, **Verdict:** ✅ PASS, **Verdict** needs-remediation
33
- const bodyMatch = content.match(/\*\*Verdict:?\*\*\s*(?:✅\s*)?(\w[\w-]*)/i);
34
- if (bodyMatch) {
35
- let v = bodyMatch[1].toLowerCase();
36
- if (v === "passed")
37
- v = "pass";
38
- return v;
39
- }
40
- return undefined;
22
+ const verdictMatch = fmMatch[1].match(/verdict:\s*([\w-]+)/i);
23
+ if (!verdictMatch)
24
+ return undefined;
25
+ let v = verdictMatch[1].toLowerCase();
26
+ if (v === "passed")
27
+ v = "pass";
28
+ return v;
41
29
  }
42
30
  /**
43
31
  * Returns `true` when the content's frontmatter contains a `verdict` field.