gsd-pi 2.77.0-dev.538325aea → 2.77.0-dev.eaa4973bc

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 (874) hide show
  1. package/dist/cli-web-branch.d.ts +1 -0
  2. package/dist/cli-web-branch.js +3 -0
  3. package/dist/cli.js +59 -15
  4. package/dist/extension-discovery.d.ts +6 -0
  5. package/dist/extension-discovery.js +37 -0
  6. package/dist/extension-registry.d.ts +3 -0
  7. package/dist/extension-registry.js +1 -1
  8. package/dist/extension-sort.d.ts +18 -0
  9. package/dist/extension-sort.js +114 -0
  10. package/dist/extension-validator.d.ts +47 -0
  11. package/dist/extension-validator.js +127 -0
  12. package/dist/headless-ui.d.ts +1 -1
  13. package/dist/headless.js +4 -2
  14. package/dist/loader.js +36 -7
  15. package/dist/onboarding.js +5 -5
  16. package/dist/provider-migrations.d.ts +20 -2
  17. package/dist/provider-migrations.js +15 -2
  18. package/dist/remote-questions-config.js +1 -1
  19. package/dist/resources/extensions/async-jobs/async-bash-tool.js +1 -1
  20. package/dist/resources/extensions/aws-auth/index.js +1 -2
  21. package/dist/resources/extensions/bg-shell/bg-shell-lifecycle.js +9 -6
  22. package/dist/resources/extensions/bg-shell/process-manager.js +1 -2
  23. package/dist/resources/extensions/browser-tools/index.js +1 -0
  24. package/dist/resources/extensions/claude-code-cli/index.js +1 -1
  25. package/dist/resources/extensions/claude-code-cli/partial-builder.js +17 -106
  26. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +71 -57
  27. package/dist/resources/extensions/cmux/index.js +20 -0
  28. package/dist/resources/extensions/google-search/extension-manifest.json +5 -4
  29. package/dist/resources/extensions/google-search/index.js +2 -375
  30. package/dist/resources/extensions/gsd/abandon-detect.js +44 -0
  31. package/dist/resources/extensions/gsd/auto/resolve.js +24 -0
  32. package/dist/resources/extensions/gsd/auto/run-unit.js +10 -2
  33. package/dist/resources/extensions/gsd/auto/turn-epoch.js +95 -0
  34. package/dist/resources/extensions/gsd/auto-dispatch.js +24 -0
  35. package/dist/resources/extensions/gsd/auto-loop.js +1 -1
  36. package/dist/resources/extensions/gsd/auto-post-unit.js +31 -0
  37. package/dist/resources/extensions/gsd/auto-timeout-recovery.js +11 -5
  38. package/dist/resources/extensions/gsd/auto-unit-closeout.js +11 -2
  39. package/dist/resources/extensions/gsd/auto-worktree.js +58 -8
  40. package/dist/resources/extensions/gsd/auto.js +31 -14
  41. package/dist/resources/extensions/gsd/bootstrap/provider-error-resume.js +4 -2
  42. package/dist/resources/extensions/gsd/bootstrap/register-extension.js +11 -0
  43. package/dist/resources/extensions/gsd/bootstrap/system-context.js +11 -6
  44. package/dist/resources/extensions/gsd/commands/handlers/workflow.js +31 -4
  45. package/dist/resources/extensions/gsd/commands-cmux.js +9 -6
  46. package/dist/resources/extensions/gsd/commands-extensions.js +634 -43
  47. package/dist/resources/extensions/gsd/file-lock.js +49 -9
  48. package/dist/resources/extensions/gsd/git-service.js +1 -0
  49. package/dist/resources/extensions/gsd/gitignore.js +1 -0
  50. package/dist/resources/extensions/gsd/guided-flow-queue.js +4 -1
  51. package/dist/resources/extensions/gsd/guided-flow.js +1 -1
  52. package/dist/resources/extensions/gsd/journal.js +17 -2
  53. package/dist/resources/extensions/gsd/milestone-actions.js +15 -0
  54. package/dist/resources/extensions/gsd/notifications.js +30 -16
  55. package/dist/resources/extensions/gsd/reports.js +5 -4
  56. package/dist/resources/extensions/gsd/tools/complete-slice.js +21 -0
  57. package/dist/resources/extensions/gsd/tools/complete-task.js +31 -0
  58. package/dist/resources/extensions/gsd/uok/audit.js +18 -2
  59. package/dist/resources/extensions/gsd/workflow-logger.js +10 -2
  60. package/dist/resources/extensions/gsd/worktree-manager.js +1 -0
  61. package/dist/resources/extensions/mcp-client/auth.js +10 -1
  62. package/dist/resources/extensions/mcp-client/index.js +119 -10
  63. package/dist/resources/extensions/ollama/index.js +2 -1
  64. package/dist/resources/extensions/ollama/ollama-chat-provider.js +15 -5
  65. package/dist/resources/extensions/remote-questions/config.js +1 -12
  66. package/dist/resources/extensions/shared/cmux-events.js +12 -0
  67. package/dist/resources/extensions/shared/rtk-session-stats.js +1 -2
  68. package/dist/resources/extensions/universal-config/index.js +1 -1
  69. package/dist/resources/skills/create-skill/SKILL.md +2 -2
  70. package/dist/resources/skills/create-skill/references/gsd-skill-ecosystem.md +4 -4
  71. package/dist/resources/skills/create-skill/workflows/audit-skill.md +4 -4
  72. package/dist/resources/skills/create-skill/workflows/create-new-skill.md +5 -5
  73. package/dist/security-overrides.d.ts +1 -4
  74. package/dist/security-overrides.js +3 -16
  75. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  76. package/dist/web/standalone/.next/BUILD_ID +1 -1
  77. package/dist/web/standalone/.next/app-path-routes-manifest.json +11 -11
  78. package/dist/web/standalone/.next/build-manifest.json +3 -3
  79. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  80. package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
  81. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  82. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  83. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  84. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  85. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  86. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  87. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  88. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  89. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  90. package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
  91. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  92. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  93. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  94. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  95. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  96. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  97. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  98. package/dist/web/standalone/.next/server/app/api/boot/route.js.nft.json +1 -1
  99. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  100. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
  101. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  102. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
  103. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +1 -1
  104. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
  105. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  106. package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
  107. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  108. package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
  109. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  110. package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
  111. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  112. package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
  113. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  114. package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  115. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  116. package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
  117. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  118. package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  119. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  120. package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
  121. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  122. package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
  123. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  124. package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
  125. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  126. package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
  127. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  128. package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
  129. package/dist/web/standalone/.next/server/app/api/notifications/route.js +1 -1
  130. package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  131. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  132. package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
  133. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  134. package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  135. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  136. package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
  137. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  138. package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
  139. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  140. package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
  141. package/dist/web/standalone/.next/server/app/api/session/events/route.js +1 -1
  142. package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
  143. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  144. package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
  145. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  146. package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
  147. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  148. package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
  149. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  150. package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
  151. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  152. package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
  153. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +1 -1
  154. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +1 -1
  155. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +1 -1
  156. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
  157. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +1 -1
  158. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
  159. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  160. package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
  161. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  162. package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +1 -1
  163. package/dist/web/standalone/.next/server/app/index.html +1 -1
  164. package/dist/web/standalone/.next/server/app/index.rsc +1 -1
  165. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  166. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
  167. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  168. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  169. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  170. package/dist/web/standalone/.next/server/app-paths-manifest.json +11 -11
  171. package/dist/web/standalone/.next/server/chunks/1926.js +1 -0
  172. package/dist/web/standalone/.next/server/chunks/6897.js +2 -2
  173. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  174. package/dist/web/standalone/.next/server/middleware-manifest.json +5 -5
  175. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  176. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  177. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  178. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  179. package/dist/web/standalone/.next/static/chunks/2826.e9f5195e91f9cad2.js +11 -0
  180. package/dist/web/standalone/.next/static/chunks/{webpack-1832629448831fdc.js → webpack-2e68521d7c82f7c2.js} +1 -1
  181. package/dist/web-mode.js +1 -1
  182. package/dist/welcome-screen.js +20 -19
  183. package/dist/wizard.js +5 -2
  184. package/package.json +16 -32
  185. package/packages/mcp-server/README.md +3 -3
  186. package/packages/mcp-server/dist/env-writer.d.ts +1 -0
  187. package/packages/mcp-server/dist/env-writer.d.ts.map +1 -1
  188. package/packages/mcp-server/dist/env-writer.js +74 -6
  189. package/packages/mcp-server/dist/env-writer.js.map +1 -1
  190. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  191. package/packages/mcp-server/dist/server.js +36 -17
  192. package/packages/mcp-server/dist/server.js.map +1 -1
  193. package/packages/mcp-server/package.json +5 -0
  194. package/packages/mcp-server/src/env-writer.test.ts +79 -1
  195. package/packages/mcp-server/src/env-writer.ts +76 -6
  196. package/packages/mcp-server/src/readers/readers.test.ts +5 -1
  197. package/packages/mcp-server/src/server.ts +45 -19
  198. package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
  199. package/packages/native/package.json +5 -0
  200. package/packages/native/src/__tests__/clipboard.test.mjs +69 -23
  201. package/packages/native/tsconfig.json +1 -2
  202. package/packages/native/tsconfig.tsbuildinfo +1 -0
  203. package/packages/pi-agent-core/package.json +5 -0
  204. package/packages/pi-agent-core/src/agent-loop.test.ts +220 -15
  205. package/packages/pi-ai/package.json +5 -0
  206. package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
  207. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts +25 -0
  208. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
  209. package/packages/pi-coding-agent/dist/core/compaction/compaction.js +105 -6
  210. package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
  211. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js +230 -28
  212. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js.map +1 -1
  213. package/packages/pi-coding-agent/dist/core/compaction/utils.d.ts +30 -2
  214. package/packages/pi-coding-agent/dist/core/compaction/utils.d.ts.map +1 -1
  215. package/packages/pi-coding-agent/dist/core/compaction/utils.js +113 -12
  216. package/packages/pi-coding-agent/dist/core/compaction/utils.js.map +1 -1
  217. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.d.ts +1 -0
  218. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.d.ts.map +1 -1
  219. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.js +29 -18
  220. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.js.map +1 -1
  221. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.d.ts +2 -0
  222. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.d.ts.map +1 -0
  223. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.js +130 -0
  224. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.js.map +1 -0
  225. package/packages/pi-coding-agent/dist/core/compaction-utils.test.js +56 -1
  226. package/packages/pi-coding-agent/dist/core/compaction-utils.test.js.map +1 -1
  227. package/packages/pi-coding-agent/dist/core/discovery-cache.test.js +8 -15
  228. package/packages/pi-coding-agent/dist/core/discovery-cache.test.js.map +1 -1
  229. package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.d.ts +25 -0
  230. package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.d.ts.map +1 -0
  231. package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.js +109 -0
  232. package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.js.map +1 -0
  233. package/packages/pi-coding-agent/dist/core/extensions/extension-registry.d.ts +67 -0
  234. package/packages/pi-coding-agent/dist/core/extensions/extension-registry.d.ts.map +1 -0
  235. package/packages/pi-coding-agent/dist/core/extensions/extension-registry.js +167 -0
  236. package/packages/pi-coding-agent/dist/core/extensions/extension-registry.js.map +1 -0
  237. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts +3 -2
  238. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
  239. package/packages/pi-coding-agent/dist/core/extensions/loader.js +24 -8
  240. package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
  241. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +7 -0
  242. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
  243. package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
  244. package/packages/pi-coding-agent/dist/core/lsp/lsp-integration.test.js +11 -0
  245. package/packages/pi-coding-agent/dist/core/lsp/lsp-integration.test.js.map +1 -1
  246. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js +2 -2
  247. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js.map +1 -1
  248. package/packages/pi-coding-agent/dist/core/resource-loader.js +1 -1
  249. package/packages/pi-coding-agent/dist/core/resource-loader.js.map +1 -1
  250. package/packages/pi-coding-agent/dist/core/sdk.d.ts +1 -0
  251. package/packages/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
  252. package/packages/pi-coding-agent/dist/core/sdk.js +4 -1
  253. package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
  254. package/packages/pi-coding-agent/dist/core/sdk.test.js +19 -1
  255. package/packages/pi-coding-agent/dist/core/sdk.test.js.map +1 -1
  256. package/packages/pi-coding-agent/dist/core/system-prompt.js +3 -3
  257. package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
  258. package/packages/pi-coding-agent/dist/core/tools/path-utils.test.js +2 -1
  259. package/packages/pi-coding-agent/dist/core/tools/path-utils.test.js.map +1 -1
  260. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/provider-display-name.test.js +15 -6
  261. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/provider-display-name.test.js.map +1 -1
  262. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
  263. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +14 -5
  264. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
  265. package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.d.ts +7 -1
  266. package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  267. package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.js +31 -9
  268. package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.js.map +1 -1
  269. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js +14 -0
  270. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js.map +1 -1
  271. package/packages/pi-coding-agent/package.json +5 -0
  272. package/packages/pi-coding-agent/src/core/compaction/compaction.test.ts +368 -28
  273. package/packages/pi-coding-agent/src/core/compaction/compaction.ts +122 -6
  274. package/packages/pi-coding-agent/src/core/compaction/utils.ts +111 -13
  275. package/packages/pi-coding-agent/src/core/compaction-orchestrator.test.ts +154 -0
  276. package/packages/pi-coding-agent/src/core/compaction-orchestrator.ts +32 -18
  277. package/packages/pi-coding-agent/src/core/compaction-utils.test.ts +68 -1
  278. package/packages/pi-coding-agent/src/core/discovery-cache.test.ts +9 -18
  279. package/packages/pi-coding-agent/src/core/extensions/extension-discovery.ts +119 -0
  280. package/packages/pi-coding-agent/src/core/extensions/extension-registry.ts +222 -0
  281. package/packages/pi-coding-agent/src/core/extensions/loader.ts +24 -11
  282. package/packages/pi-coding-agent/src/core/extensions/types.ts +8 -0
  283. package/packages/pi-coding-agent/src/core/lsp/lsp-integration.test.ts +13 -0
  284. package/packages/pi-coding-agent/src/core/model-registry-auth-mode.test.ts +2 -2
  285. package/packages/pi-coding-agent/src/core/resource-loader.ts +1 -1
  286. package/packages/pi-coding-agent/src/core/sdk.test.ts +25 -1
  287. package/packages/pi-coding-agent/src/core/sdk.ts +10 -3
  288. package/packages/pi-coding-agent/src/core/system-prompt.ts +3 -3
  289. package/packages/pi-coding-agent/src/core/tools/path-utils.test.ts +2 -1
  290. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/provider-display-name.test.ts +17 -7
  291. package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +14 -5
  292. package/packages/pi-coding-agent/src/modes/interactive/components/model-selector.ts +45 -11
  293. package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.test.ts +14 -0
  294. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  295. package/packages/pi-tui/dist/__tests__/autocomplete.test.js +12 -5
  296. package/packages/pi-tui/dist/__tests__/autocomplete.test.js.map +1 -1
  297. package/packages/pi-tui/dist/__tests__/stdin-buffer.test.js +19 -0
  298. package/packages/pi-tui/dist/__tests__/stdin-buffer.test.js.map +1 -1
  299. package/packages/pi-tui/dist/stdin-buffer.d.ts +7 -0
  300. package/packages/pi-tui/dist/stdin-buffer.d.ts.map +1 -1
  301. package/packages/pi-tui/dist/stdin-buffer.js +20 -0
  302. package/packages/pi-tui/dist/stdin-buffer.js.map +1 -1
  303. package/packages/pi-tui/package.json +5 -0
  304. package/packages/pi-tui/src/__tests__/autocomplete.test.ts +20 -5
  305. package/packages/pi-tui/src/__tests__/stdin-buffer.test.ts +25 -0
  306. package/packages/pi-tui/src/stdin-buffer.ts +26 -0
  307. package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
  308. package/packages/rpc-client/package.json +5 -0
  309. package/pkg/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  310. package/pkg/dist/core/export-html/ansi-to-html.js +0 -1
  311. package/pkg/dist/core/export-html/ansi-to-html.js.map +1 -1
  312. package/pkg/dist/core/export-html/index.d.ts +1 -1
  313. package/pkg/dist/core/export-html/index.d.ts.map +1 -1
  314. package/pkg/dist/core/export-html/index.js +5 -39
  315. package/pkg/dist/core/export-html/index.js.map +1 -1
  316. package/pkg/dist/core/export-html/tool-renderer.d.ts +2 -2
  317. package/pkg/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  318. package/pkg/dist/core/export-html/tool-renderer.js.map +1 -1
  319. package/scripts/ensure-workspace-builds.cjs +0 -2
  320. package/scripts/lib/workspace-manifest.cjs +86 -0
  321. package/scripts/link-workspace-packages.cjs +5 -19
  322. package/src/resources/extensions/async-jobs/async-bash-tool.ts +1 -1
  323. package/src/resources/extensions/aws-auth/index.ts +1 -2
  324. package/src/resources/extensions/bg-shell/bg-shell-lifecycle.ts +7 -4
  325. package/src/resources/extensions/bg-shell/index.ts +1 -2
  326. package/src/resources/extensions/bg-shell/process-manager.ts +1 -2
  327. package/src/resources/extensions/browser-tools/index.ts +1 -2
  328. package/src/resources/extensions/claude-code-cli/index.ts +1 -1
  329. package/src/resources/extensions/claude-code-cli/partial-builder.ts +23 -115
  330. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +81 -61
  331. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +91 -22
  332. package/src/resources/extensions/cmux/index.ts +35 -10
  333. package/src/resources/extensions/google-search/extension-manifest.json +5 -4
  334. package/src/resources/extensions/google-search/index.ts +8 -470
  335. package/src/resources/extensions/gsd/abandon-detect.ts +62 -0
  336. package/src/resources/extensions/gsd/auto/loop-deps.ts +1 -1
  337. package/src/resources/extensions/gsd/auto/resolve.ts +29 -0
  338. package/src/resources/extensions/gsd/auto/run-unit.ts +16 -2
  339. package/src/resources/extensions/gsd/auto/turn-epoch.ts +108 -0
  340. package/src/resources/extensions/gsd/auto/types.ts +1 -1
  341. package/src/resources/extensions/gsd/auto-dispatch.ts +20 -0
  342. package/src/resources/extensions/gsd/auto-loop.ts +1 -1
  343. package/src/resources/extensions/gsd/auto-post-unit.ts +30 -0
  344. package/src/resources/extensions/gsd/auto-timeout-recovery.ts +12 -5
  345. package/src/resources/extensions/gsd/auto-unit-closeout.ts +14 -3
  346. package/src/resources/extensions/gsd/auto-worktree.ts +60 -5
  347. package/src/resources/extensions/gsd/auto.ts +37 -18
  348. package/src/resources/extensions/gsd/bootstrap/provider-error-resume.ts +6 -2
  349. package/src/resources/extensions/gsd/bootstrap/register-extension.ts +11 -0
  350. package/src/resources/extensions/gsd/bootstrap/system-context.ts +13 -9
  351. package/src/resources/extensions/gsd/commands/handlers/workflow.ts +27 -8
  352. package/src/resources/extensions/gsd/commands-cmux.ts +10 -6
  353. package/src/resources/extensions/gsd/commands-extensions.ts +747 -41
  354. package/src/resources/extensions/gsd/file-lock.ts +84 -11
  355. package/src/resources/extensions/gsd/git-service.ts +1 -0
  356. package/src/resources/extensions/gsd/gitignore.ts +1 -0
  357. package/src/resources/extensions/gsd/guided-flow-queue.ts +4 -1
  358. package/src/resources/extensions/gsd/guided-flow.ts +1 -1
  359. package/src/resources/extensions/gsd/journal.ts +27 -2
  360. package/src/resources/extensions/gsd/milestone-actions.ts +18 -0
  361. package/src/resources/extensions/gsd/notifications.ts +27 -15
  362. package/src/resources/extensions/gsd/reports.ts +5 -4
  363. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +11 -2
  364. package/src/resources/extensions/gsd/tests/auto-mode-guards.test.ts +79 -0
  365. package/src/resources/extensions/gsd/tests/cmux.test.ts +5 -9
  366. package/src/resources/extensions/gsd/tests/file-lock.test.ts +86 -12
  367. package/src/resources/extensions/gsd/tests/google-search-stub.test.ts +121 -0
  368. package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +30 -0
  369. package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +3 -2
  370. package/src/resources/extensions/gsd/tests/mcp-client-security.test.ts +76 -0
  371. package/src/resources/extensions/gsd/tests/milestone-transition-state-rebuild.test.ts +4 -2
  372. package/src/resources/extensions/gsd/tests/parallel-commit-scope.test.ts +5 -0
  373. package/src/resources/extensions/gsd/tests/parallel-skill-prompt-integration.test.ts +150 -0
  374. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +39 -25
  375. package/src/resources/extensions/gsd/tests/queue-auto-guard.test.ts +181 -0
  376. package/src/resources/extensions/gsd/tests/quick-auto-guard.test.ts +13 -7
  377. package/src/resources/extensions/gsd/tests/require-slice-discussion-dispatch.test.ts +170 -0
  378. package/src/resources/extensions/gsd/tests/rewrite-docs-abandon-detect.test.ts +195 -0
  379. package/src/resources/extensions/gsd/tests/stuck-detection-coverage.test.ts +2 -2
  380. package/src/resources/extensions/gsd/tests/triage-resolution.test.ts +50 -2
  381. package/src/resources/extensions/gsd/tests/turn-epoch.test.ts +162 -0
  382. package/src/resources/extensions/gsd/tests/validate-extension-package.test.ts +168 -0
  383. package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +25 -2
  384. package/src/resources/extensions/gsd/tools/complete-slice.ts +38 -0
  385. package/src/resources/extensions/gsd/tools/complete-task.ts +49 -0
  386. package/src/resources/extensions/gsd/uok/audit.ts +20 -2
  387. package/src/resources/extensions/gsd/workflow-logger.ts +22 -3
  388. package/src/resources/extensions/gsd/worktree-manager.ts +1 -0
  389. package/src/resources/extensions/mcp-client/auth.ts +12 -1
  390. package/src/resources/extensions/mcp-client/index.ts +130 -11
  391. package/src/resources/extensions/ollama/index.ts +3 -3
  392. package/src/resources/extensions/ollama/ollama-chat-provider.ts +18 -6
  393. package/src/resources/extensions/remote-questions/config.ts +4 -15
  394. package/src/resources/extensions/search-the-web/index.ts +1 -2
  395. package/src/resources/extensions/shared/cmux-events.ts +59 -0
  396. package/src/resources/extensions/shared/rtk-session-stats.ts +1 -2
  397. package/src/resources/extensions/shared/tests/format-utils.test.ts +3 -5
  398. package/src/resources/extensions/universal-config/index.ts +1 -1
  399. package/src/resources/skills/create-skill/SKILL.md +2 -2
  400. package/src/resources/skills/create-skill/references/gsd-skill-ecosystem.md +4 -4
  401. package/src/resources/skills/create-skill/workflows/audit-skill.md +4 -4
  402. package/src/resources/skills/create-skill/workflows/create-new-skill.md +5 -5
  403. package/dist/web/standalone/.next/server/chunks/7461.js +0 -1
  404. package/dist/web/standalone/.next/static/chunks/2826.d445fb428ef41fa1.js +0 -9
  405. package/packages/gsd-agent-core/dist/agent-session.d.ts +0 -716
  406. package/packages/gsd-agent-core/dist/agent-session.d.ts.map +0 -1
  407. package/packages/gsd-agent-core/dist/agent-session.js +0 -2595
  408. package/packages/gsd-agent-core/dist/agent-session.js.map +0 -1
  409. package/packages/gsd-agent-core/dist/artifact-manager.d.ts +0 -52
  410. package/packages/gsd-agent-core/dist/artifact-manager.d.ts.map +0 -1
  411. package/packages/gsd-agent-core/dist/artifact-manager.js +0 -118
  412. package/packages/gsd-agent-core/dist/artifact-manager.js.map +0 -1
  413. package/packages/gsd-agent-core/dist/bash-executor.d.ts +0 -57
  414. package/packages/gsd-agent-core/dist/bash-executor.d.ts.map +0 -1
  415. package/packages/gsd-agent-core/dist/bash-executor.js +0 -282
  416. package/packages/gsd-agent-core/dist/bash-executor.js.map +0 -1
  417. package/packages/gsd-agent-core/dist/blob-store.d.ts +0 -39
  418. package/packages/gsd-agent-core/dist/blob-store.d.ts.map +0 -1
  419. package/packages/gsd-agent-core/dist/blob-store.js +0 -151
  420. package/packages/gsd-agent-core/dist/blob-store.js.map +0 -1
  421. package/packages/gsd-agent-core/dist/compaction/branch-summarization.d.ts +0 -90
  422. package/packages/gsd-agent-core/dist/compaction/branch-summarization.d.ts.map +0 -1
  423. package/packages/gsd-agent-core/dist/compaction/branch-summarization.js +0 -207
  424. package/packages/gsd-agent-core/dist/compaction/branch-summarization.js.map +0 -1
  425. package/packages/gsd-agent-core/dist/compaction/compaction.d.ts +0 -137
  426. package/packages/gsd-agent-core/dist/compaction/compaction.d.ts.map +0 -1
  427. package/packages/gsd-agent-core/dist/compaction/compaction.js +0 -621
  428. package/packages/gsd-agent-core/dist/compaction/compaction.js.map +0 -1
  429. package/packages/gsd-agent-core/dist/compaction/index.d.ts +0 -7
  430. package/packages/gsd-agent-core/dist/compaction/index.d.ts.map +0 -1
  431. package/packages/gsd-agent-core/dist/compaction/index.js +0 -7
  432. package/packages/gsd-agent-core/dist/compaction/index.js.map +0 -1
  433. package/packages/gsd-agent-core/dist/compaction/utils.d.ts +0 -78
  434. package/packages/gsd-agent-core/dist/compaction/utils.d.ts.map +0 -1
  435. package/packages/gsd-agent-core/dist/compaction/utils.js +0 -263
  436. package/packages/gsd-agent-core/dist/compaction/utils.js.map +0 -1
  437. package/packages/gsd-agent-core/dist/compaction-orchestrator.d.ts +0 -90
  438. package/packages/gsd-agent-core/dist/compaction-orchestrator.d.ts.map +0 -1
  439. package/packages/gsd-agent-core/dist/compaction-orchestrator.js +0 -338
  440. package/packages/gsd-agent-core/dist/compaction-orchestrator.js.map +0 -1
  441. package/packages/gsd-agent-core/dist/contextual-tips.d.ts +0 -43
  442. package/packages/gsd-agent-core/dist/contextual-tips.d.ts.map +0 -1
  443. package/packages/gsd-agent-core/dist/contextual-tips.js +0 -208
  444. package/packages/gsd-agent-core/dist/contextual-tips.js.map +0 -1
  445. package/packages/gsd-agent-core/dist/export-html/ansi-to-html.d.ts +0 -18
  446. package/packages/gsd-agent-core/dist/export-html/ansi-to-html.d.ts.map +0 -1
  447. package/packages/gsd-agent-core/dist/export-html/ansi-to-html.js +0 -250
  448. package/packages/gsd-agent-core/dist/export-html/ansi-to-html.js.map +0 -1
  449. package/packages/gsd-agent-core/dist/export-html/index.d.ts +0 -37
  450. package/packages/gsd-agent-core/dist/export-html/index.d.ts.map +0 -1
  451. package/packages/gsd-agent-core/dist/export-html/index.js +0 -257
  452. package/packages/gsd-agent-core/dist/export-html/index.js.map +0 -1
  453. package/packages/gsd-agent-core/dist/export-html/template.css +0 -971
  454. package/packages/gsd-agent-core/dist/export-html/template.html +0 -54
  455. package/packages/gsd-agent-core/dist/export-html/template.js +0 -1583
  456. package/packages/gsd-agent-core/dist/export-html/tool-renderer.d.ts +0 -38
  457. package/packages/gsd-agent-core/dist/export-html/tool-renderer.d.ts.map +0 -1
  458. package/packages/gsd-agent-core/dist/export-html/tool-renderer.js +0 -70
  459. package/packages/gsd-agent-core/dist/export-html/tool-renderer.js.map +0 -1
  460. package/packages/gsd-agent-core/dist/export-html/vendor/highlight.min.js +0 -1213
  461. package/packages/gsd-agent-core/dist/export-html/vendor/marked.min.js +0 -6
  462. package/packages/gsd-agent-core/dist/fallback-resolver.d.ts +0 -75
  463. package/packages/gsd-agent-core/dist/fallback-resolver.d.ts.map +0 -1
  464. package/packages/gsd-agent-core/dist/fallback-resolver.js +0 -118
  465. package/packages/gsd-agent-core/dist/fallback-resolver.js.map +0 -1
  466. package/packages/gsd-agent-core/dist/image-overflow-recovery.d.ts +0 -44
  467. package/packages/gsd-agent-core/dist/image-overflow-recovery.d.ts.map +0 -1
  468. package/packages/gsd-agent-core/dist/image-overflow-recovery.js +0 -99
  469. package/packages/gsd-agent-core/dist/image-overflow-recovery.js.map +0 -1
  470. package/packages/gsd-agent-core/dist/index.d.ts +0 -14
  471. package/packages/gsd-agent-core/dist/index.d.ts.map +0 -1
  472. package/packages/gsd-agent-core/dist/index.js +0 -19
  473. package/packages/gsd-agent-core/dist/index.js.map +0 -1
  474. package/packages/gsd-agent-core/dist/keybindings.d.ts +0 -47
  475. package/packages/gsd-agent-core/dist/keybindings.d.ts.map +0 -1
  476. package/packages/gsd-agent-core/dist/keybindings.js +0 -156
  477. package/packages/gsd-agent-core/dist/keybindings.js.map +0 -1
  478. package/packages/gsd-agent-core/dist/lifecycle-hooks.d.ts +0 -42
  479. package/packages/gsd-agent-core/dist/lifecycle-hooks.d.ts.map +0 -1
  480. package/packages/gsd-agent-core/dist/lifecycle-hooks.js +0 -204
  481. package/packages/gsd-agent-core/dist/lifecycle-hooks.js.map +0 -1
  482. package/packages/gsd-agent-core/dist/retry-handler.d.ts +0 -128
  483. package/packages/gsd-agent-core/dist/retry-handler.d.ts.map +0 -1
  484. package/packages/gsd-agent-core/dist/retry-handler.js +0 -518
  485. package/packages/gsd-agent-core/dist/retry-handler.js.map +0 -1
  486. package/packages/gsd-agent-core/dist/sdk.d.ts +0 -159
  487. package/packages/gsd-agent-core/dist/sdk.d.ts.map +0 -1
  488. package/packages/gsd-agent-core/dist/sdk.js +0 -375
  489. package/packages/gsd-agent-core/dist/sdk.js.map +0 -1
  490. package/packages/gsd-agent-core/dist/system-prompt.d.ts +0 -28
  491. package/packages/gsd-agent-core/dist/system-prompt.d.ts.map +0 -1
  492. package/packages/gsd-agent-core/dist/system-prompt.js +0 -201
  493. package/packages/gsd-agent-core/dist/system-prompt.js.map +0 -1
  494. package/packages/gsd-agent-core/package.json +0 -25
  495. package/packages/gsd-agent-core/scripts/copy-assets.cjs +0 -43
  496. package/packages/gsd-agent-core/src/agent-session.test.ts +0 -169
  497. package/packages/gsd-agent-core/src/agent-session.ts +0 -3358
  498. package/packages/gsd-agent-core/src/artifact-manager.ts +0 -126
  499. package/packages/gsd-agent-core/src/bash-executor.ts +0 -352
  500. package/packages/gsd-agent-core/src/blob-store.ts +0 -154
  501. package/packages/gsd-agent-core/src/compaction/branch-summarization.ts +0 -317
  502. package/packages/gsd-agent-core/src/compaction/compaction.ts +0 -855
  503. package/packages/gsd-agent-core/src/compaction/index.ts +0 -7
  504. package/packages/gsd-agent-core/src/compaction/utils.ts +0 -312
  505. package/packages/gsd-agent-core/src/compaction-orchestrator.ts +0 -449
  506. package/packages/gsd-agent-core/src/contextual-tips.ts +0 -232
  507. package/packages/gsd-agent-core/src/export-html/ansi-to-html.ts +0 -259
  508. package/packages/gsd-agent-core/src/export-html/index.ts +0 -345
  509. package/packages/gsd-agent-core/src/export-html/template.css +0 -971
  510. package/packages/gsd-agent-core/src/export-html/template.html +0 -54
  511. package/packages/gsd-agent-core/src/export-html/template.js +0 -1583
  512. package/packages/gsd-agent-core/src/export-html/tool-renderer.ts +0 -114
  513. package/packages/gsd-agent-core/src/export-html/vendor/highlight.min.js +0 -1213
  514. package/packages/gsd-agent-core/src/export-html/vendor/marked.min.js +0 -6
  515. package/packages/gsd-agent-core/src/fallback-resolver.ts +0 -193
  516. package/packages/gsd-agent-core/src/image-overflow-recovery.ts +0 -120
  517. package/packages/gsd-agent-core/src/index.ts +0 -68
  518. package/packages/gsd-agent-core/src/keybindings.ts +0 -220
  519. package/packages/gsd-agent-core/src/lifecycle-hooks.ts +0 -284
  520. package/packages/gsd-agent-core/src/retry-handler.ts +0 -620
  521. package/packages/gsd-agent-core/src/sdk.ts +0 -550
  522. package/packages/gsd-agent-core/src/system-prompt.ts +0 -270
  523. package/packages/gsd-agent-core/tsconfig.json +0 -28
  524. package/packages/gsd-agent-core/tsconfig.tsbuildinfo +0 -1
  525. package/packages/gsd-agent-modes/dist/cli/args.d.ts +0 -58
  526. package/packages/gsd-agent-modes/dist/cli/args.d.ts.map +0 -1
  527. package/packages/gsd-agent-modes/dist/cli/args.js +0 -324
  528. package/packages/gsd-agent-modes/dist/cli/args.js.map +0 -1
  529. package/packages/gsd-agent-modes/dist/cli/config-selector.d.ts +0 -13
  530. package/packages/gsd-agent-modes/dist/cli/config-selector.d.ts.map +0 -1
  531. package/packages/gsd-agent-modes/dist/cli/config-selector.js +0 -32
  532. package/packages/gsd-agent-modes/dist/cli/config-selector.js.map +0 -1
  533. package/packages/gsd-agent-modes/dist/cli/file-processor.d.ts +0 -15
  534. package/packages/gsd-agent-modes/dist/cli/file-processor.d.ts.map +0 -1
  535. package/packages/gsd-agent-modes/dist/cli/file-processor.js +0 -86
  536. package/packages/gsd-agent-modes/dist/cli/file-processor.js.map +0 -1
  537. package/packages/gsd-agent-modes/dist/cli/list-models.d.ts +0 -21
  538. package/packages/gsd-agent-modes/dist/cli/list-models.d.ts.map +0 -1
  539. package/packages/gsd-agent-modes/dist/cli/list-models.js +0 -114
  540. package/packages/gsd-agent-modes/dist/cli/list-models.js.map +0 -1
  541. package/packages/gsd-agent-modes/dist/cli/session-picker.d.ts +0 -10
  542. package/packages/gsd-agent-modes/dist/cli/session-picker.d.ts.map +0 -1
  543. package/packages/gsd-agent-modes/dist/cli/session-picker.js +0 -37
  544. package/packages/gsd-agent-modes/dist/cli/session-picker.js.map +0 -1
  545. package/packages/gsd-agent-modes/dist/index.d.ts +0 -7
  546. package/packages/gsd-agent-modes/dist/index.d.ts.map +0 -1
  547. package/packages/gsd-agent-modes/dist/index.js +0 -7
  548. package/packages/gsd-agent-modes/dist/index.js.map +0 -1
  549. package/packages/gsd-agent-modes/dist/main.d.ts +0 -8
  550. package/packages/gsd-agent-modes/dist/main.d.ts.map +0 -1
  551. package/packages/gsd-agent-modes/dist/main.js +0 -491
  552. package/packages/gsd-agent-modes/dist/main.js.map +0 -1
  553. package/packages/gsd-agent-modes/dist/modes/interactive/components/armin.d.ts +0 -34
  554. package/packages/gsd-agent-modes/dist/modes/interactive/components/armin.d.ts.map +0 -1
  555. package/packages/gsd-agent-modes/dist/modes/interactive/components/armin.js +0 -330
  556. package/packages/gsd-agent-modes/dist/modes/interactive/components/armin.js.map +0 -1
  557. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.d.ts +0 -29
  558. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.d.ts.map +0 -1
  559. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js +0 -141
  560. package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js.map +0 -1
  561. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.d.ts +0 -36
  562. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.d.ts.map +0 -1
  563. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.js +0 -157
  564. package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.js.map +0 -1
  565. package/packages/gsd-agent-modes/dist/modes/interactive/components/bordered-loader.d.ts +0 -16
  566. package/packages/gsd-agent-modes/dist/modes/interactive/components/bordered-loader.d.ts.map +0 -1
  567. package/packages/gsd-agent-modes/dist/modes/interactive/components/bordered-loader.js +0 -48
  568. package/packages/gsd-agent-modes/dist/modes/interactive/components/bordered-loader.js.map +0 -1
  569. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.d.ts +0 -16
  570. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.d.ts.map +0 -1
  571. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.js +0 -43
  572. package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.js.map +0 -1
  573. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-frame.d.ts +0 -11
  574. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-frame.d.ts.map +0 -1
  575. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-frame.js +0 -47
  576. package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-frame.js.map +0 -1
  577. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.d.ts +0 -16
  578. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.d.ts.map +0 -1
  579. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.js +0 -44
  580. package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.js.map +0 -1
  581. package/packages/gsd-agent-modes/dist/modes/interactive/components/config-selector.d.ts +0 -71
  582. package/packages/gsd-agent-modes/dist/modes/interactive/components/config-selector.d.ts.map +0 -1
  583. package/packages/gsd-agent-modes/dist/modes/interactive/components/config-selector.js +0 -474
  584. package/packages/gsd-agent-modes/dist/modes/interactive/components/config-selector.js.map +0 -1
  585. package/packages/gsd-agent-modes/dist/modes/interactive/components/countdown-timer.d.ts +0 -15
  586. package/packages/gsd-agent-modes/dist/modes/interactive/components/countdown-timer.d.ts.map +0 -1
  587. package/packages/gsd-agent-modes/dist/modes/interactive/components/countdown-timer.js +0 -32
  588. package/packages/gsd-agent-modes/dist/modes/interactive/components/countdown-timer.js.map +0 -1
  589. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.d.ts +0 -22
  590. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.d.ts.map +0 -1
  591. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.js +0 -70
  592. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.js.map +0 -1
  593. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-message.d.ts +0 -20
  594. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-message.d.ts.map +0 -1
  595. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-message.js +0 -75
  596. package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-message.js.map +0 -1
  597. package/packages/gsd-agent-modes/dist/modes/interactive/components/daxnuts.d.ts +0 -23
  598. package/packages/gsd-agent-modes/dist/modes/interactive/components/daxnuts.d.ts.map +0 -1
  599. package/packages/gsd-agent-modes/dist/modes/interactive/components/daxnuts.js +0 -140
  600. package/packages/gsd-agent-modes/dist/modes/interactive/components/daxnuts.js.map +0 -1
  601. package/packages/gsd-agent-modes/dist/modes/interactive/components/diff.d.ts +0 -12
  602. package/packages/gsd-agent-modes/dist/modes/interactive/components/diff.d.ts.map +0 -1
  603. package/packages/gsd-agent-modes/dist/modes/interactive/components/diff.js +0 -133
  604. package/packages/gsd-agent-modes/dist/modes/interactive/components/diff.js.map +0 -1
  605. package/packages/gsd-agent-modes/dist/modes/interactive/components/dynamic-border.d.ts +0 -33
  606. package/packages/gsd-agent-modes/dist/modes/interactive/components/dynamic-border.d.ts.map +0 -1
  607. package/packages/gsd-agent-modes/dist/modes/interactive/components/dynamic-border.js +0 -82
  608. package/packages/gsd-agent-modes/dist/modes/interactive/components/dynamic-border.js.map +0 -1
  609. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-editor.d.ts +0 -20
  610. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-editor.d.ts.map +0 -1
  611. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-editor.js +0 -111
  612. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-editor.js.map +0 -1
  613. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-input.d.ts +0 -24
  614. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-input.d.ts.map +0 -1
  615. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-input.js +0 -63
  616. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-input.js.map +0 -1
  617. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-selector.d.ts +0 -33
  618. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-selector.d.ts.map +0 -1
  619. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-selector.js +0 -118
  620. package/packages/gsd-agent-modes/dist/modes/interactive/components/extension-selector.js.map +0 -1
  621. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.d.ts +0 -32
  622. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.d.ts.map +0 -1
  623. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.js +0 -230
  624. package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.js.map +0 -1
  625. package/packages/gsd-agent-modes/dist/modes/interactive/components/index.d.ts +0 -34
  626. package/packages/gsd-agent-modes/dist/modes/interactive/components/index.d.ts.map +0 -1
  627. package/packages/gsd-agent-modes/dist/modes/interactive/components/index.js +0 -36
  628. package/packages/gsd-agent-modes/dist/modes/interactive/components/index.js.map +0 -1
  629. package/packages/gsd-agent-modes/dist/modes/interactive/components/keybinding-hints.d.ts +0 -48
  630. package/packages/gsd-agent-modes/dist/modes/interactive/components/keybinding-hints.d.ts.map +0 -1
  631. package/packages/gsd-agent-modes/dist/modes/interactive/components/keybinding-hints.js +0 -72
  632. package/packages/gsd-agent-modes/dist/modes/interactive/components/keybinding-hints.js.map +0 -1
  633. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.d.ts +0 -63
  634. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.d.ts.map +0 -1
  635. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.js +0 -213
  636. package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.js.map +0 -1
  637. package/packages/gsd-agent-modes/dist/modes/interactive/components/model-selector.d.ts +0 -86
  638. package/packages/gsd-agent-modes/dist/modes/interactive/components/model-selector.d.ts.map +0 -1
  639. package/packages/gsd-agent-modes/dist/modes/interactive/components/model-selector.js +0 -536
  640. package/packages/gsd-agent-modes/dist/modes/interactive/components/model-selector.js.map +0 -1
  641. package/packages/gsd-agent-modes/dist/modes/interactive/components/oauth-selector.d.ts +0 -19
  642. package/packages/gsd-agent-modes/dist/modes/interactive/components/oauth-selector.d.ts.map +0 -1
  643. package/packages/gsd-agent-modes/dist/modes/interactive/components/oauth-selector.js +0 -93
  644. package/packages/gsd-agent-modes/dist/modes/interactive/components/oauth-selector.js.map +0 -1
  645. package/packages/gsd-agent-modes/dist/modes/interactive/components/provider-manager.d.ts +0 -30
  646. package/packages/gsd-agent-modes/dist/modes/interactive/components/provider-manager.d.ts.map +0 -1
  647. package/packages/gsd-agent-modes/dist/modes/interactive/components/provider-manager.js +0 -169
  648. package/packages/gsd-agent-modes/dist/modes/interactive/components/provider-manager.js.map +0 -1
  649. package/packages/gsd-agent-modes/dist/modes/interactive/components/scoped-models-selector.d.ts +0 -49
  650. package/packages/gsd-agent-modes/dist/modes/interactive/components/scoped-models-selector.d.ts.map +0 -1
  651. package/packages/gsd-agent-modes/dist/modes/interactive/components/scoped-models-selector.js +0 -267
  652. package/packages/gsd-agent-modes/dist/modes/interactive/components/scoped-models-selector.js.map +0 -1
  653. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector-search.d.ts +0 -21
  654. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector-search.d.ts.map +0 -1
  655. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector-search.js +0 -155
  656. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector-search.js.map +0 -1
  657. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector.d.ts +0 -97
  658. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector.d.ts.map +0 -1
  659. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector.js +0 -810
  660. package/packages/gsd-agent-modes/dist/modes/interactive/components/session-selector.js.map +0 -1
  661. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.d.ts +0 -71
  662. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.d.ts.map +0 -1
  663. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.js +0 -320
  664. package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.js.map +0 -1
  665. package/packages/gsd-agent-modes/dist/modes/interactive/components/show-images-selector.d.ts +0 -10
  666. package/packages/gsd-agent-modes/dist/modes/interactive/components/show-images-selector.d.ts.map +0 -1
  667. package/packages/gsd-agent-modes/dist/modes/interactive/components/show-images-selector.js +0 -34
  668. package/packages/gsd-agent-modes/dist/modes/interactive/components/show-images-selector.js.map +0 -1
  669. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.d.ts +0 -17
  670. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.d.ts.map +0 -1
  671. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.js +0 -46
  672. package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.js.map +0 -1
  673. package/packages/gsd-agent-modes/dist/modes/interactive/components/theme-selector.d.ts +0 -11
  674. package/packages/gsd-agent-modes/dist/modes/interactive/components/theme-selector.d.ts.map +0 -1
  675. package/packages/gsd-agent-modes/dist/modes/interactive/components/theme-selector.js +0 -45
  676. package/packages/gsd-agent-modes/dist/modes/interactive/components/theme-selector.js.map +0 -1
  677. package/packages/gsd-agent-modes/dist/modes/interactive/components/thinking-selector.d.ts +0 -11
  678. package/packages/gsd-agent-modes/dist/modes/interactive/components/thinking-selector.d.ts.map +0 -1
  679. package/packages/gsd-agent-modes/dist/modes/interactive/components/thinking-selector.js +0 -46
  680. package/packages/gsd-agent-modes/dist/modes/interactive/components/thinking-selector.js.map +0 -1
  681. package/packages/gsd-agent-modes/dist/modes/interactive/components/timestamp.d.ts +0 -15
  682. package/packages/gsd-agent-modes/dist/modes/interactive/components/timestamp.d.ts.map +0 -1
  683. package/packages/gsd-agent-modes/dist/modes/interactive/components/timestamp.js +0 -40
  684. package/packages/gsd-agent-modes/dist/modes/interactive/components/timestamp.js.map +0 -1
  685. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts +0 -111
  686. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts.map +0 -1
  687. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js +0 -984
  688. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js.map +0 -1
  689. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-render-utils.d.ts +0 -44
  690. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-render-utils.d.ts.map +0 -1
  691. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-render-utils.js +0 -61
  692. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-render-utils.js.map +0 -1
  693. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-selector.d.ts +0 -109
  694. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-selector.d.ts.map +0 -1
  695. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-selector.js +0 -1035
  696. package/packages/gsd-agent-modes/dist/modes/interactive/components/tree-selector.js.map +0 -1
  697. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message-selector.d.ts +0 -30
  698. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message-selector.d.ts.map +0 -1
  699. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message-selector.js +0 -112
  700. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message-selector.js.map +0 -1
  701. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.d.ts +0 -12
  702. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.d.ts.map +0 -1
  703. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.js +0 -38
  704. package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.js.map +0 -1
  705. package/packages/gsd-agent-modes/dist/modes/interactive/components/visual-truncate.d.ts +0 -24
  706. package/packages/gsd-agent-modes/dist/modes/interactive/components/visual-truncate.d.ts.map +0 -1
  707. package/packages/gsd-agent-modes/dist/modes/interactive/components/visual-truncate.js +0 -33
  708. package/packages/gsd-agent-modes/dist/modes/interactive/components/visual-truncate.js.map +0 -1
  709. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts +0 -27
  710. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts.map +0 -1
  711. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js +0 -793
  712. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js.map +0 -1
  713. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.d.ts +0 -4
  714. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.d.ts.map +0 -1
  715. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.js +0 -62
  716. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.js.map +0 -1
  717. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.d.ts +0 -22
  718. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.d.ts.map +0 -1
  719. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js +0 -118
  720. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js.map +0 -1
  721. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/model-controller.d.ts +0 -7
  722. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/model-controller.d.ts.map +0 -1
  723. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/model-controller.js +0 -68
  724. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/model-controller.js.map +0 -1
  725. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts +0 -50
  726. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts.map +0 -1
  727. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.js +0 -2
  728. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.js.map +0 -1
  729. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts +0 -358
  730. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts.map +0 -1
  731. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js +0 -3409
  732. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js.map +0 -1
  733. package/packages/gsd-agent-modes/dist/modes/interactive/slash-command-handlers.d.ts +0 -77
  734. package/packages/gsd-agent-modes/dist/modes/interactive/slash-command-handlers.d.ts.map +0 -1
  735. package/packages/gsd-agent-modes/dist/modes/interactive/slash-command-handlers.js +0 -529
  736. package/packages/gsd-agent-modes/dist/modes/interactive/slash-command-handlers.js.map +0 -1
  737. package/packages/gsd-agent-modes/dist/modes/interactive/utils/shorten-path.d.ts +0 -6
  738. package/packages/gsd-agent-modes/dist/modes/interactive/utils/shorten-path.d.ts.map +0 -1
  739. package/packages/gsd-agent-modes/dist/modes/interactive/utils/shorten-path.js +0 -15
  740. package/packages/gsd-agent-modes/dist/modes/interactive/utils/shorten-path.js.map +0 -1
  741. package/packages/gsd-agent-modes/dist/modes/print-mode.d.ts +0 -28
  742. package/packages/gsd-agent-modes/dist/modes/print-mode.d.ts.map +0 -1
  743. package/packages/gsd-agent-modes/dist/modes/print-mode.js +0 -84
  744. package/packages/gsd-agent-modes/dist/modes/print-mode.js.map +0 -1
  745. package/packages/gsd-agent-modes/dist/modes/rpc/jsonl.d.ts +0 -17
  746. package/packages/gsd-agent-modes/dist/modes/rpc/jsonl.d.ts.map +0 -1
  747. package/packages/gsd-agent-modes/dist/modes/rpc/jsonl.js +0 -49
  748. package/packages/gsd-agent-modes/dist/modes/rpc/jsonl.js.map +0 -1
  749. package/packages/gsd-agent-modes/dist/modes/rpc/remote-terminal.d.ts +0 -37
  750. package/packages/gsd-agent-modes/dist/modes/rpc/remote-terminal.d.ts.map +0 -1
  751. package/packages/gsd-agent-modes/dist/modes/rpc/remote-terminal.js +0 -84
  752. package/packages/gsd-agent-modes/dist/modes/rpc/remote-terminal.js.map +0 -1
  753. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.d.ts +0 -243
  754. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.d.ts.map +0 -1
  755. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.js +0 -464
  756. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.js.map +0 -1
  757. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.d.ts +0 -25
  758. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.d.ts.map +0 -1
  759. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js +0 -750
  760. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js.map +0 -1
  761. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-types.d.ts +0 -511
  762. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-types.d.ts.map +0 -1
  763. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-types.js +0 -8
  764. package/packages/gsd-agent-modes/dist/modes/rpc/rpc-types.js.map +0 -1
  765. package/packages/gsd-agent-modes/dist/modes/shared/command-context-actions.d.ts +0 -19
  766. package/packages/gsd-agent-modes/dist/modes/shared/command-context-actions.d.ts.map +0 -1
  767. package/packages/gsd-agent-modes/dist/modes/shared/command-context-actions.js +0 -45
  768. package/packages/gsd-agent-modes/dist/modes/shared/command-context-actions.js.map +0 -1
  769. package/packages/gsd-agent-modes/dist/pi-coding-agent-compat.d.ts +0 -22
  770. package/packages/gsd-agent-modes/dist/pi-coding-agent-compat.d.ts.map +0 -1
  771. package/packages/gsd-agent-modes/dist/pi-coding-agent-compat.js +0 -21
  772. package/packages/gsd-agent-modes/dist/pi-coding-agent-compat.js.map +0 -1
  773. package/packages/gsd-agent-modes/dist/pi-tui-compat.d.ts +0 -4
  774. package/packages/gsd-agent-modes/dist/pi-tui-compat.d.ts.map +0 -1
  775. package/packages/gsd-agent-modes/dist/pi-tui-compat.js +0 -3
  776. package/packages/gsd-agent-modes/dist/pi-tui-compat.js.map +0 -1
  777. package/packages/gsd-agent-modes/dist/theme.d.ts +0 -15
  778. package/packages/gsd-agent-modes/dist/theme.d.ts.map +0 -1
  779. package/packages/gsd-agent-modes/dist/theme.js +0 -23
  780. package/packages/gsd-agent-modes/dist/theme.js.map +0 -1
  781. package/packages/gsd-agent-modes/dist/utils/theme.d.ts +0 -16
  782. package/packages/gsd-agent-modes/dist/utils/theme.d.ts.map +0 -1
  783. package/packages/gsd-agent-modes/dist/utils/theme.js +0 -11
  784. package/packages/gsd-agent-modes/dist/utils/theme.js.map +0 -1
  785. package/packages/gsd-agent-modes/package.json +0 -23
  786. package/packages/gsd-agent-modes/src/cli/args.ts +0 -350
  787. package/packages/gsd-agent-modes/src/cli/config-selector.ts +0 -54
  788. package/packages/gsd-agent-modes/src/cli/file-processor.ts +0 -107
  789. package/packages/gsd-agent-modes/src/cli/list-models.ts +0 -141
  790. package/packages/gsd-agent-modes/src/cli/session-picker.ts +0 -59
  791. package/packages/gsd-agent-modes/src/index.ts +0 -6
  792. package/packages/gsd-agent-modes/src/main.ts +0 -614
  793. package/packages/gsd-agent-modes/src/modes/interactive/components/__tests__/login-dialog.test.ts +0 -24
  794. package/packages/gsd-agent-modes/src/modes/interactive/components/__tests__/provider-display-name.test.ts +0 -18
  795. package/packages/gsd-agent-modes/src/modes/interactive/components/__tests__/timestamp.test.ts +0 -38
  796. package/packages/gsd-agent-modes/src/modes/interactive/components/__tests__/tool-execution.test.ts +0 -171
  797. package/packages/gsd-agent-modes/src/modes/interactive/components/armin.ts +0 -382
  798. package/packages/gsd-agent-modes/src/modes/interactive/components/assistant-message.ts +0 -178
  799. package/packages/gsd-agent-modes/src/modes/interactive/components/bash-execution.ts +0 -212
  800. package/packages/gsd-agent-modes/src/modes/interactive/components/bordered-loader.ts +0 -66
  801. package/packages/gsd-agent-modes/src/modes/interactive/components/branch-summary-message.ts +0 -59
  802. package/packages/gsd-agent-modes/src/modes/interactive/components/chat-frame.ts +0 -67
  803. package/packages/gsd-agent-modes/src/modes/interactive/components/compaction-summary-message.ts +0 -60
  804. package/packages/gsd-agent-modes/src/modes/interactive/components/config-selector.ts +0 -597
  805. package/packages/gsd-agent-modes/src/modes/interactive/components/countdown-timer.ts +0 -41
  806. package/packages/gsd-agent-modes/src/modes/interactive/components/custom-editor.ts +0 -88
  807. package/packages/gsd-agent-modes/src/modes/interactive/components/custom-message.ts +0 -100
  808. package/packages/gsd-agent-modes/src/modes/interactive/components/daxnuts.ts +0 -165
  809. package/packages/gsd-agent-modes/src/modes/interactive/components/diff.ts +0 -147
  810. package/packages/gsd-agent-modes/src/modes/interactive/components/dynamic-border.test.ts +0 -73
  811. package/packages/gsd-agent-modes/src/modes/interactive/components/dynamic-border.ts +0 -89
  812. package/packages/gsd-agent-modes/src/modes/interactive/components/extension-editor.ts +0 -151
  813. package/packages/gsd-agent-modes/src/modes/interactive/components/extension-input.ts +0 -100
  814. package/packages/gsd-agent-modes/src/modes/interactive/components/extension-selector.ts +0 -156
  815. package/packages/gsd-agent-modes/src/modes/interactive/components/footer.ts +0 -257
  816. package/packages/gsd-agent-modes/src/modes/interactive/components/index.ts +0 -35
  817. package/packages/gsd-agent-modes/src/modes/interactive/components/keybinding-hints.ts +0 -84
  818. package/packages/gsd-agent-modes/src/modes/interactive/components/login-dialog.ts +0 -257
  819. package/packages/gsd-agent-modes/src/modes/interactive/components/model-selector.ts +0 -656
  820. package/packages/gsd-agent-modes/src/modes/interactive/components/oauth-selector.ts +0 -122
  821. package/packages/gsd-agent-modes/src/modes/interactive/components/provider-manager.ts +0 -210
  822. package/packages/gsd-agent-modes/src/modes/interactive/components/scoped-models-selector.ts +0 -342
  823. package/packages/gsd-agent-modes/src/modes/interactive/components/session-selector-search.ts +0 -194
  824. package/packages/gsd-agent-modes/src/modes/interactive/components/session-selector.ts +0 -1011
  825. package/packages/gsd-agent-modes/src/modes/interactive/components/settings-selector.ts +0 -452
  826. package/packages/gsd-agent-modes/src/modes/interactive/components/show-images-selector.ts +0 -45
  827. package/packages/gsd-agent-modes/src/modes/interactive/components/skill-invocation-message.ts +0 -56
  828. package/packages/gsd-agent-modes/src/modes/interactive/components/theme-selector.ts +0 -63
  829. package/packages/gsd-agent-modes/src/modes/interactive/components/thinking-selector.ts +0 -64
  830. package/packages/gsd-agent-modes/src/modes/interactive/components/timestamp.ts +0 -48
  831. package/packages/gsd-agent-modes/src/modes/interactive/components/tool-execution.ts +0 -1157
  832. package/packages/gsd-agent-modes/src/modes/interactive/components/tree-render-utils.ts +0 -81
  833. package/packages/gsd-agent-modes/src/modes/interactive/components/tree-selector.ts +0 -1208
  834. package/packages/gsd-agent-modes/src/modes/interactive/components/user-message-selector.ts +0 -145
  835. package/packages/gsd-agent-modes/src/modes/interactive/components/user-message.ts +0 -44
  836. package/packages/gsd-agent-modes/src/modes/interactive/components/visual-truncate.ts +0 -50
  837. package/packages/gsd-agent-modes/src/modes/interactive/controllers/chat-controller-ordering.test.ts +0 -1430
  838. package/packages/gsd-agent-modes/src/modes/interactive/controllers/chat-controller.test.ts +0 -71
  839. package/packages/gsd-agent-modes/src/modes/interactive/controllers/chat-controller.ts +0 -957
  840. package/packages/gsd-agent-modes/src/modes/interactive/controllers/extension-ui-controller.ts +0 -63
  841. package/packages/gsd-agent-modes/src/modes/interactive/controllers/input-controller.test.ts +0 -183
  842. package/packages/gsd-agent-modes/src/modes/interactive/controllers/input-controller.ts +0 -140
  843. package/packages/gsd-agent-modes/src/modes/interactive/controllers/model-controller.ts +0 -77
  844. package/packages/gsd-agent-modes/src/modes/interactive/interactive-mode-ordering.test.ts +0 -44
  845. package/packages/gsd-agent-modes/src/modes/interactive/interactive-mode-state.ts +0 -49
  846. package/packages/gsd-agent-modes/src/modes/interactive/interactive-mode.ts +0 -4195
  847. package/packages/gsd-agent-modes/src/modes/interactive/slash-command-handlers.ts +0 -670
  848. package/packages/gsd-agent-modes/src/modes/interactive/utils/shorten-path.ts +0 -14
  849. package/packages/gsd-agent-modes/src/modes/print-mode.ts +0 -106
  850. package/packages/gsd-agent-modes/src/modes/rpc/jsonl.ts +0 -58
  851. package/packages/gsd-agent-modes/src/modes/rpc/remote-terminal.ts +0 -109
  852. package/packages/gsd-agent-modes/src/modes/rpc/rpc-client.ts +0 -572
  853. package/packages/gsd-agent-modes/src/modes/rpc/rpc-mode.ts +0 -902
  854. package/packages/gsd-agent-modes/src/modes/rpc/rpc-protocol-v2.test.ts +0 -971
  855. package/packages/gsd-agent-modes/src/modes/rpc/rpc-types.ts +0 -335
  856. package/packages/gsd-agent-modes/src/modes/shared/command-context-actions.ts +0 -53
  857. package/packages/gsd-agent-modes/src/pi-coding-agent-compat.ts +0 -42
  858. package/packages/gsd-agent-modes/src/pi-tui-compat.ts +0 -4
  859. package/packages/gsd-agent-modes/src/theme.ts +0 -25
  860. package/packages/gsd-agent-modes/src/utils/theme.ts +0 -24
  861. package/packages/gsd-agent-modes/tsconfig.json +0 -28
  862. package/packages/gsd-agent-modes/tsconfig.tsbuildinfo +0 -1
  863. package/packages/gsd-agent-types/dist/index.d.ts +0 -176
  864. package/packages/gsd-agent-types/dist/index.d.ts.map +0 -1
  865. package/packages/gsd-agent-types/dist/index.js +0 -24
  866. package/packages/gsd-agent-types/dist/index.js.map +0 -1
  867. package/packages/gsd-agent-types/package.json +0 -24
  868. package/packages/gsd-agent-types/src/index.ts +0 -206
  869. package/packages/gsd-agent-types/tsconfig.json +0 -25
  870. package/packages/gsd-agent-types/tsconfig.tsbuildinfo +0 -1
  871. package/packages/native/dist/tsconfig.tsbuildinfo +0 -1
  872. package/src/resources/extensions/claude-code-cli/tests/provider-registration.test.ts +0 -27
  873. /package/dist/web/standalone/.next/static/{gy6_foLMsEzdGBT19c3hr → 5wbu35_C2_MQ3Jj1lEVDx}/_buildManifest.js +0 -0
  874. /package/dist/web/standalone/.next/static/{gy6_foLMsEzdGBT19c3hr → 5wbu35_C2_MQ3Jj1lEVDx}/_ssgManifest.js +0 -0
