gsd-pi 2.76.0 → 2.77.0-dev.2daa994b6

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 (1159) hide show
  1. package/README.md +32 -30
  2. package/dist/claude-cli-check.js +32 -3
  3. package/dist/cli-web-branch.d.ts +1 -0
  4. package/dist/cli-web-branch.js +3 -0
  5. package/dist/cli.js +38 -2
  6. package/dist/extension-discovery.d.ts +6 -0
  7. package/dist/extension-discovery.js +37 -0
  8. package/dist/extension-registry.d.ts +3 -0
  9. package/dist/extension-sort.d.ts +18 -0
  10. package/dist/extension-sort.js +114 -0
  11. package/dist/extension-validator.d.ts +47 -0
  12. package/dist/extension-validator.js +127 -0
  13. package/dist/headless.js +25 -4
  14. package/dist/loader.js +35 -7
  15. package/dist/mcp-server.d.ts +7 -0
  16. package/dist/mcp-server.js +35 -1
  17. package/dist/onboarding.js +45 -0
  18. package/dist/provider-migrations.d.ts +18 -0
  19. package/dist/provider-migrations.js +14 -0
  20. package/dist/resource-loader.d.ts +41 -1
  21. package/dist/resource-loader.js +34 -21
  22. package/dist/resources/agents/researcher.md +1 -1
  23. package/dist/resources/extensions/browser-tools/capture.js +9 -0
  24. package/dist/resources/extensions/browser-tools/tests/browser-tools-integration.test.mjs +8 -59
  25. package/dist/resources/extensions/browser-tools/tests/browser-tools-unit.test.cjs +36 -24
  26. package/dist/resources/extensions/browser-tools/tests/capture-sharp-optional.test.cjs +69 -71
  27. package/dist/resources/extensions/browser-tools/tools/forms.js +5 -1
  28. package/dist/resources/extensions/browser-tools/tools/intent.js +5 -1
  29. package/dist/resources/extensions/claude-code-cli/readiness.js +31 -8
  30. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +144 -63
  31. package/dist/resources/extensions/cmux/index.js +20 -0
  32. package/dist/resources/extensions/github-sync/templates.js +103 -0
  33. package/dist/resources/extensions/google-search/extension-manifest.json +5 -4
  34. package/dist/resources/extensions/google-search/index.js +3 -375
  35. package/dist/resources/extensions/gsd/abandon-detect.js +44 -0
  36. package/dist/resources/extensions/gsd/auto/loop.js +90 -2
  37. package/dist/resources/extensions/gsd/auto/phases.js +150 -46
  38. package/dist/resources/extensions/gsd/auto/resolve.js +24 -0
  39. package/dist/resources/extensions/gsd/auto/run-unit.js +48 -4
  40. package/dist/resources/extensions/gsd/auto/session.js +28 -1
  41. package/dist/resources/extensions/gsd/auto/turn-epoch.js +95 -0
  42. package/dist/resources/extensions/gsd/auto-dispatch.js +152 -25
  43. package/dist/resources/extensions/gsd/auto-loop.js +1 -1
  44. package/dist/resources/extensions/gsd/auto-model-selection.js +53 -16
  45. package/dist/resources/extensions/gsd/auto-post-unit.js +169 -2
  46. package/dist/resources/extensions/gsd/auto-prompts.js +386 -104
  47. package/dist/resources/extensions/gsd/auto-recovery.js +46 -1
  48. package/dist/resources/extensions/gsd/auto-start.js +159 -84
  49. package/dist/resources/extensions/gsd/auto-timeout-recovery.js +11 -5
  50. package/dist/resources/extensions/gsd/auto-unit-closeout.js +11 -2
  51. package/dist/resources/extensions/gsd/auto-verification.js +33 -0
  52. package/dist/resources/extensions/gsd/auto-worktree.js +109 -61
  53. package/dist/resources/extensions/gsd/auto.js +141 -38
  54. package/dist/resources/extensions/gsd/blocked-models.js +68 -0
  55. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +112 -2
  56. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +39 -9
  57. package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +93 -0
  58. package/dist/resources/extensions/gsd/bootstrap/memory-tools.js +3 -0
  59. package/dist/resources/extensions/gsd/bootstrap/provider-error-resume.js +4 -2
  60. package/dist/resources/extensions/gsd/bootstrap/register-extension.js +23 -0
  61. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +52 -6
  62. package/dist/resources/extensions/gsd/bootstrap/system-context.js +95 -29
  63. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +41 -3
  64. package/dist/resources/extensions/gsd/clean-root-preflight.js +93 -0
  65. package/dist/resources/extensions/gsd/commands/handlers/workflow.js +31 -4
  66. package/dist/resources/extensions/gsd/commands-cmux.js +9 -6
  67. package/dist/resources/extensions/gsd/commands-extensions.js +634 -43
  68. package/dist/resources/extensions/gsd/commands-extract-learnings.js +54 -89
  69. package/dist/resources/extensions/gsd/commands-prefs-wizard.js +968 -23
  70. package/dist/resources/extensions/gsd/compaction-snapshot.js +121 -0
  71. package/dist/resources/extensions/gsd/complexity-classifier.js +5 -3
  72. package/dist/resources/extensions/gsd/component-loader.js +447 -0
  73. package/dist/resources/extensions/gsd/component-types.js +69 -0
  74. package/dist/resources/extensions/gsd/context-store.js +23 -7
  75. package/dist/resources/extensions/gsd/db-writer.js +88 -16
  76. package/dist/resources/extensions/gsd/detection.js +49 -1
  77. package/dist/resources/extensions/gsd/dispatch-guard.js +29 -3
  78. package/dist/resources/extensions/gsd/docs/preferences-reference.md +1 -1
  79. package/dist/resources/extensions/gsd/doctor-git-checks.js +23 -29
  80. package/dist/resources/extensions/gsd/doctor-providers.js +51 -5
  81. package/dist/resources/extensions/gsd/ecosystem/gsd-extension-api.js +1 -0
  82. package/dist/resources/extensions/gsd/error-classifier.js +31 -3
  83. package/dist/resources/extensions/gsd/exec-history.js +120 -0
  84. package/dist/resources/extensions/gsd/exec-sandbox.js +258 -0
  85. package/dist/resources/extensions/gsd/file-lock.js +49 -9
  86. package/dist/resources/extensions/gsd/forensics.js +106 -0
  87. package/dist/resources/extensions/gsd/git-service.js +1 -0
  88. package/dist/resources/extensions/gsd/gitignore.js +2 -0
  89. package/dist/resources/extensions/gsd/gsd-db.js +168 -23
  90. package/dist/resources/extensions/gsd/guided-flow-queue.js +4 -1
  91. package/dist/resources/extensions/gsd/guided-flow.js +214 -13
  92. package/dist/resources/extensions/gsd/health-widget.js +4 -1
  93. package/dist/resources/extensions/gsd/hook-emitter.js +108 -0
  94. package/dist/resources/extensions/gsd/init-wizard.js +15 -1
  95. package/dist/resources/extensions/gsd/journal.js +17 -2
  96. package/dist/resources/extensions/gsd/key-manager.js +28 -0
  97. package/dist/resources/extensions/gsd/memory-backfill.js +126 -0
  98. package/dist/resources/extensions/gsd/memory-extractor.js +7 -1
  99. package/dist/resources/extensions/gsd/memory-store.js +19 -0
  100. package/dist/resources/extensions/gsd/milestone-actions.js +15 -0
  101. package/dist/resources/extensions/gsd/milestone-scope-classifier.js +299 -0
  102. package/dist/resources/extensions/gsd/milestone-summary-classifier.js +37 -0
  103. package/dist/resources/extensions/gsd/model-cost-table.js +3 -0
  104. package/dist/resources/extensions/gsd/model-router.js +42 -3
  105. package/dist/resources/extensions/gsd/notifications.js +30 -16
  106. package/dist/resources/extensions/gsd/pre-execution-checks.js +44 -9
  107. package/dist/resources/extensions/gsd/preferences-types.js +9 -0
  108. package/dist/resources/extensions/gsd/preferences-validation.js +106 -0
  109. package/dist/resources/extensions/gsd/preferences.js +17 -17
  110. package/dist/resources/extensions/gsd/prompt-cache-optimizer.js +4 -0
  111. package/dist/resources/extensions/gsd/prompt-loader.js +22 -7
  112. package/dist/resources/extensions/gsd/prompts/complete-milestone.md +6 -2
  113. package/dist/resources/extensions/gsd/prompts/complete-slice.md +2 -2
  114. package/dist/resources/extensions/gsd/prompts/debug-diagnose.md +2 -0
  115. package/dist/resources/extensions/gsd/prompts/discuss-headless.md +29 -2
  116. package/dist/resources/extensions/gsd/prompts/discuss.md +29 -2
  117. package/dist/resources/extensions/gsd/prompts/doctor-heal.md +5 -4
  118. package/dist/resources/extensions/gsd/prompts/execute-task.md +3 -2
  119. package/dist/resources/extensions/gsd/prompts/parallel-research-slices.md +5 -2
  120. package/dist/resources/extensions/gsd/prompts/plan-slice.md +16 -2
  121. package/dist/resources/extensions/gsd/prompts/research-slice.md +1 -0
  122. package/dist/resources/extensions/gsd/prompts/system.md +1 -0
  123. package/dist/resources/extensions/gsd/reports.js +5 -4
  124. package/dist/resources/extensions/gsd/safety/evidence-collector.js +96 -0
  125. package/dist/resources/extensions/gsd/safety/file-change-validator.js +13 -5
  126. package/dist/resources/extensions/gsd/safety/safety-harness.js +5 -1
  127. package/dist/resources/extensions/gsd/service-tier.js +5 -2
  128. package/dist/resources/extensions/gsd/skill-manifest.js +168 -0
  129. package/dist/resources/extensions/gsd/slice-cadence.js +238 -0
  130. package/dist/resources/extensions/gsd/state-transition-matrix.js +118 -0
  131. package/dist/resources/extensions/gsd/state.js +68 -29
  132. package/dist/resources/extensions/gsd/token-counter.js +22 -5
  133. package/dist/resources/extensions/gsd/tools/complete-milestone.js +16 -10
  134. package/dist/resources/extensions/gsd/tools/complete-slice.js +21 -0
  135. package/dist/resources/extensions/gsd/tools/complete-task.js +31 -0
  136. package/dist/resources/extensions/gsd/tools/exec-search-tool.js +59 -0
  137. package/dist/resources/extensions/gsd/tools/exec-tool.js +126 -0
  138. package/dist/resources/extensions/gsd/tools/memory-tools.js +26 -1
  139. package/dist/resources/extensions/gsd/tools/resume-tool.js +23 -0
  140. package/dist/resources/extensions/gsd/tools/validate-milestone.js +7 -2
  141. package/dist/resources/extensions/gsd/unit-context-composer.js +147 -0
  142. package/dist/resources/extensions/gsd/unit-context-manifest.js +334 -0
  143. package/dist/resources/extensions/gsd/uok/audit.js +18 -2
  144. package/dist/resources/extensions/gsd/uok/dispatch-envelope.js +33 -0
  145. package/dist/resources/extensions/gsd/uok/execution-graph.js +10 -0
  146. package/dist/resources/extensions/gsd/uok/gitops.js +2 -1
  147. package/dist/resources/extensions/gsd/uok/loop-adapter.js +37 -10
  148. package/dist/resources/extensions/gsd/uok/parity-report.js +58 -0
  149. package/dist/resources/extensions/gsd/uok/plan-v2.js +30 -7
  150. package/dist/resources/extensions/gsd/uok/writer.js +82 -0
  151. package/dist/resources/extensions/gsd/workflow-logger.js +10 -2
  152. package/dist/resources/extensions/gsd/workflow-mcp.js +3 -0
  153. package/dist/resources/extensions/gsd/workflow-templates/spike.md +6 -0
  154. package/dist/resources/extensions/gsd/worktree-manager.js +52 -0
  155. package/dist/resources/extensions/gsd/worktree-resolver.js +136 -17
  156. package/dist/resources/extensions/gsd/worktree-telemetry.js +198 -0
  157. package/dist/resources/extensions/mcp-client/auth.js +10 -1
  158. package/dist/resources/extensions/mcp-client/index.js +121 -10
  159. package/dist/resources/extensions/ollama/index.js +5 -1
  160. package/dist/resources/extensions/remote-questions/manager.js +11 -5
  161. package/dist/resources/extensions/search-the-web/command-search-provider.js +5 -4
  162. package/dist/resources/extensions/search-the-web/native-search.js +45 -13
  163. package/dist/resources/extensions/shared/cmux-events.js +12 -0
  164. package/dist/resources/extensions/shared/rtk-session-stats.js +1 -2
  165. package/dist/resources/skills/api-design/SKILL.md +190 -0
  166. package/dist/resources/skills/create-mcp-server/SKILL.md +121 -0
  167. package/dist/resources/skills/create-skill/SKILL.md +2 -2
  168. package/dist/resources/skills/create-skill/references/gsd-skill-ecosystem.md +4 -4
  169. package/dist/resources/skills/create-skill/workflows/audit-skill.md +4 -4
  170. package/dist/resources/skills/create-skill/workflows/create-new-skill.md +5 -5
  171. package/dist/resources/skills/decompose-into-slices/SKILL.md +139 -0
  172. package/dist/resources/skills/dependency-upgrade/SKILL.md +158 -0
  173. package/dist/resources/skills/design-an-interface/SKILL.md +102 -0
  174. package/dist/resources/skills/forensics/SKILL.md +153 -0
  175. package/dist/resources/skills/grill-me/SKILL.md +93 -0
  176. package/dist/resources/skills/handoff/SKILL.md +121 -0
  177. package/dist/resources/skills/observability/SKILL.md +174 -0
  178. package/dist/resources/skills/security-review/SKILL.md +181 -0
  179. package/dist/resources/skills/spike-wrap-up/SKILL.md +138 -0
  180. package/dist/resources/skills/tdd/SKILL.md +112 -0
  181. package/dist/resources/skills/verify-before-complete/SKILL.md +98 -0
  182. package/dist/resources/skills/write-docs/SKILL.md +82 -0
  183. package/dist/resources/skills/write-milestone-brief/SKILL.md +135 -0
  184. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  185. package/dist/web/standalone/.next/BUILD_ID +1 -1
  186. package/dist/web/standalone/.next/app-path-routes-manifest.json +12 -12
  187. package/dist/web/standalone/.next/build-manifest.json +4 -4
  188. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  189. package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
  190. package/dist/web/standalone/.next/required-server-files.json +4 -4
  191. package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
  192. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  193. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  194. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  195. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  196. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  197. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  198. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  199. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  200. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  201. package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
  202. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  203. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  204. package/dist/web/standalone/.next/server/app/_not-found.rsc +3 -3
  205. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  206. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  207. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  208. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  209. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  210. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  211. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  212. package/dist/web/standalone/.next/server/app/api/boot/route.js.nft.json +1 -1
  213. package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
  214. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  215. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
  216. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
  217. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  218. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
  219. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
  220. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
  221. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
  222. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
  223. package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
  224. package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
  225. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  226. package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
  227. package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
  228. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  229. package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
  230. package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  231. package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
  232. package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
  233. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  234. package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
  235. package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
  236. package/dist/web/standalone/.next/server/app/api/experimental/route.js +2 -2
  237. package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
  238. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  239. package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
  240. package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
  241. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  242. package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  243. package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  244. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  245. package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
  246. package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
  247. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  248. package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  249. package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  250. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  251. package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
  252. package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  253. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  254. package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
  255. package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  256. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  257. package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
  258. package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
  259. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  260. package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
  261. package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
  262. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  263. package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
  264. package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
  265. package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
  266. package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  267. package/dist/web/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  268. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  269. package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
  270. package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  271. package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
  272. package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  273. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  274. package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  275. package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  276. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  277. package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
  278. package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
  279. package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +2 -2
  280. package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
  281. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  282. package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
  283. package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
  284. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  285. package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
  286. package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
  287. package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
  288. package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
  289. package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
  290. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  291. package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
  292. package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
  293. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  294. package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
  295. package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
  296. package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
  297. package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  298. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  299. package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
  300. package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
  301. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  302. package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
  303. package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
  304. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  305. package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
  306. package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
  307. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +2 -2
  308. package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
  309. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
  310. package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
  311. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +2 -2
  312. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
  313. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
  314. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +4 -4
  315. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
  316. package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
  317. package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
  318. package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
  319. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  320. package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
  321. package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
  322. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  323. package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  324. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  325. package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +1 -1
  326. package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
  327. package/dist/web/standalone/.next/server/app/index.html +1 -1
  328. package/dist/web/standalone/.next/server/app/index.rsc +4 -4
  329. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  330. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -4
  331. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  332. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +3 -3
  333. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  334. package/dist/web/standalone/.next/server/app/page.js +2 -2
  335. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  336. package/dist/web/standalone/.next/server/app-paths-manifest.json +12 -12
  337. package/dist/web/standalone/.next/server/chunks/1926.js +1 -0
  338. package/dist/web/standalone/.next/server/chunks/63.js +3 -3
  339. package/dist/web/standalone/.next/server/chunks/6897.js +3 -3
  340. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  341. package/dist/web/standalone/.next/server/middleware-manifest.json +5 -5
  342. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  343. package/dist/web/standalone/.next/server/middleware.js +2 -2
  344. package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
  345. package/dist/web/standalone/.next/server/next-font-manifest.json +1 -1
  346. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  347. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  348. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  349. package/dist/web/standalone/.next/static/chunks/2826.e9f5195e91f9cad2.js +11 -0
  350. package/dist/web/standalone/.next/static/chunks/app/_not-found/{page-2f24283c162b6ab3.js → page-f2a7482d42a5614b.js} +1 -1
  351. package/dist/web/standalone/.next/static/chunks/app/{layout-9ecfd95f343793f0.js → layout-a16c7a7ecdf0c2cf.js} +1 -1
  352. package/dist/web/standalone/.next/static/chunks/app/page-5b113fd32bc2a1c3.js +1 -0
  353. package/dist/web/standalone/.next/static/chunks/main-app-fdab67f7802d7832.js +1 -0
  354. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +1 -0
  355. package/dist/web/standalone/.next/static/chunks/{webpack-5fc74f13a25fa1bb.js → webpack-2e68521d7c82f7c2.js} +1 -1
  356. package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
  357. package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
  358. package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
  359. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.target.mk +14 -14
  360. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_except.target.mk +14 -14
  361. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_maybe.target.mk +14 -14
  362. package/dist/web/standalone/server.js +1 -1
  363. package/dist/welcome-screen.js +6 -1
  364. package/dist/wizard.js +2 -0
  365. package/package.json +16 -16
  366. package/packages/daemon/package.json +2 -2
  367. package/packages/mcp-server/README.md +3 -3
  368. package/packages/mcp-server/dist/env-writer.d.ts +1 -0
  369. package/packages/mcp-server/dist/env-writer.d.ts.map +1 -1
  370. package/packages/mcp-server/dist/env-writer.js +74 -6
  371. package/packages/mcp-server/dist/env-writer.js.map +1 -1
  372. package/packages/mcp-server/dist/remote-questions.d.ts +45 -0
  373. package/packages/mcp-server/dist/remote-questions.d.ts.map +1 -0
  374. package/packages/mcp-server/dist/remote-questions.js +732 -0
  375. package/packages/mcp-server/dist/remote-questions.js.map +1 -0
  376. package/packages/mcp-server/dist/server.d.ts +7 -0
  377. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  378. package/packages/mcp-server/dist/server.js +95 -10
  379. package/packages/mcp-server/dist/server.js.map +1 -1
  380. package/packages/mcp-server/dist/session-manager.d.ts +14 -0
  381. package/packages/mcp-server/dist/session-manager.d.ts.map +1 -1
  382. package/packages/mcp-server/dist/session-manager.js +49 -1
  383. package/packages/mcp-server/dist/session-manager.js.map +1 -1
  384. package/packages/mcp-server/dist/workflow-tools.d.ts +1 -1
  385. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  386. package/packages/mcp-server/dist/workflow-tools.js +178 -31
  387. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  388. package/packages/mcp-server/package.json +9 -3
  389. package/packages/mcp-server/src/env-writer.test.ts +79 -1
  390. package/packages/mcp-server/src/env-writer.ts +76 -6
  391. package/packages/mcp-server/src/mcp-server.test.ts +89 -0
  392. package/packages/mcp-server/src/readers/graph.test.ts +87 -15
  393. package/packages/mcp-server/src/readers/readers.test.ts +5 -1
  394. package/packages/mcp-server/src/remote-questions.test.ts +294 -0
  395. package/packages/mcp-server/src/remote-questions.ts +916 -0
  396. package/packages/mcp-server/src/server.ts +118 -16
  397. package/packages/mcp-server/src/session-manager.ts +43 -1
  398. package/packages/mcp-server/src/workflow-tools.test.ts +231 -1
  399. package/packages/mcp-server/src/workflow-tools.ts +234 -49
  400. package/packages/mcp-server/tsconfig.test.json +19 -0
  401. package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
  402. package/packages/native/package.json +7 -2
  403. package/packages/native/src/__tests__/_test-coverage-guard.test.mjs +98 -0
  404. package/packages/native/src/__tests__/clipboard.test.mjs +69 -23
  405. package/packages/native/src/__tests__/module-compat.test.mjs +59 -27
  406. package/packages/native/src/__tests__/ps.test.mjs +14 -8
  407. package/packages/native/src/__tests__/stream-process.test.mjs +23 -2
  408. package/packages/native/src/__tests__/truncate.test.mjs +17 -2
  409. package/packages/native/tsconfig.tsbuildinfo +1 -1
  410. package/packages/pi-agent-core/dist/agent-loop.js +12 -0
  411. package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
  412. package/packages/pi-agent-core/dist/types.d.ts +30 -0
  413. package/packages/pi-agent-core/dist/types.d.ts.map +1 -1
  414. package/packages/pi-agent-core/dist/types.js.map +1 -1
  415. package/packages/pi-agent-core/package.json +6 -1
  416. package/packages/pi-agent-core/src/agent-loop.test.ts +226 -31
  417. package/packages/pi-agent-core/src/agent-loop.ts +14 -0
  418. package/packages/pi-agent-core/src/agent.test.ts +96 -102
  419. package/packages/pi-agent-core/src/types.ts +34 -0
  420. package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -1
  421. package/packages/pi-ai/dist/models/custom.d.ts +38 -0
  422. package/packages/pi-ai/dist/models/custom.d.ts.map +1 -1
  423. package/packages/pi-ai/dist/models/custom.js +41 -0
  424. package/packages/pi-ai/dist/models/custom.js.map +1 -1
  425. package/packages/pi-ai/dist/models/generated/index.d.ts +34 -0
  426. package/packages/pi-ai/dist/models/generated/index.d.ts.map +1 -1
  427. package/packages/pi-ai/dist/models/generated/openai-codex.d.ts +17 -0
  428. package/packages/pi-ai/dist/models/generated/openai-codex.d.ts.map +1 -1
  429. package/packages/pi-ai/dist/models/generated/openai-codex.js +17 -0
  430. package/packages/pi-ai/dist/models/generated/openai-codex.js.map +1 -1
  431. package/packages/pi-ai/dist/models/generated/openai.d.ts +17 -0
  432. package/packages/pi-ai/dist/models/generated/openai.d.ts.map +1 -1
  433. package/packages/pi-ai/dist/models/generated/openai.js +17 -0
  434. package/packages/pi-ai/dist/models/generated/openai.js.map +1 -1
  435. package/packages/pi-ai/dist/models.generated.test.js +43 -70
  436. package/packages/pi-ai/dist/models.generated.test.js.map +1 -1
  437. package/packages/pi-ai/dist/models.test.js +29 -11
  438. package/packages/pi-ai/dist/models.test.js.map +1 -1
  439. package/packages/pi-ai/dist/providers/anthropic-auth.test.js +1 -1
  440. package/packages/pi-ai/dist/providers/anthropic-auth.test.js.map +1 -1
  441. package/packages/pi-ai/dist/providers/anthropic-bearer-auth.test.d.ts +2 -0
  442. package/packages/pi-ai/dist/providers/anthropic-bearer-auth.test.d.ts.map +1 -0
  443. package/packages/pi-ai/dist/providers/anthropic-bearer-auth.test.js +13 -0
  444. package/packages/pi-ai/dist/providers/anthropic-bearer-auth.test.js.map +1 -0
  445. package/packages/pi-ai/dist/providers/anthropic-shared.d.ts.map +1 -1
  446. package/packages/pi-ai/dist/providers/anthropic-shared.js +27 -4
  447. package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
  448. package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
  449. package/packages/pi-ai/dist/providers/anthropic.js +13 -4
  450. package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
  451. package/packages/pi-ai/dist/providers/minimax-tool-name.test.d.ts +2 -0
  452. package/packages/pi-ai/dist/providers/minimax-tool-name.test.d.ts.map +1 -0
  453. package/packages/pi-ai/dist/providers/minimax-tool-name.test.js +80 -0
  454. package/packages/pi-ai/dist/providers/minimax-tool-name.test.js.map +1 -0
  455. package/packages/pi-ai/dist/providers/openai-completions.d.ts.map +1 -1
  456. package/packages/pi-ai/dist/providers/openai-completions.js +60 -15
  457. package/packages/pi-ai/dist/providers/openai-completions.js.map +1 -1
  458. package/packages/pi-ai/dist/providers/simple-options.d.ts +10 -0
  459. package/packages/pi-ai/dist/providers/simple-options.d.ts.map +1 -1
  460. package/packages/pi-ai/dist/providers/simple-options.js +16 -1
  461. package/packages/pi-ai/dist/providers/simple-options.js.map +1 -1
  462. package/packages/pi-ai/dist/providers/think-tag-parser.d.ts +17 -0
  463. package/packages/pi-ai/dist/providers/think-tag-parser.d.ts.map +1 -0
  464. package/packages/pi-ai/dist/providers/think-tag-parser.js +75 -0
  465. package/packages/pi-ai/dist/providers/think-tag-parser.js.map +1 -0
  466. package/packages/pi-ai/dist/providers/think-tag-parser.test.d.ts +2 -0
  467. package/packages/pi-ai/dist/providers/think-tag-parser.test.d.ts.map +1 -0
  468. package/packages/pi-ai/dist/providers/think-tag-parser.test.js +41 -0
  469. package/packages/pi-ai/dist/providers/think-tag-parser.test.js.map +1 -0
  470. package/packages/pi-ai/dist/utils/oauth/github-copilot.d.ts.map +1 -1
  471. package/packages/pi-ai/dist/utils/oauth/github-copilot.js +12 -2
  472. package/packages/pi-ai/dist/utils/oauth/github-copilot.js.map +1 -1
  473. package/packages/pi-ai/dist/utils/oauth/github-copilot.test.js +164 -14
  474. package/packages/pi-ai/dist/utils/oauth/github-copilot.test.js.map +1 -1
  475. package/packages/pi-ai/dist/utils/oauth/google-antigravity.d.ts.map +1 -1
  476. package/packages/pi-ai/dist/utils/oauth/google-antigravity.js +15 -3
  477. package/packages/pi-ai/dist/utils/oauth/google-antigravity.js.map +1 -1
  478. package/packages/pi-ai/dist/utils/oauth/google-antigravity.test.d.ts +2 -0
  479. package/packages/pi-ai/dist/utils/oauth/google-antigravity.test.d.ts.map +1 -0
  480. package/packages/pi-ai/dist/utils/oauth/google-antigravity.test.js +67 -0
  481. package/packages/pi-ai/dist/utils/oauth/google-antigravity.test.js.map +1 -0
  482. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.d.ts.map +1 -1
  483. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.js +16 -3
  484. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.js.map +1 -1
  485. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.test.d.ts +2 -0
  486. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.test.d.ts.map +1 -0
  487. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.test.js +67 -0
  488. package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.test.js.map +1 -0
  489. package/packages/pi-ai/package.json +6 -1
  490. package/packages/pi-ai/scripts/generate-models.ts +44 -0
  491. package/packages/pi-ai/src/models/custom.ts +42 -0
  492. package/packages/pi-ai/src/models/generated/openai-codex.ts +17 -0
  493. package/packages/pi-ai/src/models/generated/openai.ts +17 -0
  494. package/packages/pi-ai/src/models.generated.test.ts +46 -73
  495. package/packages/pi-ai/src/models.test.ts +39 -11
  496. package/packages/pi-ai/src/providers/anthropic-auth.test.ts +1 -1
  497. package/packages/pi-ai/src/providers/anthropic-bearer-auth.test.ts +26 -0
  498. package/packages/pi-ai/src/providers/anthropic-shared.ts +26 -5
  499. package/packages/pi-ai/src/providers/anthropic.ts +15 -4
  500. package/packages/pi-ai/src/providers/minimax-tool-name.test.ts +98 -0
  501. package/packages/pi-ai/src/providers/openai-completions.ts +57 -16
  502. package/packages/pi-ai/src/providers/simple-options.ts +17 -1
  503. package/packages/pi-ai/src/providers/think-tag-parser.test.ts +44 -0
  504. package/packages/pi-ai/src/providers/think-tag-parser.ts +94 -0
  505. package/packages/pi-ai/src/utils/oauth/github-copilot.test.ts +200 -23
  506. package/packages/pi-ai/src/utils/oauth/github-copilot.ts +12 -2
  507. package/packages/pi-ai/src/utils/oauth/google-antigravity.test.ts +84 -0
  508. package/packages/pi-ai/src/utils/oauth/google-antigravity.ts +15 -5
  509. package/packages/pi-ai/src/utils/oauth/google-gemini-cli.test.ts +84 -0
  510. package/packages/pi-ai/src/utils/oauth/google-gemini-cli.ts +16 -5
  511. package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
  512. package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js +96 -31
  513. package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js.map +1 -1
  514. package/packages/pi-coding-agent/dist/core/agent-session-model-switch.test.js +75 -12
  515. package/packages/pi-coding-agent/dist/core/agent-session-model-switch.test.js.map +1 -1
  516. package/packages/pi-coding-agent/dist/core/agent-session-tool-refresh.test.js +99 -31
  517. package/packages/pi-coding-agent/dist/core/agent-session-tool-refresh.test.js.map +1 -1
  518. package/packages/pi-coding-agent/dist/core/agent-session.d.ts +2 -0
  519. package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  520. package/packages/pi-coding-agent/dist/core/agent-session.js +32 -2
  521. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  522. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts +25 -0
  523. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
  524. package/packages/pi-coding-agent/dist/core/compaction/compaction.js +105 -6
  525. package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
  526. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js +230 -28
  527. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js.map +1 -1
  528. package/packages/pi-coding-agent/dist/core/compaction/utils.d.ts +30 -2
  529. package/packages/pi-coding-agent/dist/core/compaction/utils.d.ts.map +1 -1
  530. package/packages/pi-coding-agent/dist/core/compaction/utils.js +113 -12
  531. package/packages/pi-coding-agent/dist/core/compaction/utils.js.map +1 -1
  532. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.d.ts +1 -0
  533. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.d.ts.map +1 -1
  534. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.js +29 -18
  535. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.js.map +1 -1
  536. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.d.ts +2 -0
  537. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.d.ts.map +1 -0
  538. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.js +130 -0
  539. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.test.js.map +1 -0
  540. package/packages/pi-coding-agent/dist/core/compaction-utils.test.js +56 -1
  541. package/packages/pi-coding-agent/dist/core/compaction-utils.test.js.map +1 -1
  542. package/packages/pi-coding-agent/dist/core/discovery-cache.test.js +8 -15
  543. package/packages/pi-coding-agent/dist/core/discovery-cache.test.js.map +1 -1
  544. package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.d.ts +25 -0
  545. package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.d.ts.map +1 -0
  546. package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.js +109 -0
  547. package/packages/pi-coding-agent/dist/core/extensions/extension-discovery.js.map +1 -0
  548. package/packages/pi-coding-agent/dist/core/extensions/extension-registry.d.ts +67 -0
  549. package/packages/pi-coding-agent/dist/core/extensions/extension-registry.d.ts.map +1 -0
  550. package/packages/pi-coding-agent/dist/core/extensions/extension-registry.js +167 -0
  551. package/packages/pi-coding-agent/dist/core/extensions/extension-registry.js.map +1 -0
  552. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +1 -1
  553. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
  554. package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
  555. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts +8 -2
  556. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
  557. package/packages/pi-coding-agent/dist/core/extensions/loader.js +89 -8
  558. package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
  559. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +35 -2
  560. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
  561. package/packages/pi-coding-agent/dist/core/extensions/runner.js +233 -0
  562. package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
  563. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +212 -2
  564. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
  565. package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
  566. package/packages/pi-coding-agent/dist/core/hooks-runner.d.ts +53 -0
  567. package/packages/pi-coding-agent/dist/core/hooks-runner.d.ts.map +1 -0
  568. package/packages/pi-coding-agent/dist/core/hooks-runner.js +337 -0
  569. package/packages/pi-coding-agent/dist/core/hooks-runner.js.map +1 -0
  570. package/packages/pi-coding-agent/dist/core/hooks-runner.test.d.ts +2 -0
  571. package/packages/pi-coding-agent/dist/core/hooks-runner.test.d.ts.map +1 -0
  572. package/packages/pi-coding-agent/dist/core/hooks-runner.test.js +234 -0
  573. package/packages/pi-coding-agent/dist/core/hooks-runner.test.js.map +1 -0
  574. package/packages/pi-coding-agent/dist/core/index.d.ts +1 -0
  575. package/packages/pi-coding-agent/dist/core/index.d.ts.map +1 -1
  576. package/packages/pi-coding-agent/dist/core/index.js +1 -0
  577. package/packages/pi-coding-agent/dist/core/index.js.map +1 -1
  578. package/packages/pi-coding-agent/dist/core/lsp/lsp-integration.test.js +41 -4
  579. package/packages/pi-coding-agent/dist/core/lsp/lsp-integration.test.js.map +1 -1
  580. package/packages/pi-coding-agent/dist/core/model-discovery.d.ts +3 -1
  581. package/packages/pi-coding-agent/dist/core/model-discovery.d.ts.map +1 -1
  582. package/packages/pi-coding-agent/dist/core/model-discovery.js +92 -12
  583. package/packages/pi-coding-agent/dist/core/model-discovery.js.map +1 -1
  584. package/packages/pi-coding-agent/dist/core/model-discovery.test.js +16 -1
  585. package/packages/pi-coding-agent/dist/core/model-discovery.test.js.map +1 -1
  586. package/packages/pi-coding-agent/dist/core/model-registry-auth-header.test.d.ts +2 -0
  587. package/packages/pi-coding-agent/dist/core/model-registry-auth-header.test.d.ts.map +1 -0
  588. package/packages/pi-coding-agent/dist/core/model-registry-auth-header.test.js +40 -0
  589. package/packages/pi-coding-agent/dist/core/model-registry-auth-header.test.js.map +1 -0
  590. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js +19 -2
  591. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js.map +1 -1
  592. package/packages/pi-coding-agent/dist/core/model-registry-custom-caps.test.d.ts +2 -0
  593. package/packages/pi-coding-agent/dist/core/model-registry-custom-caps.test.d.ts.map +1 -0
  594. package/packages/pi-coding-agent/dist/core/model-registry-custom-caps.test.js +203 -0
  595. package/packages/pi-coding-agent/dist/core/model-registry-custom-caps.test.js.map +1 -0
  596. package/packages/pi-coding-agent/dist/core/model-registry-discovery.test.js +61 -1
  597. package/packages/pi-coding-agent/dist/core/model-registry-discovery.test.js.map +1 -1
  598. package/packages/pi-coding-agent/dist/core/model-registry.d.ts +5 -0
  599. package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
  600. package/packages/pi-coding-agent/dist/core/model-registry.js +90 -10
  601. package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
  602. package/packages/pi-coding-agent/dist/core/redact-secrets.d.ts +2 -0
  603. package/packages/pi-coding-agent/dist/core/redact-secrets.d.ts.map +1 -0
  604. package/packages/pi-coding-agent/dist/core/redact-secrets.js +49 -0
  605. package/packages/pi-coding-agent/dist/core/redact-secrets.js.map +1 -0
  606. package/packages/pi-coding-agent/dist/core/redact-secrets.test.d.ts +2 -0
  607. package/packages/pi-coding-agent/dist/core/redact-secrets.test.d.ts.map +1 -0
  608. package/packages/pi-coding-agent/dist/core/redact-secrets.test.js +67 -0
  609. package/packages/pi-coding-agent/dist/core/redact-secrets.test.js.map +1 -0
  610. package/packages/pi-coding-agent/dist/core/resource-loader-cache-reset.test.js +76 -18
  611. package/packages/pi-coding-agent/dist/core/resource-loader-cache-reset.test.js.map +1 -1
  612. package/packages/pi-coding-agent/dist/core/resource-loader.js +1 -1
  613. package/packages/pi-coding-agent/dist/core/resource-loader.js.map +1 -1
  614. package/packages/pi-coding-agent/dist/core/retry-handler.d.ts.map +1 -1
  615. package/packages/pi-coding-agent/dist/core/retry-handler.js +2 -6
  616. package/packages/pi-coding-agent/dist/core/retry-handler.js.map +1 -1
  617. package/packages/pi-coding-agent/dist/core/retry-handler.test.js +5 -1
  618. package/packages/pi-coding-agent/dist/core/retry-handler.test.js.map +1 -1
  619. package/packages/pi-coding-agent/dist/core/retryable-error-regex.d.ts +18 -0
  620. package/packages/pi-coding-agent/dist/core/retryable-error-regex.d.ts.map +1 -0
  621. package/packages/pi-coding-agent/dist/core/retryable-error-regex.js +18 -0
  622. package/packages/pi-coding-agent/dist/core/retryable-error-regex.js.map +1 -0
  623. package/packages/pi-coding-agent/dist/core/sdk.d.ts +1 -0
  624. package/packages/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
  625. package/packages/pi-coding-agent/dist/core/sdk.js +4 -1
  626. package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
  627. package/packages/pi-coding-agent/dist/core/sdk.test.js +19 -1
  628. package/packages/pi-coding-agent/dist/core/sdk.test.js.map +1 -1
  629. package/packages/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -1
  630. package/packages/pi-coding-agent/dist/core/session-manager.js +10 -6
  631. package/packages/pi-coding-agent/dist/core/session-manager.js.map +1 -1
  632. package/packages/pi-coding-agent/dist/core/session-manager.test.js +45 -1
  633. package/packages/pi-coding-agent/dist/core/session-manager.test.js.map +1 -1
  634. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +55 -0
  635. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
  636. package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  637. package/packages/pi-coding-agent/dist/core/system-prompt.d.ts +20 -0
  638. package/packages/pi-coding-agent/dist/core/system-prompt.d.ts.map +1 -1
  639. package/packages/pi-coding-agent/dist/core/system-prompt.js +19 -5
  640. package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
  641. package/packages/pi-coding-agent/dist/core/tools/path-utils.test.js +2 -1
  642. package/packages/pi-coding-agent/dist/core/tools/path-utils.test.js.map +1 -1
  643. package/packages/pi-coding-agent/dist/index.d.ts +2 -1
  644. package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
  645. package/packages/pi-coding-agent/dist/index.js +1 -0
  646. package/packages/pi-coding-agent/dist/index.js.map +1 -1
  647. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/provider-display-name.test.js +15 -6
  648. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/provider-display-name.test.js.map +1 -1
  649. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js +36 -5
  650. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js.map +1 -1
  651. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.d.ts +1 -1
  652. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.d.ts.map +1 -1
  653. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js +5 -4
  654. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js.map +1 -1
  655. package/packages/pi-coding-agent/dist/modes/interactive/components/dynamic-border.test.js +20 -13
  656. package/packages/pi-coding-agent/dist/modes/interactive/components/dynamic-border.test.js.map +1 -1
  657. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
  658. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +14 -5
  659. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
  660. package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.d.ts +7 -1
  661. package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  662. package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.js +31 -9
  663. package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.js.map +1 -1
  664. package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.d.ts.map +1 -1
  665. package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.js +13 -7
  666. package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.js.map +1 -1
  667. package/packages/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.d.ts +7 -6
  668. package/packages/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
  669. package/packages/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.js +29 -21
  670. package/packages/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  671. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  672. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +30 -12
  673. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
  674. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js +14 -0
  675. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js.map +1 -1
  676. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  677. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +13 -1
  678. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  679. package/packages/pi-coding-agent/dist/tests/system-prompt-skill-filter.test.d.ts +2 -0
  680. package/packages/pi-coding-agent/dist/tests/system-prompt-skill-filter.test.d.ts.map +1 -0
  681. package/packages/pi-coding-agent/dist/tests/system-prompt-skill-filter.test.js +130 -0
  682. package/packages/pi-coding-agent/dist/tests/system-prompt-skill-filter.test.js.map +1 -0
  683. package/packages/pi-coding-agent/package.json +6 -1
  684. package/packages/pi-coding-agent/src/core/agent-session-abort-order.test.ts +113 -36
  685. package/packages/pi-coding-agent/src/core/agent-session-model-switch.test.ts +89 -17
  686. package/packages/pi-coding-agent/src/core/agent-session-tool-refresh.test.ts +112 -43
  687. package/packages/pi-coding-agent/src/core/agent-session.ts +38 -2
  688. package/packages/pi-coding-agent/src/core/compaction/compaction.test.ts +368 -28
  689. package/packages/pi-coding-agent/src/core/compaction/compaction.ts +122 -6
  690. package/packages/pi-coding-agent/src/core/compaction/utils.ts +111 -13
  691. package/packages/pi-coding-agent/src/core/compaction-orchestrator.test.ts +154 -0
  692. package/packages/pi-coding-agent/src/core/compaction-orchestrator.ts +32 -18
  693. package/packages/pi-coding-agent/src/core/compaction-utils.test.ts +68 -1
  694. package/packages/pi-coding-agent/src/core/discovery-cache.test.ts +9 -18
  695. package/packages/pi-coding-agent/src/core/extensions/extension-discovery.ts +119 -0
  696. package/packages/pi-coding-agent/src/core/extensions/extension-registry.ts +222 -0
  697. package/packages/pi-coding-agent/src/core/extensions/index.ts +16 -0
  698. package/packages/pi-coding-agent/src/core/extensions/loader.ts +87 -11
  699. package/packages/pi-coding-agent/src/core/extensions/runner.ts +351 -0
  700. package/packages/pi-coding-agent/src/core/extensions/types.ts +266 -0
  701. package/packages/pi-coding-agent/src/core/hooks-runner.test.ts +269 -0
  702. package/packages/pi-coding-agent/src/core/hooks-runner.ts +460 -0
  703. package/packages/pi-coding-agent/src/core/index.ts +10 -0
  704. package/packages/pi-coding-agent/src/core/lsp/lsp-integration.test.ts +48 -4
  705. package/packages/pi-coding-agent/src/core/model-discovery.test.ts +19 -0
  706. package/packages/pi-coding-agent/src/core/model-discovery.ts +99 -12
  707. package/packages/pi-coding-agent/src/core/model-registry-auth-header.test.ts +44 -0
  708. package/packages/pi-coding-agent/src/core/model-registry-auth-mode.test.ts +22 -2
  709. package/packages/pi-coding-agent/src/core/model-registry-custom-caps.test.ts +245 -0
  710. package/packages/pi-coding-agent/src/core/model-registry-discovery.test.ts +75 -0
  711. package/packages/pi-coding-agent/src/core/model-registry.ts +102 -10
  712. package/packages/pi-coding-agent/src/core/redact-secrets.test.ts +86 -0
  713. package/packages/pi-coding-agent/src/core/redact-secrets.ts +58 -0
  714. package/packages/pi-coding-agent/src/core/resource-loader-cache-reset.test.ts +93 -28
  715. package/packages/pi-coding-agent/src/core/resource-loader.ts +1 -1
  716. package/packages/pi-coding-agent/src/core/retry-handler.test.ts +5 -1
  717. package/packages/pi-coding-agent/src/core/retry-handler.ts +2 -8
  718. package/packages/pi-coding-agent/src/core/retryable-error-regex.ts +18 -0
  719. package/packages/pi-coding-agent/src/core/sdk.test.ts +25 -1
  720. package/packages/pi-coding-agent/src/core/sdk.ts +10 -3
  721. package/packages/pi-coding-agent/src/core/session-manager.test.ts +65 -1
  722. package/packages/pi-coding-agent/src/core/session-manager.ts +10 -6
  723. package/packages/pi-coding-agent/src/core/settings-manager.ts +57 -0
  724. package/packages/pi-coding-agent/src/core/system-prompt.ts +38 -4
  725. package/packages/pi-coding-agent/src/core/tools/path-utils.test.ts +2 -1
  726. package/packages/pi-coding-agent/src/index.ts +17 -0
  727. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/provider-display-name.test.ts +17 -7
  728. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-execution.test.ts +49 -3
  729. package/packages/pi-coding-agent/src/modes/interactive/components/chat-frame.ts +6 -6
  730. package/packages/pi-coding-agent/src/modes/interactive/components/dynamic-border.test.ts +26 -20
  731. package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +14 -5
  732. package/packages/pi-coding-agent/src/modes/interactive/components/model-selector.ts +45 -11
  733. package/packages/pi-coding-agent/src/modes/interactive/components/provider-manager.ts +16 -7
  734. package/packages/pi-coding-agent/src/modes/interactive/components/skill-invocation-message.ts +36 -22
  735. package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +48 -9
  736. package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.test.ts +14 -0
  737. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +13 -1
  738. package/packages/pi-coding-agent/src/tests/system-prompt-skill-filter.test.ts +157 -0
  739. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  740. package/packages/pi-tui/dist/__tests__/autocomplete.test.js +31 -14
  741. package/packages/pi-tui/dist/__tests__/autocomplete.test.js.map +1 -1
  742. package/packages/pi-tui/dist/__tests__/overlay-layout.test.js +128 -17
  743. package/packages/pi-tui/dist/__tests__/overlay-layout.test.js.map +1 -1
  744. package/packages/pi-tui/dist/__tests__/stdin-buffer.test.js +51 -6
  745. package/packages/pi-tui/dist/__tests__/stdin-buffer.test.js.map +1 -1
  746. package/packages/pi-tui/dist/__tests__/tui.test.js +18 -30
  747. package/packages/pi-tui/dist/__tests__/tui.test.js.map +1 -1
  748. package/packages/pi-tui/dist/components/__tests__/input.test.js +10 -3
  749. package/packages/pi-tui/dist/components/__tests__/input.test.js.map +1 -1
  750. package/packages/pi-tui/dist/components/__tests__/loader.test.js +53 -9
  751. package/packages/pi-tui/dist/components/__tests__/loader.test.js.map +1 -1
  752. package/packages/pi-tui/dist/components/__tests__/markdown-maxlines.test.js +6 -2
  753. package/packages/pi-tui/dist/components/__tests__/markdown-maxlines.test.js.map +1 -1
  754. package/packages/pi-tui/dist/components/image.test.js +6 -5
  755. package/packages/pi-tui/dist/components/image.test.js.map +1 -1
  756. package/packages/pi-tui/dist/stdin-buffer.d.ts +7 -0
  757. package/packages/pi-tui/dist/stdin-buffer.d.ts.map +1 -1
  758. package/packages/pi-tui/dist/stdin-buffer.js +20 -0
  759. package/packages/pi-tui/dist/stdin-buffer.js.map +1 -1
  760. package/packages/pi-tui/package.json +6 -1
  761. package/packages/pi-tui/src/__tests__/autocomplete.test.ts +46 -15
  762. package/packages/pi-tui/src/__tests__/overlay-layout.test.ts +140 -17
  763. package/packages/pi-tui/src/__tests__/stdin-buffer.test.ts +62 -6
  764. package/packages/pi-tui/src/__tests__/tui.test.ts +18 -37
  765. package/packages/pi-tui/src/components/__tests__/input.test.ts +19 -3
  766. package/packages/pi-tui/src/components/__tests__/loader.test.ts +112 -35
  767. package/packages/pi-tui/src/components/__tests__/markdown-maxlines.test.ts +9 -2
  768. package/packages/pi-tui/src/components/image.test.ts +10 -5
  769. package/packages/pi-tui/src/stdin-buffer.ts +26 -0
  770. package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
  771. package/packages/rpc-client/dist/rpc-client.test.js +101 -51
  772. package/packages/rpc-client/dist/rpc-client.test.js.map +1 -1
  773. package/packages/rpc-client/package.json +6 -1
  774. package/packages/rpc-client/src/rpc-client.test.ts +109 -52
  775. package/packages/rpc-client/tsconfig.tsbuildinfo +1 -1
  776. package/pkg/package.json +1 -1
  777. package/scripts/install.js +526 -0
  778. package/scripts/lib/workspace-manifest.cjs +86 -0
  779. package/scripts/link-workspace-packages.cjs +5 -16
  780. package/scripts/postinstall.js +9 -178
  781. package/src/resources/agents/researcher.md +1 -1
  782. package/src/resources/extensions/browser-tools/capture.ts +12 -0
  783. package/src/resources/extensions/browser-tools/tests/browser-tools-integration.test.mjs +8 -59
  784. package/src/resources/extensions/browser-tools/tests/browser-tools-unit.test.cjs +36 -24
  785. package/src/resources/extensions/browser-tools/tests/capture-sharp-optional.test.cjs +69 -71
  786. package/src/resources/extensions/browser-tools/tools/forms.ts +5 -1
  787. package/src/resources/extensions/browser-tools/tools/intent.ts +5 -1
  788. package/src/resources/extensions/claude-code-cli/readiness.ts +32 -8
  789. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +158 -67
  790. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +331 -86
  791. package/src/resources/extensions/cmux/index.ts +35 -10
  792. package/src/resources/extensions/github-sync/templates.ts +151 -0
  793. package/src/resources/extensions/github-sync/tests/cli.test.ts +76 -7
  794. package/src/resources/extensions/github-sync/tests/templates.test.ts +92 -1
  795. package/src/resources/extensions/google-search/extension-manifest.json +5 -4
  796. package/src/resources/extensions/google-search/index.ts +9 -470
  797. package/src/resources/extensions/gsd/abandon-detect.ts +62 -0
  798. package/src/resources/extensions/gsd/auto/loop-deps.ts +15 -1
  799. package/src/resources/extensions/gsd/auto/loop.ts +104 -2
  800. package/src/resources/extensions/gsd/auto/phases.ts +182 -44
  801. package/src/resources/extensions/gsd/auto/resolve.ts +29 -0
  802. package/src/resources/extensions/gsd/auto/run-unit.ts +56 -4
  803. package/src/resources/extensions/gsd/auto/session.ts +42 -2
  804. package/src/resources/extensions/gsd/auto/turn-epoch.ts +108 -0
  805. package/src/resources/extensions/gsd/auto/types.ts +1 -1
  806. package/src/resources/extensions/gsd/auto-dispatch.ts +157 -24
  807. package/src/resources/extensions/gsd/auto-loop.ts +1 -1
  808. package/src/resources/extensions/gsd/auto-model-selection.ts +71 -15
  809. package/src/resources/extensions/gsd/auto-post-unit.ts +173 -3
  810. package/src/resources/extensions/gsd/auto-prompts.ts +413 -94
  811. package/src/resources/extensions/gsd/auto-recovery.ts +40 -1
  812. package/src/resources/extensions/gsd/auto-start.ts +185 -78
  813. package/src/resources/extensions/gsd/auto-timeout-recovery.ts +12 -5
  814. package/src/resources/extensions/gsd/auto-unit-closeout.ts +14 -3
  815. package/src/resources/extensions/gsd/auto-verification.ts +33 -0
  816. package/src/resources/extensions/gsd/auto-worktree.ts +122 -68
  817. package/src/resources/extensions/gsd/auto.ts +152 -42
  818. package/src/resources/extensions/gsd/blocked-models.ts +98 -0
  819. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +140 -2
  820. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +40 -9
  821. package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +109 -0
  822. package/src/resources/extensions/gsd/bootstrap/memory-tools.ts +5 -0
  823. package/src/resources/extensions/gsd/bootstrap/provider-error-resume.ts +6 -2
  824. package/src/resources/extensions/gsd/bootstrap/register-extension.ts +26 -0
  825. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +54 -6
  826. package/src/resources/extensions/gsd/bootstrap/system-context.ts +102 -35
  827. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +42 -3
  828. package/src/resources/extensions/gsd/clean-root-preflight.ts +111 -0
  829. package/src/resources/extensions/gsd/commands/handlers/workflow.ts +27 -8
  830. package/src/resources/extensions/gsd/commands-cmux.ts +10 -6
  831. package/src/resources/extensions/gsd/commands-extensions.ts +747 -41
  832. package/src/resources/extensions/gsd/commands-extract-learnings.ts +55 -90
  833. package/src/resources/extensions/gsd/commands-prefs-wizard.ts +898 -32
  834. package/src/resources/extensions/gsd/compaction-snapshot.ts +165 -0
  835. package/src/resources/extensions/gsd/complexity-classifier.ts +5 -3
  836. package/src/resources/extensions/gsd/component-loader.ts +598 -0
  837. package/src/resources/extensions/gsd/component-types.ts +362 -0
  838. package/src/resources/extensions/gsd/context-store.ts +25 -8
  839. package/src/resources/extensions/gsd/db-writer.ts +88 -17
  840. package/src/resources/extensions/gsd/detection.ts +58 -1
  841. package/src/resources/extensions/gsd/dispatch-guard.ts +26 -2
  842. package/src/resources/extensions/gsd/docs/preferences-reference.md +1 -1
  843. package/src/resources/extensions/gsd/doctor-git-checks.ts +23 -27
  844. package/src/resources/extensions/gsd/doctor-providers.ts +59 -6
  845. package/src/resources/extensions/gsd/ecosystem/gsd-extension-api.ts +2 -0
  846. package/src/resources/extensions/gsd/error-classifier.ts +36 -3
  847. package/src/resources/extensions/gsd/exec-history.ts +153 -0
  848. package/src/resources/extensions/gsd/exec-sandbox.ts +326 -0
  849. package/src/resources/extensions/gsd/file-lock.ts +84 -11
  850. package/src/resources/extensions/gsd/forensics.ts +118 -1
  851. package/src/resources/extensions/gsd/git-service.ts +17 -0
  852. package/src/resources/extensions/gsd/gitignore.ts +2 -1
  853. package/src/resources/extensions/gsd/gsd-db.ts +186 -23
  854. package/src/resources/extensions/gsd/guided-flow-queue.ts +4 -1
  855. package/src/resources/extensions/gsd/guided-flow.ts +261 -14
  856. package/src/resources/extensions/gsd/health-widget.ts +3 -1
  857. package/src/resources/extensions/gsd/hook-emitter.ts +188 -0
  858. package/src/resources/extensions/gsd/init-wizard.ts +15 -1
  859. package/src/resources/extensions/gsd/journal.ts +39 -3
  860. package/src/resources/extensions/gsd/key-manager.ts +28 -0
  861. package/src/resources/extensions/gsd/memory-backfill.ts +140 -0
  862. package/src/resources/extensions/gsd/memory-extractor.ts +11 -3
  863. package/src/resources/extensions/gsd/memory-store.ts +26 -0
  864. package/src/resources/extensions/gsd/milestone-actions.ts +18 -0
  865. package/src/resources/extensions/gsd/milestone-scope-classifier.ts +366 -0
  866. package/src/resources/extensions/gsd/milestone-summary-classifier.ts +42 -0
  867. package/src/resources/extensions/gsd/model-cost-table.ts +3 -0
  868. package/src/resources/extensions/gsd/model-router.ts +48 -1
  869. package/src/resources/extensions/gsd/notifications.ts +27 -15
  870. package/src/resources/extensions/gsd/pre-execution-checks.ts +46 -10
  871. package/src/resources/extensions/gsd/preferences-types.ts +46 -0
  872. package/src/resources/extensions/gsd/preferences-validation.ts +100 -0
  873. package/src/resources/extensions/gsd/preferences.ts +17 -17
  874. package/src/resources/extensions/gsd/prompt-cache-optimizer.ts +4 -0
  875. package/src/resources/extensions/gsd/prompt-loader.ts +30 -7
  876. package/src/resources/extensions/gsd/prompts/complete-milestone.md +6 -2
  877. package/src/resources/extensions/gsd/prompts/complete-slice.md +2 -2
  878. package/src/resources/extensions/gsd/prompts/debug-diagnose.md +2 -0
  879. package/src/resources/extensions/gsd/prompts/discuss-headless.md +29 -2
  880. package/src/resources/extensions/gsd/prompts/discuss.md +29 -2
  881. package/src/resources/extensions/gsd/prompts/doctor-heal.md +5 -4
  882. package/src/resources/extensions/gsd/prompts/execute-task.md +3 -2
  883. package/src/resources/extensions/gsd/prompts/parallel-research-slices.md +5 -2
  884. package/src/resources/extensions/gsd/prompts/plan-slice.md +16 -2
  885. package/src/resources/extensions/gsd/prompts/research-slice.md +1 -0
  886. package/src/resources/extensions/gsd/prompts/system.md +1 -0
  887. package/src/resources/extensions/gsd/reports.ts +5 -4
  888. package/src/resources/extensions/gsd/safety/evidence-collector.ts +119 -0
  889. package/src/resources/extensions/gsd/safety/file-change-validator.ts +17 -4
  890. package/src/resources/extensions/gsd/safety/safety-harness.ts +9 -0
  891. package/src/resources/extensions/gsd/service-tier.ts +5 -2
  892. package/src/resources/extensions/gsd/skill-manifest.ts +175 -0
  893. package/src/resources/extensions/gsd/slice-cadence.ts +299 -0
  894. package/src/resources/extensions/gsd/state-transition-matrix.ts +152 -0
  895. package/src/resources/extensions/gsd/state.ts +80 -34
  896. package/src/resources/extensions/gsd/tests/artifacts-table-preserved-on-cache-invalidate.test.ts +2 -1
  897. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +253 -286
  898. package/src/resources/extensions/gsd/tests/auto-mode-guards.test.ts +79 -0
  899. package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +95 -1
  900. package/src/resources/extensions/gsd/tests/auto-paused-session-validation.test.ts +12 -0
  901. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +122 -0
  902. package/src/resources/extensions/gsd/tests/auto-remediate-slice-status.test.ts +4 -1
  903. package/src/resources/extensions/gsd/tests/auto-retry-mcp-churn-fixes.test.ts +8 -194
  904. package/src/resources/extensions/gsd/tests/auto-start-bootstrap-await-3420.test.ts +141 -0
  905. package/src/resources/extensions/gsd/tests/auto-start-clean-runtime-db-gated.test.ts +64 -0
  906. package/src/resources/extensions/gsd/tests/auto-start-cold-db-bootstrap.test.ts +2 -2
  907. package/src/resources/extensions/gsd/tests/auto-start-needs-discussion.test.ts +15 -58
  908. package/src/resources/extensions/gsd/tests/auto-start-worktree-db-path.test.ts +2 -2
  909. package/src/resources/extensions/gsd/tests/auto-thinking-restore.test.ts +39 -0
  910. package/src/resources/extensions/gsd/tests/auto-warning-noise-regression.test.ts +3 -2
  911. package/src/resources/extensions/gsd/tests/auto-wrapup-inflight-guard.test.ts +23 -0
  912. package/src/resources/extensions/gsd/tests/blocked-models.test.ts +98 -0
  913. package/src/resources/extensions/gsd/tests/bootstrap-derive-state-db-open.test.ts +2 -1
  914. package/src/resources/extensions/gsd/tests/bundled-skill-triggers.test.ts +54 -0
  915. package/src/resources/extensions/gsd/tests/cache-staleness-regression.test.ts +17 -21
  916. package/src/resources/extensions/gsd/tests/canonical-milestone-root.test.ts +108 -0
  917. package/src/resources/extensions/gsd/tests/clean-root-preflight.test.ts +186 -0
  918. package/src/resources/extensions/gsd/tests/cmux.test.ts +5 -9
  919. package/src/resources/extensions/gsd/tests/commands-extract-learnings.test.ts +68 -66
  920. package/src/resources/extensions/gsd/tests/compaction-snapshot.test.ts +123 -0
  921. package/src/resources/extensions/gsd/tests/complete-milestone-excerpt.test.ts +263 -0
  922. package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +61 -1
  923. package/src/resources/extensions/gsd/tests/complete-slice-composer.test.ts +192 -0
  924. package/src/resources/extensions/gsd/tests/complete-slice-verification-gate.test.ts +2 -1
  925. package/src/resources/extensions/gsd/tests/complete-slice.test.ts +2 -2
  926. package/src/resources/extensions/gsd/tests/complete-task.test.ts +8 -4
  927. package/src/resources/extensions/gsd/tests/complexity-classifier.test.ts +3 -3
  928. package/src/resources/extensions/gsd/tests/component-loader.test.ts +589 -0
  929. package/src/resources/extensions/gsd/tests/component-types.test.ts +127 -0
  930. package/src/resources/extensions/gsd/tests/context-store.test.ts +79 -0
  931. package/src/resources/extensions/gsd/tests/copy-planning-artifacts-samepath.test.ts +2 -1
  932. package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +161 -0
  933. package/src/resources/extensions/gsd/tests/db-access-guardrails.test.ts +1 -0
  934. package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +42 -0
  935. package/src/resources/extensions/gsd/tests/derive-state-helpers.test.ts +8 -4
  936. package/src/resources/extensions/gsd/tests/derive-state.test.ts +1 -2
  937. package/src/resources/extensions/gsd/tests/discuss-slice-structured-questions.test.ts +2 -1
  938. package/src/resources/extensions/gsd/tests/discuss-tool-scope-leak.test.ts +2 -1
  939. package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +14 -9
  940. package/src/resources/extensions/gsd/tests/dispatch-guard-summary-db-mismatch.test.ts +77 -0
  941. package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +25 -0
  942. package/src/resources/extensions/gsd/tests/dispatch-missing-task-plans.test.ts +14 -0
  943. package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +148 -3
  944. package/src/resources/extensions/gsd/tests/double-merge-guard.test.ts +4 -3
  945. package/src/resources/extensions/gsd/tests/empty-content-abort-loop.test.ts +4 -3
  946. package/src/resources/extensions/gsd/tests/ensure-db-open.test.ts +306 -1
  947. package/src/resources/extensions/gsd/tests/escalation.test.ts +1 -1
  948. package/src/resources/extensions/gsd/tests/exec-history.test.ts +237 -0
  949. package/src/resources/extensions/gsd/tests/exec-sandbox.test.ts +210 -0
  950. package/src/resources/extensions/gsd/tests/execution-entry-missing-context-4671.test.ts +173 -0
  951. package/src/resources/extensions/gsd/tests/extension-bootstrap-isolation.test.ts +139 -129
  952. package/src/resources/extensions/gsd/tests/file-change-validator.test.ts +58 -0
  953. package/src/resources/extensions/gsd/tests/file-lock.test.ts +86 -12
  954. package/src/resources/extensions/gsd/tests/finalize-timeout-guard.test.ts +8 -104
  955. package/src/resources/extensions/gsd/tests/flat-rate-routing-guard.test.ts +40 -9
  956. package/src/resources/extensions/gsd/tests/freeform-decisions.test.ts +62 -0
  957. package/src/resources/extensions/gsd/tests/google-search-stub.test.ts +131 -0
  958. package/src/resources/extensions/gsd/tests/gsd-db.test.ts +447 -1
  959. package/src/resources/extensions/gsd/tests/headless-milestone-parity.test.ts +117 -0
  960. package/src/resources/extensions/gsd/tests/hook-key-parsing.test.ts +4 -55
  961. package/src/resources/extensions/gsd/tests/init-wizard.test.ts +27 -0
  962. package/src/resources/extensions/gsd/tests/integration/all-milestones-complete-merge.test.ts +7 -56
  963. package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +30 -0
  964. package/src/resources/extensions/gsd/tests/integration/doctor-git-symlink-cwd.test.ts +11 -0
  965. package/src/resources/extensions/gsd/tests/integration/doctor-git.test.ts +78 -0
  966. package/src/resources/extensions/gsd/tests/integration/doctor-proactive.test.ts +18 -2
  967. package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +4 -2
  968. package/src/resources/extensions/gsd/tests/integration/gitignore-tracked-gsd.test.ts +1 -0
  969. package/src/resources/extensions/gsd/tests/integration/idle-recovery.test.ts +30 -0
  970. package/src/resources/extensions/gsd/tests/integration/queue-completed-milestone-perf.test.ts +10 -4
  971. package/src/resources/extensions/gsd/tests/integration/state-machine-edge-cases.test.ts +1 -1
  972. package/src/resources/extensions/gsd/tests/integration/worktree-e2e.test.ts +11 -0
  973. package/src/resources/extensions/gsd/tests/interactive-routing-bypass.test.ts +9 -3
  974. package/src/resources/extensions/gsd/tests/interrupted-session-ui.test.ts +6 -9
  975. package/src/resources/extensions/gsd/tests/isolation-none-branch-guard.test.ts +1 -1
  976. package/src/resources/extensions/gsd/tests/issue-4540-regressions.test.ts +288 -0
  977. package/src/resources/extensions/gsd/tests/journal-integration.test.ts +101 -0
  978. package/src/resources/extensions/gsd/tests/key-manager.test.ts +9 -0
  979. package/src/resources/extensions/gsd/tests/knowledge.test.ts +93 -1
  980. package/src/resources/extensions/gsd/tests/load-memory-block.test.ts +36 -0
  981. package/src/resources/extensions/gsd/tests/mcp-client-security.test.ts +47 -0
  982. package/src/resources/extensions/gsd/tests/md-importer.test.ts +1 -1
  983. package/src/resources/extensions/gsd/tests/memory-extractor.test.ts +5 -15
  984. package/src/resources/extensions/gsd/tests/memory-pressure-stuck-state.test.ts +12 -0
  985. package/src/resources/extensions/gsd/tests/memory-store.test.ts +2 -2
  986. package/src/resources/extensions/gsd/tests/merge-conflict-stops-loop.test.ts +227 -55
  987. package/src/resources/extensions/gsd/tests/milestone-scope-classifier.test.ts +187 -0
  988. package/src/resources/extensions/gsd/tests/milestone-status-authoritative.test.ts +3 -3
  989. package/src/resources/extensions/gsd/tests/milestone-summary-classifier.test.ts +30 -0
  990. package/src/resources/extensions/gsd/tests/milestone-transition-state-rebuild.test.ts +4 -2
  991. package/src/resources/extensions/gsd/tests/model-cost-table.test.ts +9 -1
  992. package/src/resources/extensions/gsd/tests/model-router.test.ts +1 -1
  993. package/src/resources/extensions/gsd/tests/native-git-bridge-exec-fallback.test.ts +6 -48
  994. package/src/resources/extensions/gsd/tests/notification-widget.test.ts +6 -3
  995. package/src/resources/extensions/gsd/tests/orphaned-worktree-audit.test.ts +59 -2
  996. package/src/resources/extensions/gsd/tests/parallel-commit-scope.test.ts +5 -0
  997. package/src/resources/extensions/gsd/tests/parallel-research-dispatch.test.ts +274 -112
  998. package/src/resources/extensions/gsd/tests/parallel-skill-prompt-integration.test.ts +150 -0
  999. package/src/resources/extensions/gsd/tests/pipeline-variant-dispatch.test.ts +301 -0
  1000. package/src/resources/extensions/gsd/tests/plan-gate-failed-doctor-heal-hint.test.ts +37 -0
  1001. package/src/resources/extensions/gsd/tests/pre-exec-backtick-strip.test.ts +14 -0
  1002. package/src/resources/extensions/gsd/tests/pre-exec-gate-loop.test.ts +272 -0
  1003. package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +356 -0
  1004. package/src/resources/extensions/gsd/tests/preferences-worktree-sync.test.ts +2 -1
  1005. package/src/resources/extensions/gsd/tests/preferences.test.ts +110 -0
  1006. package/src/resources/extensions/gsd/tests/prefs-wizard-coverage.test.ts +44 -0
  1007. package/src/resources/extensions/gsd/tests/prompt-cache-optimizer.test.ts +12 -0
  1008. package/src/resources/extensions/gsd/tests/prompt-loader-extension-dir.test.ts +49 -0
  1009. package/src/resources/extensions/gsd/tests/prompt-step-ordering.test.ts +15 -4
  1010. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +164 -45
  1011. package/src/resources/extensions/gsd/tests/queue-auto-guard.test.ts +181 -0
  1012. package/src/resources/extensions/gsd/tests/queue-draft-detection.test.ts +3 -2
  1013. package/src/resources/extensions/gsd/tests/queued-discuss-fast-path.test.ts +4 -5
  1014. package/src/resources/extensions/gsd/tests/quick-auto-guard.test.ts +13 -7
  1015. package/src/resources/extensions/gsd/tests/ready-phrase-no-files-4573.test.ts +388 -0
  1016. package/src/resources/extensions/gsd/tests/reassess-default-optin.test.ts +132 -0
  1017. package/src/resources/extensions/gsd/tests/recovery-attempts-reset.test.ts +8 -40
  1018. package/src/resources/extensions/gsd/tests/regex-hardening.test.ts +136 -256
  1019. package/src/resources/extensions/gsd/tests/require-slice-discussion-dispatch.test.ts +170 -0
  1020. package/src/resources/extensions/gsd/tests/research-milestone-composer.test.ts +114 -0
  1021. package/src/resources/extensions/gsd/tests/restore-tools-after-discuss.test.ts +15 -6
  1022. package/src/resources/extensions/gsd/tests/resume-dispatch-worktree.test.ts +230 -0
  1023. package/src/resources/extensions/gsd/tests/rewrite-docs-abandon-detect.test.ts +195 -0
  1024. package/src/resources/extensions/gsd/tests/run-uat-composer.test.ts +148 -0
  1025. package/src/resources/extensions/gsd/tests/safety-harness-false-positives.test.ts +205 -0
  1026. package/src/resources/extensions/gsd/tests/save-gate-result-render.test.ts +95 -0
  1027. package/src/resources/extensions/gsd/tests/schema-v21-sequence.test.ts +413 -0
  1028. package/src/resources/extensions/gsd/tests/service-tier.test.ts +4 -0
  1029. package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +32 -40
  1030. package/src/resources/extensions/gsd/tests/sidecar-queue.test.ts +3 -2
  1031. package/src/resources/extensions/gsd/tests/silent-catch-diagnostics.test.ts +55 -95
  1032. package/src/resources/extensions/gsd/tests/skill-activation.test.ts +120 -1
  1033. package/src/resources/extensions/gsd/tests/skill-manifest.test.ts +112 -0
  1034. package/src/resources/extensions/gsd/tests/slice-cadence.test.ts +242 -0
  1035. package/src/resources/extensions/gsd/tests/slice-context-injection.test.ts +3 -2
  1036. package/src/resources/extensions/gsd/tests/smart-entry-draft.test.ts +2 -1
  1037. package/src/resources/extensions/gsd/tests/stale-dirlistcache-4648.test.ts +112 -0
  1038. package/src/resources/extensions/gsd/tests/stash-queued-context-files.test.ts +56 -0
  1039. package/src/resources/extensions/gsd/tests/state-machine-full-walkthrough.test.ts +24 -0
  1040. package/src/resources/extensions/gsd/tests/state-transition-matrix.test.ts +44 -0
  1041. package/src/resources/extensions/gsd/tests/stop-auto-race-null-unit.test.ts +3 -3
  1042. package/src/resources/extensions/gsd/tests/structured-data-formatter.test.ts +11 -92
  1043. package/src/resources/extensions/gsd/tests/stuck-detection-coverage.test.ts +2 -2
  1044. package/src/resources/extensions/gsd/tests/subagent-model-dispatch.test.ts +7 -6
  1045. package/src/resources/extensions/gsd/tests/survivor-branch-complete.test.ts +102 -101
  1046. package/src/resources/extensions/gsd/tests/sync-worktree-skip-current.test.ts +4 -3
  1047. package/src/resources/extensions/gsd/tests/test-helpers.test.ts +98 -0
  1048. package/src/resources/extensions/gsd/tests/test-helpers.ts +153 -0
  1049. package/src/resources/extensions/gsd/tests/token-counter.test.ts +105 -1
  1050. package/src/resources/extensions/gsd/tests/token-profile.test.ts +8 -1
  1051. package/src/resources/extensions/gsd/tests/tool-compatibility.test.ts +107 -0
  1052. package/src/resources/extensions/gsd/tests/triage-resolution.test.ts +50 -2
  1053. package/src/resources/extensions/gsd/tests/turn-epoch.test.ts +162 -0
  1054. package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +355 -0
  1055. package/src/resources/extensions/gsd/tests/unit-context-manifest.test.ts +203 -0
  1056. package/src/resources/extensions/gsd/tests/uok-contracts.test.ts +51 -0
  1057. package/src/resources/extensions/gsd/tests/uok-execution-graph.test.ts +16 -0
  1058. package/src/resources/extensions/gsd/tests/uok-gitops-wiring.test.ts +49 -26
  1059. package/src/resources/extensions/gsd/tests/uok-loop-adapter-writer.test.ts +65 -0
  1060. package/src/resources/extensions/gsd/tests/uok-parity-report.test.ts +42 -0
  1061. package/src/resources/extensions/gsd/tests/uok-plan-v2-wiring.test.ts +42 -2
  1062. package/src/resources/extensions/gsd/tests/uok-writer.test.ts +75 -0
  1063. package/src/resources/extensions/gsd/tests/validate-extension-package.test.ts +168 -0
  1064. package/src/resources/extensions/gsd/tests/validate-milestone.test.ts +148 -8
  1065. package/src/resources/extensions/gsd/tests/verify-artifact-tightened.test.ts +144 -80
  1066. package/src/resources/extensions/gsd/tests/visualizer-critical-path.test.ts +20 -54
  1067. package/src/resources/extensions/gsd/tests/visualizer-overlay.test.ts +342 -277
  1068. package/src/resources/extensions/gsd/tests/worker-model-override.test.ts +37 -29
  1069. package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +25 -2
  1070. package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +65 -2
  1071. package/src/resources/extensions/gsd/tests/worktree-db.test.ts +242 -247
  1072. package/src/resources/extensions/gsd/tests/worktree-health-monorepo.test.ts +103 -67
  1073. package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +6 -1
  1074. package/src/resources/extensions/gsd/tests/worktree-nested-git-safety.test.ts +92 -90
  1075. package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +78 -5
  1076. package/src/resources/extensions/gsd/tests/worktree-submodule-safety.test.ts +238 -59
  1077. package/src/resources/extensions/gsd/tests/worktree-sync-overwrite-loop.test.ts +113 -161
  1078. package/src/resources/extensions/gsd/tests/worktree-telemetry.test.ts +210 -0
  1079. package/src/resources/extensions/gsd/tests/write-gate.test.ts +64 -0
  1080. package/src/resources/extensions/gsd/tests/zombie-gsd-state.test.ts +80 -94
  1081. package/src/resources/extensions/gsd/token-counter.ts +22 -5
  1082. package/src/resources/extensions/gsd/tools/complete-milestone.ts +15 -9
  1083. package/src/resources/extensions/gsd/tools/complete-slice.ts +38 -0
  1084. package/src/resources/extensions/gsd/tools/complete-task.ts +49 -0
  1085. package/src/resources/extensions/gsd/tools/exec-search-tool.ts +81 -0
  1086. package/src/resources/extensions/gsd/tools/exec-tool.ts +183 -0
  1087. package/src/resources/extensions/gsd/tools/memory-tools.ts +31 -1
  1088. package/src/resources/extensions/gsd/tools/resume-tool.ts +40 -0
  1089. package/src/resources/extensions/gsd/tools/validate-milestone.ts +8 -2
  1090. package/src/resources/extensions/gsd/unit-context-composer.ts +218 -0
  1091. package/src/resources/extensions/gsd/unit-context-manifest.ts +492 -0
  1092. package/src/resources/extensions/gsd/uok/audit.ts +20 -2
  1093. package/src/resources/extensions/gsd/uok/contracts.ts +65 -0
  1094. package/src/resources/extensions/gsd/uok/dispatch-envelope.ts +56 -0
  1095. package/src/resources/extensions/gsd/uok/execution-graph.ts +22 -0
  1096. package/src/resources/extensions/gsd/uok/gitops.ts +6 -1
  1097. package/src/resources/extensions/gsd/uok/loop-adapter.ts +45 -10
  1098. package/src/resources/extensions/gsd/uok/parity-report.ts +84 -0
  1099. package/src/resources/extensions/gsd/uok/plan-v2.ts +39 -8
  1100. package/src/resources/extensions/gsd/uok/writer.ts +113 -0
  1101. package/src/resources/extensions/gsd/workflow-logger.ts +25 -3
  1102. package/src/resources/extensions/gsd/workflow-mcp.ts +3 -0
  1103. package/src/resources/extensions/gsd/workflow-templates/spike.md +6 -0
  1104. package/src/resources/extensions/gsd/worktree-manager.ts +54 -0
  1105. package/src/resources/extensions/gsd/worktree-resolver.ts +150 -18
  1106. package/src/resources/extensions/gsd/worktree-telemetry.ts +322 -0
  1107. package/src/resources/extensions/mcp-client/auth.ts +12 -1
  1108. package/src/resources/extensions/mcp-client/index.ts +132 -11
  1109. package/src/resources/extensions/mcp-client/tests/server-name-spaces.test.ts +70 -36
  1110. package/src/resources/extensions/ollama/index.ts +5 -1
  1111. package/src/resources/extensions/ollama/ollama-auth-mode.test.ts +123 -15
  1112. package/src/resources/extensions/ollama/ollama-status-indicator.test.ts +206 -19
  1113. package/src/resources/extensions/remote-questions/manager.ts +36 -4
  1114. package/src/resources/extensions/remote-questions/tests/command-polling.test.ts +200 -190
  1115. package/src/resources/extensions/search-the-web/command-search-provider.ts +5 -4
  1116. package/src/resources/extensions/search-the-web/native-search.ts +48 -12
  1117. package/src/resources/extensions/shared/cmux-events.ts +59 -0
  1118. package/src/resources/extensions/shared/rtk-session-stats.ts +1 -2
  1119. package/src/resources/extensions/shared/tests/interview-preview.test.ts +11 -3
  1120. package/src/resources/extensions/voice/tests/linux-ready.test.ts +129 -113
  1121. package/src/resources/skills/api-design/SKILL.md +190 -0
  1122. package/src/resources/skills/create-mcp-server/SKILL.md +121 -0
  1123. package/src/resources/skills/create-skill/SKILL.md +2 -2
  1124. package/src/resources/skills/create-skill/references/gsd-skill-ecosystem.md +4 -4
  1125. package/src/resources/skills/create-skill/workflows/audit-skill.md +4 -4
  1126. package/src/resources/skills/create-skill/workflows/create-new-skill.md +5 -5
  1127. package/src/resources/skills/decompose-into-slices/SKILL.md +139 -0
  1128. package/src/resources/skills/dependency-upgrade/SKILL.md +158 -0
  1129. package/src/resources/skills/design-an-interface/SKILL.md +102 -0
  1130. package/src/resources/skills/forensics/SKILL.md +153 -0
  1131. package/src/resources/skills/grill-me/SKILL.md +93 -0
  1132. package/src/resources/skills/handoff/SKILL.md +121 -0
  1133. package/src/resources/skills/observability/SKILL.md +174 -0
  1134. package/src/resources/skills/security-review/SKILL.md +181 -0
  1135. package/src/resources/skills/spike-wrap-up/SKILL.md +138 -0
  1136. package/src/resources/skills/tdd/SKILL.md +112 -0
  1137. package/src/resources/skills/verify-before-complete/SKILL.md +98 -0
  1138. package/src/resources/skills/write-docs/SKILL.md +82 -0
  1139. package/src/resources/skills/write-milestone-brief/SKILL.md +135 -0
  1140. package/dist/web/standalone/.next/server/chunks/7461.js +0 -1
  1141. package/dist/web/standalone/.next/static/chunks/2826.e59e8578e2e28639.js +0 -9
  1142. package/dist/web/standalone/.next/static/chunks/app/page-151349214571e2b6.js +0 -1
  1143. package/dist/web/standalone/.next/static/chunks/main-app-d3d4c336195465f9.js +0 -1
  1144. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ab5a8926e07ec673.js +0 -1
  1145. package/src/resources/extensions/gsd/tests/auto-start-model-capture.test.ts +0 -113
  1146. package/src/resources/extensions/gsd/tests/complete-milestone-false-merge.test.ts +0 -142
  1147. package/src/resources/extensions/gsd/tests/dashboard-model-label-ordering.test.ts +0 -107
  1148. package/src/resources/extensions/gsd/tests/find-missing-summaries-closed.test.ts +0 -48
  1149. package/src/resources/extensions/gsd/tests/forensics-context-persist.test.ts +0 -159
  1150. package/src/resources/extensions/gsd/tests/forensics-db-completion.test.ts +0 -96
  1151. package/src/resources/extensions/gsd/tests/forensics-dedup.test.ts +0 -79
  1152. package/src/resources/extensions/gsd/tests/forensics-hook-key-parse.test.ts +0 -74
  1153. package/src/resources/extensions/gsd/tests/forensics-journal.test.ts +0 -162
  1154. package/src/resources/extensions/gsd/tests/gitignore-bg-shell.test.ts +0 -38
  1155. package/src/resources/extensions/gsd/tests/gsd-no-project-error.test.ts +0 -73
  1156. package/src/resources/extensions/gsd/tests/idle-watchdog-stall-override.test.ts +0 -125
  1157. package/src/resources/extensions/gsd/tests/import-done-milestones.test.ts +0 -42
  1158. /package/dist/web/standalone/.next/static/{ssX7BLv3Dw9Fb4CtrCGeR → gYYky7yfxW8txb9vU2TrJ}/_buildManifest.js +0 -0
  1159. /package/dist/web/standalone/.next/static/{ssX7BLv3Dw9Fb4CtrCGeR → gYYky7yfxW8txb9vU2TrJ}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"agent-loop.js","sourceRoot":"","sources":["../src/agent-loop.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Agent loop that works with AgentMessage throughout.\n * Transforms to Message[] only at the LLM call boundary.\n */\n\nimport {\n\ttype AssistantMessage,\n\ttype Context,\n\tEventStream,\n\tstreamSimple,\n\ttype ToolResultMessage,\n\tvalidateToolArguments,\n} from \"@gsd/pi-ai\";\nimport type {\n\tAgentContext,\n\tAgentEvent,\n\tAgentLoopConfig,\n\tAgentMessage,\n\tAgentTool,\n\tAgentToolCall,\n\tAgentToolResult,\n\tStreamFn,\n} from \"./types.js\";\n\n/**\n * Maximum number of consecutive turns where ALL tool calls in the turn fail\n * schema validation before the loop terminates. This prevents unbounded retry\n * loops when the LLM repeatedly emits tool calls with arguments that cannot\n * pass validation (e.g., schema overload, truncated JSON, missing required\n * fields). See: https://github.com/gsd-build/gsd-2/issues/2783\n */\nexport const MAX_CONSECUTIVE_VALIDATION_FAILURES = 3;\n\nexport const ZERO_USAGE = {\n\tinput: 0,\n\toutput: 0,\n\tcacheRead: 0,\n\tcacheWrite: 0,\n\ttotalTokens: 0,\n\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n} as const;\n\n/**\n * Build an AssistantMessage for an unhandled error caught outside runLoop.\n * Uses the model from config so the message satisfies the full interface.\n */\nfunction createErrorMessage(error: unknown, config: AgentLoopConfig): AssistantMessage {\n\tconst msg = error instanceof Error ? error.message : String(error);\n\treturn {\n\t\trole: \"assistant\",\n\t\tcontent: [{ type: \"text\", text: msg }],\n\t\tapi: config.model.api,\n\t\tprovider: config.model.provider,\n\t\tmodel: config.model.id,\n\t\tusage: ZERO_USAGE,\n\t\tstopReason: \"error\",\n\t\terrorMessage: msg,\n\t\ttimestamp: Date.now(),\n\t};\n}\n\n/**\n * Emit a message_start + message_end pair for a single message.\n */\nfunction emitMessagePair(stream: EventStream<AgentEvent, AgentMessage[]>, message: AgentMessage): void {\n\tstream.push({ type: \"message_start\", message });\n\tstream.push({ type: \"message_end\", message });\n}\n\n/**\n * Emit the standard error sequence when the outer agent loop catches an error.\n * Pushes message_start/end, turn_end, agent_end, then closes the stream.\n */\nfunction emitErrorSequence(\n\tstream: EventStream<AgentEvent, AgentMessage[]>,\n\terrMsg: AssistantMessage,\n\tnewMessages: AgentMessage[],\n): void {\n\temitMessagePair(stream, errMsg);\n\tstream.push({ type: \"turn_end\", message: errMsg, toolResults: [] });\n\tstream.push({ type: \"agent_end\", messages: [...newMessages, errMsg] });\n\tstream.end([...newMessages, errMsg]);\n}\n\n/**\n * Start an agent loop with a new prompt message.\n * The prompt is added to the context and events are emitted for it.\n */\nexport function agentLoop(\n\tprompts: AgentMessage[],\n\tcontext: AgentContext,\n\tconfig: AgentLoopConfig,\n\tsignal?: AbortSignal,\n\tstreamFn?: StreamFn,\n): EventStream<AgentEvent, AgentMessage[]> {\n\tconst stream = createAgentStream();\n\n\t(async () => {\n\t\tconst newMessages: AgentMessage[] = [...prompts];\n\t\tconst currentContext: AgentContext = {\n\t\t\t...context,\n\t\t\tmessages: [...context.messages, ...prompts],\n\t\t};\n\n\t\tstream.push({ type: \"agent_start\" });\n\t\tstream.push({ type: \"turn_start\" });\n\t\tfor (const prompt of prompts) {\n\t\t\temitMessagePair(stream, prompt);\n\t\t}\n\n\t\ttry {\n\t\t\tawait runLoop(currentContext, newMessages, config, signal, stream, streamFn);\n\t\t} catch (error) {\n\t\t\temitErrorSequence(stream, createErrorMessage(error, config), newMessages);\n\t\t}\n\t})();\n\n\treturn stream;\n}\n\n/**\n * Continue an agent loop from the current context without adding a new message.\n * Used for retries - context already has user message or tool results.\n *\n * **Important:** The last message in context must convert to a `user` or `toolResult` message\n * via `convertToLlm`. If it doesn't, the LLM provider will reject the request.\n * This cannot be validated here since `convertToLlm` is only called once per turn.\n */\nexport function agentLoopContinue(\n\tcontext: AgentContext,\n\tconfig: AgentLoopConfig,\n\tsignal?: AbortSignal,\n\tstreamFn?: StreamFn,\n): EventStream<AgentEvent, AgentMessage[]> {\n\tif (context.messages.length === 0) {\n\t\tthrow new Error(\"Cannot continue: no messages in context\");\n\t}\n\n\tif (context.messages[context.messages.length - 1].role === \"assistant\") {\n\t\tthrow new Error(\"Cannot continue from message role: assistant\");\n\t}\n\n\tconst stream = createAgentStream();\n\n\t(async () => {\n\t\tconst newMessages: AgentMessage[] = [];\n\t\tconst currentContext: AgentContext = {\n\t\t\t...context,\n\t\t\tmessages: [...context.messages],\n\t\t};\n\n\t\tstream.push({ type: \"agent_start\" });\n\t\tstream.push({ type: \"turn_start\" });\n\n\t\ttry {\n\t\t\tawait runLoop(currentContext, newMessages, config, signal, stream, streamFn);\n\t\t} catch (error) {\n\t\t\temitErrorSequence(stream, createErrorMessage(error, config), newMessages);\n\t\t}\n\t})();\n\n\treturn stream;\n}\n\nfunction createAgentStream(): EventStream<AgentEvent, AgentMessage[]> {\n\treturn new EventStream<AgentEvent, AgentMessage[]>(\n\t\t(event: AgentEvent) => event.type === \"agent_end\",\n\t\t(event: AgentEvent) => (event.type === \"agent_end\" ? event.messages : []),\n\t);\n}\n\n/**\n * Main loop logic shared by agentLoop and agentLoopContinue.\n */\nasync function runLoop(\n\tcurrentContext: AgentContext,\n\tnewMessages: AgentMessage[],\n\tconfig: AgentLoopConfig,\n\tsignal: AbortSignal | undefined,\n\tstream: EventStream<AgentEvent, AgentMessage[]>,\n\tstreamFn?: StreamFn,\n): Promise<void> {\n\tlet firstTurn = true;\n\t// Check for steering messages at start (user may have typed while waiting)\n\tlet pendingMessages: AgentMessage[] = (await config.getSteeringMessages?.()) || [];\n\n\t// Track consecutive turns where ALL tool calls fail validation.\n\t// When the LLM repeatedly emits tool calls with schema-overloaded or malformed\n\t// arguments, each turn produces only error tool results. Without a cap, this\n\t// creates an unbounded retry loop that burns budget. (#2783)\n\tlet consecutiveAllToolErrorTurns = 0;\n\n\t// Outer loop: continues when queued follow-up messages arrive after agent would stop\n\twhile (true) {\n\t\tlet hasMoreToolCalls = true;\n\t\tlet steeringAfterTools: AgentMessage[] | null = null;\n\n\t\t// Inner loop: process tool calls and steering messages\n\t\twhile (hasMoreToolCalls || pendingMessages.length > 0) {\n\t\t\tif (!firstTurn) {\n\t\t\t\tstream.push({ type: \"turn_start\" });\n\t\t\t} else {\n\t\t\t\tfirstTurn = false;\n\t\t\t}\n\n\t\t\t// Process pending messages (inject before next assistant response)\n\t\t\tif (pendingMessages.length > 0) {\n\t\t\t\tfor (const message of pendingMessages) {\n\t\t\t\t\temitMessagePair(stream, message);\n\t\t\t\t\tcurrentContext.messages.push(message);\n\t\t\t\t\tnewMessages.push(message);\n\t\t\t\t}\n\t\t\t\tpendingMessages = [];\n\t\t\t}\n\n\t\t\t// Stream assistant response\n\t\t\tlet message: AssistantMessage;\n\t\t\ttry {\n\t\t\t\tmessage = await streamAssistantResponse(currentContext, config, signal, stream, streamFn);\n\t\t\t} catch (error) {\n\t\t\t\t// Critical failure before stream started (e.g. getApiKey threw, credentials in\n\t\t\t\t// backoff, network unavailable). Convert to a graceful error message so the\n\t\t\t\t// agent loop can end cleanly instead of crashing with an unhandled rejection.\n\t\t\t\tconst errorText = error instanceof Error ? error.message : String(error);\n\t\t\t\tmessage = {\n\t\t\t\t\trole: \"assistant\",\n\t\t\t\t\tcontent: [],\n\t\t\t\t\tapi: config.model.api,\n\t\t\t\t\tprovider: config.model.provider,\n\t\t\t\t\tmodel: config.model.id,\n\t\t\t\t\tusage: ZERO_USAGE,\n\t\t\t\t\tstopReason: signal?.aborted ? \"aborted\" : \"error\",\n\t\t\t\t\terrorMessage: errorText,\n\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t};\n\t\t\t\tstream.push({ type: \"message_start\", message: { ...message } });\n\t\t\t\tstream.push({ type: \"message_end\", message });\n\t\t\t\tcurrentContext.messages.push(message);\n\t\t\t}\n\t\t\tnewMessages.push(message);\n\n\t\t\tif (message.stopReason === \"error\" || message.stopReason === \"aborted\") {\n\t\t\t\tstream.push({ type: \"turn_end\", message, toolResults: [] });\n\t\t\t\tstream.push({ type: \"agent_end\", messages: newMessages });\n\t\t\t\tstream.end(newMessages);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Check for tool calls or paused server turn\n\t\t\tconst toolCalls = message.content.filter((c) => c.type === \"toolCall\");\n\t\t\thasMoreToolCalls =\n\t\t\t\ttoolCalls.length > 0 || message.stopReason === \"pauseTurn\";\n\n\t\t\tconst toolResults: ToolResultMessage[] = [];\n\t\t\tif (hasMoreToolCalls && config.externalToolExecution) {\n\t\t\t\t// External execution mode: tools were handled by the provider\n\t\t\t\t// (e.g., Claude Code SDK). Emit tool_execution events for each\n\t\t\t\t// tool call. Prefer any provider-supplied externalResult attached\n\t\t\t\t// to the tool call so the UI can show the real stdout/stderr\n\t\t\t\t// instead of a generic placeholder.\n\t\t\t\tfor (const tc of toolCalls as AgentToolCall[]) {\n\t\t\t\t\tconst externalResult = (tc as AgentToolCall & {\n\t\t\t\t\t\texternalResult?: {\n\t\t\t\t\t\t\tcontent?: Array<{ type: string; text?: string; data?: string; mimeType?: string }>;\n\t\t\t\t\t\t\tdetails?: Record<string, unknown>;\n\t\t\t\t\t\t\tisError?: boolean;\n\t\t\t\t\t\t};\n\t\t\t\t\t}).externalResult;\n\t\t\t\t\tstream.push({\n\t\t\t\t\t\ttype: \"tool_execution_start\",\n\t\t\t\t\t\ttoolCallId: tc.id,\n\t\t\t\t\t\ttoolName: tc.name,\n\t\t\t\t\t\targs: tc.arguments,\n\t\t\t\t\t});\n\t\t\t\t\tstream.push({\n\t\t\t\t\t\ttype: \"tool_execution_end\",\n\t\t\t\t\t\ttoolCallId: tc.id,\n\t\t\t\t\t\ttoolName: tc.name,\n\t\t\t\t\t\tresult: externalResult\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\tcontent: externalResult.content ?? [{ type: \"text\", text: \"\" }],\n\t\t\t\t\t\t\t\t\tdetails: externalResult.details ?? {},\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"(executed by Claude Code)\" }],\n\t\t\t\t\t\t\t\t\tdetails: {},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\tisError: externalResult?.isError ?? false,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// Don't add tool results to context or loop back — the streamSimple\n\t\t\t\t// call already ran the full multi-turn agentic loop.\n\t\t\t\thasMoreToolCalls = false;\n\t\t\t} else if (hasMoreToolCalls) {\n\t\t\t\tconst toolExecution = await executeToolCalls(\n\t\t\t\t\tcurrentContext,\n\t\t\t\t\tmessage,\n\t\t\t\t\tconfig,\n\t\t\t\t\tsignal,\n\t\t\t\t\tstream,\n\t\t\t\t);\n\t\t\t\ttoolResults.push(...toolExecution.toolResults);\n\t\t\t\tsteeringAfterTools = toolExecution.steeringMessages ?? null;\n\n\t\t\t\tfor (const result of toolResults) {\n\t\t\t\t\tcurrentContext.messages.push(result);\n\t\t\t\t\tnewMessages.push(result);\n\t\t\t\t}\n\n\t\t\t\t// Schema overload detection (#2783): count only preparation-phase\n\t\t\t\t// errors (schema validation, tool-not-found, tool-blocked) toward the\n\t\t\t\t// consecutive failure cap. Tool execution errors — such as bash\n\t\t\t\t// commands returning non-zero exit codes (e.g. grep/rg exit 1 for\n\t\t\t\t// \"no matches\") — are valid tool usage and must NOT trigger the cap.\n\t\t\t\t// See: #3618\n\t\t\t\tconst hasPreparationErrors = toolExecution.preparationErrorCount > 0;\n\t\t\t\tconst allToolsFailedPreparation =\n\t\t\t\t\ttoolResults.length > 0 &&\n\t\t\t\t\ttoolExecution.preparationErrorCount === toolResults.length;\n\t\t\t\tif (allToolsFailedPreparation) {\n\t\t\t\t\tconsecutiveAllToolErrorTurns++;\n\t\t\t\t} else if (!hasPreparationErrors) {\n\t\t\t\t\t// Reset only when there are zero preparation errors this turn.\n\t\t\t\t\t// Mixed turns (some prep errors, some successes) don't reset,\n\t\t\t\t\t// but they also don't increment — this avoids masking a\n\t\t\t\t\t// pattern of alternating schema failures with one working call.\n\t\t\t\t\tconsecutiveAllToolErrorTurns = 0;\n\t\t\t\t}\n\n\t\t\t\tif (consecutiveAllToolErrorTurns >= MAX_CONSECUTIVE_VALIDATION_FAILURES) {\n\t\t\t\t\t// Force-stop: the LLM is stuck retrying broken tool calls.\n\t\t\t\t\t// Emit the turn_end and terminate the agent loop cleanly.\n\t\t\t\t\tstream.push({ type: \"turn_end\", message, toolResults });\n\t\t\t\t\tconst stopMessage: AssistantMessage = {\n\t\t\t\t\t\trole: \"assistant\",\n\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\ttext: `Agent stopped: ${consecutiveAllToolErrorTurns} consecutive turns with all tool calls failing. This usually means the model is repeatedly sending arguments that do not match the tool schema.`,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tapi: config.model.api,\n\t\t\t\t\t\tprovider: config.model.provider,\n\t\t\t\t\t\tmodel: config.model.id,\n\t\t\t\t\t\tusage: ZERO_USAGE,\n\t\t\t\t\t\tstopReason: \"error\",\n\t\t\t\t\t\terrorMessage: \"Schema overload: consecutive tool validation failures exceeded cap\",\n\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t};\n\t\t\t\t\temitMessagePair(stream, stopMessage);\n\t\t\t\t\tnewMessages.push(stopMessage);\n\t\t\t\t\tstream.push({ type: \"turn_end\", message: stopMessage, toolResults: [] });\n\t\t\t\t\tstream.push({ type: \"agent_end\", messages: newMessages });\n\t\t\t\t\tstream.end(newMessages);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tstream.push({ type: \"turn_end\", message, toolResults });\n\n\t\t\t// Get steering messages after turn completes\n\t\t\tif (steeringAfterTools && steeringAfterTools.length > 0) {\n\t\t\t\tpendingMessages = steeringAfterTools;\n\t\t\t\tsteeringAfterTools = null;\n\t\t\t} else {\n\t\t\t\tpendingMessages = (await config.getSteeringMessages?.()) || [];\n\t\t\t}\n\t\t}\n\n\t\t// Agent would stop here. Check for follow-up messages.\n\t\tconst followUpMessages = (await config.getFollowUpMessages?.()) || [];\n\t\tif (followUpMessages.length > 0) {\n\t\t\t// Set as pending so inner loop processes them\n\t\t\tpendingMessages = followUpMessages;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// No more messages, exit\n\t\tbreak;\n\t}\n\n\tstream.push({ type: \"agent_end\", messages: newMessages });\n\tstream.end(newMessages);\n}\n\n/**\n * Stream an assistant response from the LLM.\n * This is where AgentMessage[] gets transformed to Message[] for the LLM.\n */\nasync function streamAssistantResponse(\n\tcontext: AgentContext,\n\tconfig: AgentLoopConfig,\n\tsignal: AbortSignal | undefined,\n\tstream: EventStream<AgentEvent, AgentMessage[]>,\n\tstreamFn?: StreamFn,\n): Promise<AssistantMessage> {\n\t// Apply context transform if configured (AgentMessage[] → AgentMessage[])\n\tlet messages = context.messages;\n\tif (config.transformContext) {\n\t\tmessages = await config.transformContext(messages, signal);\n\t}\n\n\t// Convert to LLM-compatible messages (AgentMessage[] → Message[])\n\tconst llmMessages = await config.convertToLlm(messages);\n\n\t// Build LLM context\n\tconst llmContext: Context = {\n\t\tsystemPrompt: context.systemPrompt,\n\t\tmessages: llmMessages,\n\t\ttools: context.tools,\n\t};\n\n\tconst streamFunction = streamFn || streamSimple;\n\n\t// Resolve API key (important for expiring tokens)\n\tconst resolvedApiKey =\n\t\t(config.getApiKey ? await config.getApiKey(config.model.provider) : undefined) || config.apiKey;\n\n\tconst response = await streamFunction(config.model, llmContext, {\n\t\t...config,\n\t\tapiKey: resolvedApiKey,\n\t\tsignal,\n\t});\n\n\tlet partialMessage: AssistantMessage | null = null;\n\tlet addedPartial = false;\n\n\tfor await (const event of response) {\n\t\tswitch (event.type) {\n\t\t\tcase \"start\":\n\t\t\t\tpartialMessage = event.partial;\n\t\t\t\tcontext.messages.push(partialMessage);\n\t\t\t\taddedPartial = true;\n\t\t\t\tstream.push({ type: \"message_start\", message: { ...partialMessage } });\n\t\t\t\tbreak;\n\n\t\t\tcase \"text_start\":\n\t\t\tcase \"text_delta\":\n\t\t\tcase \"text_end\":\n\t\t\tcase \"thinking_start\":\n\t\t\tcase \"thinking_delta\":\n\t\t\tcase \"thinking_end\":\n\t\t\tcase \"toolcall_start\":\n\t\t\tcase \"toolcall_delta\":\n\t\t\tcase \"toolcall_end\":\n\t\t\tcase \"server_tool_use\":\n\t\t\tcase \"web_search_result\":\n\t\t\t\tif (partialMessage) {\n\t\t\t\t\tpartialMessage = event.partial;\n\t\t\t\t\tcontext.messages[context.messages.length - 1] = partialMessage;\n\t\t\t\t\tstream.push({\n\t\t\t\t\t\ttype: \"message_update\",\n\t\t\t\t\t\tassistantMessageEvent: event,\n\t\t\t\t\t\tmessage: { ...partialMessage },\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"done\":\n\t\t\tcase \"error\": {\n\t\t\t\tconst finalMessage = await response.result();\n\t\t\t\tif (addedPartial) {\n\t\t\t\t\tcontext.messages[context.messages.length - 1] = finalMessage;\n\t\t\t\t} else {\n\t\t\t\t\tcontext.messages.push(finalMessage);\n\t\t\t\t}\n\t\t\t\tif (!addedPartial) {\n\t\t\t\t\tstream.push({ type: \"message_start\", message: { ...finalMessage } });\n\t\t\t\t}\n\t\t\t\tstream.push({ type: \"message_end\", message: finalMessage });\n\t\t\t\treturn finalMessage;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn await response.result();\n}\n\n/**\n * Result from executing tool calls in a turn. Includes metadata about\n * error provenance so the schema overload detector can distinguish\n * preparation failures (schema validation, tool-not-found, tool-blocked)\n * from execution failures (the tool ran but threw, e.g. bash exit code 1).\n */\ninterface ToolExecutionResult {\n\ttoolResults: ToolResultMessage[];\n\tsteeringMessages?: AgentMessage[];\n\t/** Number of tool results that failed during preparation (validation/schema). */\n\tpreparationErrorCount: number;\n}\n\n/**\n * Execute tool calls from an assistant message.\n */\nasync function executeToolCalls(\n\tcurrentContext: AgentContext,\n\tassistantMessage: AssistantMessage,\n\tconfig: AgentLoopConfig,\n\tsignal: AbortSignal | undefined,\n\tstream: EventStream<AgentEvent, AgentMessage[]>,\n): Promise<ToolExecutionResult> {\n\tconst toolCalls = assistantMessage.content.filter((c) => c.type === \"toolCall\") as AgentToolCall[];\n\tif (config.toolExecution === \"sequential\") {\n\t\treturn executeToolCallsSequential(currentContext, assistantMessage, toolCalls, config, signal, stream);\n\t}\n\treturn executeToolCallsParallel(currentContext, assistantMessage, toolCalls, config, signal, stream);\n}\n\nasync function executeToolCallsSequential(\n\tcurrentContext: AgentContext,\n\tassistantMessage: AssistantMessage,\n\ttoolCalls: AgentToolCall[],\n\tconfig: AgentLoopConfig,\n\tsignal: AbortSignal | undefined,\n\tstream: EventStream<AgentEvent, AgentMessage[]>,\n): Promise<ToolExecutionResult> {\n\tconst results: ToolResultMessage[] = [];\n\tlet steeringMessages: AgentMessage[] | undefined;\n\tlet preparationErrorCount = 0;\n\n\tfor (let index = 0; index < toolCalls.length; index++) {\n\t\tconst toolCall = toolCalls[index];\n\t\tstream.push({\n\t\t\ttype: \"tool_execution_start\",\n\t\t\ttoolCallId: toolCall.id,\n\t\t\ttoolName: toolCall.name,\n\t\t\targs: toolCall.arguments,\n\t\t});\n\n\t\tconst preparation = await prepareToolCall(currentContext, assistantMessage, toolCall, config, signal);\n\t\tif (preparation.kind === \"immediate\") {\n\t\t\tif (preparation.isError) {\n\t\t\t\tpreparationErrorCount++;\n\t\t\t}\n\t\t\tresults.push(emitToolCallOutcome(toolCall, preparation.result, preparation.isError, stream));\n\t\t} else {\n\t\t\tconst executed = await executePreparedToolCall(preparation, signal, stream);\n\t\t\tresults.push(\n\t\t\t\tawait finalizeExecutedToolCall(\n\t\t\t\t\tcurrentContext,\n\t\t\t\t\tassistantMessage,\n\t\t\t\t\tpreparation,\n\t\t\t\t\texecuted,\n\t\t\t\t\tconfig,\n\t\t\t\t\tsignal,\n\t\t\t\t\tstream,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\tif (config.getSteeringMessages) {\n\t\t\tconst steering = await config.getSteeringMessages();\n\t\t\tif (steering.length > 0) {\n\t\t\t\tsteeringMessages = steering;\n\t\t\t\tconst remainingCalls = toolCalls.slice(index + 1);\n\t\t\t\tfor (const skipped of remainingCalls) {\n\t\t\t\t\tresults.push(skipToolCall(skipped, stream));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { toolResults: results, steeringMessages, preparationErrorCount };\n}\n\nasync function executeToolCallsParallel(\n\tcurrentContext: AgentContext,\n\tassistantMessage: AssistantMessage,\n\ttoolCalls: AgentToolCall[],\n\tconfig: AgentLoopConfig,\n\tsignal: AbortSignal | undefined,\n\tstream: EventStream<AgentEvent, AgentMessage[]>,\n): Promise<ToolExecutionResult> {\n\tconst results: ToolResultMessage[] = [];\n\tconst runnableCalls: PreparedToolCall[] = [];\n\tlet steeringMessages: AgentMessage[] | undefined;\n\tlet preparationErrorCount = 0;\n\n\tfor (let index = 0; index < toolCalls.length; index++) {\n\t\tconst toolCall = toolCalls[index];\n\t\tstream.push({\n\t\t\ttype: \"tool_execution_start\",\n\t\t\ttoolCallId: toolCall.id,\n\t\t\ttoolName: toolCall.name,\n\t\t\targs: toolCall.arguments,\n\t\t});\n\n\t\tconst preparation = await prepareToolCall(currentContext, assistantMessage, toolCall, config, signal);\n\t\tif (preparation.kind === \"immediate\") {\n\t\t\tif (preparation.isError) {\n\t\t\t\tpreparationErrorCount++;\n\t\t\t}\n\t\t\tresults.push(emitToolCallOutcome(toolCall, preparation.result, preparation.isError, stream));\n\t\t} else {\n\t\t\trunnableCalls.push(preparation);\n\t\t}\n\n\t\tif (config.getSteeringMessages) {\n\t\t\tconst steering = await config.getSteeringMessages();\n\t\t\tif (steering.length > 0) {\n\t\t\t\tsteeringMessages = steering;\n\t\t\t\tfor (const runnable of runnableCalls) {\n\t\t\t\t\tresults.push(skipToolCall(runnable.toolCall, stream, { emitStart: false }));\n\t\t\t\t}\n\t\t\t\tconst remainingCalls = toolCalls.slice(index + 1);\n\t\t\t\tfor (const skipped of remainingCalls) {\n\t\t\t\t\tresults.push(skipToolCall(skipped, stream));\n\t\t\t\t}\n\t\t\t\treturn { toolResults: results, steeringMessages, preparationErrorCount };\n\t\t\t}\n\t\t}\n\t}\n\n\tconst runningCalls = runnableCalls.map((prepared) => ({\n\t\tprepared,\n\t\texecution: executePreparedToolCall(prepared, signal, stream),\n\t}));\n\n\tfor (const running of runningCalls) {\n\t\tconst executed = await running.execution;\n\t\tresults.push(\n\t\t\tawait finalizeExecutedToolCall(\n\t\t\t\tcurrentContext,\n\t\t\t\tassistantMessage,\n\t\t\t\trunning.prepared,\n\t\t\t\texecuted,\n\t\t\t\tconfig,\n\t\t\t\tsignal,\n\t\t\t\tstream,\n\t\t\t),\n\t\t);\n\t}\n\n\tif (!steeringMessages && config.getSteeringMessages) {\n\t\tconst steering = await config.getSteeringMessages();\n\t\tif (steering.length > 0) {\n\t\t\tsteeringMessages = steering;\n\t\t}\n\t}\n\n\treturn { toolResults: results, steeringMessages, preparationErrorCount };\n}\n\ntype PreparedToolCall = {\n\tkind: \"prepared\";\n\ttoolCall: AgentToolCall;\n\ttool: AgentTool<any>;\n\targs: unknown;\n};\n\ntype ImmediateToolCallOutcome = {\n\tkind: \"immediate\";\n\tresult: AgentToolResult<any>;\n\tisError: boolean;\n};\n\ntype ExecutedToolCallOutcome = {\n\tresult: AgentToolResult<any>;\n\tisError: boolean;\n};\n\nasync function prepareToolCall(\n\tcurrentContext: AgentContext,\n\tassistantMessage: AssistantMessage,\n\ttoolCall: AgentToolCall,\n\tconfig: AgentLoopConfig,\n\tsignal: AbortSignal | undefined,\n): Promise<PreparedToolCall | ImmediateToolCallOutcome> {\n\tconst tool = currentContext.tools?.find((t) => t.name === toolCall.name);\n\tif (!tool) {\n\t\treturn {\n\t\t\tkind: \"immediate\",\n\t\t\tresult: createErrorToolResult(`Tool ${toolCall.name} not found`),\n\t\t\tisError: true,\n\t\t};\n\t}\n\n\ttry {\n\t\tconst validatedArgs = validateToolArguments(tool, toolCall);\n\t\tif (config.beforeToolCall) {\n\t\t\tconst beforeResult = await config.beforeToolCall(\n\t\t\t\t{\n\t\t\t\t\tassistantMessage,\n\t\t\t\t\ttoolCall,\n\t\t\t\t\targs: validatedArgs,\n\t\t\t\t\tcontext: currentContext,\n\t\t\t\t},\n\t\t\t\tsignal,\n\t\t\t);\n\t\t\tif (beforeResult?.block) {\n\t\t\t\treturn {\n\t\t\t\t\tkind: \"immediate\",\n\t\t\t\t\tresult: createErrorToolResult(beforeResult.reason || \"Tool execution was blocked\"),\n\t\t\t\t\tisError: true,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tkind: \"prepared\",\n\t\t\ttoolCall,\n\t\t\ttool,\n\t\t\targs: validatedArgs,\n\t\t};\n\t} catch (error) {\n\t\treturn {\n\t\t\tkind: \"immediate\",\n\t\t\tresult: createErrorToolResult(error instanceof Error ? error.message : String(error)),\n\t\t\tisError: true,\n\t\t};\n\t}\n}\n\nasync function executePreparedToolCall(\n\tprepared: PreparedToolCall,\n\tsignal: AbortSignal | undefined,\n\tstream: EventStream<AgentEvent, AgentMessage[]>,\n): Promise<ExecutedToolCallOutcome> {\n\ttry {\n\t\tconst result = await prepared.tool.execute(\n\t\t\tprepared.toolCall.id,\n\t\t\tprepared.args as never,\n\t\t\tsignal,\n\t\t\t(partialResult) => {\n\t\t\t\tstream.push({\n\t\t\t\t\ttype: \"tool_execution_update\",\n\t\t\t\t\ttoolCallId: prepared.toolCall.id,\n\t\t\t\t\ttoolName: prepared.toolCall.name,\n\t\t\t\t\targs: prepared.toolCall.arguments,\n\t\t\t\t\tpartialResult,\n\t\t\t\t});\n\t\t\t},\n\t\t);\n\t\treturn { result, isError: false };\n\t} catch (error) {\n\t\treturn {\n\t\t\tresult: createErrorToolResult(error instanceof Error ? error.message : String(error)),\n\t\t\tisError: true,\n\t\t};\n\t}\n}\n\nasync function finalizeExecutedToolCall(\n\tcurrentContext: AgentContext,\n\tassistantMessage: AssistantMessage,\n\tprepared: PreparedToolCall,\n\texecuted: ExecutedToolCallOutcome,\n\tconfig: AgentLoopConfig,\n\tsignal: AbortSignal | undefined,\n\tstream: EventStream<AgentEvent, AgentMessage[]>,\n): Promise<ToolResultMessage> {\n\tlet result = executed.result;\n\tlet isError = executed.isError;\n\n\tif (config.afterToolCall) {\n\t\tconst afterResult = await config.afterToolCall(\n\t\t\t{\n\t\t\t\tassistantMessage,\n\t\t\t\ttoolCall: prepared.toolCall,\n\t\t\t\targs: prepared.args,\n\t\t\t\tresult,\n\t\t\t\tisError,\n\t\t\t\tcontext: currentContext,\n\t\t\t},\n\t\t\tsignal,\n\t\t);\n\t\tif (afterResult) {\n\t\t\tresult = {\n\t\t\t\tcontent: afterResult.content !== undefined ? afterResult.content : result.content,\n\t\t\t\tdetails: afterResult.details !== undefined ? afterResult.details : result.details,\n\t\t\t};\n\t\t\tisError = afterResult.isError !== undefined ? afterResult.isError : isError;\n\t\t}\n\t}\n\n\treturn emitToolCallOutcome(prepared.toolCall, result, isError, stream);\n}\n\nfunction createErrorToolResult(message: string): AgentToolResult<any> {\n\treturn {\n\t\tcontent: [{ type: \"text\", text: message }],\n\t\tdetails: {},\n\t};\n}\n\nfunction emitToolCallOutcome(\n\ttoolCall: AgentToolCall,\n\tresult: AgentToolResult<any>,\n\tisError: boolean,\n\tstream: EventStream<AgentEvent, AgentMessage[]>,\n): ToolResultMessage {\n\tstream.push({\n\t\ttype: \"tool_execution_end\",\n\t\ttoolCallId: toolCall.id,\n\t\ttoolName: toolCall.name,\n\t\tresult,\n\t\tisError,\n\t});\n\n\tconst toolResultMessage: ToolResultMessage = {\n\t\trole: \"toolResult\",\n\t\ttoolCallId: toolCall.id,\n\t\ttoolName: toolCall.name,\n\t\tcontent: result.content,\n\t\tdetails: result.details,\n\t\tisError,\n\t\ttimestamp: Date.now(),\n\t};\n\n\temitMessagePair(stream, toolResultMessage);\n\treturn toolResultMessage;\n}\n\nfunction skipToolCall(\n\ttoolCall: AgentToolCall,\n\tstream: EventStream<AgentEvent, AgentMessage[]>,\n\toptions?: { emitStart?: boolean },\n): ToolResultMessage {\n\tconst result: AgentToolResult<any> = {\n\t\tcontent: [{ type: \"text\", text: \"Skipped due to queued user message.\" }],\n\t\tdetails: {},\n\t};\n\n\tif (options?.emitStart !== false) {\n\t\tstream.push({\n\t\t\ttype: \"tool_execution_start\",\n\t\t\ttoolCallId: toolCall.id,\n\t\t\ttoolName: toolCall.name,\n\t\t\targs: toolCall.arguments,\n\t\t});\n\t}\n\n\treturn emitToolCallOutcome(toolCall, result, true, stream);\n}\n"]}
