gsd-pi 2.76.0 → 2.77.0-dev.1594b263e

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 (1227) hide show
  1. package/README.md +33 -31
  2. package/dist/claude-cli-check.js +36 -3
  3. package/dist/cli-web-branch.d.ts +1 -0
  4. package/dist/cli-web-branch.js +3 -0
  5. package/dist/cli.js +38 -2
  6. package/dist/extension-discovery.d.ts +6 -0
  7. package/dist/extension-discovery.js +37 -0
  8. package/dist/extension-registry.d.ts +3 -0
  9. package/dist/extension-sort.d.ts +18 -0
  10. package/dist/extension-sort.js +114 -0
  11. package/dist/extension-validator.d.ts +47 -0
  12. package/dist/extension-validator.js +127 -0
  13. package/dist/headless.js +49 -4
  14. package/dist/loader.js +35 -7
  15. package/dist/mcp-server.d.ts +7 -0
  16. package/dist/mcp-server.js +35 -1
  17. package/dist/onboarding.js +45 -0
  18. package/dist/provider-migrations.d.ts +18 -0
  19. package/dist/provider-migrations.js +14 -0
  20. package/dist/resource-loader.d.ts +41 -1
  21. package/dist/resource-loader.js +34 -21
  22. package/dist/resources/agents/researcher.md +1 -1
  23. package/dist/resources/extensions/browser-tools/capture.js +9 -0
  24. package/dist/resources/extensions/browser-tools/tests/browser-tools-integration.test.mjs +8 -59
  25. package/dist/resources/extensions/browser-tools/tests/browser-tools-unit.test.cjs +36 -24
  26. package/dist/resources/extensions/browser-tools/tests/capture-sharp-optional.test.cjs +69 -71
  27. package/dist/resources/extensions/browser-tools/tools/forms.js +5 -1
  28. package/dist/resources/extensions/browser-tools/tools/intent.js +5 -1
  29. package/dist/resources/extensions/claude-code-cli/readiness.js +35 -8
  30. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +625 -80
  31. package/dist/resources/extensions/cmux/index.js +20 -0
  32. package/dist/resources/extensions/github-sync/templates.js +103 -0
  33. package/dist/resources/extensions/google-search/extension-manifest.json +5 -4
  34. package/dist/resources/extensions/google-search/index.js +3 -375
  35. package/dist/resources/extensions/gsd/abandon-detect.js +44 -0
  36. package/dist/resources/extensions/gsd/auto/loop.js +133 -2
  37. package/dist/resources/extensions/gsd/auto/phases.js +160 -49
  38. package/dist/resources/extensions/gsd/auto/resolve.js +24 -0
  39. package/dist/resources/extensions/gsd/auto/run-unit.js +48 -4
  40. package/dist/resources/extensions/gsd/auto/session.js +28 -3
  41. package/dist/resources/extensions/gsd/auto/turn-epoch.js +95 -0
  42. package/dist/resources/extensions/gsd/auto-dispatch.js +216 -40
  43. package/dist/resources/extensions/gsd/auto-loop.js +1 -1
  44. package/dist/resources/extensions/gsd/auto-model-selection.js +177 -20
  45. package/dist/resources/extensions/gsd/auto-post-unit.js +240 -66
  46. package/dist/resources/extensions/gsd/auto-prompts.js +386 -104
  47. package/dist/resources/extensions/gsd/auto-recovery.js +124 -4
  48. package/dist/resources/extensions/gsd/auto-start.js +180 -87
  49. package/dist/resources/extensions/gsd/auto-timeout-recovery.js +11 -5
  50. package/dist/resources/extensions/gsd/auto-tool-tracking.js +47 -7
  51. package/dist/resources/extensions/gsd/auto-unit-closeout.js +11 -2
  52. package/dist/resources/extensions/gsd/auto-verification.js +33 -0
  53. package/dist/resources/extensions/gsd/auto-worktree.js +230 -86
  54. package/dist/resources/extensions/gsd/auto.js +169 -55
  55. package/dist/resources/extensions/gsd/blocked-models.js +68 -0
  56. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +112 -2
  57. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +248 -9
  58. package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +93 -0
  59. package/dist/resources/extensions/gsd/bootstrap/memory-tools.js +3 -0
  60. package/dist/resources/extensions/gsd/bootstrap/provider-error-resume.js +5 -6
  61. package/dist/resources/extensions/gsd/bootstrap/register-extension.js +23 -0
  62. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +59 -9
  63. package/dist/resources/extensions/gsd/bootstrap/system-context.js +95 -29
  64. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +161 -11
  65. package/dist/resources/extensions/gsd/clean-root-preflight.js +93 -0
  66. package/dist/resources/extensions/gsd/commands/handlers/workflow.js +31 -4
  67. package/dist/resources/extensions/gsd/commands-cmux.js +9 -6
  68. package/dist/resources/extensions/gsd/commands-extensions.js +634 -43
  69. package/dist/resources/extensions/gsd/commands-extract-learnings.js +54 -89
  70. package/dist/resources/extensions/gsd/commands-prefs-wizard.js +968 -23
  71. package/dist/resources/extensions/gsd/compaction-snapshot.js +121 -0
  72. package/dist/resources/extensions/gsd/complexity-classifier.js +5 -3
  73. package/dist/resources/extensions/gsd/component-loader.js +447 -0
  74. package/dist/resources/extensions/gsd/component-types.js +69 -0
  75. package/dist/resources/extensions/gsd/context-store.js +23 -7
  76. package/dist/resources/extensions/gsd/db-writer.js +88 -16
  77. package/dist/resources/extensions/gsd/detection.js +49 -1
  78. package/dist/resources/extensions/gsd/dispatch-guard.js +29 -3
  79. package/dist/resources/extensions/gsd/docs/preferences-reference.md +1 -1
  80. package/dist/resources/extensions/gsd/doctor-git-checks.js +23 -29
  81. package/dist/resources/extensions/gsd/doctor-providers.js +51 -5
  82. package/dist/resources/extensions/gsd/ecosystem/gsd-extension-api.js +1 -0
  83. package/dist/resources/extensions/gsd/error-classifier.js +31 -3
  84. package/dist/resources/extensions/gsd/exec-history.js +120 -0
  85. package/dist/resources/extensions/gsd/exec-sandbox.js +258 -0
  86. package/dist/resources/extensions/gsd/file-lock.js +49 -9
  87. package/dist/resources/extensions/gsd/forensics.js +106 -0
  88. package/dist/resources/extensions/gsd/gate-registry.js +2 -2
  89. package/dist/resources/extensions/gsd/git-constants.js +28 -1
  90. package/dist/resources/extensions/gsd/git-self-heal.js +27 -0
  91. package/dist/resources/extensions/gsd/git-service.js +127 -2
  92. package/dist/resources/extensions/gsd/gitignore.js +2 -0
  93. package/dist/resources/extensions/gsd/gsd-db.js +173 -25
  94. package/dist/resources/extensions/gsd/guided-flow-queue.js +4 -1
  95. package/dist/resources/extensions/gsd/guided-flow.js +214 -13
  96. package/dist/resources/extensions/gsd/health-widget.js +4 -1
  97. package/dist/resources/extensions/gsd/hook-emitter.js +108 -0
  98. package/dist/resources/extensions/gsd/init-wizard.js +15 -1
  99. package/dist/resources/extensions/gsd/journal.js +17 -2
  100. package/dist/resources/extensions/gsd/key-manager.js +28 -0
  101. package/dist/resources/extensions/gsd/memory-backfill.js +126 -0
  102. package/dist/resources/extensions/gsd/memory-extractor.js +7 -1
  103. package/dist/resources/extensions/gsd/memory-store.js +19 -0
  104. package/dist/resources/extensions/gsd/milestone-actions.js +15 -0
  105. package/dist/resources/extensions/gsd/milestone-scope-classifier.js +299 -0
  106. package/dist/resources/extensions/gsd/milestone-summary-classifier.js +37 -0
  107. package/dist/resources/extensions/gsd/model-cost-table.js +3 -0
  108. package/dist/resources/extensions/gsd/model-router.js +42 -3
  109. package/dist/resources/extensions/gsd/native-git-bridge.js +34 -4
  110. package/dist/resources/extensions/gsd/notifications.js +30 -16
  111. package/dist/resources/extensions/gsd/pre-execution-checks.js +44 -9
  112. package/dist/resources/extensions/gsd/preferences-types.js +9 -0
  113. package/dist/resources/extensions/gsd/preferences-validation.js +106 -0
  114. package/dist/resources/extensions/gsd/preferences.js +17 -17
  115. package/dist/resources/extensions/gsd/prompt-cache-optimizer.js +4 -0
  116. package/dist/resources/extensions/gsd/prompt-loader.js +22 -7
  117. package/dist/resources/extensions/gsd/prompts/complete-milestone.md +6 -2
  118. package/dist/resources/extensions/gsd/prompts/complete-slice.md +2 -2
  119. package/dist/resources/extensions/gsd/prompts/debug-diagnose.md +2 -0
  120. package/dist/resources/extensions/gsd/prompts/discuss-headless.md +29 -2
  121. package/dist/resources/extensions/gsd/prompts/discuss.md +29 -2
  122. package/dist/resources/extensions/gsd/prompts/doctor-heal.md +5 -4
  123. package/dist/resources/extensions/gsd/prompts/execute-task.md +3 -2
  124. package/dist/resources/extensions/gsd/prompts/parallel-research-slices.md +5 -2
  125. package/dist/resources/extensions/gsd/prompts/plan-slice.md +16 -2
  126. package/dist/resources/extensions/gsd/prompts/research-slice.md +1 -0
  127. package/dist/resources/extensions/gsd/prompts/system.md +1 -0
  128. package/dist/resources/extensions/gsd/reports.js +5 -4
  129. package/dist/resources/extensions/gsd/safety/evidence-collector.js +96 -0
  130. package/dist/resources/extensions/gsd/safety/file-change-validator.js +13 -5
  131. package/dist/resources/extensions/gsd/safety/git-checkpoint.js +11 -0
  132. package/dist/resources/extensions/gsd/safety/safety-harness.js +5 -1
  133. package/dist/resources/extensions/gsd/service-tier.js +5 -2
  134. package/dist/resources/extensions/gsd/session-lock.js +19 -10
  135. package/dist/resources/extensions/gsd/skill-manifest.js +168 -0
  136. package/dist/resources/extensions/gsd/slice-cadence.js +238 -0
  137. package/dist/resources/extensions/gsd/slice-parallel-orchestrator.js +278 -8
  138. package/dist/resources/extensions/gsd/state-transition-matrix.js +118 -0
  139. package/dist/resources/extensions/gsd/state.js +112 -62
  140. package/dist/resources/extensions/gsd/sync-lock.js +98 -42
  141. package/dist/resources/extensions/gsd/token-counter.js +22 -5
  142. package/dist/resources/extensions/gsd/tools/complete-milestone.js +16 -10
  143. package/dist/resources/extensions/gsd/tools/complete-slice.js +21 -0
  144. package/dist/resources/extensions/gsd/tools/complete-task.js +31 -0
  145. package/dist/resources/extensions/gsd/tools/exec-search-tool.js +59 -0
  146. package/dist/resources/extensions/gsd/tools/exec-tool.js +126 -0
  147. package/dist/resources/extensions/gsd/tools/memory-tools.js +26 -1
  148. package/dist/resources/extensions/gsd/tools/resume-tool.js +23 -0
  149. package/dist/resources/extensions/gsd/tools/validate-milestone.js +7 -2
  150. package/dist/resources/extensions/gsd/unit-context-composer.js +147 -0
  151. package/dist/resources/extensions/gsd/unit-context-manifest.js +370 -0
  152. package/dist/resources/extensions/gsd/uok/audit.js +18 -2
  153. package/dist/resources/extensions/gsd/uok/dispatch-envelope.js +33 -0
  154. package/dist/resources/extensions/gsd/uok/execution-graph.js +10 -0
  155. package/dist/resources/extensions/gsd/uok/gate-runner.js +53 -5
  156. package/dist/resources/extensions/gsd/uok/gitops.js +2 -1
  157. package/dist/resources/extensions/gsd/uok/loop-adapter.js +37 -10
  158. package/dist/resources/extensions/gsd/uok/parity-report.js +58 -0
  159. package/dist/resources/extensions/gsd/uok/plan-v2.js +30 -7
  160. package/dist/resources/extensions/gsd/uok/writer.js +82 -0
  161. package/dist/resources/extensions/gsd/workflow-logger.js +10 -2
  162. package/dist/resources/extensions/gsd/workflow-mcp.js +9 -0
  163. package/dist/resources/extensions/gsd/workflow-templates/spike.md +6 -0
  164. package/dist/resources/extensions/gsd/worktree-manager.js +86 -8
  165. package/dist/resources/extensions/gsd/worktree-resolver.js +136 -17
  166. package/dist/resources/extensions/gsd/worktree-telemetry.js +198 -0
  167. package/dist/resources/extensions/mcp-client/auth.js +10 -1
  168. package/dist/resources/extensions/mcp-client/index.js +121 -10
  169. package/dist/resources/extensions/ollama/index.js +5 -1
  170. package/dist/resources/extensions/remote-questions/manager.js +11 -5
  171. package/dist/resources/extensions/search-the-web/command-search-provider.js +5 -4
  172. package/dist/resources/extensions/search-the-web/native-search.js +45 -13
  173. package/dist/resources/extensions/shared/cmux-events.js +12 -0
  174. package/dist/resources/extensions/shared/rtk-session-stats.js +1 -2
  175. package/dist/resources/skills/api-design/SKILL.md +190 -0
  176. package/dist/resources/skills/create-mcp-server/SKILL.md +121 -0
  177. package/dist/resources/skills/create-skill/SKILL.md +2 -2
  178. package/dist/resources/skills/create-skill/references/gsd-skill-ecosystem.md +4 -4
  179. package/dist/resources/skills/create-skill/workflows/audit-skill.md +4 -4
  180. package/dist/resources/skills/create-skill/workflows/create-new-skill.md +5 -5
  181. package/dist/resources/skills/decompose-into-slices/SKILL.md +139 -0
  182. package/dist/resources/skills/dependency-upgrade/SKILL.md +158 -0
  183. package/dist/resources/skills/design-an-interface/SKILL.md +102 -0
  184. package/dist/resources/skills/forensics/SKILL.md +153 -0
  185. package/dist/resources/skills/grill-me/SKILL.md +93 -0
  186. package/dist/resources/skills/handoff/SKILL.md +121 -0
  187. package/dist/resources/skills/observability/SKILL.md +174 -0
  188. package/dist/resources/skills/security-review/SKILL.md +181 -0
  189. package/dist/resources/skills/spike-wrap-up/SKILL.md +138 -0
  190. package/dist/resources/skills/tdd/SKILL.md +112 -0
  191. package/dist/resources/skills/verify-before-complete/SKILL.md +98 -0
  192. package/dist/resources/skills/write-docs/SKILL.md +82 -0
  193. package/dist/resources/skills/write-milestone-brief/SKILL.md +135 -0
  194. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  195. package/dist/web/standalone/.next/BUILD_ID +1 -1
  196. package/dist/web/standalone/.next/app-path-routes-manifest.json +12 -12
  197. package/dist/web/standalone/.next/build-manifest.json +4 -4
  198. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  199. package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
  200. package/dist/web/standalone/.next/required-server-files.json +4 -4
  201. package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
  202. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  203. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  204. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  205. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  206. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  207. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  208. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  209. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  210. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  211. package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
  212. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  213. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  214. package/dist/web/standalone/.next/server/app/_not-found.rsc +3 -3
  215. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  216. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  217. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  218. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  219. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  220. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  221. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  222. package/dist/web/standalone/.next/server/app/api/boot/route.js.nft.json +1 -1
  223. package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
  224. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  225. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
  226. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
  227. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  228. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
  229. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
  230. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
  231. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
  232. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
  233. package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
  234. package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
  235. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  236. package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
  237. package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
  238. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  239. package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
  240. package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  241. package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
  242. package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
  243. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  244. package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
  245. package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
  246. package/dist/web/standalone/.next/server/app/api/experimental/route.js +2 -2
  247. package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
  248. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  249. package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
  250. package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
  251. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  252. package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  253. package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  254. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  255. package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
  256. package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
  257. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  258. package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  259. package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  260. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  261. package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
  262. package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  263. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  264. package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
  265. package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  266. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  267. package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
  268. package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
  269. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  270. package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
  271. package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
  272. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  273. package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
  274. package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
  275. package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
  276. package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  277. package/dist/web/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  278. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  279. package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
  280. package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  281. package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
  282. package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  283. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  284. package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  285. package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  286. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  287. package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
  288. package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
  289. package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +2 -2
  290. package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
  291. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  292. package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
  293. package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
  294. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  295. package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
  296. package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
  297. package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
  298. package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
  299. package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
  300. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  301. package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
  302. package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
  303. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  304. package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
  305. package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
  306. package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
  307. package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  308. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  309. package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
  310. package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
  311. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  312. package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
  313. package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
  314. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  315. package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
  316. package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
  317. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +2 -2
  318. package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
  319. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
  320. package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
  321. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +2 -2
  322. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
  323. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
  324. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +4 -4
  325. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
  326. package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
  327. package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
  328. package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
  329. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  330. package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
  331. package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
  332. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  333. package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  334. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  335. package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +1 -1
  336. package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
  337. package/dist/web/standalone/.next/server/app/index.html +1 -1
  338. package/dist/web/standalone/.next/server/app/index.rsc +4 -4
  339. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  340. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -4
  341. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  342. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +3 -3
  343. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  344. package/dist/web/standalone/.next/server/app/page.js +2 -2
  345. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  346. package/dist/web/standalone/.next/server/app-paths-manifest.json +12 -12
  347. package/dist/web/standalone/.next/server/chunks/1926.js +1 -0
  348. package/dist/web/standalone/.next/server/chunks/63.js +3 -3
  349. package/dist/web/standalone/.next/server/chunks/6897.js +3 -3
  350. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  351. package/dist/web/standalone/.next/server/middleware-manifest.json +5 -5
  352. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  353. package/dist/web/standalone/.next/server/middleware.js +2 -2
  354. package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
  355. package/dist/web/standalone/.next/server/next-font-manifest.json +1 -1
  356. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  357. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  358. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  359. package/dist/web/standalone/.next/static/chunks/2826.e9f5195e91f9cad2.js +11 -0
  360. package/dist/web/standalone/.next/static/chunks/app/_not-found/{page-2f24283c162b6ab3.js → page-f2a7482d42a5614b.js} +1 -1
  361. package/dist/web/standalone/.next/static/chunks/app/{layout-9ecfd95f343793f0.js → layout-a16c7a7ecdf0c2cf.js} +1 -1
  362. package/dist/web/standalone/.next/static/chunks/app/page-5b113fd32bc2a1c3.js +1 -0
  363. package/dist/web/standalone/.next/static/chunks/main-app-fdab67f7802d7832.js +1 -0
  364. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +1 -0
  365. package/dist/web/standalone/.next/static/chunks/{webpack-5fc74f13a25fa1bb.js → webpack-2e68521d7c82f7c2.js} +1 -1
  366. package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
  367. package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
  368. package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
  369. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.target.mk +14 -14
  370. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_except.target.mk +14 -14
  371. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_maybe.target.mk +14 -14
  372. package/dist/web/standalone/server.js +1 -1
  373. package/dist/welcome-screen.js +6 -1
  374. package/dist/wizard.js +2 -0
  375. package/package.json +17 -16
  376. package/packages/daemon/package.json +2 -2
  377. package/packages/daemon/src/logger.ts +4 -3
  378. package/packages/mcp-server/README.md +3 -3
  379. package/packages/mcp-server/dist/env-writer.d.ts +1 -0
  380. package/packages/mcp-server/dist/env-writer.d.ts.map +1 -1
  381. package/packages/mcp-server/dist/env-writer.js +74 -6
  382. package/packages/mcp-server/dist/env-writer.js.map +1 -1
  383. package/packages/mcp-server/dist/remote-questions.d.ts +45 -0
  384. package/packages/mcp-server/dist/remote-questions.d.ts.map +1 -0
  385. package/packages/mcp-server/dist/remote-questions.js +732 -0
  386. package/packages/mcp-server/dist/remote-questions.js.map +1 -0
  387. package/packages/mcp-server/dist/server.d.ts +31 -0
  388. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  389. package/packages/mcp-server/dist/server.js +179 -93
  390. package/packages/mcp-server/dist/server.js.map +1 -1
  391. package/packages/mcp-server/dist/session-manager.d.ts +14 -0
  392. package/packages/mcp-server/dist/session-manager.d.ts.map +1 -1
  393. package/packages/mcp-server/dist/session-manager.js +49 -1
  394. package/packages/mcp-server/dist/session-manager.js.map +1 -1
  395. package/packages/mcp-server/dist/workflow-tools.d.ts +1 -1
  396. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  397. package/packages/mcp-server/dist/workflow-tools.js +178 -31
  398. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  399. package/packages/mcp-server/package.json +9 -3
  400. package/packages/mcp-server/src/env-writer.test.ts +79 -1
  401. package/packages/mcp-server/src/env-writer.ts +76 -6
  402. package/packages/mcp-server/src/mcp-server.test.ts +89 -0
  403. package/packages/mcp-server/src/readers/graph.test.ts +87 -15
  404. package/packages/mcp-server/src/readers/readers.test.ts +5 -1
  405. package/packages/mcp-server/src/remote-questions.test.ts +294 -0
  406. package/packages/mcp-server/src/remote-questions.ts +916 -0
  407. package/packages/mcp-server/src/secure-env-collect.test.ts +232 -237
  408. package/packages/mcp-server/src/server.ts +236 -108
  409. package/packages/mcp-server/src/session-manager.ts +43 -1
  410. package/packages/mcp-server/src/workflow-tools.test.ts +231 -1
  411. package/packages/mcp-server/src/workflow-tools.ts +234 -49
  412. package/packages/mcp-server/tsconfig.test.json +19 -0
  413. package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
  414. package/packages/native/package.json +7 -2
  415. package/packages/native/src/__tests__/_test-coverage-guard.test.mjs +98 -0
  416. package/packages/native/src/__tests__/clipboard.test.mjs +69 -23
  417. package/packages/native/src/__tests__/module-compat.test.mjs +59 -27
  418. package/packages/native/src/__tests__/ps.test.mjs +14 -8
  419. package/packages/native/src/__tests__/stream-process.test.mjs +23 -2
  420. package/packages/native/src/__tests__/truncate.test.mjs +17 -2
  421. package/packages/native/tsconfig.tsbuildinfo +1 -1
  422. package/packages/pi-agent-core/dist/agent-loop.js +12 -0
  423. package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
  424. package/packages/pi-agent-core/dist/types.d.ts +30 -0
  425. package/packages/pi-agent-core/dist/types.d.ts.map +1 -1
  426. package/packages/pi-agent-core/dist/types.js.map +1 -1
  427. package/packages/pi-agent-core/package.json +6 -1
  428. package/packages/pi-agent-core/src/agent-loop.test.ts +226 -31
  429. package/packages/pi-agent-core/src/agent-loop.ts +14 -0
  430. package/packages/pi-agent-core/src/agent.test.ts +96 -102
  431. package/packages/pi-agent-core/src/types.ts +34 -0
  432. package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -1
  433. package/packages/pi-ai/dist/models/capability-patches.d.ts.map +1 -1
  434. package/packages/pi-ai/dist/models/capability-patches.js +9 -2
  435. package/packages/pi-ai/dist/models/capability-patches.js.map +1 -1
  436. package/packages/pi-ai/dist/models/custom.d.ts +38 -0
  437. package/packages/pi-ai/dist/models/custom.d.ts.map +1 -1
  438. package/packages/pi-ai/dist/models/custom.js +41 -0
  439. package/packages/pi-ai/dist/models/custom.js.map +1 -1
  440. package/packages/pi-ai/dist/models/generated/index.d.ts +34 -0
  441. package/packages/pi-ai/dist/models/generated/index.d.ts.map +1 -1
  442. package/packages/pi-ai/dist/models/generated/openai-codex.d.ts +17 -0
  443. package/packages/pi-ai/dist/models/generated/openai-codex.d.ts.map +1 -1
  444. package/packages/pi-ai/dist/models/generated/openai-codex.js +17 -0
  445. package/packages/pi-ai/dist/models/generated/openai-codex.js.map +1 -1
  446. package/packages/pi-ai/dist/models/generated/openai.d.ts +17 -0
  447. package/packages/pi-ai/dist/models/generated/openai.d.ts.map +1 -1
  448. package/packages/pi-ai/dist/models/generated/openai.js +17 -0
  449. package/packages/pi-ai/dist/models/generated/openai.js.map +1 -1
  450. package/packages/pi-ai/dist/models.generated.test.js +43 -70
  451. package/packages/pi-ai/dist/models.generated.test.js.map +1 -1
  452. package/packages/pi-ai/dist/models.test.js +36 -11
  453. package/packages/pi-ai/dist/models.test.js.map +1 -1
  454. package/packages/pi-ai/dist/providers/anthropic-auth.test.js +1 -1
  455. package/packages/pi-ai/dist/providers/anthropic-auth.test.js.map +1 -1
  456. package/packages/pi-ai/dist/providers/anthropic-bearer-auth.test.d.ts +2 -0
  457. package/packages/pi-ai/dist/providers/anthropic-bearer-auth.test.d.ts.map +1 -0
  458. package/packages/pi-ai/dist/providers/anthropic-bearer-auth.test.js +13 -0
  459. package/packages/pi-ai/dist/providers/anthropic-bearer-auth.test.js.map +1 -0
  460. package/packages/pi-ai/dist/providers/anthropic-shared.d.ts.map +1 -1
  461. package/packages/pi-ai/dist/providers/anthropic-shared.js +27 -4
  462. package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
  463. package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
  464. package/packages/pi-ai/dist/providers/anthropic.js +13 -4
  465. package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
  466. package/packages/pi-ai/dist/providers/minimax-tool-name.test.d.ts +2 -0
  467. package/packages/pi-ai/dist/providers/minimax-tool-name.test.d.ts.map +1 -0
  468. package/packages/pi-ai/dist/providers/minimax-tool-name.test.js +80 -0
  469. package/packages/pi-ai/dist/providers/minimax-tool-name.test.js.map +1 -0
  470. package/packages/pi-ai/dist/providers/openai-completions.d.ts.map +1 -1
  471. package/packages/pi-ai/dist/providers/openai-completions.js +60 -15
  472. package/packages/pi-ai/dist/providers/openai-completions.js.map +1 -1
  473. package/packages/pi-ai/dist/providers/simple-options.d.ts +10 -0
  474. package/packages/pi-ai/dist/providers/simple-options.d.ts.map +1 -1
  475. package/packages/pi-ai/dist/providers/simple-options.js +16 -1
  476. package/packages/pi-ai/dist/providers/simple-options.js.map +1 -1
  477. package/packages/pi-ai/dist/providers/think-tag-parser.d.ts +17 -0
  478. package/packages/pi-ai/dist/providers/think-tag-parser.d.ts.map +1 -0
  479. package/packages/pi-ai/dist/providers/think-tag-parser.js +75 -0
  480. package/packages/pi-ai/dist/providers/think-tag-parser.js.map +1 -0
  481. package/packages/pi-ai/dist/providers/think-tag-parser.test.d.ts +2 -0
  482. package/packages/pi-ai/dist/providers/think-tag-parser.test.d.ts.map +1 -0
  483. package/packages/pi-ai/dist/providers/think-tag-parser.test.js +41 -0
  484. package/packages/pi-ai/dist/providers/think-tag-parser.test.js.map +1 -0
  485. package/packages/pi-ai/dist/utils/oauth/github-copilot.d.ts.map +1 -1
  486. package/packages/pi-ai/dist/utils/oauth/github-copilot.js +12 -2
  487. package/packages/pi-ai/dist/utils/oauth/github-copilot.js.map +1 -1
  488. package/packages/pi-ai/dist/utils/oauth/github-copilot.test.js +164 -14
  489. package/packages/pi-ai/dist/utils/oauth/github-copilot.test.js.map +1 -1
  490. package/packages/pi-ai/dist/utils/oauth/google-antigravity.d.ts.map +1 -1
  491. package/packages/pi-ai/dist/utils/oauth/google-antigravity.js +15 -3
  492. package/packages/pi-ai/dist/utils/oauth/google-antigravity.js.map +1 -1
  493. package/packages/pi-ai/dist/utils/oauth/google-antigravity.test.d.ts +2 -0
  494. package/packages/pi-ai/dist/utils/oauth/google-antigravity.test.d.ts.map +1 -0
  495. package/packages/pi-ai/dist/utils/oauth/google-antigravity.test.js +67 -0
  496. package/packages/pi-ai/dist/utils/oauth/google-antigravity.test.js.map +1 -0
  497. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.d.ts.map +1 -1
  498. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.js +16 -3
  499. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.js.map +1 -1
  500. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.test.d.ts +2 -0
  501. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.test.d.ts.map +1 -0
  502. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.test.js +67 -0
  503. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.test.js.map +1 -0
  504. package/packages/pi-ai/package.json +6 -1
  505. package/packages/pi-ai/scripts/generate-models.ts +44 -0
  506. package/packages/pi-ai/src/models/capability-patches.ts +10 -2
  507. package/packages/pi-ai/src/models/custom.ts +42 -0
  508. package/packages/pi-ai/src/models/generated/openai-codex.ts +17 -0
  509. package/packages/pi-ai/src/models/generated/openai.ts +17 -0
  510. package/packages/pi-ai/src/models.generated.test.ts +46 -73
  511. package/packages/pi-ai/src/models.test.ts +48 -11
  512. package/packages/pi-ai/src/providers/anthropic-auth.test.ts +1 -1
  513. package/packages/pi-ai/src/providers/anthropic-bearer-auth.test.ts +26 -0
  514. package/packages/pi-ai/src/providers/anthropic-shared.ts +26 -5
  515. package/packages/pi-ai/src/providers/anthropic.ts +15 -4
  516. package/packages/pi-ai/src/providers/minimax-tool-name.test.ts +98 -0
  517. package/packages/pi-ai/src/providers/openai-completions.ts +57 -16
  518. package/packages/pi-ai/src/providers/simple-options.ts +17 -1
  519. package/packages/pi-ai/src/providers/think-tag-parser.test.ts +44 -0
  520. package/packages/pi-ai/src/providers/think-tag-parser.ts +94 -0
  521. package/packages/pi-ai/src/utils/oauth/github-copilot.test.ts +200 -23
  522. package/packages/pi-ai/src/utils/oauth/github-copilot.ts +12 -2
  523. package/packages/pi-ai/src/utils/oauth/google-antigravity.test.ts +84 -0
  524. package/packages/pi-ai/src/utils/oauth/google-antigravity.ts +15 -5
  525. package/packages/pi-ai/src/utils/oauth/google-gemini-cli.test.ts +84 -0
  526. package/packages/pi-ai/src/utils/oauth/google-gemini-cli.ts +16 -5
  527. package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
  528. package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js +96 -31
  529. package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js.map +1 -1
  530. package/packages/pi-coding-agent/dist/core/agent-session-model-switch.test.js +75 -12
  531. package/packages/pi-coding-agent/dist/core/agent-session-model-switch.test.js.map +1 -1
  532. package/packages/pi-coding-agent/dist/core/agent-session-tool-refresh.test.js +99 -31
  533. package/packages/pi-coding-agent/dist/core/agent-session-tool-refresh.test.js.map +1 -1
  534. package/packages/pi-coding-agent/dist/core/agent-session.d.ts +2 -0
  535. package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  536. package/packages/pi-coding-agent/dist/core/agent-session.js +32 -2
  537. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  538. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts +25 -0
  539. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
  540. package/packages/pi-coding-agent/dist/core/compaction/compaction.js +105 -6
  541. package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
  542. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js +230 -28
  543. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js.map +1 -1
  544. package/packages/pi-coding-agent/dist/core/compaction/utils.d.ts +30 -2
  545. package/packages/pi-coding-agent/dist/core/compaction/utils.d.ts.map +1 -1
  546. package/packages/pi-coding-agent/dist/core/compaction/utils.js +113 -12
  547. package/packages/pi-coding-agent/dist/core/compaction/utils.js.map +1 -1
  548. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.d.ts +1 -0
  549. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.d.ts.map +1 -1
  550. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.js +29 -18
  551. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.js.map +1 -1
  552. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.d.ts +2 -0
  553. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.d.ts.map +1 -0
  554. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.js +130 -0
  555. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.js.map +1 -0
  556. package/packages/pi-coding-agent/dist/core/compaction-utils.test.js +56 -1
  557. package/packages/pi-coding-agent/dist/core/compaction-utils.test.js.map +1 -1
  558. package/packages/pi-coding-agent/dist/core/discovery-cache.test.js +8 -15
  559. package/packages/pi-coding-agent/dist/core/discovery-cache.test.js.map +1 -1
  560. package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.d.ts +25 -0
  561. package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.d.ts.map +1 -0
  562. package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.js +109 -0
  563. package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.js.map +1 -0
  564. package/packages/pi-coding-agent/dist/core/extensions/extension-registry.d.ts +67 -0
  565. package/packages/pi-coding-agent/dist/core/extensions/extension-registry.d.ts.map +1 -0
  566. package/packages/pi-coding-agent/dist/core/extensions/extension-registry.js +167 -0
  567. package/packages/pi-coding-agent/dist/core/extensions/extension-registry.js.map +1 -0
  568. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +1 -1
  569. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
  570. package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
  571. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts +8 -2
  572. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
  573. package/packages/pi-coding-agent/dist/core/extensions/loader.js +89 -8
  574. package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
  575. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +35 -2
  576. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
  577. package/packages/pi-coding-agent/dist/core/extensions/runner.js +233 -0
  578. package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
  579. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +212 -2
  580. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
  581. package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
  582. package/packages/pi-coding-agent/dist/core/hooks-runner.d.ts +53 -0
  583. package/packages/pi-coding-agent/dist/core/hooks-runner.d.ts.map +1 -0
  584. package/packages/pi-coding-agent/dist/core/hooks-runner.js +337 -0
  585. package/packages/pi-coding-agent/dist/core/hooks-runner.js.map +1 -0
  586. package/packages/pi-coding-agent/dist/core/hooks-runner.test.d.ts +2 -0
  587. package/packages/pi-coding-agent/dist/core/hooks-runner.test.d.ts.map +1 -0
  588. package/packages/pi-coding-agent/dist/core/hooks-runner.test.js +234 -0
  589. package/packages/pi-coding-agent/dist/core/hooks-runner.test.js.map +1 -0
  590. package/packages/pi-coding-agent/dist/core/index.d.ts +1 -0
  591. package/packages/pi-coding-agent/dist/core/index.d.ts.map +1 -1
  592. package/packages/pi-coding-agent/dist/core/index.js +1 -0
  593. package/packages/pi-coding-agent/dist/core/index.js.map +1 -1
  594. package/packages/pi-coding-agent/dist/core/lsp/lsp-integration.test.js +41 -4
  595. package/packages/pi-coding-agent/dist/core/lsp/lsp-integration.test.js.map +1 -1
  596. package/packages/pi-coding-agent/dist/core/model-discovery.d.ts +3 -1
  597. package/packages/pi-coding-agent/dist/core/model-discovery.d.ts.map +1 -1
  598. package/packages/pi-coding-agent/dist/core/model-discovery.js +92 -12
  599. package/packages/pi-coding-agent/dist/core/model-discovery.js.map +1 -1
  600. package/packages/pi-coding-agent/dist/core/model-discovery.test.js +16 -1
  601. package/packages/pi-coding-agent/dist/core/model-discovery.test.js.map +1 -1
  602. package/packages/pi-coding-agent/dist/core/model-registry-auth-header.test.d.ts +2 -0
  603. package/packages/pi-coding-agent/dist/core/model-registry-auth-header.test.d.ts.map +1 -0
  604. package/packages/pi-coding-agent/dist/core/model-registry-auth-header.test.js +40 -0
  605. package/packages/pi-coding-agent/dist/core/model-registry-auth-header.test.js.map +1 -0
  606. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js +19 -2
  607. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js.map +1 -1
  608. package/packages/pi-coding-agent/dist/core/model-registry-custom-caps.test.d.ts +2 -0
  609. package/packages/pi-coding-agent/dist/core/model-registry-custom-caps.test.d.ts.map +1 -0
  610. package/packages/pi-coding-agent/dist/core/model-registry-custom-caps.test.js +203 -0
  611. package/packages/pi-coding-agent/dist/core/model-registry-custom-caps.test.js.map +1 -0
  612. package/packages/pi-coding-agent/dist/core/model-registry-discovery.test.js +61 -1
  613. package/packages/pi-coding-agent/dist/core/model-registry-discovery.test.js.map +1 -1
  614. package/packages/pi-coding-agent/dist/core/model-registry.d.ts +5 -0
  615. package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
  616. package/packages/pi-coding-agent/dist/core/model-registry.js +90 -10
  617. package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
  618. package/packages/pi-coding-agent/dist/core/redact-secrets.d.ts +2 -0
  619. package/packages/pi-coding-agent/dist/core/redact-secrets.d.ts.map +1 -0
  620. package/packages/pi-coding-agent/dist/core/redact-secrets.js +49 -0
  621. package/packages/pi-coding-agent/dist/core/redact-secrets.js.map +1 -0
  622. package/packages/pi-coding-agent/dist/core/redact-secrets.test.d.ts +2 -0
  623. package/packages/pi-coding-agent/dist/core/redact-secrets.test.d.ts.map +1 -0
  624. package/packages/pi-coding-agent/dist/core/redact-secrets.test.js +67 -0
  625. package/packages/pi-coding-agent/dist/core/redact-secrets.test.js.map +1 -0
  626. package/packages/pi-coding-agent/dist/core/resource-loader-cache-reset.test.js +76 -18
  627. package/packages/pi-coding-agent/dist/core/resource-loader-cache-reset.test.js.map +1 -1
  628. package/packages/pi-coding-agent/dist/core/resource-loader.js +1 -1
  629. package/packages/pi-coding-agent/dist/core/resource-loader.js.map +1 -1
  630. package/packages/pi-coding-agent/dist/core/retry-handler.d.ts.map +1 -1
  631. package/packages/pi-coding-agent/dist/core/retry-handler.js +2 -6
  632. package/packages/pi-coding-agent/dist/core/retry-handler.js.map +1 -1
  633. package/packages/pi-coding-agent/dist/core/retry-handler.test.js +5 -1
  634. package/packages/pi-coding-agent/dist/core/retry-handler.test.js.map +1 -1
  635. package/packages/pi-coding-agent/dist/core/retryable-error-regex.d.ts +18 -0
  636. package/packages/pi-coding-agent/dist/core/retryable-error-regex.d.ts.map +1 -0
  637. package/packages/pi-coding-agent/dist/core/retryable-error-regex.js +18 -0
  638. package/packages/pi-coding-agent/dist/core/retryable-error-regex.js.map +1 -0
  639. package/packages/pi-coding-agent/dist/core/sdk.d.ts +1 -0
  640. package/packages/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
  641. package/packages/pi-coding-agent/dist/core/sdk.js +4 -1
  642. package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
  643. package/packages/pi-coding-agent/dist/core/sdk.test.js +19 -1
  644. package/packages/pi-coding-agent/dist/core/sdk.test.js.map +1 -1
  645. package/packages/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -1
  646. package/packages/pi-coding-agent/dist/core/session-manager.js +10 -6
  647. package/packages/pi-coding-agent/dist/core/session-manager.js.map +1 -1
  648. package/packages/pi-coding-agent/dist/core/session-manager.test.js +45 -1
  649. package/packages/pi-coding-agent/dist/core/session-manager.test.js.map +1 -1
  650. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +55 -0
  651. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
  652. package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  653. package/packages/pi-coding-agent/dist/core/system-prompt.d.ts +20 -0
  654. package/packages/pi-coding-agent/dist/core/system-prompt.d.ts.map +1 -1
  655. package/packages/pi-coding-agent/dist/core/system-prompt.js +19 -5
  656. package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
  657. package/packages/pi-coding-agent/dist/core/tools/path-utils.test.js +2 -1
  658. package/packages/pi-coding-agent/dist/core/tools/path-utils.test.js.map +1 -1
  659. package/packages/pi-coding-agent/dist/index.d.ts +2 -1
  660. package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
  661. package/packages/pi-coding-agent/dist/index.js +1 -0
  662. package/packages/pi-coding-agent/dist/index.js.map +1 -1
  663. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/provider-display-name.test.js +15 -6
  664. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/provider-display-name.test.js.map +1 -1
  665. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js +36 -5
  666. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js.map +1 -1
  667. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.d.ts +1 -1
  668. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.d.ts.map +1 -1
  669. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js +5 -4
  670. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js.map +1 -1
  671. package/packages/pi-coding-agent/dist/modes/interactive/components/dynamic-border.test.js +20 -13
  672. package/packages/pi-coding-agent/dist/modes/interactive/components/dynamic-border.test.js.map +1 -1
  673. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
  674. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +14 -5
  675. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
  676. package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.d.ts +7 -1
  677. package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  678. package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.js +31 -9
  679. package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.js.map +1 -1
  680. package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.d.ts.map +1 -1
  681. package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.js +13 -7
  682. package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.js.map +1 -1
  683. package/packages/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.d.ts +7 -6
  684. package/packages/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  685. package/packages/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.js +29 -21
  686. package/packages/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  687. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  688. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +30 -12
  689. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
  690. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.d.ts.map +1 -1
  691. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js +18 -3
  692. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js.map +1 -1
  693. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js +139 -0
  694. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js.map +1 -1
  695. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.d.ts +2 -0
  696. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.d.ts.map +1 -1
  697. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.js.map +1 -1
  698. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +4 -0
  699. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  700. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +118 -14
  701. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  702. package/packages/pi-coding-agent/dist/tests/system-prompt-skill-filter.test.d.ts +2 -0
  703. package/packages/pi-coding-agent/dist/tests/system-prompt-skill-filter.test.d.ts.map +1 -0
  704. package/packages/pi-coding-agent/dist/tests/system-prompt-skill-filter.test.js +130 -0
  705. package/packages/pi-coding-agent/dist/tests/system-prompt-skill-filter.test.js.map +1 -0
  706. package/packages/pi-coding-agent/package.json +6 -1
  707. package/packages/pi-coding-agent/src/core/agent-session-abort-order.test.ts +113 -36
  708. package/packages/pi-coding-agent/src/core/agent-session-model-switch.test.ts +89 -17
  709. package/packages/pi-coding-agent/src/core/agent-session-tool-refresh.test.ts +112 -43
  710. package/packages/pi-coding-agent/src/core/agent-session.ts +38 -2
  711. package/packages/pi-coding-agent/src/core/compaction/compaction.test.ts +368 -28
  712. package/packages/pi-coding-agent/src/core/compaction/compaction.ts +122 -6
  713. package/packages/pi-coding-agent/src/core/compaction/utils.ts +111 -13
  714. package/packages/pi-coding-agent/src/core/compaction-orchestrator.test.ts +154 -0
  715. package/packages/pi-coding-agent/src/core/compaction-orchestrator.ts +32 -18
  716. package/packages/pi-coding-agent/src/core/compaction-utils.test.ts +68 -1
  717. package/packages/pi-coding-agent/src/core/discovery-cache.test.ts +9 -18
  718. package/packages/pi-coding-agent/src/core/extensions/extension-discovery.ts +119 -0
  719. package/packages/pi-coding-agent/src/core/extensions/extension-registry.ts +222 -0
  720. package/packages/pi-coding-agent/src/core/extensions/index.ts +16 -0
  721. package/packages/pi-coding-agent/src/core/extensions/loader.ts +87 -11
  722. package/packages/pi-coding-agent/src/core/extensions/runner.ts +351 -0
  723. package/packages/pi-coding-agent/src/core/extensions/types.ts +266 -0
  724. package/packages/pi-coding-agent/src/core/hooks-runner.test.ts +269 -0
  725. package/packages/pi-coding-agent/src/core/hooks-runner.ts +460 -0
  726. package/packages/pi-coding-agent/src/core/index.ts +10 -0
  727. package/packages/pi-coding-agent/src/core/lsp/lsp-integration.test.ts +48 -4
  728. package/packages/pi-coding-agent/src/core/model-discovery.test.ts +19 -0
  729. package/packages/pi-coding-agent/src/core/model-discovery.ts +99 -12
  730. package/packages/pi-coding-agent/src/core/model-registry-auth-header.test.ts +44 -0
  731. package/packages/pi-coding-agent/src/core/model-registry-auth-mode.test.ts +22 -2
  732. package/packages/pi-coding-agent/src/core/model-registry-custom-caps.test.ts +245 -0
  733. package/packages/pi-coding-agent/src/core/model-registry-discovery.test.ts +75 -0
  734. package/packages/pi-coding-agent/src/core/model-registry.ts +102 -10
  735. package/packages/pi-coding-agent/src/core/redact-secrets.test.ts +86 -0
  736. package/packages/pi-coding-agent/src/core/redact-secrets.ts +58 -0
  737. package/packages/pi-coding-agent/src/core/resource-loader-cache-reset.test.ts +93 -28
  738. package/packages/pi-coding-agent/src/core/resource-loader.ts +1 -1
  739. package/packages/pi-coding-agent/src/core/retry-handler.test.ts +5 -1
  740. package/packages/pi-coding-agent/src/core/retry-handler.ts +2 -8
  741. package/packages/pi-coding-agent/src/core/retryable-error-regex.ts +18 -0
  742. package/packages/pi-coding-agent/src/core/sdk.test.ts +25 -1
  743. package/packages/pi-coding-agent/src/core/sdk.ts +10 -3
  744. package/packages/pi-coding-agent/src/core/session-manager.test.ts +65 -1
  745. package/packages/pi-coding-agent/src/core/session-manager.ts +10 -6
  746. package/packages/pi-coding-agent/src/core/settings-manager.ts +57 -0
  747. package/packages/pi-coding-agent/src/core/system-prompt.ts +38 -4
  748. package/packages/pi-coding-agent/src/core/tools/path-utils.test.ts +2 -1
  749. package/packages/pi-coding-agent/src/index.ts +17 -0
  750. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/provider-display-name.test.ts +17 -7
  751. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-execution.test.ts +49 -3
  752. package/packages/pi-coding-agent/src/modes/interactive/components/chat-frame.ts +6 -6
  753. package/packages/pi-coding-agent/src/modes/interactive/components/dynamic-border.test.ts +26 -20
  754. package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +14 -5
  755. package/packages/pi-coding-agent/src/modes/interactive/components/model-selector.ts +45 -11
  756. package/packages/pi-coding-agent/src/modes/interactive/components/provider-manager.ts +16 -7
  757. package/packages/pi-coding-agent/src/modes/interactive/components/skill-invocation-message.ts +36 -22
  758. package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +48 -9
  759. package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.test.ts +160 -1
  760. package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.ts +20 -3
  761. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode-state.ts +2 -0
  762. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +132 -14
  763. package/packages/pi-coding-agent/src/tests/system-prompt-skill-filter.test.ts +157 -0
  764. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  765. package/packages/pi-tui/dist/__tests__/autocomplete.test.js +31 -14
  766. package/packages/pi-tui/dist/__tests__/autocomplete.test.js.map +1 -1
  767. package/packages/pi-tui/dist/__tests__/overlay-layout.test.js +128 -17
  768. package/packages/pi-tui/dist/__tests__/overlay-layout.test.js.map +1 -1
  769. package/packages/pi-tui/dist/__tests__/stdin-buffer.test.js +51 -6
  770. package/packages/pi-tui/dist/__tests__/stdin-buffer.test.js.map +1 -1
  771. package/packages/pi-tui/dist/__tests__/tui.test.js +18 -30
  772. package/packages/pi-tui/dist/__tests__/tui.test.js.map +1 -1
  773. package/packages/pi-tui/dist/components/__tests__/input.test.js +10 -3
  774. package/packages/pi-tui/dist/components/__tests__/input.test.js.map +1 -1
  775. package/packages/pi-tui/dist/components/__tests__/loader.test.js +53 -9
  776. package/packages/pi-tui/dist/components/__tests__/loader.test.js.map +1 -1
  777. package/packages/pi-tui/dist/components/__tests__/markdown-maxlines.test.js +6 -2
  778. package/packages/pi-tui/dist/components/__tests__/markdown-maxlines.test.js.map +1 -1
  779. package/packages/pi-tui/dist/components/editor.d.ts +14 -0
  780. package/packages/pi-tui/dist/components/editor.d.ts.map +1 -1
  781. package/packages/pi-tui/dist/components/editor.js +19 -0
  782. package/packages/pi-tui/dist/components/editor.js.map +1 -1
  783. package/packages/pi-tui/dist/components/image.test.js +6 -5
  784. package/packages/pi-tui/dist/components/image.test.js.map +1 -1
  785. package/packages/pi-tui/dist/editor-component.d.ts +2 -0
  786. package/packages/pi-tui/dist/editor-component.d.ts.map +1 -1
  787. package/packages/pi-tui/dist/editor-component.js.map +1 -1
  788. package/packages/pi-tui/dist/stdin-buffer.d.ts +7 -0
  789. package/packages/pi-tui/dist/stdin-buffer.d.ts.map +1 -1
  790. package/packages/pi-tui/dist/stdin-buffer.js +20 -0
  791. package/packages/pi-tui/dist/stdin-buffer.js.map +1 -1
  792. package/packages/pi-tui/package.json +6 -1
  793. package/packages/pi-tui/src/__tests__/autocomplete.test.ts +46 -15
  794. package/packages/pi-tui/src/__tests__/overlay-layout.test.ts +140 -17
  795. package/packages/pi-tui/src/__tests__/stdin-buffer.test.ts +62 -6
  796. package/packages/pi-tui/src/__tests__/tui.test.ts +18 -37
  797. package/packages/pi-tui/src/components/__tests__/input.test.ts +19 -3
  798. package/packages/pi-tui/src/components/__tests__/loader.test.ts +112 -35
  799. package/packages/pi-tui/src/components/__tests__/markdown-maxlines.test.ts +9 -2
  800. package/packages/pi-tui/src/components/editor.ts +22 -0
  801. package/packages/pi-tui/src/components/image.test.ts +10 -5
  802. package/packages/pi-tui/src/editor-component.ts +3 -0
  803. package/packages/pi-tui/src/stdin-buffer.ts +26 -0
  804. package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
  805. package/packages/rpc-client/dist/rpc-client.test.js +101 -51
  806. package/packages/rpc-client/dist/rpc-client.test.js.map +1 -1
  807. package/packages/rpc-client/package.json +6 -1
  808. package/packages/rpc-client/src/rpc-client.test.ts +109 -52
  809. package/packages/rpc-client/tsconfig.tsbuildinfo +1 -1
  810. package/pkg/package.json +1 -1
  811. package/scripts/install.js +526 -0
  812. package/scripts/lib/workspace-manifest.cjs +86 -0
  813. package/scripts/link-workspace-packages.cjs +5 -16
  814. package/scripts/postinstall.js +9 -178
  815. package/src/resources/agents/researcher.md +1 -1
  816. package/src/resources/extensions/browser-tools/capture.ts +12 -0
  817. package/src/resources/extensions/browser-tools/tests/browser-tools-integration.test.mjs +8 -59
  818. package/src/resources/extensions/browser-tools/tests/browser-tools-unit.test.cjs +36 -24
  819. package/src/resources/extensions/browser-tools/tests/capture-sharp-optional.test.cjs +69 -71
  820. package/src/resources/extensions/browser-tools/tools/forms.ts +5 -1
  821. package/src/resources/extensions/browser-tools/tools/intent.ts +5 -1
  822. package/src/resources/extensions/claude-code-cli/readiness.ts +36 -8
  823. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +676 -86
  824. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +1170 -89
  825. package/src/resources/extensions/cmux/index.ts +35 -10
  826. package/src/resources/extensions/github-sync/templates.ts +151 -0
  827. package/src/resources/extensions/github-sync/tests/cli.test.ts +76 -7
  828. package/src/resources/extensions/github-sync/tests/templates.test.ts +92 -1
  829. package/src/resources/extensions/google-search/extension-manifest.json +5 -4
  830. package/src/resources/extensions/google-search/index.ts +9 -470
  831. package/src/resources/extensions/gsd/abandon-detect.ts +62 -0
  832. package/src/resources/extensions/gsd/auto/loop-deps.ts +15 -1
  833. package/src/resources/extensions/gsd/auto/loop.ts +151 -2
  834. package/src/resources/extensions/gsd/auto/phases.ts +192 -47
  835. package/src/resources/extensions/gsd/auto/resolve.ts +29 -0
  836. package/src/resources/extensions/gsd/auto/run-unit.ts +56 -4
  837. package/src/resources/extensions/gsd/auto/session.ts +42 -4
  838. package/src/resources/extensions/gsd/auto/turn-epoch.ts +108 -0
  839. package/src/resources/extensions/gsd/auto/types.ts +1 -1
  840. package/src/resources/extensions/gsd/auto-dispatch.ts +229 -39
  841. package/src/resources/extensions/gsd/auto-loop.ts +1 -1
  842. package/src/resources/extensions/gsd/auto-model-selection.ts +202 -19
  843. package/src/resources/extensions/gsd/auto-post-unit.ts +255 -76
  844. package/src/resources/extensions/gsd/auto-prompts.ts +413 -94
  845. package/src/resources/extensions/gsd/auto-recovery.ts +125 -2
  846. package/src/resources/extensions/gsd/auto-start.ts +206 -82
  847. package/src/resources/extensions/gsd/auto-timeout-recovery.ts +12 -5
  848. package/src/resources/extensions/gsd/auto-tool-tracking.ts +51 -7
  849. package/src/resources/extensions/gsd/auto-unit-closeout.ts +14 -3
  850. package/src/resources/extensions/gsd/auto-verification.ts +33 -0
  851. package/src/resources/extensions/gsd/auto-worktree.ts +251 -93
  852. package/src/resources/extensions/gsd/auto.ts +192 -61
  853. package/src/resources/extensions/gsd/blocked-models.ts +98 -0
  854. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +140 -2
  855. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +261 -9
  856. package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +109 -0
  857. package/src/resources/extensions/gsd/bootstrap/memory-tools.ts +5 -0
  858. package/src/resources/extensions/gsd/bootstrap/provider-error-resume.ts +6 -6
  859. package/src/resources/extensions/gsd/bootstrap/register-extension.ts +26 -0
  860. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +61 -9
  861. package/src/resources/extensions/gsd/bootstrap/system-context.ts +102 -35
  862. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +193 -11
  863. package/src/resources/extensions/gsd/clean-root-preflight.ts +111 -0
  864. package/src/resources/extensions/gsd/commands/handlers/workflow.ts +27 -8
  865. package/src/resources/extensions/gsd/commands-cmux.ts +10 -6
  866. package/src/resources/extensions/gsd/commands-extensions.ts +747 -41
  867. package/src/resources/extensions/gsd/commands-extract-learnings.ts +55 -90
  868. package/src/resources/extensions/gsd/commands-prefs-wizard.ts +898 -32
  869. package/src/resources/extensions/gsd/compaction-snapshot.ts +165 -0
  870. package/src/resources/extensions/gsd/complexity-classifier.ts +5 -3
  871. package/src/resources/extensions/gsd/component-loader.ts +598 -0
  872. package/src/resources/extensions/gsd/component-types.ts +362 -0
  873. package/src/resources/extensions/gsd/context-store.ts +25 -8
  874. package/src/resources/extensions/gsd/db-writer.ts +88 -17
  875. package/src/resources/extensions/gsd/detection.ts +58 -1
  876. package/src/resources/extensions/gsd/dispatch-guard.ts +26 -2
  877. package/src/resources/extensions/gsd/docs/preferences-reference.md +1 -1
  878. package/src/resources/extensions/gsd/doctor-git-checks.ts +23 -27
  879. package/src/resources/extensions/gsd/doctor-providers.ts +59 -6
  880. package/src/resources/extensions/gsd/ecosystem/gsd-extension-api.ts +2 -0
  881. package/src/resources/extensions/gsd/error-classifier.ts +36 -3
  882. package/src/resources/extensions/gsd/exec-history.ts +153 -0
  883. package/src/resources/extensions/gsd/exec-sandbox.ts +326 -0
  884. package/src/resources/extensions/gsd/file-lock.ts +84 -11
  885. package/src/resources/extensions/gsd/forensics.ts +118 -1
  886. package/src/resources/extensions/gsd/gate-registry.ts +2 -2
  887. package/src/resources/extensions/gsd/git-constants.ts +30 -1
  888. package/src/resources/extensions/gsd/git-self-heal.ts +31 -0
  889. package/src/resources/extensions/gsd/git-service.ts +150 -2
  890. package/src/resources/extensions/gsd/gitignore.ts +2 -1
  891. package/src/resources/extensions/gsd/gsd-db.ts +191 -25
  892. package/src/resources/extensions/gsd/guided-flow-queue.ts +4 -1
  893. package/src/resources/extensions/gsd/guided-flow.ts +261 -14
  894. package/src/resources/extensions/gsd/health-widget.ts +3 -1
  895. package/src/resources/extensions/gsd/hook-emitter.ts +188 -0
  896. package/src/resources/extensions/gsd/init-wizard.ts +15 -1
  897. package/src/resources/extensions/gsd/journal.ts +39 -3
  898. package/src/resources/extensions/gsd/key-manager.ts +28 -0
  899. package/src/resources/extensions/gsd/memory-backfill.ts +140 -0
  900. package/src/resources/extensions/gsd/memory-extractor.ts +11 -3
  901. package/src/resources/extensions/gsd/memory-store.ts +26 -0
  902. package/src/resources/extensions/gsd/milestone-actions.ts +18 -0
  903. package/src/resources/extensions/gsd/milestone-scope-classifier.ts +366 -0
  904. package/src/resources/extensions/gsd/milestone-summary-classifier.ts +42 -0
  905. package/src/resources/extensions/gsd/model-cost-table.ts +3 -0
  906. package/src/resources/extensions/gsd/model-router.ts +48 -1
  907. package/src/resources/extensions/gsd/native-git-bridge.ts +34 -4
  908. package/src/resources/extensions/gsd/notifications.ts +27 -15
  909. package/src/resources/extensions/gsd/pre-execution-checks.ts +46 -10
  910. package/src/resources/extensions/gsd/preferences-types.ts +46 -0
  911. package/src/resources/extensions/gsd/preferences-validation.ts +100 -0
  912. package/src/resources/extensions/gsd/preferences.ts +17 -17
  913. package/src/resources/extensions/gsd/prompt-cache-optimizer.ts +4 -0
  914. package/src/resources/extensions/gsd/prompt-loader.ts +30 -7
  915. package/src/resources/extensions/gsd/prompts/complete-milestone.md +6 -2
  916. package/src/resources/extensions/gsd/prompts/complete-slice.md +2 -2
  917. package/src/resources/extensions/gsd/prompts/debug-diagnose.md +2 -0
  918. package/src/resources/extensions/gsd/prompts/discuss-headless.md +29 -2
  919. package/src/resources/extensions/gsd/prompts/discuss.md +29 -2
  920. package/src/resources/extensions/gsd/prompts/doctor-heal.md +5 -4
  921. package/src/resources/extensions/gsd/prompts/execute-task.md +3 -2
  922. package/src/resources/extensions/gsd/prompts/parallel-research-slices.md +5 -2
  923. package/src/resources/extensions/gsd/prompts/plan-slice.md +16 -2
  924. package/src/resources/extensions/gsd/prompts/research-slice.md +1 -0
  925. package/src/resources/extensions/gsd/prompts/system.md +1 -0
  926. package/src/resources/extensions/gsd/reports.ts +5 -4
  927. package/src/resources/extensions/gsd/safety/evidence-collector.ts +119 -0
  928. package/src/resources/extensions/gsd/safety/file-change-validator.ts +17 -4
  929. package/src/resources/extensions/gsd/safety/git-checkpoint.ts +15 -0
  930. package/src/resources/extensions/gsd/safety/safety-harness.ts +9 -0
  931. package/src/resources/extensions/gsd/service-tier.ts +5 -2
  932. package/src/resources/extensions/gsd/session-lock.ts +20 -10
  933. package/src/resources/extensions/gsd/skill-manifest.ts +175 -0
  934. package/src/resources/extensions/gsd/slice-cadence.ts +299 -0
  935. package/src/resources/extensions/gsd/slice-parallel-orchestrator.ts +309 -8
  936. package/src/resources/extensions/gsd/state-transition-matrix.ts +152 -0
  937. package/src/resources/extensions/gsd/state.ts +121 -70
  938. package/src/resources/extensions/gsd/sync-lock.ts +97 -39
  939. package/src/resources/extensions/gsd/tests/artifact-retry-cap.test.ts +270 -0
  940. package/src/resources/extensions/gsd/tests/artifacts-table-preserved-on-cache-invalidate.test.ts +2 -1
  941. package/src/resources/extensions/gsd/tests/auto-deterministic-error-classification-4973.test.ts +341 -0
  942. package/src/resources/extensions/gsd/tests/auto-discuss-milestone-deadlock-4973.test.ts +264 -0
  943. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +322 -286
  944. package/src/resources/extensions/gsd/tests/auto-mode-guards.test.ts +79 -0
  945. package/src/resources/extensions/gsd/tests/auto-model-selection-tool-poisoning.test.ts +742 -0
  946. package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +173 -1
  947. package/src/resources/extensions/gsd/tests/auto-paused-session-validation.test.ts +12 -0
  948. package/src/resources/extensions/gsd/tests/auto-phases-lifecycle.test.ts +61 -0
  949. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +122 -0
  950. package/src/resources/extensions/gsd/tests/auto-remediate-slice-status.test.ts +4 -1
  951. package/src/resources/extensions/gsd/tests/auto-retry-mcp-churn-fixes.test.ts +8 -194
  952. package/src/resources/extensions/gsd/tests/auto-start-bootstrap-await-3420.test.ts +141 -0
  953. package/src/resources/extensions/gsd/tests/auto-start-clean-runtime-db-gated.test.ts +64 -0
  954. package/src/resources/extensions/gsd/tests/auto-start-cold-db-bootstrap.test.ts +2 -2
  955. package/src/resources/extensions/gsd/tests/auto-start-needs-discussion.test.ts +15 -58
  956. package/src/resources/extensions/gsd/tests/auto-start-worktree-db-path.test.ts +2 -2
  957. package/src/resources/extensions/gsd/tests/auto-thinking-restore.test.ts +39 -0
  958. package/src/resources/extensions/gsd/tests/auto-warning-noise-regression.test.ts +3 -2
  959. package/src/resources/extensions/gsd/tests/auto-wrapup-inflight-guard.test.ts +23 -0
  960. package/src/resources/extensions/gsd/tests/blocked-models.test.ts +98 -0
  961. package/src/resources/extensions/gsd/tests/bootstrap-derive-state-db-open.test.ts +2 -1
  962. package/src/resources/extensions/gsd/tests/bundled-skill-triggers.test.ts +54 -0
  963. package/src/resources/extensions/gsd/tests/cache-staleness-regression.test.ts +17 -21
  964. package/src/resources/extensions/gsd/tests/canonical-milestone-root.test.ts +108 -0
  965. package/src/resources/extensions/gsd/tests/clean-root-preflight.test.ts +186 -0
  966. package/src/resources/extensions/gsd/tests/cmux.test.ts +5 -9
  967. package/src/resources/extensions/gsd/tests/commands-extract-learnings.test.ts +68 -66
  968. package/src/resources/extensions/gsd/tests/compaction-snapshot.test.ts +123 -0
  969. package/src/resources/extensions/gsd/tests/complete-milestone-excerpt.test.ts +263 -0
  970. package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +61 -1
  971. package/src/resources/extensions/gsd/tests/complete-slice-composer.test.ts +192 -0
  972. package/src/resources/extensions/gsd/tests/complete-slice-verification-gate.test.ts +2 -1
  973. package/src/resources/extensions/gsd/tests/complete-slice.test.ts +2 -2
  974. package/src/resources/extensions/gsd/tests/complete-task.test.ts +16 -8
  975. package/src/resources/extensions/gsd/tests/complexity-classifier.test.ts +3 -3
  976. package/src/resources/extensions/gsd/tests/component-loader.test.ts +589 -0
  977. package/src/resources/extensions/gsd/tests/component-types.test.ts +127 -0
  978. package/src/resources/extensions/gsd/tests/context-store.test.ts +79 -0
  979. package/src/resources/extensions/gsd/tests/copy-planning-artifacts-samepath.test.ts +2 -1
  980. package/src/resources/extensions/gsd/tests/crash-recovery.test.ts +50 -1
  981. package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +161 -0
  982. package/src/resources/extensions/gsd/tests/db-access-guardrails.test.ts +1 -0
  983. package/src/resources/extensions/gsd/tests/derive-state-crossval.test.ts +3 -3
  984. package/src/resources/extensions/gsd/tests/derive-state-db-disk-reconcile.test.ts +40 -0
  985. package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +133 -3
  986. package/src/resources/extensions/gsd/tests/derive-state-helpers.test.ts +8 -4
  987. package/src/resources/extensions/gsd/tests/derive-state.test.ts +4 -4
  988. package/src/resources/extensions/gsd/tests/discuss-slice-structured-questions.test.ts +2 -1
  989. package/src/resources/extensions/gsd/tests/discuss-tool-scope-leak.test.ts +2 -1
  990. package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +14 -9
  991. package/src/resources/extensions/gsd/tests/dispatch-guard-summary-db-mismatch.test.ts +77 -0
  992. package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +25 -0
  993. package/src/resources/extensions/gsd/tests/dispatch-missing-task-plans.test.ts +14 -0
  994. package/src/resources/extensions/gsd/tests/dispatcher-stuck-planning.test.ts +3 -2
  995. package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +148 -3
  996. package/src/resources/extensions/gsd/tests/double-merge-guard.test.ts +4 -3
  997. package/src/resources/extensions/gsd/tests/empty-content-abort-loop.test.ts +4 -3
  998. package/src/resources/extensions/gsd/tests/ensure-db-open.test.ts +306 -1
  999. package/src/resources/extensions/gsd/tests/escalation.test.ts +1 -1
  1000. package/src/resources/extensions/gsd/tests/exec-history.test.ts +237 -0
  1001. package/src/resources/extensions/gsd/tests/exec-sandbox.test.ts +210 -0
  1002. package/src/resources/extensions/gsd/tests/execution-entry-missing-context-4671.test.ts +173 -0
  1003. package/src/resources/extensions/gsd/tests/extension-bootstrap-isolation.test.ts +139 -129
  1004. package/src/resources/extensions/gsd/tests/file-change-validator.test.ts +58 -0
  1005. package/src/resources/extensions/gsd/tests/file-lock.test.ts +86 -12
  1006. package/src/resources/extensions/gsd/tests/finalize-timeout-guard.test.ts +8 -104
  1007. package/src/resources/extensions/gsd/tests/flat-rate-routing-guard.test.ts +40 -9
  1008. package/src/resources/extensions/gsd/tests/freeform-decisions.test.ts +62 -0
  1009. package/src/resources/extensions/gsd/tests/gate-state-canonicalization.test.ts +102 -0
  1010. package/src/resources/extensions/gsd/tests/gate-storage.test.ts +1 -1
  1011. package/src/resources/extensions/gsd/tests/google-search-stub.test.ts +131 -0
  1012. package/src/resources/extensions/gsd/tests/gsd-db.test.ts +447 -1
  1013. package/src/resources/extensions/gsd/tests/headless-milestone-parity.test.ts +117 -0
  1014. package/src/resources/extensions/gsd/tests/hook-key-parsing.test.ts +4 -55
  1015. package/src/resources/extensions/gsd/tests/init-wizard.test.ts +27 -0
  1016. package/src/resources/extensions/gsd/tests/integration/all-milestones-complete-merge.test.ts +7 -56
  1017. package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +30 -0
  1018. package/src/resources/extensions/gsd/tests/integration/doctor-git-symlink-cwd.test.ts +11 -0
  1019. package/src/resources/extensions/gsd/tests/integration/doctor-git.test.ts +78 -0
  1020. package/src/resources/extensions/gsd/tests/integration/doctor-proactive.test.ts +18 -2
  1021. package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +4 -2
  1022. package/src/resources/extensions/gsd/tests/integration/gitignore-tracked-gsd.test.ts +1 -0
  1023. package/src/resources/extensions/gsd/tests/integration/idle-recovery.test.ts +30 -0
  1024. package/src/resources/extensions/gsd/tests/integration/queue-completed-milestone-perf.test.ts +10 -4
  1025. package/src/resources/extensions/gsd/tests/integration/state-machine-edge-cases.test.ts +144 -7
  1026. package/src/resources/extensions/gsd/tests/integration/state-machine-live-validation.test.ts +4 -0
  1027. package/src/resources/extensions/gsd/tests/integration/state-machine-runtime-failures.test.ts +2 -16
  1028. package/src/resources/extensions/gsd/tests/integration/worktree-e2e.test.ts +11 -0
  1029. package/src/resources/extensions/gsd/tests/interactive-routing-bypass.test.ts +9 -3
  1030. package/src/resources/extensions/gsd/tests/interrupted-session-ui.test.ts +6 -9
  1031. package/src/resources/extensions/gsd/tests/isolation-none-branch-guard.test.ts +1 -1
  1032. package/src/resources/extensions/gsd/tests/issue-4540-regressions.test.ts +288 -0
  1033. package/src/resources/extensions/gsd/tests/journal-integration.test.ts +101 -0
  1034. package/src/resources/extensions/gsd/tests/key-manager.test.ts +9 -0
  1035. package/src/resources/extensions/gsd/tests/knowledge.test.ts +93 -1
  1036. package/src/resources/extensions/gsd/tests/load-memory-block.test.ts +36 -0
  1037. package/src/resources/extensions/gsd/tests/mcp-client-security.test.ts +47 -0
  1038. package/src/resources/extensions/gsd/tests/md-importer.test.ts +1 -1
  1039. package/src/resources/extensions/gsd/tests/memory-extractor.test.ts +5 -15
  1040. package/src/resources/extensions/gsd/tests/memory-pressure-stuck-state.test.ts +12 -0
  1041. package/src/resources/extensions/gsd/tests/memory-store.test.ts +2 -2
  1042. package/src/resources/extensions/gsd/tests/merge-conflict-stops-loop.test.ts +227 -55
  1043. package/src/resources/extensions/gsd/tests/milestone-scope-classifier.test.ts +187 -0
  1044. package/src/resources/extensions/gsd/tests/milestone-status-authoritative.test.ts +3 -3
  1045. package/src/resources/extensions/gsd/tests/milestone-summary-classifier.test.ts +30 -0
  1046. package/src/resources/extensions/gsd/tests/milestone-transition-state-rebuild.test.ts +4 -2
  1047. package/src/resources/extensions/gsd/tests/model-cost-table.test.ts +9 -1
  1048. package/src/resources/extensions/gsd/tests/model-router.test.ts +1 -1
  1049. package/src/resources/extensions/gsd/tests/native-git-bridge-exec-fallback.test.ts +6 -48
  1050. package/src/resources/extensions/gsd/tests/notification-widget.test.ts +6 -3
  1051. package/src/resources/extensions/gsd/tests/orphaned-worktree-audit.test.ts +59 -2
  1052. package/src/resources/extensions/gsd/tests/parallel-commit-scope.test.ts +5 -0
  1053. package/src/resources/extensions/gsd/tests/parallel-research-dispatch.test.ts +274 -112
  1054. package/src/resources/extensions/gsd/tests/parallel-skill-prompt-integration.test.ts +150 -0
  1055. package/src/resources/extensions/gsd/tests/pipeline-variant-dispatch.test.ts +301 -0
  1056. package/src/resources/extensions/gsd/tests/plan-gate-failed-doctor-heal-hint.test.ts +37 -0
  1057. package/src/resources/extensions/gsd/tests/pre-exec-backtick-strip.test.ts +14 -0
  1058. package/src/resources/extensions/gsd/tests/pre-exec-gate-loop.test.ts +272 -0
  1059. package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +356 -0
  1060. package/src/resources/extensions/gsd/tests/pre-execution-pause-wiring.test.ts +32 -1
  1061. package/src/resources/extensions/gsd/tests/preferences-worktree-sync.test.ts +2 -1
  1062. package/src/resources/extensions/gsd/tests/preferences.test.ts +110 -0
  1063. package/src/resources/extensions/gsd/tests/prefs-wizard-coverage.test.ts +44 -0
  1064. package/src/resources/extensions/gsd/tests/prompt-cache-optimizer.test.ts +12 -0
  1065. package/src/resources/extensions/gsd/tests/prompt-loader-extension-dir.test.ts +49 -0
  1066. package/src/resources/extensions/gsd/tests/prompt-step-ordering.test.ts +15 -4
  1067. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +157 -45
  1068. package/src/resources/extensions/gsd/tests/queue-auto-guard.test.ts +213 -0
  1069. package/src/resources/extensions/gsd/tests/queue-draft-detection.test.ts +3 -2
  1070. package/src/resources/extensions/gsd/tests/queued-discuss-fast-path.test.ts +4 -5
  1071. package/src/resources/extensions/gsd/tests/quick-auto-guard.test.ts +13 -7
  1072. package/src/resources/extensions/gsd/tests/ready-phrase-no-files-4573.test.ts +388 -0
  1073. package/src/resources/extensions/gsd/tests/reassess-default-optin.test.ts +132 -0
  1074. package/src/resources/extensions/gsd/tests/recovery-attempts-reset.test.ts +8 -40
  1075. package/src/resources/extensions/gsd/tests/regex-hardening.test.ts +136 -256
  1076. package/src/resources/extensions/gsd/tests/require-slice-discussion-dispatch.test.ts +170 -0
  1077. package/src/resources/extensions/gsd/tests/research-milestone-composer.test.ts +114 -0
  1078. package/src/resources/extensions/gsd/tests/restore-tools-after-discuss.test.ts +15 -6
  1079. package/src/resources/extensions/gsd/tests/resume-dispatch-worktree.test.ts +230 -0
  1080. package/src/resources/extensions/gsd/tests/rewrite-docs-abandon-detect.test.ts +195 -0
  1081. package/src/resources/extensions/gsd/tests/run-uat-composer.test.ts +148 -0
  1082. package/src/resources/extensions/gsd/tests/safety-harness-false-positives.test.ts +205 -0
  1083. package/src/resources/extensions/gsd/tests/save-gate-result-render.test.ts +95 -0
  1084. package/src/resources/extensions/gsd/tests/schema-v21-sequence.test.ts +413 -0
  1085. package/src/resources/extensions/gsd/tests/service-tier.test.ts +4 -0
  1086. package/src/resources/extensions/gsd/tests/session-lock-regression.test.ts +29 -0
  1087. package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +32 -40
  1088. package/src/resources/extensions/gsd/tests/sidecar-queue.test.ts +3 -2
  1089. package/src/resources/extensions/gsd/tests/silent-catch-diagnostics.test.ts +55 -95
  1090. package/src/resources/extensions/gsd/tests/single-writer-v3-tool-surface.test.ts +158 -0
  1091. package/src/resources/extensions/gsd/tests/skill-activation.test.ts +120 -1
  1092. package/src/resources/extensions/gsd/tests/skill-manifest.test.ts +112 -0
  1093. package/src/resources/extensions/gsd/tests/slice-cadence.test.ts +242 -0
  1094. package/src/resources/extensions/gsd/tests/slice-context-injection.test.ts +3 -2
  1095. package/src/resources/extensions/gsd/tests/slice-parallel-orchestrator.test.ts +164 -1
  1096. package/src/resources/extensions/gsd/tests/smart-entry-draft.test.ts +2 -1
  1097. package/src/resources/extensions/gsd/tests/stale-dirlistcache-4648.test.ts +112 -0
  1098. package/src/resources/extensions/gsd/tests/stash-queued-context-files.test.ts +56 -0
  1099. package/src/resources/extensions/gsd/tests/state-machine-full-walkthrough.test.ts +29 -5
  1100. package/src/resources/extensions/gsd/tests/state-transition-matrix.test.ts +44 -0
  1101. package/src/resources/extensions/gsd/tests/stop-auto-race-null-unit.test.ts +3 -3
  1102. package/src/resources/extensions/gsd/tests/structured-data-formatter.test.ts +11 -92
  1103. package/src/resources/extensions/gsd/tests/stuck-detection-coverage.test.ts +2 -2
  1104. package/src/resources/extensions/gsd/tests/subagent-model-dispatch.test.ts +7 -6
  1105. package/src/resources/extensions/gsd/tests/survivor-branch-complete.test.ts +102 -101
  1106. package/src/resources/extensions/gsd/tests/sync-lock.test.ts +31 -0
  1107. package/src/resources/extensions/gsd/tests/sync-worktree-skip-current.test.ts +4 -3
  1108. package/src/resources/extensions/gsd/tests/test-helpers.test.ts +98 -0
  1109. package/src/resources/extensions/gsd/tests/test-helpers.ts +153 -0
  1110. package/src/resources/extensions/gsd/tests/token-counter.test.ts +105 -1
  1111. package/src/resources/extensions/gsd/tests/token-profile.test.ts +8 -1
  1112. package/src/resources/extensions/gsd/tests/tool-compatibility.test.ts +107 -0
  1113. package/src/resources/extensions/gsd/tests/tool-invocation-error-loop-break.test.ts +61 -1
  1114. package/src/resources/extensions/gsd/tests/tool-naming.test.ts +8 -1
  1115. package/src/resources/extensions/gsd/tests/triage-resolution.test.ts +50 -2
  1116. package/src/resources/extensions/gsd/tests/turn-epoch.test.ts +162 -0
  1117. package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +355 -0
  1118. package/src/resources/extensions/gsd/tests/unit-context-manifest.test.ts +258 -0
  1119. package/src/resources/extensions/gsd/tests/uok-contracts.test.ts +51 -0
  1120. package/src/resources/extensions/gsd/tests/uok-execution-graph.test.ts +16 -0
  1121. package/src/resources/extensions/gsd/tests/uok-gate-runner.test.ts +75 -0
  1122. package/src/resources/extensions/gsd/tests/uok-gitops-wiring.test.ts +49 -26
  1123. package/src/resources/extensions/gsd/tests/uok-loop-adapter-writer.test.ts +65 -0
  1124. package/src/resources/extensions/gsd/tests/uok-parity-report.test.ts +42 -0
  1125. package/src/resources/extensions/gsd/tests/uok-plan-v2-wiring.test.ts +42 -2
  1126. package/src/resources/extensions/gsd/tests/uok-writer.test.ts +75 -0
  1127. package/src/resources/extensions/gsd/tests/validate-extension-package.test.ts +168 -0
  1128. package/src/resources/extensions/gsd/tests/validate-milestone.test.ts +148 -8
  1129. package/src/resources/extensions/gsd/tests/verify-artifact-tightened.test.ts +144 -80
  1130. package/src/resources/extensions/gsd/tests/visualizer-critical-path.test.ts +20 -54
  1131. package/src/resources/extensions/gsd/tests/visualizer-overlay.test.ts +342 -277
  1132. package/src/resources/extensions/gsd/tests/worker-model-override.test.ts +37 -29
  1133. package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +25 -2
  1134. package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +65 -2
  1135. package/src/resources/extensions/gsd/tests/worktree-db.test.ts +242 -247
  1136. package/src/resources/extensions/gsd/tests/worktree-health-monorepo.test.ts +103 -67
  1137. package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +6 -1
  1138. package/src/resources/extensions/gsd/tests/worktree-nested-git-safety.test.ts +92 -90
  1139. package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +78 -5
  1140. package/src/resources/extensions/gsd/tests/worktree-submodule-safety.test.ts +238 -59
  1141. package/src/resources/extensions/gsd/tests/worktree-sync-overwrite-loop.test.ts +113 -161
  1142. package/src/resources/extensions/gsd/tests/worktree-telemetry.test.ts +210 -0
  1143. package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +262 -0
  1144. package/src/resources/extensions/gsd/tests/write-gate-predicates.test.ts +186 -0
  1145. package/src/resources/extensions/gsd/tests/write-gate.test.ts +71 -5
  1146. package/src/resources/extensions/gsd/tests/zombie-gsd-state.test.ts +80 -94
  1147. package/src/resources/extensions/gsd/token-counter.ts +22 -5
  1148. package/src/resources/extensions/gsd/tools/complete-milestone.ts +15 -9
  1149. package/src/resources/extensions/gsd/tools/complete-slice.ts +38 -0
  1150. package/src/resources/extensions/gsd/tools/complete-task.ts +49 -0
  1151. package/src/resources/extensions/gsd/tools/exec-search-tool.ts +81 -0
  1152. package/src/resources/extensions/gsd/tools/exec-tool.ts +183 -0
  1153. package/src/resources/extensions/gsd/tools/memory-tools.ts +31 -1
  1154. package/src/resources/extensions/gsd/tools/resume-tool.ts +40 -0
  1155. package/src/resources/extensions/gsd/tools/validate-milestone.ts +8 -2
  1156. package/src/resources/extensions/gsd/types.ts +3 -3
  1157. package/src/resources/extensions/gsd/unit-context-composer.ts +218 -0
  1158. package/src/resources/extensions/gsd/unit-context-manifest.ts +574 -0
  1159. package/src/resources/extensions/gsd/uok/audit.ts +20 -2
  1160. package/src/resources/extensions/gsd/uok/contracts.ts +65 -0
  1161. package/src/resources/extensions/gsd/uok/dispatch-envelope.ts +56 -0
  1162. package/src/resources/extensions/gsd/uok/execution-graph.ts +22 -0
  1163. package/src/resources/extensions/gsd/uok/gate-runner.ts +65 -5
  1164. package/src/resources/extensions/gsd/uok/gitops.ts +6 -1
  1165. package/src/resources/extensions/gsd/uok/loop-adapter.ts +45 -10
  1166. package/src/resources/extensions/gsd/uok/parity-report.ts +84 -0
  1167. package/src/resources/extensions/gsd/uok/plan-v2.ts +39 -8
  1168. package/src/resources/extensions/gsd/uok/writer.ts +113 -0
  1169. package/src/resources/extensions/gsd/workflow-logger.ts +25 -3
  1170. package/src/resources/extensions/gsd/workflow-mcp.ts +9 -0
  1171. package/src/resources/extensions/gsd/workflow-templates/spike.md +6 -0
  1172. package/src/resources/extensions/gsd/worktree-manager.ts +109 -7
  1173. package/src/resources/extensions/gsd/worktree-resolver.ts +150 -18
  1174. package/src/resources/extensions/gsd/worktree-telemetry.ts +322 -0
  1175. package/src/resources/extensions/mcp-client/auth.ts +12 -1
  1176. package/src/resources/extensions/mcp-client/index.ts +132 -11
  1177. package/src/resources/extensions/mcp-client/tests/server-name-spaces.test.ts +70 -36
  1178. package/src/resources/extensions/ollama/index.ts +5 -1
  1179. package/src/resources/extensions/ollama/ollama-auth-mode.test.ts +123 -15
  1180. package/src/resources/extensions/ollama/ollama-status-indicator.test.ts +206 -19
  1181. package/src/resources/extensions/remote-questions/manager.ts +36 -4
  1182. package/src/resources/extensions/remote-questions/tests/command-polling.test.ts +200 -190
  1183. package/src/resources/extensions/search-the-web/command-search-provider.ts +5 -4
  1184. package/src/resources/extensions/search-the-web/native-search.ts +48 -12
  1185. package/src/resources/extensions/shared/cmux-events.ts +59 -0
  1186. package/src/resources/extensions/shared/rtk-session-stats.ts +1 -2
  1187. package/src/resources/extensions/shared/tests/interview-preview.test.ts +11 -3
  1188. package/src/resources/extensions/voice/tests/linux-ready.test.ts +129 -113
  1189. package/src/resources/skills/api-design/SKILL.md +190 -0
  1190. package/src/resources/skills/create-mcp-server/SKILL.md +121 -0
  1191. package/src/resources/skills/create-skill/SKILL.md +2 -2
  1192. package/src/resources/skills/create-skill/references/gsd-skill-ecosystem.md +4 -4
  1193. package/src/resources/skills/create-skill/workflows/audit-skill.md +4 -4
  1194. package/src/resources/skills/create-skill/workflows/create-new-skill.md +5 -5
  1195. package/src/resources/skills/decompose-into-slices/SKILL.md +139 -0
  1196. package/src/resources/skills/dependency-upgrade/SKILL.md +158 -0
  1197. package/src/resources/skills/design-an-interface/SKILL.md +102 -0
  1198. package/src/resources/skills/forensics/SKILL.md +153 -0
  1199. package/src/resources/skills/grill-me/SKILL.md +93 -0
  1200. package/src/resources/skills/handoff/SKILL.md +121 -0
  1201. package/src/resources/skills/observability/SKILL.md +174 -0
  1202. package/src/resources/skills/security-review/SKILL.md +181 -0
  1203. package/src/resources/skills/spike-wrap-up/SKILL.md +138 -0
  1204. package/src/resources/skills/tdd/SKILL.md +112 -0
  1205. package/src/resources/skills/verify-before-complete/SKILL.md +98 -0
  1206. package/src/resources/skills/write-docs/SKILL.md +82 -0
  1207. package/src/resources/skills/write-milestone-brief/SKILL.md +135 -0
  1208. package/dist/web/standalone/.next/server/chunks/7461.js +0 -1
  1209. package/dist/web/standalone/.next/static/chunks/2826.e59e8578e2e28639.js +0 -9
  1210. package/dist/web/standalone/.next/static/chunks/app/page-151349214571e2b6.js +0 -1
  1211. package/dist/web/standalone/.next/static/chunks/main-app-d3d4c336195465f9.js +0 -1
  1212. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ab5a8926e07ec673.js +0 -1
  1213. package/src/resources/extensions/gsd/tests/auto-start-model-capture.test.ts +0 -113
  1214. package/src/resources/extensions/gsd/tests/complete-milestone-false-merge.test.ts +0 -142
  1215. package/src/resources/extensions/gsd/tests/dashboard-model-label-ordering.test.ts +0 -107
  1216. package/src/resources/extensions/gsd/tests/find-missing-summaries-closed.test.ts +0 -48
  1217. package/src/resources/extensions/gsd/tests/forensics-context-persist.test.ts +0 -159
  1218. package/src/resources/extensions/gsd/tests/forensics-db-completion.test.ts +0 -96
  1219. package/src/resources/extensions/gsd/tests/forensics-dedup.test.ts +0 -79
  1220. package/src/resources/extensions/gsd/tests/forensics-hook-key-parse.test.ts +0 -74
  1221. package/src/resources/extensions/gsd/tests/forensics-journal.test.ts +0 -162
  1222. package/src/resources/extensions/gsd/tests/gitignore-bg-shell.test.ts +0 -38
  1223. package/src/resources/extensions/gsd/tests/gsd-no-project-error.test.ts +0 -73
  1224. package/src/resources/extensions/gsd/tests/idle-watchdog-stall-override.test.ts +0 -125
  1225. package/src/resources/extensions/gsd/tests/import-done-milestones.test.ts +0 -42
  1226. /package/dist/web/standalone/.next/static/{ssX7BLv3Dw9Fb4CtrCGeR → MdwvuQQLlBY6wwiSO1Tgv}/_buildManifest.js +0 -0
  1227. /package/dist/web/standalone/.next/static/{ssX7BLv3Dw9Fb4CtrCGeR → MdwvuQQLlBY6wwiSO1Tgv}/_ssgManifest.js +0 -0
