gsd-pi 2.75.0 → 2.76.0-dev.4c866b677

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 (1089) hide show
  1. package/README.md +208 -151
  2. package/dist/claude-cli-check.d.ts +10 -0
  3. package/dist/claude-cli-check.js +13 -3
  4. package/dist/headless-events.d.ts +1 -1
  5. package/dist/headless-events.js +5 -2
  6. package/dist/headless.js +5 -6
  7. package/dist/loader.js +0 -0
  8. package/dist/onboarding.d.ts +20 -1
  9. package/dist/onboarding.js +99 -39
  10. package/dist/resource-loader.d.ts +1 -1
  11. package/dist/resource-loader.js +2 -8
  12. package/dist/resources/agents/researcher.md +1 -1
  13. package/dist/resources/extensions/ask-user-questions.js +17 -5
  14. package/dist/resources/extensions/claude-code-cli/models.js +9 -0
  15. package/dist/resources/extensions/claude-code-cli/readiness.js +34 -2
  16. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +76 -4
  17. package/dist/resources/extensions/gsd/auto/detect-stuck.js +9 -0
  18. package/dist/resources/extensions/gsd/auto/loop.js +67 -4
  19. package/dist/resources/extensions/gsd/auto/phases.js +122 -54
  20. package/dist/resources/extensions/gsd/auto/resolve.js +1 -1
  21. package/dist/resources/extensions/gsd/auto/run-unit.js +10 -1
  22. package/dist/resources/extensions/gsd/auto/session.js +9 -0
  23. package/dist/resources/extensions/gsd/auto-artifact-paths.js +20 -0
  24. package/dist/resources/extensions/gsd/auto-dashboard.js +37 -8
  25. package/dist/resources/extensions/gsd/auto-direct-dispatch.js +8 -2
  26. package/dist/resources/extensions/gsd/auto-dispatch.js +120 -14
  27. package/dist/resources/extensions/gsd/auto-loop.js +1 -1
  28. package/dist/resources/extensions/gsd/auto-model-selection.js +66 -19
  29. package/dist/resources/extensions/gsd/auto-post-unit.js +10 -8
  30. package/dist/resources/extensions/gsd/auto-prompts.js +190 -46
  31. package/dist/resources/extensions/gsd/auto-recovery.js +57 -0
  32. package/dist/resources/extensions/gsd/auto-start.js +33 -13
  33. package/dist/resources/extensions/gsd/auto-verification.js +36 -3
  34. package/dist/resources/extensions/gsd/auto-worktree.js +71 -2
  35. package/dist/resources/extensions/gsd/auto.js +61 -26
  36. package/dist/resources/extensions/gsd/blocked-models.js +68 -0
  37. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +84 -21
  38. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +45 -23
  39. package/dist/resources/extensions/gsd/bootstrap/memory-tools.js +131 -0
  40. package/dist/resources/extensions/gsd/bootstrap/query-tools.js +29 -0
  41. package/dist/resources/extensions/gsd/bootstrap/register-extension.js +12 -0
  42. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +22 -0
  43. package/dist/resources/extensions/gsd/bootstrap/system-context.js +84 -10
  44. package/dist/resources/extensions/gsd/commands/catalog.js +81 -9
  45. package/dist/resources/extensions/gsd/commands/handlers/core.js +64 -24
  46. package/dist/resources/extensions/gsd/commands/handlers/escalate.js +171 -0
  47. package/dist/resources/extensions/gsd/commands/handlers/onboarding.js +159 -0
  48. package/dist/resources/extensions/gsd/commands/handlers/ops.js +21 -0
  49. package/dist/resources/extensions/gsd/commands/handlers/workflow.js +228 -29
  50. package/dist/resources/extensions/gsd/commands-cmux.js +5 -2
  51. package/dist/resources/extensions/gsd/commands-config.js +5 -0
  52. package/dist/resources/extensions/gsd/commands-debug.js +388 -0
  53. package/dist/resources/extensions/gsd/commands-do.js +1 -0
  54. package/dist/resources/extensions/gsd/commands-extract-learnings.js +200 -77
  55. package/dist/resources/extensions/gsd/commands-handlers.js +21 -2
  56. package/dist/resources/extensions/gsd/commands-memory.js +462 -0
  57. package/dist/resources/extensions/gsd/commands-prefs-wizard.js +40 -12
  58. package/dist/resources/extensions/gsd/commands-scan.js +94 -0
  59. package/dist/resources/extensions/gsd/commands-workflow-templates.js +101 -2
  60. package/dist/resources/extensions/gsd/complexity-classifier.js +5 -3
  61. package/dist/resources/extensions/gsd/custom-workflow-engine.js +74 -54
  62. package/dist/resources/extensions/gsd/db-writer.js +89 -16
  63. package/dist/resources/extensions/gsd/debug-session-store.js +238 -0
  64. package/dist/resources/extensions/gsd/definition-loader.js +7 -0
  65. package/dist/resources/extensions/gsd/docs/preferences-reference.md +9 -9
  66. package/dist/resources/extensions/gsd/doctor-environment.js +2 -1
  67. package/dist/resources/extensions/gsd/doctor-git-checks.js +50 -32
  68. package/dist/resources/extensions/gsd/doctor-proactive.js +4 -1
  69. package/dist/resources/extensions/gsd/doctor-providers.js +96 -22
  70. package/dist/resources/extensions/gsd/doctor-runtime-checks.js +22 -4
  71. package/dist/resources/extensions/gsd/doctor.js +7 -1
  72. package/dist/resources/extensions/gsd/ecosystem/gsd-extension-api.js +1 -0
  73. package/dist/resources/extensions/gsd/error-classifier.js +27 -3
  74. package/dist/resources/extensions/gsd/escalation.js +321 -0
  75. package/dist/resources/extensions/gsd/forensics.js +26 -29
  76. package/dist/resources/extensions/gsd/git-service.js +0 -1
  77. package/dist/resources/extensions/gsd/graph.js +26 -2
  78. package/dist/resources/extensions/gsd/gsd-db.js +576 -35
  79. package/dist/resources/extensions/gsd/health-widget-core.js +42 -14
  80. package/dist/resources/extensions/gsd/health-widget.js +7 -4
  81. package/dist/resources/extensions/gsd/hook-emitter.js +108 -0
  82. package/dist/resources/extensions/gsd/init-wizard.js +101 -46
  83. package/dist/resources/extensions/gsd/markdown-renderer.js +5 -5
  84. package/dist/resources/extensions/gsd/memory-backfill.js +126 -0
  85. package/dist/resources/extensions/gsd/memory-embeddings.js +219 -0
  86. package/dist/resources/extensions/gsd/memory-extractor.js +78 -27
  87. package/dist/resources/extensions/gsd/memory-ingest.js +218 -0
  88. package/dist/resources/extensions/gsd/memory-relations.js +189 -0
  89. package/dist/resources/extensions/gsd/memory-source-store.js +113 -0
  90. package/dist/resources/extensions/gsd/memory-store.js +318 -6
  91. package/dist/resources/extensions/gsd/metrics.js +1 -0
  92. package/dist/resources/extensions/gsd/model-cost-table.js +3 -1
  93. package/dist/resources/extensions/gsd/model-router.js +16 -6
  94. package/dist/resources/extensions/gsd/native-git-bridge.js +137 -5
  95. package/dist/resources/extensions/gsd/notification-overlay.js +7 -22
  96. package/dist/resources/extensions/gsd/notification-widget.js +24 -39
  97. package/dist/resources/extensions/gsd/notifications.js +4 -0
  98. package/dist/resources/extensions/gsd/onboarding-state.js +133 -0
  99. package/dist/resources/extensions/gsd/post-execution-checks.js +27 -11
  100. package/dist/resources/extensions/gsd/pre-execution-checks.js +105 -8
  101. package/dist/resources/extensions/gsd/preferences-models.js +1 -0
  102. package/dist/resources/extensions/gsd/preferences-types.js +2 -1
  103. package/dist/resources/extensions/gsd/preferences-validation.js +42 -8
  104. package/dist/resources/extensions/gsd/preferences.js +10 -10
  105. package/dist/resources/extensions/gsd/prompt-loader.js +22 -7
  106. package/dist/resources/extensions/gsd/prompts/add-tests.md +1 -0
  107. package/dist/resources/extensions/gsd/prompts/complete-milestone.md +4 -1
  108. package/dist/resources/extensions/gsd/prompts/complete-slice.md +2 -2
  109. package/dist/resources/extensions/gsd/prompts/debug-diagnose.md +27 -0
  110. package/dist/resources/extensions/gsd/prompts/debug-session-manager.md +80 -0
  111. package/dist/resources/extensions/gsd/prompts/execute-task.md +16 -3
  112. package/dist/resources/extensions/gsd/prompts/plan-milestone.md +12 -0
  113. package/dist/resources/extensions/gsd/prompts/plan-slice.md +2 -0
  114. package/dist/resources/extensions/gsd/prompts/refine-slice.md +69 -0
  115. package/dist/resources/extensions/gsd/prompts/research-slice.md +1 -0
  116. package/dist/resources/extensions/gsd/prompts/scan.md +79 -0
  117. package/dist/resources/extensions/gsd/prompts/workflow-oneshot.md +26 -0
  118. package/dist/resources/extensions/gsd/python-resolver.js +70 -0
  119. package/dist/resources/extensions/gsd/run-manager.js +37 -17
  120. package/dist/resources/extensions/gsd/safety/file-change-validator.js +1 -1
  121. package/dist/resources/extensions/gsd/setup-catalog.js +75 -0
  122. package/dist/resources/extensions/gsd/state.js +90 -7
  123. package/dist/resources/extensions/gsd/templates/PREFERENCES.md +7 -7
  124. package/dist/resources/extensions/gsd/tools/complete-task.js +80 -0
  125. package/dist/resources/extensions/gsd/tools/memory-tools.js +331 -0
  126. package/dist/resources/extensions/gsd/tools/plan-milestone.js +37 -12
  127. package/dist/resources/extensions/gsd/tools/plan-slice.js +5 -2
  128. package/dist/resources/extensions/gsd/tools/skip-slice.js +78 -0
  129. package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +14 -0
  130. package/dist/resources/extensions/gsd/uok/flags.js +7 -7
  131. package/dist/resources/extensions/gsd/uok/kernel.js +8 -3
  132. package/dist/resources/extensions/gsd/verification-gate.js +2 -1
  133. package/dist/resources/extensions/gsd/workflow-dispatch.js +64 -0
  134. package/dist/resources/extensions/gsd/workflow-install.js +327 -0
  135. package/dist/resources/extensions/gsd/workflow-manifest.js +8 -0
  136. package/dist/resources/extensions/gsd/workflow-mcp.js +1 -6
  137. package/dist/resources/extensions/gsd/workflow-plugins.js +346 -0
  138. package/dist/resources/extensions/gsd/workflow-projections.js +17 -15
  139. package/dist/resources/extensions/gsd/workflow-templates/accessibility-audit.md +88 -0
  140. package/dist/resources/extensions/gsd/workflow-templates/api-breaking-change.md +117 -0
  141. package/dist/resources/extensions/gsd/workflow-templates/bugfix.md +1 -0
  142. package/dist/resources/extensions/gsd/workflow-templates/changelog-gen.md +82 -0
  143. package/dist/resources/extensions/gsd/workflow-templates/ci-bootstrap.md +144 -0
  144. package/dist/resources/extensions/gsd/workflow-templates/dead-code.md +81 -0
  145. package/dist/resources/extensions/gsd/workflow-templates/dep-upgrade.md +1 -0
  146. package/dist/resources/extensions/gsd/workflow-templates/docs-sync.yaml +76 -0
  147. package/dist/resources/extensions/gsd/workflow-templates/env-audit.yaml +88 -0
  148. package/dist/resources/extensions/gsd/workflow-templates/full-project.md +1 -0
  149. package/dist/resources/extensions/gsd/workflow-templates/hotfix.md +1 -0
  150. package/dist/resources/extensions/gsd/workflow-templates/issue-triage.md +84 -0
  151. package/dist/resources/extensions/gsd/workflow-templates/observability-setup.md +133 -0
  152. package/dist/resources/extensions/gsd/workflow-templates/onboarding-check.md +74 -0
  153. package/dist/resources/extensions/gsd/workflow-templates/performance-audit.md +125 -0
  154. package/dist/resources/extensions/gsd/workflow-templates/pr-review.md +67 -0
  155. package/dist/resources/extensions/gsd/workflow-templates/pr-triage.md +83 -0
  156. package/dist/resources/extensions/gsd/workflow-templates/refactor.md +1 -0
  157. package/dist/resources/extensions/gsd/workflow-templates/registry.json +184 -0
  158. package/dist/resources/extensions/gsd/workflow-templates/release.md +118 -0
  159. package/dist/resources/extensions/gsd/workflow-templates/rename-symbol.yaml +99 -0
  160. package/dist/resources/extensions/gsd/workflow-templates/security-audit.md +1 -0
  161. package/dist/resources/extensions/gsd/workflow-templates/small-feature.md +1 -0
  162. package/dist/resources/extensions/gsd/workflow-templates/spike.md +7 -0
  163. package/dist/resources/extensions/gsd/workflow-templates/test-backfill.yaml +73 -0
  164. package/dist/resources/extensions/gsd/worktree-resolver.js +42 -1
  165. package/dist/resources/extensions/remote-questions/commands.js +380 -0
  166. package/dist/resources/extensions/remote-questions/manager.js +39 -5
  167. package/dist/resources/extensions/remote-questions/telegram-adapter.js +79 -4
  168. package/dist/resources/extensions/search-the-web/command-search-provider.js +5 -1
  169. package/dist/resources/extensions/search-the-web/native-search.js +46 -3
  170. package/dist/resources/extensions/shared/interview-ui.js +189 -1
  171. package/dist/resources/extensions/shared/layout-utils.js +17 -0
  172. package/dist/resources/extensions/shared/rtk-shared.js +47 -0
  173. package/dist/resources/extensions/shared/rtk.js +3 -46
  174. package/dist/resources/skills/api-design/SKILL.md +190 -0
  175. package/dist/resources/skills/create-mcp-server/SKILL.md +121 -0
  176. package/dist/resources/skills/create-workflow/SKILL.md +33 -6
  177. package/dist/resources/skills/decompose-into-slices/SKILL.md +139 -0
  178. package/dist/resources/skills/dependency-upgrade/SKILL.md +158 -0
  179. package/dist/resources/skills/design-an-interface/SKILL.md +102 -0
  180. package/dist/resources/skills/forensics/SKILL.md +153 -0
  181. package/dist/resources/skills/grill-me/SKILL.md +93 -0
  182. package/dist/resources/skills/handoff/SKILL.md +121 -0
  183. package/dist/resources/skills/observability/SKILL.md +174 -0
  184. package/dist/resources/skills/security-review/SKILL.md +181 -0
  185. package/dist/resources/skills/spike-wrap-up/SKILL.md +138 -0
  186. package/dist/resources/skills/tdd/SKILL.md +112 -0
  187. package/dist/resources/skills/verify-before-complete/SKILL.md +97 -0
  188. package/dist/resources/skills/write-docs/SKILL.md +81 -0
  189. package/dist/resources/skills/write-milestone-brief/SKILL.md +135 -0
  190. package/dist/rtk-shared.d.ts +10 -0
  191. package/dist/rtk-shared.js +47 -0
  192. package/dist/rtk.d.ts +2 -6
  193. package/dist/rtk.js +3 -48
  194. package/dist/shared/workspace-types.d.ts +52 -0
  195. package/dist/shared/workspace-types.js +1 -0
  196. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  197. package/dist/update-check.d.ts +10 -0
  198. package/dist/update-check.js +24 -3
  199. package/dist/web/standalone/.next/BUILD_ID +1 -1
  200. package/dist/web/standalone/.next/app-path-routes-manifest.json +18 -18
  201. package/dist/web/standalone/.next/build-manifest.json +4 -4
  202. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  203. package/dist/web/standalone/.next/react-loadable-manifest.json +2 -2
  204. package/dist/web/standalone/.next/required-server-files.json +3 -3
  205. package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
  206. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  207. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  208. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  209. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  210. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  211. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  212. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  213. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  214. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  215. package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
  216. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  217. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  218. package/dist/web/standalone/.next/server/app/_not-found.rsc +4 -4
  219. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +4 -4
  220. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  221. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +4 -4
  222. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  223. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  224. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  225. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  226. package/dist/web/standalone/.next/server/app/api/boot/route.js.nft.json +1 -1
  227. package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
  228. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  229. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
  230. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
  231. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  232. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
  233. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
  234. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
  235. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
  236. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
  237. package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
  238. package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
  239. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  240. package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
  241. package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
  242. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  243. package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
  244. package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  245. package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
  246. package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
  247. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  248. package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
  249. package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
  250. package/dist/web/standalone/.next/server/app/api/experimental/route.js +2 -2
  251. package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
  252. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  253. package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
  254. package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
  255. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  256. package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  257. package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  258. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  259. package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
  260. package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
  261. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  262. package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  263. package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  264. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  265. package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
  266. package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  267. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  268. package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
  269. package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  270. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  271. package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
  272. package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
  273. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  274. package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
  275. package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
  276. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  277. package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
  278. package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
  279. package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
  280. package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  281. package/dist/web/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  282. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  283. package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
  284. package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  285. package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
  286. package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  287. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  288. package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  289. package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  290. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  291. package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
  292. package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
  293. package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +2 -2
  294. package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
  295. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  296. package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
  297. package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
  298. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  299. package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
  300. package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
  301. package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
  302. package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
  303. package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
  304. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  305. package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
  306. package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
  307. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  308. package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
  309. package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
  310. package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
  311. package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  312. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  313. package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
  314. package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
  315. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  316. package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
  317. package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
  318. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  319. package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
  320. package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
  321. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +2 -2
  322. package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
  323. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
  324. package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
  325. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +2 -2
  326. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
  327. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
  328. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +4 -4
  329. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
  330. package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
  331. package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
  332. package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
  333. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  334. package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
  335. package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
  336. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  337. package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  338. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  339. package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +1 -1
  340. package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
  341. package/dist/web/standalone/.next/server/app/index.html +1 -1
  342. package/dist/web/standalone/.next/server/app/index.rsc +5 -5
  343. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  344. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +5 -5
  345. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  346. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +4 -4
  347. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  348. package/dist/web/standalone/.next/server/app/page.js +2 -2
  349. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  350. package/dist/web/standalone/.next/server/app-paths-manifest.json +18 -18
  351. package/dist/web/standalone/.next/server/chunks/63.js +3 -3
  352. package/dist/web/standalone/.next/server/chunks/6897.js +3 -3
  353. package/dist/web/standalone/.next/server/chunks/7461.js +1 -0
  354. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  355. package/dist/web/standalone/.next/server/middleware-manifest.json +5 -5
  356. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  357. package/dist/web/standalone/.next/server/middleware.js +2 -2
  358. package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
  359. package/dist/web/standalone/.next/server/next-font-manifest.json +1 -1
  360. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  361. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  362. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  363. package/dist/web/standalone/.next/static/chunks/2826.e59e8578e2e28639.js +9 -0
  364. package/dist/web/standalone/.next/static/chunks/{2008.71ee9230ad78df21.js → 3621.fc7480022c972438.js} +2 -2
  365. package/dist/web/standalone/.next/static/chunks/app/_not-found/{page-2f24283c162b6ab3.js → page-f2a7482d42a5614b.js} +1 -1
  366. package/dist/web/standalone/.next/static/chunks/app/{layout-9ecfd95f343793f0.js → layout-a16c7a7ecdf0c2cf.js} +1 -1
  367. package/dist/web/standalone/.next/static/chunks/app/page-5b113fd32bc2a1c3.js +1 -0
  368. package/dist/web/standalone/.next/static/chunks/main-app-fdab67f7802d7832.js +1 -0
  369. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +1 -0
  370. package/dist/web/standalone/.next/static/chunks/{webpack-b868033a5834586d.js → webpack-5fc74f13a25fa1bb.js} +1 -1
  371. package/dist/web/standalone/.next/static/css/632cd626b1731d88.css +1 -0
  372. package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
  373. package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
  374. package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
  375. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.target.mk +14 -14
  376. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_except.target.mk +14 -14
  377. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_maybe.target.mk +14 -14
  378. package/dist/web/standalone/server.js +1 -1
  379. package/dist/welcome-screen.js +48 -24
  380. package/dist/wizard.js +2 -2
  381. package/dist/worktree-cli.d.ts +6 -5
  382. package/dist/worktree-cli.js +23 -7
  383. package/package.json +3 -3
  384. package/packages/daemon/package.json +2 -2
  385. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  386. package/packages/mcp-server/dist/server.js +12 -10
  387. package/packages/mcp-server/dist/server.js.map +1 -1
  388. package/packages/mcp-server/dist/session-manager.d.ts.map +1 -1
  389. package/packages/mcp-server/dist/session-manager.js +8 -1
  390. package/packages/mcp-server/dist/session-manager.js.map +1 -1
  391. package/packages/mcp-server/dist/workflow-tools.d.ts +2 -1
  392. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  393. package/packages/mcp-server/dist/workflow-tools.js +306 -71
  394. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  395. package/packages/mcp-server/package.json +2 -2
  396. package/packages/mcp-server/src/mcp-server.test.ts +40 -4
  397. package/packages/mcp-server/src/server.ts +12 -10
  398. package/packages/mcp-server/src/session-manager.ts +10 -3
  399. package/packages/mcp-server/src/workflow-tools.test.ts +346 -1
  400. package/packages/mcp-server/src/workflow-tools.ts +359 -75
  401. package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
  402. package/packages/native/package.json +1 -1
  403. package/packages/native/tsconfig.tsbuildinfo +1 -1
  404. package/packages/pi-agent-core/dist/agent-loop.js +12 -0
  405. package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
  406. package/packages/pi-agent-core/dist/types.d.ts +30 -0
  407. package/packages/pi-agent-core/dist/types.d.ts.map +1 -1
  408. package/packages/pi-agent-core/dist/types.js.map +1 -1
  409. package/packages/pi-agent-core/package.json +1 -1
  410. package/packages/pi-agent-core/src/agent-loop.ts +14 -0
  411. package/packages/pi-agent-core/src/types.ts +34 -0
  412. package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -1
  413. package/packages/pi-ai/dist/index.d.ts +1 -0
  414. package/packages/pi-ai/dist/index.d.ts.map +1 -1
  415. package/packages/pi-ai/dist/index.js +1 -0
  416. package/packages/pi-ai/dist/index.js.map +1 -1
  417. package/packages/pi-ai/dist/models/capability-patches.d.ts.map +1 -1
  418. package/packages/pi-ai/dist/models/capability-patches.js +3 -2
  419. package/packages/pi-ai/dist/models/capability-patches.js.map +1 -1
  420. package/packages/pi-ai/dist/models/generated/amazon-bedrock.d.ts +68 -0
  421. package/packages/pi-ai/dist/models/generated/amazon-bedrock.d.ts.map +1 -1
  422. package/packages/pi-ai/dist/models/generated/amazon-bedrock.js +68 -0
  423. package/packages/pi-ai/dist/models/generated/amazon-bedrock.js.map +1 -1
  424. package/packages/pi-ai/dist/models/generated/anthropic.d.ts +17 -0
  425. package/packages/pi-ai/dist/models/generated/anthropic.d.ts.map +1 -1
  426. package/packages/pi-ai/dist/models/generated/anthropic.js +17 -0
  427. package/packages/pi-ai/dist/models/generated/anthropic.js.map +1 -1
  428. package/packages/pi-ai/dist/models/generated/google-antigravity.d.ts +17 -0
  429. package/packages/pi-ai/dist/models/generated/google-antigravity.d.ts.map +1 -1
  430. package/packages/pi-ai/dist/models/generated/google-antigravity.js +17 -0
  431. package/packages/pi-ai/dist/models/generated/google-antigravity.js.map +1 -1
  432. package/packages/pi-ai/dist/models/generated/groq.d.ts +0 -153
  433. package/packages/pi-ai/dist/models/generated/groq.d.ts.map +1 -1
  434. package/packages/pi-ai/dist/models/generated/groq.js +0 -153
  435. package/packages/pi-ai/dist/models/generated/groq.js.map +1 -1
  436. package/packages/pi-ai/dist/models/generated/index.d.ts +136 -153
  437. package/packages/pi-ai/dist/models/generated/index.d.ts.map +1 -1
  438. package/packages/pi-ai/dist/models/generated/openai-codex.d.ts +17 -0
  439. package/packages/pi-ai/dist/models/generated/openai-codex.d.ts.map +1 -1
  440. package/packages/pi-ai/dist/models/generated/openai-codex.js +17 -0
  441. package/packages/pi-ai/dist/models/generated/openai-codex.js.map +1 -1
  442. package/packages/pi-ai/dist/models/generated/openrouter.d.ts +17 -0
  443. package/packages/pi-ai/dist/models/generated/openrouter.d.ts.map +1 -1
  444. package/packages/pi-ai/dist/models/generated/openrouter.js +17 -0
  445. package/packages/pi-ai/dist/models/generated/openrouter.js.map +1 -1
  446. package/packages/pi-ai/dist/models.generated.test.js +17 -0
  447. package/packages/pi-ai/dist/models.generated.test.js.map +1 -1
  448. package/packages/pi-ai/dist/providers/amazon-bedrock.d.ts +22 -1
  449. package/packages/pi-ai/dist/providers/amazon-bedrock.d.ts.map +1 -1
  450. package/packages/pi-ai/dist/providers/amazon-bedrock.js +40 -6
  451. package/packages/pi-ai/dist/providers/amazon-bedrock.js.map +1 -1
  452. package/packages/pi-ai/dist/providers/amazon-bedrock.test.d.ts +2 -0
  453. package/packages/pi-ai/dist/providers/amazon-bedrock.test.d.ts.map +1 -0
  454. package/packages/pi-ai/dist/providers/amazon-bedrock.test.js +106 -0
  455. package/packages/pi-ai/dist/providers/amazon-bedrock.test.js.map +1 -0
  456. package/packages/pi-ai/dist/providers/anthropic-auth.test.js +42 -1
  457. package/packages/pi-ai/dist/providers/anthropic-auth.test.js.map +1 -1
  458. package/packages/pi-ai/dist/providers/anthropic-bearer-auth.test.d.ts +2 -0
  459. package/packages/pi-ai/dist/providers/anthropic-bearer-auth.test.d.ts.map +1 -0
  460. package/packages/pi-ai/dist/providers/anthropic-bearer-auth.test.js +13 -0
  461. package/packages/pi-ai/dist/providers/anthropic-bearer-auth.test.js.map +1 -0
  462. package/packages/pi-ai/dist/providers/anthropic-shared.d.ts +20 -1
  463. package/packages/pi-ai/dist/providers/anthropic-shared.d.ts.map +1 -1
  464. package/packages/pi-ai/dist/providers/anthropic-shared.js +32 -2
  465. package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
  466. package/packages/pi-ai/dist/providers/anthropic-shared.test.js +12 -1
  467. package/packages/pi-ai/dist/providers/anthropic-shared.test.js.map +1 -1
  468. package/packages/pi-ai/dist/providers/anthropic.d.ts +11 -0
  469. package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
  470. package/packages/pi-ai/dist/providers/anthropic.js +23 -2
  471. package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
  472. package/packages/pi-ai/dist/providers/api-family.d.ts +27 -0
  473. package/packages/pi-ai/dist/providers/api-family.d.ts.map +1 -0
  474. package/packages/pi-ai/dist/providers/api-family.js +47 -0
  475. package/packages/pi-ai/dist/providers/api-family.js.map +1 -0
  476. package/packages/pi-ai/dist/providers/api-family.test.d.ts +2 -0
  477. package/packages/pi-ai/dist/providers/api-family.test.d.ts.map +1 -0
  478. package/packages/pi-ai/dist/providers/api-family.test.js +101 -0
  479. package/packages/pi-ai/dist/providers/api-family.test.js.map +1 -0
  480. package/packages/pi-ai/dist/providers/openai-completions.d.ts.map +1 -1
  481. package/packages/pi-ai/dist/providers/openai-completions.js +60 -15
  482. package/packages/pi-ai/dist/providers/openai-completions.js.map +1 -1
  483. package/packages/pi-ai/dist/providers/think-tag-parser.d.ts +17 -0
  484. package/packages/pi-ai/dist/providers/think-tag-parser.d.ts.map +1 -0
  485. package/packages/pi-ai/dist/providers/think-tag-parser.js +75 -0
  486. package/packages/pi-ai/dist/providers/think-tag-parser.js.map +1 -0
  487. package/packages/pi-ai/dist/providers/think-tag-parser.test.d.ts +2 -0
  488. package/packages/pi-ai/dist/providers/think-tag-parser.test.d.ts.map +1 -0
  489. package/packages/pi-ai/dist/providers/think-tag-parser.test.js +41 -0
  490. package/packages/pi-ai/dist/providers/think-tag-parser.test.js.map +1 -0
  491. package/packages/pi-ai/dist/utils/oauth/github-copilot.d.ts.map +1 -1
  492. package/packages/pi-ai/dist/utils/oauth/github-copilot.js +12 -2
  493. package/packages/pi-ai/dist/utils/oauth/github-copilot.js.map +1 -1
  494. package/packages/pi-ai/dist/utils/oauth/github-copilot.test.js +164 -14
  495. package/packages/pi-ai/dist/utils/oauth/github-copilot.test.js.map +1 -1
  496. package/packages/pi-ai/dist/utils/oauth/google-antigravity.d.ts.map +1 -1
  497. package/packages/pi-ai/dist/utils/oauth/google-antigravity.js +15 -3
  498. package/packages/pi-ai/dist/utils/oauth/google-antigravity.js.map +1 -1
  499. package/packages/pi-ai/dist/utils/oauth/google-antigravity.test.d.ts +2 -0
  500. package/packages/pi-ai/dist/utils/oauth/google-antigravity.test.d.ts.map +1 -0
  501. package/packages/pi-ai/dist/utils/oauth/google-antigravity.test.js +67 -0
  502. package/packages/pi-ai/dist/utils/oauth/google-antigravity.test.js.map +1 -0
  503. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.d.ts.map +1 -1
  504. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.js +16 -3
  505. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.js.map +1 -1
  506. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.test.d.ts +2 -0
  507. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.test.d.ts.map +1 -0
  508. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.test.js +67 -0
  509. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.test.js.map +1 -0
  510. package/packages/pi-ai/dist/utils/oauth/oauth-providers.test.d.ts +2 -0
  511. package/packages/pi-ai/dist/utils/oauth/oauth-providers.test.d.ts.map +1 -0
  512. package/packages/pi-ai/dist/utils/oauth/oauth-providers.test.js +289 -0
  513. package/packages/pi-ai/dist/utils/oauth/oauth-providers.test.js.map +1 -0
  514. package/packages/pi-ai/dist/utils/oauth/openai-codex.d.ts.map +1 -1
  515. package/packages/pi-ai/dist/utils/oauth/openai-codex.js +12 -0
  516. package/packages/pi-ai/dist/utils/oauth/openai-codex.js.map +1 -1
  517. package/packages/pi-ai/package.json +2 -2
  518. package/packages/pi-ai/scripts/generate-models.ts +50 -0
  519. package/packages/pi-ai/src/index.ts +1 -0
  520. package/packages/pi-ai/src/models/capability-patches.ts +5 -2
  521. package/packages/pi-ai/src/models/generated/amazon-bedrock.ts +68 -0
  522. package/packages/pi-ai/src/models/generated/anthropic.ts +17 -0
  523. package/packages/pi-ai/src/models/generated/google-antigravity.ts +17 -0
  524. package/packages/pi-ai/src/models/generated/groq.ts +0 -153
  525. package/packages/pi-ai/src/models/generated/openai-codex.ts +17 -0
  526. package/packages/pi-ai/src/models/generated/openrouter.ts +17 -0
  527. package/packages/pi-ai/src/models.generated.test.ts +17 -0
  528. package/packages/pi-ai/src/providers/amazon-bedrock.test.ts +164 -0
  529. package/packages/pi-ai/src/providers/amazon-bedrock.ts +41 -7
  530. package/packages/pi-ai/src/providers/anthropic-auth.test.ts +47 -1
  531. package/packages/pi-ai/src/providers/anthropic-bearer-auth.test.ts +26 -0
  532. package/packages/pi-ai/src/providers/anthropic-shared.test.ts +15 -1
  533. package/packages/pi-ai/src/providers/anthropic-shared.ts +36 -3
  534. package/packages/pi-ai/src/providers/anthropic.ts +25 -2
  535. package/packages/pi-ai/src/providers/api-family.test.ts +129 -0
  536. package/packages/pi-ai/src/providers/api-family.ts +57 -0
  537. package/packages/pi-ai/src/providers/openai-completions.ts +57 -16
  538. package/packages/pi-ai/src/providers/think-tag-parser.test.ts +44 -0
  539. package/packages/pi-ai/src/providers/think-tag-parser.ts +94 -0
  540. package/packages/pi-ai/src/utils/oauth/github-copilot.test.ts +200 -23
  541. package/packages/pi-ai/src/utils/oauth/github-copilot.ts +12 -2
  542. package/packages/pi-ai/src/utils/oauth/google-antigravity.test.ts +84 -0
  543. package/packages/pi-ai/src/utils/oauth/google-antigravity.ts +15 -5
  544. package/packages/pi-ai/src/utils/oauth/google-gemini-cli.test.ts +84 -0
  545. package/packages/pi-ai/src/utils/oauth/google-gemini-cli.ts +16 -5
  546. package/packages/pi-ai/src/utils/oauth/oauth-providers.test.ts +363 -0
  547. package/packages/pi-ai/src/utils/oauth/openai-codex.ts +15 -0
  548. package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
  549. package/packages/pi-coding-agent/dist/cli/args.d.ts +6 -0
  550. package/packages/pi-coding-agent/dist/cli/args.d.ts.map +1 -1
  551. package/packages/pi-coding-agent/dist/cli/args.js +14 -4
  552. package/packages/pi-coding-agent/dist/cli/args.js.map +1 -1
  553. package/packages/pi-coding-agent/dist/cli/args.test.d.ts +2 -0
  554. package/packages/pi-coding-agent/dist/cli/args.test.d.ts.map +1 -0
  555. package/packages/pi-coding-agent/dist/cli/args.test.js +38 -0
  556. package/packages/pi-coding-agent/dist/cli/args.test.js.map +1 -0
  557. package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.d.ts +2 -0
  558. package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.d.ts.map +1 -0
  559. package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js +38 -0
  560. package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js.map +1 -0
  561. package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  562. package/packages/pi-coding-agent/dist/core/agent-session.js +25 -2
  563. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  564. package/packages/pi-coding-agent/dist/core/auth-storage.d.ts +14 -0
  565. package/packages/pi-coding-agent/dist/core/auth-storage.d.ts.map +1 -1
  566. package/packages/pi-coding-agent/dist/core/auth-storage.js +34 -0
  567. package/packages/pi-coding-agent/dist/core/auth-storage.js.map +1 -1
  568. package/packages/pi-coding-agent/dist/core/auth-storage.test.js +74 -0
  569. package/packages/pi-coding-agent/dist/core/auth-storage.test.js.map +1 -1
  570. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js +4 -1
  571. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js.map +1 -1
  572. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +1 -1
  573. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
  574. package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
  575. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
  576. package/packages/pi-coding-agent/dist/core/extensions/loader.js +4 -0
  577. package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
  578. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +34 -2
  579. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
  580. package/packages/pi-coding-agent/dist/core/extensions/runner.js +233 -0
  581. package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
  582. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +200 -3
  583. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
  584. package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
  585. package/packages/pi-coding-agent/dist/core/hooks-runner.d.ts +53 -0
  586. package/packages/pi-coding-agent/dist/core/hooks-runner.d.ts.map +1 -0
  587. package/packages/pi-coding-agent/dist/core/hooks-runner.js +337 -0
  588. package/packages/pi-coding-agent/dist/core/hooks-runner.js.map +1 -0
  589. package/packages/pi-coding-agent/dist/core/hooks-runner.test.d.ts +2 -0
  590. package/packages/pi-coding-agent/dist/core/hooks-runner.test.d.ts.map +1 -0
  591. package/packages/pi-coding-agent/dist/core/hooks-runner.test.js +234 -0
  592. package/packages/pi-coding-agent/dist/core/hooks-runner.test.js.map +1 -0
  593. package/packages/pi-coding-agent/dist/core/index.d.ts +1 -0
  594. package/packages/pi-coding-agent/dist/core/index.d.ts.map +1 -1
  595. package/packages/pi-coding-agent/dist/core/index.js +1 -0
  596. package/packages/pi-coding-agent/dist/core/index.js.map +1 -1
  597. package/packages/pi-coding-agent/dist/core/model-discovery.d.ts +3 -1
  598. package/packages/pi-coding-agent/dist/core/model-discovery.d.ts.map +1 -1
  599. package/packages/pi-coding-agent/dist/core/model-discovery.js +92 -12
  600. package/packages/pi-coding-agent/dist/core/model-discovery.js.map +1 -1
  601. package/packages/pi-coding-agent/dist/core/model-discovery.test.js +16 -1
  602. package/packages/pi-coding-agent/dist/core/model-discovery.test.js.map +1 -1
  603. package/packages/pi-coding-agent/dist/core/model-registry-auth-header.test.d.ts +2 -0
  604. package/packages/pi-coding-agent/dist/core/model-registry-auth-header.test.d.ts.map +1 -0
  605. package/packages/pi-coding-agent/dist/core/model-registry-auth-header.test.js +40 -0
  606. package/packages/pi-coding-agent/dist/core/model-registry-auth-header.test.js.map +1 -0
  607. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js +32 -0
  608. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js.map +1 -1
  609. package/packages/pi-coding-agent/dist/core/model-registry-discovery.test.js +61 -1
  610. package/packages/pi-coding-agent/dist/core/model-registry-discovery.test.js.map +1 -1
  611. package/packages/pi-coding-agent/dist/core/model-registry.d.ts +5 -0
  612. package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
  613. package/packages/pi-coding-agent/dist/core/model-registry.js +76 -10
  614. package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
  615. package/packages/pi-coding-agent/dist/core/retry-handler.d.ts.map +1 -1
  616. package/packages/pi-coding-agent/dist/core/retry-handler.js +4 -1
  617. package/packages/pi-coding-agent/dist/core/retry-handler.js.map +1 -1
  618. package/packages/pi-coding-agent/dist/core/sdk.d.ts +10 -0
  619. package/packages/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
  620. package/packages/pi-coding-agent/dist/core/sdk.js +39 -1
  621. package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
  622. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +55 -0
  623. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
  624. package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  625. package/packages/pi-coding-agent/dist/core/skill-tool.test.js +2 -2
  626. package/packages/pi-coding-agent/dist/core/skill-tool.test.js.map +1 -1
  627. package/packages/pi-coding-agent/dist/index.d.ts +1 -1
  628. package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
  629. package/packages/pi-coding-agent/dist/index.js.map +1 -1
  630. package/packages/pi-coding-agent/dist/main.d.ts.map +1 -1
  631. package/packages/pi-coding-agent/dist/main.js +3 -0
  632. package/packages/pi-coding-agent/dist/main.js.map +1 -1
  633. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.d.ts +1 -1
  634. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.d.ts.map +1 -1
  635. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js +21 -10
  636. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js.map +1 -1
  637. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
  638. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +48 -34
  639. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
  640. package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.d.ts.map +1 -1
  641. package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.js +13 -7
  642. package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.js.map +1 -1
  643. package/packages/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.d.ts +7 -6
  644. package/packages/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  645. package/packages/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.js +29 -21
  646. package/packages/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  647. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts +4 -0
  648. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  649. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +83 -33
  650. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  651. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts +70 -0
  652. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -0
  653. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js +77 -0
  654. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js.map +1 -0
  655. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +1 -66
  656. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  657. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +1 -75
  658. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
  659. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts +1 -1
  660. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts.map +1 -1
  661. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +192 -24
  662. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -1
  663. package/packages/pi-coding-agent/package.json +1 -1
  664. package/packages/pi-coding-agent/src/cli/args.test.ts +44 -0
  665. package/packages/pi-coding-agent/src/cli/args.ts +21 -6
  666. package/packages/pi-coding-agent/src/core/agent-session-abort-order.test.ts +56 -0
  667. package/packages/pi-coding-agent/src/core/agent-session.ts +27 -2
  668. package/packages/pi-coding-agent/src/core/auth-storage.test.ts +83 -0
  669. package/packages/pi-coding-agent/src/core/auth-storage.ts +35 -0
  670. package/packages/pi-coding-agent/src/core/chat-controller-ordering.test.ts +4 -1
  671. package/packages/pi-coding-agent/src/core/extensions/index.ts +16 -0
  672. package/packages/pi-coding-agent/src/core/extensions/loader.ts +5 -0
  673. package/packages/pi-coding-agent/src/core/extensions/runner.ts +353 -1
  674. package/packages/pi-coding-agent/src/core/extensions/types.ts +253 -2
  675. package/packages/pi-coding-agent/src/core/hooks-runner.test.ts +269 -0
  676. package/packages/pi-coding-agent/src/core/hooks-runner.ts +460 -0
  677. package/packages/pi-coding-agent/src/core/index.ts +10 -0
  678. package/packages/pi-coding-agent/src/core/model-discovery.test.ts +19 -0
  679. package/packages/pi-coding-agent/src/core/model-discovery.ts +99 -12
  680. package/packages/pi-coding-agent/src/core/model-registry-auth-header.test.ts +44 -0
  681. package/packages/pi-coding-agent/src/core/model-registry-auth-mode.test.ts +37 -1
  682. package/packages/pi-coding-agent/src/core/model-registry-discovery.test.ts +75 -0
  683. package/packages/pi-coding-agent/src/core/model-registry.ts +86 -10
  684. package/packages/pi-coding-agent/src/core/retry-handler.ts +4 -1
  685. package/packages/pi-coding-agent/src/core/sdk.ts +58 -1
  686. package/packages/pi-coding-agent/src/core/settings-manager.ts +57 -0
  687. package/packages/pi-coding-agent/src/core/skill-tool.test.ts +2 -2
  688. package/packages/pi-coding-agent/src/index.ts +16 -0
  689. package/packages/pi-coding-agent/src/main.ts +4 -0
  690. package/packages/pi-coding-agent/src/modes/interactive/components/chat-frame.ts +24 -12
  691. package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +53 -31
  692. package/packages/pi-coding-agent/src/modes/interactive/components/provider-manager.ts +16 -7
  693. package/packages/pi-coding-agent/src/modes/interactive/components/skill-invocation-message.ts +36 -22
  694. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +88 -36
  695. package/packages/pi-coding-agent/src/modes/interactive/theme/theme-schema.ts +83 -0
  696. package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +2 -83
  697. package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +208 -27
  698. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  699. package/packages/pi-tui/package.json +1 -1
  700. package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
  701. package/packages/rpc-client/package.json +1 -1
  702. package/packages/rpc-client/tsconfig.tsbuildinfo +1 -1
  703. package/pkg/dist/modes/interactive/theme/theme-schema.d.ts +70 -0
  704. package/pkg/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -0
  705. package/pkg/dist/modes/interactive/theme/theme-schema.js +77 -0
  706. package/pkg/dist/modes/interactive/theme/theme-schema.js.map +1 -0
  707. package/pkg/dist/modes/interactive/theme/theme.d.ts +1 -66
  708. package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  709. package/pkg/dist/modes/interactive/theme/theme.js +1 -75
  710. package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
  711. package/pkg/dist/modes/interactive/theme/themes.d.ts +1 -1
  712. package/pkg/dist/modes/interactive/theme/themes.d.ts.map +1 -1
  713. package/pkg/dist/modes/interactive/theme/themes.js +192 -24
  714. package/pkg/dist/modes/interactive/theme/themes.js.map +1 -1
  715. package/pkg/package.json +1 -1
  716. package/scripts/link-workspace-packages.cjs +1 -0
  717. package/src/resources/agents/researcher.md +1 -1
  718. package/src/resources/extensions/ask-user-questions.ts +24 -6
  719. package/src/resources/extensions/claude-code-cli/models.ts +9 -0
  720. package/src/resources/extensions/claude-code-cli/readiness.ts +36 -2
  721. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +94 -4
  722. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +84 -0
  723. package/src/resources/extensions/gsd/auto/detect-stuck.ts +10 -0
  724. package/src/resources/extensions/gsd/auto/loop-deps.ts +3 -9
  725. package/src/resources/extensions/gsd/auto/loop.ts +109 -3
  726. package/src/resources/extensions/gsd/auto/phases.ts +150 -66
  727. package/src/resources/extensions/gsd/auto/resolve.ts +1 -1
  728. package/src/resources/extensions/gsd/auto/run-unit.ts +11 -1
  729. package/src/resources/extensions/gsd/auto/session.ts +14 -1
  730. package/src/resources/extensions/gsd/auto-artifact-paths.ts +20 -0
  731. package/src/resources/extensions/gsd/auto-dashboard.ts +46 -5
  732. package/src/resources/extensions/gsd/auto-direct-dispatch.ts +15 -2
  733. package/src/resources/extensions/gsd/auto-dispatch.ts +141 -9
  734. package/src/resources/extensions/gsd/auto-loop.ts +1 -1
  735. package/src/resources/extensions/gsd/auto-model-selection.ts +87 -18
  736. package/src/resources/extensions/gsd/auto-post-unit.ts +10 -8
  737. package/src/resources/extensions/gsd/auto-prompts.ts +232 -47
  738. package/src/resources/extensions/gsd/auto-recovery.ts +63 -1
  739. package/src/resources/extensions/gsd/auto-start.ts +36 -16
  740. package/src/resources/extensions/gsd/auto-verification.ts +36 -3
  741. package/src/resources/extensions/gsd/auto-worktree.ts +81 -1
  742. package/src/resources/extensions/gsd/auto.ts +65 -29
  743. package/src/resources/extensions/gsd/blocked-models.ts +98 -0
  744. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +105 -21
  745. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +46 -24
  746. package/src/resources/extensions/gsd/bootstrap/memory-tools.ts +163 -0
  747. package/src/resources/extensions/gsd/bootstrap/query-tools.ts +31 -0
  748. package/src/resources/extensions/gsd/bootstrap/register-extension.ts +15 -0
  749. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +22 -0
  750. package/src/resources/extensions/gsd/bootstrap/system-context.ts +89 -10
  751. package/src/resources/extensions/gsd/commands/catalog.ts +74 -9
  752. package/src/resources/extensions/gsd/commands/handlers/core.ts +69 -27
  753. package/src/resources/extensions/gsd/commands/handlers/escalate.ts +216 -0
  754. package/src/resources/extensions/gsd/commands/handlers/onboarding.ts +196 -0
  755. package/src/resources/extensions/gsd/commands/handlers/ops.ts +21 -0
  756. package/src/resources/extensions/gsd/commands/handlers/workflow.ts +279 -29
  757. package/src/resources/extensions/gsd/commands-cmux.ts +6 -2
  758. package/src/resources/extensions/gsd/commands-config.ts +10 -0
  759. package/src/resources/extensions/gsd/commands-debug.ts +484 -0
  760. package/src/resources/extensions/gsd/commands-do.ts +1 -0
  761. package/src/resources/extensions/gsd/commands-extract-learnings.ts +262 -78
  762. package/src/resources/extensions/gsd/commands-handlers.ts +19 -2
  763. package/src/resources/extensions/gsd/commands-memory.ts +551 -0
  764. package/src/resources/extensions/gsd/commands-prefs-wizard.ts +49 -12
  765. package/src/resources/extensions/gsd/commands-scan.ts +125 -0
  766. package/src/resources/extensions/gsd/commands-workflow-templates.ts +129 -2
  767. package/src/resources/extensions/gsd/complexity-classifier.ts +5 -3
  768. package/src/resources/extensions/gsd/custom-workflow-engine.ts +85 -60
  769. package/src/resources/extensions/gsd/db-writer.ts +91 -17
  770. package/src/resources/extensions/gsd/debug-session-store.ts +377 -0
  771. package/src/resources/extensions/gsd/definition-loader.ts +7 -0
  772. package/src/resources/extensions/gsd/docs/preferences-reference.md +9 -9
  773. package/src/resources/extensions/gsd/doctor-environment.ts +2 -1
  774. package/src/resources/extensions/gsd/doctor-git-checks.ts +51 -30
  775. package/src/resources/extensions/gsd/doctor-proactive.ts +4 -1
  776. package/src/resources/extensions/gsd/doctor-providers.ts +109 -26
  777. package/src/resources/extensions/gsd/doctor-runtime-checks.ts +23 -4
  778. package/src/resources/extensions/gsd/doctor-types.ts +1 -0
  779. package/src/resources/extensions/gsd/doctor.ts +7 -1
  780. package/src/resources/extensions/gsd/ecosystem/gsd-extension-api.ts +2 -0
  781. package/src/resources/extensions/gsd/error-classifier.ts +32 -3
  782. package/src/resources/extensions/gsd/escalation.ts +367 -0
  783. package/src/resources/extensions/gsd/forensics.ts +25 -29
  784. package/src/resources/extensions/gsd/git-service.ts +0 -1
  785. package/src/resources/extensions/gsd/graph.ts +33 -3
  786. package/src/resources/extensions/gsd/gsd-db.ts +682 -35
  787. package/src/resources/extensions/gsd/health-widget-core.ts +43 -14
  788. package/src/resources/extensions/gsd/health-widget.ts +7 -3
  789. package/src/resources/extensions/gsd/hook-emitter.ts +188 -0
  790. package/src/resources/extensions/gsd/init-wizard.ts +102 -55
  791. package/src/resources/extensions/gsd/markdown-renderer.ts +5 -5
  792. package/src/resources/extensions/gsd/memory-backfill.ts +140 -0
  793. package/src/resources/extensions/gsd/memory-embeddings.ts +235 -0
  794. package/src/resources/extensions/gsd/memory-extractor.ts +100 -34
  795. package/src/resources/extensions/gsd/memory-ingest.ts +286 -0
  796. package/src/resources/extensions/gsd/memory-relations.ts +240 -0
  797. package/src/resources/extensions/gsd/memory-source-store.ts +138 -0
  798. package/src/resources/extensions/gsd/memory-store.ts +377 -7
  799. package/src/resources/extensions/gsd/metrics.ts +1 -0
  800. package/src/resources/extensions/gsd/model-cost-table.ts +3 -1
  801. package/src/resources/extensions/gsd/model-router.ts +25 -6
  802. package/src/resources/extensions/gsd/native-git-bridge.ts +134 -6
  803. package/src/resources/extensions/gsd/notification-overlay.ts +9 -19
  804. package/src/resources/extensions/gsd/notification-widget.ts +25 -43
  805. package/src/resources/extensions/gsd/notifications.ts +6 -0
  806. package/src/resources/extensions/gsd/onboarding-state.ts +146 -0
  807. package/src/resources/extensions/gsd/post-execution-checks.ts +37 -14
  808. package/src/resources/extensions/gsd/pre-execution-checks.ts +106 -12
  809. package/src/resources/extensions/gsd/preferences-models.ts +1 -0
  810. package/src/resources/extensions/gsd/preferences-types.ts +10 -2
  811. package/src/resources/extensions/gsd/preferences-validation.ts +33 -7
  812. package/src/resources/extensions/gsd/preferences.ts +10 -10
  813. package/src/resources/extensions/gsd/prompt-loader.ts +30 -7
  814. package/src/resources/extensions/gsd/prompts/add-tests.md +1 -0
  815. package/src/resources/extensions/gsd/prompts/complete-milestone.md +4 -1
  816. package/src/resources/extensions/gsd/prompts/complete-slice.md +2 -2
  817. package/src/resources/extensions/gsd/prompts/debug-diagnose.md +27 -0
  818. package/src/resources/extensions/gsd/prompts/debug-session-manager.md +80 -0
  819. package/src/resources/extensions/gsd/prompts/execute-task.md +16 -3
  820. package/src/resources/extensions/gsd/prompts/plan-milestone.md +12 -0
  821. package/src/resources/extensions/gsd/prompts/plan-slice.md +2 -0
  822. package/src/resources/extensions/gsd/prompts/refine-slice.md +69 -0
  823. package/src/resources/extensions/gsd/prompts/research-slice.md +1 -0
  824. package/src/resources/extensions/gsd/prompts/scan.md +79 -0
  825. package/src/resources/extensions/gsd/prompts/workflow-oneshot.md +26 -0
  826. package/src/resources/extensions/gsd/python-resolver.ts +76 -0
  827. package/src/resources/extensions/gsd/run-manager.ts +53 -19
  828. package/src/resources/extensions/gsd/safety/file-change-validator.ts +1 -1
  829. package/src/resources/extensions/gsd/setup-catalog.ts +105 -0
  830. package/src/resources/extensions/gsd/state.ts +95 -6
  831. package/src/resources/extensions/gsd/templates/PREFERENCES.md +7 -7
  832. package/src/resources/extensions/gsd/tests/agent-end-retry.test.ts +1 -34
  833. package/src/resources/extensions/gsd/tests/artifact-corruption-2630.test.ts +7 -0
  834. package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +49 -0
  835. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +45 -31
  836. package/src/resources/extensions/gsd/tests/auto-migrating-recovery.test.ts +63 -0
  837. package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +107 -1
  838. package/src/resources/extensions/gsd/tests/auto-prompts-fallback.test.ts +35 -0
  839. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +123 -1
  840. package/src/resources/extensions/gsd/tests/auto-start-model-capture.test.ts +33 -3
  841. package/src/resources/extensions/gsd/tests/auto-thinking-restore.test.ts +38 -0
  842. package/src/resources/extensions/gsd/tests/auto-wrapup-inflight-guard.test.ts +39 -0
  843. package/src/resources/extensions/gsd/tests/autocomplete-regressions-1675.test.ts +39 -0
  844. package/src/resources/extensions/gsd/tests/blocked-models.test.ts +98 -0
  845. package/src/resources/extensions/gsd/tests/bundled-skill-triggers.test.ts +54 -0
  846. package/src/resources/extensions/gsd/tests/commands-do.test.ts +48 -0
  847. package/src/resources/extensions/gsd/tests/commands-extract-learnings.test.ts +335 -21
  848. package/src/resources/extensions/gsd/tests/commands-scan.test.ts +351 -0
  849. package/src/resources/extensions/gsd/tests/commands-workflow-custom.test.ts +8 -6
  850. package/src/resources/extensions/gsd/tests/complete-slice.test.ts +6 -8
  851. package/src/resources/extensions/gsd/tests/complete-task.test.ts +2 -2
  852. package/src/resources/extensions/gsd/tests/complexity-classifier.test.ts +3 -3
  853. package/src/resources/extensions/gsd/tests/custom-workflow-engine.test.ts +63 -0
  854. package/src/resources/extensions/gsd/tests/debug-command-handler.test.ts +905 -0
  855. package/src/resources/extensions/gsd/tests/debug-command-lifecycle.integration.test.ts +1229 -0
  856. package/src/resources/extensions/gsd/tests/debug-session-store.test.ts +565 -0
  857. package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +42 -0
  858. package/src/resources/extensions/gsd/tests/derive-state-helpers.test.ts +8 -4
  859. package/src/resources/extensions/gsd/tests/discuss-milestone-structured-questions.test.ts +64 -0
  860. package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +67 -0
  861. package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +175 -17
  862. package/src/resources/extensions/gsd/tests/enhanced-verification-integration.test.ts +5 -0
  863. package/src/resources/extensions/gsd/tests/ensure-db-open.test.ts +306 -1
  864. package/src/resources/extensions/gsd/tests/escalation.test.ts +818 -0
  865. package/src/resources/extensions/gsd/tests/file-change-validator.test.ts +20 -0
  866. package/src/resources/extensions/gsd/tests/finalize-timeout-guard.test.ts +29 -12
  867. package/src/resources/extensions/gsd/tests/flat-rate-routing-guard.test.ts +145 -8
  868. package/src/resources/extensions/gsd/tests/forensics-hook-key-parse.test.ts +74 -0
  869. package/src/resources/extensions/gsd/tests/freeform-decisions.test.ts +62 -0
  870. package/src/resources/extensions/gsd/tests/graph-operations.test.ts +0 -4
  871. package/src/resources/extensions/gsd/tests/gsd-db.test.ts +131 -1
  872. package/src/resources/extensions/gsd/tests/health-widget.test.ts +8 -2
  873. package/src/resources/extensions/gsd/tests/init-prefs-routing.test.ts +190 -0
  874. package/src/resources/extensions/gsd/tests/init-wizard.test.ts +27 -0
  875. package/src/resources/extensions/gsd/tests/integration/doctor-git-symlink-cwd.test.ts +90 -0
  876. package/src/resources/extensions/gsd/tests/integration/doctor-git.test.ts +117 -0
  877. package/src/resources/extensions/gsd/tests/integration/doctor-proactive.test.ts +44 -0
  878. package/src/resources/extensions/gsd/tests/integration/doctor-runtime.test.ts +68 -1
  879. package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +109 -11
  880. package/src/resources/extensions/gsd/tests/integration/idle-recovery.test.ts +51 -0
  881. package/src/resources/extensions/gsd/tests/integration/integration-proof.test.ts +2 -2
  882. package/src/resources/extensions/gsd/tests/integration/test-isolation.ts +53 -0
  883. package/src/resources/extensions/gsd/tests/interactive-routing-bypass.test.ts +1 -1
  884. package/src/resources/extensions/gsd/tests/journal-integration.test.ts +206 -1
  885. package/src/resources/extensions/gsd/tests/load-memory-block.test.ts +36 -0
  886. package/src/resources/extensions/gsd/tests/md-importer.test.ts +1 -1
  887. package/src/resources/extensions/gsd/tests/memory-embeddings.test.ts +213 -0
  888. package/src/resources/extensions/gsd/tests/memory-ingest.test.ts +153 -0
  889. package/src/resources/extensions/gsd/tests/memory-maintenance.test.ts +107 -0
  890. package/src/resources/extensions/gsd/tests/memory-relations.test.ts +175 -0
  891. package/src/resources/extensions/gsd/tests/memory-store.test.ts +2 -2
  892. package/src/resources/extensions/gsd/tests/memory-tools.test.ts +295 -0
  893. package/src/resources/extensions/gsd/tests/milestone-status-tool.test.ts +3 -2
  894. package/src/resources/extensions/gsd/tests/model-cost-table.test.ts +2 -2
  895. package/src/resources/extensions/gsd/tests/model-router.test.ts +51 -1
  896. package/src/resources/extensions/gsd/tests/model-unittype-mapping.test.ts +59 -0
  897. package/src/resources/extensions/gsd/tests/notification-overlay.test.ts +56 -37
  898. package/src/resources/extensions/gsd/tests/notification-widget.test.ts +1 -1
  899. package/src/resources/extensions/gsd/tests/onboarding-state.test.ts +105 -0
  900. package/src/resources/extensions/gsd/tests/plan-milestone-boundary-map-preservation.test.ts +114 -0
  901. package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +4 -5
  902. package/src/resources/extensions/gsd/tests/plan-slice.test.ts +17 -0
  903. package/src/resources/extensions/gsd/tests/post-execution-checks.test.ts +105 -1
  904. package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +341 -6
  905. package/src/resources/extensions/gsd/tests/preferences.test.ts +69 -1
  906. package/src/resources/extensions/gsd/tests/progressive-planning.test.ts +539 -0
  907. package/src/resources/extensions/gsd/tests/projection-no-plan-overwrite.test.ts +11 -2
  908. package/src/resources/extensions/gsd/tests/projection-regression.test.ts +7 -0
  909. package/src/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +159 -8
  910. package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +24 -0
  911. package/src/resources/extensions/gsd/tests/prompt-db.test.ts +1 -1
  912. package/src/resources/extensions/gsd/tests/prompt-loader-extension-dir.test.ts +49 -0
  913. package/src/resources/extensions/gsd/tests/prompts-no-gitignored-test-refs.test.ts +56 -0
  914. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +88 -4
  915. package/src/resources/extensions/gsd/tests/python-resolver.test.ts +131 -0
  916. package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +67 -0
  917. package/src/resources/extensions/gsd/tests/remote-notification-from-desktop.test.ts +107 -0
  918. package/src/resources/extensions/gsd/tests/requirements.test.ts +9 -0
  919. package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +153 -0
  920. package/src/resources/extensions/gsd/tests/skip-slice-cascades-tasks.test.ts +125 -0
  921. package/src/resources/extensions/gsd/tests/slice-context-injection.test.ts +16 -4
  922. package/src/resources/extensions/gsd/tests/stash-queued-context-files.test.ts +54 -0
  923. package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +3 -0
  924. package/src/resources/extensions/gsd/tests/stuck-detection-coverage.test.ts +15 -0
  925. package/src/resources/extensions/gsd/tests/summary-render-parity.test.ts +5 -0
  926. package/src/resources/extensions/gsd/tests/uok-contracts.test.ts +2 -1
  927. package/src/resources/extensions/gsd/tests/uok-flags.test.ts +31 -1
  928. package/src/resources/extensions/gsd/tests/uok-kernel-path.test.ts +166 -0
  929. package/src/resources/extensions/gsd/tests/validate-milestone.test.ts +9 -3
  930. package/src/resources/extensions/gsd/tests/verification-gate.test.ts +35 -0
  931. package/src/resources/extensions/gsd/tests/workflow-install.test.ts +113 -0
  932. package/src/resources/extensions/gsd/tests/workflow-logger-wiring.test.ts +15 -6
  933. package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +2 -2
  934. package/src/resources/extensions/gsd/tests/workflow-plugins.test.ts +310 -0
  935. package/src/resources/extensions/gsd/tests/workflow-projections.test.ts +7 -0
  936. package/src/resources/extensions/gsd/tests/workflow-templates.test.ts +8 -2
  937. package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +97 -0
  938. package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +2 -1
  939. package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +77 -2
  940. package/src/resources/extensions/gsd/tools/complete-task.ts +87 -0
  941. package/src/resources/extensions/gsd/tools/memory-tools.ts +410 -0
  942. package/src/resources/extensions/gsd/tools/plan-milestone.ts +42 -8
  943. package/src/resources/extensions/gsd/tools/plan-slice.ts +6 -1
  944. package/src/resources/extensions/gsd/tools/skip-slice.ts +133 -0
  945. package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +14 -0
  946. package/src/resources/extensions/gsd/types.ts +62 -0
  947. package/src/resources/extensions/gsd/unit-runtime.ts +1 -0
  948. package/src/resources/extensions/gsd/uok/contracts.ts +2 -1
  949. package/src/resources/extensions/gsd/uok/flags.ts +7 -7
  950. package/src/resources/extensions/gsd/uok/kernel.ts +16 -4
  951. package/src/resources/extensions/gsd/verification-gate.ts +2 -1
  952. package/src/resources/extensions/gsd/workflow-dispatch.ts +106 -0
  953. package/src/resources/extensions/gsd/workflow-install.ts +423 -0
  954. package/src/resources/extensions/gsd/workflow-logger.ts +4 -1
  955. package/src/resources/extensions/gsd/workflow-manifest.ts +8 -0
  956. package/src/resources/extensions/gsd/workflow-mcp.ts +1 -6
  957. package/src/resources/extensions/gsd/workflow-plugins.ts +403 -0
  958. package/src/resources/extensions/gsd/workflow-projections.ts +18 -16
  959. package/src/resources/extensions/gsd/workflow-templates/accessibility-audit.md +88 -0
  960. package/src/resources/extensions/gsd/workflow-templates/api-breaking-change.md +117 -0
  961. package/src/resources/extensions/gsd/workflow-templates/bugfix.md +1 -0
  962. package/src/resources/extensions/gsd/workflow-templates/changelog-gen.md +82 -0
  963. package/src/resources/extensions/gsd/workflow-templates/ci-bootstrap.md +144 -0
  964. package/src/resources/extensions/gsd/workflow-templates/dead-code.md +81 -0
  965. package/src/resources/extensions/gsd/workflow-templates/dep-upgrade.md +1 -0
  966. package/src/resources/extensions/gsd/workflow-templates/docs-sync.yaml +76 -0
  967. package/src/resources/extensions/gsd/workflow-templates/env-audit.yaml +88 -0
  968. package/src/resources/extensions/gsd/workflow-templates/full-project.md +1 -0
  969. package/src/resources/extensions/gsd/workflow-templates/hotfix.md +1 -0
  970. package/src/resources/extensions/gsd/workflow-templates/issue-triage.md +84 -0
  971. package/src/resources/extensions/gsd/workflow-templates/observability-setup.md +133 -0
  972. package/src/resources/extensions/gsd/workflow-templates/onboarding-check.md +74 -0
  973. package/src/resources/extensions/gsd/workflow-templates/performance-audit.md +125 -0
  974. package/src/resources/extensions/gsd/workflow-templates/pr-review.md +67 -0
  975. package/src/resources/extensions/gsd/workflow-templates/pr-triage.md +83 -0
  976. package/src/resources/extensions/gsd/workflow-templates/refactor.md +1 -0
  977. package/src/resources/extensions/gsd/workflow-templates/registry.json +184 -0
  978. package/src/resources/extensions/gsd/workflow-templates/release.md +118 -0
  979. package/src/resources/extensions/gsd/workflow-templates/rename-symbol.yaml +99 -0
  980. package/src/resources/extensions/gsd/workflow-templates/security-audit.md +1 -0
  981. package/src/resources/extensions/gsd/workflow-templates/small-feature.md +1 -0
  982. package/src/resources/extensions/gsd/workflow-templates/spike.md +7 -0
  983. package/src/resources/extensions/gsd/workflow-templates/test-backfill.yaml +73 -0
  984. package/src/resources/extensions/gsd/workflow-templates.ts +7 -0
  985. package/src/resources/extensions/gsd/workspace-index.ts +9 -4
  986. package/src/resources/extensions/gsd/worktree-resolver.ts +47 -1
  987. package/src/resources/extensions/remote-questions/commands.ts +480 -0
  988. package/src/resources/extensions/remote-questions/manager.ts +49 -4
  989. package/src/resources/extensions/remote-questions/telegram-adapter.ts +86 -4
  990. package/src/resources/extensions/remote-questions/tests/command-polling.test.ts +246 -0
  991. package/src/resources/extensions/remote-questions/tests/remote-answer-normalization.test.ts +92 -0
  992. package/src/resources/extensions/remote-questions/tests/telegram-commands.test.ts +267 -0
  993. package/src/resources/extensions/search-the-web/command-search-provider.ts +5 -1
  994. package/src/resources/extensions/search-the-web/native-search.ts +50 -4
  995. package/src/resources/extensions/shared/interview-ui.ts +195 -1
  996. package/src/resources/extensions/shared/layout-utils.ts +26 -0
  997. package/src/resources/extensions/shared/rtk-shared.ts +58 -0
  998. package/src/resources/extensions/shared/rtk.ts +12 -52
  999. package/src/resources/extensions/shared/tests/interview-preview.test.ts +177 -0
  1000. package/src/resources/extensions/shared/tests/preview-layout.test.ts +120 -0
  1001. package/src/resources/skills/api-design/SKILL.md +190 -0
  1002. package/src/resources/skills/create-mcp-server/SKILL.md +121 -0
  1003. package/src/resources/skills/create-workflow/SKILL.md +33 -6
  1004. package/src/resources/skills/decompose-into-slices/SKILL.md +139 -0
  1005. package/src/resources/skills/dependency-upgrade/SKILL.md +158 -0
  1006. package/src/resources/skills/design-an-interface/SKILL.md +102 -0
  1007. package/src/resources/skills/forensics/SKILL.md +153 -0
  1008. package/src/resources/skills/grill-me/SKILL.md +93 -0
  1009. package/src/resources/skills/handoff/SKILL.md +121 -0
  1010. package/src/resources/skills/observability/SKILL.md +174 -0
  1011. package/src/resources/skills/security-review/SKILL.md +181 -0
  1012. package/src/resources/skills/spike-wrap-up/SKILL.md +138 -0
  1013. package/src/resources/skills/tdd/SKILL.md +112 -0
  1014. package/src/resources/skills/verify-before-complete/SKILL.md +97 -0
  1015. package/src/resources/skills/write-docs/SKILL.md +81 -0
  1016. package/src/resources/skills/write-milestone-brief/SKILL.md +135 -0
  1017. package/dist/web/standalone/.next/static/chunks/2826.dd3dc8bbd3025fa5.js +0 -9
  1018. package/dist/web/standalone/.next/static/chunks/app/page-7115e62689b5fd84.js +0 -1
  1019. package/dist/web/standalone/.next/static/chunks/main-app-d3d4c336195465f9.js +0 -1
  1020. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ab5a8926e07ec673.js +0 -1
  1021. package/dist/web/standalone/.next/static/css/f6e8833d46e738d8.css +0 -1
  1022. package/packages/native/dist/ps/types.d.ts +0 -5
  1023. package/packages/native/dist/ps/types.js +0 -2
  1024. package/packages/native/src/ps/types.ts +0 -5
  1025. package/packages/pi-ai/node_modules/@smithy/node-http-handler/LICENSE +0 -201
  1026. package/packages/pi-ai/node_modules/@smithy/node-http-handler/README.md +0 -9
  1027. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-cjs/index.js +0 -762
  1028. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/build-abort-error.js +0 -19
  1029. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/constants.js +0 -1
  1030. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/get-transformed-headers.js +0 -9
  1031. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/index.js +0 -3
  1032. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/node-http-handler.js +0 -230
  1033. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/node-http2-connection-manager.js +0 -87
  1034. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/node-http2-connection-pool.js +0 -32
  1035. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/node-http2-handler.js +0 -169
  1036. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/readable.mock.js +0 -21
  1037. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/server.mock.js +0 -88
  1038. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/set-connection-timeout.js +0 -36
  1039. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/set-request-timeout.js +0 -21
  1040. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/set-socket-keep-alive.js +0 -22
  1041. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/set-socket-timeout.js +0 -23
  1042. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/stream-collector/collector.js +0 -8
  1043. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/stream-collector/index.js +0 -41
  1044. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/stream-collector/readable.mock.js +0 -21
  1045. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/timing.js +0 -4
  1046. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-es/write-request-body.js +0 -63
  1047. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/build-abort-error.d.ts +0 -10
  1048. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/constants.d.ts +0 -5
  1049. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/get-transformed-headers.d.ts +0 -4
  1050. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/index.d.ts +0 -3
  1051. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/node-http-handler.d.ts +0 -46
  1052. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/node-http2-connection-manager.d.ts +0 -24
  1053. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/node-http2-connection-pool.d.ts +0 -12
  1054. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/node-http2-handler.d.ts +0 -63
  1055. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/readable.mock.d.ts +0 -13
  1056. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/server.mock.d.ts +0 -12
  1057. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/set-connection-timeout.d.ts +0 -2
  1058. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/set-request-timeout.d.ts +0 -6
  1059. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/set-socket-keep-alive.d.ts +0 -6
  1060. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/set-socket-timeout.d.ts +0 -2
  1061. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/stream-collector/collector.d.ts +0 -5
  1062. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/stream-collector/index.d.ts +0 -6
  1063. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/stream-collector/readable.mock.d.ts +0 -13
  1064. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/timing.d.ts +0 -8
  1065. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/build-abort-error.d.ts +0 -10
  1066. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/constants.d.ts +0 -5
  1067. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/get-transformed-headers.d.ts +0 -4
  1068. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/index.d.ts +0 -3
  1069. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http-handler.d.ts +0 -46
  1070. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http2-connection-manager.d.ts +0 -24
  1071. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http2-connection-pool.d.ts +0 -12
  1072. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/node-http2-handler.d.ts +0 -63
  1073. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/readable.mock.d.ts +0 -13
  1074. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/server.mock.d.ts +0 -12
  1075. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-connection-timeout.d.ts +0 -2
  1076. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-request-timeout.d.ts +0 -6
  1077. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-socket-keep-alive.d.ts +0 -6
  1078. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/set-socket-timeout.d.ts +0 -2
  1079. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/stream-collector/collector.d.ts +0 -5
  1080. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/stream-collector/index.d.ts +0 -6
  1081. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/stream-collector/readable.mock.d.ts +0 -13
  1082. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/timing.d.ts +0 -8
  1083. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/ts3.4/write-request-body.d.ts +0 -12
  1084. package/packages/pi-ai/node_modules/@smithy/node-http-handler/dist-types/write-request-body.d.ts +0 -12
  1085. package/packages/pi-ai/node_modules/@smithy/node-http-handler/package.json +0 -68
  1086. package/packages/pi-ai/oauth.d.ts +0 -1
  1087. package/packages/pi-ai/oauth.js +0 -1
  1088. /package/dist/web/standalone/.next/static/{prkokVQFxWtUVIku57_0z → jDqWYbuP_CG6Kjc-uKwkN}/_buildManifest.js +0 -0
  1089. /package/dist/web/standalone/.next/static/{prkokVQFxWtUVIku57_0z → jDqWYbuP_CG6Kjc-uKwkN}/_ssgManifest.js +0 -0