1
+ {"version":3,"file":"agent-loop.js","sourceRoot":"","sources":["../src/agent-loop.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Agent loop that works with AgentMessage throughout.\n * Transforms to Message[] only at the LLM call boundary.\n */\n\nimport {\n\ttype AssistantMessage,\n\ttype Context,\n\tEventStream,\n\tstreamSimple,\n\ttype ToolResultMessage,\n\tvalidateToolArguments,\n} from \"@gsd/pi-ai\";\nimport type {\n\tAgentContext,\n\tAgentEvent,\n\tAgentLoopConfig,\n\tAgentMessage,\n\tAgentTool,\n\tAgentToolCall,\n\tAgentToolResult,\n\tStreamFn,\n} from \"./types.js\";\n\n/**\n * Maximum number of consecutive turns where ALL tool calls in the turn fail\n * schema validation before the loop terminates. This prevents unbounded retry\n * loops when the LLM repeatedly emits tool calls with arguments that cannot\n * pass validation (e.g., schema overload, truncated JSON, missing required\n * fields). See: https://github.com/gsd-build/gsd-2/issues/2783\n */\nexport const MAX_CONSECUTIVE_VALIDATION_FAILURES = 3;\n\nexport const ZERO_USAGE = {\n\tinput: 0,\n\toutput: 0,\n\tcacheRead: 0,\n\tcacheWrite: 0,\n\ttotalTokens: 0,\n\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n} as const;\n\n/**\n * Build an AssistantMessage for an unhandled error caught outside runLoop.\n * Uses the model from config so the message satisfies the full interface.\n */\nfunction createErrorMessage(error: unknown, config: AgentLoopConfig): AssistantMessage {\n\tconst msg = error instanceof Error ? error.message : String(error);\n\treturn {\n\t\trole: \"assistant\",\n\t\tcontent: [{ type: \"text\", text: msg }],\n\t\tapi: config.model.api,\n\t\tprovider: config.model.provider,\n\t\tmodel: config.model.id,\n\t\tusage: ZERO_USAGE,\n\t\tstopReason: \"error\",\n\t\terrorMessage: msg,\n\t\ttimestamp: Date.now(),\n\t};\n}\n\n/**\n * Emit a message_start + message_end pair for a single message.\n */\nfunction emitMessagePair(stream: EventStream<AgentEvent, AgentMessage[]>, message: AgentMessage): void {\n\tstream.push({ type: \"message_start\", message });\n\tstream.push({ type: \"message_end\", message });\n}\n\n/**\n * Emit the standard error sequence when the outer agent loop catches an error.\n * Pushes message_start/end, turn_end, agent_end, then closes the stream.\n */\nfunction emitErrorSequence(\n\tstream: EventStream<AgentEvent, AgentMessage[]>,\n\terrMsg: AssistantMessage,\n\tnewMessages: AgentMessage[],\n): void {\n\temitMessagePair(stream, errMsg);\n\tstream.push({ type: \"turn_end\", message: errMsg, toolResults: [] });\n\tstream.push({ type: \"agent_end\", messages: [...newMessages, errMsg] });\n\tstream.end([...newMessages, errMsg]);\n}\n\n/**\n * Start an agent loop with a new prompt message.\n * The prompt is added to the context and events are emitted for it.\n */\nexport function agentLoop(\n\tprompts: AgentMessage[],\n\tcontext: AgentContext,\n\tconfig: AgentLoopConfig,\n\tsignal?: AbortSignal,\n\tstreamFn?: StreamFn,\n): EventStream<AgentEvent, AgentMessage[]> {\n\tconst stream = createAgentStream();\n\n\t(async () => {\n\t\tconst newMessages: AgentMessage[] = [...prompts];\n\t\tconst currentContext: AgentContext = {\n\t\t\t...context,\n\t\t\tmessages: [...context.messages, ...prompts],\n\t\t};\n\n\t\tstream.push({ type: \"agent_start\" });\n\t\tstream.push({ type: \"turn_start\" });\n\t\tfor (const prompt of prompts) {\n\t\t\temitMessagePair(stream, prompt);\n\t\t}\n\n\t\ttry {\n\t\t\tawait runLoop(currentContext, newMessages, config, signal, stream, streamFn);\n\t\t} catch (error) {\n\t\t\temitErrorSequence(stream, createErrorMessage(error, config), newMessages);\n\t\t}\n\t})();\n\n\treturn stream;\n}\n\n/**\n * Continue an agent loop from the current context without adding a new message.\n * Used for retries - context already has user message or tool results.\n *\n * **Important:** The last message in context must convert to a `user` or `toolResult` message\n * via `convertToLlm`. If it doesn't, the LLM provider will reject the request.\n * This cannot be validated here since `convertToLlm` is only called once per turn.\n */\nexport function agentLoopContinue(\n\tcontext: AgentContext,\n\tconfig: AgentLoopConfig,\n\tsignal?: AbortSignal,\n\tstreamFn?: StreamFn,\n): EventStream<AgentEvent, AgentMessage[]> {\n\tif (context.messages.length === 0) {\n\t\tthrow new Error(\"Cannot continue: no messages in context\");\n\t}\n\n\tif (context.messages[context.messages.length - 1].role === \"assistant\") {\n\t\tthrow new Error(\"Cannot continue from message role: assistant\");\n\t}\n\n\tconst stream = createAgentStream();\n\n\t(async () => {\n\t\tconst newMessages: AgentMessage[] = [];\n\t\tconst currentContext: AgentContext = {\n\t\t\t...context,\n\t\t\tmessages: [...context.messages],\n\t\t};\n\n\t\tstream.push({ type: \"agent_start\" });\n\t\tstream.push({ type: \"turn_start\" });\n\n\t\ttry {\n\t\t\tawait runLoop(currentContext, newMessages, config, signal, stream, streamFn);\n\t\t} catch (error) {\n\t\t\temitErrorSequence(stream, createErrorMessage(error, config), newMessages);\n\t\t}\n\t})();\n\n\treturn stream;\n}\n\nfunction createAgentStream(): EventStream<AgentEvent, AgentMessage[]> {\n\treturn new EventStream<AgentEvent, AgentMessage[]>(\n\t\t(event: AgentEvent) => event.type === \"agent_end\",\n\t\t(event: AgentEvent) => (event.type === \"agent_end\" ? event.messages : []),\n\t);\n}\n\n/**\n * Main loop logic shared by agentLoop and agentLoopContinue.\n */\nasync function runLoop(\n\tcurrentContext: AgentContext,\n\tnewMessages: AgentMessage[],\n\tconfig: AgentLoopConfig,\n\tsignal: AbortSignal | undefined,\n\tstream: EventStream<AgentEvent, AgentMessage[]>,\n\tstreamFn?: StreamFn,\n): Promise<void> {\n\tlet firstTurn = true;\n\t// Check for steering messages at start (user may have typed while waiting)\n\tlet pendingMessages: AgentMessage[] = (await config.getSteeringMessages?.()) || [];\n\n\t// Track consecutive turns where ALL tool calls fail validation.\n\t// When the LLM repeatedly emits tool calls with schema-overloaded or malformed\n\t// arguments, each turn produces only error tool results. Without a cap, this\n\t// creates an unbounded retry loop that burns budget. (#2783)\n\tlet consecutiveAllToolErrorTurns = 0;\n\n\t// Outer loop: continues when queued follow-up messages arrive after agent would stop\n\twhile (true) {\n\t\tlet hasMoreToolCalls = true;\n\t\tlet steeringAfterTools: AgentMessage[] | null = null;\n\n\t\t// Inner loop: process tool calls and steering messages\n\t\twhile (hasMoreToolCalls || pendingMessages.length > 0) {\n\t\t\tif (!firstTurn) {\n\t\t\t\tstream.push({ type: \"turn_start\" });\n\t\t\t} else {\n\t\t\t\tfirstTurn = false;\n\t\t\t}\n\n\t\t\t// Process pending messages (inject before next assistant response)\n\t\t\tif (pendingMessages.length > 0) {\n\t\t\t\tfor (const message of pendingMessages) {\n\t\t\t\t\temitMessagePair(stream, message);\n\t\t\t\t\tcurrentContext.messages.push(message);\n\t\t\t\t\tnewMessages.push(message);\n\t\t\t\t}\n\t\t\t\tpendingMessages = [];\n\t\t\t}\n\n\t\t\t// Stream assistant response\n\t\t\tlet message: AssistantMessage;\n\t\t\ttry {\n\t\t\t\tmessage = await streamAssistantResponse(currentContext, config, signal, stream, streamFn);\n\t\t\t} catch (error) {\n\t\t\t\t// Critical failure before stream started (e.g. getApiKey threw, credentials in\n\t\t\t\t// backoff, network unavailable). Convert to a graceful error message so the\n\t\t\t\t// agent loop can end cleanly instead of crashing with an unhandled rejection.\n\t\t\t\tconst errorText = error instanceof Error ? error.message : String(error);\n\t\t\t\tif (config.onStreamError) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait config.onStreamError(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\terror: error instanceof Error ? error : new Error(errorText),\n\t\t\t\t\t\t\t\tpartialText: \"\",\n\t\t\t\t\t\t\t\twillRetry: false,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// Hook failures must not crash the loop.\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tmessage = {\n\t\t\t\t\trole: \"assistant\",\n\t\t\t\t\tcontent: [],\n\t\t\t\t\tapi: config.model.api,\n\t\t\t\t\tprovider: config.model.provider,\n\t\t\t\t\tmodel: config.model.id,\n\t\t\t\t\tusage: ZERO_USAGE,\n\t\t\t\t\tstopReason: signal?.aborted ? \"aborted\" : \"error\",\n\t\t\t\t\terrorMessage: errorText,\n\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t};\n\t\t\t\tstream.push({ type: \"message_start\", message: { ...message } });\n\t\t\t\tstream.push({ type: \"message_end\", message });\n\t\t\t\tcurrentContext.messages.push(message);\n\t\t\t}\n\t\t\tnewMessages.push(message);\n\n\t\t\tif (message.stopReason === \"error\" || message.stopReason === \"aborted\") {\n\t\t\t\tstream.push({ type: \"turn_end\", message, toolResults: [] });\n\t\t\t\tstream.push({ type: \"agent_end\", messages: newMessages });\n\t\t\t\tstream.end(newMessages);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Check for tool calls or paused server turn\n\t\t\tconst toolCalls = message.content.filter((c) => c.type === \"toolCall\");\n\t\t\thasMoreToolCalls =\n\t\t\t\ttoolCalls.length > 0 || message.stopReason === \"pauseTurn\";\n\n\t\t\tconst toolResults: ToolResultMessage[] = [];\n\t\t\tif (hasMoreToolCalls && config.externalToolExecution) {\n\t\t\t\t// External execution mode: tools were handled by the provider\n\t\t\t\t// (e.g., Claude Code SDK). Emit tool_execution events for each\n\t\t\t\t// tool call. Prefer any provider-supplied externalResult attached\n\t\t\t\t// to the tool call so the UI can show the real stdout/stderr\n\t\t\t\t// instead of a generic placeholder.\n\t\t\t\tfor (const tc of toolCalls as AgentToolCall[]) {\n\t\t\t\t\tconst externalResult = (tc as AgentToolCall & {\n\t\t\t\t\t\texternalResult?: {\n\t\t\t\t\t\t\tcontent?: Array<{ type: string; text?: string; data?: string; mimeType?: string }>;\n\t\t\t\t\t\t\tdetails?: Record<string, unknown>;\n\t\t\t\t\t\t\tisError?: boolean;\n\t\t\t\t\t\t};\n\t\t\t\t\t}).externalResult;\n\t\t\t\t\tstream.push({\n\t\t\t\t\t\ttype: \"tool_execution_start\",\n\t\t\t\t\t\ttoolCallId: tc.id,\n\t\t\t\t\t\ttoolName: tc.name,\n\t\t\t\t\t\targs: tc.arguments,\n\t\t\t\t\t});\n\t\t\t\t\tstream.push({\n\t\t\t\t\t\ttype: \"tool_execution_end\",\n\t\t\t\t\t\ttoolCallId: tc.id,\n\t\t\t\t\t\ttoolName: tc.name,\n\t\t\t\t\t\tresult: externalResult\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\tcontent: externalResult.content ?? [{ type: \"text\", text: \"\" }],\n\t\t\t\t\t\t\t\t\tdetails: externalResult.details ?? {},\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\tcontent: [{ type: \"text\", text: \"(executed by Claude Code)\" }],\n\t\t\t\t\t\t\t\t\tdetails: {},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\tisError: externalResult?.isError ?? false,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// Don't add tool results to context or loop back — the streamSimple\n\t\t\t\t// call already ran the full multi-turn agentic loop.\n\t\t\t\thasMoreToolCalls = false;\n\t\t\t} else if (hasMoreToolCalls) {\n\t\t\t\tconst toolExecution = await executeToolCalls(\n\t\t\t\t\tcurrentContext,\n\t\t\t\t\tmessage,\n\t\t\t\t\tconfig,\n\t\t\t\t\tsignal,\n\t\t\t\t\tstream,\n\t\t\t\t);\n\t\t\t\ttoolResults.push(...toolExecution.toolResults);\n\t\t\t\tsteeringAfterTools = toolExecution.steeringMessages ?? null;\n\n\t\t\t\tfor (const result of toolResults) {\n\t\t\t\t\tcurrentContext.messages.push(result);\n\t\t\t\t\tnewMessages.push(result);\n\t\t\t\t}\n\n\t\t\t\t// Schema overload detection (#2783): count only preparation-phase\n\t\t\t\t// errors (schema validation, tool-not-found, tool-blocked) toward the\n\t\t\t\t// consecutive failure cap. Tool execution errors — such as bash\n\t\t\t\t// commands returning non-zero exit codes (e.g. grep/rg exit 1 for\n\t\t\t\t// \"no matches\") — are valid tool usage and must NOT trigger the cap.\n\t\t\t\t// See: #3618\n\t\t\t\tconst hasPreparationErrors = toolExecution.preparationErrorCount > 0;\n\t\t\t\tconst allToolsFailedPreparation =\n\t\t\t\t\ttoolResults.length > 0 &&\n\t\t\t\t\ttoolExecution.preparationErrorCount === toolResults.length;\n\t\t\t\tif (allToolsFailedPreparation) {\n\t\t\t\t\tconsecutiveAllToolErrorTurns++;\n\t\t\t\t} else if (!hasPreparationErrors) {\n\t\t\t\t\t// Reset only when there are zero preparation errors this turn.\n\t\t\t\t\t// Mixed turns (some prep errors, some successes) don't reset,\n\t\t\t\t\t// but they also don't increment — this avoids masking a\n\t\t\t\t\t// pattern of alternating schema failures with one working call.\n\t\t\t\t\tconsecutiveAllToolErrorTurns = 0;\n\t\t\t\t}\n\n\t\t\t\tif (consecutiveAllToolErrorTurns >= MAX_CONSECUTIVE_VALIDATION_FAILURES) {\n\t\t\t\t\t// Force-stop: the LLM is stuck retrying broken tool calls.\n\t\t\t\t\t// Emit the turn_end and terminate the agent loop cleanly.\n\t\t\t\t\tstream.push({ type: \"turn_end\", message, toolResults });\n\t\t\t\t\tconst stopMessage: AssistantMessage = {\n\t\t\t\t\t\trole: \"assistant\",\n\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\ttext: `Agent stopped: ${consecutiveAllToolErrorTurns} consecutive turns with all tool calls failing. This usually means the model is repeatedly sending arguments that do not match the tool schema.`,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\tapi: config.model.api,\n\t\t\t\t\t\tprovider: config.model.provider,\n\t\t\t\t\t\tmodel: config.model.id,\n\t\t\t\t\t\tusage: ZERO_USAGE,\n\t\t\t\t\t\tstopReason: \"error\",\n\t\t\t\t\t\terrorMessage: \"Schema overload: consecutive tool validation failures exceeded cap\",\n\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t};\n\t\t\t\t\temitMessagePair(stream, stopMessage);\n\t\t\t\t\tnewMessages.push(stopMessage);\n\t\t\t\t\tstream.push({ type: \"turn_end\", message: stopMessage, toolResults: [] });\n\t\t\t\t\tstream.push({ type: \"agent_end\", messages: newMessages });\n\t\t\t\t\tstream.end(newMessages);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tstream.push({ type: \"turn_end\", message, toolResults });\n\n\t\t\t// Get steering messages after turn completes\n\t\t\tif (steeringAfterTools && steeringAfterTools.length > 0) {\n\t\t\t\tpendingMessages = steeringAfterTools;\n\t\t\t\tsteeringAfterTools = null;\n\t\t\t} else {\n\t\t\t\tpendingMessages = (await config.getSteeringMessages?.()) || [];\n\t\t\t}\n\t\t}\n\n\t\t// Agent would stop here. Check for follow-up messages.\n\t\tconst followUpMessages = (await config.getFollowUpMessages?.()) || [];\n\t\tif (followUpMessages.length > 0) {\n\t\t\t// Set as pending so inner loop processes them\n\t\t\tpendingMessages = followUpMessages;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// No more messages, exit\n\t\tbreak;\n\t}\n\n\tstream.push({ type: \"agent_end\", messages: newMessages });\n\tstream.end(newMessages);\n}\n\n/**\n * Stream an assistant response from the LLM.\n * This is where AgentMessage[] gets transformed to Message[] for the LLM.\n */\nasync function streamAssistantResponse(\n\tcontext: AgentContext,\n\tconfig: AgentLoopConfig,\n\tsignal: AbortSignal | undefined,\n\tstream: EventStream<AgentEvent, AgentMessage[]>,\n\tstreamFn?: StreamFn,\n): Promise<AssistantMessage> {\n\t// Apply context transform if configured (AgentMessage[] → AgentMessage[])\n\tlet messages = context.messages;\n\tif (config.transformContext) {\n\t\tmessages = await config.transformContext(messages, signal);\n\t}\n\n\t// Convert to LLM-compatible messages (AgentMessage[] → Message[])\n\tconst llmMessages = await config.convertToLlm(messages);\n\n\t// Build LLM context\n\tconst llmContext: Context = {\n\t\tsystemPrompt: context.systemPrompt,\n\t\tmessages: llmMessages,\n\t\ttools: context.tools,\n\t};\n\n\tconst streamFunction = streamFn || streamSimple;\n\n\t// Resolve API key (important for expiring tokens)\n\tconst resolvedApiKey =\n\t\t(config.getApiKey ? await config.getApiKey(config.model.provider) : undefined) || config.apiKey;\n\n\tconst response = await streamFunction(config.model, llmContext, {\n\t\t...config,\n\t\tapiKey: resolvedApiKey,\n\t\tsignal,\n\t});\n\n\tlet partialMessage: AssistantMessage | null = null;\n\tlet addedPartial = false;\n\n\tfor await (const event of response) {\n\t\tswitch (event.type) {\n\t\t\tcase \"start\":\n\t\t\t\tpartialMessage = event.partial;\n\t\t\t\tcontext.messages.push(partialMessage);\n\t\t\t\taddedPartial = true;\n\t\t\t\tstream.push({ type: \"message_start\", message: { ...partialMessage } });\n\t\t\t\tbreak;\n\n\t\t\tcase \"text_start\":\n\t\t\tcase \"text_delta\":\n\t\t\tcase \"text_end\":\n\t\t\tcase \"thinking_start\":\n\t\t\tcase \"thinking_delta\":\n\t\t\tcase \"thinking_end\":\n\t\t\tcase \"toolcall_start\":\n\t\t\tcase \"toolcall_delta\":\n\t\t\tcase \"toolcall_end\":\n\t\t\tcase \"server_tool_use\":\n\t\t\tcase \"web_search_result\":\n\t\t\t\tif (partialMessage) {\n\t\t\t\t\tpartialMessage = event.partial;\n\t\t\t\t\tcontext.messages[context.messages.length - 1] = partialMessage;\n\t\t\t\t\tstream.push({\n\t\t\t\t\t\ttype: \"message_update\",\n\t\t\t\t\t\tassistantMessageEvent: event,\n\t\t\t\t\t\tmessage: { ...partialMessage },\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"done\":\n\t\t\tcase \"error\": {\n\t\t\t\tconst finalMessage = await response.result();\n\t\t\t\tif (addedPartial) {\n\t\t\t\t\tcontext.messages[context.messages.length - 1] = finalMessage;\n\t\t\t\t} else {\n\t\t\t\t\tcontext.messages.push(finalMessage);\n\t\t\t\t}\n\t\t\t\tif (!addedPartial) {\n\t\t\t\t\tstream.push({ type: \"message_start\", message: { ...finalMessage } });\n\t\t\t\t}\n\t\t\t\tstream.push({ type: \"message_end\", message: finalMessage });\n\t\t\t\treturn finalMessage;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn await response.result();\n}\n\n/**\n * Result from executing tool calls in a turn. Includes metadata about\n * error provenance so the schema overload detector can distinguish\n * preparation failures (schema validation, tool-not-found, tool-blocked)\n * from execution failures (the tool ran but threw, e.g. bash exit code 1).\n */\ninterface ToolExecutionResult {\n\ttoolResults: ToolResultMessage[];\n\tsteeringMessages?: AgentMessage[];\n\t/** Number of tool results that failed during preparation (validation/schema). */\n\tpreparationErrorCount: number;\n}\n\n/**\n * Execute tool calls from an assistant message.\n */\nasync function executeToolCalls(\n\tcurrentContext: AgentContext,\n\tassistantMessage: AssistantMessage,\n\tconfig: AgentLoopConfig,\n\tsignal: AbortSignal | undefined,\n\tstream: EventStream<AgentEvent, AgentMessage[]>,\n): Promise<ToolExecutionResult> {\n\tconst toolCalls = assistantMessage.content.filter((c) => c.type === \"toolCall\") as AgentToolCall[];\n\tif (config.toolExecution === \"sequential\") {\n\t\treturn executeToolCallsSequential(currentContext, assistantMessage, toolCalls, config, signal, stream);\n\t}\n\treturn executeToolCallsParallel(currentContext, assistantMessage, toolCalls, config, signal, stream);\n}\n\nasync function executeToolCallsSequential(\n\tcurrentContext: AgentContext,\n\tassistantMessage: AssistantMessage,\n\ttoolCalls: AgentToolCall[],\n\tconfig: AgentLoopConfig,\n\tsignal: AbortSignal | undefined,\n\tstream: EventStream<AgentEvent, AgentMessage[]>,\n): Promise<ToolExecutionResult> {\n\tconst results: ToolResultMessage[] = [];\n\tlet steeringMessages: AgentMessage[] | undefined;\n\tlet preparationErrorCount = 0;\n\n\tfor (let index = 0; index < toolCalls.length; index++) {\n\t\tconst toolCall = toolCalls[index];\n\t\tstream.push({\n\t\t\ttype: \"tool_execution_start\",\n\t\t\ttoolCallId: toolCall.id,\n\t\t\ttoolName: toolCall.name,\n\t\t\targs: toolCall.arguments,\n\t\t});\n\n\t\tconst preparation = await prepareToolCall(currentContext, assistantMessage, toolCall, config, signal);\n\t\tif (preparation.kind === \"immediate\") {\n\t\t\tif (preparation.isError) {\n\t\t\t\tpreparationErrorCount++;\n\t\t\t}\n\t\t\tresults.push(emitToolCallOutcome(toolCall, preparation.result, preparation.isError, stream));\n\t\t} else {\n\t\t\tconst executed = await executePreparedToolCall(preparation, signal, stream);\n\t\t\tresults.push(\n\t\t\t\tawait finalizeExecutedToolCall(\n\t\t\t\t\tcurrentContext,\n\t\t\t\t\tassistantMessage,\n\t\t\t\t\tpreparation,\n\t\t\t\t\texecuted,\n\t\t\t\t\tconfig,\n\t\t\t\t\tsignal,\n\t\t\t\t\tstream,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\tif (config.getSteeringMessages) {\n\t\t\tconst steering = await config.getSteeringMessages();\n\t\t\tif (steering.length > 0) {\n\t\t\t\tsteeringMessages = steering;\n\t\t\t\tconst remainingCalls = toolCalls.slice(index + 1);\n\t\t\t\tfor (const skipped of remainingCalls) {\n\t\t\t\t\tresults.push(skipToolCall(skipped, stream));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { toolResults: results, steeringMessages, preparationErrorCount };\n}\n\nasync function executeToolCallsParallel(\n\tcurrentContext: AgentContext,\n\tassistantMessage: AssistantMessage,\n\ttoolCalls: AgentToolCall[],\n\tconfig: AgentLoopConfig,\n\tsignal: AbortSignal | undefined,\n\tstream: EventStream<AgentEvent, AgentMessage[]>,\n): Promise<ToolExecutionResult> {\n\tconst results: ToolResultMessage[] = [];\n\tconst runnableCalls: PreparedToolCall[] = [];\n\tlet steeringMessages: AgentMessage[] | undefined;\n\tlet preparationErrorCount = 0;\n\n\tfor (let index = 0; index < toolCalls.length; index++) {\n\t\tconst toolCall = toolCalls[index];\n\t\tstream.push({\n\t\t\ttype: \"tool_execution_start\",\n\t\t\ttoolCallId: toolCall.id,\n\t\t\ttoolName: toolCall.name,\n\t\t\targs: toolCall.arguments,\n\t\t});\n\n\t\tconst preparation = await prepareToolCall(currentContext, assistantMessage, toolCall, config, signal);\n\t\tif (preparation.kind === \"immediate\") {\n\t\t\tif (preparation.isError) {\n\t\t\t\tpreparationErrorCount++;\n\t\t\t}\n\t\t\tresults.push(emitToolCallOutcome(toolCall, preparation.result, preparation.isError, stream));\n\t\t} else {\n\t\t\trunnableCalls.push(preparation);\n\t\t}\n\n\t\tif (config.getSteeringMessages) {\n\t\t\tconst steering = await config.getSteeringMessages();\n\t\t\tif (steering.length > 0) {\n\t\t\t\tsteeringMessages = steering;\n\t\t\t\tfor (const runnable of runnableCalls) {\n\t\t\t\t\tresults.push(skipToolCall(runnable.toolCall, stream, { emitStart: false }));\n\t\t\t\t}\n\t\t\t\tconst remainingCalls = toolCalls.slice(index + 1);\n\t\t\t\tfor (const skipped of remainingCalls) {\n\t\t\t\t\tresults.push(skipToolCall(skipped, stream));\n\t\t\t\t}\n\t\t\t\treturn { toolResults: results, steeringMessages, preparationErrorCount };\n\t\t\t}\n\t\t}\n\t}\n\n\tconst runningCalls = runnableCalls.map((prepared) => ({\n\t\tprepared,\n\t\texecution: executePreparedToolCall(prepared, signal, stream),\n\t}));\n\n\tfor (const running of runningCalls) {\n\t\tconst executed = await running.execution;\n\t\tresults.push(\n\t\t\tawait finalizeExecutedToolCall(\n\t\t\t\tcurrentContext,\n\t\t\t\tassistantMessage,\n\t\t\t\trunning.prepared,\n\t\t\t\texecuted,\n\t\t\t\tconfig,\n\t\t\t\tsignal,\n\t\t\t\tstream,\n\t\t\t),\n\t\t);\n\t}\n\n\tif (!steeringMessages && config.getSteeringMessages) {\n\t\tconst steering = await config.getSteeringMessages();\n\t\tif (steering.length > 0) {\n\t\t\tsteeringMessages = steering;\n\t\t}\n\t}\n\n\treturn { toolResults: results, steeringMessages, preparationErrorCount };\n}\n\ntype PreparedToolCall = {\n\tkind: \"prepared\";\n\ttoolCall: AgentToolCall;\n\ttool: AgentTool<any>;\n\targs: unknown;\n};\n\ntype ImmediateToolCallOutcome = {\n\tkind: \"immediate\";\n\tresult: AgentToolResult<any>;\n\tisError: boolean;\n};\n\ntype ExecutedToolCallOutcome = {\n\tresult: AgentToolResult<any>;\n\tisError: boolean;\n};\n\nasync function prepareToolCall(\n\tcurrentContext: AgentContext,\n\tassistantMessage: AssistantMessage,\n\ttoolCall: AgentToolCall,\n\tconfig: AgentLoopConfig,\n\tsignal: AbortSignal | undefined,\n): Promise<PreparedToolCall | ImmediateToolCallOutcome> {\n\tconst tool = currentContext.tools?.find((t) => t.name === toolCall.name);\n\tif (!tool) {\n\t\treturn {\n\t\t\tkind: \"immediate\",\n\t\t\tresult: createErrorToolResult(`Tool ${toolCall.name} not found`),\n\t\t\tisError: true,\n\t\t};\n\t}\n\n\ttry {\n\t\tconst validatedArgs = validateToolArguments(tool, toolCall);\n\t\tif (config.beforeToolCall) {\n\t\t\tconst beforeResult = await config.beforeToolCall(\n\t\t\t\t{\n\t\t\t\t\tassistantMessage,\n\t\t\t\t\ttoolCall,\n\t\t\t\t\targs: validatedArgs,\n\t\t\t\t\tcontext: currentContext,\n\t\t\t\t},\n\t\t\t\tsignal,\n\t\t\t);\n\t\t\tif (beforeResult?.block) {\n\t\t\t\treturn {\n\t\t\t\t\tkind: \"immediate\",\n\t\t\t\t\tresult: createErrorToolResult(beforeResult.reason || \"Tool execution was blocked\"),\n\t\t\t\t\tisError: true,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tkind: \"prepared\",\n\t\t\ttoolCall,\n\t\t\ttool,\n\t\t\targs: validatedArgs,\n\t\t};\n\t} catch (error) {\n\t\treturn {\n\t\t\tkind: \"immediate\",\n\t\t\tresult: createErrorToolResult(error instanceof Error ? error.message : String(error)),\n\t\t\tisError: true,\n\t\t};\n\t}\n}\n\nasync function executePreparedToolCall(\n\tprepared: PreparedToolCall,\n\tsignal: AbortSignal | undefined,\n\tstream: EventStream<AgentEvent, AgentMessage[]>,\n): Promise<ExecutedToolCallOutcome> {\n\ttry {\n\t\tconst result = await prepared.tool.execute(\n\t\t\tprepared.toolCall.id,\n\t\t\tprepared.args as never,\n\t\t\tsignal,\n\t\t\t(partialResult) => {\n\t\t\t\tstream.push({\n\t\t\t\t\ttype: \"tool_execution_update\",\n\t\t\t\t\ttoolCallId: prepared.toolCall.id,\n\t\t\t\t\ttoolName: prepared.toolCall.name,\n\t\t\t\t\targs: prepared.toolCall.arguments,\n\t\t\t\t\tpartialResult,\n\t\t\t\t});\n\t\t\t},\n\t\t);\n\t\treturn { result, isError: false };\n\t} catch (error) {\n\t\treturn {\n\t\t\tresult: createErrorToolResult(error instanceof Error ? error.message : String(error)),\n\t\t\tisError: true,\n\t\t};\n\t}\n}\n\nasync function finalizeExecutedToolCall(\n\tcurrentContext: AgentContext,\n\tassistantMessage: AssistantMessage,\n\tprepared: PreparedToolCall,\n\texecuted: ExecutedToolCallOutcome,\n\tconfig: AgentLoopConfig,\n\tsignal: AbortSignal | undefined,\n\tstream: EventStream<AgentEvent, AgentMessage[]>,\n): Promise<ToolResultMessage> {\n\tlet result = executed.result;\n\tlet isError = executed.isError;\n\n\tif (config.afterToolCall) {\n\t\tconst afterResult = await config.afterToolCall(\n\t\t\t{\n\t\t\t\tassistantMessage,\n\t\t\t\ttoolCall: prepared.toolCall,\n\t\t\t\targs: prepared.args,\n\t\t\t\tresult,\n\t\t\t\tisError,\n\t\t\t\tcontext: currentContext,\n\t\t\t},\n\t\t\tsignal,\n\t\t);\n\t\tif (afterResult) {\n\t\t\tresult = {\n\t\t\t\tcontent: afterResult.content !== undefined ? afterResult.content : result.content,\n\t\t\t\tdetails: afterResult.details !== undefined ? afterResult.details : result.details,\n\t\t\t};\n\t\t\tisError = afterResult.isError !== undefined ? afterResult.isError : isError;\n\t\t}\n\t}\n\n\treturn emitToolCallOutcome(prepared.toolCall, result, isError, stream);\n}\n\nfunction createErrorToolResult(message: string): AgentToolResult<any> {\n\treturn {\n\t\tcontent: [{ type: \"text\", text: message }],\n\t\tdetails: {},\n\t};\n}\n\nfunction emitToolCallOutcome(\n\ttoolCall: AgentToolCall,\n\tresult: AgentToolResult<any>,\n\tisError: boolean,\n\tstream: EventStream<AgentEvent, AgentMessage[]>,\n): ToolResultMessage {\n\tstream.push({\n\t\ttype: \"tool_execution_end\",\n\t\ttoolCallId: toolCall.id,\n\t\ttoolName: toolCall.name,\n\t\tresult,\n\t\tisError,\n\t});\n\n\tconst toolResultMessage: ToolResultMessage = {\n\t\trole: \"toolResult\",\n\t\ttoolCallId: toolCall.id,\n\t\ttoolName: toolCall.name,\n\t\tcontent: result.content,\n\t\tdetails: result.details,\n\t\tisError,\n\t\ttimestamp: Date.now(),\n\t};\n\n\temitMessagePair(stream, toolResultMessage);\n\treturn toolResultMessage;\n}\n\nfunction skipToolCall(\n\ttoolCall: AgentToolCall,\n\tstream: EventStream<AgentEvent, AgentMessage[]>,\n\toptions?: { emitStart?: boolean },\n): ToolResultMessage {\n\tconst result: AgentToolResult<any> = {\n\t\tcontent: [{ type: \"text\", text: \"Skipped due to queued user message.\" }],\n\t\tdetails: {},\n\t};\n\n\tif (options?.emitStart !== false) {\n\t\tstream.push({\n\t\t\ttype: \"tool_execution_start\",\n\t\t\ttoolCallId: toolCall.id,\n\t\t\ttoolName: toolCall.name,\n\t\t\targs: toolCall.arguments,\n\t\t});\n\t}\n\n\treturn emitToolCallOutcome(toolCall, result, true, stream);\n}\n"]}
@@ -175,6 +175,36 @@ export interface AgentLoopConfig extends SimpleStreamOptions {
175
175
  * but skips tool.execute() and does not add tool results to context.
176
176
  */
177
177
  externalToolExecution?: boolean;
178
+ /**
179
+ * Called when the agent is about to retry after a recoverable provider error.
180
+ *
181
+ * Fires after each transient failure (rate limit, connection reset, etc.)
182
+ * before the retry backoff sleep. Useful for surfacing retry telemetry to
183
+ * the host app without instrumenting the provider layer directly.
184
+ */
185
+ onRetry?: (context: RetryContext, signal?: AbortSignal) => Promise<void> | void;
186
+ /**
187
+ * Called when the LLM stream fails mid-response.
188
+ *
189
+ * Fires once per failed stream — `onRetry` may still fire separately if the
190
+ * loop elects to retry. Use this for logging or flushing partial state.
191
+ */
192
+ onStreamError?: (context: StreamErrorContext, signal?: AbortSignal) => Promise<void> | void;
193
+ }
194
+ /** Context passed to `onRetry`. */
195
+ export interface RetryContext {
196
+ attempt: number;
197
+ maxRetries: number;
198
+ delayMs: number;
199
+ error: Error;
200
+ }
201
+ /** Context passed to `onStreamError`. */
202
+ export interface StreamErrorContext {
203
+ error: Error;
204
+ /** The text already emitted by the stream before it failed (may be empty). */
205
+ partialText: string;
206
+ /** Whether the loop will attempt to retry after this failure. */
207
+ willRetry: boolean;
178
208
  }
