@opengsd/gsd-pi 1.0.1 → 1.0.2-dev.0ee79e5

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 (1431) hide show
  1. package/README.md +59 -4
  2. package/dist/claude-cli-check.js +1 -1
  3. package/dist/cli-policy.d.ts +1 -1
  4. package/dist/cli-policy.js +2 -2
  5. package/dist/cli.js +4 -3
  6. package/dist/extension-sort.js +1 -1
  7. package/dist/extension-validator.js +1 -1
  8. package/dist/help-text.js +8 -0
  9. package/dist/loader-entrypoint.js +1 -1
  10. package/dist/loader.js +0 -0
  11. package/dist/resource-loader.d.ts +1 -4
  12. package/dist/resource-loader.js +70 -123
  13. package/dist/resources/.managed-resources-content-hash +1 -1
  14. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +2 -2
  15. package/dist/resources/extensions/github-sync/templates.js +1 -1
  16. package/dist/resources/extensions/gsd/auto/contracts.js +1 -1
  17. package/dist/resources/extensions/gsd/auto/custom-verify-retry-store.js +1 -1
  18. package/dist/resources/extensions/gsd/auto/lease-conflict-notice.js +1 -1
  19. package/dist/resources/extensions/gsd/auto/loop.js +7 -2
  20. package/dist/resources/extensions/gsd/auto/orchestrator.js +1 -1
  21. package/dist/resources/extensions/gsd/auto/phases.js +40 -4
  22. package/dist/resources/extensions/gsd/auto/run-unit.js +110 -44
  23. package/dist/resources/extensions/gsd/auto/schedule-wakeup.js +18 -0
  24. package/dist/resources/extensions/gsd/auto/session.js +1 -1
  25. package/dist/resources/extensions/gsd/auto/unit-runner-events.js +1 -1
  26. package/dist/resources/extensions/gsd/auto/verification-retry-policy.js +1 -1
  27. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-dispatch-outcome.js +1 -1
  28. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-iteration.js +1 -1
  29. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-reconcile-outcome.js +1 -1
  30. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-reconcile.js +1 -1
  31. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-retry.js +1 -1
  32. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-verify-outcome.js +1 -1
  33. package/dist/resources/extensions/gsd/auto/workflow-dispatch-claim.js +1 -1
  34. package/dist/resources/extensions/gsd/auto/workflow-dispatch-ledger.js +1 -1
  35. package/dist/resources/extensions/gsd/auto/workflow-iteration-completion.js +1 -1
  36. package/dist/resources/extensions/gsd/auto/workflow-journal-reporter.js +1 -1
  37. package/dist/resources/extensions/gsd/auto/workflow-kernel.js +1 -1
  38. package/dist/resources/extensions/gsd/auto/workflow-memory-pressure.js +1 -1
  39. package/dist/resources/extensions/gsd/auto/workflow-phase-reporter.js +1 -1
  40. package/dist/resources/extensions/gsd/auto/workflow-session-lock.js +1 -1
  41. package/dist/resources/extensions/gsd/auto/workflow-sidecar-iteration.js +1 -1
  42. package/dist/resources/extensions/gsd/auto/workflow-sidecar-queue.js +1 -1
  43. package/dist/resources/extensions/gsd/auto/workflow-turn-reporter.js +1 -1
  44. package/dist/resources/extensions/gsd/auto/workflow-unit-dispatch.js +1 -1
  45. package/dist/resources/extensions/gsd/auto/workflow-worker-heartbeat.js +1 -1
  46. package/dist/resources/extensions/gsd/auto-artifact-paths.js +4 -3
  47. package/dist/resources/extensions/gsd/auto-budget.js +1 -1
  48. package/dist/resources/extensions/gsd/auto-dashboard.js +1 -1
  49. package/dist/resources/extensions/gsd/auto-dispatch.js +3 -1
  50. package/dist/resources/extensions/gsd/auto-post-unit.js +21 -2
  51. package/dist/resources/extensions/gsd/auto-prompts.js +2 -2
  52. package/dist/resources/extensions/gsd/auto-recovery.js +115 -3
  53. package/dist/resources/extensions/gsd/auto-start.js +1 -1
  54. package/dist/resources/extensions/gsd/auto-status-message.js +1 -1
  55. package/dist/resources/extensions/gsd/auto-timers.js +11 -3
  56. package/dist/resources/extensions/gsd/auto-unit-closeout.js +1 -1
  57. package/dist/resources/extensions/gsd/auto-verification.js +1 -1
  58. package/dist/resources/extensions/gsd/auto-worktree-repair.js +1 -1
  59. package/dist/resources/extensions/gsd/auto-worktree.js +1 -1
  60. package/dist/resources/extensions/gsd/auto.js +34 -8
  61. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +5 -9
  62. package/dist/resources/extensions/gsd/bootstrap/crash-log.js +3 -4
  63. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +2 -1
  64. package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +1 -1
  65. package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +2 -2
  66. package/dist/resources/extensions/gsd/bootstrap/journal-tools.js +1 -1
  67. package/dist/resources/extensions/gsd/bootstrap/memory-tools.js +2 -2
  68. package/dist/resources/extensions/gsd/bootstrap/plan-milestone-schema-recovery.js +98 -0
  69. package/dist/resources/extensions/gsd/bootstrap/query-tools.js +2 -2
  70. package/dist/resources/extensions/gsd/bootstrap/register-extension.js +4 -3
  71. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +5 -1
  72. package/dist/resources/extensions/gsd/bootstrap/register-shortcuts.js +1 -1
  73. package/dist/resources/extensions/gsd/bootstrap/schedule-wakeup-tool.js +69 -0
  74. package/dist/resources/extensions/gsd/bootstrap/system-context.js +2 -2
  75. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +1 -1
  76. package/dist/resources/extensions/gsd/browser-evidence.js +1 -1
  77. package/dist/resources/extensions/gsd/closeout-recovery.js +1 -1
  78. package/dist/resources/extensions/gsd/commands/catalog.js +2 -1
  79. package/dist/resources/extensions/gsd/commands/dispatcher.js +1 -1
  80. package/dist/resources/extensions/gsd/commands/handlers/core.js +1 -0
  81. package/dist/resources/extensions/gsd/commands/handlers/notifications-handler.js +1 -1
  82. package/dist/resources/extensions/gsd/commands/handlers/ops.js +1 -1
  83. package/dist/resources/extensions/gsd/commands-bootstrap.js +1 -0
  84. package/dist/resources/extensions/gsd/commands-closeout.js +1 -1
  85. package/dist/resources/extensions/gsd/commands-ship.js +1 -1
  86. package/dist/resources/extensions/gsd/commands-verdict.js +1 -1
  87. package/dist/resources/extensions/gsd/commands-workflow-templates.js +1 -1
  88. package/dist/resources/extensions/gsd/commands-worktree.js +1 -1
  89. package/dist/resources/extensions/gsd/component-loader.js +1 -1
  90. package/dist/resources/extensions/gsd/db/auto-workers.js +1 -1
  91. package/dist/resources/extensions/gsd/db/command-queue.js +1 -1
  92. package/dist/resources/extensions/gsd/db/milestone-leases.js +20 -6
  93. package/dist/resources/extensions/gsd/db/runtime-kv.js +1 -1
  94. package/dist/resources/extensions/gsd/db/unit-dispatches.js +1 -1
  95. package/dist/resources/extensions/gsd/db-adapter.js +1 -1
  96. package/dist/resources/extensions/gsd/db-base-schema.js +1 -1
  97. package/dist/resources/extensions/gsd/db-connection-cache.js +1 -1
  98. package/dist/resources/extensions/gsd/db-coordination-schema.js +1 -1
  99. package/dist/resources/extensions/gsd/db-decision-requirement-rows.js +1 -1
  100. package/dist/resources/extensions/gsd/db-gate-rows.js +1 -1
  101. package/dist/resources/extensions/gsd/db-lightweight-query-rows.js +1 -1
  102. package/dist/resources/extensions/gsd/db-memory-fts-schema.js +1 -1
  103. package/dist/resources/extensions/gsd/db-migration-backup.js +1 -1
  104. package/dist/resources/extensions/gsd/db-migration-steps.js +1 -1
  105. package/dist/resources/extensions/gsd/db-milestone-artifact-rows.js +1 -1
  106. package/dist/resources/extensions/gsd/db-open-state.js +1 -1
  107. package/dist/resources/extensions/gsd/db-provider.js +1 -1
  108. package/dist/resources/extensions/gsd/db-runtime-kv-schema.js +1 -1
  109. package/dist/resources/extensions/gsd/db-schema-metadata.js +1 -1
  110. package/dist/resources/extensions/gsd/db-task-slice-rows.js +1 -1
  111. package/dist/resources/extensions/gsd/db-transaction.js +1 -1
  112. package/dist/resources/extensions/gsd/db-verification-evidence-rows.js +1 -1
  113. package/dist/resources/extensions/gsd/db-verification-evidence-schema.js +1 -1
  114. package/dist/resources/extensions/gsd/doctor-git-checks.js +1 -1
  115. package/dist/resources/extensions/gsd/ecosystem/gsd-extension-api.js +1 -1
  116. package/dist/resources/extensions/gsd/ecosystem/loader.js +1 -1
  117. package/dist/resources/extensions/gsd/escalation.js +1 -1
  118. package/dist/resources/extensions/gsd/fresh-run-ui.js +1 -1
  119. package/dist/resources/extensions/gsd/git-conflict-state.js +1 -1
  120. package/dist/resources/extensions/gsd/git-service.js +1 -1
  121. package/dist/resources/extensions/gsd/gsd-command-home.js +1 -1
  122. package/dist/resources/extensions/gsd/gsd-db.js +1 -1
  123. package/dist/resources/extensions/gsd/guided-unit-context.js +1 -1
  124. package/dist/resources/extensions/gsd/health-widget.js +1 -1
  125. package/dist/resources/extensions/gsd/knowledge-backfill.js +1 -1
  126. package/dist/resources/extensions/gsd/knowledge-capture.js +1 -1
  127. package/dist/resources/extensions/gsd/knowledge-parser.js +1 -1
  128. package/dist/resources/extensions/gsd/knowledge-projection.js +1 -1
  129. package/dist/resources/extensions/gsd/legacy-telemetry.js +1 -3
  130. package/dist/resources/extensions/gsd/markdown-renderer.js +1 -1
  131. package/dist/resources/extensions/gsd/md-importer.js +2 -2
  132. package/dist/resources/extensions/gsd/memory-backfill.js +1 -1
  133. package/dist/resources/extensions/gsd/memory-consolidation-scanner.js +1 -1
  134. package/dist/resources/extensions/gsd/metrics.js +1 -1
  135. package/dist/resources/extensions/gsd/migrate/audit.js +4 -2
  136. package/dist/resources/extensions/gsd/migrate/command.js +27 -5
  137. package/dist/resources/extensions/gsd/migrate/parser.js +57 -11
  138. package/dist/resources/extensions/gsd/migrate/parsers.js +16 -0
  139. package/dist/resources/extensions/gsd/migrate/preview.js +1 -0
  140. package/dist/resources/extensions/gsd/migrate/safety.js +1 -1
  141. package/dist/resources/extensions/gsd/migrate/transformer.js +79 -6
  142. package/dist/resources/extensions/gsd/migrate/validator.js +22 -1
  143. package/dist/resources/extensions/gsd/migrate/writer.js +1 -1
  144. package/dist/resources/extensions/gsd/milestone-scope-classifier.js +1 -1
  145. package/dist/resources/extensions/gsd/model-router.js +1 -1
  146. package/dist/resources/extensions/gsd/notification-overlay.js +1 -1
  147. package/dist/resources/extensions/gsd/orphan-stash-audit.js +1 -1
  148. package/dist/resources/extensions/gsd/parallel-monitor-overlay.js +1 -1
  149. package/dist/resources/extensions/gsd/paths.js +1 -1
  150. package/dist/resources/extensions/gsd/pending-auto-start.js +1 -1
  151. package/dist/resources/extensions/gsd/planning-depth.js +1 -1
  152. package/dist/resources/extensions/gsd/post-execution-checks.js +1 -1
  153. package/dist/resources/extensions/gsd/pr-evidence.js +1 -1
  154. package/dist/resources/extensions/gsd/pre-execution-checks.js +1 -1
  155. package/dist/resources/extensions/gsd/preferences-skills.js +4 -9
  156. package/dist/resources/extensions/gsd/process-task-path.js +1 -1
  157. package/dist/resources/extensions/gsd/prompts/discuss-headless.md +6 -0
  158. package/dist/resources/extensions/gsd/prompts/discuss.md +6 -0
  159. package/dist/resources/extensions/gsd/prompts/plan-milestone.md +3 -0
  160. package/dist/resources/extensions/gsd/prompts/review-migration.md +2 -2
  161. package/dist/resources/extensions/gsd/provider-switch-observer.js +1 -1
  162. package/dist/resources/extensions/gsd/recovery-classification.js +1 -1
  163. package/dist/resources/extensions/gsd/repository-registry.js +1 -1
  164. package/dist/resources/extensions/gsd/root-write-leak-guard.js +4 -1
  165. package/dist/resources/extensions/gsd/schemas/parsers.js +1 -1
  166. package/dist/resources/extensions/gsd/schemas/validate.js +1 -1
  167. package/dist/resources/extensions/gsd/skill-catalog.js +6 -3
  168. package/dist/resources/extensions/gsd/skill-discovery.js +6 -2
  169. package/dist/resources/extensions/gsd/skill-health.js +3 -1
  170. package/dist/resources/extensions/gsd/skill-manifest.js +1 -1
  171. package/dist/resources/extensions/gsd/skill-telemetry.js +9 -9
  172. package/dist/resources/extensions/gsd/slice-cadence.js +1 -1
  173. package/dist/resources/extensions/gsd/smart-entry-routing.js +1 -1
  174. package/dist/resources/extensions/gsd/state-reconciliation/drift/completion.js +1 -1
  175. package/dist/resources/extensions/gsd/state-reconciliation/drift/merge-state.js +1 -1
  176. package/dist/resources/extensions/gsd/state-reconciliation/drift/project-md.js +1 -1
  177. package/dist/resources/extensions/gsd/state-reconciliation/drift/roadmap.js +1 -1
  178. package/dist/resources/extensions/gsd/state-reconciliation/drift/sketch-flag.js +1 -1
  179. package/dist/resources/extensions/gsd/state-reconciliation/drift/stale-render.js +1 -1
  180. package/dist/resources/extensions/gsd/state-reconciliation/drift/stale-worker.js +1 -1
  181. package/dist/resources/extensions/gsd/state-reconciliation/errors.js +1 -1
  182. package/dist/resources/extensions/gsd/state-reconciliation/index.js +1 -1
  183. package/dist/resources/extensions/gsd/state-reconciliation/registry.js +1 -1
  184. package/dist/resources/extensions/gsd/state-reconciliation/spawn-gate.js +1 -1
  185. package/dist/resources/extensions/gsd/state-reconciliation/types.js +1 -1
  186. package/dist/resources/extensions/gsd/state-reconciliation.js +1 -1
  187. package/dist/resources/extensions/gsd/state.js +9 -18
  188. package/dist/resources/extensions/gsd/tool-contract.js +1 -1
  189. package/dist/resources/extensions/gsd/tools/complete-milestone.js +2 -2
  190. package/dist/resources/extensions/gsd/tools/complete-slice.js +8 -2
  191. package/dist/resources/extensions/gsd/tools/complete-task.js +1 -1
  192. package/dist/resources/extensions/gsd/tools/context-mode-tool-result.js +1 -1
  193. package/dist/resources/extensions/gsd/tools/exec-tool.js +1 -1
  194. package/dist/resources/extensions/gsd/tools/plan-milestone.js +1 -1
  195. package/dist/resources/extensions/gsd/tools/validate-milestone.js +1 -1
  196. package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +1 -1
  197. package/dist/resources/extensions/gsd/tui/render-kit.js +1 -1
  198. package/dist/resources/extensions/gsd/unit-context-composer.js +1 -1
  199. package/dist/resources/extensions/gsd/unit-context-manifest.js +1 -1
  200. package/dist/resources/extensions/gsd/unmerged-milestone-guard.js +1 -1
  201. package/dist/resources/extensions/gsd/uok/audit.js +1 -1
  202. package/dist/resources/extensions/gsd/uok/contracts.js +1 -1
  203. package/dist/resources/extensions/gsd/uok/dispatch-envelope.js +1 -1
  204. package/dist/resources/extensions/gsd/uok/loop-adapter.js +1 -1
  205. package/dist/resources/extensions/gsd/uok/plan-v2.js +1 -1
  206. package/dist/resources/extensions/gsd/uok/timeline.js +1 -1
  207. package/dist/resources/extensions/gsd/validation-block-guard.js +1 -1
  208. package/dist/resources/extensions/gsd/verification-gate.js +28 -12
  209. package/dist/resources/extensions/gsd/verification-verdict.js +9 -1
  210. package/dist/resources/extensions/gsd/watch/header-renderer.js +1 -1
  211. package/dist/resources/extensions/gsd/watch/splash-palette.js +1 -1
  212. package/dist/resources/extensions/gsd/workflow-manifest.js +1 -1
  213. package/dist/resources/extensions/gsd/workflow-projections.js +1 -1
  214. package/dist/resources/extensions/gsd/workflow-protocol.js +1 -1
  215. package/dist/resources/extensions/gsd/workflow-reconcile.js +8 -0
  216. package/dist/resources/extensions/gsd/workflow-templates.js +1 -1
  217. package/dist/resources/extensions/gsd/working-output-messages.js +1 -1
  218. package/dist/resources/extensions/gsd/workspace.js +1 -1
  219. package/dist/resources/extensions/gsd/worktree-lifecycle.js +1 -1
  220. package/dist/resources/extensions/gsd/worktree-manager.js +1 -1
  221. package/dist/resources/extensions/gsd/worktree-safety.js +1 -1
  222. package/dist/resources/extensions/gsd/worktree-state-projection.js +1 -1
  223. package/dist/resources/extensions/mcp-client/manager.js +1 -1
  224. package/dist/resources/extensions/ollama/index.js +1 -1
  225. package/dist/resources/extensions/ollama/model-capabilities.js +16 -5
  226. package/dist/resources/extensions/ollama/ndjson-stream.js +1 -1
  227. package/dist/resources/extensions/ollama/ollama-chat-provider.js +38 -2
  228. package/dist/resources/extensions/ollama/ollama-client.js +1 -1
  229. package/dist/resources/extensions/ollama/ollama-commands.js +1 -1
  230. package/dist/resources/extensions/ollama/ollama-discovery.js +49 -20
  231. package/dist/resources/extensions/ollama/ollama-tool.js +1 -1
  232. package/dist/resources/extensions/ollama/thinking-parser.js +1 -1
  233. package/dist/resources/extensions/ollama/types.js +1 -1
  234. package/dist/resources/extensions/shared/cmux-events.js +1 -1
  235. package/dist/resources/extensions/shared/gsd-phase-state.js +1 -1
  236. package/dist/resources/extensions/shared/interview-ui.js +1 -1
  237. package/dist/resources/extensions/subagent/launch.js +1 -1
  238. package/dist/resources/extensions/subagent/run-store.js +1 -1
  239. package/dist/resources/extensions/visual-brief/artifact-policy.js +1 -1
  240. package/dist/resources/extensions/visual-brief/index.js +1 -1
  241. package/dist/resources/extensions/visual-brief/page-contract.js +1 -1
  242. package/dist/resources/extensions/visual-brief/prompts.js +1 -1
  243. package/dist/resources/skills/api-design/SKILL.md +1 -1
  244. package/dist/resources/skills/create-gsd-extension/SKILL.md +1 -1
  245. package/dist/resources/skills/create-mcp-server/SKILL.md +1 -1
  246. package/dist/resources/skills/create-skill/SKILL.md +3 -0
  247. package/dist/resources/skills/create-skill/references/gsd-skill-ecosystem.md +13 -4
  248. package/dist/resources/skills/create-skill/workflows/create-new-skill.md +2 -0
  249. package/dist/resources/skills/dependency-upgrade/SKILL.md +1 -1
  250. package/dist/resources/skills/observability/SKILL.md +4 -4
  251. package/dist/resources/skills/security-review/SKILL.md +1 -1
  252. package/dist/tsconfig.extensions.tsbuildinfo +1 -0
  253. package/dist/update-check.d.ts +5 -2
  254. package/dist/update-check.js +10 -7
  255. package/dist/update-cmd.d.ts +6 -1
  256. package/dist/update-cmd.js +4 -1
  257. package/dist/web/standalone/.next/BUILD_ID +1 -1
  258. package/dist/web/standalone/.next/app-path-routes-manifest.json +7 -7
  259. package/dist/web/standalone/.next/build-manifest.json +3 -3
  260. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  261. package/dist/web/standalone/.next/required-server-files.json +4 -4
  262. package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
  263. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  264. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  265. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  266. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  267. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  268. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  269. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  270. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  271. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  272. package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
  273. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  274. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  275. package/dist/web/standalone/.next/server/app/_not-found.rsc +3 -3
  276. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  277. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  278. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  279. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  280. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  281. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  282. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  283. package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
  284. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  285. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
  286. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  287. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
  288. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
  289. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
  290. package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
  291. package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
  292. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  293. package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
  294. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  295. package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  296. package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
  297. package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
  298. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  299. package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
  300. package/dist/web/standalone/.next/server/app/api/experimental/route.js +2 -2
  301. package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
  302. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  303. package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
  304. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  305. package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  306. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  307. package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
  308. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  309. package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  310. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  311. package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  312. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  313. package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  314. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  315. package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
  316. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  317. package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
  318. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  319. package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
  320. package/dist/web/standalone/.next/server/app/api/mcp-connections/route.js +1 -1
  321. package/dist/web/standalone/.next/server/app/api/mcp-connections/route_client-reference-manifest.js +1 -1
  322. package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
  323. package/dist/web/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  324. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  325. package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  326. package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
  327. package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  328. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  329. package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  330. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  331. package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
  332. package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +2 -2
  333. package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
  334. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  335. package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
  336. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  337. package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
  338. package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
  339. package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
  340. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  341. package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
  342. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  343. package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
  344. package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
  345. package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  346. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  347. package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
  348. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  349. package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
  350. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  351. package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
  352. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +2 -2
  353. package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
  354. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
  355. package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
  356. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +1 -1
  357. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
  358. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +4 -4
  359. package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
  360. package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
  361. package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
  362. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  363. package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
  364. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  365. package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  366. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  367. package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
  368. package/dist/web/standalone/.next/server/app/index.html +1 -1
  369. package/dist/web/standalone/.next/server/app/index.rsc +4 -4
  370. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  371. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -4
  372. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  373. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +3 -3
  374. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  375. package/dist/web/standalone/.next/server/app/page.js +2 -2
  376. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  377. package/dist/web/standalone/.next/server/app-paths-manifest.json +7 -7
  378. package/dist/web/standalone/.next/server/chunks/63.js +3 -3
  379. package/dist/web/standalone/.next/server/chunks/6897.js +1 -1
  380. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  381. package/dist/web/standalone/.next/server/middleware.js +2 -2
  382. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  383. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  384. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  385. package/dist/web/standalone/.next/static/chunks/app/_not-found/{page-a662c55787b78a48.js → page-74e2ce73b334a036.js} +1 -1
  386. package/dist/web/standalone/.next/static/chunks/app/layout-9059d39aaac392ff.js +1 -0
  387. package/dist/web/standalone/.next/static/chunks/app/page-abc53c69ef415841.js +1 -0
  388. package/dist/web/standalone/.next/static/chunks/{main-app-da6af500e9c35ea7.js → main-app-cd9a54b04f7d1b0b.js} +1 -1
  389. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-81274155375a5684.js +1 -0
  390. package/dist/web/standalone/node_modules/@img/{sharp-libvips-darwin-arm64/lib/libvips-cpp.8.17.3.dylib → sharp-libvips-linux-x64/lib/libvips-cpp.so.8.17.3} +0 -0
  391. package/dist/web/standalone/node_modules/@img/{sharp-libvips-darwin-arm64 → sharp-libvips-linux-x64}/package.json +11 -5
  392. package/dist/web/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/index.js +1 -0
  393. package/dist/web/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/lib/libvips-cpp.so.8.17.3 +0 -0
  394. package/dist/web/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/package.json +42 -0
  395. package/dist/web/standalone/node_modules/@img/sharp-libvips-linuxmusl-x64/versions.json +30 -0
  396. package/dist/web/standalone/node_modules/@img/sharp-linux-x64/lib/sharp-linux-x64.node +0 -0
  397. package/dist/web/standalone/node_modules/@img/{sharp-darwin-arm64 → sharp-linux-x64}/package.json +13 -7
  398. package/dist/web/standalone/node_modules/@img/sharp-linuxmusl-x64/LICENSE +191 -0
  399. package/dist/web/standalone/node_modules/@img/sharp-linuxmusl-x64/lib/sharp-linuxmusl-x64.node +0 -0
  400. package/dist/web/standalone/node_modules/@img/sharp-linuxmusl-x64/package.json +46 -0
  401. package/dist/web/standalone/node_modules/node-pty/build/Makefile +369 -0
  402. package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
  403. package/dist/web/standalone/node_modules/node-pty/build/binding.Makefile +6 -0
  404. package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +168 -0
  405. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.Makefile +6 -0
  406. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.target.mk +106 -0
  407. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_except.target.mk +110 -0
  408. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_maybe.target.mk +106 -0
  409. package/dist/web/standalone/server.js +1 -1
  410. package/dist/welcome-screen.js +1 -1
  411. package/package.json +11 -7
  412. package/packages/contracts/dist/index.js +1 -1
  413. package/packages/contracts/dist/index.js.map +1 -1
  414. package/packages/contracts/dist/rpc.js +1 -1
  415. package/packages/contracts/dist/rpc.js.map +1 -1
  416. package/packages/contracts/dist/rpc.test.js +1 -1
  417. package/packages/contracts/dist/rpc.test.js.map +1 -1
  418. package/packages/contracts/dist/workflow.js +1 -1
  419. package/packages/contracts/dist/workflow.js.map +1 -1
  420. package/packages/contracts/package.json +1 -1
  421. package/packages/contracts/src/index.ts +1 -1
  422. package/packages/contracts/src/rpc.test.ts +1 -1
  423. package/packages/contracts/src/rpc.ts +1 -1
  424. package/packages/contracts/src/workflow.ts +1 -1
  425. package/packages/daemon/package.json +3 -3
  426. package/packages/mcp-server/dist/workflow-tools.js +1 -1
  427. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  428. package/packages/mcp-server/package.json +3 -3
  429. package/packages/mcp-server/src/import-candidates.test.ts +1 -1
  430. package/packages/mcp-server/src/workflow-tools-parity.test.ts +1 -1
  431. package/packages/mcp-server/src/workflow-tools.test.ts +1 -1
  432. package/packages/mcp-server/src/workflow-tools.ts +1 -1
  433. package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
  434. package/packages/native/dist/grep/index.js +35 -1
  435. package/packages/native/dist/index.d.ts +1 -0
  436. package/packages/native/dist/index.js +4 -1
  437. package/packages/native/dist/native.d.ts +2 -0
  438. package/packages/native/dist/native.js +38 -25
  439. package/packages/native/dist/text/index.js +118 -6
  440. package/packages/native/dist/xxhash/index.d.ts +1 -2
  441. package/packages/native/dist/xxhash/index.js +7 -7
  442. package/packages/native/package.json +1 -1
  443. package/packages/native/src/__tests__/function-fallback.test.mjs +37 -0
  444. package/packages/native/src/__tests__/text-fallback.test.mjs +44 -0
  445. package/packages/native/src/grep/index.ts +38 -1
  446. package/packages/native/src/index.ts +2 -0
  447. package/packages/native/src/native.ts +37 -22
  448. package/packages/native/src/text/index.ts +145 -32
  449. package/packages/native/src/xxhash/index.ts +6 -9
  450. package/packages/native/tsconfig.tsbuildinfo +1 -1
  451. package/packages/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
  452. package/packages/pi-agent-core/dist/agent-loop.js +61 -5
  453. package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
  454. package/packages/pi-agent-core/dist/agent.d.ts +10 -0
  455. package/packages/pi-agent-core/dist/agent.d.ts.map +1 -1
  456. package/packages/pi-agent-core/dist/agent.js +14 -0
  457. package/packages/pi-agent-core/dist/agent.js.map +1 -1
  458. package/packages/pi-agent-core/dist/token-audit.js +1 -1
  459. package/packages/pi-agent-core/dist/token-audit.js.map +1 -1
  460. package/packages/pi-agent-core/dist/types.d.ts +32 -0
  461. package/packages/pi-agent-core/dist/types.d.ts.map +1 -1
  462. package/packages/pi-agent-core/dist/types.js.map +1 -1
  463. package/packages/pi-agent-core/package.json +1 -1
  464. package/packages/pi-agent-core/src/agent-loop.test.ts +162 -0
  465. package/packages/pi-agent-core/src/agent-loop.ts +110 -5
  466. package/packages/pi-agent-core/src/agent.ts +18 -0
  467. package/packages/pi-agent-core/src/token-audit.test.ts +1 -1
  468. package/packages/pi-agent-core/src/token-audit.ts +1 -1
  469. package/packages/pi-agent-core/src/types.ts +44 -0
  470. package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -1
  471. package/packages/pi-ai/dist/models/fake-model.d.ts +1 -1
  472. package/packages/pi-ai/dist/models/fake-model.js +1 -1
  473. package/packages/pi-ai/dist/models/fake-model.js.map +1 -1
  474. package/packages/pi-ai/dist/providers/api-family.js +1 -1
  475. package/packages/pi-ai/dist/providers/api-family.js.map +1 -1
  476. package/packages/pi-ai/dist/providers/api-family.test.js +1 -1
  477. package/packages/pi-ai/dist/providers/api-family.test.js.map +1 -1
  478. package/packages/pi-ai/dist/providers/fake.d.ts +1 -1
  479. package/packages/pi-ai/dist/providers/fake.js +1 -1
  480. package/packages/pi-ai/dist/providers/fake.js.map +1 -1
  481. package/packages/pi-ai/dist/providers/google-gemini-cli.test.js +1 -1
  482. package/packages/pi-ai/dist/providers/google-gemini-cli.test.js.map +1 -1
  483. package/packages/pi-ai/dist/providers/provider-capabilities.js +1 -1
  484. package/packages/pi-ai/dist/providers/provider-capabilities.js.map +1 -1
  485. package/packages/pi-ai/dist/providers/provider-capabilities.test.js +1 -1
  486. package/packages/pi-ai/dist/providers/provider-capabilities.test.js.map +1 -1
  487. package/packages/pi-ai/dist/providers/transform-messages-report.test.js +1 -1
  488. package/packages/pi-ai/dist/providers/transform-messages-report.test.js.map +1 -1
  489. package/packages/pi-ai/dist/types.js.map +1 -1
  490. package/packages/pi-ai/package.json +1 -1
  491. package/packages/pi-ai/src/models/fake-model.ts +1 -1
  492. package/packages/pi-ai/src/providers/api-family.test.ts +1 -1
  493. package/packages/pi-ai/src/providers/api-family.ts +1 -1
  494. package/packages/pi-ai/src/providers/fake.ts +1 -1
  495. package/packages/pi-ai/src/providers/google-gemini-cli.test.ts +1 -1
  496. package/packages/pi-ai/src/providers/provider-capabilities.test.ts +1 -1
  497. package/packages/pi-ai/src/providers/provider-capabilities.ts +1 -1
  498. package/packages/pi-ai/src/providers/transform-messages-report.test.ts +1 -1
  499. package/packages/pi-ai/src/types.ts +1 -1
  500. package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
  501. package/packages/pi-coding-agent/dist/core/agent-session-command-errors.test.d.ts +2 -0
  502. package/packages/pi-coding-agent/dist/core/agent-session-command-errors.test.d.ts.map +1 -0
  503. package/packages/pi-coding-agent/dist/core/agent-session-command-errors.test.js +69 -0
  504. package/packages/pi-coding-agent/dist/core/agent-session-command-errors.test.js.map +1 -0
  505. package/packages/pi-coding-agent/dist/core/agent-session-tool-refresh.test.js +1 -1
  506. package/packages/pi-coding-agent/dist/core/agent-session-tool-refresh.test.js.map +1 -1
  507. package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  508. package/packages/pi-coding-agent/dist/core/agent-session.js +52 -1
  509. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  510. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js +1 -1
  511. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js.map +1 -1
  512. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.js +1 -1
  513. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.js.map +1 -1
  514. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.js +1 -1
  515. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.js.map +1 -1
  516. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.js +1 -1
  517. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.js.map +1 -1
  518. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.js +1 -1
  519. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.js.map +1 -1
  520. package/packages/pi-coding-agent/dist/core/extensions/provider-registration.test.js +1 -1
  521. package/packages/pi-coding-agent/dist/core/extensions/provider-registration.test.js.map +1 -1
  522. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +2 -0
  523. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
  524. package/packages/pi-coding-agent/dist/core/extensions/runner.js +37 -0
  525. package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
  526. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +32 -0
  527. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
  528. package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
  529. package/packages/pi-coding-agent/dist/core/lsp/lsp-legacy-alias.test.js +1 -1
  530. package/packages/pi-coding-agent/dist/core/lsp/lsp-legacy-alias.test.js.map +1 -1
  531. package/packages/pi-coding-agent/dist/core/model-discovery.d.ts.map +1 -1
  532. package/packages/pi-coding-agent/dist/core/model-discovery.js +5 -1
  533. package/packages/pi-coding-agent/dist/core/model-discovery.js.map +1 -1
  534. package/packages/pi-coding-agent/dist/core/model-discovery.test.js +21 -0
  535. package/packages/pi-coding-agent/dist/core/model-discovery.test.js.map +1 -1
  536. package/packages/pi-coding-agent/dist/core/package-manager.d.ts.map +1 -1
  537. package/packages/pi-coding-agent/dist/core/package-manager.js +4 -6
  538. package/packages/pi-coding-agent/dist/core/package-manager.js.map +1 -1
  539. package/packages/pi-coding-agent/dist/core/sdk-tool-filter.test.js +1 -1
  540. package/packages/pi-coding-agent/dist/core/sdk-tool-filter.test.js.map +1 -1
  541. package/packages/pi-coding-agent/dist/core/sdk.js +1 -1
  542. package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
  543. package/packages/pi-coding-agent/dist/core/skill-tool.test.js +1 -1
  544. package/packages/pi-coding-agent/dist/core/skill-tool.test.js.map +1 -1
  545. package/packages/pi-coding-agent/dist/core/skills.d.ts +10 -1
  546. package/packages/pi-coding-agent/dist/core/skills.d.ts.map +1 -1
  547. package/packages/pi-coding-agent/dist/core/skills.js +13 -13
  548. package/packages/pi-coding-agent/dist/core/skills.js.map +1 -1
  549. package/packages/pi-coding-agent/dist/core/skills.test.d.ts +2 -0
  550. package/packages/pi-coding-agent/dist/core/skills.test.d.ts.map +1 -0
  551. package/packages/pi-coding-agent/dist/core/skills.test.js +69 -0
  552. package/packages/pi-coding-agent/dist/core/skills.test.js.map +1 -0
  553. package/packages/pi-coding-agent/dist/core/tools/tool-compatibility-registry.js +1 -1
  554. package/packages/pi-coding-agent/dist/core/tools/tool-compatibility-registry.js.map +1 -1
  555. package/packages/pi-coding-agent/dist/core/tools/tool-target-metadata.test.js +1 -1
  556. package/packages/pi-coding-agent/dist/core/tools/tool-target-metadata.test.js.map +1 -1
  557. package/packages/pi-coding-agent/dist/core/tools/tool-target.js +1 -1
  558. package/packages/pi-coding-agent/dist/core/tools/tool-target.js.map +1 -1
  559. package/packages/pi-coding-agent/dist/index.d.ts +1 -1
  560. package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
  561. package/packages/pi-coding-agent/dist/index.js +1 -1
  562. package/packages/pi-coding-agent/dist/index.js.map +1 -1
  563. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/assistant-message-design.test.js +1 -1
  564. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/assistant-message-design.test.js.map +1 -1
  565. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/chat-frame-compaction-tone.test.js +1 -1
  566. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/chat-frame-compaction-tone.test.js.map +1 -1
  567. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/collapsible-message.test.js +1 -1
  568. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/collapsible-message.test.js.map +1 -1
  569. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/provider-display-name.test.js +1 -1
  570. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/provider-display-name.test.js.map +1 -1
  571. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/timestamp.test.js +1 -1
  572. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/timestamp.test.js.map +1 -1
  573. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js +2 -2
  574. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js.map +1 -1
  575. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/user-message-design.test.js +1 -1
  576. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/user-message-design.test.js.map +1 -1
  577. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js +1 -1
  578. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js.map +1 -1
  579. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.js +1 -1
  580. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.js.map +1 -1
  581. package/packages/pi-coding-agent/dist/modes/interactive/components/animated-component.js +1 -1
  582. package/packages/pi-coding-agent/dist/modes/interactive/components/animated-component.js.map +1 -1
  583. package/packages/pi-coding-agent/dist/modes/interactive/components/animated-component.test.js +1 -1
  584. package/packages/pi-coding-agent/dist/modes/interactive/components/animated-component.test.js.map +1 -1
  585. package/packages/pi-coding-agent/dist/modes/interactive/components/armin.js +1 -1
  586. package/packages/pi-coding-agent/dist/modes/interactive/components/armin.js.map +1 -1
  587. package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.js.map +1 -1
  588. package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.js +1 -1
  589. package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.js.map +1 -1
  590. package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.test.js +1 -1
  591. package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.test.js.map +1 -1
  592. package/packages/pi-coding-agent/dist/modes/interactive/components/branch-summary-message.js +1 -1
  593. package/packages/pi-coding-agent/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
  594. package/packages/pi-coding-agent/dist/modes/interactive/components/collapsible-message.js +1 -1
  595. package/packages/pi-coding-agent/dist/modes/interactive/components/collapsible-message.js.map +1 -1
  596. package/packages/pi-coding-agent/dist/modes/interactive/components/compaction-summary-message.js +1 -1
  597. package/packages/pi-coding-agent/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
  598. package/packages/pi-coding-agent/dist/modes/interactive/components/config-selector.js +1 -1
  599. package/packages/pi-coding-agent/dist/modes/interactive/components/config-selector.js.map +1 -1
  600. package/packages/pi-coding-agent/dist/modes/interactive/components/countdown-timer.js +1 -1
  601. package/packages/pi-coding-agent/dist/modes/interactive/components/countdown-timer.js.map +1 -1
  602. package/packages/pi-coding-agent/dist/modes/interactive/components/custom-editor.js +1 -1
  603. package/packages/pi-coding-agent/dist/modes/interactive/components/custom-editor.js.map +1 -1
  604. package/packages/pi-coding-agent/dist/modes/interactive/components/custom-message.js +1 -1
  605. package/packages/pi-coding-agent/dist/modes/interactive/components/custom-message.js.map +1 -1
  606. package/packages/pi-coding-agent/dist/modes/interactive/components/daxnuts.js +1 -1
  607. package/packages/pi-coding-agent/dist/modes/interactive/components/daxnuts.js.map +1 -1
  608. package/packages/pi-coding-agent/dist/modes/interactive/components/daxnuts.test.js +1 -1
  609. package/packages/pi-coding-agent/dist/modes/interactive/components/daxnuts.test.js.map +1 -1
  610. package/packages/pi-coding-agent/dist/modes/interactive/components/dynamic-border.js +1 -1
  611. package/packages/pi-coding-agent/dist/modes/interactive/components/dynamic-border.js.map +1 -1
  612. package/packages/pi-coding-agent/dist/modes/interactive/components/extension-input.js +1 -1
  613. package/packages/pi-coding-agent/dist/modes/interactive/components/extension-input.js.map +1 -1
  614. package/packages/pi-coding-agent/dist/modes/interactive/components/extension-selector.js +1 -1
  615. package/packages/pi-coding-agent/dist/modes/interactive/components/extension-selector.js.map +1 -1
  616. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +1 -1
  617. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
  618. package/packages/pi-coding-agent/dist/modes/interactive/components/interactive-key-handling.test.js +1 -1
  619. package/packages/pi-coding-agent/dist/modes/interactive/components/interactive-key-handling.test.js.map +1 -1
  620. package/packages/pi-coding-agent/dist/modes/interactive/components/oauth-selector.js +1 -1
  621. package/packages/pi-coding-agent/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  622. package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.js +1 -1
  623. package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.js.map +1 -1
  624. package/packages/pi-coding-agent/dist/modes/interactive/components/render-cache.js +1 -1
  625. package/packages/pi-coding-agent/dist/modes/interactive/components/render-cache.js.map +1 -1
  626. package/packages/pi-coding-agent/dist/modes/interactive/components/selector-footers.test.js +1 -1
  627. package/packages/pi-coding-agent/dist/modes/interactive/components/selector-footers.test.js.map +1 -1
  628. package/packages/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.js +1 -1
  629. package/packages/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
  630. package/packages/pi-coding-agent/dist/modes/interactive/components/theme-selector.js +1 -1
  631. package/packages/pi-coding-agent/dist/modes/interactive/components/theme-selector.js.map +1 -1
  632. package/packages/pi-coding-agent/dist/modes/interactive/components/theme-selector.test.js +1 -1
  633. package/packages/pi-coding-agent/dist/modes/interactive/components/theme-selector.test.js.map +1 -1
  634. package/packages/pi-coding-agent/dist/modes/interactive/components/timestamp.js +1 -1
  635. package/packages/pi-coding-agent/dist/modes/interactive/components/timestamp.js.map +1 -1
  636. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js +2 -2
  637. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js.map +1 -1
  638. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +1 -1
  639. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
  640. package/packages/pi-coding-agent/dist/modes/interactive/components/transcript-design.js +1 -1
  641. package/packages/pi-coding-agent/dist/modes/interactive/components/transcript-design.js.map +1 -1
  642. package/packages/pi-coding-agent/dist/modes/interactive/components/tree-render-utils.js +1 -1
  643. package/packages/pi-coding-agent/dist/modes/interactive/components/tree-render-utils.js.map +1 -1
  644. package/packages/pi-coding-agent/dist/modes/interactive/components/tree-selector.js +1 -1
  645. package/packages/pi-coding-agent/dist/modes/interactive/components/tree-selector.js.map +1 -1
  646. package/packages/pi-coding-agent/dist/modes/interactive/components/user-message-selector.js +1 -1
  647. package/packages/pi-coding-agent/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  648. package/packages/pi-coding-agent/dist/modes/interactive/components/user-message-selector.test.js +1 -1
  649. package/packages/pi-coding-agent/dist/modes/interactive/components/user-message-selector.test.js.map +1 -1
  650. package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.js +1 -1
  651. package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.js.map +1 -1
  652. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +1 -1
  653. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  654. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js +1 -1
  655. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js.map +1 -1
  656. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-lifecycle.test.js +1 -1
  657. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-lifecycle.test.js.map +1 -1
  658. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-ordering.test.js +1 -1
  659. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-ordering.test.js.map +1 -1
  660. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +2 -2
  661. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  662. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.js +1 -1
  663. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.js.map +1 -1
  664. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-highlight.test.js +1 -1
  665. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-highlight.test.js.map +1 -1
  666. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +1 -1
  667. package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -1
  668. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.js +1 -1
  669. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.js.map +1 -1
  670. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js +1 -1
  671. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js.map +1 -1
  672. package/packages/pi-coding-agent/dist/modes/interactive/utils/shorten-path.js +1 -1
  673. package/packages/pi-coding-agent/dist/modes/interactive/utils/shorten-path.js.map +1 -1
  674. package/packages/pi-coding-agent/dist/modes/interactive/utils/tool-call-summary.js +1 -1
  675. package/packages/pi-coding-agent/dist/modes/interactive/utils/tool-call-summary.js.map +1 -1
  676. package/packages/pi-coding-agent/dist/modes/interactive/utils/tool-call-summary.test.js +1 -1
  677. package/packages/pi-coding-agent/dist/modes/interactive/utils/tool-call-summary.test.js.map +1 -1
  678. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.js +1 -1
  679. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.js.map +1 -1
  680. package/packages/pi-coding-agent/dist/tests/system-prompt-file-safety.test.js +1 -1
  681. package/packages/pi-coding-agent/dist/tests/system-prompt-file-safety.test.js.map +1 -1
  682. package/packages/pi-coding-agent/package.json +2 -2
  683. package/packages/pi-coding-agent/src/core/agent-session-command-errors.test.ts +79 -0
  684. package/packages/pi-coding-agent/src/core/agent-session-tool-refresh.test.ts +1 -1
  685. package/packages/pi-coding-agent/src/core/agent-session.ts +52 -1
  686. package/packages/pi-coding-agent/src/core/chat-controller-ordering.test.ts +1 -1
  687. package/packages/pi-coding-agent/src/core/extensions/extension-manifest.test.ts +1 -1
  688. package/packages/pi-coding-agent/src/core/extensions/extension-manifest.ts +1 -1
  689. package/packages/pi-coding-agent/src/core/extensions/extension-sort.test.ts +1 -1
  690. package/packages/pi-coding-agent/src/core/extensions/extension-sort.ts +1 -1
  691. package/packages/pi-coding-agent/src/core/extensions/provider-registration.test.ts +1 -1
  692. package/packages/pi-coding-agent/src/core/extensions/runner.ts +43 -0
  693. package/packages/pi-coding-agent/src/core/extensions/types.ts +43 -0
  694. package/packages/pi-coding-agent/src/core/lsp/lsp-legacy-alias.test.ts +1 -1
  695. package/packages/pi-coding-agent/src/core/model-discovery.test.ts +22 -0
  696. package/packages/pi-coding-agent/src/core/model-discovery.ts +6 -1
  697. package/packages/pi-coding-agent/src/core/package-manager.ts +6 -10
  698. package/packages/pi-coding-agent/src/core/sdk-tool-filter.test.ts +1 -1
  699. package/packages/pi-coding-agent/src/core/sdk.ts +1 -1
  700. package/packages/pi-coding-agent/src/core/skill-tool.test.ts +1 -1
  701. package/packages/pi-coding-agent/src/core/skills.test.ts +67 -0
  702. package/packages/pi-coding-agent/src/core/skills.ts +18 -15
  703. package/packages/pi-coding-agent/src/core/tools/tool-compatibility-registry.ts +1 -1
  704. package/packages/pi-coding-agent/src/core/tools/tool-target-metadata.test.ts +1 -1
  705. package/packages/pi-coding-agent/src/core/tools/tool-target.ts +1 -1
  706. package/packages/pi-coding-agent/src/index.ts +2 -0
  707. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/assistant-message-design.test.ts +1 -1
  708. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/chat-frame-compaction-tone.test.ts +1 -1
  709. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/collapsible-message.test.ts +1 -1
  710. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/provider-display-name.test.ts +1 -1
  711. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/timestamp.test.ts +1 -1
  712. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-execution.test.ts +2 -2
  713. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/user-message-design.test.ts +1 -1
  714. package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.test.ts +1 -1
  715. package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.ts +1 -1
  716. package/packages/pi-coding-agent/src/modes/interactive/components/animated-component.test.ts +1 -1
  717. package/packages/pi-coding-agent/src/modes/interactive/components/animated-component.ts +1 -1
  718. package/packages/pi-coding-agent/src/modes/interactive/components/armin.ts +1 -1
  719. package/packages/pi-coding-agent/src/modes/interactive/components/assistant-message.ts +1 -1
  720. package/packages/pi-coding-agent/src/modes/interactive/components/bash-execution.test.ts +1 -1
  721. package/packages/pi-coding-agent/src/modes/interactive/components/bash-execution.ts +1 -1
  722. package/packages/pi-coding-agent/src/modes/interactive/components/branch-summary-message.ts +1 -1
  723. package/packages/pi-coding-agent/src/modes/interactive/components/collapsible-message.ts +1 -1
  724. package/packages/pi-coding-agent/src/modes/interactive/components/compaction-summary-message.ts +1 -1
  725. package/packages/pi-coding-agent/src/modes/interactive/components/config-selector.ts +1 -1
  726. package/packages/pi-coding-agent/src/modes/interactive/components/countdown-timer.ts +1 -1
  727. package/packages/pi-coding-agent/src/modes/interactive/components/custom-editor.ts +1 -1
  728. package/packages/pi-coding-agent/src/modes/interactive/components/custom-message.ts +1 -1
  729. package/packages/pi-coding-agent/src/modes/interactive/components/daxnuts.test.ts +1 -1
  730. package/packages/pi-coding-agent/src/modes/interactive/components/daxnuts.ts +1 -1
  731. package/packages/pi-coding-agent/src/modes/interactive/components/dynamic-border.ts +1 -1
  732. package/packages/pi-coding-agent/src/modes/interactive/components/extension-input.ts +1 -1
  733. package/packages/pi-coding-agent/src/modes/interactive/components/extension-selector.ts +1 -1
  734. package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +1 -1
  735. package/packages/pi-coding-agent/src/modes/interactive/components/interactive-key-handling.test.ts +1 -1
  736. package/packages/pi-coding-agent/src/modes/interactive/components/oauth-selector.ts +1 -1
  737. package/packages/pi-coding-agent/src/modes/interactive/components/provider-manager.ts +1 -1
  738. package/packages/pi-coding-agent/src/modes/interactive/components/render-cache.ts +1 -1
  739. package/packages/pi-coding-agent/src/modes/interactive/components/selector-footers.test.ts +1 -1
  740. package/packages/pi-coding-agent/src/modes/interactive/components/skill-invocation-message.ts +1 -1
  741. package/packages/pi-coding-agent/src/modes/interactive/components/theme-selector.test.ts +1 -1
  742. package/packages/pi-coding-agent/src/modes/interactive/components/theme-selector.ts +1 -1
  743. package/packages/pi-coding-agent/src/modes/interactive/components/timestamp.ts +1 -1
  744. package/packages/pi-coding-agent/src/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.ts +2 -2
  745. package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +1 -1
  746. package/packages/pi-coding-agent/src/modes/interactive/components/transcript-design.ts +1 -1
  747. package/packages/pi-coding-agent/src/modes/interactive/components/tree-render-utils.ts +1 -1
  748. package/packages/pi-coding-agent/src/modes/interactive/components/tree-selector.ts +1 -1
  749. package/packages/pi-coding-agent/src/modes/interactive/components/user-message-selector.test.ts +1 -1
  750. package/packages/pi-coding-agent/src/modes/interactive/components/user-message-selector.ts +1 -1
  751. package/packages/pi-coding-agent/src/modes/interactive/components/user-message.ts +1 -1
  752. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +1 -1
  753. package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.test.ts +1 -1
  754. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode-lifecycle.test.ts +1 -1
  755. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode-ordering.test.ts +1 -1
  756. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +2 -2
  757. package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.test.ts +1 -1
  758. package/packages/pi-coding-agent/src/modes/interactive/theme/theme-highlight.test.ts +1 -1
  759. package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +1 -1
  760. package/packages/pi-coding-agent/src/modes/interactive/tui-mode.test.ts +1 -1
  761. package/packages/pi-coding-agent/src/modes/interactive/tui-mode.ts +1 -1
  762. package/packages/pi-coding-agent/src/modes/interactive/utils/shorten-path.ts +1 -1
  763. package/packages/pi-coding-agent/src/modes/interactive/utils/tool-call-summary.test.ts +1 -1
  764. package/packages/pi-coding-agent/src/modes/interactive/utils/tool-call-summary.ts +1 -1
  765. package/packages/pi-coding-agent/src/modes/rpc/rpc-types.ts +1 -1
  766. package/packages/pi-coding-agent/src/tests/system-prompt-file-safety.test.ts +1 -1
  767. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  768. package/packages/pi-tui/dist/__tests__/keys.test.js +1 -1
  769. package/packages/pi-tui/dist/__tests__/keys.test.js.map +1 -1
  770. package/packages/pi-tui/dist/__tests__/style.test.js +1 -1
  771. package/packages/pi-tui/dist/__tests__/style.test.js.map +1 -1
  772. package/packages/pi-tui/dist/__tests__/tui.test.js +1 -1
  773. package/packages/pi-tui/dist/__tests__/tui.test.js.map +1 -1
  774. package/packages/pi-tui/dist/__tests__/utils.test.js +5 -2
  775. package/packages/pi-tui/dist/__tests__/utils.test.js.map +1 -1
  776. package/packages/pi-tui/dist/components/__tests__/box.test.js +1 -1
  777. package/packages/pi-tui/dist/components/__tests__/box.test.js.map +1 -1
  778. package/packages/pi-tui/dist/components/__tests__/editor.test.js +1 -1
  779. package/packages/pi-tui/dist/components/__tests__/editor.test.js.map +1 -1
  780. package/packages/pi-tui/dist/components/__tests__/truncated-text.test.js +1 -1
  781. package/packages/pi-tui/dist/components/__tests__/truncated-text.test.js.map +1 -1
  782. package/packages/pi-tui/dist/components/box.js +1 -1
  783. package/packages/pi-tui/dist/components/box.js.map +1 -1
  784. package/packages/pi-tui/dist/components/editor.js +1 -1
  785. package/packages/pi-tui/dist/components/editor.js.map +1 -1
  786. package/packages/pi-tui/dist/components/input.js +1 -1
  787. package/packages/pi-tui/dist/components/input.js.map +1 -1
  788. package/packages/pi-tui/dist/components/truncated-text.js +1 -1
  789. package/packages/pi-tui/dist/components/truncated-text.js.map +1 -1
  790. package/packages/pi-tui/dist/index.js +1 -1
  791. package/packages/pi-tui/dist/index.js.map +1 -1
  792. package/packages/pi-tui/dist/keys.js +1 -1
  793. package/packages/pi-tui/dist/keys.js.map +1 -1
  794. package/packages/pi-tui/dist/overlay-layout.js +1 -1
  795. package/packages/pi-tui/dist/overlay-layout.js.map +1 -1
  796. package/packages/pi-tui/dist/style.js +1 -1
  797. package/packages/pi-tui/dist/style.js.map +1 -1
  798. package/packages/pi-tui/dist/tui.js +1 -1
  799. package/packages/pi-tui/dist/tui.js.map +1 -1
  800. package/packages/pi-tui/dist/utils.d.ts +3 -1
  801. package/packages/pi-tui/dist/utils.d.ts.map +1 -1
  802. package/packages/pi-tui/dist/utils.js +46 -2
  803. package/packages/pi-tui/dist/utils.js.map +1 -1
  804. package/packages/pi-tui/package.json +1 -1
  805. package/packages/pi-tui/src/__tests__/keys.test.ts +1 -1
  806. package/packages/pi-tui/src/__tests__/style.test.ts +1 -1
  807. package/packages/pi-tui/src/__tests__/tui.test.ts +1 -1
  808. package/packages/pi-tui/src/__tests__/utils.test.ts +6 -2
  809. package/packages/pi-tui/src/components/__tests__/box.test.ts +1 -1
  810. package/packages/pi-tui/src/components/__tests__/editor.test.ts +1 -1
  811. package/packages/pi-tui/src/components/__tests__/truncated-text.test.ts +1 -1
  812. package/packages/pi-tui/src/components/box.ts +1 -1
  813. package/packages/pi-tui/src/components/editor.ts +1 -1
  814. package/packages/pi-tui/src/components/input.ts +1 -1
  815. package/packages/pi-tui/src/components/truncated-text.ts +1 -1
  816. package/packages/pi-tui/src/index.ts +1 -1
  817. package/packages/pi-tui/src/keys.ts +1 -1
  818. package/packages/pi-tui/src/overlay-layout.ts +1 -1
  819. package/packages/pi-tui/src/style.ts +1 -1
  820. package/packages/pi-tui/src/tui.ts +1 -1
  821. package/packages/pi-tui/src/utils.ts +47 -2
  822. package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
  823. package/packages/rpc-client/dist/rpc-types.js +1 -1
  824. package/packages/rpc-client/dist/rpc-types.js.map +1 -1
  825. package/packages/rpc-client/package.json +2 -2
  826. package/packages/rpc-client/src/rpc-types.ts +1 -1
  827. package/packages/rpc-client/tsconfig.tsbuildinfo +1 -1
  828. package/pkg/dist/modes/interactive/theme/theme-highlight.test.js +1 -1
  829. package/pkg/dist/modes/interactive/theme/theme-highlight.test.js.map +1 -1
  830. package/pkg/dist/modes/interactive/theme/themes.js +1 -1
  831. package/pkg/dist/modes/interactive/theme/themes.js.map +1 -1
  832. package/pkg/package.json +1 -1
  833. package/scripts/install.js +36 -3
  834. package/scripts/lib/workspace-manifest.cjs +1 -1
  835. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +2 -2
  836. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +5 -5
  837. package/src/resources/extensions/github-sync/templates.ts +1 -1
  838. package/src/resources/extensions/github-sync/tests/inline-code.test.ts +1 -1
  839. package/src/resources/extensions/github-sync/tests/templates.test.ts +1 -1
  840. package/src/resources/extensions/google-search/index.ts +1 -1
  841. package/src/resources/extensions/gsd/auto/contracts.ts +1 -1
  842. package/src/resources/extensions/gsd/auto/custom-verify-retry-store.ts +1 -1
  843. package/src/resources/extensions/gsd/auto/lease-conflict-notice.ts +1 -1
  844. package/src/resources/extensions/gsd/auto/loop-deps.ts +11 -0
  845. package/src/resources/extensions/gsd/auto/loop.ts +7 -2
  846. package/src/resources/extensions/gsd/auto/orchestrator.ts +1 -1
  847. package/src/resources/extensions/gsd/auto/phases.ts +47 -4
  848. package/src/resources/extensions/gsd/auto/run-unit.ts +117 -45
  849. package/src/resources/extensions/gsd/auto/schedule-wakeup.ts +40 -0
  850. package/src/resources/extensions/gsd/auto/session.ts +1 -1
  851. package/src/resources/extensions/gsd/auto/unit-runner-events.ts +1 -1
  852. package/src/resources/extensions/gsd/auto/verification-retry-policy.ts +1 -1
  853. package/src/resources/extensions/gsd/auto/workflow-custom-engine-dispatch-outcome.ts +1 -1
  854. package/src/resources/extensions/gsd/auto/workflow-custom-engine-iteration.ts +1 -1
  855. package/src/resources/extensions/gsd/auto/workflow-custom-engine-reconcile-outcome.ts +1 -1
  856. package/src/resources/extensions/gsd/auto/workflow-custom-engine-reconcile.ts +1 -1
  857. package/src/resources/extensions/gsd/auto/workflow-custom-engine-retry.ts +1 -1
  858. package/src/resources/extensions/gsd/auto/workflow-custom-engine-verify-outcome.ts +1 -1
  859. package/src/resources/extensions/gsd/auto/workflow-dispatch-claim.ts +1 -1
  860. package/src/resources/extensions/gsd/auto/workflow-dispatch-ledger.ts +1 -1
  861. package/src/resources/extensions/gsd/auto/workflow-iteration-completion.ts +1 -1
  862. package/src/resources/extensions/gsd/auto/workflow-journal-reporter.ts +1 -1
  863. package/src/resources/extensions/gsd/auto/workflow-kernel.ts +1 -1
  864. package/src/resources/extensions/gsd/auto/workflow-memory-pressure.ts +1 -1
  865. package/src/resources/extensions/gsd/auto/workflow-phase-reporter.ts +1 -1
  866. package/src/resources/extensions/gsd/auto/workflow-session-lock.ts +1 -1
  867. package/src/resources/extensions/gsd/auto/workflow-sidecar-iteration.ts +1 -1
  868. package/src/resources/extensions/gsd/auto/workflow-sidecar-queue.ts +1 -1
  869. package/src/resources/extensions/gsd/auto/workflow-turn-reporter.ts +1 -1
  870. package/src/resources/extensions/gsd/auto/workflow-unit-dispatch.ts +1 -1
  871. package/src/resources/extensions/gsd/auto/workflow-worker-heartbeat.ts +1 -1
  872. package/src/resources/extensions/gsd/auto-artifact-paths.ts +4 -3
  873. package/src/resources/extensions/gsd/auto-budget.ts +1 -1
  874. package/src/resources/extensions/gsd/auto-dashboard.ts +1 -1
  875. package/src/resources/extensions/gsd/auto-dispatch.ts +2 -1
  876. package/src/resources/extensions/gsd/auto-post-unit.ts +28 -1
  877. package/src/resources/extensions/gsd/auto-prompts.ts +2 -2
  878. package/src/resources/extensions/gsd/auto-recovery.ts +132 -3
  879. package/src/resources/extensions/gsd/auto-start.ts +1 -1
  880. package/src/resources/extensions/gsd/auto-status-message.ts +1 -1
  881. package/src/resources/extensions/gsd/auto-timers.ts +13 -4
  882. package/src/resources/extensions/gsd/auto-unit-closeout.ts +1 -1
  883. package/src/resources/extensions/gsd/auto-verification.ts +1 -1
  884. package/src/resources/extensions/gsd/auto-worktree-repair.ts +1 -1
  885. package/src/resources/extensions/gsd/auto-worktree.ts +1 -1
  886. package/src/resources/extensions/gsd/auto.ts +37 -9
  887. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +5 -9
  888. package/src/resources/extensions/gsd/bootstrap/crash-log.ts +3 -4
  889. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +2 -1
  890. package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +1 -1
  891. package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +2 -2
  892. package/src/resources/extensions/gsd/bootstrap/journal-tools.ts +1 -1
  893. package/src/resources/extensions/gsd/bootstrap/memory-tools.ts +2 -2
  894. package/src/resources/extensions/gsd/bootstrap/plan-milestone-schema-recovery.ts +119 -0
  895. package/src/resources/extensions/gsd/bootstrap/query-tools.ts +2 -2
  896. package/src/resources/extensions/gsd/bootstrap/register-extension.ts +4 -3
  897. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +7 -1
  898. package/src/resources/extensions/gsd/bootstrap/register-shortcuts.ts +1 -1
  899. package/src/resources/extensions/gsd/bootstrap/schedule-wakeup-tool.ts +81 -0
  900. package/src/resources/extensions/gsd/bootstrap/system-context.ts +2 -2
  901. package/src/resources/extensions/gsd/bootstrap/tests/write-gate-basepath.test.ts +1 -1
  902. package/src/resources/extensions/gsd/bootstrap/tests/write-gate-shouldblock-basepath.test.ts +1 -1
  903. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +1 -1
  904. package/src/resources/extensions/gsd/browser-evidence.ts +1 -1
  905. package/src/resources/extensions/gsd/closeout-recovery.ts +1 -1
  906. package/src/resources/extensions/gsd/commands/catalog.ts +2 -1
  907. package/src/resources/extensions/gsd/commands/dispatcher.ts +1 -1
  908. package/src/resources/extensions/gsd/commands/handlers/core.ts +1 -0
  909. package/src/resources/extensions/gsd/commands/handlers/notifications-handler.ts +1 -1
  910. package/src/resources/extensions/gsd/commands/handlers/ops.ts +2 -2
  911. package/src/resources/extensions/gsd/commands-bootstrap.ts +1 -0
  912. package/src/resources/extensions/gsd/commands-closeout.ts +1 -1
  913. package/src/resources/extensions/gsd/commands-ship.ts +1 -1
  914. package/src/resources/extensions/gsd/commands-verdict.ts +1 -1
  915. package/src/resources/extensions/gsd/commands-workflow-templates.ts +1 -1
  916. package/src/resources/extensions/gsd/commands-worktree.ts +1 -1
  917. package/src/resources/extensions/gsd/component-loader.ts +1 -1
  918. package/src/resources/extensions/gsd/db/auto-workers.ts +1 -1
  919. package/src/resources/extensions/gsd/db/command-queue.ts +1 -1
  920. package/src/resources/extensions/gsd/db/milestone-leases.ts +20 -6
  921. package/src/resources/extensions/gsd/db/runtime-kv.ts +1 -1
  922. package/src/resources/extensions/gsd/db/unit-dispatches.ts +1 -1
  923. package/src/resources/extensions/gsd/db-adapter.ts +1 -1
  924. package/src/resources/extensions/gsd/db-base-schema.ts +1 -1
  925. package/src/resources/extensions/gsd/db-connection-cache.ts +1 -1
  926. package/src/resources/extensions/gsd/db-coordination-schema.ts +1 -1
  927. package/src/resources/extensions/gsd/db-decision-requirement-rows.ts +1 -1
  928. package/src/resources/extensions/gsd/db-gate-rows.ts +1 -1
  929. package/src/resources/extensions/gsd/db-lightweight-query-rows.ts +1 -1
  930. package/src/resources/extensions/gsd/db-memory-fts-schema.ts +1 -1
  931. package/src/resources/extensions/gsd/db-migration-backup.ts +1 -1
  932. package/src/resources/extensions/gsd/db-migration-steps.ts +1 -1
  933. package/src/resources/extensions/gsd/db-milestone-artifact-rows.ts +1 -1
  934. package/src/resources/extensions/gsd/db-open-state.ts +1 -1
  935. package/src/resources/extensions/gsd/db-provider.ts +1 -1
  936. package/src/resources/extensions/gsd/db-runtime-kv-schema.ts +1 -1
  937. package/src/resources/extensions/gsd/db-schema-metadata.ts +1 -1
  938. package/src/resources/extensions/gsd/db-task-slice-rows.ts +1 -1
  939. package/src/resources/extensions/gsd/db-transaction.ts +1 -1
  940. package/src/resources/extensions/gsd/db-verification-evidence-rows.ts +1 -1
  941. package/src/resources/extensions/gsd/db-verification-evidence-schema.ts +1 -1
  942. package/src/resources/extensions/gsd/doctor-git-checks.ts +1 -1
  943. package/src/resources/extensions/gsd/doctor-types.ts +1 -1
  944. package/src/resources/extensions/gsd/ecosystem/gsd-extension-api.ts +1 -1
  945. package/src/resources/extensions/gsd/ecosystem/loader.ts +1 -1
  946. package/src/resources/extensions/gsd/escalation.ts +1 -1
  947. package/src/resources/extensions/gsd/fresh-run-ui.ts +1 -1
  948. package/src/resources/extensions/gsd/git-conflict-state.ts +1 -1
  949. package/src/resources/extensions/gsd/git-service.ts +1 -1
  950. package/src/resources/extensions/gsd/gsd-command-home.ts +1 -1
  951. package/src/resources/extensions/gsd/gsd-db.ts +1 -1
  952. package/src/resources/extensions/gsd/guided-unit-context.ts +1 -1
  953. package/src/resources/extensions/gsd/health-widget.ts +1 -1
  954. package/src/resources/extensions/gsd/knowledge-backfill.ts +1 -1
  955. package/src/resources/extensions/gsd/knowledge-capture.ts +1 -1
  956. package/src/resources/extensions/gsd/knowledge-parser.ts +1 -1
  957. package/src/resources/extensions/gsd/knowledge-projection.ts +1 -1
  958. package/src/resources/extensions/gsd/legacy-telemetry.ts +1 -4
  959. package/src/resources/extensions/gsd/markdown-renderer.ts +1 -1
  960. package/src/resources/extensions/gsd/md-importer.ts +2 -2
  961. package/src/resources/extensions/gsd/memory-backfill.ts +1 -1
  962. package/src/resources/extensions/gsd/memory-consolidation-scanner.ts +1 -1
  963. package/src/resources/extensions/gsd/metrics.ts +1 -1
  964. package/src/resources/extensions/gsd/migrate/audit.ts +8 -2
  965. package/src/resources/extensions/gsd/migrate/command.ts +31 -5
  966. package/src/resources/extensions/gsd/migrate/index.ts +1 -1
  967. package/src/resources/extensions/gsd/migrate/parser.ts +63 -10
  968. package/src/resources/extensions/gsd/migrate/parsers.ts +17 -0
  969. package/src/resources/extensions/gsd/migrate/preview.ts +1 -0
  970. package/src/resources/extensions/gsd/migrate/safety.ts +1 -1
  971. package/src/resources/extensions/gsd/migrate/transformer.ts +81 -6
  972. package/src/resources/extensions/gsd/migrate/types.ts +29 -1
  973. package/src/resources/extensions/gsd/migrate/validator.ts +25 -1
  974. package/src/resources/extensions/gsd/migrate/writer.ts +6 -1
  975. package/src/resources/extensions/gsd/milestone-scope-classifier.ts +1 -1
  976. package/src/resources/extensions/gsd/model-router.ts +1 -1
  977. package/src/resources/extensions/gsd/notification-overlay.ts +1 -1
  978. package/src/resources/extensions/gsd/orphan-stash-audit.ts +1 -1
  979. package/src/resources/extensions/gsd/parallel-monitor-overlay.ts +1 -1
  980. package/src/resources/extensions/gsd/paths.ts +1 -1
  981. package/src/resources/extensions/gsd/pending-auto-start.ts +1 -1
  982. package/src/resources/extensions/gsd/planning-depth.ts +1 -1
  983. package/src/resources/extensions/gsd/post-execution-checks.ts +1 -1
  984. package/src/resources/extensions/gsd/pr-evidence.ts +1 -1
  985. package/src/resources/extensions/gsd/pre-execution-checks.ts +1 -1
  986. package/src/resources/extensions/gsd/preferences-skills.ts +4 -9
  987. package/src/resources/extensions/gsd/process-task-path.ts +1 -1
  988. package/src/resources/extensions/gsd/prompts/discuss-headless.md +6 -0
  989. package/src/resources/extensions/gsd/prompts/discuss.md +6 -0
  990. package/src/resources/extensions/gsd/prompts/plan-milestone.md +3 -0
  991. package/src/resources/extensions/gsd/prompts/review-migration.md +2 -2
  992. package/src/resources/extensions/gsd/provider-switch-observer.ts +1 -1
  993. package/src/resources/extensions/gsd/recovery-classification.ts +1 -1
  994. package/src/resources/extensions/gsd/repository-registry.ts +1 -1
  995. package/src/resources/extensions/gsd/root-write-leak-guard.ts +4 -1
  996. package/src/resources/extensions/gsd/schemas/parsers.ts +1 -1
  997. package/src/resources/extensions/gsd/schemas/validate.ts +1 -1
  998. package/src/resources/extensions/gsd/skill-catalog.ts +6 -3
  999. package/src/resources/extensions/gsd/skill-discovery.ts +5 -2
  1000. package/src/resources/extensions/gsd/skill-health.ts +3 -1
  1001. package/src/resources/extensions/gsd/skill-manifest.ts +1 -1
  1002. package/src/resources/extensions/gsd/skill-telemetry.ts +9 -9
  1003. package/src/resources/extensions/gsd/slice-cadence.ts +1 -1
  1004. package/src/resources/extensions/gsd/smart-entry-routing.ts +1 -1
  1005. package/src/resources/extensions/gsd/state-reconciliation/drift/completion.ts +1 -1
  1006. package/src/resources/extensions/gsd/state-reconciliation/drift/merge-state.ts +1 -1
  1007. package/src/resources/extensions/gsd/state-reconciliation/drift/project-md.ts +1 -1
  1008. package/src/resources/extensions/gsd/state-reconciliation/drift/roadmap.ts +1 -1
  1009. package/src/resources/extensions/gsd/state-reconciliation/drift/sketch-flag.ts +1 -1
  1010. package/src/resources/extensions/gsd/state-reconciliation/drift/stale-render.ts +1 -1
  1011. package/src/resources/extensions/gsd/state-reconciliation/drift/stale-worker.ts +1 -1
  1012. package/src/resources/extensions/gsd/state-reconciliation/errors.ts +1 -1
  1013. package/src/resources/extensions/gsd/state-reconciliation/index.ts +1 -1
  1014. package/src/resources/extensions/gsd/state-reconciliation/registry.ts +1 -1
  1015. package/src/resources/extensions/gsd/state-reconciliation/spawn-gate.ts +1 -1
  1016. package/src/resources/extensions/gsd/state-reconciliation/types.ts +1 -1
  1017. package/src/resources/extensions/gsd/state-reconciliation.ts +1 -1
  1018. package/src/resources/extensions/gsd/state.ts +9 -17
  1019. package/src/resources/extensions/gsd/tests/artifact-validators.test.ts +1 -1
  1020. package/src/resources/extensions/gsd/tests/auto-deterministic-error-classification-4973.test.ts +1 -1
  1021. package/src/resources/extensions/gsd/tests/auto-discuss-milestone-deadlock-4973.test.ts +1 -1
  1022. package/src/resources/extensions/gsd/tests/auto-loop-no-copy-artifacts.test.ts +1 -1
  1023. package/src/resources/extensions/gsd/tests/auto-loop-symlink-worktree.test.ts +1 -1
  1024. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +156 -6
  1025. package/src/resources/extensions/gsd/tests/auto-model-selection-tool-poisoning.test.ts +4 -4
  1026. package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +1 -1
  1027. package/src/resources/extensions/gsd/tests/auto-pause-double-entry-guard.test.ts +102 -1
  1028. package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +1 -1
  1029. package/src/resources/extensions/gsd/tests/auto-phases-lifecycle.test.ts +22 -2
  1030. package/src/resources/extensions/gsd/tests/auto-post-unit-step-message.test.ts +1 -1
  1031. package/src/resources/extensions/gsd/tests/auto-project-root-env.test.ts +1 -1
  1032. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +71 -56
  1033. package/src/resources/extensions/gsd/tests/auto-runtime-state.test.ts +1 -1
  1034. package/src/resources/extensions/gsd/tests/auto-session-scope.test.ts +1 -1
  1035. package/src/resources/extensions/gsd/tests/auto-start-clean-runtime-db-gated.test.ts +1 -1
  1036. package/src/resources/extensions/gsd/tests/auto-start-orphan-bootstrap.test.ts +1 -1
  1037. package/src/resources/extensions/gsd/tests/auto-start-time-persistence.test.ts +1 -1
  1038. package/src/resources/extensions/gsd/tests/auto-start-validation-block.test.ts +1 -1
  1039. package/src/resources/extensions/gsd/tests/auto-status-message.test.ts +1 -1
  1040. package/src/resources/extensions/gsd/tests/auto-stop-notification.test.ts +1 -1
  1041. package/src/resources/extensions/gsd/tests/auto-unit-closeout.test.ts +1 -1
  1042. package/src/resources/extensions/gsd/tests/auto-workers.test.ts +1 -1
  1043. package/src/resources/extensions/gsd/tests/auto-worktree-registry.test.ts +1 -1
  1044. package/src/resources/extensions/gsd/tests/auto-worktree-repair.test.ts +1 -1
  1045. package/src/resources/extensions/gsd/tests/auto-wrapup-inflight-guard.test.ts +1 -1
  1046. package/src/resources/extensions/gsd/tests/brief-command.test.ts +1 -1
  1047. package/src/resources/extensions/gsd/tests/browser-tools-compatibility-declarations.test.ts +1 -1
  1048. package/src/resources/extensions/gsd/tests/bundled-skill-triggers.test.ts +1 -1
  1049. package/src/resources/extensions/gsd/tests/check-auto-start-pending-gate.test.ts +1 -1
  1050. package/src/resources/extensions/gsd/tests/check-auto-start-ready-guard.test.ts +1 -1
  1051. package/src/resources/extensions/gsd/tests/claude-skill-dirs.test.ts +13 -2
  1052. package/src/resources/extensions/gsd/tests/closeout-git-deferral.test.ts +1 -1
  1053. package/src/resources/extensions/gsd/tests/closeout-recovery.test.ts +1 -1
  1054. package/src/resources/extensions/gsd/tests/cmux.test.ts +1 -1
  1055. package/src/resources/extensions/gsd/tests/command-queue.test.ts +1 -1
  1056. package/src/resources/extensions/gsd/tests/commands-dispatcher-unmerged-milestone.test.ts +1 -1
  1057. package/src/resources/extensions/gsd/tests/commands-dispatcher-validation-block.test.ts +1 -1
  1058. package/src/resources/extensions/gsd/tests/commands-extensions-version-compare.test.ts +1 -1
  1059. package/src/resources/extensions/gsd/tests/commands-extract-learnings.test.ts +1 -1
  1060. package/src/resources/extensions/gsd/tests/complete-milestone-excerpt.test.ts +3 -3
  1061. package/src/resources/extensions/gsd/tests/complete-milestone-prompt-rendering.test.ts +1 -1
  1062. package/src/resources/extensions/gsd/tests/complete-slice-composer.test.ts +1 -1
  1063. package/src/resources/extensions/gsd/tests/complete-slice.test.ts +27 -0
  1064. package/src/resources/extensions/gsd/tests/component-loader.test.ts +1 -1
  1065. package/src/resources/extensions/gsd/tests/context-store.test.ts +1 -1
  1066. package/src/resources/extensions/gsd/tests/crash-handler-secondary.test.ts +22 -0
  1067. package/src/resources/extensions/gsd/tests/crash-recovery-via-db.test.ts +1 -1
  1068. package/src/resources/extensions/gsd/tests/custom-verify-retry-store.test.ts +1 -1
  1069. package/src/resources/extensions/gsd/tests/db-access-guardrails.test.ts +1 -1
  1070. package/src/resources/extensions/gsd/tests/db-adapter.test.ts +1 -1
  1071. package/src/resources/extensions/gsd/tests/db-authority-regression.test.ts +1 -1
  1072. package/src/resources/extensions/gsd/tests/db-base-schema.test.ts +1 -1
  1073. package/src/resources/extensions/gsd/tests/db-connection-cache.test.ts +1 -1
  1074. package/src/resources/extensions/gsd/tests/db-coordination-schema.test.ts +1 -1
  1075. package/src/resources/extensions/gsd/tests/db-decision-requirement-rows.test.ts +1 -1
  1076. package/src/resources/extensions/gsd/tests/db-gate-rows.test.ts +1 -1
  1077. package/src/resources/extensions/gsd/tests/db-lightweight-query-rows.test.ts +1 -1
  1078. package/src/resources/extensions/gsd/tests/db-memory-fts-schema.test.ts +1 -1
  1079. package/src/resources/extensions/gsd/tests/db-migration-backup.test.ts +1 -1
  1080. package/src/resources/extensions/gsd/tests/db-migration-steps.integration.test.ts +1 -1
  1081. package/src/resources/extensions/gsd/tests/db-migration-steps.test.ts +1 -1
  1082. package/src/resources/extensions/gsd/tests/db-milestone-artifact-rows.test.ts +1 -1
  1083. package/src/resources/extensions/gsd/tests/db-open-state.test.ts +1 -1
  1084. package/src/resources/extensions/gsd/tests/db-provider.test.ts +1 -1
  1085. package/src/resources/extensions/gsd/tests/db-runtime-kv-schema.test.ts +1 -1
  1086. package/src/resources/extensions/gsd/tests/db-schema-metadata.test.ts +1 -1
  1087. package/src/resources/extensions/gsd/tests/db-task-slice-rows.test.ts +1 -1
  1088. package/src/resources/extensions/gsd/tests/db-transaction.test.ts +1 -1
  1089. package/src/resources/extensions/gsd/tests/db-verification-evidence-schema.test.ts +1 -1
  1090. package/src/resources/extensions/gsd/tests/db-writer-path-containment.test.ts +1 -1
  1091. package/src/resources/extensions/gsd/tests/db-writer-root-artifact.test.ts +1 -1
  1092. package/src/resources/extensions/gsd/tests/db-writer-scope.test.ts +1 -1
  1093. package/src/resources/extensions/gsd/tests/deep-mode-integration.test.ts +1 -1
  1094. package/src/resources/extensions/gsd/tests/deep-planning-mode-dispatch.test.ts +1 -1
  1095. package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +4 -30
  1096. package/src/resources/extensions/gsd/tests/detect-stuck-respects-retry.test.ts +1 -1
  1097. package/src/resources/extensions/gsd/tests/discord-invite-links.test.ts +1 -1
  1098. package/src/resources/extensions/gsd/tests/discuss-headless-rendering.test.ts +1 -1
  1099. package/src/resources/extensions/gsd/tests/discuss-tool-scope-leak.test.ts +1 -1
  1100. package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +1 -1
  1101. package/src/resources/extensions/gsd/tests/dispatch-guard-summary-db-mismatch.test.ts +1 -1
  1102. package/src/resources/extensions/gsd/tests/dispatch-rule-coverage.test.ts +1 -1
  1103. package/src/resources/extensions/gsd/tests/doctor-empty-worktree.test.ts +1 -1
  1104. package/src/resources/extensions/gsd/tests/enhanced-verification-integration.test.ts +1 -1
  1105. package/src/resources/extensions/gsd/tests/evidence-cross-ref.test.ts +1 -1
  1106. package/src/resources/extensions/gsd/tests/exec-sandbox.test.ts +1 -1
  1107. package/src/resources/extensions/gsd/tests/execute-summary-save-empty-project.test.ts +1 -1
  1108. package/src/resources/extensions/gsd/tests/execute-task-rendering.test.ts +1 -1
  1109. package/src/resources/extensions/gsd/tests/fast-forward-reused-milestone-branch.test.ts +1 -1
  1110. package/src/resources/extensions/gsd/tests/finalize-survivor-branch.test.ts +1 -1
  1111. package/src/resources/extensions/gsd/tests/forensics-prompt-rendering.test.ts +1 -1
  1112. package/src/resources/extensions/gsd/tests/fresh-run-ui.test.ts +1 -1
  1113. package/src/resources/extensions/gsd/tests/gate-1b-orphan-discrimination.test.ts +1 -1
  1114. package/src/resources/extensions/gsd/tests/gate-1b-recovery-bound-corrections.test.ts +1 -1
  1115. package/src/resources/extensions/gsd/tests/gate-1b-recovery-bound.test.ts +1 -1
  1116. package/src/resources/extensions/gsd/tests/git-checkpoint.test.ts +1 -1
  1117. package/src/resources/extensions/gsd/tests/google-search-stub.test.ts +1 -1
  1118. package/src/resources/extensions/gsd/tests/gsd-command-home.test.ts +1 -1
  1119. package/src/resources/extensions/gsd/tests/gsd-db-failed-open-restore.test.ts +1 -1
  1120. package/src/resources/extensions/gsd/tests/gsd-db-workspace-scope.test.ts +1 -1
  1121. package/src/resources/extensions/gsd/tests/gsd-root-canonical.test.ts +1 -1
  1122. package/src/resources/extensions/gsd/tests/gsd-root-home-guard.test.ts +1 -1
  1123. package/src/resources/extensions/gsd/tests/guided-discuss-milestone-prompt-rendering.test.ts +1 -1
  1124. package/src/resources/extensions/gsd/tests/guided-discuss-project-prompt-rendering.test.ts +1 -1
  1125. package/src/resources/extensions/gsd/tests/guided-discuss-requirements-prompt-rendering.test.ts +1 -1
  1126. package/src/resources/extensions/gsd/tests/guided-dispatch-root.test.ts +1 -1
  1127. package/src/resources/extensions/gsd/tests/guided-flow-prompt-consolidation.test.ts +1 -1
  1128. package/src/resources/extensions/gsd/tests/guided-tool-contract.test.ts +1 -1
  1129. package/src/resources/extensions/gsd/tests/has-pending-deep-stage.test.ts +1 -1
  1130. package/src/resources/extensions/gsd/tests/header-renderer.test.ts +2 -2
  1131. package/src/resources/extensions/gsd/tests/health-widget.test.ts +1 -1
  1132. package/src/resources/extensions/gsd/tests/help-menu-coverage.test.ts +1 -1
  1133. package/src/resources/extensions/gsd/tests/integration/auto-recovery.test.ts +0 -52
  1134. package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +1 -1
  1135. package/src/resources/extensions/gsd/tests/integration/commands-eval-review.integration.test.ts +1 -1
  1136. package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +1 -1
  1137. package/src/resources/extensions/gsd/tests/integration/headless-command.ts +1 -1
  1138. package/src/resources/extensions/gsd/tests/integration/merge-cwd-restore.test.ts +1 -1
  1139. package/src/resources/extensions/gsd/tests/integration/run-uat.test.ts +1 -1
  1140. package/src/resources/extensions/gsd/tests/integration/state-machine-edge-cases.test.ts +1 -23
  1141. package/src/resources/extensions/gsd/tests/integration/state-machine-live-validation.test.ts +0 -28
  1142. package/src/resources/extensions/gsd/tests/integration/workspace-collapse-integration.test.ts +1 -1
  1143. package/src/resources/extensions/gsd/tests/lazy-pi-tui-import.test.ts +1 -1
  1144. package/src/resources/extensions/gsd/tests/lease-conflict-notice.test.ts +1 -1
  1145. package/src/resources/extensions/gsd/tests/legacy-component-format-telemetry.test.ts +1 -1
  1146. package/src/resources/extensions/gsd/tests/legacy-telemetry.test.ts +2 -32
  1147. package/src/resources/extensions/gsd/tests/load-memory-block.test.ts +1 -1
  1148. package/src/resources/extensions/gsd/tests/marketplace-test-fixtures.ts +3 -3
  1149. package/src/resources/extensions/gsd/tests/md-importer.test.ts +23 -0
  1150. package/src/resources/extensions/gsd/tests/memory-consolidation-scanner.test.ts +1 -1
  1151. package/src/resources/extensions/gsd/tests/memory-decay-factor.test.ts +1 -1
  1152. package/src/resources/extensions/gsd/tests/merge-self-branch-guard.test.ts +1 -1
  1153. package/src/resources/extensions/gsd/tests/metrics-atomic-merge.test.ts +1 -1
  1154. package/src/resources/extensions/gsd/tests/metrics-lock-hardening.test.ts +1 -1
  1155. package/src/resources/extensions/gsd/tests/metrics-lock-not-acquired.test.ts +1 -1
  1156. package/src/resources/extensions/gsd/tests/metrics-lock-retry-sleep.test.ts +5 -3
  1157. package/src/resources/extensions/gsd/tests/metrics-milestone-scope.test.ts +1 -1
  1158. package/src/resources/extensions/gsd/tests/metrics-prune-cache-invalidation.test.ts +1 -1
  1159. package/src/resources/extensions/gsd/tests/metrics-scope.test.ts +1 -1
  1160. package/src/resources/extensions/gsd/tests/migrate-parser.test.ts +74 -0
  1161. package/src/resources/extensions/gsd/tests/migrate-safety-audit.test.ts +20 -2
  1162. package/src/resources/extensions/gsd/tests/migrate-transformer.test.ts +61 -2
  1163. package/src/resources/extensions/gsd/tests/milestone-leases.test.ts +26 -2
  1164. package/src/resources/extensions/gsd/tests/milestone-merge-stash-restore.test.ts +1 -1
  1165. package/src/resources/extensions/gsd/tests/milestone-scope-classifier.test.ts +1 -1
  1166. package/src/resources/extensions/gsd/tests/milestone-status-tool.test.ts +1 -1
  1167. package/src/resources/extensions/gsd/tests/model-router.test.ts +1 -1
  1168. package/src/resources/extensions/gsd/tests/notification-overlay.test.ts +1 -1
  1169. package/src/resources/extensions/gsd/tests/notifications-handler.test.ts +1 -1
  1170. package/src/resources/extensions/gsd/tests/originalbase-path-comparison.test.ts +1 -1
  1171. package/src/resources/extensions/gsd/tests/orphan-merge-bootstrap.test.ts +1 -1
  1172. package/src/resources/extensions/gsd/tests/orphan-stash-audit.test.ts +1 -1
  1173. package/src/resources/extensions/gsd/tests/orphaned-worktree-audit.test.ts +1 -1
  1174. package/src/resources/extensions/gsd/tests/parallel-milestone-isolation.test.ts +2 -2
  1175. package/src/resources/extensions/gsd/tests/parallel-monitor-overlay.test.ts +1 -1
  1176. package/src/resources/extensions/gsd/tests/parallel-orchestrator-fast-forward.test.ts +1 -1
  1177. package/src/resources/extensions/gsd/tests/park-milestone.test.ts +1 -158
  1178. package/src/resources/extensions/gsd/tests/path-cache-decoupled.test.ts +1 -1
  1179. package/src/resources/extensions/gsd/tests/path-normalization-unified.test.ts +1 -1
  1180. package/src/resources/extensions/gsd/tests/paths-cache.test.ts +1 -1
  1181. package/src/resources/extensions/gsd/tests/paused-session-via-db.test.ts +1 -1
  1182. package/src/resources/extensions/gsd/tests/pending-autostart-scope.test.ts +1 -1
  1183. package/src/resources/extensions/gsd/tests/pipeline-variant-dispatch.test.ts +1 -1
  1184. package/src/resources/extensions/gsd/tests/plan-milestone-rendering.test.ts +2 -1
  1185. package/src/resources/extensions/gsd/tests/plan-milestone-schema-recovery.test.ts +59 -0
  1186. package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +1 -1
  1187. package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +1 -1
  1188. package/src/resources/extensions/gsd/tests/planning-depth-setter.test.ts +1 -1
  1189. package/src/resources/extensions/gsd/tests/post-exec-retry-bypass.test.ts +1 -1
  1190. package/src/resources/extensions/gsd/tests/pr-evidence-equivalence.test.ts +1 -1
  1191. package/src/resources/extensions/gsd/tests/pr-evidence-hardening.test.ts +1 -1
  1192. package/src/resources/extensions/gsd/tests/pr-evidence.test.ts +1 -1
  1193. package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +2 -2
  1194. package/src/resources/extensions/gsd/tests/pre-execution-pause-wiring.test.ts +1 -1
  1195. package/src/resources/extensions/gsd/tests/prefs-wizard-coverage.test.ts +1 -1
  1196. package/src/resources/extensions/gsd/tests/process-task-path.test.ts +1 -1
  1197. package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +10 -0
  1198. package/src/resources/extensions/gsd/tests/prompt-duplication-cuts.test.ts +1 -1
  1199. package/src/resources/extensions/gsd/tests/provider-switch-observer.test.ts +1 -1
  1200. package/src/resources/extensions/gsd/tests/quality-gates.test.ts +1 -1
  1201. package/src/resources/extensions/gsd/tests/queue-prompt-rendering.test.ts +1 -1
  1202. package/src/resources/extensions/gsd/tests/reactive-executor.test.ts +63 -0
  1203. package/src/resources/extensions/gsd/tests/ready-phrase-no-files-4573.test.ts +1 -1
  1204. package/src/resources/extensions/gsd/tests/reassess-default-optin.test.ts +1 -1
  1205. package/src/resources/extensions/gsd/tests/register-extension-guard.test.ts +3 -4
  1206. package/src/resources/extensions/gsd/tests/repository-registry.test.ts +1 -1
  1207. package/src/resources/extensions/gsd/tests/research-milestone-composer.test.ts +1 -1
  1208. package/src/resources/extensions/gsd/tests/resolve-ts.mjs +0 -4
  1209. package/src/resources/extensions/gsd/tests/resource-loader-import-path.test.ts +1 -1
  1210. package/src/resources/extensions/gsd/tests/resume-missing-worktree-warning.test.ts +1 -1
  1211. package/src/resources/extensions/gsd/tests/root-write-leak-guard.test.ts +40 -0
  1212. package/src/resources/extensions/gsd/tests/run-uat-composer.test.ts +1 -1
  1213. package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +1 -1
  1214. package/src/resources/extensions/gsd/tests/runtime-kv.test.ts +1 -1
  1215. package/src/resources/extensions/gsd/tests/schema-v27-v28-sequence.test.ts +1 -1
  1216. package/src/resources/extensions/gsd/tests/select-resumable-milestone.test.ts +1 -1
  1217. package/src/resources/extensions/gsd/tests/session-lock-multipath.test.ts +2 -2
  1218. package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +1 -1
  1219. package/src/resources/extensions/gsd/tests/session-switch-abort-misclassification.test.ts +27 -10
  1220. package/src/resources/extensions/gsd/tests/skill-manifest.test.ts +1 -1
  1221. package/src/resources/extensions/gsd/tests/slice-cadence.test.ts +1 -1
  1222. package/src/resources/extensions/gsd/tests/smart-entry-complete.test.ts +5 -1
  1223. package/src/resources/extensions/gsd/tests/smart-entry-draft.test.ts +5 -1
  1224. package/src/resources/extensions/gsd/tests/smart-entry-routing.test.ts +1 -1
  1225. package/src/resources/extensions/gsd/tests/sqlite-unavailable-gate.test.ts +1 -1
  1226. package/src/resources/extensions/gsd/tests/stale-dirlistcache-4648.test.ts +1 -1
  1227. package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +3 -3
  1228. package/src/resources/extensions/gsd/tests/state-reconciliation-drift.test.ts +1 -1
  1229. package/src/resources/extensions/gsd/tests/stop-auto-merge-back.test.ts +1 -1
  1230. package/src/resources/extensions/gsd/tests/stop-auto-race-null-unit.test.ts +1 -1
  1231. package/src/resources/extensions/gsd/tests/stuck-state-via-db.test.ts +1 -1
  1232. package/src/resources/extensions/gsd/tests/subagent-model-dispatch.test.ts +1 -1
  1233. package/src/resources/extensions/gsd/tests/system-context-memory.test.ts +1 -1
  1234. package/src/resources/extensions/gsd/tests/system-context-message-routing.test.ts +1 -1
  1235. package/src/resources/extensions/gsd/tests/teardown-chdir-failure-clears-registry.test.ts +1 -1
  1236. package/src/resources/extensions/gsd/tests/teardown-failure-clears-registry.test.ts +1 -1
  1237. package/src/resources/extensions/gsd/tests/token-profile.test.ts +1 -1
  1238. package/src/resources/extensions/gsd/tests/token-tool-gating.test.ts +1 -1
  1239. package/src/resources/extensions/gsd/tests/tool-compatibility.test.ts +1 -1
  1240. package/src/resources/extensions/gsd/tests/tool-naming.test.ts +1 -1
  1241. package/src/resources/extensions/gsd/tests/tool-param-optionality.test.ts +9 -0
  1242. package/src/resources/extensions/gsd/tests/triage-dispatch.test.ts +1 -1
  1243. package/src/resources/extensions/gsd/tests/tui-header-lifecycle.test.ts +1 -1
  1244. package/src/resources/extensions/gsd/tests/tui-render-kit.test.ts +1 -1
  1245. package/src/resources/extensions/gsd/tests/uat-stuck-loop-orphaned-worktree.test.ts +3 -3
  1246. package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +1 -1
  1247. package/src/resources/extensions/gsd/tests/unit-context-manifest.test.ts +1 -1
  1248. package/src/resources/extensions/gsd/tests/unit-dispatches.test.ts +1 -1
  1249. package/src/resources/extensions/gsd/tests/unmerged-milestone-guard.test.ts +1 -1
  1250. package/src/resources/extensions/gsd/tests/unstructured-continue-context-injection.test.ts +1 -1
  1251. package/src/resources/extensions/gsd/tests/uok-contracts.test.ts +1 -1
  1252. package/src/resources/extensions/gsd/tests/uok-gitops-turn-action.test.ts +1 -1
  1253. package/src/resources/extensions/gsd/tests/uok-kernel-path.test.ts +1 -1
  1254. package/src/resources/extensions/gsd/tests/update-command.test.ts +62 -0
  1255. package/src/resources/extensions/gsd/tests/validate-extension-package.test.ts +1 -1
  1256. package/src/resources/extensions/gsd/tests/validate-milestone-prompt-verification-classes.test.ts +1 -1
  1257. package/src/resources/extensions/gsd/tests/validate-milestone-write-order.test.ts +1 -1
  1258. package/src/resources/extensions/gsd/tests/validation-block-guard.test.ts +1 -1
  1259. package/src/resources/extensions/gsd/tests/validator-scope-parity.test.ts +1 -1
  1260. package/src/resources/extensions/gsd/tests/verification-gate.test.ts +16 -7
  1261. package/src/resources/extensions/gsd/tests/verification-retry-policy.test.ts +1 -1
  1262. package/src/resources/extensions/gsd/tests/verification-verdict.test.ts +12 -1
  1263. package/src/resources/extensions/gsd/tests/visualizer-data.test.ts +1 -1
  1264. package/src/resources/extensions/gsd/tests/workflow-custom-engine-dispatch-outcome.test.ts +1 -1
  1265. package/src/resources/extensions/gsd/tests/workflow-custom-engine-iteration.test.ts +1 -1
  1266. package/src/resources/extensions/gsd/tests/workflow-custom-engine-reconcile-outcome.test.ts +1 -1
  1267. package/src/resources/extensions/gsd/tests/workflow-custom-engine-reconcile.test.ts +1 -1
  1268. package/src/resources/extensions/gsd/tests/workflow-custom-engine-retry.test.ts +1 -1
  1269. package/src/resources/extensions/gsd/tests/workflow-custom-engine-verify-outcome.test.ts +1 -1
  1270. package/src/resources/extensions/gsd/tests/workflow-dispatch-claim.test.ts +1 -1
  1271. package/src/resources/extensions/gsd/tests/workflow-dispatch-ledger.test.ts +1 -1
  1272. package/src/resources/extensions/gsd/tests/workflow-install.test.ts +1 -1
  1273. package/src/resources/extensions/gsd/tests/workflow-iteration-completion.test.ts +1 -1
  1274. package/src/resources/extensions/gsd/tests/workflow-journal-reporter.test.ts +1 -1
  1275. package/src/resources/extensions/gsd/tests/workflow-kernel.test.ts +1 -1
  1276. package/src/resources/extensions/gsd/tests/workflow-logger-wiring.test.ts +1 -1
  1277. package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +1 -1
  1278. package/src/resources/extensions/gsd/tests/workflow-memory-pressure.test.ts +1 -1
  1279. package/src/resources/extensions/gsd/tests/workflow-phase-reporter.test.ts +1 -1
  1280. package/src/resources/extensions/gsd/tests/workflow-protocol-excerpt.test.ts +1 -1
  1281. package/src/resources/extensions/gsd/tests/workflow-session-lock.test.ts +1 -1
  1282. package/src/resources/extensions/gsd/tests/workflow-sidecar-iteration.test.ts +1 -1
  1283. package/src/resources/extensions/gsd/tests/workflow-sidecar-queue.test.ts +1 -1
  1284. package/src/resources/extensions/gsd/tests/workflow-templates.test.ts +1 -1
  1285. package/src/resources/extensions/gsd/tests/workflow-turn-reporter.test.ts +1 -1
  1286. package/src/resources/extensions/gsd/tests/workflow-unit-dispatch.test.ts +1 -1
  1287. package/src/resources/extensions/gsd/tests/workflow-worker-heartbeat.test.ts +1 -1
  1288. package/src/resources/extensions/gsd/tests/working-output-messages.test.ts +1 -1
  1289. package/src/resources/extensions/gsd/tests/workspace.test.ts +1 -1
  1290. package/src/resources/extensions/gsd/tests/worktree-db-same-file.test.ts +2 -2
  1291. package/src/resources/extensions/gsd/tests/worktree-expected-warnings.test.ts +1 -1
  1292. package/src/resources/extensions/gsd/tests/worktree-lifecycle.test.ts +2 -2
  1293. package/src/resources/extensions/gsd/tests/worktree-main-branch.test.ts +1 -1
  1294. package/src/resources/extensions/gsd/tests/worktree-project-root-degrade.test.ts +1 -1
  1295. package/src/resources/extensions/gsd/tests/worktree-projection-writers.test.ts +1 -1
  1296. package/src/resources/extensions/gsd/tests/worktree-safety.test.ts +1 -1
  1297. package/src/resources/extensions/gsd/tests/worktree-state-projection.test.ts +1 -1
  1298. package/src/resources/extensions/gsd/tests/worktree-write-gate.test.ts +1 -1
  1299. package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +1 -1
  1300. package/src/resources/extensions/gsd/tests/write-gate-predicates.test.ts +1 -1
  1301. package/src/resources/extensions/gsd/tests/write-gate.test.ts +1 -1
  1302. package/src/resources/extensions/gsd/tests/zero-slice-roadmap-guided.test.ts +1 -1
  1303. package/src/resources/extensions/gsd/tool-contract.ts +1 -1
  1304. package/src/resources/extensions/gsd/tools/complete-milestone.ts +2 -2
  1305. package/src/resources/extensions/gsd/tools/complete-slice.ts +12 -1
  1306. package/src/resources/extensions/gsd/tools/complete-task.ts +1 -1
  1307. package/src/resources/extensions/gsd/tools/context-mode-tool-result.ts +1 -1
  1308. package/src/resources/extensions/gsd/tools/exec-tool.ts +1 -1
  1309. package/src/resources/extensions/gsd/tools/plan-milestone.ts +1 -1
  1310. package/src/resources/extensions/gsd/tools/validate-milestone.ts +1 -1
  1311. package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +1 -1
  1312. package/src/resources/extensions/gsd/tui/render-kit.ts +1 -1
  1313. package/src/resources/extensions/gsd/types.ts +1 -1
  1314. package/src/resources/extensions/gsd/unit-context-composer.ts +1 -1
  1315. package/src/resources/extensions/gsd/unit-context-manifest.ts +1 -1
  1316. package/src/resources/extensions/gsd/unmerged-milestone-guard.ts +1 -1
  1317. package/src/resources/extensions/gsd/uok/audit.ts +1 -1
  1318. package/src/resources/extensions/gsd/uok/contracts.ts +1 -1
  1319. package/src/resources/extensions/gsd/uok/dispatch-envelope.ts +1 -1
  1320. package/src/resources/extensions/gsd/uok/kernel.ts +1 -1
  1321. package/src/resources/extensions/gsd/uok/loop-adapter.ts +1 -1
  1322. package/src/resources/extensions/gsd/uok/plan-v2.ts +1 -1
  1323. package/src/resources/extensions/gsd/uok/timeline.ts +1 -1
  1324. package/src/resources/extensions/gsd/validation-block-guard.ts +1 -1
  1325. package/src/resources/extensions/gsd/verification-gate.ts +28 -12
  1326. package/src/resources/extensions/gsd/verification-verdict.ts +10 -1
  1327. package/src/resources/extensions/gsd/watch/header-renderer.ts +1 -1
  1328. package/src/resources/extensions/gsd/watch/splash-palette.ts +1 -1
  1329. package/src/resources/extensions/gsd/workflow-manifest.ts +1 -1
  1330. package/src/resources/extensions/gsd/workflow-projections.ts +1 -1
  1331. package/src/resources/extensions/gsd/workflow-protocol.ts +1 -1
  1332. package/src/resources/extensions/gsd/workflow-reconcile.ts +8 -0
  1333. package/src/resources/extensions/gsd/workflow-templates.ts +1 -1
  1334. package/src/resources/extensions/gsd/working-output-messages.ts +1 -1
  1335. package/src/resources/extensions/gsd/workspace.ts +1 -1
  1336. package/src/resources/extensions/gsd/worktree-lifecycle.ts +1 -1
  1337. package/src/resources/extensions/gsd/worktree-manager.ts +1 -1
  1338. package/src/resources/extensions/gsd/worktree-safety.ts +1 -1
  1339. package/src/resources/extensions/gsd/worktree-state-projection.ts +1 -1
  1340. package/src/resources/extensions/mcp-client/manager.ts +1 -1
  1341. package/src/resources/extensions/mcp-client/tests/manager.test.ts +1 -1
  1342. package/src/resources/extensions/ollama/index.ts +1 -1
  1343. package/src/resources/extensions/ollama/model-capabilities.ts +16 -5
  1344. package/src/resources/extensions/ollama/ndjson-stream.ts +1 -1
  1345. package/src/resources/extensions/ollama/ollama-chat-provider.ts +41 -2
  1346. package/src/resources/extensions/ollama/ollama-client.ts +1 -1
  1347. package/src/resources/extensions/ollama/ollama-commands.ts +1 -1
  1348. package/src/resources/extensions/ollama/ollama-discovery.ts +49 -17
  1349. package/src/resources/extensions/ollama/ollama-tool.ts +1 -1
  1350. package/src/resources/extensions/ollama/tests/model-capabilities.test.ts +48 -3
  1351. package/src/resources/extensions/ollama/tests/ollama-chat-provider-stream.test.ts +1 -1
  1352. package/src/resources/extensions/ollama/tests/ollama-chat-provider-think.test.ts +87 -0
  1353. package/src/resources/extensions/ollama/tests/ollama-client-timeout-env.test.ts +1 -1
  1354. package/src/resources/extensions/ollama/tests/ollama-client.test.ts +1 -1
  1355. package/src/resources/extensions/ollama/tests/ollama-discovery-priority.test.ts +89 -0
  1356. package/src/resources/extensions/ollama/tests/ollama-discovery.test.ts +44 -6
  1357. package/src/resources/extensions/ollama/thinking-parser.ts +1 -1
  1358. package/src/resources/extensions/ollama/types.ts +21 -1
  1359. package/src/resources/extensions/shared/cmux-events.ts +1 -1
  1360. package/src/resources/extensions/shared/gsd-phase-state.ts +1 -1
  1361. package/src/resources/extensions/shared/interview-ui.ts +1 -1
  1362. package/src/resources/extensions/shared/tests/gsd-phase-state.test.ts +1 -1
  1363. package/src/resources/extensions/shared/tests/interview-notes-loop.test.ts +1 -1
  1364. package/src/resources/extensions/shared/tests/next-action-ui-hasui.test.ts +1 -1
  1365. package/src/resources/extensions/subagent/launch.ts +1 -1
  1366. package/src/resources/extensions/subagent/run-store.ts +1 -1
  1367. package/src/resources/extensions/subagent/tests/launch.test.ts +1 -1
  1368. package/src/resources/extensions/subagent/tests/run-store.test.ts +1 -1
  1369. package/src/resources/extensions/visual-brief/artifact-policy.ts +1 -1
  1370. package/src/resources/extensions/visual-brief/index.ts +1 -1
  1371. package/src/resources/extensions/visual-brief/page-contract.ts +1 -1
  1372. package/src/resources/extensions/visual-brief/prompts.ts +1 -1
  1373. package/src/resources/extensions/visual-brief/tests/visual-brief.test.ts +1 -1
  1374. package/src/resources/skills/api-design/SKILL.md +1 -1
  1375. package/src/resources/skills/create-gsd-extension/SKILL.md +1 -1
  1376. package/src/resources/skills/create-gsd-extension/templates/templates.test.ts +1 -1
  1377. package/src/resources/skills/create-mcp-server/SKILL.md +1 -1
  1378. package/src/resources/skills/create-skill/SKILL.md +3 -0
  1379. package/src/resources/skills/create-skill/references/gsd-skill-ecosystem.md +13 -4
  1380. package/src/resources/skills/create-skill/workflows/create-new-skill.md +2 -0
  1381. package/src/resources/skills/dependency-upgrade/SKILL.md +1 -1
  1382. package/src/resources/skills/observability/SKILL.md +4 -4
  1383. package/src/resources/skills/security-review/SKILL.md +1 -1
  1384. package/dist/web/standalone/.next/static/chunks/app/layout-82017658b76e2494.js +0 -1
  1385. package/dist/web/standalone/.next/static/chunks/app/page-d660442e70026068.js +0 -1
  1386. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-1065c9a10c4c2187.js +0 -1
  1387. package/dist/web/standalone/node_modules/@img/sharp-darwin-arm64/lib/sharp-darwin-arm64.node +0 -0
  1388. package/src/resources/extensions/gsd/tests/auto-start-needs-discussion.test.ts +0 -175
  1389. package/src/resources/extensions/gsd/tests/cache-staleness-regression.test.ts +0 -290
  1390. package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +0 -743
  1391. package/src/resources/extensions/gsd/tests/cwd-fallback-hardening.test.ts +0 -138
  1392. package/src/resources/extensions/gsd/tests/derive-state-crossval.test.ts +0 -514
  1393. package/src/resources/extensions/gsd/tests/derive-state-deps.test.ts +0 -641
  1394. package/src/resources/extensions/gsd/tests/derive-state-draft.test.ts +0 -313
  1395. package/src/resources/extensions/gsd/tests/derive-state.test.ts +0 -1049
  1396. package/src/resources/extensions/gsd/tests/discuss-queued-milestones.test.ts +0 -170
  1397. package/src/resources/extensions/gsd/tests/dispatch-uat-last-completed.test.ts +0 -206
  1398. package/src/resources/extensions/gsd/tests/draft-promotion.test.ts +0 -149
  1399. package/src/resources/extensions/gsd/tests/headless-query.test.ts +0 -184
  1400. package/src/resources/extensions/gsd/tests/integration/auto-preflight.test.ts +0 -38
  1401. package/src/resources/extensions/gsd/tests/integration/doctor-delimiter-fix.test.ts +0 -83
  1402. package/src/resources/extensions/gsd/tests/integration/doctor-enhancements.test.ts +0 -243
  1403. package/src/resources/extensions/gsd/tests/integration/doctor-false-positives.test.ts +0 -243
  1404. package/src/resources/extensions/gsd/tests/integration/doctor-fixlevel.test.ts +0 -263
  1405. package/src/resources/extensions/gsd/tests/integration/doctor-git-symlink-cwd.test.ts +0 -90
  1406. package/src/resources/extensions/gsd/tests/integration/doctor-git.test.ts +0 -954
  1407. package/src/resources/extensions/gsd/tests/integration/doctor-proactive.test.ts +0 -431
  1408. package/src/resources/extensions/gsd/tests/integration/doctor-runtime.test.ts +0 -549
  1409. package/src/resources/extensions/gsd/tests/integration/doctor.test.ts +0 -612
  1410. package/src/resources/extensions/gsd/tests/integration/integration-mixed-milestones.test.ts +0 -539
  1411. package/src/resources/extensions/gsd/tests/integration/migrate-command.test.ts +0 -405
  1412. package/src/resources/extensions/gsd/tests/integration/queue-reorder-e2e.test.ts +0 -335
  1413. package/src/resources/extensions/gsd/tests/integration/worktree-e2e.test.ts +0 -248
  1414. package/src/resources/extensions/gsd/tests/migrate-writer-integration.test.ts +0 -347
  1415. package/src/resources/extensions/gsd/tests/park-edge-cases.test.ts +0 -253
  1416. package/src/resources/extensions/gsd/tests/post-unit-state-rebuild.test.ts +0 -567
  1417. package/src/resources/extensions/gsd/tests/register-hooks-compaction-checkpoint.test.ts +0 -252
  1418. package/src/resources/extensions/gsd/tests/replan-slice.test.ts +0 -609
  1419. package/src/resources/extensions/gsd/tests/requirements.test.ts +0 -110
  1420. package/src/resources/extensions/gsd/tests/slice-parallel-orchestrator.test.ts +0 -348
  1421. package/src/resources/extensions/gsd/tests/state-derivation-parity.test.ts +0 -257
  1422. package/src/resources/extensions/gsd/tests/state-machine-full-walkthrough.test.ts +0 -1645
  1423. package/src/resources/extensions/gsd/tests/validate-milestone.test.ts +0 -766
  1424. package/src/resources/extensions/gsd/tests/workspace-index.test.ts +0 -38
  1425. package/src/resources/extensions/gsd/tests/worktree-integration.test.ts +0 -216
  1426. package/src/resources/extensions/gsd/tests/worktree-path-injection.test.ts +0 -242
  1427. /package/dist/web/standalone/.next/static/{YA9EfdcYixDXzFk6uCrQ2 → zmk7-7Fvws2VUTifSEy0f}/_buildManifest.js +0 -0
  1428. /package/dist/web/standalone/.next/static/{YA9EfdcYixDXzFk6uCrQ2 → zmk7-7Fvws2VUTifSEy0f}/_ssgManifest.js +0 -0
  1429. /package/dist/web/standalone/node_modules/@img/{sharp-libvips-darwin-arm64 → sharp-libvips-linux-x64}/lib/index.js +0 -0
  1430. /package/dist/web/standalone/node_modules/@img/{sharp-libvips-darwin-arm64 → sharp-libvips-linux-x64}/versions.json +0 -0
  1431. /package/dist/web/standalone/node_modules/@img/{sharp-darwin-arm64 → sharp-linux-x64}/LICENSE +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"token-audit.js","sourceRoot":"","sources":["../src/token-audit.ts"],"names":[],"mappings":"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","sourcesContent":["// Project/App: GSD-2\n// File Purpose: Provider-boundary token payload audit helpers.\n\nimport type { Context, ImageContent, Message, TextContent, Tool } from \"@gsd/pi-ai\";\nimport type { AgentMessage } from \"./types.js\";\n\nconst CHARS_PER_TOKEN = 4;\nconst LARGEST_MESSAGE_LIMIT = 5;\nconst LARGEST_TOOL_LIMIT = 10;\nconst LARGEST_CUSTOM_MESSAGE_LIMIT = 5;\n\nexport interface TokenAuditMessageSummary {\n\tindex: number;\n\trole: string;\n\ttype: string;\n\tchars: number;\n}\n\nexport interface TokenAuditToolSummary {\n\tname: string;\n\tchars: number;\n}\n\nexport interface TokenAuditCustomMessageSummary {\n\tindex: number;\n\trole: string;\n\tcustomType?: string;\n\tchars: number;\n}\n\nexport interface TokenAuditSummary {\n\tsystemChars: number;\n\ttoolSchemaChars: number;\n\tmessageCharsByRole: Record<string, number>;\n\ttoolResultChars: number;\n\tcustomMessageChars: number;\n\timageCount: number;\n\testimatedInputTokens: number;\n\tmessageCount: number;\n\ttoolCount: number;\n\tlargestMessages: TokenAuditMessageSummary[];\n\tlargestTools: TokenAuditToolSummary[];\n\tlargestCustomMessages: TokenAuditCustomMessageSummary[];\n}\n\nexport interface ProviderPayloadAuditSummary {\n\tpayloadChars: number;\n\tmessageCharsByRole: Record<string, number>;\n\ttoolSchemaChars: number;\n\timageCount: number;\n\tmessageCount: number;\n\ttoolCount: number;\n\tlargestMessages: TokenAuditMessageSummary[];\n\tlargestTools: TokenAuditToolSummary[];\n}\n\nexport function buildTokenAuditSummary(context: Context, sourceMessages: AgentMessage[]): TokenAuditSummary {\n\tconst systemChars = context.systemPrompt?.length ?? 0;\n\tconst toolSummaries = summarizeTools(context.tools ?? []);\n\tconst toolSchemaChars = toolSummaries.reduce((sum, tool) => sum + tool.chars, 0);\n\tconst messageSummaries = context.messages.map((message, index) => summarizeMessage(message, index));\n\tconst messageCharsByRole: Record<string, number> = {};\n\tlet toolResultChars = 0;\n\tlet imageCount = 0;\n\n\tfor (const summary of messageSummaries) {\n\t\tmessageCharsByRole[summary.role] = (messageCharsByRole[summary.role] ?? 0) + summary.chars;\n\t}\n\n\tfor (const message of context.messages) {\n\t\timageCount += countImagesInMessage(message);\n\t\tif (message.role === \"toolResult\") {\n\t\t\ttoolResultChars += countContentChars(message.content);\n\t\t}\n\t}\n\n\tconst customMessageSummaries = summarizeCustomMessages(sourceMessages);\n\tconst customMessageChars = customMessageSummaries.reduce((sum, message) => sum + message.chars, 0);\n\n\tconst totalChars =\n\t\tsystemChars +\n\t\ttoolSchemaChars +\n\t\tmessageSummaries.reduce((sum, message) => sum + message.chars, 0);\n\n\treturn {\n\t\tsystemChars,\n\t\ttoolSchemaChars,\n\t\tmessageCharsByRole,\n\t\ttoolResultChars,\n\t\tcustomMessageChars,\n\t\timageCount,\n\t\testimatedInputTokens: Math.ceil(totalChars / CHARS_PER_TOKEN),\n\t\tmessageCount: context.messages.length,\n\t\ttoolCount: context.tools?.length ?? 0,\n\t\tlargestMessages: [...messageSummaries].sort((a, b) => b.chars - a.chars).slice(0, LARGEST_MESSAGE_LIMIT),\n\t\tlargestTools: [...toolSummaries].sort((a, b) => b.chars - a.chars).slice(0, LARGEST_TOOL_LIMIT),\n\t\tlargestCustomMessages: [...customMessageSummaries]\n\t\t\t.sort((a, b) => b.chars - a.chars)\n\t\t\t.slice(0, LARGEST_CUSTOM_MESSAGE_LIMIT),\n\t};\n}\n\nexport function maybeLogTokenAudit(context: Context, sourceMessages: AgentMessage[]): void {\n\tif (process.env.PI_TOKEN_AUDIT !== \"1\") return;\n\tconst summary = buildTokenAuditSummary(context, sourceMessages);\n\tprocess.stderr.write(`${JSON.stringify({ type: \"token_audit\", summary })}\\n`);\n}\n\nexport function buildProviderPayloadAuditSummary(payload: unknown): ProviderPayloadAuditSummary {\n\tconst record = asRecord(payload);\n\tconst messages = extractProviderMessages(record);\n\tconst tools = extractProviderTools(record);\n\tconst messageSummaries = messages.map((message, index) => summarizeProviderMessage(message, index));\n\tconst toolSummaries = tools.map((tool) => summarizeProviderTool(tool));\n\tconst messageCharsByRole: Record<string, number> = {};\n\tlet imageCount = 0;\n\n\tfor (const summary of messageSummaries) {\n\t\tmessageCharsByRole[summary.role] = (messageCharsByRole[summary.role] ?? 0) + summary.chars;\n\t}\n\tfor (const message of messages) {\n\t\timageCount += countImagesInValue(message);\n\t}\n\n\treturn {\n\t\tpayloadChars: safeJsonLength(payload),\n\t\tmessageCharsByRole,\n\t\ttoolSchemaChars: toolSummaries.reduce((sum, tool) => sum + tool.chars, 0),\n\t\timageCount,\n\t\tmessageCount: messages.length,\n\t\ttoolCount: tools.length,\n\t\tlargestMessages: [...messageSummaries].sort((a, b) => b.chars - a.chars).slice(0, LARGEST_MESSAGE_LIMIT),\n\t\tlargestTools: [...toolSummaries].sort((a, b) => b.chars - a.chars).slice(0, LARGEST_TOOL_LIMIT),\n\t};\n}\n\nexport function maybeLogProviderPayloadAudit(payload: unknown, phase: string): void {\n\tif (process.env.PI_TOKEN_AUDIT !== \"1\") return;\n\tconst summary = buildProviderPayloadAuditSummary(payload);\n\tprocess.stderr.write(`${JSON.stringify({ type: \"token_audit_provider_payload\", phase, summary })}\\n`);\n}\n\nfunction summarizeMessage(message: Message, index: number): TokenAuditMessageSummary {\n\treturn {\n\t\tindex,\n\t\trole: message.role,\n\t\ttype: messageType(message),\n\t\tchars: safeJsonLength(message),\n\t};\n}\n\nfunction messageType(message: Message): string {\n\tif (message.role === \"assistant\") {\n\t\tconst types = new Set(message.content.map((content) => content.type));\n\t\treturn types.size > 0 ? Array.from(types).join(\"+\") : \"assistant\";\n\t}\n\tif (message.role === \"toolResult\") return message.toolName || \"toolResult\";\n\tif (typeof message.content === \"string\") return \"text\";\n\tconst types = new Set(message.content.map((content) => content.type));\n\treturn types.size > 0 ? Array.from(types).join(\"+\") : \"user\";\n}\n\nfunction summarizeTools(tools: Tool[]): TokenAuditToolSummary[] {\n\treturn tools.map((tool) => ({\n\t\tname: tool.name,\n\t\tchars: safeJsonLength(tool),\n\t}));\n}\n\nfunction summarizeCustomMessages(messages: AgentMessage[]): TokenAuditCustomMessageSummary[] {\n\treturn messages.flatMap((message, index) => {\n\t\tif (!isCustomOrInjectedMessage(message)) return [];\n\t\tconst customType = (message as { customType?: unknown }).customType;\n\t\treturn [{\n\t\t\tindex,\n\t\t\trole: String((message as { role?: unknown }).role ?? \"unknown\"),\n\t\t\tcustomType: typeof customType === \"string\" ? customType : undefined,\n\t\t\tchars: safeJsonLength(message),\n\t\t}];\n\t});\n}\n\nfunction summarizeProviderMessage(message: unknown, index: number): TokenAuditMessageSummary {\n\tconst record = asRecord(message);\n\tconst role = typeof record?.role === \"string\" ? record.role : \"unknown\";\n\tconst type = typeof record?.type === \"string\" ? record.type : role;\n\treturn { index, role, type, chars: safeJsonLength(message) };\n}\n\nfunction summarizeProviderTool(tool: unknown): TokenAuditToolSummary {\n\tconst record = asRecord(tool);\n\tconst name =\n\t\ttypeof record?.name === \"string\"\n\t\t\t? record.name\n\t\t\t: typeof asRecord(record?.function)?.name === \"string\"\n\t\t\t\t? String(asRecord(record?.function)?.name)\n\t\t\t\t: typeof asRecord(record?.toolSpec)?.name === \"string\"\n\t\t\t\t\t? String(asRecord(record?.toolSpec)?.name)\n\t\t\t\t\t: \"unknown\";\n\treturn { name, chars: safeJsonLength(tool) };\n}\n\nfunction extractProviderMessages(record: Record<string, unknown> | null): unknown[] {\n\tconst candidates = [\n\t\tgetArrayField(record, \"messages\"),\n\t\tgetArrayField(record, \"input\"),\n\t\tgetArrayField(record, \"contents\"),\n\t].filter((value): value is unknown[] => value !== null);\n\tif (candidates.length > 0) return candidates[0];\n\tconst input = record?.input;\n\treturn typeof input === \"string\" ? [{ role: \"input\", content: input }] : [];\n}\n\nfunction extractProviderTools(record: Record<string, unknown> | null): unknown[] {\n\tconst direct = getArrayField(record, \"tools\")\n\t\t?? getNestedArrayField(record, [\"config\", \"tools\"])\n\t\t?? getNestedArrayField(record, [\"toolConfig\", \"tools\"])\n\t\t?? getNestedArrayField(record, [\"tool_config\", \"tools\"])\n\t\t?? [];\n\treturn direct.flatMap(expandProviderToolEntry);\n}\n\nfunction expandProviderToolEntry(tool: unknown): unknown[] {\n\tconst record = asRecord(tool);\n\tconst functionDeclarations =\n\t\tgetArrayField(record, \"functionDeclarations\")\n\t\t?? getArrayField(record, \"function_declarations\");\n\tif (functionDeclarations) return functionDeclarations;\n\treturn [tool];\n}\n\nfunction countImagesInMessage(message: Message): number {\n\tif (!(\"content\" in message) || !Array.isArray(message.content)) return 0;\n\treturn message.content.filter((content): content is ImageContent => content.type === \"image\").length;\n}\n\nfunction countImagesInValue(value: unknown): number {\n\tif (!value || typeof value !== \"object\") return 0;\n\tif (Array.isArray(value)) {\n\t\treturn value.reduce((sum, item) => sum + countImagesInValue(item), 0);\n\t}\n\tconst record = value as Record<string, unknown>;\n\tlet count = record.type === \"image\" || record.type === \"input_image\" ? 1 : 0;\n\tfor (const nested of Object.values(record)) {\n\t\tcount += countImagesInValue(nested);\n\t}\n\treturn count;\n}\n\nfunction countContentChars(content: string | (TextContent | ImageContent)[]): number {\n\tif (typeof content === \"string\") return content.length;\n\treturn content.reduce((sum, block) => {\n\t\tif (block.type === \"text\") return sum + block.text.length;\n\t\tif (block.type === \"image\") return sum + block.data.length;\n\t\treturn sum;\n\t}, 0);\n}\n\nfunction isCustomOrInjectedMessage(message: AgentMessage): boolean {\n\tconst role = (message as { role?: unknown }).role;\n\treturn role === \"custom\" || role === \"bashExecution\" || role === \"branchSummary\" || role === \"compactionSummary\";\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n\treturn value && typeof value === \"object\" && !Array.isArray(value) ? value as Record<string, unknown> : null;\n}\n\nfunction getArrayField(record: Record<string, unknown> | null, key: string): unknown[] | null {\n\tconst value = record?.[key];\n\treturn Array.isArray(value) ? value : null;\n}\n\nfunction getNestedArrayField(record: Record<string, unknown> | null, path: string[]): unknown[] | null {\n\tlet current: unknown = record;\n\tfor (const key of path) {\n\t\tcurrent = asRecord(current)?.[key];\n\t}\n\treturn Array.isArray(current) ? current : null;\n}\n\nfunction safeJsonLength(value: unknown): number {\n\ttry {\n\t\treturn JSON.stringify(value)?.length ?? 0;\n\t} catch {\n\t\treturn 0;\n\t}\n}\n"]}