@@ -180,7 +180,7 @@ function openRawDb(path: string): unknown {
180
180
  return new Database(path);
181
181
  }
182
182
 
183
- const SCHEMA_VERSION = 15;
183
+ const SCHEMA_VERSION = 21;
184
184
 
185
185
  function indexExists(db: DbAdapter, name: string): boolean {
186
186
  return !!db.prepare(
@@ -235,6 +235,7 @@ function initSchema(db: DbAdapter, fileBacked: boolean): void {
235
235
  rationale TEXT NOT NULL DEFAULT '',
236
236
  revisable TEXT NOT NULL DEFAULT '',
237
237
  made_by TEXT NOT NULL DEFAULT 'agent',
238
+ source TEXT NOT NULL DEFAULT 'discussion', -- ADR-011 P2: 'discussion' | 'planning' | 'escalation'
238
239
  superseded_by TEXT DEFAULT NULL
239
240
  )
240
241
  `);
@@ -280,7 +281,10 @@ function initSchema(db: DbAdapter, fileBacked: boolean): void {
280
281
  created_at TEXT NOT NULL,
281
282
  updated_at TEXT NOT NULL,
282
283
  superseded_by TEXT DEFAULT NULL,
283
- hit_count INTEGER NOT NULL DEFAULT 0
284
+ hit_count INTEGER NOT NULL DEFAULT 0,
285
+ scope TEXT NOT NULL DEFAULT 'project',
286
+ tags TEXT NOT NULL DEFAULT '[]',
287
+ structured_fields TEXT DEFAULT NULL
284
288
  )
285
289
  `);
286
290
 
@@ -292,6 +296,45 @@ function initSchema(db: DbAdapter, fileBacked: boolean): void {
292
296
  )
293
297
  `);
294
298
 
299
+ db.exec(`
300
+ CREATE TABLE IF NOT EXISTS memory_sources (
301
+ id TEXT PRIMARY KEY,
302
+ kind TEXT NOT NULL,
303
+ uri TEXT,
304
+ title TEXT,
305
+ content TEXT NOT NULL,
306
+ content_hash TEXT NOT NULL UNIQUE,
307
+ imported_at TEXT NOT NULL,
308
+ scope TEXT NOT NULL DEFAULT 'project',
309
+ tags TEXT NOT NULL DEFAULT '[]'
310
+ )
311
+ `);
312
+
313
+ db.exec(`
314
+ CREATE TABLE IF NOT EXISTS memory_embeddings (
315
+ memory_id TEXT PRIMARY KEY,
316
+ model TEXT NOT NULL,
317
+ dim INTEGER NOT NULL,
318
+ vector BLOB NOT NULL,
319
+ updated_at TEXT NOT NULL
320
+ )
321
+ `);
322
+
323
+ db.exec(`
324
+ CREATE TABLE IF NOT EXISTS memory_relations (
325
+ from_id TEXT NOT NULL,
326
+ to_id TEXT NOT NULL,
327
+ rel TEXT NOT NULL,
328
+ confidence REAL NOT NULL DEFAULT 0.8,
329
+ created_at TEXT NOT NULL,
330
+ PRIMARY KEY (from_id, to_id, rel)
331
+ )
332
+ `);
333
+
334
+ // FTS5 virtual table mirroring memories.content for fast keyword search.
335
+ // Optional — if the SQLite build lacks FTS5, we fall back to LIKE scans.
336
+ tryCreateMemoriesFts(db);
337
+
295
338
  db.exec(`
296
339
  CREATE TABLE IF NOT EXISTS milestones (
297
340
  id TEXT PRIMARY KEY,
@@ -334,6 +377,8 @@ function initSchema(db: DbAdapter, fileBacked: boolean): void {
334
377
  observability_impact TEXT NOT NULL DEFAULT '',
335
378
  sequence INTEGER DEFAULT 0, -- Ordering hint: tools may set this to control execution order
336
379
  replan_triggered_at TEXT DEFAULT NULL,
380
+ is_sketch INTEGER NOT NULL DEFAULT 0, -- ADR-011: 1 = slice is a sketch awaiting refinement
381
+ sketch_scope TEXT NOT NULL DEFAULT '', -- ADR-011: 2-3 sentence rough scope from plan-milestone
337
382
  PRIMARY KEY (milestone_id, id),
338
383
  FOREIGN KEY (milestone_id) REFERENCES milestones(id)
339
384
  )
@@ -352,6 +397,11 @@ function initSchema(db: DbAdapter, fileBacked: boolean): void {
352
397
  duration TEXT NOT NULL DEFAULT '',
353
398
  completed_at TEXT DEFAULT NULL,
354
399
  blocker_discovered INTEGER DEFAULT 0,
400
+ blocker_source TEXT NOT NULL DEFAULT '', -- ADR-011 P2: provenance for blocker_discovered (e.g. 'reject-escalation')
401
+ escalation_pending INTEGER NOT NULL DEFAULT 0, -- ADR-011 P2: pause-on-escalation flag
402
+ escalation_awaiting_review INTEGER NOT NULL DEFAULT 0, -- ADR-011 P2: artifact exists but continueWithDefault=true (no pause)
403
+ escalation_artifact_path TEXT DEFAULT NULL, -- ADR-011 P2: path to T##-ESCALATION.json
404
+ escalation_override_applied_at TEXT DEFAULT NULL, -- ADR-011 P2: DB claim lock for idempotent override injection
355
405
  deviations TEXT NOT NULL DEFAULT '',
356
406
  known_issues TEXT NOT NULL DEFAULT '',
357
407
  key_files TEXT NOT NULL DEFAULT '[]',
@@ -508,6 +558,17 @@ function initSchema(db: DbAdapter, fileBacked: boolean): void {
508
558
  `);
509
559
 
510
560
  db.exec("CREATE INDEX IF NOT EXISTS idx_memories_active ON memories(superseded_by)");
561
+
562
+ // Existing DBs may arrive here before migrateSchema() has added columns
563
+ // that fresh installs already have. Add only columns needed by bootstrap
564
+ // indexes so old DBs can open far enough for the normal migration chain.
565
+ ensureBootstrapIndexColumns(db);
566
+
567
+ db.exec("CREATE INDEX IF NOT EXISTS idx_memories_scope ON memories(scope)");
568
+ db.exec("CREATE INDEX IF NOT EXISTS idx_memory_sources_kind ON memory_sources(kind)");
569
+ db.exec("CREATE INDEX IF NOT EXISTS idx_memory_sources_scope ON memory_sources(scope)");
570
+ db.exec("CREATE INDEX IF NOT EXISTS idx_memory_relations_from ON memory_relations(from_id)");
571
+ db.exec("CREATE INDEX IF NOT EXISTS idx_memory_relations_to ON memory_relations(to_id)");
511
572
  db.exec("CREATE INDEX IF NOT EXISTS idx_replan_history_milestone ON replan_history(milestone_id, created_at)");
512
573
 
513
574
  // v13 indexes — hot-path dispatch queries
@@ -525,6 +586,9 @@ function initSchema(db: DbAdapter, fileBacked: boolean): void {
525
586
  db.exec("CREATE INDEX IF NOT EXISTS idx_turn_git_tx_turn ON turn_git_transactions(trace_id, turn_id)");
526
587
  db.exec("CREATE INDEX IF NOT EXISTS idx_audit_events_trace ON audit_events(trace_id, ts)");
527
588
  db.exec("CREATE INDEX IF NOT EXISTS idx_audit_events_turn ON audit_events(trace_id, turn_id, ts)");
589
+ // ADR-011 Phase 2 — also created by the v17 migration; fresh installs
590
+ // skip migrations so the index must be created here too.
591
+ db.exec("CREATE INDEX IF NOT EXISTS idx_tasks_escalation_pending ON tasks(milestone_id, slice_id, escalation_pending)");
528
592
 
529
593
  db.exec(`CREATE VIEW IF NOT EXISTS active_decisions AS SELECT * FROM decisions WHERE superseded_by IS NULL`);
530
594
  db.exec(`CREATE VIEW IF NOT EXISTS active_requirements AS SELECT * FROM requirements WHERE superseded_by IS NULL`);
@@ -554,10 +618,68 @@ function columnExists(db: DbAdapter, table: string, column: string): boolean {
554
618
  return rows.some((row) => row["name"] === column);
555
619
  }
556
620
 
621
+ /**
622
+ * Create the FTS5 virtual table for memories plus the triggers that keep it
623
+ * in sync with the base table. FTS5 may be unavailable on stripped-down
624
+ * SQLite builds — callers should treat failure as non-fatal and fall back
625
+ * to LIKE-based scans in `memory-store.queryMemoriesRanked`.
626
+ */
627
+ export function tryCreateMemoriesFts(db: DbAdapter): boolean {
628
+ try {
629
+ db.exec(`
630
+ CREATE VIRTUAL TABLE IF NOT EXISTS memories_fts
631
+ USING fts5(content, content='memories', content_rowid='seq', tokenize='porter unicode61')
632
+ `);
633
+ // Triggers mirror inserts / updates / deletes on the base memories table.
634
+ db.exec(`
635
+ CREATE TRIGGER IF NOT EXISTS memories_ai
636
+ AFTER INSERT ON memories BEGIN
637
+ INSERT INTO memories_fts(rowid, content) VALUES (new.seq, new.content);
638
+ END
639
+ `);
640
+ db.exec(`
641
+ CREATE TRIGGER IF NOT EXISTS memories_ad
642
+ AFTER DELETE ON memories BEGIN
643
+ INSERT INTO memories_fts(memories_fts, rowid, content) VALUES ('delete', old.seq, old.content);
644
+ END
645
+ `);
646
+ db.exec(`
647
+ CREATE TRIGGER IF NOT EXISTS memories_au
648
+ AFTER UPDATE OF content ON memories BEGIN
649
+ INSERT INTO memories_fts(memories_fts, rowid, content) VALUES ('delete', old.seq, old.content);
650
+ INSERT INTO memories_fts(rowid, content) VALUES (new.seq, new.content);
651
+ END
652
+ `);
653
+ return true;
654
+ } catch (err) {
655
+ logWarning("db", `FTS5 unavailable — memory queries will use LIKE fallback: ${(err as Error).message}`);
656
+ return false;
657
+ }
658
+ }
659
+
660
+ export function isMemoriesFtsAvailable(db: DbAdapter): boolean {
661
+ try {
662
+ const row = db
663
+ .prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='memories_fts'")
664
+ .get();
665
+ return !!row;
666
+ } catch {
667
+ return false;
668
+ }
669
+ }
670
+
557
671
  function ensureColumn(db: DbAdapter, table: string, column: string, ddl: string): void {
558
672
  if (!columnExists(db, table, column)) db.exec(ddl);
559
673
  }
560
674
 
675
+ function ensureBootstrapIndexColumns(db: DbAdapter): void {
676
+ ensureColumn(db, "memories", "scope", `ALTER TABLE memories ADD COLUMN scope TEXT NOT NULL DEFAULT 'project'`);
677
+ ensureColumn(db, "memories", "tags", `ALTER TABLE memories ADD COLUMN tags TEXT NOT NULL DEFAULT '[]'`);
678
+ ensureColumn(db, "memory_sources", "scope", `ALTER TABLE memory_sources ADD COLUMN scope TEXT NOT NULL DEFAULT 'project'`);
679
+ ensureColumn(db, "memory_sources", "tags", `ALTER TABLE memory_sources ADD COLUMN tags TEXT NOT NULL DEFAULT '[]'`);
680
+ ensureColumn(db, "tasks", "escalation_pending", `ALTER TABLE tasks ADD COLUMN escalation_pending INTEGER NOT NULL DEFAULT 0`);
681
+ }
682
+
561
683
  function migrateSchema(db: DbAdapter): void {
562
684
  const row = db.prepare("SELECT MAX(version) as v FROM schema_version").get();
563
685
  const currentVersion = row ? (row["v"] as number) : 0;
@@ -951,6 +1073,120 @@ function migrateSchema(db: DbAdapter): void {
951
1073
  });
952
1074
  }
953
1075
 
1076
+ if (currentVersion < 16) {
1077
+ // ADR-011 Phase 1: sketch-then-refine progressive planning — sketch columns on slices.
1078
+ ensureColumn(db, "slices", "is_sketch", `ALTER TABLE slices ADD COLUMN is_sketch INTEGER NOT NULL DEFAULT 0`);
1079
+ ensureColumn(db, "slices", "sketch_scope", `ALTER TABLE slices ADD COLUMN sketch_scope TEXT NOT NULL DEFAULT ''`);
1080
+ // ADR-011 Phase 2: decisions can now be sourced from escalation resolutions.
1081
+ ensureColumn(db, "decisions", "source", `ALTER TABLE decisions ADD COLUMN source TEXT NOT NULL DEFAULT 'discussion'`);
1082
+ db.prepare("INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)").run({
1083
+ ":version": 16,
1084
+ ":applied_at": new Date().toISOString(),
1085
+ });
1086
+ }
1087
+
1088
+ if (currentVersion < 17) {
1089
+ // ADR-011 Phase 2: mid-execution escalation — columns on the tasks table.
1090
+ ensureColumn(db, "tasks", "blocker_source", `ALTER TABLE tasks ADD COLUMN blocker_source TEXT NOT NULL DEFAULT ''`);
1091
+ ensureColumn(db, "tasks", "escalation_pending", `ALTER TABLE tasks ADD COLUMN escalation_pending INTEGER NOT NULL DEFAULT 0`);
1092
+ ensureColumn(db, "tasks", "escalation_awaiting_review", `ALTER TABLE tasks ADD COLUMN escalation_awaiting_review INTEGER NOT NULL DEFAULT 0`);
1093
+ ensureColumn(db, "tasks", "escalation_artifact_path", `ALTER TABLE tasks ADD COLUMN escalation_artifact_path TEXT DEFAULT NULL`);
1094
+ ensureColumn(db, "tasks", "escalation_override_applied_at", `ALTER TABLE tasks ADD COLUMN escalation_override_applied_at TEXT DEFAULT NULL`);
1095
+ db.exec("CREATE INDEX IF NOT EXISTS idx_tasks_escalation_pending ON tasks(milestone_id, slice_id, escalation_pending)");
1096
+ db.prepare("INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)").run({
1097
+ ":version": 17,
1098
+ ":applied_at": new Date().toISOString(),
1099
+ });
1100
+ }
1101
+
1102
+ if (currentVersion < 18) {
1103
+ // Memory system Phase 2: scope + tags on memories, plus memory_sources
1104
+ // table for raw ingested content (notes, files, URLs, artifacts).
1105
+ ensureColumn(db, "memories", "scope", `ALTER TABLE memories ADD COLUMN scope TEXT NOT NULL DEFAULT 'project'`);
1106
+ ensureColumn(db, "memories", "tags", `ALTER TABLE memories ADD COLUMN tags TEXT NOT NULL DEFAULT '[]'`);
1107
+ db.exec(`
1108
+ CREATE TABLE IF NOT EXISTS memory_sources (
1109
+ id TEXT PRIMARY KEY,
1110
+ kind TEXT NOT NULL,
1111
+ uri TEXT,
1112
+ title TEXT,
1113
+ content TEXT NOT NULL,
1114
+ content_hash TEXT NOT NULL UNIQUE,
1115
+ imported_at TEXT NOT NULL,
1116
+ scope TEXT NOT NULL DEFAULT 'project',
1117
+ tags TEXT NOT NULL DEFAULT '[]'
1118
+ )
1119
+ `);
1120
+ db.exec("CREATE INDEX IF NOT EXISTS idx_memories_scope ON memories(scope)");
1121
+ db.exec("CREATE INDEX IF NOT EXISTS idx_memory_sources_kind ON memory_sources(kind)");
1122
+ db.exec("CREATE INDEX IF NOT EXISTS idx_memory_sources_scope ON memory_sources(scope)");
1123
+ db.prepare("INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)").run({
1124
+ ":version": 18,
1125
+ ":applied_at": new Date().toISOString(),
1126
+ });
1127
+ }
1128
+
1129
+ if (currentVersion < 19) {
1130
+ // Memory system Phase 3: embeddings + FTS5 for hybrid retrieval.
1131
+ db.exec(`
1132
+ CREATE TABLE IF NOT EXISTS memory_embeddings (
1133
+ memory_id TEXT PRIMARY KEY,
1134
+ model TEXT NOT NULL,
1135
+ dim INTEGER NOT NULL,
1136
+ vector BLOB NOT NULL,
1137
+ updated_at TEXT NOT NULL
1138
+ )
1139
+ `);
1140
+ tryCreateMemoriesFts(db);
1141
+ // Backfill FTS5 with any existing memories (triggers only cover future writes).
1142
+ if (isMemoriesFtsAvailable(db)) {
1143
+ try {
1144
+ db.exec(`INSERT INTO memories_fts(rowid, content) SELECT seq, content FROM memories`);
1145
+ } catch (err) {
1146
+ logWarning("db", `FTS5 backfill failed: ${(err as Error).message}`);
1147
+ }
1148
+ }
1149
+ db.prepare("INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)").run({
1150
+ ":version": 19,
1151
+ ":applied_at": new Date().toISOString(),
1152
+ });
1153
+ }
1154
+
1155
+ if (currentVersion < 20) {
1156
+ // Memory system Phase 4: knowledge-graph relations between memories.
1157
+ db.exec(`
1158
+ CREATE TABLE IF NOT EXISTS memory_relations (
1159
+ from_id TEXT NOT NULL,
1160
+ to_id TEXT NOT NULL,
1161
+ rel TEXT NOT NULL,
1162
+ confidence REAL NOT NULL DEFAULT 0.8,
1163
+ created_at TEXT NOT NULL,
1164
+ PRIMARY KEY (from_id, to_id, rel)
1165
+ )
1166
+ `);
1167
+ db.exec("CREATE INDEX IF NOT EXISTS idx_memory_relations_from ON memory_relations(from_id)");
1168
+ db.exec("CREATE INDEX IF NOT EXISTS idx_memory_relations_to ON memory_relations(to_id)");
1169
+ db.prepare("INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)").run({
1170
+ ":version": 20,
1171
+ ":applied_at": new Date().toISOString(),
1172
+ });
1173
+ }
1174
+
1175
+ if (currentVersion < 21) {
1176
+ // ADR-013 Step 2: preserve structured fields (gsd_save_decision's
1177
+ // scope/decision/choice/rationale/made_by/revisable) on memories rows so
1178
+ // the eventual decisions->memories cutover does not lose schema fidelity.
1179
+ // Nullable JSON column — existing rows stay NULL until backfilled in Step 5.
1180
+ // Use ensureColumn for race-safety (matches v15-v18 pattern; bare ALTER
1181
+ // throws "duplicate column" on the loser of a concurrent open race even
1182
+ // though the transaction wrapper protects the schema_version row).
1183
+ ensureColumn(db, "memories", "structured_fields", "ALTER TABLE memories ADD COLUMN structured_fields TEXT DEFAULT NULL");
1184
+ db.prepare("INSERT INTO schema_version (version, applied_at) VALUES (:version, :applied_at)").run({
1185
+ ":version": 21,
1186
+ ":applied_at": new Date().toISOString(),
1187
+ });
1188
+ }
1189
+
954
1190
  db.exec("COMMIT");
955
1191
  } catch (err) {
956
1192
  db.exec("ROLLBACK");
@@ -963,6 +1199,8 @@ let currentPath: string | null = null;
963
1199
  let currentPid: number = 0;
964
1200
  let _exitHandlerRegistered = false;
965
1201
  let _dbOpenAttempted = false;
1202
+ let _lastDbError: Error | null = null;
1203
+ let _lastDbPhase: "open" | "initSchema" | "vacuum-recovery" | null = null;
966
1204
 
967
1205
  export function getDbProvider(): ProviderName | null {
968
1206
  loadProvider();
@@ -983,12 +1221,58 @@ export function wasDbOpenAttempted(): boolean {
983
1221
  return _dbOpenAttempted;
984
1222
  }
985
1223
 
1224
+ export function getDbStatus(): {
1225
+ available: boolean;
1226
+ provider: ProviderName | null;
1227
+ attempted: boolean;
1228
+ lastError: Error | null;
1229
+ lastPhase: "open" | "initSchema" | "vacuum-recovery" | null;
1230
+ } {
1231
+ loadProvider();
1232
+ return {
1233
+ available: currentDb !== null,
1234
+ provider: providerName,
1235
+ attempted: _dbOpenAttempted,
1236
+ lastError: _lastDbError,
1237
+ lastPhase: _lastDbPhase,
1238
+ };
1239
+ }
1240
+
986
1241
  export function openDatabase(path: string): boolean {
987
1242
  _dbOpenAttempted = true;
988
1243
  if (currentDb && currentPath !== path) closeDatabase();
989
1244
  if (currentDb && currentPath === path) return true;
990
1245
 
991
- const rawDb = openRawDb(path);
1246
+ // Reset error state only when a new open attempt is actually going to run.
1247
+ _lastDbError = null;
1248
+ _lastDbPhase = null;
1249
+
1250
+ let rawDb: unknown;
1251
+ let fallbackProvider: ProviderName | null = null;
1252
+ let fallbackModule: unknown = null;
1253
+ try {
1254
+ rawDb = openRawDb(path);
1255
+ } catch (primaryErr) {
1256
+ _lastDbPhase = "open";
1257
+ _lastDbError = primaryErr instanceof Error ? primaryErr : new Error(String(primaryErr));
1258
+ // node:sqlite loaded but failed to open this file — try better-sqlite3 as fallback.
1259
+ if (providerName === "node:sqlite") {
1260
+ try {
1261
+ const mod = _require("better-sqlite3");
1262
+ const Db = (mod && mod.default) ? mod.default : mod;
1263
+ if (typeof Db === "function") {
1264
+ rawDb = new Db(path);
1265
+ fallbackProvider = "better-sqlite3";
1266
+ fallbackModule = Db;
1267
+ _lastDbError = null;
1268
+ _lastDbPhase = null;
1269
+ }
1270
+ } catch {
1271
+ // fallback unavailable; surface original error
1272
+ }
1273
+ }
1274
+ if (!rawDb) throw primaryErr;
1275
+ }
992
1276
  if (!rawDb) return false;
993
1277
 
994
1278
  const adapter = createAdapter(rawDb);
@@ -1004,15 +1288,25 @@ export function openDatabase(path: string): boolean {
1004
1288
  initSchema(adapter, fileBacked);
1005
1289
  process.stderr.write("gsd-db: recovered corrupt database via VACUUM\n");
1006
1290
  } catch (retryErr) {
1291
+ _lastDbPhase = "vacuum-recovery";
1292
+ _lastDbError = retryErr instanceof Error ? retryErr : new Error(String(retryErr));
1007
1293
  try { adapter.close(); } catch (e) { logWarning("db", `close after VACUUM failed: ${(e as Error).message}`); }
1008
1294
  throw retryErr;
1009
1295
  }
1010
1296
  } else {
1011
- try { adapter.close(); } catch (e) { logWarning("db", `close after VACUUM failed: ${(e as Error).message}`); }
1297
+ _lastDbPhase = "initSchema";
1298
+ _lastDbError = err instanceof Error ? err : new Error(String(err));
1299
+ try { adapter.close(); } catch (e) { logWarning("db", `close after initSchema failed: ${(e as Error).message}`); }
1012
1300
  throw err;
1013
1301
  }
1014
1302
  }
1015
1303
 
1304
+ // Commit fallback provider switch only after open + schema both succeeded.
1305
+ if (fallbackProvider) {
1306
+ providerName = fallbackProvider;
1307
+ providerModule = fallbackModule;
1308
+ }
1309
+
1016
1310
  currentDb = adapter;
1017
1311
  currentPath = path;
1018
1312
  currentPid = process.pid;
@@ -1040,8 +1334,12 @@ export function closeDatabase(): void {
1040
1334
  currentDb = null;
1041
1335
  currentPath = null;
1042
1336
  currentPid = 0;
1043
- _dbOpenAttempted = false;
1044
1337
  }
1338
+ // Reset session-scoped state unconditionally so stale error info from a
1339
+ // failed open doesn't persist into the next open attempt or status check.
1340
+ _dbOpenAttempted = false;
1341
+ _lastDbError = null;
1342
+ _lastDbPhase = null;
1045
1343
  }
1046
1344
 
1047
1345
  /** Run a full VACUUM — call sparingly (e.g. after milestone completion). */
@@ -1052,6 +1350,14 @@ export function vacuumDatabase(): void {
1052
1350
  } catch (e) { logWarning("db", `VACUUM failed: ${(e as Error).message}`); }
1053
1351
  }
1054
1352
 
1353
+ /** Flush WAL into gsd.db so `git add .gsd/gsd.db` stages current state — safe while DB is open. */
1354
+ export function checkpointDatabase(): void {
1355
+ if (!currentDb) return;
1356
+ try {
1357
+ currentDb.exec('PRAGMA wal_checkpoint(TRUNCATE)');
1358
+ } catch (e) { logWarning("db", `WAL checkpoint failed: ${(e as Error).message}`); }
1359
+ }
1360
+
1055
1361
  let _txDepth = 0;
1056
1362
 
1057
1363
  export function transaction<T>(fn: () => T): T {
@@ -1127,8 +1433,8 @@ export function readTransaction<T>(fn: () => T): T {
1127
1433
  export function insertDecision(d: Omit<Decision, "seq">): void {
1128
1434
  if (!currentDb) throw new GSDError(GSD_STALE_STATE, "gsd-db: No database open");
1129
1435
  currentDb.prepare(
1130
- `INSERT INTO decisions (id, when_context, scope, decision, choice, rationale, revisable, made_by, superseded_by)
1131
- VALUES (:id, :when_context, :scope, :decision, :choice, :rationale, :revisable, :made_by, :superseded_by)`,
1436
+ `INSERT INTO decisions (id, when_context, scope, decision, choice, rationale, revisable, made_by, source, superseded_by)
1437
+ VALUES (:id, :when_context, :scope, :decision, :choice, :rationale, :revisable, :made_by, :source, :superseded_by)`,
1132
1438
  ).run({
1133
1439
  ":id": d.id,
1134
1440
  ":when_context": d.when_context,
@@ -1138,6 +1444,7 @@ export function insertDecision(d: Omit<Decision, "seq">): void {
1138
1444
  ":rationale": d.rationale,
1139
1445
  ":revisable": d.revisable,
1140
1446
  ":made_by": d.made_by ?? "agent",
1447
+ ":source": d.source ?? "discussion",
1141
1448
  ":superseded_by": d.superseded_by,
1142
1449
  });
1143
1450
  }
@@ -1156,6 +1463,7 @@ export function getDecisionById(id: string): Decision | null {
1156
1463
  rationale: row["rationale"] as string,
1157
1464
  revisable: row["revisable"] as string,
1158
1465
  made_by: (row["made_by"] as string as import("./types.js").DecisionMadeBy) ?? "agent",
1466
+ source: (row["source"] as string) ?? "discussion",
1159
1467
  superseded_by: (row["superseded_by"] as string) ?? null,
1160
1468
  };
1161
1469
  }
@@ -1173,6 +1481,7 @@ export function getActiveDecisions(): Decision[] {
1173
1481
  rationale: row["rationale"] as string,
1174
1482
  revisable: row["revisable"] as string,
1175
1483
  made_by: (row["made_by"] as string as import("./types.js").DecisionMadeBy) ?? "agent",
1484
+ source: (row["source"] as string) ?? "discussion",
1176
1485
  superseded_by: null,
1177
1486
  }));
1178
1487
  }
@@ -1261,8 +1570,8 @@ export function upsertDecision(d: Omit<Decision, "seq">): void {
1261
1570
  // seq column. INSERT OR REPLACE deletes then reinserts, resetting seq and
1262
1571
  // corrupting decision ordering in DECISIONS.md after reconcile replay.
1263
1572
  currentDb.prepare(
1264
- `INSERT INTO decisions (id, when_context, scope, decision, choice, rationale, revisable, made_by, superseded_by)
1265
- VALUES (:id, :when_context, :scope, :decision, :choice, :rationale, :revisable, :made_by, :superseded_by)
1573
+ `INSERT INTO decisions (id, when_context, scope, decision, choice, rationale, revisable, made_by, source, superseded_by)
1574
+ VALUES (:id, :when_context, :scope, :decision, :choice, :rationale, :revisable, :made_by, :source, :superseded_by)
1266
1575
  ON CONFLICT(id) DO UPDATE SET
1267
1576
  when_context = excluded.when_context,
1268
1577
  scope = excluded.scope,
@@ -1271,6 +1580,7 @@ export function upsertDecision(d: Omit<Decision, "seq">): void {
1271
1580
  rationale = excluded.rationale,
1272
1581
  revisable = excluded.revisable,
1273
1582
  made_by = excluded.made_by,
1583
+ source = excluded.source,
1274
1584
  superseded_by = excluded.superseded_by`,
1275
1585
  ).run({
1276
1586
  ":id": d.id,
@@ -1281,6 +1591,7 @@ export function upsertDecision(d: Omit<Decision, "seq">): void {
1281
1591
  ":rationale": d.rationale,
1282
1592
  ":revisable": d.revisable,
1283
1593
  ":made_by": d.made_by ?? "agent",
1594
+ ":source": d.source ?? "discussion",
1284
1595
  ":superseded_by": d.superseded_by ?? null,
1285
1596
  });
1286
1597
  }
@@ -1455,16 +1766,20 @@ export function insertSlice(s: {
1455
1766
  depends?: string[];
1456
1767
  demo?: string;
1457
1768
  sequence?: number;
1769
+ isSketch?: boolean;
1770
+ sketchScope?: string;
1458
1771
  planning?: Partial<SlicePlanningRecord>;
1459
1772
  }): void {
1460
1773
  if (!currentDb) throw new GSDError(GSD_STALE_STATE, "gsd-db: No database open");
1461
1774
  currentDb.prepare(
1462
1775
  `INSERT INTO slices (
1463
1776
  milestone_id, id, title, status, risk, depends, demo, created_at,
1464
- goal, success_criteria, proof_level, integration_closure, observability_impact, sequence
1777
+ goal, success_criteria, proof_level, integration_closure, observability_impact, sequence,
1778
+ is_sketch, sketch_scope
1465
1779
  ) VALUES (
1466
1780
  :milestone_id, :id, :title, :status, :risk, :depends, :demo, :created_at,
1467
- :goal, :success_criteria, :proof_level, :integration_closure, :observability_impact, :sequence
1781
+ :goal, :success_criteria, :proof_level, :integration_closure, :observability_impact, :sequence,
1782
+ :is_sketch, :sketch_scope
1468
1783
  )
1469
1784
  ON CONFLICT (milestone_id, id) DO UPDATE SET
1470
1785
  title = CASE WHEN :raw_title IS NOT NULL THEN excluded.title ELSE slices.title END,
@@ -1477,7 +1792,9 @@ export function insertSlice(s: {
1477
1792
  proof_level = CASE WHEN :raw_proof_level IS NOT NULL THEN excluded.proof_level ELSE slices.proof_level END,
1478
1793
  integration_closure = CASE WHEN :raw_integration_closure IS NOT NULL THEN excluded.integration_closure ELSE slices.integration_closure END,
1479
1794
  observability_impact = CASE WHEN :raw_observability_impact IS NOT NULL THEN excluded.observability_impact ELSE slices.observability_impact END,
1480
- sequence = CASE WHEN :raw_sequence IS NOT NULL THEN excluded.sequence ELSE slices.sequence END`,
1795
+ sequence = CASE WHEN :raw_sequence IS NOT NULL THEN excluded.sequence ELSE slices.sequence END,
1796
+ is_sketch = CASE WHEN :raw_is_sketch IS NOT NULL THEN excluded.is_sketch ELSE slices.is_sketch END,
1797
+ sketch_scope = CASE WHEN :raw_sketch_scope IS NOT NULL THEN excluded.sketch_scope ELSE slices.sketch_scope END`,
1481
1798
  ).run({
1482
1799
  ":milestone_id": s.milestoneId,
1483
1800
  ":id": s.id,
@@ -1493,6 +1810,8 @@ export function insertSlice(s: {
1493
1810
  ":integration_closure": s.planning?.integrationClosure ?? "",
1494
1811
  ":observability_impact": s.planning?.observabilityImpact ?? "",
1495
1812
  ":sequence": s.sequence ?? 0,
1813
+ ":is_sketch": s.isSketch ? 1 : 0,
1814
+ ":sketch_scope": s.sketchScope ?? "",
1496
1815
  // Raw sentinel params: NULL when caller omitted the field, used in ON CONFLICT guards
1497
1816
  ":raw_title": s.title ?? null,
1498
1817
  ":raw_risk": s.risk ?? null,
@@ -1503,9 +1822,52 @@ export function insertSlice(s: {
1503
1822
  ":raw_integration_closure": s.planning?.integrationClosure ?? null,
1504
1823
  ":raw_observability_impact": s.planning?.observabilityImpact ?? null,
1505
1824
  ":raw_sequence": s.sequence ?? null,
1825
+ ":raw_is_sketch": s.isSketch === undefined ? null : (s.isSketch ? 1 : 0),
1826
+ // NOTE: use !== undefined (not ??) so an explicit empty string "" is treated
1827
+ // as a present value and correctly clears the existing sketch_scope on
1828
+ // CONFLICT. ?? would incorrectly preserve the stale value.
1829
+ ":raw_sketch_scope": s.sketchScope !== undefined ? s.sketchScope : null,
1506
1830
  });
1507
1831
  }
1508
1832
 
1833
+ // ADR-011: sketch-then-refine helpers
1834
+ export function setSliceSketchFlag(milestoneId: string, sliceId: string, isSketch: boolean): void {
1835
+ if (!currentDb) throw new GSDError(GSD_STALE_STATE, "gsd-db: No database open");
1836
+ currentDb.prepare(
1837
+ `UPDATE slices SET is_sketch = :is_sketch WHERE milestone_id = :mid AND id = :sid`,
1838
+ ).run({ ":is_sketch": isSketch ? 1 : 0, ":mid": milestoneId, ":sid": sliceId });
1839
+ }
1840
+
1841
+ /**
1842
+ * ADR-011 auto-heal: reconcile stale is_sketch=1 rows whose PLAN already exists.
1843
+ *
1844
+ * Callers pass a predicate that resolves whether a plan file exists for a slice.
1845
+ * The predicate MUST use the canonical path resolver (`resolveSliceFile`, etc.)
1846
+ * to keep path logic in one place — do not hand-roll the path inside the callback.
1847
+ *
1848
+ * Recovers from two scenarios:
1849
+ * 1. Crash between `gsd_plan_slice` write and the sketch flag flip.
1850
+ * 2. Flag-OFF downgrade path: when `progressive_planning` is off, the dispatch
1851
+ * rule routes sketch slices to plan-slice, which writes PLAN.md but leaves
1852
+ * `is_sketch=1` — the next state derivation auto-heals it to 0 here.
1853
+ *
1854
+ * Not aggressive in practice: PLAN.md is only written via the DB-backed
1855
+ * `gsd_plan_slice` tool (which also inserts tasks), so a "stale PLAN.md with
1856
+ * is_sketch=1" is extremely unlikely to indicate anything other than the two
1857
+ * recovery scenarios above.
1858
+ */
1859
+ export function autoHealSketchFlags(milestoneId: string, hasPlanFile: (sliceId: string) => boolean): void {
1860
+ if (!currentDb) return;
1861
+ const rows = currentDb.prepare(
1862
+ `SELECT id FROM slices WHERE milestone_id = :mid AND is_sketch = 1`,
1863
+ ).all({ ":mid": milestoneId }) as Array<{ id: string }>;
1864
+ for (const row of rows) {
1865
+ if (hasPlanFile(row.id)) {
1866
+ setSliceSketchFlag(milestoneId, row.id, false);
1867
+ }
1868
+ }
1869
+ }
1870
+
1509
1871
  export function upsertSlicePlanning(milestoneId: string, sliceId: string, planning: Partial<SlicePlanningRecord>): void {
1510
1872
  if (!currentDb) throw new GSDError(GSD_STALE_STATE, "gsd-db: No database open");
1511
1873
  currentDb.prepare(
@@ -1679,6 +2041,8 @@ export interface SliceRow {
1679
2041
  observability_impact: string;
1680
2042
  sequence: number;
1681
2043
  replan_triggered_at: string | null;
2044
+ is_sketch: number;
2045
+ sketch_scope: string;
1682
2046
  }
1683
2047
 
1684
2048
  function rowToSlice(row: Record<string, unknown>): SliceRow {
@@ -1701,6 +2065,8 @@ function rowToSlice(row: Record<string, unknown>): SliceRow {
1701
2065
  observability_impact: (row["observability_impact"] as string) ?? "",
1702
2066
  sequence: (row["sequence"] as number) ?? 0,
1703
2067
  replan_triggered_at: (row["replan_triggered_at"] as string) ?? null,
2068
+ is_sketch: (row["is_sketch"] as number) ?? 0,
2069
+ sketch_scope: (row["sketch_scope"] as string) ?? "",
1704
2070
  };
1705
2071
  }
1706
2072
 
@@ -1764,6 +2130,12 @@ export interface TaskRow {
1764
2130
  observability_impact: string;
1765
2131
  full_plan_md: string;
1766
2132
  sequence: number;
2133
+ // ADR-011 Phase 2 escalation fields
2134
+ blocker_source: string;
2135
+ escalation_pending: number;
2136
+ escalation_awaiting_review: number;
2137
+ escalation_artifact_path: string | null;
2138
+ escalation_override_applied_at: string | null;
1767
2139
  }
1768
2140
 
1769
2141
  function parseTaskArrayColumn(raw: unknown): string[] {
@@ -1834,6 +2206,11 @@ function rowToTask(row: Record<string, unknown>): TaskRow {
1834
2206
  observability_impact: (row["observability_impact"] as string) ?? "",
1835
2207
  full_plan_md: (row["full_plan_md"] as string) ?? "",
1836
2208
  sequence: (row["sequence"] as number) ?? 0,
2209
+ blocker_source: (row["blocker_source"] as string) ?? "",
2210
+ escalation_pending: (row["escalation_pending"] as number) ?? 0,
2211
+ escalation_awaiting_review: (row["escalation_awaiting_review"] as number) ?? 0,
2212
+ escalation_artifact_path: (row["escalation_artifact_path"] as string) ?? null,
2213
+ escalation_override_applied_at: (row["escalation_override_applied_at"] as string) ?? null,
1837
2214
  };
1838
2215
  }
1839
2216
 
@@ -1854,6 +2231,125 @@ export function getSliceTasks(milestoneId: string, sliceId: string): TaskRow[] {
1854
2231
  return rows.map(rowToTask);
1855
2232
  }
1856
2233
 
2234
+ // ─── ADR-011 Phase 2 escalation helpers ──────────────────────────────────
2235
+
2236
+ /** Set pause-on-escalation state on a completed task. Mutually exclusive with awaiting_review. */
2237
+ export function setTaskEscalationPending(
2238
+ milestoneId: string, sliceId: string, taskId: string,
2239
+ artifactPath: string,
2240
+ ): void {
2241
+ if (!currentDb) throw new GSDError(GSD_STALE_STATE, "gsd-db: No database open");
2242
+ currentDb.prepare(
2243
+ `UPDATE tasks
2244
+ SET escalation_pending = 1,
2245
+ escalation_awaiting_review = 0,
2246
+ escalation_artifact_path = :path
2247
+ WHERE milestone_id = :mid AND slice_id = :sid AND id = :tid`,
2248
+ ).run({ ":path": artifactPath, ":mid": milestoneId, ":sid": sliceId, ":tid": taskId });
2249
+ }
2250
+
2251
+ /** Set awaiting-review state (artifact exists but continueWithDefault=true, no pause). Mutually exclusive with pending. */
2252
+ export function setTaskEscalationAwaitingReview(
2253
+ milestoneId: string, sliceId: string, taskId: string,
2254
+ artifactPath: string,
2255
+ ): void {
2256
+ if (!currentDb) throw new GSDError(GSD_STALE_STATE, "gsd-db: No database open");
2257
+ currentDb.prepare(
2258
+ `UPDATE tasks
2259
+ SET escalation_awaiting_review = 1,
2260
+ escalation_pending = 0,
2261
+ escalation_artifact_path = :path
2262
+ WHERE milestone_id = :mid AND slice_id = :sid AND id = :tid`,
2263
+ ).run({ ":path": artifactPath, ":mid": milestoneId, ":sid": sliceId, ":tid": taskId });
2264
+ }
2265
+
2266
+ /** Clear escalation-pending and awaiting-review flags once the user has resolved it. */
2267
+ export function clearTaskEscalationFlags(
2268
+ milestoneId: string, sliceId: string, taskId: string,
2269
+ ): void {
2270
+ if (!currentDb) throw new GSDError(GSD_STALE_STATE, "gsd-db: No database open");
2271
+ currentDb.prepare(
2272
+ `UPDATE tasks
2273
+ SET escalation_pending = 0,
2274
+ escalation_awaiting_review = 0
2275
+ WHERE milestone_id = :mid AND slice_id = :sid AND id = :tid`,
2276
+ ).run({ ":mid": milestoneId, ":sid": sliceId, ":tid": taskId });
2277
+ }
2278
+
2279
+ /**
2280
+ * Atomically claim a resolved escalation override for injection into a downstream
2281
+ * task's prompt. Returns true if this caller claimed it (must inject), false if
2282
+ * another caller already claimed it (must skip).
2283
+ */
2284
+ export function claimEscalationOverride(
2285
+ milestoneId: string, sliceId: string, sourceTaskId: string,
2286
+ ): boolean {
2287
+ if (!currentDb) return false;
2288
+ const now = new Date().toISOString();
2289
+ const result = currentDb.prepare(
2290
+ `UPDATE tasks
2291
+ SET escalation_override_applied_at = :now
2292
+ WHERE milestone_id = :mid AND slice_id = :sid AND id = :tid
2293
+ AND escalation_override_applied_at IS NULL
2294
+ AND escalation_artifact_path IS NOT NULL`,
2295
+ ).run({ ":now": now, ":mid": milestoneId, ":sid": sliceId, ":tid": sourceTaskId });
2296
+ // node:sqlite + better-sqlite3 both surface `changes` on the run result.
2297
+ const changes = (result as { changes?: number }).changes ?? 0;
2298
+ return changes > 0;
2299
+ }
2300
+
2301
+ /** Find the most recent resolved-but-unapplied escalation override in a slice. */
2302
+ export function findUnappliedEscalationOverride(
2303
+ milestoneId: string, sliceId: string,
2304
+ ): { taskId: string; artifactPath: string } | null {
2305
+ if (!currentDb) return null;
2306
+ // Filter BOTH flags: escalation_pending=0 AND escalation_awaiting_review=0
2307
+ // ensures we only claim overrides the user has explicitly resolved.
2308
+ // Without the awaiting_review filter, continueWithDefault=true artifacts
2309
+ // (not yet responded to) would be prematurely claimed, causing the override
2310
+ // to be lost when the user later resolves (#ADR-011 Phase 2 peer-review Bug 2).
2311
+ const row = currentDb.prepare(
2312
+ `SELECT id, escalation_artifact_path AS path
2313
+ FROM tasks
2314
+ WHERE milestone_id = :mid AND slice_id = :sid
2315
+ AND escalation_artifact_path IS NOT NULL
2316
+ AND escalation_override_applied_at IS NULL
2317
+ AND escalation_pending = 0
2318
+ AND escalation_awaiting_review = 0
2319
+ ORDER BY sequence DESC, id DESC
2320
+ LIMIT 1`,
2321
+ ).get({ ":mid": milestoneId, ":sid": sliceId }) as
2322
+ | { id: string; path: string | null }
2323
+ | undefined;
2324
+ if (!row || !row.path) return null;
2325
+ return { taskId: row.id, artifactPath: row.path };
2326
+ }
2327
+
2328
+ /** Set the blocker_source provenance field (used when rejecting an escalation). */
2329
+ export function setTaskBlockerSource(
2330
+ milestoneId: string, sliceId: string, taskId: string, source: string,
2331
+ ): void {
2332
+ if (!currentDb) throw new GSDError(GSD_STALE_STATE, "gsd-db: No database open");
2333
+ currentDb.prepare(
2334
+ `UPDATE tasks
2335
+ SET blocker_discovered = 1,
2336
+ blocker_source = :src
2337
+ WHERE milestone_id = :mid AND slice_id = :sid AND id = :tid`,
2338
+ ).run({ ":src": source, ":mid": milestoneId, ":sid": sliceId, ":tid": taskId });
2339
+ }
2340
+
2341
+ /** List tasks with active escalation artifacts across a milestone (for /gsd escalate list). */
2342
+ export function listEscalationArtifacts(milestoneId: string, includeResolved: boolean = false): TaskRow[] {
2343
+ if (!currentDb) return [];
2344
+ const filter = includeResolved
2345
+ ? "escalation_artifact_path IS NOT NULL"
2346
+ : "(escalation_pending = 1 OR escalation_awaiting_review = 1) AND escalation_artifact_path IS NOT NULL";
2347
+ const rows = currentDb.prepare(
2348
+ `SELECT * FROM tasks WHERE milestone_id = :mid AND ${filter} ORDER BY slice_id, sequence, id`,
2349
+ ).all({ ":mid": milestoneId });
2350
+ return rows.map(rowToTask);
2351
+ }
2352
+
1857
2353
  export function insertVerificationEvidence(e: {
1858
2354
  taskId: string;
1859
2355
  sliceId: string;
@@ -2167,6 +2663,19 @@ export function reconcileWorktreeDb(
2167
2663
  try {
2168
2664
  const wtInfo = adapter.prepare("PRAGMA wt.table_info('decisions')").all();
2169
2665
  const hasMadeBy = wtInfo.some((col) => col["name"] === "made_by");
2666
+ // ADR-011: worktree may predate schema v16/v17. For missing columns we
2667
+ // fall through to the main DB's existing value (not a literal default)
2668
+ // so reconcile never silently clears state the main tree has recorded.
2669
+ const hasDecisionSource = wtInfo.some((col) => col["name"] === "source");
2670
+ const wtSliceInfo = adapter.prepare("PRAGMA wt.table_info('slices')").all();
2671
+ const hasIsSketch = wtSliceInfo.some((col) => col["name"] === "is_sketch");
2672
+ const hasSketchScope = wtSliceInfo.some((col) => col["name"] === "sketch_scope");
2673
+ const wtTaskInfo = adapter.prepare("PRAGMA wt.table_info('tasks')").all();
2674
+ const hasBlockerSource = wtTaskInfo.some((col) => col["name"] === "blocker_source");
2675
+ const hasEscalationPending = wtTaskInfo.some((col) => col["name"] === "escalation_pending");
2676
+ const hasEscalationAwaiting = wtTaskInfo.some((col) => col["name"] === "escalation_awaiting_review");
2677
+ const hasEscalationArtifact = wtTaskInfo.some((col) => col["name"] === "escalation_artifact_path");
2678
+ const hasEscalationOverride = wtTaskInfo.some((col) => col["name"] === "escalation_override_applied_at");
2170
2679
 
2171
2680
  const decConf = adapter.prepare(
2172
2681
  `SELECT m.id FROM decisions m INNER JOIN wt.decisions w ON m.id = w.id WHERE m.decision != w.decision OR m.choice != w.choice OR m.rationale != w.rationale OR ${
@@ -2188,13 +2697,20 @@ export function reconcileWorktreeDb(
2188
2697
 
2189
2698
  adapter.exec("BEGIN");
2190
2699
  try {
2700
+ // Join the target decisions so we can prefer an existing main.source
2701
+ // when the worktree predates v16 — otherwise a write-through reconcile
2702
+ // would clobber 'escalation'-sourced decisions with the literal default.
2191
2703
  merged.decisions = countChanges(adapter.prepare(`
2192
2704
  INSERT OR REPLACE INTO decisions (
2193
- id, when_context, scope, decision, choice, rationale, revisable, made_by, superseded_by
2705
+ id, when_context, scope, decision, choice, rationale, revisable, made_by, source, superseded_by
2194
2706
  )
2195
- SELECT id, when_context, scope, decision, choice, rationale, revisable, ${
2196
- hasMadeBy ? "made_by" : "'agent'"
2197
- }, superseded_by FROM wt.decisions
2707
+ SELECT w.id, w.when_context, w.scope, w.decision, w.choice, w.rationale, w.revisable, ${
2708
+ hasMadeBy ? "w.made_by" : "COALESCE(m.made_by, 'agent')"
2709
+ }, ${
2710
+ hasDecisionSource ? "w.source" : "COALESCE(m.source, 'discussion')"
2711
+ }, w.superseded_by
2712
+ FROM wt.decisions w
2713
+ LEFT JOIN decisions m ON m.id = w.id
2198
2714
  `).run());
2199
2715
 
2200
2716
  merged.requirements = countChanges(adapter.prepare(`
@@ -2231,13 +2747,15 @@ export function reconcileWorktreeDb(
2231
2747
  `).run());
2232
2748
 
2233
2749
  // Merge slices — preserve worktree progress but never downgrade completed status (#2558).
2234
- // Uses INSERT OR REPLACE with a subquery that picks the best status — if the main DB
2235
- // already has a completed slice, keep that status even if the worktree copy is stale.
2750
+ // ADR-011 Phase 1: carry is_sketch + sketch_scope so reconcile doesn't
2751
+ // silently clear sketch metadata. When the worktree predates v16,
2752
+ // fall back to the main DB's existing value rather than a literal 0/''.
2236
2753
  merged.slices = countChanges(adapter.prepare(`
2237
2754
  INSERT OR REPLACE INTO slices (
2238
2755
  milestone_id, id, title, status, risk, depends, demo, created_at, completed_at,
2239
2756
  full_summary_md, full_uat_md, goal, success_criteria, proof_level,
2240
- integration_closure, observability_impact, sequence, replan_triggered_at
2757
+ integration_closure, observability_impact, sequence, replan_triggered_at,
2758
+ is_sketch, sketch_scope
2241
2759
  )
2242
2760
  SELECT w.milestone_id, w.id, w.title,
2243
2761
  CASE
@@ -2250,19 +2768,25 @@ export function reconcileWorktreeDb(
2250
2768
  THEN m.completed_at ELSE w.completed_at
2251
2769
  END,
2252
2770
  w.full_summary_md, w.full_uat_md, w.goal, w.success_criteria, w.proof_level,
2253
- w.integration_closure, w.observability_impact, w.sequence, w.replan_triggered_at
2771
+ w.integration_closure, w.observability_impact, w.sequence, w.replan_triggered_at,
2772
+ ${hasIsSketch ? "w.is_sketch" : "COALESCE(m.is_sketch, 0)"},
2773
+ ${hasSketchScope ? "w.sketch_scope" : "COALESCE(m.sketch_scope, '')"}
2254
2774
  FROM wt.slices w
2255
2775
  LEFT JOIN slices m ON m.milestone_id = w.milestone_id AND m.id = w.id
2256
2776
  `).run());
2257
2777
 
2258
- // Merge tasks — preserve execution results, never downgrade completed status (#2558)
2778
+ // Merge tasks — preserve execution results, never downgrade completed status (#2558).
2779
+ // ADR-011 P2: carry blocker_source + escalation_* columns so worktree reconcile
2780
+ // doesn't silently clear escalation state back to defaults.
2259
2781
  merged.tasks = countChanges(adapter.prepare(`
2260
2782
  INSERT OR REPLACE INTO tasks (
2261
2783
  milestone_id, slice_id, id, title, status, one_liner, narrative,
2262
2784
  verification_result, duration, completed_at, blocker_discovered,
2263
2785
  deviations, known_issues, key_files, key_decisions, full_summary_md,
2264
2786
  description, estimate, files, verify, inputs, expected_output,
2265
- observability_impact, full_plan_md, sequence
2787
+ observability_impact, full_plan_md, sequence,
2788
+ blocker_source, escalation_pending, escalation_awaiting_review,
2789
+ escalation_artifact_path, escalation_override_applied_at
2266
2790
  )
2267
2791
  SELECT w.milestone_id, w.slice_id, w.id, w.title,
2268
2792
  CASE
@@ -2278,7 +2802,12 @@ export function reconcileWorktreeDb(
2278
2802
  w.blocker_discovered,
2279
2803
  w.deviations, w.known_issues, w.key_files, w.key_decisions, w.full_summary_md,
2280
2804
  w.description, w.estimate, w.files, w.verify, w.inputs, w.expected_output,
2281
- w.observability_impact, w.full_plan_md, w.sequence
2805
+ w.observability_impact, w.full_plan_md, w.sequence,
2806
+ ${hasBlockerSource ? "w.blocker_source" : "COALESCE(m.blocker_source, '')"},
2807
+ ${hasEscalationPending ? "w.escalation_pending" : "COALESCE(m.escalation_pending, 0)"},
2808
+ ${hasEscalationAwaiting ? "w.escalation_awaiting_review" : "COALESCE(m.escalation_awaiting_review, 0)"},
2809
+ ${hasEscalationArtifact ? "w.escalation_artifact_path" : "m.escalation_artifact_path"},
2810
+ ${hasEscalationOverride ? "w.escalation_override_applied_at" : "m.escalation_override_applied_at"}
2282
2811
  FROM wt.tasks w
2283
2812
  LEFT JOIN tasks m ON m.milestone_id = w.milestone_id AND m.slice_id = w.slice_id AND m.id = w.id
2284
2813
  `).run());
@@ -3000,13 +3529,13 @@ export function restoreManifest(manifest: StateManifest): void {
3000
3529
  );
3001
3530
  }
3002
3531
 
3003
- // Restore slices
3532
+ // Restore slices (ADR-011 Phase 1: includes is_sketch + sketch_scope)
3004
3533
  const slStmt = db.prepare(
3005
3534
  `INSERT INTO slices (milestone_id, id, title, status, risk, depends, demo,
3006
3535
  created_at, completed_at, full_summary_md, full_uat_md,
3007
3536
  goal, success_criteria, proof_level, integration_closure, observability_impact,
3008
- sequence, replan_triggered_at)
3009
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
3537
+ sequence, replan_triggered_at, is_sketch, sketch_scope)
3538
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
3010
3539
  );
3011
3540
  for (const s of manifest.slices) {
3012
3541
  slStmt.run(
@@ -3015,17 +3544,21 @@ export function restoreManifest(manifest: StateManifest): void {
3015
3544
  s.created_at, s.completed_at, s.full_summary_md, s.full_uat_md,
3016
3545
  s.goal, s.success_criteria, s.proof_level, s.integration_closure, s.observability_impact,
3017
3546
  s.sequence, s.replan_triggered_at,
3547
+ s.is_sketch ?? 0,
3548
+ s.sketch_scope ?? "",
3018
3549
  );
3019
3550
  }
3020
3551
 
3021
- // Restore tasks
3552
+ // Restore tasks (ADR-011 P2: includes blocker_source + escalation_* columns)
3022
3553
  const tkStmt = db.prepare(
3023
3554
  `INSERT INTO tasks (milestone_id, slice_id, id, title, status,
3024
3555
  one_liner, narrative, verification_result, duration, completed_at,
3025
3556
  blocker_discovered, deviations, known_issues, key_files, key_decisions,
3026
3557
  full_summary_md, description, estimate, files, verify,
3027
- inputs, expected_output, observability_impact, sequence)
3028
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
3558
+ inputs, expected_output, observability_impact, sequence,
3559
+ blocker_source, escalation_pending, escalation_awaiting_review,
3560
+ escalation_artifact_path, escalation_override_applied_at)
3561
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
3029
3562
  );
3030
3563
  for (const t of manifest.tasks) {
3031
3564
  tkStmt.run(
@@ -3036,16 +3569,21 @@ export function restoreManifest(manifest: StateManifest): void {
3036
3569
  t.full_summary_md, t.description, t.estimate, JSON.stringify(t.files), t.verify,
3037
3570
  JSON.stringify(t.inputs), JSON.stringify(t.expected_output),
3038
3571
  t.observability_impact, t.sequence,
3572
+ t.blocker_source ?? "",
3573
+ t.escalation_pending ?? 0,
3574
+ t.escalation_awaiting_review ?? 0,
3575
+ t.escalation_artifact_path ?? null,
3576
+ t.escalation_override_applied_at ?? null,
3039
3577
  );
3040
3578
  }
3041
3579
 
3042
- // Restore decisions
3580
+ // Restore decisions (ADR-011 P2: include source so escalation decisions survive)
3043
3581
  const dcStmt = db.prepare(
3044
- `INSERT INTO decisions (seq, id, when_context, scope, decision, choice, rationale, revisable, made_by, superseded_by)
3045
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
3582
+ `INSERT INTO decisions (seq, id, when_context, scope, decision, choice, rationale, revisable, made_by, source, superseded_by)
3583
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
3046
3584
  );
3047
3585
  for (const d of manifest.decisions) {
3048
- dcStmt.run(d.seq, d.id, d.when_context, d.scope, d.decision, d.choice, d.rationale, d.revisable, d.made_by, d.superseded_by);
3586
+ dcStmt.run(d.seq, d.id, d.when_context, d.scope, d.decision, d.choice, d.rationale, d.revisable, d.made_by, d.source ?? "discussion", d.superseded_by);
3049
3587
  }
3050
3588
 
3051
3589
  // Restore verification evidence
@@ -3146,11 +3684,21 @@ export function insertMemoryRow(args: {
3146
3684
  sourceUnitId: string | null;
3147
3685
  createdAt: string;
3148
3686
  updatedAt: string;
3687
+ scope?: string;
3688
+ tags?: string[];
3689
+ /**
3690
+ * ADR-013 Step 2: optional structured payload preserved alongside the flat
3691
+ * `content` field. Used to retain gsd_save_decision-style fields (scope,
3692
+ * decision, choice, rationale, made_by, revisable) on architecture-category
3693
+ * memories so the cutover in Step 6 is lossless. Schema is intentionally
3694
+ * open inside the JSON; documented per category in ADR-013.
3695
+ */
3696
+ structuredFields?: Record<string, unknown> | null;
3149
3697
  }): void {
3150
3698
  if (!currentDb) throw new GSDError(GSD_STALE_STATE, "gsd-db: No database open");
3151
3699
  currentDb.prepare(
3152
- `INSERT INTO memories (id, category, content, confidence, source_unit_type, source_unit_id, created_at, updated_at)
3153
- VALUES (:id, :category, :content, :confidence, :source_unit_type, :source_unit_id, :created_at, :updated_at)`,
3700
+ `INSERT INTO memories (id, category, content, confidence, source_unit_type, source_unit_id, created_at, updated_at, scope, tags, structured_fields)
3701
+ VALUES (:id, :category, :content, :confidence, :source_unit_type, :source_unit_id, :created_at, :updated_at, :scope, :tags, :structured_fields)`,
3154
3702
  ).run({
3155
3703
  ":id": args.id,
3156
3704
  ":category": args.category,
@@ -3160,9 +3708,108 @@ export function insertMemoryRow(args: {
3160
3708
  ":source_unit_id": args.sourceUnitId,
3161
3709
  ":created_at": args.createdAt,
3162
3710
  ":updated_at": args.updatedAt,
3711
+ ":scope": args.scope ?? "project",
3712
+ ":tags": JSON.stringify(args.tags ?? []),
3713
+ ":structured_fields": args.structuredFields == null ? null : JSON.stringify(args.structuredFields),
3714
+ });
3715
+ }
3716
+
3717
+ export function insertMemorySourceRow(args: {
3718
+ id: string;
3719
+ kind: string;
3720
+ uri: string | null;
3721
+ title: string | null;
3722
+ content: string;
3723
+ contentHash: string;
3724
+ importedAt: string;
3725
+ scope?: string;
3726
+ tags?: string[];
3727
+ }): void {
3728
+ if (!currentDb) throw new GSDError(GSD_STALE_STATE, "gsd-db: No database open");
3729
+ currentDb.prepare(
3730
+ `INSERT OR IGNORE INTO memory_sources (id, kind, uri, title, content, content_hash, imported_at, scope, tags)
3731
+ VALUES (:id, :kind, :uri, :title, :content, :content_hash, :imported_at, :scope, :tags)`,
3732
+ ).run({
3733
+ ":id": args.id,
3734
+ ":kind": args.kind,
3735
+ ":uri": args.uri,
3736
+ ":title": args.title,
3737
+ ":content": args.content,
3738
+ ":content_hash": args.contentHash,
3739
+ ":imported_at": args.importedAt,
3740
+ ":scope": args.scope ?? "project",
3741
+ ":tags": JSON.stringify(args.tags ?? []),
3163
3742
  });
3164
3743
  }
3165
3744
 
3745
+ export function deleteMemorySourceRow(id: string): boolean {
3746
+ if (!currentDb) throw new GSDError(GSD_STALE_STATE, "gsd-db: No database open");
3747
+ const res = currentDb
3748
+ .prepare("DELETE FROM memory_sources WHERE id = :id")
3749
+ .run({ ":id": id }) as { changes?: number };
3750
+ return (res?.changes ?? 0) > 0;
3751
+ }
3752
+
3753
+ export function upsertMemoryEmbedding(args: {
3754
+ memoryId: string;
3755
+ model: string;
3756
+ dim: number;
3757
+ vector: Uint8Array;
3758
+ updatedAt: string;
3759
+ }): void {
3760
+ if (!currentDb) throw new GSDError(GSD_STALE_STATE, "gsd-db: No database open");
3761
+ currentDb.prepare(
3762
+ `INSERT INTO memory_embeddings (memory_id, model, dim, vector, updated_at)
3763
+ VALUES (:memory_id, :model, :dim, :vector, :updated_at)
3764
+ ON CONFLICT(memory_id) DO UPDATE SET
3765
+ model = excluded.model,
3766
+ dim = excluded.dim,
3767
+ vector = excluded.vector,
3768
+ updated_at = excluded.updated_at`,
3769
+ ).run({
3770
+ ":memory_id": args.memoryId,
3771
+ ":model": args.model,
3772
+ ":dim": args.dim,
3773
+ ":vector": args.vector,
3774
+ ":updated_at": args.updatedAt,
3775
+ });
3776
+ }
3777
+
3778
+ export function deleteMemoryEmbedding(memoryId: string): boolean {
3779
+ if (!currentDb) throw new GSDError(GSD_STALE_STATE, "gsd-db: No database open");
3780
+ const res = currentDb
3781
+ .prepare("DELETE FROM memory_embeddings WHERE memory_id = :id")
3782
+ .run({ ":id": memoryId }) as { changes?: number };
3783
+ return (res?.changes ?? 0) > 0;
3784
+ }
3785
+
3786
+ export function insertMemoryRelationRow(args: {
3787
+ fromId: string;
3788
+ toId: string;
3789
+ rel: string;
3790
+ confidence: number;
3791
+ createdAt: string;
3792
+ }): void {
3793
+ if (!currentDb) throw new GSDError(GSD_STALE_STATE, "gsd-db: No database open");
3794
+ currentDb.prepare(
3795
+ `INSERT OR REPLACE INTO memory_relations (from_id, to_id, rel, confidence, created_at)
3796
+ VALUES (:from_id, :to_id, :rel, :confidence, :created_at)`,
3797
+ ).run({
3798
+ ":from_id": args.fromId,
3799
+ ":to_id": args.toId,
3800
+ ":rel": args.rel,
3801
+ ":confidence": args.confidence,
3802
+ ":created_at": args.createdAt,
3803
+ });
3804
+ }
3805
+
3806
+ export function deleteMemoryRelationsFor(memoryId: string): void {
3807
+ if (!currentDb) throw new GSDError(GSD_STALE_STATE, "gsd-db: No database open");
3808
+ currentDb
3809
+ .prepare("DELETE FROM memory_relations WHERE from_id = :id OR to_id = :id")
3810
+ .run({ ":id": memoryId });
3811
+ }
3812
+
3166
3813
  export function rewriteMemoryId(placeholderId: string, realId: string): void {
3167
3814
  if (!currentDb) throw new GSDError(GSD_STALE_STATE, "gsd-db: No database open");
3168
3815
  currentDb.prepare("UPDATE memories SET id = :real_id WHERE id = :placeholder").run({