179
209
  /**
180
210
  * Thinking/reasoning level for models that support it.
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n\tAssistantMessage,\n\tAssistantMessageEvent,\n\tImageContent,\n\tMessage,\n\tModel,\n\tSimpleStreamOptions,\n\tstreamSimple,\n\tTextContent,\n\tTool,\n\tToolResultMessage,\n} from \"@gsd/pi-ai\";\nimport type { Static, TSchema } from \"@sinclair/typebox\";\n\n/** Stream function - can return sync or Promise for async config lookup */\nexport type StreamFn = (\n\t...args: Parameters<typeof streamSimple>\n) => ReturnType<typeof streamSimple> | Promise<ReturnType<typeof streamSimple>>;\n\n/**\n * Configuration for how tool calls from a single assistant message are executed.\n *\n * - \"sequential\": each tool call is prepared, executed, and finalized before the next one starts.\n * - \"parallel\": tool calls are prepared sequentially, then allowed tools execute concurrently.\n * Final tool results are still emitted in assistant source order.\n */\nexport type ToolExecutionMode = \"sequential\" | \"parallel\";\n\n/** A single tool call content block emitted by an assistant message. */\nexport type AgentToolCall = Extract<AssistantMessage[\"content\"][number], { type: \"toolCall\" }>;\n\n/**\n * Result returned from `beforeToolCall`.\n *\n * Returning `{ block: true }` prevents the tool from executing. The loop emits an error tool result instead.\n * `reason` becomes the text shown in that error result. If omitted, a default blocked message is used.\n */\nexport interface BeforeToolCallResult {\n\tblock?: boolean;\n\treason?: string;\n}\n\n/**\n * Partial override returned from `afterToolCall`.\n *\n * Merge semantics are field-by-field:\n * - `content`: if provided, replaces the tool result content array in full\n * - `details`: if provided, replaces the tool result details value in full\n * - `isError`: if provided, replaces the tool result error flag\n *\n * Omitted fields keep the original executed tool result values.\n */\nexport interface AfterToolCallResult {\n\tcontent?: (TextContent | ImageContent)[];\n\tdetails?: unknown;\n\tisError?: boolean;\n}\n\n/** Context passed to `beforeToolCall`. */\nexport interface BeforeToolCallContext {\n\t/** The assistant message that requested the tool call. */\n\tassistantMessage: AssistantMessage;\n\t/** The raw tool call block from `assistantMessage.content`. */\n\ttoolCall: AgentToolCall;\n\t/** Validated tool arguments for the target tool schema. */\n\targs: unknown;\n\t/** Current agent context at the time the tool call is prepared. */\n\tcontext: AgentContext;\n}\n\n/** Context passed to `afterToolCall`. */\nexport interface AfterToolCallContext {\n\t/** The assistant message that requested the tool call. */\n\tassistantMessage: AssistantMessage;\n\t/** The raw tool call block from `assistantMessage.content`. */\n\ttoolCall: AgentToolCall;\n\t/** Validated tool arguments for the target tool schema. */\n\targs: unknown;\n\t/** The executed tool result before any `afterToolCall` overrides are applied. */\n\tresult: AgentToolResult<any>;\n\t/** Whether the executed tool result is currently treated as an error. */\n\tisError: boolean;\n\t/** Current agent context at the time the tool call is finalized. */\n\tcontext: AgentContext;\n}\n\n/**\n * Configuration for the agent loop.\n */\nexport interface AgentLoopConfig extends SimpleStreamOptions {\n\tmodel: Model<any>;\n\n\t/**\n\t * Converts AgentMessage[] to LLM-compatible Message[] before each LLM call.\n\t *\n\t * Each AgentMessage must be converted to a UserMessage, AssistantMessage, or ToolResultMessage\n\t * that the LLM can understand. AgentMessages that cannot be converted (e.g., UI-only notifications,\n\t * status messages) should be filtered out.\n\t *\n\t * @example\n\t * ```typescript\n\t * convertToLlm: (messages) => messages.flatMap(m => {\n\t * if (m.role === \"custom\") {\n\t * // Convert custom message to user message\n\t * return [{ role: \"user\", content: m.content, timestamp: m.timestamp }];\n\t * }\n\t * if (m.role === \"notification\") {\n\t * // Filter out UI-only messages\n\t * return [];\n\t * }\n\t * // Pass through standard LLM messages\n\t * return [m];\n\t * })\n\t * ```\n\t */\n\tconvertToLlm: (messages: AgentMessage[]) => Message[] | Promise<Message[]>;\n\n\t/**\n\t * Optional transform applied to the context before `convertToLlm`.\n\t *\n\t * Use this for operations that work at the AgentMessage level:\n\t * - Context window management (pruning old messages)\n\t * - Injecting context from external sources\n\t *\n\t * @example\n\t * ```typescript\n\t * transformContext: async (messages) => {\n\t * if (estimateTokens(messages) > MAX_TOKENS) {\n\t * return pruneOldMessages(messages);\n\t * }\n\t * return messages;\n\t * }\n\t * ```\n\t */\n\ttransformContext?: (messages: AgentMessage[], signal?: AbortSignal) => Promise<AgentMessage[]>;\n\n\t/**\n\t * Resolves an API key dynamically for each LLM call.\n\t *\n\t * Useful for short-lived OAuth tokens (e.g., GitHub Copilot) that may expire\n\t * during long-running tool execution phases.\n\t */\n\tgetApiKey?: (provider: string) => Promise<string | undefined> | string | undefined;\n\n\t/**\n\t * Returns steering messages to inject into the conversation mid-run.\n\t *\n\t * Called after each tool execution to check for user interruptions.\n\t * If messages are returned, remaining tool calls are skipped and\n\t * these messages are added to the context before the next LLM call.\n\t *\n\t * Use this for \"steering\" the agent while it's working.\n\t */\n\tgetSteeringMessages?: () => Promise<AgentMessage[]>;\n\n\t/**\n\t * Returns follow-up messages to process after the agent would otherwise stop.\n\t *\n\t * Called when the agent has no more tool calls and no steering messages.\n\t * If messages are returned, they're added to the context and the agent\n\t * continues with another turn.\n\t *\n\t * Use this for follow-up messages that should wait until the agent finishes.\n\t */\n\tgetFollowUpMessages?: () => Promise<AgentMessage[]>;\n\n\t/**\n\t * Tool execution mode.\n\t * - \"sequential\": execute tool calls one by one\n\t * - \"parallel\": preflight tool calls sequentially, then execute allowed tools concurrently\n\t *\n\t * Default: \"parallel\"\n\t */\n\ttoolExecution?: ToolExecutionMode;\n\n\t/**\n\t * Called before a tool is executed, after arguments have been validated.\n\t *\n\t * Return `{ block: true }` to prevent execution. The loop emits an error tool result instead.\n\t * The hook receives the agent abort signal and is responsible for honoring it.\n\t */\n\tbeforeToolCall?: (context: BeforeToolCallContext, signal?: AbortSignal) => Promise<BeforeToolCallResult | undefined>;\n\n\t/**\n\t * Called after a tool finishes executing, before final tool events are emitted.\n\t *\n\t * Return an `AfterToolCallResult` to override parts of the executed tool result:\n\t * - `content` replaces the full content array\n\t * - `details` replaces the full details payload\n\t * - `isError` replaces the error flag\n\t *\n\t * Any omitted fields keep their original values. No deep merge is performed.\n\t * The hook receives the agent abort signal and is responsible for honoring it.\n\t */\n\tafterToolCall?: (context: AfterToolCallContext, signal?: AbortSignal) => Promise<AfterToolCallResult | undefined>;\n\n\t/**\n\t * When true, tool calls in assistant messages are rendered in the TUI\n\t * but NOT executed locally. Used for providers that handle tool execution\n\t * internally (e.g., Claude Code CLI via Agent SDK).\n\t *\n\t * The agent loop emits tool_execution_start/end events for TUI rendering\n\t * but skips tool.execute() and does not add tool results to context.\n\t */\n\texternalToolExecution?: boolean;\n}\n\n/**\n * Thinking/reasoning level for models that support it.\n * Note: \"xhigh\" is only supported by OpenAI gpt-5.1-codex-max, gpt-5.2, gpt-5.2-codex, gpt-5.3, and gpt-5.3-codex models.\n */\nexport type ThinkingLevel = \"off\" | \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\";\n\n/**\n * Extensible interface for custom app messages.\n * Apps can extend via declaration merging:\n *\n * @example\n * ```typescript\n * declare module \"@mariozechner/agent\" {\n * interface CustomAgentMessages {\n * artifact: ArtifactMessage;\n * notification: NotificationMessage;\n * }\n * }\n * ```\n */\nexport interface CustomAgentMessages {\n\t// Empty by default - apps extend via declaration merging\n}\n\n/**\n * AgentMessage: Union of LLM messages + custom messages.\n * This abstraction allows apps to add custom message types while maintaining\n * type safety and compatibility with the base LLM messages.\n */\nexport type AgentMessage = Message | CustomAgentMessages[keyof CustomAgentMessages];\n\n/**\n * Agent state containing all configuration and conversation data.\n */\nexport interface AgentState {\n\tsystemPrompt: string;\n\tmodel: Model<any>;\n\tthinkingLevel: ThinkingLevel;\n\ttools: AgentTool<any>[];\n\tmessages: AgentMessage[]; // Can include attachments + custom message types\n\tisStreaming: boolean;\n\tstreamMessage: AgentMessage | null;\n\tpendingToolCalls: Set<string>;\n\terror?: string;\n\t/**\n\t * The model currently being used for inference. Set at _runLoop() start,\n\t * cleared when the loop ends. When present, UI should display this instead\n\t * of `model` to avoid showing a stale value after a mid-turn model switch.\n\t */\n\tactiveInferenceModel?: Model<any>;\n}\n\nexport interface AgentToolResult<T> {\n\t// Content blocks supporting text and images\n\tcontent: (TextContent | ImageContent)[];\n\t// Details to be displayed in a UI or logged\n\tdetails: T;\n}\n\n// Callback for streaming tool execution updates\nexport type AgentToolUpdateCallback<T = any> = (partialResult: AgentToolResult<T>) => void;\n\n// AgentTool extends Tool but adds the execute function\nexport interface AgentTool<TParameters extends TSchema = TSchema, TDetails = any> extends Tool<TParameters> {\n\t// A human-readable label for the tool to be displayed in UI\n\tlabel: string;\n\texecute: (\n\t\ttoolCallId: string,\n\t\tparams: Static<TParameters>,\n\t\tsignal?: AbortSignal,\n\t\tonUpdate?: AgentToolUpdateCallback<TDetails>,\n\t) => Promise<AgentToolResult<TDetails>>;\n}\n\n// AgentContext is like Context but uses AgentTool\nexport interface AgentContext {\n\tsystemPrompt: string;\n\tmessages: AgentMessage[];\n\ttools?: AgentTool<any>[];\n}\n\n/**\n * Events emitted by the Agent for UI updates.\n * These events provide fine-grained lifecycle information for messages, turns, and tool executions.\n */\nexport type AgentEvent =\n\t// Agent lifecycle\n\t| { type: \"agent_start\" }\n\t| { type: \"agent_end\"; messages: AgentMessage[] }\n\t// Turn lifecycle - a turn is one assistant response + any tool calls/results\n\t| { type: \"turn_start\" }\n\t| { type: \"turn_end\"; message: AgentMessage; toolResults: ToolResultMessage[] }\n\t// Message lifecycle - emitted for user, assistant, and toolResult messages\n\t| { type: \"message_start\"; message: AgentMessage }\n\t// Only emitted for assistant messages during streaming\n\t| { type: \"message_update\"; message: AgentMessage; assistantMessageEvent: AssistantMessageEvent }\n\t| { type: \"message_end\"; message: AgentMessage }\n\t// Tool execution lifecycle\n\t| { type: \"tool_execution_start\"; toolCallId: string; toolName: string; args: any }\n\t| { type: \"tool_execution_update\"; toolCallId: string; toolName: string; args: any; partialResult: any }\n\t| { type: \"tool_execution_end\"; toolCallId: string; toolName: string; result: any; isError: boolean };\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n\tAssistantMessage,\n\tAssistantMessageEvent,\n\tImageContent,\n\tMessage,\n\tModel,\n\tSimpleStreamOptions,\n\tstreamSimple,\n\tTextContent,\n\tTool,\n\tToolResultMessage,\n} from \"@gsd/pi-ai\";\nimport type { Static, TSchema } from \"@sinclair/typebox\";\n\n/** Stream function - can return sync or Promise for async config lookup */\nexport type StreamFn = (\n\t...args: Parameters<typeof streamSimple>\n) => ReturnType<typeof streamSimple> | Promise<ReturnType<typeof streamSimple>>;\n\n/**\n * Configuration for how tool calls from a single assistant message are executed.\n *\n * - \"sequential\": each tool call is prepared, executed, and finalized before the next one starts.\n * - \"parallel\": tool calls are prepared sequentially, then allowed tools execute concurrently.\n * Final tool results are still emitted in assistant source order.\n */\nexport type ToolExecutionMode = \"sequential\" | \"parallel\";\n\n/** A single tool call content block emitted by an assistant message. */\nexport type AgentToolCall = Extract<AssistantMessage[\"content\"][number], { type: \"toolCall\" }>;\n\n/**\n * Result returned from `beforeToolCall`.\n *\n * Returning `{ block: true }` prevents the tool from executing. The loop emits an error tool result instead.\n * `reason` becomes the text shown in that error result. If omitted, a default blocked message is used.\n */\nexport interface BeforeToolCallResult {\n\tblock?: boolean;\n\treason?: string;\n}\n\n/**\n * Partial override returned from `afterToolCall`.\n *\n * Merge semantics are field-by-field:\n * - `content`: if provided, replaces the tool result content array in full\n * - `details`: if provided, replaces the tool result details value in full\n * - `isError`: if provided, replaces the tool result error flag\n *\n * Omitted fields keep the original executed tool result values.\n */\nexport interface AfterToolCallResult {\n\tcontent?: (TextContent | ImageContent)[];\n\tdetails?: unknown;\n\tisError?: boolean;\n}\n\n/** Context passed to `beforeToolCall`. */\nexport interface BeforeToolCallContext {\n\t/** The assistant message that requested the tool call. */\n\tassistantMessage: AssistantMessage;\n\t/** The raw tool call block from `assistantMessage.content`. */\n\ttoolCall: AgentToolCall;\n\t/** Validated tool arguments for the target tool schema. */\n\targs: unknown;\n\t/** Current agent context at the time the tool call is prepared. */\n\tcontext: AgentContext;\n}\n\n/** Context passed to `afterToolCall`. */\nexport interface AfterToolCallContext {\n\t/** The assistant message that requested the tool call. */\n\tassistantMessage: AssistantMessage;\n\t/** The raw tool call block from `assistantMessage.content`. */\n\ttoolCall: AgentToolCall;\n\t/** Validated tool arguments for the target tool schema. */\n\targs: unknown;\n\t/** The executed tool result before any `afterToolCall` overrides are applied. */\n\tresult: AgentToolResult<any>;\n\t/** Whether the executed tool result is currently treated as an error. */\n\tisError: boolean;\n\t/** Current agent context at the time the tool call is finalized. */\n\tcontext: AgentContext;\n}\n\n/**\n * Configuration for the agent loop.\n */\nexport interface AgentLoopConfig extends SimpleStreamOptions {\n\tmodel: Model<any>;\n\n\t/**\n\t * Converts AgentMessage[] to LLM-compatible Message[] before each LLM call.\n\t *\n\t * Each AgentMessage must be converted to a UserMessage, AssistantMessage, or ToolResultMessage\n\t * that the LLM can understand. AgentMessages that cannot be converted (e.g., UI-only notifications,\n\t * status messages) should be filtered out.\n\t *\n\t * @example\n\t * ```typescript\n\t * convertToLlm: (messages) => messages.flatMap(m => {\n\t * if (m.role === \"custom\") {\n\t * // Convert custom message to user message\n\t * return [{ role: \"user\", content: m.content, timestamp: m.timestamp }];\n\t * }\n\t * if (m.role === \"notification\") {\n\t * // Filter out UI-only messages\n\t * return [];\n\t * }\n\t * // Pass through standard LLM messages\n\t * return [m];\n\t * })\n\t * ```\n\t */\n\tconvertToLlm: (messages: AgentMessage[]) => Message[] | Promise<Message[]>;\n\n\t/**\n\t * Optional transform applied to the context before `convertToLlm`.\n\t *\n\t * Use this for operations that work at the AgentMessage level:\n\t * - Context window management (pruning old messages)\n\t * - Injecting context from external sources\n\t *\n\t * @example\n\t * ```typescript\n\t * transformContext: async (messages) => {\n\t * if (estimateTokens(messages) > MAX_TOKENS) {\n\t * return pruneOldMessages(messages);\n\t * }\n\t * return messages;\n\t * }\n\t * ```\n\t */\n\ttransformContext?: (messages: AgentMessage[], signal?: AbortSignal) => Promise<AgentMessage[]>;\n\n\t/**\n\t * Resolves an API key dynamically for each LLM call.\n\t *\n\t * Useful for short-lived OAuth tokens (e.g., GitHub Copilot) that may expire\n\t * during long-running tool execution phases.\n\t */\n\tgetApiKey?: (provider: string) => Promise<string | undefined> | string | undefined;\n\n\t/**\n\t * Returns steering messages to inject into the conversation mid-run.\n\t *\n\t * Called after each tool execution to check for user interruptions.\n\t * If messages are returned, remaining tool calls are skipped and\n\t * these messages are added to the context before the next LLM call.\n\t *\n\t * Use this for \"steering\" the agent while it's working.\n\t */\n\tgetSteeringMessages?: () => Promise<AgentMessage[]>;\n\n\t/**\n\t * Returns follow-up messages to process after the agent would otherwise stop.\n\t *\n\t * Called when the agent has no more tool calls and no steering messages.\n\t * If messages are returned, they're added to the context and the agent\n\t * continues with another turn.\n\t *\n\t * Use this for follow-up messages that should wait until the agent finishes.\n\t */\n\tgetFollowUpMessages?: () => Promise<AgentMessage[]>;\n\n\t/**\n\t * Tool execution mode.\n\t * - \"sequential\": execute tool calls one by one\n\t * - \"parallel\": preflight tool calls sequentially, then execute allowed tools concurrently\n\t *\n\t * Default: \"parallel\"\n\t */\n\ttoolExecution?: ToolExecutionMode;\n\n\t/**\n\t * Called before a tool is executed, after arguments have been validated.\n\t *\n\t * Return `{ block: true }` to prevent execution. The loop emits an error tool result instead.\n\t * The hook receives the agent abort signal and is responsible for honoring it.\n\t */\n\tbeforeToolCall?: (context: BeforeToolCallContext, signal?: AbortSignal) => Promise<BeforeToolCallResult | undefined>;\n\n\t/**\n\t * Called after a tool finishes executing, before final tool events are emitted.\n\t *\n\t * Return an `AfterToolCallResult` to override parts of the executed tool result:\n\t * - `content` replaces the full content array\n\t * - `details` replaces the full details payload\n\t * - `isError` replaces the error flag\n\t *\n\t * Any omitted fields keep their original values. No deep merge is performed.\n\t * The hook receives the agent abort signal and is responsible for honoring it.\n\t */\n\tafterToolCall?: (context: AfterToolCallContext, signal?: AbortSignal) => Promise<AfterToolCallResult | undefined>;\n\n\t/**\n\t * When true, tool calls in assistant messages are rendered in the TUI\n\t * but NOT executed locally. Used for providers that handle tool execution\n\t * internally (e.g., Claude Code CLI via Agent SDK).\n\t *\n\t * The agent loop emits tool_execution_start/end events for TUI rendering\n\t * but skips tool.execute() and does not add tool results to context.\n\t */\n\texternalToolExecution?: boolean;\n\n\t/**\n\t * Called when the agent is about to retry after a recoverable provider error.\n\t *\n\t * Fires after each transient failure (rate limit, connection reset, etc.)\n\t * before the retry backoff sleep. Useful for surfacing retry telemetry to\n\t * the host app without instrumenting the provider layer directly.\n\t */\n\tonRetry?: (context: RetryContext, signal?: AbortSignal) => Promise<void> | void;\n\n\t/**\n\t * Called when the LLM stream fails mid-response.\n\t *\n\t * Fires once per failed stream — `onRetry` may still fire separately if the\n\t * loop elects to retry. Use this for logging or flushing partial state.\n\t */\n\tonStreamError?: (context: StreamErrorContext, signal?: AbortSignal) => Promise<void> | void;\n}\n\n/** Context passed to `onRetry`. */\nexport interface RetryContext {\n\tattempt: number;\n\tmaxRetries: number;\n\tdelayMs: number;\n\terror: Error;\n}\n\n/** Context passed to `onStreamError`. */\nexport interface StreamErrorContext {\n\terror: Error;\n\t/** The text already emitted by the stream before it failed (may be empty). */\n\tpartialText: string;\n\t/** Whether the loop will attempt to retry after this failure. */\n\twillRetry: boolean;\n}\n\n/**\n * Thinking/reasoning level for models that support it.\n * Note: \"xhigh\" is only supported by OpenAI gpt-5.1-codex-max, gpt-5.2, gpt-5.2-codex, gpt-5.3, and gpt-5.3-codex models.\n */\nexport type ThinkingLevel = \"off\" | \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\";\n\n/**\n * Extensible interface for custom app messages.\n * Apps can extend via declaration merging:\n *\n * @example\n * ```typescript\n * declare module \"@mariozechner/agent\" {\n * interface CustomAgentMessages {\n * artifact: ArtifactMessage;\n * notification: NotificationMessage;\n * }\n * }\n * ```\n */\nexport interface CustomAgentMessages {\n\t// Empty by default - apps extend via declaration merging\n}\n\n/**\n * AgentMessage: Union of LLM messages + custom messages.\n * This abstraction allows apps to add custom message types while maintaining\n * type safety and compatibility with the base LLM messages.\n */\nexport type AgentMessage = Message | CustomAgentMessages[keyof CustomAgentMessages];\n\n/**\n * Agent state containing all configuration and conversation data.\n */\nexport interface AgentState {\n\tsystemPrompt: string;\n\tmodel: Model<any>;\n\tthinkingLevel: ThinkingLevel;\n\ttools: AgentTool<any>[];\n\tmessages: AgentMessage[]; // Can include attachments + custom message types\n\tisStreaming: boolean;\n\tstreamMessage: AgentMessage | null;\n\tpendingToolCalls: Set<string>;\n\terror?: string;\n\t/**\n\t * The model currently being used for inference. Set at _runLoop() start,\n\t * cleared when the loop ends. When present, UI should display this instead\n\t * of `model` to avoid showing a stale value after a mid-turn model switch.\n\t */\n\tactiveInferenceModel?: Model<any>;\n}\n\nexport interface AgentToolResult<T> {\n\t// Content blocks supporting text and images\n\tcontent: (TextContent | ImageContent)[];\n\t// Details to be displayed in a UI or logged\n\tdetails: T;\n}\n\n// Callback for streaming tool execution updates\nexport type AgentToolUpdateCallback<T = any> = (partialResult: AgentToolResult<T>) => void;\n\n// AgentTool extends Tool but adds the execute function\nexport interface AgentTool<TParameters extends TSchema = TSchema, TDetails = any> extends Tool<TParameters> {\n\t// A human-readable label for the tool to be displayed in UI\n\tlabel: string;\n\texecute: (\n\t\ttoolCallId: string,\n\t\tparams: Static<TParameters>,\n\t\tsignal?: AbortSignal,\n\t\tonUpdate?: AgentToolUpdateCallback<TDetails>,\n\t) => Promise<AgentToolResult<TDetails>>;\n}\n\n// AgentContext is like Context but uses AgentTool\nexport interface AgentContext {\n\tsystemPrompt: string;\n\tmessages: AgentMessage[];\n\ttools?: AgentTool<any>[];\n}\n\n/**\n * Events emitted by the Agent for UI updates.\n * These events provide fine-grained lifecycle information for messages, turns, and tool executions.\n */\nexport type AgentEvent =\n\t// Agent lifecycle\n\t| { type: \"agent_start\" }\n\t| { type: \"agent_end\"; messages: AgentMessage[] }\n\t// Turn lifecycle - a turn is one assistant response + any tool calls/results\n\t| { type: \"turn_start\" }\n\t| { type: \"turn_end\"; message: AgentMessage; toolResults: ToolResultMessage[] }\n\t// Message lifecycle - emitted for user, assistant, and toolResult messages\n\t| { type: \"message_start\"; message: AgentMessage }\n\t// Only emitted for assistant messages during streaming\n\t| { type: \"message_update\"; message: AgentMessage; assistantMessageEvent: AssistantMessageEvent }\n\t| { type: \"message_end\"; message: AgentMessage }\n\t// Tool execution lifecycle\n\t| { type: \"tool_execution_start\"; toolCallId: string; toolName: string; args: any }\n\t| { type: \"tool_execution_update\"; toolCallId: string; toolName: string; args: any; partialResult: any }\n\t| { type: \"tool_execution_end\"; toolCallId: string; toolName: string; result: any; isError: boolean };\n"]}
@@ -1,8 +1,13 @@
1
1
  {
2
2
  "name": "@gsd/pi-agent-core",
3
- "version": "2.76.0",
3
+ "version": "2.77.0",
4
4
  "description": "General-purpose agent core (vendored from pi-mono)",
5
5
  "type": "module",
6
+ "gsd": {
7
+ "linkable": true,
8
+ "scope": "@gsd",
9
+ "name": "pi-agent-core"
10
+ },
6
11
  "main": "./dist/index.js",
7
12
  "types": "./dist/index.d.ts",
8
13
  "exports": {