1
+ {"version":3,"file":"token-audit.js","sourceRoot":"","sources":["../src/token-audit.ts"],"names":[],"mappings":"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","sourcesContent":["// Project/App: gsd-pi\n// File Purpose: Provider-boundary token payload audit helpers.\n\nimport type { Context, ImageContent, Message, TextContent, Tool } from \"@gsd/pi-ai\";\nimport type { AgentMessage } from \"./types.js\";\n\nconst CHARS_PER_TOKEN = 4;\nconst LARGEST_MESSAGE_LIMIT = 5;\nconst LARGEST_TOOL_LIMIT = 10;\nconst LARGEST_CUSTOM_MESSAGE_LIMIT = 5;\n\nexport interface TokenAuditMessageSummary {\n\tindex: number;\n\trole: string;\n\ttype: string;\n\tchars: number;\n}\n\nexport interface TokenAuditToolSummary {\n\tname: string;\n\tchars: number;\n}\n\nexport interface TokenAuditCustomMessageSummary {\n\tindex: number;\n\trole: string;\n\tcustomType?: string;\n\tchars: number;\n}\n\nexport interface TokenAuditSummary {\n\tsystemChars: number;\n\ttoolSchemaChars: number;\n\tmessageCharsByRole: Record<string, number>;\n\ttoolResultChars: number;\n\tcustomMessageChars: number;\n\timageCount: number;\n\testimatedInputTokens: number;\n\tmessageCount: number;\n\ttoolCount: number;\n\tlargestMessages: TokenAuditMessageSummary[];\n\tlargestTools: TokenAuditToolSummary[];\n\tlargestCustomMessages: TokenAuditCustomMessageSummary[];\n}\n\nexport interface ProviderPayloadAuditSummary {\n\tpayloadChars: number;\n\tmessageCharsByRole: Record<string, number>;\n\ttoolSchemaChars: number;\n\timageCount: number;\n\tmessageCount: number;\n\ttoolCount: number;\n\tlargestMessages: TokenAuditMessageSummary[];\n\tlargestTools: TokenAuditToolSummary[];\n}\n\nexport function buildTokenAuditSummary(context: Context, sourceMessages: AgentMessage[]): TokenAuditSummary {\n\tconst systemChars = context.systemPrompt?.length ?? 0;\n\tconst toolSummaries = summarizeTools(context.tools ?? []);\n\tconst toolSchemaChars = toolSummaries.reduce((sum, tool) => sum + tool.chars, 0);\n\tconst messageSummaries = context.messages.map((message, index) => summarizeMessage(message, index));\n\tconst messageCharsByRole: Record<string, number> = {};\n\tlet toolResultChars = 0;\n\tlet imageCount = 0;\n\n\tfor (const summary of messageSummaries) {\n\t\tmessageCharsByRole[summary.role] = (messageCharsByRole[summary.role] ?? 0) + summary.chars;\n\t}\n\n\tfor (const message of context.messages) {\n\t\timageCount += countImagesInMessage(message);\n\t\tif (message.role === \"toolResult\") {\n\t\t\ttoolResultChars += countContentChars(message.content);\n\t\t}\n\t}\n\n\tconst customMessageSummaries = summarizeCustomMessages(sourceMessages);\n\tconst customMessageChars = customMessageSummaries.reduce((sum, message) => sum + message.chars, 0);\n\n\tconst totalChars =\n\t\tsystemChars +\n\t\ttoolSchemaChars +\n\t\tmessageSummaries.reduce((sum, message) => sum + message.chars, 0);\n\n\treturn {\n\t\tsystemChars,\n\t\ttoolSchemaChars,\n\t\tmessageCharsByRole,\n\t\ttoolResultChars,\n\t\tcustomMessageChars,\n\t\timageCount,\n\t\testimatedInputTokens: Math.ceil(totalChars / CHARS_PER_TOKEN),\n\t\tmessageCount: context.messages.length,\n\t\ttoolCount: context.tools?.length ?? 0,\n\t\tlargestMessages: [...messageSummaries].sort((a, b) => b.chars - a.chars).slice(0, LARGEST_MESSAGE_LIMIT),\n\t\tlargestTools: [...toolSummaries].sort((a, b) => b.chars - a.chars).slice(0, LARGEST_TOOL_LIMIT),\n\t\tlargestCustomMessages: [...customMessageSummaries]\n\t\t\t.sort((a, b) => b.chars - a.chars)\n\t\t\t.slice(0, LARGEST_CUSTOM_MESSAGE_LIMIT),\n\t};\n}\n\nexport function maybeLogTokenAudit(context: Context, sourceMessages: AgentMessage[]): void {\n\tif (process.env.PI_TOKEN_AUDIT !== \"1\") return;\n\tconst summary = buildTokenAuditSummary(context, sourceMessages);\n\tprocess.stderr.write(`${JSON.stringify({ type: \"token_audit\", summary })}\\n`);\n}\n\nexport function buildProviderPayloadAuditSummary(payload: unknown): ProviderPayloadAuditSummary {\n\tconst record = asRecord(payload);\n\tconst messages = extractProviderMessages(record);\n\tconst tools = extractProviderTools(record);\n\tconst messageSummaries = messages.map((message, index) => summarizeProviderMessage(message, index));\n\tconst toolSummaries = tools.map((tool) => summarizeProviderTool(tool));\n\tconst messageCharsByRole: Record<string, number> = {};\n\tlet imageCount = 0;\n\n\tfor (const summary of messageSummaries) {\n\t\tmessageCharsByRole[summary.role] = (messageCharsByRole[summary.role] ?? 0) + summary.chars;\n\t}\n\tfor (const message of messages) {\n\t\timageCount += countImagesInValue(message);\n\t}\n\n\treturn {\n\t\tpayloadChars: safeJsonLength(payload),\n\t\tmessageCharsByRole,\n\t\ttoolSchemaChars: toolSummaries.reduce((sum, tool) => sum + tool.chars, 0),\n\t\timageCount,\n\t\tmessageCount: messages.length,\n\t\ttoolCount: tools.length,\n\t\tlargestMessages: [...messageSummaries].sort((a, b) => b.chars - a.chars).slice(0, LARGEST_MESSAGE_LIMIT),\n\t\tlargestTools: [...toolSummaries].sort((a, b) => b.chars - a.chars).slice(0, LARGEST_TOOL_LIMIT),\n\t};\n}\n\nexport function maybeLogProviderPayloadAudit(payload: unknown, phase: string): void {\n\tif (process.env.PI_TOKEN_AUDIT !== \"1\") return;\n\tconst summary = buildProviderPayloadAuditSummary(payload);\n\tprocess.stderr.write(`${JSON.stringify({ type: \"token_audit_provider_payload\", phase, summary })}\\n`);\n}\n\nfunction summarizeMessage(message: Message, index: number): TokenAuditMessageSummary {\n\treturn {\n\t\tindex,\n\t\trole: message.role,\n\t\ttype: messageType(message),\n\t\tchars: safeJsonLength(message),\n\t};\n}\n\nfunction messageType(message: Message): string {\n\tif (message.role === \"assistant\") {\n\t\tconst types = new Set(message.content.map((content) => content.type));\n\t\treturn types.size > 0 ? Array.from(types).join(\"+\") : \"assistant\";\n\t}\n\tif (message.role === \"toolResult\") return message.toolName || \"toolResult\";\n\tif (typeof message.content === \"string\") return \"text\";\n\tconst types = new Set(message.content.map((content) => content.type));\n\treturn types.size > 0 ? Array.from(types).join(\"+\") : \"user\";\n}\n\nfunction summarizeTools(tools: Tool[]): TokenAuditToolSummary[] {\n\treturn tools.map((tool) => ({\n\t\tname: tool.name,\n\t\tchars: safeJsonLength(tool),\n\t}));\n}\n\nfunction summarizeCustomMessages(messages: AgentMessage[]): TokenAuditCustomMessageSummary[] {\n\treturn messages.flatMap((message, index) => {\n\t\tif (!isCustomOrInjectedMessage(message)) return [];\n\t\tconst customType = (message as { customType?: unknown }).customType;\n\t\treturn [{\n\t\t\tindex,\n\t\t\trole: String((message as { role?: unknown }).role ?? \"unknown\"),\n\t\t\tcustomType: typeof customType === \"string\" ? customType : undefined,\n\t\t\tchars: safeJsonLength(message),\n\t\t}];\n\t});\n}\n\nfunction summarizeProviderMessage(message: unknown, index: number): TokenAuditMessageSummary {\n\tconst record = asRecord(message);\n\tconst role = typeof record?.role === \"string\" ? record.role : \"unknown\";\n\tconst type = typeof record?.type === \"string\" ? record.type : role;\n\treturn { index, role, type, chars: safeJsonLength(message) };\n}\n\nfunction summarizeProviderTool(tool: unknown): TokenAuditToolSummary {\n\tconst record = asRecord(tool);\n\tconst name =\n\t\ttypeof record?.name === \"string\"\n\t\t\t? record.name\n\t\t\t: typeof asRecord(record?.function)?.name === \"string\"\n\t\t\t\t? String(asRecord(record?.function)?.name)\n\t\t\t\t: typeof asRecord(record?.toolSpec)?.name === \"string\"\n\t\t\t\t\t? String(asRecord(record?.toolSpec)?.name)\n\t\t\t\t\t: \"unknown\";\n\treturn { name, chars: safeJsonLength(tool) };\n}\n\nfunction extractProviderMessages(record: Record<string, unknown> | null): unknown[] {\n\tconst candidates = [\n\t\tgetArrayField(record, \"messages\"),\n\t\tgetArrayField(record, \"input\"),\n\t\tgetArrayField(record, \"contents\"),\n\t].filter((value): value is unknown[] => value !== null);\n\tif (candidates.length > 0) return candidates[0];\n\tconst input = record?.input;\n\treturn typeof input === \"string\" ? [{ role: \"input\", content: input }] : [];\n}\n\nfunction extractProviderTools(record: Record<string, unknown> | null): unknown[] {\n\tconst direct = getArrayField(record, \"tools\")\n\t\t?? getNestedArrayField(record, [\"config\", \"tools\"])\n\t\t?? getNestedArrayField(record, [\"toolConfig\", \"tools\"])\n\t\t?? getNestedArrayField(record, [\"tool_config\", \"tools\"])\n\t\t?? [];\n\treturn direct.flatMap(expandProviderToolEntry);\n}\n\nfunction expandProviderToolEntry(tool: unknown): unknown[] {\n\tconst record = asRecord(tool);\n\tconst functionDeclarations =\n\t\tgetArrayField(record, \"functionDeclarations\")\n\t\t?? getArrayField(record, \"function_declarations\");\n\tif (functionDeclarations) return functionDeclarations;\n\treturn [tool];\n}\n\nfunction countImagesInMessage(message: Message): number {\n\tif (!(\"content\" in message) || !Array.isArray(message.content)) return 0;\n\treturn message.content.filter((content): content is ImageContent => content.type === \"image\").length;\n}\n\nfunction countImagesInValue(value: unknown): number {\n\tif (!value || typeof value !== \"object\") return 0;\n\tif (Array.isArray(value)) {\n\t\treturn value.reduce((sum, item) => sum + countImagesInValue(item), 0);\n\t}\n\tconst record = value as Record<string, unknown>;\n\tlet count = record.type === \"image\" || record.type === \"input_image\" ? 1 : 0;\n\tfor (const nested of Object.values(record)) {\n\t\tcount += countImagesInValue(nested);\n\t}\n\treturn count;\n}\n\nfunction countContentChars(content: string | (TextContent | ImageContent)[]): number {\n\tif (typeof content === \"string\") return content.length;\n\treturn content.reduce((sum, block) => {\n\t\tif (block.type === \"text\") return sum + block.text.length;\n\t\tif (block.type === \"image\") return sum + block.data.length;\n\t\treturn sum;\n\t}, 0);\n}\n\nfunction isCustomOrInjectedMessage(message: AgentMessage): boolean {\n\tconst role = (message as { role?: unknown }).role;\n\treturn role === \"custom\" || role === \"bashExecution\" || role === \"branchSummary\" || role === \"compactionSummary\";\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n\treturn value && typeof value === \"object\" && !Array.isArray(value) ? value as Record<string, unknown> : null;\n}\n\nfunction getArrayField(record: Record<string, unknown> | null, key: string): unknown[] | null {\n\tconst value = record?.[key];\n\treturn Array.isArray(value) ? value : null;\n}\n\nfunction getNestedArrayField(record: Record<string, unknown> | null, path: string[]): unknown[] | null {\n\tlet current: unknown = record;\n\tfor (const key of path) {\n\t\tcurrent = asRecord(current)?.[key];\n\t}\n\treturn Array.isArray(current) ? current : null;\n}\n\nfunction safeJsonLength(value: unknown): number {\n\ttry {\n\t\treturn JSON.stringify(value)?.length ?? 0;\n\t} catch {\n\t\treturn 0;\n\t}\n}\n"]}
@@ -50,6 +50,28 @@ export interface BeforeToolCallContext {
50
50
  /** Current agent context at the time the tool call is prepared. */
51
51
  context: AgentContext;
52
52
  }