@@ -1,518 +0,0 @@
1
- /**
2
- * RetryHandler - Automatic retry logic with exponential backoff and credential/provider fallback.
3
- *
4
- * Handles retryable errors (overloaded, rate limit, server errors) by:
5
- * 1. Trying alternate credentials for the same provider
6
- * 2. Falling back to other providers via FallbackResolver
7
- * 3. Exponential backoff with configurable max retries
8
- *
9
- * Context overflow errors are NOT handled here (see compaction).
10
- *
11
- * Extracted from pi-coding-agent 0.57.1 (GSD-authored) and adapted for 0.67.2 Agent API.
12
- */
13
- import { isContextOverflow } from "@gsd/pi-ai";
14
- // Local shim for sleep (not exported from pi-coding-agent 0.67.2 public API).
15
- function sleep(ms, signal) {
16
- return new Promise((resolve, reject) => {
17
- if (signal?.aborted) {
18
- reject(new DOMException("Aborted", "AbortError"));
19
- return;
20
- }
21
- const timer = setTimeout(resolve, ms);
22
- signal?.addEventListener("abort", () => {
23
- clearTimeout(timer);
24
- reject(new DOMException("Aborted", "AbortError"));
25
- });
26
- });
27
- }
28
- export class RetryHandler {
29
- constructor(_deps) {
30
- this._deps = _deps;
31
- this._retryAbortController = undefined;
32
- this._retryAttempt = 0;
33
- this._retryPromise = undefined;
34
- this._retryResolve = undefined;
35
- this._retryGeneration = 0;
36
- this._continueTimeout = undefined;
37
- }
38
- /** Current retry attempt (0 if not retrying) */
39
- get retryAttempt() {
40
- return this._retryAttempt;
41
- }
42
- /** Whether auto-retry is currently in progress */
43
- get isRetrying() {
44
- return this._retryPromise !== undefined;
45
- }
46
- /** Whether auto-retry is enabled */
47
- get autoRetryEnabled() {
48
- return this._deps.settingsManager.getRetryEnabled();
49
- }
50
- /** Toggle auto-retry setting */
51
- setAutoRetryEnabled(enabled) {
52
- this._deps.settingsManager.setRetryEnabled(enabled);
53
- }
54
- /**
55
- * Create a retry promise synchronously for agent_end events.
56
- * Must be called synchronously from the agent event handler before
57
- * any async processing, so that waitForRetry() doesn't miss in-flight retries.
58
- */
59
- createRetryPromiseForAgentEnd(messages) {
60
- if (this._retryPromise)
61
- return;
62
- const settings = this._deps.settingsManager.getRetrySettings();
63
- if (!settings.enabled)
64
- return;
65
- const lastAssistant = this._findLastAssistantInMessages(messages);
66
- if (!lastAssistant || !this.isRetryableError(lastAssistant))
67
- return;
68
- this._retryPromise = new Promise((resolve) => {
69
- this._retryResolve = resolve;
70
- });
71
- }
72
- /**
73
- * Handle a successful assistant response by resetting retry state.
74
- * Call this when an assistant message completes without error.
75
- */
76
- handleSuccessfulResponse() {
77
- if (this._retryAttempt > 0) {
78
- this._deps.emit({
79
- type: "auto_retry_end",
80
- success: true,
81
- attempt: this._retryAttempt,
82
- });
83
- this._retryAttempt = 0;
84
- this._resolveRetry();
85
- }
86
- }
87
- /**
88
- * Check if an error is retryable (overloaded, rate limit, server errors).
89
- * Context overflow errors are NOT retryable (handled by compaction instead).
90
- */
91
- isRetryableError(message) {
92
- if (message.stopReason !== "error" || !message.errorMessage)
93
- return false;
94
- // Context overflow is handled by compaction, not retry
95
- const contextWindow = this._deps.getModel()?.contextWindow ?? 0;
96
- if (isContextOverflow(message, contextWindow))
97
- return false;
98
- const err = message.errorMessage;
99
- // "temporarily backed off" is intentionally excluded: it is an internally-
100
- // generated error from getApiKey() when credentials are in a backoff window.
101
- // Re-entering the retry handler for that message creates a cascade of empty
102
- // error entries in the session file, breaking resume (#3429).
103
- return /overloaded|rate.?limit|too many requests|402|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|requires more credits|can only afford|insufficient credits|not enough credits|extra usage is required|(?:out of|no) extra usage|third.party.*draw from extra|third.party.*not.*available/i.test(err);
104
- }
105
- /**
106
- * Handle retryable errors with exponential backoff.
107
- * When multiple credentials are available, marks the failing credential
108
- * as backed off and retries immediately with the next one.
109
- * @returns true if retry was initiated, false if max retries exceeded or disabled
110
- */
111
- async handleRetryableError(message) {
112
- const settings = this._deps.settingsManager.getRetrySettings();
113
- if (!settings.enabled) {
114
- this._resolveRetry();
115
- return false;
116
- }
117
- // Retry promise is created synchronously in createRetryPromiseForAgentEnd.
118
- // Keep a defensive fallback here in case a future refactor bypasses that path.
119
- if (!this._retryPromise) {
120
- this._retryPromise = new Promise((resolve) => {
121
- this._retryResolve = resolve;
122
- });
123
- }
124
- // Try credential fallback before counting against retry budget.
125
- const retryGeneration = this._retryGeneration;
126
- if (this._deps.getModel() && message.errorMessage) {
127
- // Third-party subscription block (#3772): Anthropic blocks third-party apps
128
- // from using Pro/Max subscription quotas. If the claude-code CLI provider is
129
- // available, switch to it immediately — credential rotation won't help.
130
- if (this._isThirdPartyBlock(message.errorMessage)) {
131
- const switched = this._tryClaudeCodeFallback(message, retryGeneration);
132
- if (switched)
133
- return true;
134
- // CLI not available — fall through to standard error handling
135
- }
136
- const errorType = this._classifyErrorType(message.errorMessage);
137
- const isRateLimit = errorType === "rate_limit";
138
- const isQuotaError = errorType === "quota_exhausted";
139
- // Credit-aware retry (OpenRouter-style 402 affordability errors):
140
- // when provider reports "can only afford N", lower maxTokens and retry
141
- // on the same model before rotating credentials/providers.
142
- if (isQuotaError) {
143
- const adjusted = this._tryAffordableMaxTokensRetry(message, retryGeneration);
144
- if (adjusted)
145
- return true;
146
- }
147
- // Credential rotation — only for transient rate limits (#3430).
148
- // Quota errors ("Extra usage is required") are account-level billing
149
- // gates; rotating to another credential on the same account won't help
150
- // and the 30-minute backoff blocks all provider requests needlessly.
151
- if (isRateLimit) {
152
- // markUsageLimitReached is a GSD extension absent from 0.67.2 AuthStorage —
153
- // use optional chaining via cast so the call is a no-op when the method is absent.
154
- const hasAlternate = this._deps.modelRegistry.authStorage.markUsageLimitReached?.(this._deps.getModel().provider, this._deps.getSessionId(), { errorType }) ?? false;
155
- if (hasAlternate) {
156
- this._removeLastAssistantError();
157
- this._deps.emit({
158
- type: "auto_retry_start",
159
- attempt: this._retryAttempt + 1,
160
- maxAttempts: settings.maxRetries,
161
- delayMs: 0,
162
- errorMessage: `${message.errorMessage} (switching credential)`,
163
- });
164
- // Retry immediately with the next credential - don't increment _retryAttempt
165
- this._scheduleContinue(retryGeneration);
166
- return true;
167
- }
168
- }
169
- // Cross-provider fallback — for rate limits with all creds backed off,
170
- // or quota errors (which skip credential backoff entirely).
171
- if (isRateLimit || isQuotaError) {
172
- // Map RetryErrorType to the FallbackResolver's UsageLimitErrorType.
173
- const fallbackErrorType = isQuotaError ? "quota_exhausted" : "rate_limit";
174
- const fallbackResult = await this._deps.fallbackResolver.findFallback(this._deps.getModel(), fallbackErrorType);
175
- if (fallbackResult) {
176
- const previousProvider = this._deps.getModel().provider;
177
- this._deps.agent.state.model = fallbackResult.model;
178
- this._deps.onModelChange(fallbackResult.model);
179
- this._removeLastAssistantError();
180
- this._deps.emit({
181
- type: "fallback_provider_switch",
182
- from: `${previousProvider}/${this._deps.getModel()?.id}`,
183
- to: `${fallbackResult.model.provider}/${fallbackResult.model.id}`,
184
- reason: fallbackResult.reason,
185
- });
186
- this._deps.emit({
187
- type: "auto_retry_start",
188
- attempt: this._retryAttempt + 1,
189
- maxAttempts: settings.maxRetries,
190
- delayMs: 0,
191
- errorMessage: `${message.errorMessage} (${fallbackResult.reason})`,
192
- });
193
- // Retry immediately with fallback provider - don't increment _retryAttempt
194
- this._scheduleContinue(retryGeneration);
195
- return true;
196
- }
197
- // No fallback available either
198
- if (isQuotaError) {
199
- // Try long-context model downgrade ([1m] → base) before giving up
200
- const downgraded = this._tryLongContextDowngrade(message, retryGeneration);
201
- if (downgraded)
202
- return true;
203
- this._deps.emit({
204
- type: "fallback_chain_exhausted",
205
- reason: `All providers exhausted for ${this._deps.getModel().provider}/${this._deps.getModel().id}`,
206
- });
207
- this._deps.emit({
208
- type: "auto_retry_end",
209
- success: false,
210
- attempt: this._retryAttempt,
211
- finalError: message.errorMessage,
212
- });
213
- this._retryAttempt = 0;
214
- this._resolveRetry();
215
- return false;
216
- }
217
- }
218
- }
219
- this._retryAttempt++;
220
- if (this._retryAttempt > settings.maxRetries) {
221
- this._deps.emit({
222
- type: "auto_retry_end",
223
- success: false,
224
- attempt: this._retryAttempt - 1,
225
- finalError: message.errorMessage,
226
- });
227
- this._retryAttempt = 0;
228
- this._resolveRetry();
229
- return false;
230
- }
231
- // Use server-requested delay when available, capped by maxDelayMs.
232
- // Fall back to exponential backoff when no server hint is present.
233
- const exponentialDelayMs = settings.baseDelayMs * 2 ** (this._retryAttempt - 1);
234
- let delayMs;
235
- if (message.retryAfterMs !== undefined) {
236
- const cap = settings.maxDelayMs > 0 ? settings.maxDelayMs : Infinity;
237
- if (message.retryAfterMs > cap) {
238
- this._deps.emit({
239
- type: "auto_retry_end",
240
- success: false,
241
- attempt: this._retryAttempt - 1,
242
- finalError: `Rate limit reset in ${Math.ceil(message.retryAfterMs / 1000)}s (max: ${Math.ceil(cap / 1000)}s). ${message.errorMessage || ""}`.trim(),
243
- });
244
- this._retryAttempt = 0;
245
- this._resolveRetry();
246
- return false;
247
- }
248
- delayMs = message.retryAfterMs;
249
- }
250
- else {
251
- delayMs = exponentialDelayMs;
252
- }
253
- this._deps.emit({
254
- type: "auto_retry_start",
255
- attempt: this._retryAttempt,
256
- maxAttempts: settings.maxRetries,
257
- delayMs,
258
- errorMessage: message.errorMessage || "Unknown error",
259
- });
260
- this._removeLastAssistantError();
261
- // Wait with exponential backoff (abortable)
262
- this._retryAbortController = new AbortController();
263
- try {
264
- await sleep(delayMs, this._retryAbortController.signal);
265
- }
266
- catch {
267
- // Aborted during sleep. If the retry generation already advanced, this
268
- // cancellation was handled externally (e.g. explicit model switch).
269
- if (retryGeneration !== this._retryGeneration) {
270
- this._retryAbortController = undefined;
271
- return false;
272
- }
273
- const attempt = this._retryAttempt;
274
- this._retryAttempt = 0;
275
- this._retryAbortController = undefined;
276
- this._deps.emit({
277
- type: "auto_retry_end",
278
- success: false,
279
- attempt,
280
- finalError: "Retry cancelled",
281
- });
282
- this._resolveRetry();
283
- return false;
284
- }
285
- this._retryAbortController = undefined;
286
- // Retry via continue() - use setTimeout to break out of event handler chain
287
- this._scheduleContinue(retryGeneration);
288
- return true;
289
- }
290
- /** Cancel in-progress retry */
291
- abortRetry() {
292
- const hadRetry = this._retryPromise !== undefined
293
- || this._retryAbortController !== undefined
294
- || this._continueTimeout !== undefined;
295
- if (!hadRetry)
296
- return;
297
- const attempt = this._retryAttempt > 0 ? this._retryAttempt : 1;
298
- this._retryGeneration++;
299
- if (this._continueTimeout) {
300
- clearTimeout(this._continueTimeout);
301
- this._continueTimeout = undefined;
302
- }
303
- if (this._retryAbortController) {
304
- this._retryAbortController.abort();
305
- this._retryAbortController = undefined;
306
- }
307
- this._retryAttempt = 0;
308
- this._deps.emit({
309
- type: "auto_retry_end",
310
- success: false,
311
- attempt,
312
- finalError: "Retry cancelled",
313
- });
314
- this._resolveRetry();
315
- }
316
- /**
317
- * Wait for any in-progress retry to complete.
318
- * Returns immediately if no retry is in progress.
319
- */
320
- async waitForRetry() {
321
- if (this._retryPromise) {
322
- await this._retryPromise;
323
- }
324
- }
325
- /** Resolve the pending retry promise */
326
- resolveRetry() {
327
- this._resolveRetry();
328
- }
329
- // =========================================================================
330
- // Private helpers
331
- // =========================================================================
332
- _resolveRetry() {
333
- if (this._retryResolve) {
334
- this._retryResolve();
335
- this._retryResolve = undefined;
336
- this._retryPromise = undefined;
337
- }
338
- }
339
- _scheduleContinue(retryGeneration) {
340
- if (this._continueTimeout) {
341
- clearTimeout(this._continueTimeout);
342
- }
343
- this._continueTimeout = setTimeout(() => {
344
- this._continueTimeout = undefined;
345
- if (retryGeneration !== this._retryGeneration)
346
- return;
347
- this._deps.agent.continue().catch(() => { });
348
- }, 0);
349
- }
350
- _findLastAssistantInMessages(messages) {
351
- for (let i = messages.length - 1; i >= 0; i--) {
352
- const message = messages[i];
353
- if (message.role === "assistant") {
354
- return message;
355
- }
356
- }
357
- return undefined;
358
- }
359
- /**
360
- * Classify an error message into a retry error type for backoff decisions.
361
- */
362
- _classifyErrorType(errorMessage) {
363
- const err = errorMessage.toLowerCase();
364
- // Long-context entitlement errors are billing gates, not transient rate limits.
365
- // Must be checked before the generic 429/rate_limit regex.
366
- if (/extra usage is required|long context required/i.test(err))
367
- return "quota_exhausted";
368
- if (/requires more credits|can only afford|insufficient credits|not enough credits|credit balance/i.test(err))
369
- return "quota_exhausted";
370
- if (/quota|billing|exceeded.*limit|usage.*limit/i.test(err))
371
- return "quota_exhausted";
372
- if (/rate.?limit|too many requests|429/i.test(err))
373
- return "rate_limit";
374
- if (/500|502|503|504|server.?error|internal.?error|service.?unavailable/i.test(err))
375
- return "server_error";
376
- return "unknown";
377
- }
378
- /**
379
- * Attempt a same-model retry by reducing maxTokens when provider reports
380
- * an affordability cap (e.g., "can only afford 329").
381
- */
382
- _tryAffordableMaxTokensRetry(message, retryGeneration) {
383
- const currentModel = this._deps.getModel();
384
- if (!currentModel || !message.errorMessage)
385
- return false;
386
- // Example: "can only afford 329"
387
- const match = message.errorMessage.match(/can only afford\s+([\d,]+)/i);
388
- if (!match?.[1])
389
- return false;
390
- const affordable = Number.parseInt(match[1].replace(/,/g, ""), 10);
391
- if (!Number.isFinite(affordable) || affordable <= 0)
392
- return false;
393
- // Leave a small buffer so slight input variance doesn't immediately re-fail.
394
- const safetyBuffer = Math.min(64, Math.max(16, Math.floor(affordable * 0.1)));
395
- const targetMaxTokens = Math.max(64, affordable - safetyBuffer);
396
- const downgradedMaxTokens = Math.min(currentModel.maxTokens, targetMaxTokens);
397
- if (downgradedMaxTokens >= currentModel.maxTokens)
398
- return false;
399
- const downgradedModel = {
400
- ...currentModel,
401
- maxTokens: downgradedMaxTokens,
402
- };
403
- this._deps.agent.state.model = downgradedModel;
404
- this._deps.onModelChange(downgradedModel);
405
- this._removeLastAssistantError();
406
- this._deps.emit({
407
- type: "fallback_provider_switch",
408
- from: `${currentModel.provider}/${currentModel.id} (maxTokens=${currentModel.maxTokens})`,
409
- to: `${downgradedModel.provider}/${downgradedModel.id} (maxTokens=${downgradedModel.maxTokens})`,
410
- reason: `credit-aware retry: provider affordable cap ${affordable} tokens`,
411
- });
412
- this._deps.emit({
413
- type: "auto_retry_start",
414
- attempt: this._retryAttempt + 1,
415
- maxAttempts: this._deps.settingsManager.getRetrySettings().maxRetries,
416
- delayMs: 0,
417
- errorMessage: `${message.errorMessage} (reducing max tokens)`,
418
- });
419
- this._scheduleContinue(retryGeneration);
420
- return true;
421
- }
422
- /**
423
- * Attempt to downgrade a long-context model (e.g. claude-opus-4-6[1m]) to its
424
- * base model (claude-opus-4-6) when the account lacks the long-context billing
425
- * entitlement. Returns true if the downgrade was initiated.
426
- */
427
- _tryLongContextDowngrade(message, retryGeneration) {
428
- const currentModel = this._deps.getModel();
429
- if (!currentModel)
430
- return false;
431
- // Only attempt downgrade for [1m] (or similar long-context) model IDs
432
- const match = currentModel.id.match(/^(.+)\[\d+m\]$/);
433
- if (!match)
434
- return false;
435
- const baseModelId = match[1];
436
- const baseModel = this._deps.modelRegistry.find(currentModel.provider, baseModelId);
437
- if (!baseModel)
438
- return false;
439
- const previousId = currentModel.id;
440
- this._deps.agent.state.model = baseModel;
441
- this._deps.onModelChange(baseModel);
442
- this._removeLastAssistantError();
443
- this._deps.emit({
444
- type: "fallback_provider_switch",
445
- from: `${currentModel.provider}/${previousId}`,
446
- to: `${baseModel.provider}/${baseModel.id}`,
447
- reason: `long context downgrade: ${previousId} → ${baseModel.id}`,
448
- });
449
- this._deps.emit({
450
- type: "auto_retry_start",
451
- attempt: this._retryAttempt + 1,
452
- maxAttempts: this._deps.settingsManager.getRetrySettings().maxRetries,
453
- delayMs: 0,
454
- errorMessage: `${message.errorMessage} (long context downgrade)`,
455
- });
456
- this._scheduleContinue(retryGeneration);
457
- return true;
458
- }
459
- /**
460
- * Detect Anthropic subscription block errors (#3772).
461
- * These are hard policy blocks, not transient rate limits — credential
462
- * rotation will not help. Matches both the explicit "third-party" message
463
- * and the "out of extra usage" variant that subscription users receive.
464
- */
465
- _isThirdPartyBlock(errorMessage) {
466
- return /third[- .]party.*(?:draw from extra|not.*available|plan limits|not permitted|cannot be used|not supported)|(?:out of|no) extra usage/i.test(errorMessage);
467
- }
468
- /**
469
- * Attempt to switch to the claude-code CLI provider when the current
470
- * Anthropic provider is blocked by the third-party policy (#3772).
471
- * Returns true if the switch was made and retry scheduled.
472
- */
473
- _tryClaudeCodeFallback(message, retryGeneration) {
474
- if (!this._deps.isClaudeCodeReady?.())
475
- return false;
476
- const currentModel = this._deps.getModel();
477
- if (!currentModel)
478
- return false;
479
- // Only attempt claude-code fallback when the current provider is anthropic.
480
- // Transport-specific (ADR-012): intentionally keys on provider, not api —
481
- // the fallback specifically reroutes the plain `anthropic` transport to
482
- // the `claude-code` transport. Other Anthropic-fronting transports
483
- // (anthropic-vertex, amazon-bedrock) must not be rerouted.
484
- if (currentModel.provider !== "anthropic")
485
- return false;
486
- // Find the same model ID under the claude-code provider
487
- const ccModel = this._deps.modelRegistry.find("claude-code", currentModel.id);
488
- if (!ccModel)
489
- return false;
490
- const previousProvider = currentModel.provider;
491
- this._deps.agent.state.model = ccModel;
492
- this._deps.onModelChange(ccModel);
493
- this._removeLastAssistantError();
494
- this._deps.emit({
495
- type: "fallback_provider_switch",
496
- from: `${previousProvider}/${currentModel.id}`,
497
- to: `claude-code/${ccModel.id}`,
498
- reason: "Anthropic subscription blocked for third-party apps — routing through Claude Code CLI",
499
- });
500
- this._deps.emit({
501
- type: "auto_retry_start",
502
- attempt: this._retryAttempt + 1,
503
- maxAttempts: this._deps.settingsManager.getRetrySettings().maxRetries,
504
- delayMs: 0,
505
- errorMessage: `${message.errorMessage} (switching to Claude Code CLI)`,
506
- });
507
- this._scheduleContinue(retryGeneration);
508
- return true;
509
- }
510
- /** Remove the last assistant error message from agent state */
511
- _removeLastAssistantError() {
512
- const messages = this._deps.agent.state.messages;
513
- if (messages.length > 0 && messages[messages.length - 1].role === "assistant") {
514
- this._deps.agent.state.messages = messages.slice(0, -1);
515
- }
516
- }
517
- }
518
- //# sourceMappingURL=retry-handler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"retry-handler.js","sourceRoot":"","sources":["../src/retry-handler.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * RetryHandler - Automatic retry logic with exponential backoff and credential/provider fallback.\n *\n * Handles retryable errors (overloaded, rate limit, server errors) by:\n * 1. Trying alternate credentials for the same provider\n * 2. Falling back to other providers via FallbackResolver\n * 3. Exponential backoff with configurable max retries\n *\n * Context overflow errors are NOT handled here (see compaction).\n *\n * Extracted from pi-coding-agent 0.57.1 (GSD-authored) and adapted for 0.67.2 Agent API.\n */\n\nimport type { Agent } from \"@gsd/pi-agent-core\";\nimport type { Api, AssistantMessage, Model } from \"@gsd/pi-ai\";\nimport { isContextOverflow } from \"@gsd/pi-ai\";\nimport type { FallbackResolver } from \"./fallback-resolver.js\";\nimport type { ModelRegistry } from \"@gsd/agent-types\";\nimport type { SettingsManager } from \"@gsd/agent-types\";\nimport type { AgentSessionEvent } from \"./agent-session.js\";\n\n// Local error classification type for retry decisions. Distinct from FallbackResolver's\n// UsageLimitErrorType (which is used for cross-provider fallback).\n// Phase 09 may consolidate these in @gsd/agent-types.\ntype RetryErrorType = \"rate_limit\" | \"quota_exhausted\" | \"server_error\" | \"unknown\";\n\n// GSD extension to AssistantMessage — carries a server-provided retry hint.\n// `retryAfterMs` was removed from pi-ai's AssistantMessage in 0.67.2.\n// The retry handler uses it when present (from provider-specific error parsing).\ninterface GsdAssistantMessage extends AssistantMessage {\n\tretryAfterMs?: number;\n}\n\n// Local shim for sleep (not exported from pi-coding-agent 0.67.2 public API).\nfunction sleep(ms: number, signal?: AbortSignal): Promise<void> {\n\treturn new Promise((resolve, reject) => {\n\t\tif (signal?.aborted) {\n\t\t\treject(new DOMException(\"Aborted\", \"AbortError\"));\n\t\t\treturn;\n\t\t}\n\t\tconst timer = setTimeout(resolve, ms);\n\t\tsignal?.addEventListener(\"abort\", () => {\n\t\t\tclearTimeout(timer);\n\t\t\treject(new DOMException(\"Aborted\", \"AbortError\"));\n\t\t});\n\t});\n}\n\n/** Minimal ModelRegistry surface needed by RetryHandler. */\ninterface ModelRegistryWithAuth extends ModelRegistry {\n\tfind(provider: string, modelId: string): Model<Api> | undefined;\n}\n\n/** Dependencies injected from AgentSession into RetryHandler */\nexport interface RetryHandlerDeps {\n\treadonly agent: Agent;\n\treadonly settingsManager: SettingsManager;\n\treadonly modelRegistry: ModelRegistryWithAuth;\n\treadonly fallbackResolver: FallbackResolver;\n\tgetModel: () => Model<Api> | undefined;\n\tgetSessionId: () => string;\n\temit: (event: AgentSessionEvent) => void;\n\t/** Called when the retry handler switches to a fallback model */\n\tonModelChange: (model: Model<Api>) => void;\n\t/** Optional: check if the claude-code CLI provider is ready (installed + authed).\n\t * Injected from the app layer to preserve package boundary. */\n\tisClaudeCodeReady?: () => boolean;\n}\n\nexport class RetryHandler {\n\tprivate _retryAbortController: AbortController | undefined = undefined;\n\tprivate _retryAttempt = 0;\n\tprivate _retryPromise: Promise<void> | undefined = undefined;\n\tprivate _retryResolve: (() => void) | undefined = undefined;\n\tprivate _retryGeneration = 0;\n\tprivate _continueTimeout: ReturnType<typeof setTimeout> | undefined = undefined;\n\n\tconstructor(private readonly _deps: RetryHandlerDeps) {}\n\n\t/** Current retry attempt (0 if not retrying) */\n\tget retryAttempt(): number {\n\t\treturn this._retryAttempt;\n\t}\n\n\t/** Whether auto-retry is currently in progress */\n\tget isRetrying(): boolean {\n\t\treturn this._retryPromise !== undefined;\n\t}\n\n\t/** Whether auto-retry is enabled */\n\tget autoRetryEnabled(): boolean {\n\t\treturn this._deps.settingsManager.getRetryEnabled();\n\t}\n\n\t/** Toggle auto-retry setting */\n\tsetAutoRetryEnabled(enabled: boolean): void {\n\t\tthis._deps.settingsManager.setRetryEnabled(enabled);\n\t}\n\n\t/**\n\t * Create a retry promise synchronously for agent_end events.\n\t * Must be called synchronously from the agent event handler before\n\t * any async processing, so that waitForRetry() doesn't miss in-flight retries.\n\t */\n\tcreateRetryPromiseForAgentEnd(messages: ReadonlyArray<{ role: string; [key: string]: unknown }>): void {\n\t\tif (this._retryPromise) return;\n\n\t\tconst settings = this._deps.settingsManager.getRetrySettings();\n\t\tif (!settings.enabled) return;\n\n\t\tconst lastAssistant = this._findLastAssistantInMessages(messages as Array<{ role: string } & Record<string, unknown>>);\n\t\tif (!lastAssistant || !this.isRetryableError(lastAssistant)) return;\n\n\t\tthis._retryPromise = new Promise((resolve) => {\n\t\t\tthis._retryResolve = resolve;\n\t\t});\n\t}\n\n\t/**\n\t * Handle a successful assistant response by resetting retry state.\n\t * Call this when an assistant message completes without error.\n\t */\n\thandleSuccessfulResponse(): void {\n\t\tif (this._retryAttempt > 0) {\n\t\t\tthis._deps.emit({\n\t\t\t\ttype: \"auto_retry_end\",\n\t\t\t\tsuccess: true,\n\t\t\t\tattempt: this._retryAttempt,\n\t\t\t});\n\t\t\tthis._retryAttempt = 0;\n\t\t\tthis._resolveRetry();\n\t\t}\n\t}\n\n\t/**\n\t * Check if an error is retryable (overloaded, rate limit, server errors).\n\t * Context overflow errors are NOT retryable (handled by compaction instead).\n\t */\n\tisRetryableError(message: GsdAssistantMessage): boolean {\n\t\tif (message.stopReason !== \"error\" || !message.errorMessage) return false;\n\n\t\t// Context overflow is handled by compaction, not retry\n\t\tconst contextWindow = this._deps.getModel()?.contextWindow ?? 0;\n\t\tif (isContextOverflow(message, contextWindow)) return false;\n\n\t\tconst err = message.errorMessage;\n\t\t// \"temporarily backed off\" is intentionally excluded: it is an internally-\n\t\t// generated error from getApiKey() when credentials are in a backoff window.\n\t\t// Re-entering the retry handler for that message creates a cascade of empty\n\t\t// error entries in the session file, breaking resume (#3429).\n\t\treturn /overloaded|rate.?limit|too many requests|402|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|requires more credits|can only afford|insufficient credits|not enough credits|extra usage is required|(?:out of|no) extra usage|third.party.*draw from extra|third.party.*not.*available/i.test(\n\t\t\terr,\n\t\t);\n\t}\n\n\t/**\n\t * Handle retryable errors with exponential backoff.\n\t * When multiple credentials are available, marks the failing credential\n\t * as backed off and retries immediately with the next one.\n\t * @returns true if retry was initiated, false if max retries exceeded or disabled\n\t */\n\tasync handleRetryableError(message: GsdAssistantMessage): Promise<boolean> {\n\t\tconst settings = this._deps.settingsManager.getRetrySettings();\n\t\tif (!settings.enabled) {\n\t\t\tthis._resolveRetry();\n\t\t\treturn false;\n\t\t}\n\n\t\t// Retry promise is created synchronously in createRetryPromiseForAgentEnd.\n\t\t// Keep a defensive fallback here in case a future refactor bypasses that path.\n\t\tif (!this._retryPromise) {\n\t\t\tthis._retryPromise = new Promise((resolve) => {\n\t\t\t\tthis._retryResolve = resolve;\n\t\t\t});\n\t\t}\n\n\t\t// Try credential fallback before counting against retry budget.\n\t\tconst retryGeneration = this._retryGeneration;\n\t\tif (this._deps.getModel() && message.errorMessage) {\n\t\t\t// Third-party subscription block (#3772): Anthropic blocks third-party apps\n\t\t\t// from using Pro/Max subscription quotas. If the claude-code CLI provider is\n\t\t\t// available, switch to it immediately — credential rotation won't help.\n\t\t\tif (this._isThirdPartyBlock(message.errorMessage)) {\n\t\t\t\tconst switched = this._tryClaudeCodeFallback(message, retryGeneration);\n\t\t\t\tif (switched) return true;\n\t\t\t\t// CLI not available — fall through to standard error handling\n\t\t\t}\n\n\t\t\tconst errorType = this._classifyErrorType(message.errorMessage);\n\t\t\tconst isRateLimit = errorType === \"rate_limit\";\n\t\t\tconst isQuotaError = errorType === \"quota_exhausted\";\n\n\t\t\t// Credit-aware retry (OpenRouter-style 402 affordability errors):\n\t\t\t// when provider reports \"can only afford N\", lower maxTokens and retry\n\t\t\t// on the same model before rotating credentials/providers.\n\t\t\tif (isQuotaError) {\n\t\t\t\tconst adjusted = this._tryAffordableMaxTokensRetry(message, retryGeneration);\n\t\t\t\tif (adjusted) return true;\n\t\t\t}\n\n\t\t\t// Credential rotation — only for transient rate limits (#3430).\n\t\t\t// Quota errors (\"Extra usage is required\") are account-level billing\n\t\t\t// gates; rotating to another credential on the same account won't help\n\t\t\t// and the 30-minute backoff blocks all provider requests needlessly.\n\t\t\tif (isRateLimit) {\n\t\t\t\t// markUsageLimitReached is a GSD extension absent from 0.67.2 AuthStorage —\n\t\t\t// use optional chaining via cast so the call is a no-op when the method is absent.\n\t\t\tconst hasAlternate =\n\t\t\t\t\t(this._deps.modelRegistry.authStorage as unknown as {\n\t\t\t\t\t\tmarkUsageLimitReached?: (provider: string, sessionId: string, opts: { errorType: string }) => boolean;\n\t\t\t\t\t}).markUsageLimitReached?.(\n\t\t\t\t\t\tthis._deps.getModel()!.provider,\n\t\t\t\t\t\tthis._deps.getSessionId(),\n\t\t\t\t\t\t{ errorType },\n\t\t\t\t\t) ?? false;\n\n\t\t\t\tif (hasAlternate) {\n\t\t\t\t\tthis._removeLastAssistantError();\n\n\t\t\t\t\tthis._deps.emit({\n\t\t\t\t\t\ttype: \"auto_retry_start\",\n\t\t\t\t\t\tattempt: this._retryAttempt + 1,\n\t\t\t\t\t\tmaxAttempts: settings.maxRetries,\n\t\t\t\t\t\tdelayMs: 0,\n\t\t\t\t\t\terrorMessage: `${message.errorMessage} (switching credential)`,\n\t\t\t\t\t});\n\n\t\t\t\t\t// Retry immediately with the next credential - don't increment _retryAttempt\n\t\t\t\t\tthis._scheduleContinue(retryGeneration);\n\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Cross-provider fallback — for rate limits with all creds backed off,\n\t\t\t// or quota errors (which skip credential backoff entirely).\n\t\t\tif (isRateLimit || isQuotaError) {\n\t\t\t\t\t// Map RetryErrorType to the FallbackResolver's UsageLimitErrorType.\n\t\t\t\t\tconst fallbackErrorType = isQuotaError ? \"quota_exhausted\" : \"rate_limit\";\n\t\t\t\tconst fallbackResult = await this._deps.fallbackResolver.findFallback(\n\t\t\t\t\tthis._deps.getModel()!,\n\t\t\t\t\tfallbackErrorType,\n\t\t\t\t);\n\n\t\t\t\tif (fallbackResult) {\n\t\t\t\t\tconst previousProvider = this._deps.getModel()!.provider;\n\t\t\t\t\tthis._deps.agent.state.model = fallbackResult.model;\n\t\t\t\t\tthis._deps.onModelChange(fallbackResult.model);\n\t\t\t\t\tthis._removeLastAssistantError();\n\n\t\t\t\t\tthis._deps.emit({\n\t\t\t\t\t\ttype: \"fallback_provider_switch\",\n\t\t\t\t\t\tfrom: `${previousProvider}/${this._deps.getModel()?.id}`,\n\t\t\t\t\t\tto: `${fallbackResult.model.provider}/${fallbackResult.model.id}`,\n\t\t\t\t\t\treason: fallbackResult.reason,\n\t\t\t\t\t});\n\n\t\t\t\t\tthis._deps.emit({\n\t\t\t\t\t\ttype: \"auto_retry_start\",\n\t\t\t\t\t\tattempt: this._retryAttempt + 1,\n\t\t\t\t\t\tmaxAttempts: settings.maxRetries,\n\t\t\t\t\t\tdelayMs: 0,\n\t\t\t\t\t\terrorMessage: `${message.errorMessage} (${fallbackResult.reason})`,\n\t\t\t\t\t});\n\n\t\t\t\t\t// Retry immediately with fallback provider - don't increment _retryAttempt\n\t\t\t\t\tthis._scheduleContinue(retryGeneration);\n\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\t// No fallback available either\n\t\t\t\tif (isQuotaError) {\n\t\t\t\t\t// Try long-context model downgrade ([1m] → base) before giving up\n\t\t\t\t\tconst downgraded = this._tryLongContextDowngrade(message, retryGeneration);\n\t\t\t\t\tif (downgraded) return true;\n\n\t\t\t\t\tthis._deps.emit({\n\t\t\t\t\t\ttype: \"fallback_chain_exhausted\",\n\t\t\t\t\t\treason: `All providers exhausted for ${this._deps.getModel()!.provider}/${this._deps.getModel()!.id}`,\n\t\t\t\t\t});\n\t\t\t\t\tthis._deps.emit({\n\t\t\t\t\t\ttype: \"auto_retry_end\",\n\t\t\t\t\t\tsuccess: false,\n\t\t\t\t\t\tattempt: this._retryAttempt,\n\t\t\t\t\t\tfinalError: message.errorMessage,\n\t\t\t\t\t});\n\t\t\t\t\tthis._retryAttempt = 0;\n\t\t\t\t\tthis._resolveRetry();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis._retryAttempt++;\n\n\t\tif (this._retryAttempt > settings.maxRetries) {\n\t\t\tthis._deps.emit({\n\t\t\t\ttype: \"auto_retry_end\",\n\t\t\t\tsuccess: false,\n\t\t\t\tattempt: this._retryAttempt - 1,\n\t\t\t\tfinalError: message.errorMessage,\n\t\t\t});\n\t\t\tthis._retryAttempt = 0;\n\t\t\tthis._resolveRetry();\n\t\t\treturn false;\n\t\t}\n\n\t\t// Use server-requested delay when available, capped by maxDelayMs.\n\t\t// Fall back to exponential backoff when no server hint is present.\n\t\tconst exponentialDelayMs = settings.baseDelayMs * 2 ** (this._retryAttempt - 1);\n\t\tlet delayMs: number;\n\t\tif (message.retryAfterMs !== undefined) {\n\t\t\tconst cap = settings.maxDelayMs > 0 ? settings.maxDelayMs : Infinity;\n\t\t\tif (message.retryAfterMs > cap) {\n\t\t\t\tthis._deps.emit({\n\t\t\t\t\ttype: \"auto_retry_end\",\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\tattempt: this._retryAttempt - 1,\n\t\t\t\t\tfinalError: `Rate limit reset in ${Math.ceil(message.retryAfterMs / 1000)}s (max: ${Math.ceil(cap / 1000)}s). ${message.errorMessage || \"\"}`.trim(),\n\t\t\t\t});\n\t\t\t\tthis._retryAttempt = 0;\n\t\t\t\tthis._resolveRetry();\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tdelayMs = message.retryAfterMs;\n\t\t} else {\n\t\t\tdelayMs = exponentialDelayMs;\n\t\t}\n\n\t\tthis._deps.emit({\n\t\t\ttype: \"auto_retry_start\",\n\t\t\tattempt: this._retryAttempt,\n\t\t\tmaxAttempts: settings.maxRetries,\n\t\t\tdelayMs,\n\t\t\terrorMessage: message.errorMessage || \"Unknown error\",\n\t\t});\n\n\t\tthis._removeLastAssistantError();\n\n\t\t// Wait with exponential backoff (abortable)\n\t\tthis._retryAbortController = new AbortController();\n\t\ttry {\n\t\t\tawait sleep(delayMs, this._retryAbortController.signal);\n\t\t} catch {\n\t\t\t// Aborted during sleep. If the retry generation already advanced, this\n\t\t\t// cancellation was handled externally (e.g. explicit model switch).\n\t\t\tif (retryGeneration !== this._retryGeneration) {\n\t\t\t\tthis._retryAbortController = undefined;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst attempt = this._retryAttempt;\n\t\t\tthis._retryAttempt = 0;\n\t\t\tthis._retryAbortController = undefined;\n\t\t\tthis._deps.emit({\n\t\t\t\ttype: \"auto_retry_end\",\n\t\t\t\tsuccess: false,\n\t\t\t\tattempt,\n\t\t\t\tfinalError: \"Retry cancelled\",\n\t\t\t});\n\t\t\tthis._resolveRetry();\n\t\t\treturn false;\n\t\t}\n\t\tthis._retryAbortController = undefined;\n\n\t\t// Retry via continue() - use setTimeout to break out of event handler chain\n\t\tthis._scheduleContinue(retryGeneration);\n\n\t\treturn true;\n\t}\n\n\t/** Cancel in-progress retry */\n\tabortRetry(): void {\n\t\tconst hadRetry =\n\t\t\tthis._retryPromise !== undefined\n\t\t\t|| this._retryAbortController !== undefined\n\t\t\t|| this._continueTimeout !== undefined;\n\t\tif (!hadRetry) return;\n\n\t\tconst attempt = this._retryAttempt > 0 ? this._retryAttempt : 1;\n\t\tthis._retryGeneration++;\n\t\tif (this._continueTimeout) {\n\t\t\tclearTimeout(this._continueTimeout);\n\t\t\tthis._continueTimeout = undefined;\n\t\t}\n\t\tif (this._retryAbortController) {\n\t\t\tthis._retryAbortController.abort();\n\t\t\tthis._retryAbortController = undefined;\n\t\t}\n\t\tthis._retryAttempt = 0;\n\t\tthis._deps.emit({\n\t\t\ttype: \"auto_retry_end\",\n\t\t\tsuccess: false,\n\t\t\tattempt,\n\t\t\tfinalError: \"Retry cancelled\",\n\t\t});\n\t\tthis._resolveRetry();\n\t}\n\n\t/**\n\t * Wait for any in-progress retry to complete.\n\t * Returns immediately if no retry is in progress.\n\t */\n\tasync waitForRetry(): Promise<void> {\n\t\tif (this._retryPromise) {\n\t\t\tawait this._retryPromise;\n\t\t}\n\t}\n\n\t/** Resolve the pending retry promise */\n\tresolveRetry(): void {\n\t\tthis._resolveRetry();\n\t}\n\n\t// =========================================================================\n\t// Private helpers\n\t// =========================================================================\n\n\tprivate _resolveRetry(): void {\n\t\tif (this._retryResolve) {\n\t\t\tthis._retryResolve();\n\t\t\tthis._retryResolve = undefined;\n\t\t\tthis._retryPromise = undefined;\n\t\t}\n\t}\n\n\tprivate _scheduleContinue(retryGeneration: number): void {\n\t\tif (this._continueTimeout) {\n\t\t\tclearTimeout(this._continueTimeout);\n\t\t}\n\t\tthis._continueTimeout = setTimeout(() => {\n\t\t\tthis._continueTimeout = undefined;\n\t\t\tif (retryGeneration !== this._retryGeneration) return;\n\t\t\tthis._deps.agent.continue().catch(() => {});\n\t\t}, 0);\n\t}\n\n\tprivate _findLastAssistantInMessages(\n\t\tmessages: Array<{ role: string } & Record<string, unknown>>,\n\t): GsdAssistantMessage | undefined {\n\t\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\t\tconst message = messages[i];\n\t\t\tif (message.role === \"assistant\") {\n\t\t\t\treturn message as unknown as GsdAssistantMessage;\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * Classify an error message into a retry error type for backoff decisions.\n\t */\n\tprivate _classifyErrorType(errorMessage: string): RetryErrorType {\n\t\tconst err = errorMessage.toLowerCase();\n\t\t// Long-context entitlement errors are billing gates, not transient rate limits.\n\t\t// Must be checked before the generic 429/rate_limit regex.\n\t\tif (/extra usage is required|long context required/i.test(err)) return \"quota_exhausted\";\n\t\tif (/requires more credits|can only afford|insufficient credits|not enough credits|credit balance/i.test(err))\n\t\t\treturn \"quota_exhausted\";\n\t\tif (/quota|billing|exceeded.*limit|usage.*limit/i.test(err)) return \"quota_exhausted\";\n\t\tif (/rate.?limit|too many requests|429/i.test(err)) return \"rate_limit\";\n\t\tif (/500|502|503|504|server.?error|internal.?error|service.?unavailable/i.test(err)) return \"server_error\";\n\t\treturn \"unknown\";\n\t}\n\n\t/**\n\t * Attempt a same-model retry by reducing maxTokens when provider reports\n\t * an affordability cap (e.g., \"can only afford 329\").\n\t */\n\tprivate _tryAffordableMaxTokensRetry(message: GsdAssistantMessage, retryGeneration: number): boolean {\n\t\tconst currentModel = this._deps.getModel();\n\t\tif (!currentModel || !message.errorMessage) return false;\n\n\t\t// Example: \"can only afford 329\"\n\t\tconst match = message.errorMessage.match(/can only afford\\s+([\\d,]+)/i);\n\t\tif (!match?.[1]) return false;\n\n\t\tconst affordable = Number.parseInt(match[1].replace(/,/g, \"\"), 10);\n\t\tif (!Number.isFinite(affordable) || affordable <= 0) return false;\n\n\t\t// Leave a small buffer so slight input variance doesn't immediately re-fail.\n\t\tconst safetyBuffer = Math.min(64, Math.max(16, Math.floor(affordable * 0.1)));\n\t\tconst targetMaxTokens = Math.max(64, affordable - safetyBuffer);\n\t\tconst downgradedMaxTokens = Math.min(currentModel.maxTokens, targetMaxTokens);\n\t\tif (downgradedMaxTokens >= currentModel.maxTokens) return false;\n\n\t\tconst downgradedModel = {\n\t\t\t...currentModel,\n\t\t\tmaxTokens: downgradedMaxTokens,\n\t\t};\n\n\t\tthis._deps.agent.state.model = downgradedModel;\n\t\tthis._deps.onModelChange(downgradedModel);\n\t\tthis._removeLastAssistantError();\n\n\t\tthis._deps.emit({\n\t\t\ttype: \"fallback_provider_switch\",\n\t\t\tfrom: `${currentModel.provider}/${currentModel.id} (maxTokens=${currentModel.maxTokens})`,\n\t\t\tto: `${downgradedModel.provider}/${downgradedModel.id} (maxTokens=${downgradedModel.maxTokens})`,\n\t\t\treason: `credit-aware retry: provider affordable cap ${affordable} tokens`,\n\t\t});\n\n\t\tthis._deps.emit({\n\t\t\ttype: \"auto_retry_start\",\n\t\t\tattempt: this._retryAttempt + 1,\n\t\t\tmaxAttempts: this._deps.settingsManager.getRetrySettings().maxRetries,\n\t\t\tdelayMs: 0,\n\t\t\terrorMessage: `${message.errorMessage} (reducing max tokens)`,\n\t\t});\n\n\t\tthis._scheduleContinue(retryGeneration);\n\t\treturn true;\n\t}\n\n\t/**\n\t * Attempt to downgrade a long-context model (e.g. claude-opus-4-6[1m]) to its\n\t * base model (claude-opus-4-6) when the account lacks the long-context billing\n\t * entitlement. Returns true if the downgrade was initiated.\n\t */\n\tprivate _tryLongContextDowngrade(message: GsdAssistantMessage, retryGeneration: number): boolean {\n\t\tconst currentModel = this._deps.getModel();\n\t\tif (!currentModel) return false;\n\n\t\t// Only attempt downgrade for [1m] (or similar long-context) model IDs\n\t\tconst match = currentModel.id.match(/^(.+)\\[\\d+m\\]$/);\n\t\tif (!match) return false;\n\n\t\tconst baseModelId = match[1];\n\t\tconst baseModel = this._deps.modelRegistry.find(currentModel.provider, baseModelId);\n\t\tif (!baseModel) return false;\n\n\t\tconst previousId = currentModel.id;\n\t\tthis._deps.agent.state.model = baseModel;\n\t\tthis._deps.onModelChange(baseModel);\n\t\tthis._removeLastAssistantError();\n\n\t\tthis._deps.emit({\n\t\t\ttype: \"fallback_provider_switch\",\n\t\t\tfrom: `${currentModel.provider}/${previousId}`,\n\t\t\tto: `${baseModel.provider}/${baseModel.id}`,\n\t\t\treason: `long context downgrade: ${previousId} → ${baseModel.id}`,\n\t\t});\n\n\t\tthis._deps.emit({\n\t\t\ttype: \"auto_retry_start\",\n\t\t\tattempt: this._retryAttempt + 1,\n\t\t\tmaxAttempts: this._deps.settingsManager.getRetrySettings().maxRetries,\n\t\t\tdelayMs: 0,\n\t\t\terrorMessage: `${message.errorMessage} (long context downgrade)`,\n\t\t});\n\n\t\tthis._scheduleContinue(retryGeneration);\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Detect Anthropic subscription block errors (#3772).\n\t * These are hard policy blocks, not transient rate limits — credential\n\t * rotation will not help. Matches both the explicit \"third-party\" message\n\t * and the \"out of extra usage\" variant that subscription users receive.\n\t */\n\tprivate _isThirdPartyBlock(errorMessage: string): boolean {\n\t\treturn /third[- .]party.*(?:draw from extra|not.*available|plan limits|not permitted|cannot be used|not supported)|(?:out of|no) extra usage/i.test(errorMessage);\n\t}\n\n\t/**\n\t * Attempt to switch to the claude-code CLI provider when the current\n\t * Anthropic provider is blocked by the third-party policy (#3772).\n\t * Returns true if the switch was made and retry scheduled.\n\t */\n\tprivate _tryClaudeCodeFallback(message: GsdAssistantMessage, retryGeneration: number): boolean {\n\t\tif (!this._deps.isClaudeCodeReady?.()) return false;\n\n\t\tconst currentModel = this._deps.getModel();\n\t\tif (!currentModel) return false;\n\n\t\t// Only attempt claude-code fallback when the current provider is anthropic.\n\t\t// Transport-specific (ADR-012): intentionally keys on provider, not api —\n\t\t// the fallback specifically reroutes the plain `anthropic` transport to\n\t\t// the `claude-code` transport. Other Anthropic-fronting transports\n\t\t// (anthropic-vertex, amazon-bedrock) must not be rerouted.\n\t\tif (currentModel.provider !== \"anthropic\") return false;\n\n\t\t// Find the same model ID under the claude-code provider\n\t\tconst ccModel = this._deps.modelRegistry.find(\"claude-code\", currentModel.id);\n\t\tif (!ccModel) return false;\n\n\t\tconst previousProvider = currentModel.provider;\n\t\tthis._deps.agent.state.model = ccModel;\n\t\tthis._deps.onModelChange(ccModel);\n\t\tthis._removeLastAssistantError();\n\n\t\tthis._deps.emit({\n\t\t\ttype: \"fallback_provider_switch\",\n\t\t\tfrom: `${previousProvider}/${currentModel.id}`,\n\t\t\tto: `claude-code/${ccModel.id}`,\n\t\t\treason: \"Anthropic subscription blocked for third-party apps — routing through Claude Code CLI\",\n\t\t});\n\n\t\tthis._deps.emit({\n\t\t\ttype: \"auto_retry_start\",\n\t\t\tattempt: this._retryAttempt + 1,\n\t\t\tmaxAttempts: this._deps.settingsManager.getRetrySettings().maxRetries,\n\t\t\tdelayMs: 0,\n\t\t\terrorMessage: `${message.errorMessage} (switching to Claude Code CLI)`,\n\t\t});\n\n\t\tthis._scheduleContinue(retryGeneration);\n\t\treturn true;\n\t}\n\n\t/** Remove the last assistant error message from agent state */\n\tprivate _removeLastAssistantError(): void {\n\t\tconst messages = this._deps.agent.state.messages;\n\t\tif (messages.length > 0 && messages[messages.length - 1].role === \"assistant\") {\n\t\t\tthis._deps.agent.state.messages = messages.slice(0, -1);\n\t\t}\n\t}\n}\n"]}