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
@@ -13,6 +13,7 @@ import assert from 'node:assert/strict';
13
13
  import { readFileSync } from 'node:fs';
14
14
  import { fileURLToPath } from 'node:url';
15
15
  import { dirname, join } from 'node:path';
16
+ import { extractSourceRegion } from "./test-helpers.ts";
16
17
 
17
18
  const __filename = fileURLToPath(import.meta.url);
18
19
  const __dirname = dirname(__filename);
@@ -69,11 +70,21 @@ describe('register-extension _gsdEpipeGuard (#3696)', () => {
69
70
 
70
71
  describe('register-hooks session_before_compact (#3696)', () => {
71
72
  test('session_before_compact only checks isAutoActive', () => {
72
- // Extract the session_before_compact handler
73
- const compactIdx = registerHooksSrc.indexOf('session_before_compact');
73
+ // Anchor on the full registration token rather than the bare event name —
74
+ // prevents matching unrelated substring occurrences.
75
+ const compactIdx = registerHooksSrc.indexOf('pi.on("session_before_compact"');
74
76
  assert.ok(compactIdx > -1, 'session_before_compact hook should exist');
75
- // The first check in the handler should be isAutoActive(), not isAutoPaused()
76
- const afterCompact = registerHooksSrc.slice(compactIdx, compactIdx + 300);
77
+ // The first check in the handler should be isAutoActive(), not isAutoPaused().
78
+ // Bound the region to this single handler — register-hooks.ts contains
79
+ // multiple pi.on("session_before_compact") handlers and a later handler
80
+ // legitimately references isAutoPaused.
81
+ const afterCompact = extractSourceRegion(
82
+ registerHooksSrc,
83
+ 'pi.on("session_before_compact"',
84
+ 'pi.on("',
85
+ // NB: endAnchor search starts AFTER the startAnchor, so the next
86
+ // pi.on("... matches the subsequent handler rather than this one.
87
+ );
77
88
  assert.match(afterCompact, /isAutoActive\(\)/,
78
89
  'session_before_compact should check isAutoActive()');
79
90
  // Should NOT block compaction when paused
@@ -13,7 +13,12 @@ import { fileURLToPath } from "node:url";
13
13
  import { classifyError, isTransient, isTransientNetworkError } from "../error-classifier.ts";
14
14
  import { pauseAutoForProviderError } from "../provider-error-pause.ts";
15
15
  import { resumeAutoAfterProviderDelay } from "../bootstrap/provider-error-resume.ts";
16
+ import { MAX_TRANSIENT_AUTO_RESUMES } from "../bootstrap/agent-end-recovery.ts";
16
17
  import { getNextFallbackModel } from "../preferences.ts";
18
+ // Zero-import module — imported by path rather than through the package
19
+ // barrel to avoid pulling the full AgentSession / @gsd/pi-ai dep graph into
20
+ // this unit test (see #4837).
21
+ import { RETRYABLE_ERROR_RE } from "../../../../../packages/pi-coding-agent/src/core/retryable-error-regex.ts";
17
22
 
18
23
  const __dirname = dirname(fileURLToPath(import.meta.url));
19
24
 
@@ -45,6 +50,13 @@ test("classifyError treats usage-limit phrasing as transient rate-limit (#4373)"
45
50
  assert.equal(result.kind, "rate-limit");
46
51
  });
47
52
 
53
+ test("classifyError treats extra-usage phrasing as transient rate-limit (#4397)", () => {
54
+ const result = classifyError("You are out of extra usage. Please wait before retrying.");
55
+ assert.ok(isTransient(result));
56
+ assert.equal(result.kind, "rate-limit");
57
+ assert.ok("retryAfterMs" in result && result.retryAfterMs === 60_000);
58
+ });
59
+
48
60
  test("classifyError treats OpenRouter affordability errors as transient rate-limit class", () => {
49
61
  const result = classifyError(
50
62
  "402 This request requires more credits, or fewer max_tokens. You requested up to 32000 tokens, but can only afford 329.",
@@ -147,6 +159,49 @@ test("classifyError: rate limit takes precedence over auth keywords", () => {
147
159
  assert.ok(isTransient(result));
148
160
  });
149
161
 
162
+ // ── unsupported-model: account/plan entitlement rejection (#4513) ──────────
163
+
164
+ test("classifyError: Codex ChatGPT-account entitlement rejection is unsupported-model", () => {
165
+ const result = classifyError(
166
+ "The 'gpt-5.1-codex-max' model is not supported when using Codex with a ChatGPT account.",
167
+ );
168
+ assert.equal(result.kind, "unsupported-model");
169
+ assert.ok(!isTransient(result));
170
+ });
171
+
172
+ test("classifyError: 'model not available for this plan' is unsupported-model", () => {
173
+ const result = classifyError("This model is not available for your current plan.");
174
+ assert.equal(result.kind, "unsupported-model");
175
+ });
176
+
177
+ test("classifyError: 'account does not have access to model' is unsupported-model", () => {
178
+ const result = classifyError("Your account does not have access to the gpt-5 model.");
179
+ assert.equal(result.kind, "unsupported-model");
180
+ });
181
+
182
+ test("classifyError: 'tier does not support deployment' is unsupported-model", () => {
183
+ const result = classifyError("The free tier does not support this deployment.");
184
+ assert.equal(result.kind, "unsupported-model");
185
+ });
186
+
187
+ test("classifyError: 'account suspended' stays permanent (not unsupported-model)", () => {
188
+ const result = classifyError("Your account has been suspended. Contact support.");
189
+ assert.equal(result.kind, "permanent");
190
+ });
191
+
192
+ test("classifyError: 'invalid account' stays permanent", () => {
193
+ const result = classifyError("invalid account credentials");
194
+ assert.equal(result.kind, "permanent");
195
+ });
196
+
197
+ test("classifyError: rate limit on unsupported-model phrasing stays rate-limit", () => {
198
+ // A throttled account is not an entitlement failure.
199
+ const result = classifyError(
200
+ "429 rate limit — model not supported when using your account right now",
201
+ );
202
+ assert.equal(result.kind, "rate-limit");
203
+ });
204
+
150
205
  // ── STREAM_RE: V8 JSON parse error variants (#2916) ────────────────────────
151
206
 
152
207
  test("classifyError: 'Expected comma/brace after property value in JSON' is transient stream", () => {
@@ -354,6 +409,7 @@ test("resumeAutoAfterProviderDelay restarts paused auto-mode from the recorded b
354
409
  stepMode: true,
355
410
  basePath: "/tmp/project",
356
411
  }),
412
+ resetTransientRetryState: () => {},
357
413
  startAuto: async (_ctx, _pi, base, verboseMode, options) => {
358
414
  startCalls.push({ base, verboseMode, step: options?.step });
359
415
  },
@@ -378,6 +434,7 @@ test("resumeAutoAfterProviderDelay does not double-start when auto-mode is alrea
378
434
  stepMode: false,
379
435
  basePath: "/tmp/project",
380
436
  }),
437
+ resetTransientRetryState: () => {},
381
438
  startAuto: async () => {
382
439
  startCalls += 1;
383
440
  },
@@ -408,6 +465,7 @@ test("resumeAutoAfterProviderDelay leaves auto paused when no base path is avail
408
465
  stepMode: false,
409
466
  basePath: "",
410
467
  }),
468
+ resetTransientRetryState: () => {},
411
469
  startAuto: async () => {
412
470
  startCalls += 1;
413
471
  },
@@ -424,6 +482,35 @@ test("resumeAutoAfterProviderDelay leaves auto paused when no base path is avail
424
482
  ]);
425
483
  });
426
484
 
485
+ test("resumeAutoAfterProviderDelay resets provider retry state without clearing session-timeout attempts", async () => {
486
+ const calls: string[] = [];
487
+
488
+ const result = await resumeAutoAfterProviderDelay(
489
+ {} as any,
490
+ { ui: { notify() {} } } as any,
491
+ {
492
+ getSnapshot: () => ({
493
+ active: false,
494
+ paused: true,
495
+ stepMode: false,
496
+ basePath: "/tmp/project",
497
+ }),
498
+ resetTransientRetryState: () => {
499
+ calls.push("reset-transient");
500
+ },
501
+ startAuto: async () => {
502
+ calls.push("start-auto");
503
+ },
504
+ },
505
+ );
506
+
507
+ assert.equal(result, "resumed");
508
+ assert.deepEqual(calls, [
509
+ "reset-transient",
510
+ "start-auto",
511
+ ]);
512
+ });
513
+
427
514
  // ── Escalating backoff for transient errors (#1166) ─────────────────────────
428
515
 
429
516
  test("agent-end-recovery.ts tracks consecutive transient errors for escalating backoff", () => {
@@ -517,46 +604,29 @@ test("resetTransientRetryState is exported from agent-end-recovery.ts", () => {
517
604
  );
518
605
  });
519
606
 
520
- test("provider-error-resume.ts calls resetTransientRetryState before startAuto", () => {
521
- const src = readFileSync(join(__dirname, "..", "bootstrap", "provider-error-resume.ts"), "utf-8");
522
- assert.ok(
523
- src.includes("resetTransientRetryState"),
524
- "provider-error-resume.ts must import and call resetTransientRetryState",
525
- );
526
- // Ensure reset is called BEFORE startAuto — order matters
527
- const resetIdx = src.indexOf("resetTransientRetryState()");
528
- const startIdx = src.indexOf("await deps.startAuto(");
529
- assert.ok(
530
- resetIdx !== -1 && startIdx !== -1 && resetIdx < startIdx,
531
- "resetTransientRetryState() must be called before deps.startAuto()",
532
- );
533
- // Session timeout counter must also be reset before startAuto
534
- assert.ok(
535
- src.includes("resetSessionTimeoutState"),
536
- "provider-error-resume.ts must import and call resetSessionTimeoutState",
537
- );
538
- const sessionResetIdx = src.indexOf("resetSessionTimeoutState()");
539
- assert.ok(
540
- sessionResetIdx !== -1 && startIdx !== -1 && sessionResetIdx < startIdx,
541
- "resetSessionTimeoutState() must be called before deps.startAuto()",
542
- );
543
- });
544
-
545
607
  // ── Fix 2: Session creation timeout treated as transient in phases.ts ───────
546
608
 
547
609
  test("phases.ts handles timeout session-creation failures with pause instead of stopAuto", () => {
548
610
  const src = readFileSync(join(__dirname, "..", "auto", "phases.ts"), "utf-8");
549
611
 
550
- // The cancelled + isTransient + category=timeout path must pause, not hard-stop
612
+ // The cancelled + isTransient session-start path must pause, not hard-stop
551
613
  assert.ok(
552
- src.includes('category === "timeout"'),
553
- "phases.ts must check category === 'timeout' on transient cancelled unitResults",
614
+ src.includes('errorCategory === "timeout"'),
615
+ "phases.ts must check errorCategory === 'timeout' on transient cancelled unitResults",
616
+ );
617
+ assert.ok(
618
+ src.includes('errorCategory === "session-failed"'),
619
+ "phases.ts must also check errorCategory === 'session-failed' on transient cancelled unitResults",
554
620
  );
555
621
  // Must call pauseAuto or pauseAutoForProviderError (not stopAuto) for timeout cancellations
556
622
  assert.ok(
557
- /category === "timeout"[\s\S]{0,1200}pauseAuto/.test(src),
623
+ /errorCategory === "timeout"[\s\S]{0,1800}pauseAuto/.test(src),
558
624
  "phases.ts must call pauseAuto for session-timeout failures (not stopAuto or continue)",
559
625
  );
626
+ assert.ok(
627
+ /errorCategory === "session-failed"[\s\S]{0,700}pauseAuto/.test(src),
628
+ "phases.ts must call pauseAuto for transient session-start failures (not stopAuto or continue)",
629
+ );
560
630
  // Must NOT use action: "continue" for transient cancellations (causes infinite loops)
561
631
  assert.ok(
562
632
  !/isTransient[\s\S]{0,500}action:\s*"continue"/.test(src),
@@ -612,33 +682,75 @@ test("phases.ts resets session timeout counter on successful unit completion", (
612
682
  // ── Fix 3: MAX_TRANSIENT_AUTO_RESUMES raised to 8 ───────────────────────────
613
683
 
614
684
  test("MAX_TRANSIENT_AUTO_RESUMES is at least 8 for sustained overload resilience", () => {
615
- const src = readFileSync(join(__dirname, "..", "bootstrap", "agent-end-recovery.ts"), "utf-8");
616
- const match = src.match(/MAX_TRANSIENT_AUTO_RESUMES\s*=\s*(\d+)/);
617
- assert.ok(match, "MAX_TRANSIENT_AUTO_RESUMES must be defined");
618
- const value = Number(match![1]);
685
+ // Import the real constant rather than regex-scraping the source literal —
686
+ // this way the assertion cannot silently drift if the symbol is renamed or
687
+ // the value is moved. See #4837.
619
688
  assert.ok(
620
- value >= 8,
621
- `MAX_TRANSIENT_AUTO_RESUMES must be >= 8 for sustained overload resilience, got ${value}`,
689
+ MAX_TRANSIENT_AUTO_RESUMES >= 8,
690
+ `MAX_TRANSIENT_AUTO_RESUMES must be >= 8 for sustained overload resilience, got ${MAX_TRANSIENT_AUTO_RESUMES}`,
622
691
  );
623
692
  });
624
693
 
694
+ // ── Stream idle timeout / partial response (#4558) ──────────────────────────
695
+
696
+ test("classifyError: 'Stream idle timeout - partial response received' is transient network", () => {
697
+ const result = classifyError("API Error: Stream idle timeout - partial response received");
698
+ assert.ok(isTransient(result), "stream idle timeout must be transient");
699
+ assert.equal(result.kind, "network");
700
+ assert.ok("retryAfterMs" in result && result.retryAfterMs > 0);
701
+ });
702
+
703
+ test("classifyError: 'stream idle timeout' (lowercase) is transient network", () => {
704
+ const result = classifyError("stream idle timeout");
705
+ assert.ok(isTransient(result), "lowercase stream idle timeout must be transient");
706
+ assert.equal(result.kind, "network");
707
+ });
708
+
709
+ test("classifyError: 'partial response received' alone is transient network", () => {
710
+ const result = classifyError("partial response received");
711
+ assert.ok(isTransient(result), "partial response received must be transient");
712
+ assert.equal(result.kind, "network");
713
+ });
714
+
715
+ // ── Context overflow / context window exceeded (#4528) ───────────────────────
716
+
717
+ test("classifyError: MiniMax context window error is transient server", () => {
718
+ const result = classifyError("400 invalid params, context window exceeds limit (2013)");
719
+ assert.ok(isTransient(result), "context window exceeded must be transient");
720
+ assert.equal(result.kind, "server");
721
+ });
722
+
723
+ test("classifyError: 'context length exceeded' is transient server", () => {
724
+ const result = classifyError("context length exceeded: max 128000 tokens");
725
+ assert.ok(isTransient(result), "context length exceeded must be transient");
726
+ assert.equal(result.kind, "server");
727
+ });
728
+
729
+ test("classifyError: 'context window' with 'exceed' is transient server", () => {
730
+ const result = classifyError("context window exceeded for this model");
731
+ assert.ok(isTransient(result), "context window exceeded must be transient");
732
+ assert.equal(result.kind, "server");
733
+ });
734
+
625
735
  // ── agent-session retryable regex handles server_error (#1166) ──────────────
626
736
 
627
737
  test("agent-session retryable error regex matches server_error (underscore)", () => {
628
- // This regex is extracted from _isRetryableError in agent-session.ts.
629
- // It must match both "server error" (space) and "server_error" (underscore)
630
- // to properly classify Codex streaming errors as retryable.
631
- // "temporarily backed off" intentionally excluded — see #3429
632
- const retryableRegex = /overloaded|rate.?limit|too many requests|429|500|502|503|504|service.?unavailable|server.?error|internal.?error|connection.?error|connection.?refused|other side closed|fetch failed|upstream.?connect|reset before headers|terminated|retry delay|network.?(?:is\s+)?unavailable|credentials.*expired|extra usage is required/i;
738
+ // Import the real regex from the retry-handler so this test can never
739
+ // silently drift from runtime behaviour. The regex must match both
740
+ // "server error" (space) and "server_error" (underscore) to properly
741
+ // classify Codex streaming errors as retryable.
742
+ // "temporarily backed off" is intentionally excluded see #3429 / #4837.
633
743
 
634
744
  // server_error (with underscore — Codex streaming error format)
635
- assert.ok(retryableRegex.test("Codex server_error: An error occurred"));
745
+ assert.ok(RETRYABLE_ERROR_RE.test("Codex server_error: An error occurred"));
636
746
  // server error (with space — traditional HTTP error format)
637
- assert.ok(retryableRegex.test("server error occurred"));
747
+ assert.ok(RETRYABLE_ERROR_RE.test("server error occurred"));
638
748
  // internal_error (with underscore)
639
- assert.ok(retryableRegex.test("internal_error: something went wrong"));
749
+ assert.ok(RETRYABLE_ERROR_RE.test("internal_error: something went wrong"));
640
750
  // internal error (with space)
641
- assert.ok(retryableRegex.test("internal error"));
751
+ assert.ok(RETRYABLE_ERROR_RE.test("internal error"));
642
752
  // non-retryable errors must not match
643
- assert.ok(!retryableRegex.test("model not found"));
753
+ assert.ok(!RETRYABLE_ERROR_RE.test("model not found"));
754
+ // "temporarily backed off" must NOT be matched (intentional exclusion #3429)
755
+ assert.ok(!RETRYABLE_ERROR_RE.test("temporarily backed off"));
644
756
  });
@@ -0,0 +1,213 @@
1
+ /**
2
+ * Tests that /gsd queue is blocked when auto-mode is active.
3
+ *
4
+ * Relates to #4704: /gsd queue writes .gsd/PROJECT.md + QUEUE-ORDER.json
5
+ * directly into the project-root worktree, racing with auto-mode's
6
+ * pre-merge dirty-tree check and causing __dirty_working_tree__ failures.
7
+ *
8
+ * The fix adds an isAutoActive() guard in handleWorkflowCommand before
9
+ * delegating to showQueue, mirroring the existing /gsd quick guard (#2417).
10
+ */
11
+
12
+ import { describe, it } from "node:test";
13
+ import assert from "node:assert/strict";
14
+ import { readFileSync } from "node:fs";
15
+ import { join } from "node:path";
16
+
17
+ // ─── Structural test: verify the guard exists in source ──────────────────────
18
+
19
+ describe("/gsd queue auto-mode guard (#4704)", () => {
20
+ it("handleWorkflowCommand checks isAutoActive() before calling showQueue", () => {
21
+ const src = readFileSync(
22
+ join(
23
+ import.meta.dirname,
24
+ "..",
25
+ "commands",
26
+ "handlers",
27
+ "workflow.ts",
28
+ ),
29
+ "utf-8",
30
+ );
31
+
32
+ // Find the queue command block
33
+ const queueBlockMatch = src.match(
34
+ /if\s*\(\s*trimmed\s*===\s*"queue"\s*\)\s*\{([\s\S]*?)\n \}/,
35
+ );
36
+ assert.ok(queueBlockMatch, "queue command block exists in handleWorkflowCommand");
37
+
38
+ const queueBlock = queueBlockMatch[1];
39
+
40
+ // Verify auto-mode guard comes BEFORE showQueue call. Accepts either the
41
+ // inline isAutoActive() check (Tier 1) or the shared requireNotAutoActive()
42
+ // helper (Tier 2 / #4712).
43
+ const guardIndex = Math.max(
44
+ queueBlock.indexOf("isAutoActive()"),
45
+ queueBlock.indexOf("requireNotAutoActive("),
46
+ );
47
+ const showQueueIndex = queueBlock.indexOf("showQueue(");
48
+
49
+ assert.ok(guardIndex !== -1, "auto-mode guard exists in queue command block");
50
+ assert.ok(showQueueIndex !== -1, "showQueue() call exists in queue command block");
51
+ assert.ok(
52
+ guardIndex < showQueueIndex,
53
+ "auto-mode guard appears before showQueue() call",
54
+ );
55
+ });
56
+
57
+ it("guard shows error message mentioning /gsd stop", () => {
58
+ const src = readFileSync(
59
+ join(
60
+ import.meta.dirname,
61
+ "..",
62
+ "commands",
63
+ "handlers",
64
+ "workflow.ts",
65
+ ),
66
+ "utf-8",
67
+ );
68
+
69
+ assert.ok(
70
+ src.includes("cannot run while auto-mode is active"),
71
+ "error message explains that the command cannot run during auto-mode",
72
+ );
73
+ assert.ok(
74
+ src.includes("/gsd stop"),
75
+ "error message mentions /gsd stop as the resolution",
76
+ );
77
+ });
78
+
79
+ it("guard returns true (handled) to prevent falling through", () => {
80
+ const src = readFileSync(
81
+ join(
82
+ import.meta.dirname,
83
+ "..",
84
+ "commands",
85
+ "handlers",
86
+ "workflow.ts",
87
+ ),
88
+ "utf-8",
89
+ );
90
+
91
+ const queueBlockMatch = src.match(
92
+ /if\s*\(\s*trimmed\s*===\s*"queue"\s*\)\s*\{([\s\S]*?)\n \}/,
93
+ );
94
+ assert.ok(queueBlockMatch);
95
+ const queueBlock = queueBlockMatch[1];
96
+
97
+ // The guard block should have its own return true before showQueue
98
+ const guardBlock = queueBlock.slice(0, queueBlock.indexOf("showQueue("));
99
+ assert.ok(
100
+ guardBlock.includes("return true"),
101
+ "guard block returns true before showQueue is reached",
102
+ );
103
+ });
104
+ });
105
+
106
+ // ─── .gsd/audit/ runtime classification regression ──────────────────────────
107
+
108
+ describe(".gsd/audit/ runtime classification (#4704)", () => {
109
+ it("GSD_RUNTIME_PATTERNS in gitignore.ts includes .gsd/audit/", () => {
110
+ const src = readFileSync(
111
+ join(import.meta.dirname, "..", "gitignore.ts"),
112
+ "utf-8",
113
+ );
114
+ assert.ok(
115
+ src.includes('".gsd/audit/"'),
116
+ ".gsd/audit/ listed in GSD_RUNTIME_PATTERNS",
117
+ );
118
+ });
119
+
120
+ it("RUNTIME_EXCLUSION_PATHS in git-service.ts includes .gsd/audit/", () => {
121
+ const src = readFileSync(
122
+ join(import.meta.dirname, "..", "git-service.ts"),
123
+ "utf-8",
124
+ );
125
+ assert.ok(
126
+ src.includes('".gsd/audit/"'),
127
+ ".gsd/audit/ listed in RUNTIME_EXCLUSION_PATHS",
128
+ );
129
+ });
130
+
131
+ it("SKIP_PATHS in worktree-manager.ts includes .gsd/audit/", () => {
132
+ const src = readFileSync(
133
+ join(import.meta.dirname, "..", "worktree-manager.ts"),
134
+ "utf-8",
135
+ );
136
+ assert.ok(
137
+ src.includes('".gsd/audit/"'),
138
+ ".gsd/audit/ listed in SKIP_PATHS",
139
+ );
140
+ });
141
+ });
142
+
143
+ // ─── Windows gsd.db close+reopen around pre-merge stash ─────────────────────
144
+
145
+ describe("Windows pre-merge DB release (#4704)", () => {
146
+ it("mergeMilestoneToMain closes gsd.db on win32 before git stash", () => {
147
+ const src = readFileSync(
148
+ join(import.meta.dirname, "..", "auto-worktree.ts"),
149
+ "utf-8",
150
+ );
151
+
152
+ // Locate the stash push line and ensure a win32-gated closeDatabase()
153
+ // call precedes it in the same function scope.
154
+ const stashIndex = src.indexOf('"stash", "push", "--include-untracked"');
155
+ assert.ok(stashIndex !== -1, "pre-merge stash push exists");
156
+
157
+ const beforeStash = src.slice(0, stashIndex);
158
+ const win32Index = beforeStash.lastIndexOf('process.platform === "win32"');
159
+ const closeIndex = beforeStash.lastIndexOf("closeDatabase()");
160
+
161
+ assert.ok(win32Index !== -1, "win32 platform guard appears before stash");
162
+ assert.ok(closeIndex !== -1, "closeDatabase() invoked before stash");
163
+ assert.ok(
164
+ win32Index < closeIndex && closeIndex < stashIndex,
165
+ "platform guard wraps the closeDatabase() call before the stash",
166
+ );
167
+ });
168
+
169
+ it("openDatabase is called after the stash to reopen the connection", () => {
170
+ const src = readFileSync(
171
+ join(import.meta.dirname, "..", "auto-worktree.ts"),
172
+ "utf-8",
173
+ );
174
+ const stashIndex = src.indexOf('"stash", "push", "--include-untracked"');
175
+ const afterStash = src.slice(stashIndex);
176
+ assert.ok(
177
+ afterStash.includes("openDatabase("),
178
+ "openDatabase() called after the pre-merge stash",
179
+ );
180
+ });
181
+
182
+ it("pre-merge stash targets entries by marker instead of refs/stash or stash@{0}", () => {
183
+ const src = readFileSync(
184
+ join(import.meta.dirname, "..", "auto-worktree.ts"),
185
+ "utf-8",
186
+ );
187
+
188
+ assert.ok(src.includes("stashMarker"), "stash marker is tracked");
189
+ assert.ok(
190
+ src.includes('"stash", "list", "--format=%gd%x00%s"'),
191
+ "stash lookup reads ref and message together",
192
+ );
193
+ assert.ok(!src.includes('"rev-parse", "refs/stash"'), "refs/stash is not used for identity");
194
+ assert.ok(!src.includes('["stash", "pop"]'), "stash pop is never unqualified");
195
+ assert.ok(!src.includes('["stash", "drop"]'), "stash drop is never unqualified");
196
+ });
197
+
198
+ it("stash drop after pop failure requires auto-resolved .gsd conflicts", () => {
199
+ const src = readFileSync(
200
+ join(import.meta.dirname, "..", "auto-worktree.ts"),
201
+ "utf-8",
202
+ );
203
+
204
+ assert.ok(
205
+ src.includes("gsdUU.length > 0 && nonGsdUU.length === 0"),
206
+ "stash drop must only run after detected .gsd conflicts were auto-resolved",
207
+ );
208
+ assert.ok(
209
+ src.includes("git stash pop failed without resolvable conflict files; leaving stash for manual recovery"),
210
+ "non-conflict stash pop failures must leave the stash for manual recovery",
211
+ );
212
+ });
213
+ });
@@ -6,6 +6,7 @@ import { tmpdir } from "node:os";
6
6
 
7
7
  import { deriveState } from "../state.js";
8
8
  import { buildExistingMilestonesContext } from "../guided-flow.js";
9
+ import { extractSourceRegion } from "./test-helpers.ts";
9
10
 
10
11
  describe('queue-draft-detection', () => {
11
12
  test('draft and context milestone detection', async () => {
@@ -68,7 +69,7 @@ describe('queue-draft-detection', () => {
68
69
 
69
70
  // both files: CONTEXT.md wins, no draft label
70
71
  const m003Idx = context.indexOf("M003:");
71
- const m003Section = context.slice(m003Idx, m003Idx + 500);
72
+ const m003Section = extractSourceRegion(context, "M003:");
72
73
  assert.ok(
73
74
  m003Section.includes("**Context:**"),
74
75
  "M003 (both files) should use 'Context:' label (CONTEXT.md wins)",
@@ -84,7 +85,7 @@ describe('queue-draft-detection', () => {
84
85
 
85
86
  // neither file: no context section
86
87
  const m004Idx = context.indexOf("M004:");
87
- const m004Section = context.slice(m004Idx, m004Idx + 500);
88
+ const m004Section = extractSourceRegion(context, "M004:");
88
89
  assert.ok(
89
90
  !m004Section.includes("**Context:**"),
90
91
  "M004 (neither file) should not have Context: label",
@@ -3,6 +3,7 @@ import assert from "node:assert/strict";
3
3
  import { readFileSync } from "node:fs";
4
4
  import { join, dirname } from "node:path";
5
5
  import { fileURLToPath } from "node:url";
6
+ import { extractSourceRegion } from "./test-helpers.ts";
6
7
 
7
8
  const __dirname = dirname(fileURLToPath(import.meta.url));
8
9
 
@@ -28,7 +29,7 @@ describe("queued-discuss-fast-path", () => {
28
29
  const fnStart = source.indexOf("async function dispatchDiscussForMilestone(");
29
30
  assert.ok(fnStart > 0, "dispatchDiscussForMilestone must exist");
30
31
  const fnEnd = source.indexOf("\nasync function ", fnStart + 1);
31
- const fnBody = fnEnd > 0 ? source.slice(fnStart, fnEnd) : source.slice(fnStart, fnStart + 2000);
32
+ const fnBody = extractSourceRegion(source, "async function dispatchDiscussForMilestone(");
32
33
  assert.ok(
33
34
  fnBody.includes("fastPathInstruction"),
34
35
  "dispatchDiscussForMilestone must compute fastPathInstruction",
@@ -61,8 +62,7 @@ describe("queued-discuss-fast-path", () => {
61
62
  const source = guidedFlowSrc();
62
63
  const fnStart = source.indexOf("async function showDiscussQueuedMilestone(");
63
64
  assert.ok(fnStart > 0, "showDiscussQueuedMilestone must exist");
64
- const fnEnd = source.indexOf("\nasync function ", fnStart + 1);
65
- const fnBody = fnEnd > 0 ? source.slice(fnStart, fnEnd) : source.slice(fnStart, fnStart + 3000);
65
+ const fnBody = extractSourceRegion(source, "async function showDiscussQueuedMilestone(", "\nasync function ");
66
66
  assert.ok(
67
67
  fnBody.includes("hasDraft"),
68
68
  "showDiscussQueuedMilestone must check hasDraft",
@@ -81,8 +81,7 @@ describe("queued-discuss-fast-path", () => {
81
81
  const source = guidedFlowSrc();
82
82
  const fnStart = source.indexOf("async function showDiscussQueuedMilestone(");
83
83
  assert.ok(fnStart > 0, "showDiscussQueuedMilestone must exist");
84
- const fnEnd = source.indexOf("\nasync function ", fnStart + 1);
85
- const fnBody = fnEnd > 0 ? source.slice(fnStart, fnEnd) : source.slice(fnStart, fnStart + 3000);
84
+ const fnBody = extractSourceRegion(source, "async function showDiscussQueuedMilestone(", "\nasync function ");
86
85
  assert.ok(
87
86
  fnBody.includes("let fastPath = hasDraft"),
88
87
  "showDiscussQueuedMilestone must set fastPath = hasDraft so draft presence auto-enables fast path",
@@ -35,15 +35,20 @@ describe("/gsd quick auto-mode guard (#2417)", () => {
35
35
 
36
36
  const quickBlock = quickBlockMatch[1];
37
37
 
38
- // Verify isAutoActive guard comes BEFORE handleQuick call
39
- const guardIndex = quickBlock.indexOf("isAutoActive()");
38
+ // Verify the shared auto-mode guard comes BEFORE handleQuick call.
39
+ // Accepts either the inline isAutoActive() check (legacy) or the shared
40
+ // requireNotAutoActive() helper (#4712).
41
+ const guardIndex = Math.max(
42
+ quickBlock.indexOf("isAutoActive()"),
43
+ quickBlock.indexOf("requireNotAutoActive("),
44
+ );
40
45
  const handleQuickIndex = quickBlock.indexOf("handleQuick(");
41
46
 
42
- assert.ok(guardIndex !== -1, "isAutoActive() guard exists in quick command block");
47
+ assert.ok(guardIndex !== -1, "auto-mode guard exists in quick command block");
43
48
  assert.ok(handleQuickIndex !== -1, "handleQuick() call exists in quick command block");
44
49
  assert.ok(
45
50
  guardIndex < handleQuickIndex,
46
- "isAutoActive() guard appears before handleQuick() call",
51
+ "auto-mode guard appears before handleQuick() call",
47
52
  );
48
53
  });
49
54
 
@@ -59,10 +64,11 @@ describe("/gsd quick auto-mode guard (#2417)", () => {
59
64
  "utf-8",
60
65
  );
61
66
 
62
- // The error message should tell the user to stop auto-mode first
67
+ // The shared helper assembles the message dynamically from the command name,
68
+ // so assert on the message fragment and the /gsd stop instruction.
63
69
  assert.ok(
64
- src.includes("/gsd quick cannot run while auto-mode is active"),
65
- "error message explains that quick cannot run during auto-mode",
70
+ src.includes("cannot run while auto-mode is active"),
71
+ "error message explains that the command cannot run during auto-mode",
66
72
  );
67
73
  assert.ok(
68
74
  src.includes("/gsd stop"),