53
+ /** A single tool call that failed during preparation (validation / not found / blocked). */
54
+ export interface PreparationErrorFailure {
55
+ toolName: string;
56
+ arguments: Record<string, unknown>;
57
+ errorText: string;
58
+ }
59
+ /** Context passed to `onPreparationErrorsTurn`. */
60
+ export interface PreparationErrorsTurnContext {
61
+ /** The assistant message that requested the tool calls. */
62
+ assistantMessage: AssistantMessage;
63
+ /** Tool calls that failed during preparation this turn. */
64
+ failures: PreparationErrorFailure[];
65
+ /** Count of tool results that failed during preparation. */
66
+ preparationErrorCount: number;
67
+ }
68
+ /** Result returned from `onPreparationErrorsTurn`. */
69
+ export interface PreparationErrorsTurnResult {
70
+ /** Messages injected before the next LLM call (same as getSteeringMessages). */
71
+ steeringMessages?: AgentMessage[];
72
+ /** When true, the schema-overload counter resets instead of incrementing this turn. */
73
+ resetValidationFailureCap?: boolean;
74
+ }
53
75
  /** Context passed to `afterToolCall`. */
54
76
  export interface AfterToolCallContext {
55
77
  /** The assistant message that requested the tool call. */
@@ -175,6 +197,16 @@ export interface AgentLoopConfig extends SimpleStreamOptions {
175
197
  * The hook receives the agent abort signal and is responsible for honoring it.
176
198
  */
177
199
  afterToolCall?: (context: AfterToolCallContext, signal?: AbortSignal) => Promise<AfterToolCallResult | undefined>;
200
+ /**
201
+ * Optional formatter for tool argument validation errors (AJV / schema failures).
202
+ * Called in prepareToolCall before the error tool result is emitted.
203
+ */
204
+ formatValidationError?: (tool: AgentTool<any>, toolCall: AgentToolCall, baseMessage: string) => string | Promise<string>;
205
+ /**
206
+ * Called after a turn when one or more tool calls failed during preparation.
207
+ * Use to inject corrective steering and reset the schema-overload counter.
208
+ */
209
+ onPreparationErrorsTurn?: (context: PreparationErrorsTurnContext, signal?: AbortSignal) => Promise<PreparationErrorsTurnResult | void>;
178
210
  /**
179
211
  * When true, tool calls in assistant messages are rendered in the TUI
180
212
  * but NOT executed locally. Used for providers that handle tool execution
@@ -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 * Optional final tool filter applied immediately before each provider call.\n\t *\n\t * Use this for runtime policy that depends on the fully active tool set.\n\t * The returned list is what token audit and the provider request both see.\n\t * Receives the post-transform AgentMessage context so policy can scope\n\t * request-local custom messages without inspecting provider payload text.\n\t */\n\tfilterTools?: (\n\t\ttools: AgentTool<any>[],\n\t\tsignal?: AbortSignal,\n\t\tmessages?: AgentMessage[],\n\t) => AgentTool<any>[] | Promise<AgentTool<any>[]>;\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\nexport type AgentAbortOrigin = \"session-transition\" | \"user\" | \"timeout\" | \"unknown\";\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\"; sessionId?: string; turnId?: string }\n\t| { type: \"agent_end\"; messages: AgentMessage[]; sessionId?: string; turnId?: string; abortOrigin?: AgentAbortOrigin }\n\t// Turn lifecycle - a turn is one assistant response + any tool calls/results\n\t| { type: \"turn_start\"; sessionId?: string; turnId?: string }\n\t| { type: \"turn_end\"; message: AgentMessage; toolResults: ToolResultMessage[]; sessionId?: string; turnId?: string }\n\t// Message lifecycle - emitted for user, assistant, and toolResult messages\n\t| { type: \"message_start\"; message: AgentMessage; sessionId?: string; turnId?: string }\n\t// Only emitted for assistant messages during streaming\n\t| { type: \"message_update\"; message: AgentMessage; assistantMessageEvent: AssistantMessageEvent; sessionId?: string; turnId?: string }\n\t| { type: \"message_end\"; message: AgentMessage; sessionId?: string; turnId?: string }\n\t// Tool execution lifecycle\n\t| { type: \"tool_execution_start\"; toolCallId: string; toolName: string; args: any; sessionId?: string; turnId?: string }\n\t| { type: \"tool_execution_update\"; toolCallId: string; toolName: string; args: any; partialResult: any; sessionId?: string; turnId?: string }\n\t| { type: \"tool_execution_end\"; toolCallId: string; toolName: string; result: any; isError: boolean; sessionId?: string; turnId?: string };\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/** A single tool call that failed during preparation (validation / not found / blocked). */\nexport interface PreparationErrorFailure {\n\ttoolName: string;\n\targuments: Record<string, unknown>;\n\terrorText: string;\n}\n\n/** Context passed to `onPreparationErrorsTurn`. */\nexport interface PreparationErrorsTurnContext {\n\t/** The assistant message that requested the tool calls. */\n\tassistantMessage: AssistantMessage;\n\t/** Tool calls that failed during preparation this turn. */\n\tfailures: PreparationErrorFailure[];\n\t/** Count of tool results that failed during preparation. */\n\tpreparationErrorCount: number;\n}\n\n/** Result returned from `onPreparationErrorsTurn`. */\nexport interface PreparationErrorsTurnResult {\n\t/** Messages injected before the next LLM call (same as getSteeringMessages). */\n\tsteeringMessages?: AgentMessage[];\n\t/** When true, the schema-overload counter resets instead of incrementing this turn. */\n\tresetValidationFailureCap?: boolean;\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 * Optional final tool filter applied immediately before each provider call.\n\t *\n\t * Use this for runtime policy that depends on the fully active tool set.\n\t * The returned list is what token audit and the provider request both see.\n\t * Receives the post-transform AgentMessage context so policy can scope\n\t * request-local custom messages without inspecting provider payload text.\n\t */\n\tfilterTools?: (\n\t\ttools: AgentTool<any>[],\n\t\tsignal?: AbortSignal,\n\t\tmessages?: AgentMessage[],\n\t) => AgentTool<any>[] | Promise<AgentTool<any>[]>;\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 * Optional formatter for tool argument validation errors (AJV / schema failures).\n\t * Called in prepareToolCall before the error tool result is emitted.\n\t */\n\tformatValidationError?: (\n\t\ttool: AgentTool<any>,\n\t\ttoolCall: AgentToolCall,\n\t\tbaseMessage: string,\n\t) => string | Promise<string>;\n\n\t/**\n\t * Called after a turn when one or more tool calls failed during preparation.\n\t * Use to inject corrective steering and reset the schema-overload counter.\n\t */\n\tonPreparationErrorsTurn?: (\n\t\tcontext: PreparationErrorsTurnContext,\n\t\tsignal?: AbortSignal,\n\t) => Promise<PreparationErrorsTurnResult | void>;\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\nexport type AgentAbortOrigin = \"session-transition\" | \"user\" | \"timeout\" | \"unknown\";\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\"; sessionId?: string; turnId?: string }\n\t| { type: \"agent_end\"; messages: AgentMessage[]; sessionId?: string; turnId?: string; abortOrigin?: AgentAbortOrigin }\n\t// Turn lifecycle - a turn is one assistant response + any tool calls/results\n\t| { type: \"turn_start\"; sessionId?: string; turnId?: string }\n\t| { type: \"turn_end\"; message: AgentMessage; toolResults: ToolResultMessage[]; sessionId?: string; turnId?: string }\n\t// Message lifecycle - emitted for user, assistant, and toolResult messages\n\t| { type: \"message_start\"; message: AgentMessage; sessionId?: string; turnId?: string }\n\t// Only emitted for assistant messages during streaming\n\t| { type: \"message_update\"; message: AgentMessage; assistantMessageEvent: AssistantMessageEvent; sessionId?: string; turnId?: string }\n\t| { type: \"message_end\"; message: AgentMessage; sessionId?: string; turnId?: string }\n\t// Tool execution lifecycle\n\t| { type: \"tool_execution_start\"; toolCallId: string; toolName: string; args: any; sessionId?: string; turnId?: string }\n\t| { type: \"tool_execution_update\"; toolCallId: string; toolName: string; args: any; partialResult: any; sessionId?: string; turnId?: string }\n\t| { type: \"tool_execution_end\"; toolCallId: string; toolName: string; result: any; isError: boolean; sessionId?: string; turnId?: string };\n"]}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gsd/pi-agent-core",
3
- "version": "1.0.0",
3
+ "version": "1.0.2-dev.0ee79e5",
4
4
  "description": "General-purpose agent core (vendored from pi-mono)",