@@ -180,7 +180,13 @@ export function queryProject() {
180
180
  // ─── Knowledge Query ───────────────────────────────────────────────────────
181
181
  /**
182
182
  * Filter KNOWLEDGE.md sections by keyword matching.
183
- * Uses H2 sections, matches keywords case-insensitively against:
183
+ *
184
+ * Structure-adaptive (issue #4719): files that organise entries as H3 items
185
+ * under one or more H2 topics are filtered at H3 granularity. Files with only
186
+ * H2 topic headers (no H3) fall back to H2-level filtering for backwards
187
+ * compatibility.
188
+ *
189
+ * Matches keywords case-insensitively against:
184
190
  * 1. Section header text
185
191
  * 2. First paragraph of section content (up to first blank line or next heading)
186
192
  *
@@ -189,28 +195,38 @@ export function queryProject() {
189
195
  *
190
196
  * @param content - Full KNOWLEDGE.md content
191
197
  * @param keywords - Keywords to match (case-insensitive)
192
- * @returns Concatenated matching sections with H2 headers, or empty string
198
+ * @returns Concatenated matching sections with their original heading prefix, or empty string
193
199
  */
194
200
  export async function queryKnowledge(content, keywords) {
195
201
  if (!content || keywords.length === 0)
196
202
  return '';
197
203
  // Lazy import to avoid circular dependency
198
204
  const { extractAllSections } = await import('./files.js');
199
- const sections = extractAllSections(content, 2);
205
+ // Prefer H3 granularity when available; fall back to H2 for H2-only files.
206
+ // This prevents single-H2-with-many-H3 layouts from returning the entire
207
+ // file on a keyword match against the H2 header or its first paragraph.
208
+ const h3Sections = extractAllSections(content, 3);
209
+ const useH3 = h3Sections.size > 0;
210
+ const sections = useH3 ? h3Sections : extractAllSections(content, 2);
200
211
  if (sections.size === 0)
201
212
  return '';
202
- // Normalize keywords for case-insensitive matching
203
- const normalizedKeywords = keywords.map(k => k.toLowerCase());
213
+ const prefix = useH3 ? '###' : '##';
214
+ // Trim, lowercase, drop empties, and de-dupe so callers can pass raw
215
+ // user-provided strings without risking empty-string / whitespace matches.
216
+ const normalizedKeywords = [...new Set(keywords
217
+ .map(k => k.trim().toLowerCase())
218
+ .filter(k => k.length > 0))];
219
+ if (normalizedKeywords.length === 0)
220
+ return '';
204
221
  const matchingSections = [];
205
222
  for (const [header, body] of sections) {
206
223
  // Extract first paragraph: everything up to first blank line or next heading
207
224
  const firstParagraph = body.split(/\n\s*\n|\n#/)[0] || '';
208
- // Check if any keyword matches header or first paragraph
209
225
  const headerLower = header.toLowerCase();
210
226
  const paragraphLower = firstParagraph.toLowerCase();
211
227
  const matches = normalizedKeywords.some(kw => headerLower.includes(kw) || paragraphLower.includes(kw));
212
228
  if (matches) {
213
- matchingSections.push(`## ${header}\n\n${body}`);
229
+ matchingSections.push(`${prefix} ${header}\n\n${body}`);
214
230
  }
215
231
  }
216
232
  return matchingSections.join('\n\n');
@@ -205,6 +205,19 @@ export async function nextDecisionId() {
205
205
  return 'D001';
206
206
  }
207
207
  }
208
+ /** Synchronous variant for use inside db.transaction(). */
209
+ function nextDecisionIdSync(adapter) {
210
+ if (!adapter)
211
+ return 'D001';
212
+ const row = adapter
213
+ .prepare('SELECT MAX(CAST(SUBSTR(id, 2) AS INTEGER)) as max_num FROM decisions')
214
+ .get();
215
+ const maxNum = row ? row['max_num'] : null;
216
+ if (maxNum == null || isNaN(maxNum))
217
+ return 'D001';
218
+ const next = maxNum + 1;
219
+ return `D${String(next).padStart(3, '0')}`;
220
+ }
208
221
  // ─── Next Requirement ID ─────────────────────────────────────────────────
209
222
  /**
210
223
  * Compute the next requirement ID from the current DB state.
@@ -318,32 +331,44 @@ export async function saveRequirementToDb(fields, basePath) {
318
331
  throw err;
319
332
  }
320
333
  }
334
+ // ─── Async Mutex for Decision Saves ───────────────────────────────────────
335
+ //
336
+ // Serializes the entire saveDecisionToDb operation (ID generation + DB upsert
337
+ // + file read + markdown regeneration + file write) so that parallel callers
338
+ // cannot interleave and produce a last-writer-wins race on DECISIONS.md.
339
+ let _decisionSaveLock = Promise.resolve();
340
+ /** Reset the mutex — only for tests. */
341
+ export function _resetDecisionSaveLock() {
342
+ _decisionSaveLock = Promise.resolve();
343
+ }
321
344
  /**
322
345
  * Save a new decision to DB and regenerate DECISIONS.md.
323
346
  * Auto-assigns the next ID via nextDecisionId().
324
347
  *
325
- * The ID computation (SELECT MAX) and insert are wrapped in a single
326
- * transaction to prevent parallel tool calls from computing the same ID
327
- * and silently overwriting each other (#3326, #3339, #3459).
348
+ * Concurrency: uses an async mutex (promise chain) to serialize the entire
349
+ * operation ID generation, DB upsert, file read, markdown regeneration,
350
+ * and file write — preventing parallel callers from overwriting each other's
351
+ * output (last-writer-wins race condition).
328
352
  *
329
353
  * Returns the assigned ID.
330
354
  */
331
355
  export async function saveDecisionToDb(fields, basePath) {
356
+ // Serialize via async mutex: each call waits for the previous one to
357
+ // complete before starting, preventing interleaved DB + file writes.
358
+ let release;
359
+ const prev = _decisionSaveLock;
360
+ _decisionSaveLock = new Promise(r => { release = r; });
361
+ try {
362
+ await prev;
363
+ }
364
+ catch {
365
+ // Previous call failed — proceed regardless; the lock chain must continue.
366
+ }
332
367
  try {
333
368
  const db = await import('./gsd-db.js');
334
- // Atomic ID assignment + insert inside a transaction to prevent
335
- // parallel calls from racing on the same MAX(id) value.
369
+ const adapter = db._getAdapter();
336
370
  const id = db.transaction(() => {
337
- const adapter = db._getAdapter();
338
- if (!adapter)
339
- throw new GSDError(GSD_STALE_STATE, "gsd-db: No database open");
340
- const row = adapter
341
- .prepare('SELECT MAX(CAST(SUBSTR(id, 2) AS INTEGER)) as max_num FROM decisions')
342
- .get();
343
- const maxNum = row ? row['max_num'] : null;
344
- const nextId = (maxNum == null || isNaN(maxNum))
345
- ? 'D001'
346
- : `D${String(maxNum + 1).padStart(3, '0')}`;
371
+ const nextId = nextDecisionIdSync(adapter);
347
372
  db.upsertDecision({
348
373
  id: nextId,
349
374
  when_context: fields.when_context ?? '',
@@ -359,7 +384,6 @@ export async function saveDecisionToDb(fields, basePath) {
359
384
  return nextId;
360
385
  });
361
386
  // Fetch all decisions (including superseded for the full register)
362
- const adapter = db._getAdapter();
363
387
  let allDecisions = [];
364
388
  if (adapter) {
365
389
  const rows = adapter.prepare('SELECT * FROM decisions ORDER BY seq').all();
@@ -434,12 +458,60 @@ export async function saveDecisionToDb(fields, basePath) {
434
458
  invalidateStateCache();
435
459
  clearPathCache();
436
460
  clearParseCache();
461
+ // ADR-013 dual-write: keep the memory store in sync with every decision
462
+ // persisted via the legacy gsd_save_decision path. Without this, prompts
463
+ // that still call gsd_save_decision (discuss.md, plan-milestone.md,
464
+ // guided-plan-slice.md, et al. during the deprecation window) would
465
+ // create decisions rows invisible to memory_query and loadMemoryBlock.
466
+ // Best-effort — never throw, never roll back the decision on failure.
467
+ try {
468
+ const { createMemory } = await import('./memory-store.js');
469
+ const decisionText = (fields.decision ?? '').trim();
470
+ const choiceText = (fields.choice ?? '').trim();
471
+ const rationaleText = (fields.rationale ?? '').trim();
472
+ const contentParts = [];
473
+ if (decisionText)
474
+ contentParts.push(decisionText);
475
+ if (choiceText)
476
+ contentParts.push(`Chose: ${choiceText}.`);
477
+ if (rationaleText)
478
+ contentParts.push(`Rationale: ${rationaleText}.`);
479
+ const content = contentParts.join(' ').slice(0, 600);
480
+ if (content) {
481
+ createMemory({
482
+ category: 'architecture',
483
+ content,
484
+ scope: fields.scope || 'project',
485
+ confidence: 0.85,
486
+ structuredFields: {
487
+ sourceDecisionId: id,
488
+ when_context: fields.when_context ?? '',
489
+ scope: fields.scope,
490
+ decision: fields.decision,
491
+ choice: fields.choice,
492
+ rationale: fields.rationale,
493
+ made_by: fields.made_by ?? 'agent',
494
+ revisable: fields.revisable ?? '',
495
+ },
496
+ });
497
+ }
498
+ }
499
+ catch (mirrorErr) {
500
+ logError('manifest', 'memory-store mirror write failed (non-fatal)', {
501
+ fn: 'saveDecisionToDb',
502
+ decisionId: id,
503
+ error: String(mirrorErr.message),
504
+ });
505
+ }
437
506
  return { id };
438
507
  }
439
508
  catch (err) {
440
509
  logError('manifest', 'saveDecisionToDb failed', { fn: 'saveDecisionToDb', error: String(err.message) });
441
510
  throw err;
442
511
  }
512
+ finally {
513
+ release();
514
+ }
443
515
  }
444
516
  /**
445
517
  * Extract a milestone/slice reference from a deferral decision.
@@ -6,7 +6,7 @@
6
6
  * flow to show when entering a project directory.
7
7
  */
8
8
  import { existsSync, openSync, readSync, closeSync, readdirSync, readFileSync, statSync } from "node:fs";
9
- import { join } from "node:path";
9
+ import { dirname, join, parse as parsePath } from "node:path";
10
10
  import { homedir } from "node:os";
11
11
  import { gsdRoot } from "./paths.js";
12
12
  const gsdHome = process.env.GSD_HOME || join(homedir(), ".gsd");
@@ -951,6 +951,54 @@ function resolveVersionCatalogAccessors(basePath, versionCatalogFiles, settingsF
951
951
  }
952
952
  return accessors;
953
953
  }
954
+ /**
955
+ * Walk ancestor directories of `startDir` looking for any file in
956
+ * `PROJECT_FILES`. Stops at the filesystem root or at a `.git` boundary
957
+ * (so ancestors above a git repo root — e.g. `$HOME` or `/usr/local` —
958
+ * can't trigger false positives). Returns true if an ancestor contains
959
+ * one of the project markers.
960
+ *
961
+ * Used by the worktree health check (#2347) to avoid warning about
962
+ * monorepos where package.json / Cargo.toml / etc. live in a parent
963
+ * directory rather than in the worktree's own checkout.
964
+ *
965
+ * `existsFn` is injectable so this remains deterministically testable
966
+ * without touching the real filesystem; defaults to `fs.existsSync`.
967
+ */
968
+ export function hasProjectFileInAncestor(startDir, existsFn = existsSync) {
969
+ let checkDir = dirname(startDir);
970
+ const { root } = parsePath(checkDir);
971
+ while (checkDir !== root) {
972
+ if (PROJECT_FILES.some((f) => existsFn(join(checkDir, f)))) {
973
+ return true;
974
+ }
975
+ // Stop at git repository boundary — ancestors above the repo root
976
+ // may contain unrelated project files. Check AFTER project-file scan
977
+ // so a repo root containing both .git and a marker is still recognized.
978
+ if (existsFn(join(checkDir, ".git")))
979
+ return false;
980
+ checkDir = dirname(checkDir);
981
+ }
982
+ return false;
983
+ }
984
+ /**
985
+ * Check whether a project's `.gsd/` directory contains the bootstrap artifacts
986
+ * (`PREFERENCES.md` or `milestones/`) that indicate a completed init run.
987
+ *
988
+ * A zombie `.gsd/` state — symlink exists but neither artifact is present —
989
+ * must be treated as "needs init wizard". The previous guard checked only
990
+ * `existsSync(gsdRoot(basePath))`, which accepted zombie states and skipped
991
+ * the wizard (#2942).
992
+ *
993
+ * `existsFn` is injectable so tests can run deterministically; defaults to
994
+ * `fs.existsSync`.
995
+ */
996
+ export function hasGsdBootstrapArtifacts(gsdPath, existsFn = existsSync) {
997
+ return (existsFn(gsdPath) &&
998
+ (existsFn(join(gsdPath, "PREFERENCES.md")) ||
999
+ existsFn(join(gsdPath, "preferences.md")) ||
1000
+ existsFn(join(gsdPath, "milestones"))));
1001
+ }
954
1002
  export function scanProjectFiles(basePath) {
955
1003
  const files = [];
956
1004
  const queue = [{ path: basePath, depth: 0 }];
@@ -2,9 +2,10 @@
2
2
  import { resolveMilestoneFile } from "./paths.js";
3
3
  import { findMilestoneIds } from "./guided-flow.js";
4
4
  import { parseUnitId } from "./unit-id.js";
5
- import { isDbAvailable, getMilestoneSlices } from "./gsd-db.js";
5
+ import { isDbAvailable, getMilestoneSlices, getMilestone } from "./gsd-db.js";
6
6
  import { parseRoadmap } from "./parsers-legacy.js";
7
7
  import { isClosedStatus } from "./status-guards.js";
8
+ import { classifyMilestoneSummaryContent } from "./milestone-summary-classifier.js";
8
9
  import { readFileSync } from "node:fs";
9
10
  const SLICE_DISPATCH_TYPES = new Set([
10
11
  "research-slice",
@@ -39,8 +40,33 @@ export function getPriorSliceCompletionBlocker(base, _mainBranch, unitType, unit
39
40
  for (const mid of milestoneIds) {
40
41
  if (resolveMilestoneFile(base, mid, "PARKED"))
41
42
  continue;
42
- if (resolveMilestoneFile(base, mid, "SUMMARY"))
43
- continue;
43
+ // DB/SUMMARY completion check (#4663 sibling to #4658).
44
+ // Prior behavior treated any SUMMARY file on disk as proof of milestone
45
+ // completion, which is wrong when the SUMMARY is a failure-path report
46
+ // (verification FAILED, blocker placeholder, etc.). Resolve as follows:
47
+ // 1. When DB is available and status is closed → skip (authoritative).
48
+ // 2. When SUMMARY exists but looks like a failure/blocker report →
49
+ // do not short-circuit; fall through to the slice-level check so
50
+ // the guard can still block dependents of an active milestone.
51
+ // 3. Otherwise (SUMMARY without failure markers) → skip. Preserves
52
+ // the #1716 contract where a completed milestone with unchecked
53
+ // remediation slices is still treated as done.
54
+ const summaryPath = resolveMilestoneFile(base, mid, "SUMMARY");
55
+ if (isDbAvailable()) {
56
+ const milestoneRow = getMilestone(mid);
57
+ if (milestoneRow && isClosedStatus(milestoneRow.status))
58
+ continue;
59
+ }
60
+ if (summaryPath) {
61
+ let summaryContent = null;
62
+ try {
63
+ summaryContent = readFileSync(summaryPath, "utf-8");
64
+ }
65
+ catch { /* ignore */ }
66
+ if (!summaryContent || classifyMilestoneSummaryContent(summaryContent) !== "failure") {
67
+ continue;
68
+ }
69
+ }
44
70
  let slices = null;
45
71
  if (isDbAvailable()) {
46
72
  const rows = getMilestoneSlices(mid);
@@ -159,7 +159,7 @@ Setting `prefer_skills: []` does **not** disable skill discovery — it just mea
159
159
 
160
160
  - `phases`: fine-grained control over which phases run. Usually set by `token_profile`, but can be overridden. Keys:
161
161
  - `skip_research`: boolean — skip milestone-level research. Default: `false`.
162
- - `reassess_after_slice`: boolean — run roadmap reassessment after each completed slice. Default: `true`.
162
+ - `reassess_after_slice`: boolean — run a dedicated roadmap-reassessment unit after each completed slice. Default: `false` (per ADR-003 §4). The plan-slice agent for the next slice performs JIT reassessment via a prompt preamble at zero additional token cost; a dedicated reassess session is opt-in. Set to `true` (e.g. via the `burn-max` profile) if you want the explicit session.
163
163
  - `skip_reassess`: boolean — force-disable roadmap reassessment even if `reassess_after_slice` is enabled. Default: `false`.
164
164
  - `skip_slice_research`: boolean — skip per-slice research. Default: `false`.
165
165
 
@@ -2,7 +2,7 @@ import { existsSync, readdirSync, realpathSync, rmSync, statSync } from "node:fs
2
2
  import { join, sep } from "node:path";
3
3
  import { loadFile } from "./files.js";
4
4
  import { parseRoadmap as parseLegacyRoadmap } from "./parsers-legacy.js";
5
- import { isDbAvailable, getMilestoneSlices } from "./gsd-db.js";
5
+ import { isDbAvailable, getMilestone } from "./gsd-db.js";
6
6
  import { resolveMilestoneFile } from "./paths.js";
7
7
  import { deriveState, isMilestoneComplete } from "./state.js";
8
8
  import { listWorktrees, resolveGitDir, worktreesDir } from "./worktree-manager.js";
@@ -48,6 +48,21 @@ function isSameOrNestedPath(candidate, container) {
48
48
  return normalizedCandidate === normalizedContainer ||
49
49
  normalizedCandidate.startsWith(`${normalizedContainer}/`);
50
50
  }
51
+ async function isCompletedMilestoneTerminal(basePath, milestoneId) {
52
+ const summaryPath = resolveMilestoneFile(basePath, milestoneId, "SUMMARY");
53
+ if (!summaryPath)
54
+ return false;
55
+ if (isDbAvailable()) {
56
+ const milestone = getMilestone(milestoneId);
57
+ return !!milestone && milestone.status === "complete";
58
+ }
59
+ const roadmapPath = resolveMilestoneFile(basePath, milestoneId, "ROADMAP");
60
+ const roadmapContent = roadmapPath ? await loadFile(roadmapPath) : null;
61
+ if (!roadmapContent)
62
+ return false;
63
+ const roadmap = parseLegacyRoadmap(roadmapContent);
64
+ return isMilestoneComplete(roadmap);
65
+ }
51
66
  export async function checkGitHealth(basePath, issues, fixesApplied, shouldFix, isolationMode = "none") {
52
67
  // Degrade gracefully if not a git repo
53
68
  if (!nativeIsRepo(basePath)) {
@@ -67,23 +82,9 @@ export async function checkGitHealth(basePath, issues, fixesApplied, shouldFix,
67
82
  // Extract milestone ID from branch name "milestone/M001" → "M001"
68
83
  const milestoneId = wt.branch.replace(/^milestone\//, "");
69
84
  const milestoneEntry = state.registry.find(m => m.id === milestoneId);
70
- // Check if milestone is complete via roadmap
71
- let isComplete = false;
72
- if (milestoneEntry) {
73
- if (isDbAvailable()) {
74
- const dbSlices = getMilestoneSlices(milestoneId);
75
- isComplete = dbSlices.length > 0 && dbSlices.every(s => s.status === "complete");
76
- }
77
- else {
78
- const roadmapPath = resolveMilestoneFile(basePath, milestoneId, "ROADMAP");
79
- const roadmapContent = roadmapPath ? await loadFile(roadmapPath) : null;
80
- if (roadmapContent) {
81
- const roadmap = parseLegacyRoadmap(roadmapContent);
82
- isComplete = isMilestoneComplete(roadmap);
83
- }
84
- }
85
- // When DB unavailable and no roadmap, isComplete stays false
86
- }
85
+ const isComplete = milestoneEntry
86
+ ? await isCompletedMilestoneTerminal(basePath, milestoneId)
87
+ : false;
87
88
  if (isComplete) {
88
89
  issues.push({
89
90
  severity: "warning",
@@ -136,17 +137,10 @@ export async function checkGitHealth(basePath, issues, fixesApplied, shouldFix,
136
137
  const milestoneId = branch.replace(/^milestone\//, "");
137
138
  const roadmapPath = resolveMilestoneFile(basePath, milestoneId, "ROADMAP");
138
139
  let branchMilestoneComplete = false;
139
- if (isDbAvailable()) {
140
- const dbSlices = getMilestoneSlices(milestoneId);
141
- branchMilestoneComplete = dbSlices.length > 0 && dbSlices.every(s => s.status === "complete");
142
- }
143
- else {
144
- const roadmapContent = roadmapPath ? await loadFile(roadmapPath) : null;
145
- if (!roadmapContent)
146
- continue;
147
- const roadmap = parseLegacyRoadmap(roadmapContent);
148
- branchMilestoneComplete = isMilestoneComplete(roadmap);
149
- }
140
+ const roadmapContent = roadmapPath ? await loadFile(roadmapPath) : null;
141
+ if (!roadmapContent)
142
+ continue;
143
+ branchMilestoneComplete = await isCompletedMilestoneTerminal(basePath, milestoneId);
150
144
  if (branchMilestoneComplete) {
151
145
  issues.push({
152
146
  severity: "info",
@@ -10,8 +10,8 @@
10
10
  * - Remote questions channel if configured (Slack/Discord/Telegram token)
11
11
  * - Optional search/tool integrations (Brave, Tavily, Jina, Context7)
12
12
  */
13
- import { existsSync } from "node:fs";
14
- import { join } from "node:path";
13
+ import { existsSync, readFileSync } from "node:fs";
14
+ import { delimiter, join } from "node:path";
15
15
  import { AuthStorage } from "@gsd/pi-coding-agent";
16
16
  import { getEnvApiKey } from "@gsd/pi-ai";
17
17
  import { loadEffectiveGSDPreferences } from "./preferences.js";
@@ -47,7 +47,8 @@ function modelToProviderId(model) {
47
47
  return null;
48
48
  // Explicit provider prefix (e.g. "openrouter/deepseek-r1")
49
49
  if (model.includes("/")) {
50
- const prefix = model.split("/")[0].toLowerCase();
50
+ const rawPrefix = model.split("/")[0];
51
+ const prefix = rawPrefix.toLowerCase();
51
52
  // Map known prefixes to registry IDs
52
53
  const prefixMap = {
53
54
  "anthropic-vertex": "anthropic-vertex",
@@ -62,6 +63,7 @@ function modelToProviderId(model) {
62
63
  };
63
64
  if (prefixMap[prefix])
64
65
  return prefixMap[prefix];
66
+ return rawPrefix;
65
67
  }
66
68
  const lower = model.toLowerCase();
67
69
  if (lower.startsWith("claude"))
@@ -136,8 +138,49 @@ function isCliBinaryInPath(providerId) {
136
138
  const binary = CLI_BINARY_MAP[providerId];
137
139
  if (!binary)
138
140
  return false;
139
- const pathDirs = (process.env.PATH ?? "").split(":");
140
- return pathDirs.some(dir => dir && existsSync(join(dir, binary)));
141
+ const pathDirs = (process.env.PATH ?? "").split(delimiter).filter(Boolean);
142
+ // On Windows, command shims are commonly installed as .cmd/.exe/.bat/.com.
143
+ // Scan PATHEXT candidates in addition to the bare binary name.
144
+ const executableNames = [binary];
145
+ if (process.platform === "win32") {
146
+ const rawPathExt = process.env.PATHEXT
147
+ ?.split(";")
148
+ .map(ext => ext.trim())
149
+ .filter(Boolean) ?? [];
150
+ const normalizedPathExt = rawPathExt.map(ext => ext.startsWith(".") ? ext.toLowerCase() : `.${ext.toLowerCase()}`);
151
+ const defaultExt = [".exe", ".cmd", ".bat", ".com"];
152
+ for (const ext of [...normalizedPathExt, ...defaultExt]) {
153
+ const candidate = `${binary}${ext}`;
154
+ if (!executableNames.includes(candidate))
155
+ executableNames.push(candidate);
156
+ }
157
+ }
158
+ return pathDirs.some(dir => executableNames.some(name => existsSync(join(dir, name))));
159
+ }
160
+ function modelsJsonPaths() {
161
+ const home = process.env.HOME ?? "~";
162
+ return [
163
+ join(home, ".gsd", "agent", "models.json"),
164
+ // Keep parity with custom-provider discovery during auto bootstrap.
165
+ join(home, ".pi", "agent", "models.json"),
166
+ ];
167
+ }
168
+ function hasModelsJsonApiKey(providerId) {
169
+ for (const path of modelsJsonPaths()) {
170
+ if (!existsSync(path))
171
+ continue;
172
+ try {
173
+ const parsed = JSON.parse(readFileSync(path, "utf-8"));
174
+ const apiKey = parsed.providers?.[providerId]?.apiKey;
175
+ if (typeof apiKey === "string" && apiKey.trim().length > 0) {
176
+ return true;
177
+ }
178
+ }
179
+ catch {
180
+ // Malformed models.json should not break the dashboard health check.
181
+ }
182
+ }
183
+ return false;
141
184
  }
142
185
  function resolveKey(providerId) {
143
186
  const info = PROVIDER_REGISTRY.find(p => p.id === providerId);
@@ -182,6 +225,9 @@ function resolveKey(providerId) {
182
225
  if (info?.envVar && process.env[info.envVar]) {
183
226
  return { found: true, source: "env", backedOff: false };
184
227
  }
228
+ if (hasModelsJsonApiKey(providerId)) {
229
+ return { found: true, source: "models.json", backedOff: false };
230
+ }
185
231
  return { found: false, source: "none", backedOff: false };
186
232
  }
187
233
  // ── Individual check groups ────────────────────────────────────────────────────
@@ -101,6 +101,7 @@ export function createGSDExtensionAPI(pi, sharedHandlers) {
101
101
  // ── Event emission ─────────────────────────────────────────────────
102
102
  emitBeforeModelSelect: (...args) => pi.emitBeforeModelSelect(...args),
103
103
  emitAdjustToolSet: (...args) => pi.emitAdjustToolSet(...args),
104
+ emitExtensionEvent: (...args) => pi.emitExtensionEvent(...args),
104
105
  // ── Tool / command / shortcut / flag registration ──────────────────
105
106
  registerTool: ((tool) => pi.registerTool(tool)),
106
107
  registerCommand: (...args) => pi.registerCommand(...args),
@@ -22,18 +22,35 @@ const PERMANENT_RE = /auth|unauthorized|forbidden|invalid.*key|invalid.*api|bill
22
22
  // Include provider-specific quota-window phrasing like:
23
23
  // - "You've hit your limit"
24
24
  // - "usage limit" / "quota reached"
25
- const RATE_LIMIT_RE = /rate.?limit|too many requests|429|hit your limit|usage limit|quota (?:reached|hit)|limit.*resets?/i;
25
+ // - "out of extra usage"
26
+ const RATE_LIMIT_RE = /rate.?limit|too many requests|429|hit your limit|usage limit|out of extra usage|quota (?:reached|hit)|limit.*resets?/i;
26
27
  // OpenRouter affordability-style quota errors should be treated as transient
27
28
  // so core retry logic can lower maxTokens and continue in-session.
28
29
  const AFFORDABILITY_RE = /requires more credits|can only afford|insufficient credits|not enough credits|fewer max_tokens/i;
29
- const NETWORK_RE = /network|ECONNRESET|ETIMEDOUT|ECONNREFUSED|socket hang up|fetch failed|connection.*reset|dns|unexpected eof/i;
30
- const SERVER_RE = /internal server error|500|502|503|overloaded|server_error|api_error|service.?unavailable/i;
30
+ // "Stream idle timeout" and "partial response received" are emitted by the SDK/harness
31
+ // for mid-stream disconnects. Both indicate a transient network-level interruption.
32
+ // See: https://github.com/gsd-build/gsd-2/issues/4558
33
+ const NETWORK_RE = /network|ECONNRESET|ETIMEDOUT|ECONNREFUSED|socket hang up|fetch failed|connection.*reset|dns|unexpected eof|stream idle timeout|partial response received/i;
34
+ // Context overflow errors (context window/length exceeded) should be treated as server-class
35
+ // transient errors so auto-mode can retry with reduced budget or fall back to a larger-context model.
36
+ // See: https://github.com/gsd-build/gsd-2/issues/4528
37
+ const SERVER_RE = /internal server error|500|502|503|overloaded|server_error|api_error|service.?unavailable|context (?:window|length) exceed|context window exceed/i;
31
38
  // ECONNRESET/ECONNREFUSED are in NETWORK_RE (same-model retry first).
32
39
  const CONNECTION_RE = /terminated|connection.?(?:refused|error)|other side closed|EPIPE|network.?(?:is\s+)?unavailable|stream_exhausted(?:_without_result)?/i;
33
40
  // Catch-all for V8 JSON.parse errors: all modern variants end with "in JSON at position \d+".
34
41
  // This eliminates the need to enumerate every error message variant individually.
35
42
  const STREAM_RE = /in JSON at position \d+|Unexpected end of JSON|SyntaxError.*JSON/i;
36
43
  const RESET_DELAY_RE = /reset in (\d+)s/i;
44
+ // Provider-side model entitlement rejection: the SDK accepted the model switch,
45
+ // but the provider refused at request time because the current account/plan/tier
46
+ // cannot use that model. Must match all three of: a model/deployment token,
47
+ // a negative-entitlement indicator, and an account/plan/tier/subscription token.
48
+ // Requiring all three keeps generic "account suspended" errors in `permanent`
49
+ // (no model token) while catching the phrasings providers actually use.
50
+ // See issue #4513.
51
+ const UNSUPPORTED_MODEL_MODEL_RE = /\b(?:model|deployment)\b/i;
52
+ const UNSUPPORTED_MODEL_INDICATOR_RE = /\bnot support(?:ed|s)?\b|\bunsupported\b|\bnot available\b|\bunavailable\b|\bno access\b|\bdoes(?:n['’]t| not) (?:have access|support)\b|\bnot authori[sz]ed\b/i;
53
+ const UNSUPPORTED_MODEL_SCOPE_RE = /\b(?:account|plan|tier|subscription)\b/i;
37
54
  /**
38
55
  * Classify an error message into one of the ErrorClass kinds.
39
56
  *
@@ -49,6 +66,17 @@ const RESET_DELAY_RE = /reset in (\d+)s/i;
49
66
  export function classifyError(errorMsg, retryAfterMs) {
50
67
  const isPermanent = PERMANENT_RE.test(errorMsg);
51
68
  const isRateLimit = RATE_LIMIT_RE.test(errorMsg) || AFFORDABILITY_RE.test(errorMsg);
69
+ const isUnsupportedModel = UNSUPPORTED_MODEL_MODEL_RE.test(errorMsg) &&
70
+ UNSUPPORTED_MODEL_INDICATOR_RE.test(errorMsg) &&
71
+ UNSUPPORTED_MODEL_SCOPE_RE.test(errorMsg);
72
+ // 0. Unsupported model (account/plan entitlement rejection) — checked before
73
+ // `permanent` because PERMANENT_RE also matches /account/i and would
74
+ // otherwise swallow these errors, blocking the blocklist-driven fallback.
75
+ // Rate limit still wins when both patterns appear (a throttled account is
76
+ // not an entitlement failure).
77
+ if (isUnsupportedModel && !isRateLimit) {
78
+ return { kind: "unsupported-model" };
79
+ }
52
80
  // 1. Permanent — but rate limit takes precedence
53
81
  if (isPermanent && !isRateLimit) {
54
82
  return { kind: "permanent" };