5
5
  "type": "module",
6
6
  "gsd": {
@@ -730,4 +730,166 @@ describe("agent-loop — schema overload retry cap (#2783)", () => {
730
730
  );
731
731
  }
732
732
  });
733
+
734
+ it("formatValidationError appends hint to validation error tool result", async () => {
735
+ const tool = makeToolWithSchema();
736
+ const badCall = makeToolCallMessage({ path: "/tmp/test" });
737
+ const finalStop = makeAssistantMessage({
738
+ content: [{ type: "text", text: "Done." }],
739
+ stopReason: "stop",
740
+ });
741
+ const mockStream = createMockStreamFn([badCall, finalStop]);
742
+
743
+ const context: AgentContext = {
744
+ systemPrompt: "test",
745
+ messages: [{ role: "user", content: [{ type: "text", text: "go" }], timestamp: Date.now() }],
746
+ tools: [tool],
747
+ };
748
+ const config: AgentLoopConfig = {
749
+ model: TEST_MODEL,
750
+ convertToLlm: (msgs) => msgs.filter((m): m is any => m.role !== "custom"),
751
+ toolExecution: "sequential",
752
+ formatValidationError: (_tool, _tc, base) => `${base}\n\nHINT: include content field`,
753
+ };
754
+
755
+ const stream = agentLoop(
756
+ [{ role: "user", content: [{ type: "text", text: "go" }], timestamp: Date.now() }],
757
+ context,
758
+ config,
759
+ undefined,
760
+ mockStream as any,
761
+ );
762
+ const events = await collectEvents(stream);
763
+ const toolError = events.find(
764
+ (e) => e.type === "tool_execution_end" && e.isError === true,
765
+ );
766
+ assert.ok(toolError && toolError.type === "tool_execution_end");
767
+ const text = toolError.result.content.find((c) => c.type === "text");
768
+ assert.ok(text && text.type === "text" && text.text.includes("HINT: include content field"));
769
+ });
770
+
771
+ it("onPreparationErrorsTurn with resetValidationFailureCap prevents schema overload stop", async () => {
772
+ const tool = makeToolWithSchema();
773
+ const badCall = makeToolCallMessage({ path: "/tmp/test" });
774
+ const goodCall = makeToolCallMessage({ path: "/tmp/test", content: "hello" });
775
+ const finalStop = makeAssistantMessage({
776
+ content: [{ type: "text", text: "Done." }],
777
+ stopReason: "stop",
778
+ });
779
+
780
+ // Exceed cap without reset: 3 bad + would stop. With reset after each bad: survives.
781
+ const responses = [badCall, badCall, badCall, goodCall, finalStop];
782
+ const mockStream = createMockStreamFn(responses);
783
+ let recoveryCalls = 0;
784
+
785
+ const context: AgentContext = {
786
+ systemPrompt: "test",
787
+ messages: [{ role: "user", content: [{ type: "text", text: "go" }], timestamp: Date.now() }],
788
+ tools: [tool],
789
+ };
790
+ const config: AgentLoopConfig = {
791
+ model: TEST_MODEL,
792
+ convertToLlm: (msgs) => msgs.filter((m): m is any => m.role !== "custom"),
793
+ toolExecution: "sequential",
794
+ onPreparationErrorsTurn: async () => {
795
+ recoveryCalls++;
796
+ return {
797
+ resetValidationFailureCap: true,
798
+ steeringMessages: [
799
+ {
800
+ role: "user",
801
+ content: [{ type: "text", text: "Retry with valid args." }],
802
+ timestamp: Date.now(),
803
+ },
804
+ ],
805
+ };
806
+ },
807
+ };
808
+
809
+ const stream = agentLoop(
810
+ [{ role: "user", content: [{ type: "text", text: "go" }], timestamp: Date.now() }],
811
+ context,
812
+ config,
813
+ undefined,
814
+ mockStream as any,
815
+ );
816
+ const events = await collectEvents(stream);
817
+
818
+ const agentEnd = events.find((e) => e.type === "agent_end");
819
+ assert.ok(agentEnd, "agent must complete without schema overload stop");
820
+ assert.ok(recoveryCalls >= 3, "recovery hook should run for each bad turn");
821
+ const stopMessages = (agentEnd as any).messages.filter(
822
+ (m: AgentMessage) =>
823
+ m.role === "assistant" &&
824
+ (m as AssistantMessage).errorMessage?.includes("Schema overload"),
825
+ );
826
+ assert.equal(stopMessages.length, 0, "must not emit schema overload stop");
827
+ });
828
+
829
+ it("onPreparationErrorsTurn failures exclude execution errors in mixed turns", async () => {
830
+ const schemaTool = makeToolWithSchema();
831
+ const execFailTool: AgentTool<any> = {
832
+ ...makeToolWithSchema(),
833
+ name: "exec_fail_tool",
834
+ label: "Exec Fail",
835
+ execute: async () => {
836
+ throw new Error("EXECUTION_PHASE_FAILURE");
837
+ },
838
+ };
839
+
840
+ const prepFailCall = makeToolCallMessage({ path: "/tmp/test" });
841
+ (prepFailCall.content[0] as any).name = "write_file";
842
+ const execFailCall = makeToolCallMessage({ path: "/tmp/ok", content: "hello" });
843
+ (execFailCall.content[0] as any).id = "tc_exec_fail";
844
+ (execFailCall.content[0] as any).name = "exec_fail_tool";
845
+
846
+ const mixedTurn = makeAssistantMessage({
847
+ content: [
848
+ prepFailCall.content[0],
849
+ execFailCall.content[0],
850
+ ],
851
+ stopReason: "toolUse",
852
+ });
853
+ const finalStop = makeAssistantMessage({
854
+ content: [{ type: "text", text: "Done." }],
855
+ stopReason: "stop",
856
+ });
857
+
858
+ const mockStream = createMockStreamFn([mixedTurn, finalStop]);
859
+ let capturedFailures: Array<{ toolName: string; errorText: string }> = [];
860
+
861
+ const context: AgentContext = {
862
+ systemPrompt: "test",
863
+ messages: [{ role: "user", content: [{ type: "text", text: "go" }], timestamp: Date.now() }],
864
+ tools: [schemaTool, execFailTool],
865
+ };
866
+ const config: AgentLoopConfig = {
867
+ model: TEST_MODEL,
868
+ convertToLlm: (msgs) => msgs.filter((m): m is any => m.role !== "custom"),
869
+ toolExecution: "sequential",
870
+ onPreparationErrorsTurn: async (ctx) => {
871
+ capturedFailures = ctx.failures.map((f) => ({
872
+ toolName: f.toolName,
873
+ errorText: f.errorText,
874
+ }));
875
+ return undefined;
876
+ },
877
+ };
878
+
879
+ const stream = agentLoop(
880
+ [{ role: "user", content: [{ type: "text", text: "go" }], timestamp: Date.now() }],
881
+ context,
882
+ config,
883
+ undefined,
884
+ mockStream as any,
885
+ );
886
+ await collectEvents(stream);
887
+
888
+ assert.equal(capturedFailures.length, 1, "only preparation-phase errors belong in failures");
889
+ assert.equal(capturedFailures[0]?.toolName, "write_file");
890
+ assert.ok(
891
+ !capturedFailures.some((f) => f.errorText.includes("EXECUTION_PHASE_FAILURE")),
892
+ "execution errors must not appear in preparation failures context",
893
+ );
894
+ });
733
895
  });
@@ -19,6 +19,8 @@ import type {
19
19
  AgentTool,
20
20
  AgentToolCall,
21
21
  AgentToolResult,
22
+ PreparationErrorFailure,
23
+ PreparationErrorsTurnContext,
22
24
  StreamFn,
23
25
  } from "./types.js";
24
26
  import { maybeLogTokenAudit } from "./token-audit.js";
@@ -333,7 +335,11 @@ async function runLoop(
333
335
  toolResults.length > 0 &&
334
336
  toolExecution.preparationErrorCount === toolResults.length;
335
337
  if (allToolsFailedPreparation) {
336
- consecutiveAllToolErrorTurns++;
338
+ if (toolExecution.resetValidationFailureCap) {
339
+ consecutiveAllToolErrorTurns = 0;
340
+ } else {
341
+ consecutiveAllToolErrorTurns++;
342
+ }
337
343
  } else if (!hasPreparationErrors) {
338
344
  // Reset only when there are zero preparation errors this turn.
339
345
  // Mixed turns (some prep errors, some successes) don't reset,
@@ -504,6 +510,8 @@ interface ToolExecutionResult {
504
510
  steeringMessages?: AgentMessage[];
505
511
  /** Number of tool results that failed during preparation (validation/schema). */
506
512
  preparationErrorCount: number;
513
+ /** When true, recovery hook requested resetting the schema-overload counter. */
514
+ resetValidationFailureCap?: boolean;
507
515
  }
508
516
 
509
517
  /**
@@ -534,6 +542,7 @@ async function executeToolCallsSequential(
534
542
  const results: ToolResultMessage[] = [];
535
543
  let steeringMessages: AgentMessage[] | undefined;
536
544
  let preparationErrorCount = 0;
545
+ const preparationErrorToolCallIds = new Set<string>();
537
546
 
538
547
  for (let index = 0; index < toolCalls.length; index++) {
539
548
  const toolCall = toolCalls[index];
@@ -548,6 +557,7 @@ async function executeToolCallsSequential(
548
557
  if (preparation.kind === "immediate") {
549
558
  if (preparation.isError) {
550
559
  preparationErrorCount++;
560
+ preparationErrorToolCallIds.add(toolCall.id);
551
561
  }
552
562
  results.push(emitToolCallOutcome(toolCall, preparation.result, preparation.isError, stream));
553
563
  } else {
@@ -578,7 +588,15 @@ async function executeToolCallsSequential(
578
588
  }
579
589
  }
580
590
 
581
- return { toolResults: results, steeringMessages, preparationErrorCount };
591
+ return finalizeToolExecutionResult(
592
+ assistantMessage,
593
+ results,
594
+ steeringMessages,
595
+ preparationErrorCount,
596
+ preparationErrorToolCallIds,
597
+ config,
598
+ signal,
599
+ );
582
600
  }
583
601
 
584
602
  async function executeToolCallsParallel(
@@ -593,6 +611,7 @@ async function executeToolCallsParallel(
593
611
  const runnableCalls: PreparedToolCall[] = [];
594
612
  let steeringMessages: AgentMessage[] | undefined;
595
613
  let preparationErrorCount = 0;
614
+ const preparationErrorToolCallIds = new Set<string>();
596
615
 
597
616
  for (let index = 0; index < toolCalls.length; index++) {
598
617
  const toolCall = toolCalls[index];
@@ -607,6 +626,7 @@ async function executeToolCallsParallel(
607
626
  if (preparation.kind === "immediate") {
608
627
  if (preparation.isError) {
609
628
  preparationErrorCount++;
629
+ preparationErrorToolCallIds.add(toolCall.id);
610
630
  }
611
631
  results.push(emitToolCallOutcome(toolCall, preparation.result, preparation.isError, stream));
612
632
  } else {
@@ -624,7 +644,15 @@ async function executeToolCallsParallel(
624
644
  for (const skipped of remainingCalls) {
625
645
  results.push(skipToolCall(skipped, stream));
626
646
  }
627
- return { toolResults: results, steeringMessages, preparationErrorCount };
647
+ return finalizeToolExecutionResult(
648
+ assistantMessage,
649
+ results,
650
+ steeringMessages,
651
+ preparationErrorCount,
652
+ preparationErrorToolCallIds,
653
+ config,
654
+ signal,
655
+ );
628
656
  }
629
657
  }
630
658
  }
@@ -656,7 +684,80 @@ async function executeToolCallsParallel(
656
684
  }
657
685
  }
658
686
 
659
- return { toolResults: results, steeringMessages, preparationErrorCount };
687
+ return finalizeToolExecutionResult(
688
+ assistantMessage,
689
+ results,
690
+ steeringMessages,
691
+ preparationErrorCount,
692
+ preparationErrorToolCallIds,
693
+ config,
694
+ signal,
695
+ );
696
+ }
697
+
698
+ function buildPreparationErrorsContext(
699
+ assistantMessage: AssistantMessage,
700
+ toolResults: ToolResultMessage[],
701
+ preparationErrorToolCallIds: ReadonlySet<string>,
702
+ preparationErrorCount: number,
703
+ ): PreparationErrorsTurnContext {
704
+ const toolCallsById = new Map(
705
+ (assistantMessage.content.filter((c) => c.type === "toolCall") as AgentToolCall[]).map((tc) => [
706
+ tc.id,
707
+ tc,
708
+ ]),
709
+ );
710
+ const failures: PreparationErrorFailure[] = [];
711
+ for (const result of toolResults) {
712
+ if (!result.isError) continue;
713
+ if (!preparationErrorToolCallIds.has(result.toolCallId)) continue;
714
+ const toolCall = toolCallsById.get(result.toolCallId);
715
+ if (!toolCall) continue;
716
+ const textBlock = result.content.find((c) => c.type === "text");
717
+ const errorText = textBlock && textBlock.type === "text" ? textBlock.text : "";
718
+ failures.push({
719
+ toolName: toolCall.name,
720
+ arguments: toolCall.arguments as Record<string, unknown>,
721
+ errorText,
722
+ });
723
+ }
724
+ return { assistantMessage, failures, preparationErrorCount };
725
+ }
726
+
727
+ async function finalizeToolExecutionResult(
728
+ assistantMessage: AssistantMessage,
729
+ toolResults: ToolResultMessage[],
730
+ steeringMessages: AgentMessage[] | undefined,
731
+ preparationErrorCount: number,
732
+ preparationErrorToolCallIds: ReadonlySet<string>,
733
+ config: AgentLoopConfig,
734
+ signal: AbortSignal | undefined,
735
+ ): Promise<ToolExecutionResult> {
736
+ let resetValidationFailureCap: boolean | undefined;
737
+ if (preparationErrorCount > 0 && config.onPreparationErrorsTurn) {
738
+ const recovery = await config.onPreparationErrorsTurn(
739
+ buildPreparationErrorsContext(
740
+ assistantMessage,
741
+ toolResults,
742
+ preparationErrorToolCallIds,
743
+ preparationErrorCount,
744
+ ),
745
+ signal,
746
+ );
747
+ const recoverySteering = recovery?.steeringMessages;
748
+ if (recoverySteering && recoverySteering.length > 0) {
749
+ steeringMessages = recoverySteering;
750
+ }
751
+ if (recovery?.resetValidationFailureCap === true) {
752
+ resetValidationFailureCap = true;
753
+ }
754
+ }
755
+ return {
756
+ toolResults,
757
+ steeringMessages,
758
+ preparationErrorCount,
759
+ resetValidationFailureCap,
760
+ };
660
761
  }
661
762
 
662
763
  type PreparedToolCall = {
@@ -720,9 +821,13 @@ async function prepareToolCall(
720
821
  args: validatedArgs,
721
822
  };
722
823
  } catch (error) {
824
+ let message = error instanceof Error ? error.message : String(error);
825
+ if (config.formatValidationError) {
826
+ message = await config.formatValidationError(tool, toolCall, message);
827
+ }
723
828
  return {
724
829
  kind: "immediate",
725
- result: createErrorToolResult(error instanceof Error ? error.message : String(error)),
830
+ result: createErrorToolResult(message),
726
831
  isError: true,
727
832
  };
728
833
  }