@bastani/atomic 0.9.11-alpha.5 → 0.9.11-alpha.7

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 (1127) hide show
  1. package/CHANGELOG.md +63 -0
  2. package/README.md +12 -5
  3. package/dist/builtin/intercom/package.json +2 -2
  4. package/dist/builtin/mcp/CHANGELOG.md +6 -0
  5. package/dist/builtin/mcp/README.md +3 -3
  6. package/dist/builtin/mcp/cli.js +0 -1
  7. package/dist/builtin/mcp/config.ts +0 -2
  8. package/dist/builtin/mcp/package.json +3 -3
  9. package/dist/builtin/mcp/types.ts +0 -1
  10. package/dist/builtin/subagents/CHANGELOG.md +12 -0
  11. package/dist/builtin/subagents/README.md +1 -1
  12. package/dist/builtin/subagents/agents/code-simplifier.md +47 -102
  13. package/dist/builtin/subagents/agents/codebase-analyzer.md +27 -130
  14. package/dist/builtin/subagents/agents/codebase-locator.md +24 -83
  15. package/dist/builtin/subagents/agents/codebase-online-researcher.md +60 -259
  16. package/dist/builtin/subagents/agents/codebase-pattern-finder.md +29 -207
  17. package/dist/builtin/subagents/agents/codebase-research-analyzer.md +28 -150
  18. package/dist/builtin/subagents/agents/codebase-research-locator.md +21 -118
  19. package/dist/builtin/subagents/agents/debugger.md +27 -65
  20. package/dist/builtin/subagents/agents/worker.md +23 -30
  21. package/dist/builtin/subagents/package.json +4 -4
  22. package/dist/builtin/subagents/prompts/gather-context-and-clarify.md +18 -11
  23. package/dist/builtin/subagents/prompts/parallel-cleanup.md +34 -33
  24. package/dist/builtin/subagents/prompts/parallel-context-build.md +22 -36
  25. package/dist/builtin/subagents/prompts/parallel-handoff-plan.md +20 -52
  26. package/dist/builtin/subagents/prompts/parallel-research.md +17 -41
  27. package/dist/builtin/subagents/prompts/parallel-review.md +23 -28
  28. package/dist/builtin/subagents/prompts/review-loop.md +18 -27
  29. package/dist/builtin/subagents/src/extension/prompt-guidance.ts +1 -1
  30. package/dist/builtin/subagents/src/runs/background/async-execution-chain.ts +23 -4
  31. package/dist/builtin/subagents/src/runs/background/async-execution-single.ts +2 -0
  32. package/dist/builtin/subagents/src/runs/background/async-execution-types.ts +10 -0
  33. package/dist/builtin/subagents/src/runs/background/subagent-runner-step.ts +1 -0
  34. package/dist/builtin/subagents/src/runs/foreground/chain-execution-dynamic-step.ts +2 -0
  35. package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-runner.ts +8 -0
  36. package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-step.ts +1 -0
  37. package/dist/builtin/subagents/src/runs/foreground/chain-execution-sequential-step.ts +6 -0
  38. package/dist/builtin/subagents/src/runs/foreground/chain-execution-types.ts +2 -0
  39. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-async.ts +7 -0
  40. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-chain.ts +1 -0
  41. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-resume.ts +3 -0
  42. package/dist/builtin/subagents/src/runs/shared/mcp-direct-tool-allowlist.ts +1 -2
  43. package/dist/builtin/subagents/src/runs/shared/parallel-utils.ts +1 -0
  44. package/dist/builtin/subagents/src/runs/shared/pi-args.ts +5 -3
  45. package/dist/builtin/subagents/src/shared/settings.ts +4 -0
  46. package/dist/builtin/web-access/package.json +2 -2
  47. package/dist/builtin/workflows/CHANGELOG.md +44 -0
  48. package/dist/builtin/workflows/README.md +72 -70
  49. package/dist/builtin/workflows/ambient.d.ts +0 -5
  50. package/dist/builtin/workflows/builtin/adversarial-verification-prompts.ts +7 -4
  51. package/dist/builtin/workflows/builtin/adversarial-verification-runner.ts +1 -1
  52. package/dist/builtin/workflows/builtin/adversarial-verification.ts +2 -1
  53. package/dist/builtin/workflows/builtin/classify-and-act-prompts.ts +5 -2
  54. package/dist/builtin/workflows/builtin/classify-and-act-runner.ts +5 -7
  55. package/dist/builtin/workflows/builtin/classify-and-act.ts +3 -2
  56. package/dist/builtin/workflows/builtin/fan-out-and-synthesize-prompts.ts +6 -3
  57. package/dist/builtin/workflows/builtin/fan-out-and-synthesize-runner.ts +5 -5
  58. package/dist/builtin/workflows/builtin/fan-out-and-synthesize.ts +3 -2
  59. package/dist/builtin/workflows/builtin/generate-and-filter-prompts.ts +7 -4
  60. package/dist/builtin/workflows/builtin/generate-and-filter-runner.ts +6 -3
  61. package/dist/builtin/workflows/builtin/generate-and-filter.ts +3 -2
  62. package/dist/builtin/workflows/builtin/goal-models.ts +14 -18
  63. package/dist/builtin/workflows/builtin/goal-orchestrator-prompts.ts +39 -78
  64. package/dist/builtin/workflows/builtin/goal-prompts.ts +64 -244
  65. package/dist/builtin/workflows/builtin/goal-runner.ts +32 -64
  66. package/dist/builtin/workflows/builtin/goal.ts +2 -1
  67. package/dist/builtin/workflows/builtin/index.d.ts +17 -112
  68. package/dist/builtin/workflows/builtin/index.ts +1 -2
  69. package/dist/builtin/workflows/builtin/loop-until-done-prompts.ts +20 -12
  70. package/dist/builtin/workflows/builtin/loop-until-done-runner.ts +3 -0
  71. package/dist/builtin/workflows/builtin/loop-until-done.ts +3 -2
  72. package/dist/builtin/workflows/builtin/open-claude-design-phases.ts +52 -55
  73. package/dist/builtin/workflows/builtin/open-claude-design-runner.ts +45 -52
  74. package/dist/builtin/workflows/builtin/open-claude-design-setup.ts +41 -46
  75. package/dist/builtin/workflows/builtin/open-claude-design-utils.ts +16 -21
  76. package/dist/builtin/workflows/builtin/open-claude-design.ts +2 -1
  77. package/dist/builtin/workflows/builtin/ralph-core.ts +61 -57
  78. package/dist/builtin/workflows/builtin/ralph-forked-prompts.ts +41 -45
  79. package/dist/builtin/workflows/builtin/ralph-models.ts +33 -43
  80. package/dist/builtin/workflows/builtin/ralph-reviewer-prompt.ts +35 -120
  81. package/dist/builtin/workflows/builtin/ralph-runner.ts +81 -108
  82. package/dist/builtin/workflows/builtin/ralph.ts +2 -1
  83. package/dist/builtin/workflows/builtin/shared-prompts.ts +110 -93
  84. package/dist/builtin/workflows/builtin/steering-context.ts +51 -0
  85. package/dist/builtin/workflows/builtin/tournament-prompts.ts +21 -12
  86. package/dist/builtin/workflows/builtin/tournament-runner.ts +3 -0
  87. package/dist/builtin/workflows/builtin/tournament.ts +3 -2
  88. package/dist/builtin/workflows/package.json +2 -2
  89. package/dist/builtin/workflows/skills/create-spec/SKILL.md +1 -1
  90. package/dist/builtin/workflows/skills/impeccable/SKILL.md +33 -129
  91. package/dist/builtin/workflows/skills/impeccable/agents/impeccable_asset_producer.toml +11 -3
  92. package/dist/builtin/workflows/skills/impeccable/agents/impeccable_documenter.toml +26 -0
  93. package/dist/builtin/workflows/skills/impeccable/agents/impeccable_finish_reviewer.toml +35 -0
  94. package/dist/builtin/workflows/skills/impeccable/reference/android.md +1 -1
  95. package/dist/builtin/workflows/skills/impeccable/reference/animate.md +72 -189
  96. package/dist/builtin/workflows/skills/impeccable/reference/audit.md +10 -9
  97. package/dist/builtin/workflows/skills/impeccable/reference/audit.native.md +2 -2
  98. package/dist/builtin/workflows/skills/impeccable/reference/bolder.md +19 -108
  99. package/dist/builtin/workflows/skills/impeccable/reference/clarify.md +59 -253
  100. package/dist/builtin/workflows/skills/impeccable/reference/colorize.md +51 -222
  101. package/dist/builtin/workflows/skills/impeccable/reference/craft-floor.md +45 -0
  102. package/dist/builtin/workflows/skills/impeccable/reference/craft.md +3 -121
  103. package/dist/builtin/workflows/skills/impeccable/reference/critique.md +28 -20
  104. package/dist/builtin/workflows/skills/impeccable/reference/degraded/asset-producer.md +97 -0
  105. package/dist/builtin/workflows/skills/impeccable/reference/degraded/documenter.md +23 -0
  106. package/dist/builtin/workflows/skills/impeccable/reference/degraded/finish-reviewer.md +32 -0
  107. package/dist/builtin/workflows/skills/impeccable/reference/degraded/manual-edit-applier.md +92 -0
  108. package/dist/builtin/workflows/skills/impeccable/reference/delight.md +47 -279
  109. package/dist/builtin/workflows/skills/impeccable/reference/distill.md +2 -2
  110. package/dist/builtin/workflows/skills/impeccable/reference/doctor.md +53 -0
  111. package/dist/builtin/workflows/skills/impeccable/reference/document.md +60 -73
  112. package/dist/builtin/workflows/skills/impeccable/reference/harden.md +1 -12
  113. package/dist/builtin/workflows/skills/impeccable/reference/hooks.md +23 -12
  114. package/dist/builtin/workflows/skills/impeccable/reference/init.md +64 -163
  115. package/dist/builtin/workflows/skills/impeccable/reference/ios.md +1 -1
  116. package/dist/builtin/workflows/skills/impeccable/reference/layout.md +52 -153
  117. package/dist/builtin/workflows/skills/impeccable/reference/live.md +47 -36
  118. package/dist/builtin/workflows/skills/impeccable/reference/new-work.md +105 -0
  119. package/dist/builtin/workflows/skills/impeccable/reference/{product.md → operate.md} +6 -5
  120. package/dist/builtin/workflows/skills/impeccable/reference/optimize.md +4 -4
  121. package/dist/builtin/workflows/skills/impeccable/reference/overdrive.md +1 -4
  122. package/dist/builtin/workflows/skills/impeccable/reference/polish.md +68 -212
  123. package/dist/builtin/workflows/skills/impeccable/reference/quieter.md +3 -3
  124. package/dist/builtin/workflows/skills/impeccable/reference/routing.md +18 -0
  125. package/dist/builtin/workflows/skills/impeccable/reference/shape.md +38 -144
  126. package/dist/builtin/workflows/skills/impeccable/reference/typeset.md +48 -269
  127. package/dist/builtin/workflows/skills/impeccable/reference/visualize.md +38 -0
  128. package/dist/builtin/workflows/skills/impeccable/scripts/command-metadata.json +1 -1
  129. package/dist/builtin/workflows/skills/impeccable/scripts/concept-seed.mjs +584 -0
  130. package/dist/builtin/workflows/skills/impeccable/scripts/context-signals.mjs +117 -9
  131. package/dist/builtin/workflows/skills/impeccable/scripts/context.mjs +486 -59
  132. package/dist/builtin/workflows/skills/impeccable/scripts/critique-storage.mjs +16 -45
  133. package/dist/builtin/workflows/skills/impeccable/scripts/detector/browser/injected/index.mjs +96 -10
  134. package/dist/builtin/workflows/skills/impeccable/scripts/detector/cli/main.mjs +143 -26
  135. package/dist/builtin/workflows/skills/impeccable/scripts/detector/design-system.mjs +181 -12
  136. package/dist/builtin/workflows/skills/impeccable/scripts/detector/detect-antipatterns-browser.js +3187 -182
  137. package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/browser/detect-url.mjs +102 -7
  138. package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/regex/detect-text.mjs +282 -70
  139. package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +183 -15
  140. package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +22 -7
  141. package/dist/builtin/workflows/skills/impeccable/scripts/detector/findings.mjs +7 -1
  142. package/dist/builtin/workflows/skills/impeccable/scripts/detector/node/file-system.mjs +16 -2
  143. package/dist/builtin/workflows/skills/impeccable/scripts/detector/registry/antipatterns.mjs +155 -42
  144. package/dist/builtin/workflows/skills/impeccable/scripts/detector/rules/checks.mjs +2988 -155
  145. package/dist/builtin/workflows/skills/impeccable/scripts/detector/shared/constants.mjs +11 -0
  146. package/dist/builtin/workflows/skills/impeccable/scripts/doctor.mjs +336 -0
  147. package/dist/builtin/workflows/skills/impeccable/scripts/generate-image.mjs +232 -0
  148. package/dist/builtin/workflows/skills/impeccable/scripts/hook-admin.mjs +92 -30
  149. package/dist/builtin/workflows/skills/impeccable/scripts/hook-lib.mjs +414 -120
  150. package/dist/builtin/workflows/skills/impeccable/scripts/hook.mjs +25 -8
  151. package/dist/builtin/workflows/skills/impeccable/scripts/lib/artifact-schema.mjs +93 -0
  152. package/dist/builtin/workflows/skills/impeccable/scripts/lib/composition-catalog.mjs +165 -0
  153. package/dist/builtin/workflows/skills/impeccable/scripts/lib/concept-catalog.mjs +329 -0
  154. package/dist/builtin/workflows/skills/impeccable/scripts/lib/impeccable-config.mjs +20 -5
  155. package/dist/builtin/workflows/skills/impeccable/scripts/lib/impeccable-paths.mjs +16 -8
  156. package/dist/builtin/workflows/skills/impeccable/scripts/lib/provider.mjs +1 -0
  157. package/dist/builtin/workflows/skills/impeccable/scripts/lib/staleness-deep.mjs +455 -0
  158. package/dist/builtin/workflows/skills/impeccable/scripts/lib/staleness-notice.mjs +169 -0
  159. package/dist/builtin/workflows/skills/impeccable/scripts/lib/staleness.mjs +457 -0
  160. package/dist/builtin/workflows/skills/impeccable/scripts/lib/surface-briefs.mjs +151 -0
  161. package/dist/builtin/workflows/skills/impeccable/scripts/lib/target-slug.mjs +33 -0
  162. package/dist/builtin/workflows/skills/impeccable/scripts/lib/template-extensions.mjs +146 -0
  163. package/dist/builtin/workflows/skills/impeccable/scripts/live/completion.mjs +10 -1
  164. package/dist/builtin/workflows/skills/impeccable/scripts/live/event-validation.mjs +15 -0
  165. package/dist/builtin/workflows/skills/impeccable/scripts/live/generation-preflight.mjs +149 -0
  166. package/dist/builtin/workflows/skills/impeccable/scripts/live/poll-lanes.mjs +14 -0
  167. package/dist/builtin/workflows/skills/impeccable/scripts/live/session-store.mjs +109 -32
  168. package/dist/builtin/workflows/skills/impeccable/scripts/live/source-lock.mjs +105 -0
  169. package/dist/builtin/workflows/skills/impeccable/scripts/live/source-search.mjs +105 -0
  170. package/dist/builtin/workflows/skills/impeccable/scripts/live/sveltekit-adapter.mjs +8 -6
  171. package/dist/builtin/workflows/skills/impeccable/scripts/live/tanstack-adapter.mjs +280 -0
  172. package/dist/builtin/workflows/skills/impeccable/scripts/live-accept.mjs +208 -68
  173. package/dist/builtin/workflows/skills/impeccable/scripts/live-browser.js +565 -115
  174. package/dist/builtin/workflows/skills/impeccable/scripts/live-commit-manual-edits.mjs +3 -0
  175. package/dist/builtin/workflows/skills/impeccable/scripts/live-inject.mjs +198 -14
  176. package/dist/builtin/workflows/skills/impeccable/scripts/live-insert.mjs +24 -6
  177. package/dist/builtin/workflows/skills/impeccable/scripts/live-manual-edit-evidence.mjs +6 -1
  178. package/dist/builtin/workflows/skills/impeccable/scripts/live-poll.mjs +44 -14
  179. package/dist/builtin/workflows/skills/impeccable/scripts/live-server.mjs +398 -33
  180. package/dist/builtin/workflows/skills/impeccable/scripts/live-status.mjs +9 -5
  181. package/dist/builtin/workflows/skills/impeccable/scripts/live-wrap.mjs +81 -67
  182. package/dist/builtin/workflows/skills/impeccable/scripts/live.mjs +7 -2
  183. package/dist/builtin/workflows/skills/impeccable/scripts/palette.mjs +76 -81
  184. package/dist/builtin/workflows/skills/impeccable/scripts/pin.mjs +4 -4
  185. package/dist/builtin/workflows/skills/impeccable/scripts/serve-question.mjs +890 -0
  186. package/dist/builtin/workflows/skills/impeccable/scripts/surface-brief.mjs +74 -0
  187. package/dist/builtin/workflows/skills/prompt-engineer/SKILL.md +57 -252
  188. package/dist/builtin/workflows/skills/prompt-engineer/references/advanced_patterns.md +70 -226
  189. package/dist/builtin/workflows/skills/prompt-engineer/references/core_prompting.md +64 -103
  190. package/dist/builtin/workflows/skills/prompt-engineer/references/quality_improvement.md +81 -155
  191. package/dist/builtin/workflows/src/authoring.d.ts +5 -1
  192. package/dist/builtin/workflows/src/durable/backend.ts +68 -9
  193. package/dist/builtin/workflows/src/durable/boundary-lifecycle.ts +148 -0
  194. package/dist/builtin/workflows/src/durable/boundary-topology.ts +420 -0
  195. package/dist/builtin/workflows/src/durable/child-invocation.ts +14 -0
  196. package/dist/builtin/workflows/src/durable/child-primitive.ts +74 -44
  197. package/dist/builtin/workflows/src/durable/completed-catalog-stage-groups.ts +250 -0
  198. package/dist/builtin/workflows/src/durable/completed-catalog.ts +205 -131
  199. package/dist/builtin/workflows/src/durable/completed-inspection.ts +8 -2
  200. package/dist/builtin/workflows/src/durable/completed-subtree.ts +31 -0
  201. package/dist/builtin/workflows/src/durable/dbos-backend.ts +28 -24
  202. package/dist/builtin/workflows/src/durable/dbos-envelope.ts +130 -3
  203. package/dist/builtin/workflows/src/durable/dbos-metadata.ts +18 -0
  204. package/dist/builtin/workflows/src/durable/scoped-backend.ts +64 -17
  205. package/dist/builtin/workflows/src/durable/stage-primitive.ts +60 -60
  206. package/dist/builtin/workflows/src/durable/stage-topology-validation.ts +234 -0
  207. package/dist/builtin/workflows/src/durable/stage-topology.ts +53 -0
  208. package/dist/builtin/workflows/src/durable/tool-failure-checkpoint.ts +49 -0
  209. package/dist/builtin/workflows/src/durable/tool-outcome.ts +120 -0
  210. package/dist/builtin/workflows/src/durable/tool-primitive.ts +367 -58
  211. package/dist/builtin/workflows/src/durable/types.ts +97 -0
  212. package/dist/builtin/workflows/src/durable/ui-primitive.ts +46 -0
  213. package/dist/builtin/workflows/src/durable/workflow-child-result.ts +58 -0
  214. package/dist/builtin/workflows/src/engine/options.ts +1 -0
  215. package/dist/builtin/workflows/src/engine/primitives/workflow.ts +19 -10
  216. package/dist/builtin/workflows/src/engine/run-durable-finalize.ts +11 -1
  217. package/dist/builtin/workflows/src/engine/run-durable-topology.ts +190 -18
  218. package/dist/builtin/workflows/src/engine/run-terminal-event.ts +37 -0
  219. package/dist/builtin/workflows/src/engine/run-terminal-failure.ts +50 -0
  220. package/dist/builtin/workflows/src/engine/run-tool-execution-tracker.ts +152 -0
  221. package/dist/builtin/workflows/src/engine/run-tool-node-lifecycle.ts +87 -0
  222. package/dist/builtin/workflows/src/engine/run.ts +111 -110
  223. package/dist/builtin/workflows/src/engine/runtime.ts +15 -2
  224. package/dist/builtin/workflows/src/extension/extension-factory.ts +1 -0
  225. package/dist/builtin/workflows/src/extension/extension-runtime-state.ts +11 -0
  226. package/dist/builtin/workflows/src/extension/index.bundle.mjs +6710 -4810
  227. package/dist/builtin/workflows/src/extension/lifecycle-notifications.ts +16 -5
  228. package/dist/builtin/workflows/src/extension/render-result.ts +16 -2
  229. package/dist/builtin/workflows/src/extension/runtime-durable-resume.ts +3 -0
  230. package/dist/builtin/workflows/src/extension/runtime.ts +4 -0
  231. package/dist/builtin/workflows/src/extension/wiring.ts +3 -1
  232. package/dist/builtin/workflows/src/extension/workflow-command-surfaces.ts +1 -0
  233. package/dist/builtin/workflows/src/extension/workflow-durable-resume-command.ts +9 -3
  234. package/dist/builtin/workflows/src/extension/workflow-module-loader.ts +18 -3
  235. package/dist/builtin/workflows/src/extension/workflow-prompts.ts +22 -11
  236. package/dist/builtin/workflows/src/extension/workflow-status-summary.ts +43 -0
  237. package/dist/builtin/workflows/src/extension/workflow-targets.ts +34 -30
  238. package/dist/builtin/workflows/src/extension/workflow-tool-content.ts +12 -5
  239. package/dist/builtin/workflows/src/extension/workflow-tool-send.ts +162 -63
  240. package/dist/builtin/workflows/src/runs/background/run-inspect.ts +7 -1
  241. package/dist/builtin/workflows/src/runs/background/status.ts +18 -8
  242. package/dist/builtin/workflows/src/runs/background/workflow-lifecycle-aggregate.ts +3 -11
  243. package/dist/builtin/workflows/src/runs/foreground/executor-child-boundary.ts +24 -21
  244. package/dist/builtin/workflows/src/runs/foreground/executor-hil.ts +1 -1
  245. package/dist/builtin/workflows/src/runs/foreground/executor-lifecycle.ts +30 -13
  246. package/dist/builtin/workflows/src/runs/foreground/executor-prompt-nodes.ts +102 -53
  247. package/dist/builtin/workflows/src/runs/foreground/executor-stage-call.ts +13 -5
  248. package/dist/builtin/workflows/src/runs/foreground/executor-stage-control.ts +49 -17
  249. package/dist/builtin/workflows/src/runs/foreground/executor-stage-factory.ts +11 -4
  250. package/dist/builtin/workflows/src/runs/foreground/executor-stage-replay.ts +1 -0
  251. package/dist/builtin/workflows/src/runs/foreground/executor-stage-types.ts +4 -1
  252. package/dist/builtin/workflows/src/runs/foreground/executor-types.ts +7 -1
  253. package/dist/builtin/workflows/src/runs/foreground/postmortem-stage-chat.ts +53 -4
  254. package/dist/builtin/workflows/src/runs/foreground/stage-control-registry.ts +146 -17
  255. package/dist/builtin/workflows/src/runs/foreground/stage-delivery-activity.ts +86 -0
  256. package/dist/builtin/workflows/src/runs/foreground/stage-runner-context.ts +18 -6
  257. package/dist/builtin/workflows/src/runs/foreground/stage-runner-controller.ts +45 -46
  258. package/dist/builtin/workflows/src/runs/foreground/stage-runner-options.ts +5 -1
  259. package/dist/builtin/workflows/src/runs/foreground/stage-runner-pause.ts +195 -0
  260. package/dist/builtin/workflows/src/runs/foreground/stage-runner-send-user-message.ts +8 -0
  261. package/dist/builtin/workflows/src/runs/foreground/stage-runner-session-options.ts +0 -13
  262. package/dist/builtin/workflows/src/runs/foreground/stage-runner-types.ts +30 -2
  263. package/dist/builtin/workflows/src/runs/shared/model-fallback-candidates.ts +3 -143
  264. package/dist/builtin/workflows/src/sdk-surface.ts +1 -1
  265. package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +6 -11
  266. package/dist/builtin/workflows/src/shared/authoring-contract-stage.ts +6 -11
  267. package/dist/builtin/workflows/src/shared/authoring-contract-ui.d.ts +57 -6
  268. package/dist/builtin/workflows/src/shared/authoring-contract-ui.ts +76 -11
  269. package/dist/builtin/workflows/src/shared/expanded-workflow-graph.ts +206 -116
  270. package/dist/builtin/workflows/src/shared/intercom-group.ts +17 -10
  271. package/dist/builtin/workflows/src/shared/persistence-restore-helpers.ts +30 -0
  272. package/dist/builtin/workflows/src/shared/persistence-session-entries.ts +5 -0
  273. package/dist/builtin/workflows/src/shared/render-inputs-schema.ts +3 -3
  274. package/dist/builtin/workflows/src/shared/store-factory.ts +2 -0
  275. package/dist/builtin/workflows/src/shared/store-internal.ts +8 -0
  276. package/dist/builtin/workflows/src/shared/store-public-types.ts +8 -0
  277. package/dist/builtin/workflows/src/shared/store-run-methods.ts +9 -0
  278. package/dist/builtin/workflows/src/shared/store-stage-methods.ts +2 -0
  279. package/dist/builtin/workflows/src/shared/store-tool-node-methods.ts +46 -0
  280. package/dist/builtin/workflows/src/shared/store-types.ts +34 -0
  281. package/dist/builtin/workflows/src/shared/types.ts +14 -24
  282. package/dist/builtin/workflows/src/shared/workflow-failures-classifier.ts +11 -5
  283. package/dist/builtin/workflows/src/shared/workflow-failures-signals.ts +58 -0
  284. package/dist/builtin/workflows/src/shared/workflow-run-ownership.ts +53 -0
  285. package/dist/builtin/workflows/src/tui/graph-view-input.ts +2 -8
  286. package/dist/builtin/workflows/src/tui/graph-view-render-helpers.ts +11 -4
  287. package/dist/builtin/workflows/src/tui/graph-view-render.ts +1 -0
  288. package/dist/builtin/workflows/src/tui/graph-view-state.ts +27 -9
  289. package/dist/builtin/workflows/src/tui/graph-view-types.ts +4 -3
  290. package/dist/builtin/workflows/src/tui/node-card.ts +4 -3
  291. package/dist/builtin/workflows/src/tui/overlay-adapter.ts +0 -4
  292. package/dist/builtin/workflows/src/tui/run-detail.ts +53 -17
  293. package/dist/builtin/workflows/src/tui/session-list.ts +8 -4
  294. package/dist/builtin/workflows/src/tui/stage-chat-view-delivery-activity.ts +121 -0
  295. package/dist/builtin/workflows/src/tui/stage-chat-view-live-events.ts +42 -0
  296. package/dist/builtin/workflows/src/tui/stage-chat-view-render-helpers.ts +12 -0
  297. package/dist/builtin/workflows/src/tui/stage-chat-view-render-settings.ts +21 -1
  298. package/dist/builtin/workflows/src/tui/stage-chat-view-state.ts +19 -19
  299. package/dist/builtin/workflows/src/tui/stage-chat-view-types.ts +4 -0
  300. package/dist/builtin/workflows/src/tui/stage-chat-view.ts +4 -2
  301. package/dist/builtin/workflows/src/tui/switcher.ts +13 -3
  302. package/dist/builtin/workflows/src/tui/workflow-attach-pane-handle.ts +1 -1
  303. package/dist/builtin/workflows/src/tui/workflow-attach-pane-types.ts +0 -9
  304. package/dist/builtin/workflows/src/tui/workflow-attach-pane.ts +16 -49
  305. package/dist/builtin/workflows/src/tui/workflow-status.ts +7 -0
  306. package/dist/builtin/workflows/src/workflows/identity.ts +1 -1
  307. package/dist/cli/args.d.ts +0 -1
  308. package/dist/cli/args.d.ts.map +1 -1
  309. package/dist/cli/args.js +1 -20
  310. package/dist/cli/args.js.map +1 -1
  311. package/dist/cli/config-selector.js +1 -1
  312. package/dist/cli/config-selector.js.map +1 -1
  313. package/dist/cli/list-models.d.ts.map +1 -1
  314. package/dist/cli/list-models.js +1 -2
  315. package/dist/cli/list-models.js.map +1 -1
  316. package/dist/cli/session-picker.d.ts.map +1 -1
  317. package/dist/cli/session-picker.js +2 -1
  318. package/dist/cli/session-picker.js.map +1 -1
  319. package/dist/cli/startup-ui.js +2 -2
  320. package/dist/cli/startup-ui.js.map +1 -1
  321. package/dist/config-self-update.js +1 -1
  322. package/dist/config-self-update.js.map +1 -1
  323. package/dist/config.d.ts +2 -0
  324. package/dist/config.d.ts.map +1 -1
  325. package/dist/config.js +34 -10
  326. package/dist/config.js.map +1 -1
  327. package/dist/core/agent-session-accessors.d.ts.map +1 -1
  328. package/dist/core/agent-session-accessors.js +2 -1
  329. package/dist/core/agent-session-accessors.js.map +1 -1
  330. package/dist/core/agent-session-auto-compaction.d.ts +4 -3
  331. package/dist/core/agent-session-auto-compaction.d.ts.map +1 -1
  332. package/dist/core/agent-session-auto-compaction.js +55 -59
  333. package/dist/core/agent-session-auto-compaction.js.map +1 -1
  334. package/dist/core/agent-session-bash.d.ts +9 -6
  335. package/dist/core/agent-session-bash.d.ts.map +1 -1
  336. package/dist/core/agent-session-bash.js +32 -13
  337. package/dist/core/agent-session-bash.js.map +1 -1
  338. package/dist/core/agent-session-compaction.d.ts +11 -1
  339. package/dist/core/agent-session-compaction.d.ts.map +1 -1
  340. package/dist/core/agent-session-compaction.js +87 -19
  341. package/dist/core/agent-session-compaction.js.map +1 -1
  342. package/dist/core/agent-session-custom-message-commit.d.ts +14 -0
  343. package/dist/core/agent-session-custom-message-commit.d.ts.map +1 -0
  344. package/dist/core/agent-session-custom-message-commit.js +141 -0
  345. package/dist/core/agent-session-custom-message-commit.js.map +1 -0
  346. package/dist/core/agent-session-delivery-forwarding.d.ts +9 -0
  347. package/dist/core/agent-session-delivery-forwarding.d.ts.map +1 -0
  348. package/dist/core/agent-session-delivery-forwarding.js +36 -0
  349. package/dist/core/agent-session-delivery-forwarding.js.map +1 -0
  350. package/dist/core/agent-session-events.d.ts +1 -1
  351. package/dist/core/agent-session-events.d.ts.map +1 -1
  352. package/dist/core/agent-session-events.js +45 -14
  353. package/dist/core/agent-session-events.js.map +1 -1
  354. package/dist/core/agent-session-extension-bindings.d.ts +2 -6
  355. package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
  356. package/dist/core/agent-session-extension-bindings.js +18 -11
  357. package/dist/core/agent-session-extension-bindings.js.map +1 -1
  358. package/dist/core/agent-session-message-queue.d.ts +5 -2
  359. package/dist/core/agent-session-message-queue.d.ts.map +1 -1
  360. package/dist/core/agent-session-message-queue.js +91 -97
  361. package/dist/core/agent-session-message-queue.js.map +1 -1
  362. package/dist/core/agent-session-methods.d.ts +47 -39
  363. package/dist/core/agent-session-methods.d.ts.map +1 -1
  364. package/dist/core/agent-session-methods.js.map +1 -1
  365. package/dist/core/agent-session-models.d.ts +2 -38
  366. package/dist/core/agent-session-models.d.ts.map +1 -1
  367. package/dist/core/agent-session-models.js +5 -147
  368. package/dist/core/agent-session-models.js.map +1 -1
  369. package/dist/core/agent-session-persistent-custom-messages.d.ts +47 -0
  370. package/dist/core/agent-session-persistent-custom-messages.d.ts.map +1 -0
  371. package/dist/core/agent-session-persistent-custom-messages.js +267 -0
  372. package/dist/core/agent-session-persistent-custom-messages.js.map +1 -0
  373. package/dist/core/agent-session-post-tool-compaction.d.ts.map +1 -1
  374. package/dist/core/agent-session-post-tool-compaction.js +34 -9
  375. package/dist/core/agent-session-post-tool-compaction.js.map +1 -1
  376. package/dist/core/agent-session-prompt.d.ts +2 -0
  377. package/dist/core/agent-session-prompt.d.ts.map +1 -1
  378. package/dist/core/agent-session-prompt.js +42 -16
  379. package/dist/core/agent-session-prompt.js.map +1 -1
  380. package/dist/core/agent-session-queue-pause.d.ts +10 -0
  381. package/dist/core/agent-session-queue-pause.d.ts.map +1 -0
  382. package/dist/core/agent-session-queue-pause.js +86 -0
  383. package/dist/core/agent-session-queue-pause.js.map +1 -0
  384. package/dist/core/agent-session-retry.d.ts +0 -11
  385. package/dist/core/agent-session-retry.d.ts.map +1 -1
  386. package/dist/core/agent-session-retry.js +8 -57
  387. package/dist/core/agent-session-retry.js.map +1 -1
  388. package/dist/core/agent-session-runtime-auth.d.ts +6 -0
  389. package/dist/core/agent-session-runtime-auth.d.ts.map +1 -0
  390. package/dist/core/agent-session-runtime-auth.js +26 -0
  391. package/dist/core/agent-session-runtime-auth.js.map +1 -0
  392. package/dist/core/agent-session-runtime.d.ts +13 -2
  393. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  394. package/dist/core/agent-session-runtime.js +32 -6
  395. package/dist/core/agent-session-runtime.js.map +1 -1
  396. package/dist/core/agent-session-services.d.ts +0 -2
  397. package/dist/core/agent-session-services.d.ts.map +1 -1
  398. package/dist/core/agent-session-services.js +6 -7
  399. package/dist/core/agent-session-services.js.map +1 -1
  400. package/dist/core/agent-session-state.d.ts.map +1 -1
  401. package/dist/core/agent-session-state.js +3 -0
  402. package/dist/core/agent-session-state.js.map +1 -1
  403. package/dist/core/agent-session-tool-hooks.d.ts.map +1 -1
  404. package/dist/core/agent-session-tool-hooks.js +6 -1
  405. package/dist/core/agent-session-tool-hooks.js.map +1 -1
  406. package/dist/core/agent-session-tool-registry.d.ts.map +1 -1
  407. package/dist/core/agent-session-tool-registry.js +2 -18
  408. package/dist/core/agent-session-tool-registry.js.map +1 -1
  409. package/dist/core/agent-session-transfer.d.ts +4 -0
  410. package/dist/core/agent-session-transfer.d.ts.map +1 -0
  411. package/dist/core/agent-session-transfer.js +71 -0
  412. package/dist/core/agent-session-transfer.js.map +1 -0
  413. package/dist/core/agent-session-tree.js +1 -1
  414. package/dist/core/agent-session-tree.js.map +1 -1
  415. package/dist/core/agent-session-types.d.ts +5 -11
  416. package/dist/core/agent-session-types.d.ts.map +1 -1
  417. package/dist/core/agent-session-types.js +0 -3
  418. package/dist/core/agent-session-types.js.map +1 -1
  419. package/dist/core/agent-session.d.ts +12 -2
  420. package/dist/core/agent-session.d.ts.map +1 -1
  421. package/dist/core/agent-session.js +8 -2
  422. package/dist/core/agent-session.js.map +1 -1
  423. package/dist/core/atomic-guide-command.d.ts.map +1 -1
  424. package/dist/core/atomic-guide-command.js +31 -33
  425. package/dist/core/atomic-guide-command.js.map +1 -1
  426. package/dist/core/auth-storage.js +2 -2
  427. package/dist/core/auth-storage.js.map +1 -1
  428. package/dist/core/bash-executor.d.ts +5 -3
  429. package/dist/core/bash-executor.d.ts.map +1 -1
  430. package/dist/core/bash-executor.js +5 -4
  431. package/dist/core/bash-executor.js.map +1 -1
  432. package/dist/core/builtin-packages.d.ts.map +1 -1
  433. package/dist/core/builtin-packages.js +0 -6
  434. package/dist/core/builtin-packages.js.map +1 -1
  435. package/dist/core/compaction/branch-summarization.d.ts +8 -3
  436. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  437. package/dist/core/compaction/branch-summarization.js +17 -6
  438. package/dist/core/compaction/branch-summarization.js.map +1 -1
  439. package/dist/core/compaction/compaction-boundary.d.ts +18 -1
  440. package/dist/core/compaction/compaction-boundary.d.ts.map +1 -1
  441. package/dist/core/compaction/compaction-boundary.js +2 -2
  442. package/dist/core/compaction/compaction-boundary.js.map +1 -1
  443. package/dist/core/compaction/compaction-runner.d.ts +61 -6
  444. package/dist/core/compaction/compaction-runner.d.ts.map +1 -1
  445. package/dist/core/compaction/compaction-runner.js +242 -18
  446. package/dist/core/compaction/compaction-runner.js.map +1 -1
  447. package/dist/core/compaction/compaction-types.d.ts +53 -2
  448. package/dist/core/compaction/compaction-types.d.ts.map +1 -1
  449. package/dist/core/compaction/compaction-types.js.map +1 -1
  450. package/dist/core/compaction/fallback-planner.d.ts +64 -0
  451. package/dist/core/compaction/fallback-planner.d.ts.map +1 -0
  452. package/dist/core/compaction/fallback-planner.js +75 -0
  453. package/dist/core/compaction/fallback-planner.js.map +1 -0
  454. package/dist/core/compaction/index.d.ts +3 -0
  455. package/dist/core/compaction/index.d.ts.map +1 -1
  456. package/dist/core/compaction/index.js +3 -0
  457. package/dist/core/compaction/index.js.map +1 -1
  458. package/dist/core/compaction/planner-outcome.d.ts +86 -0
  459. package/dist/core/compaction/planner-outcome.d.ts.map +1 -0
  460. package/dist/core/compaction/planner-outcome.js +122 -0
  461. package/dist/core/compaction/planner-outcome.js.map +1 -0
  462. package/dist/core/compaction/range-planner-diagnostics.d.ts +58 -6
  463. package/dist/core/compaction/range-planner-diagnostics.d.ts.map +1 -1
  464. package/dist/core/compaction/range-planner-diagnostics.js +69 -31
  465. package/dist/core/compaction/range-planner-diagnostics.js.map +1 -1
  466. package/dist/core/compaction/range-planner.d.ts +36 -8
  467. package/dist/core/compaction/range-planner.d.ts.map +1 -1
  468. package/dist/core/compaction/range-planner.js +136 -51
  469. package/dist/core/compaction/range-planner.js.map +1 -1
  470. package/dist/core/compaction/region-trimming.d.ts +34 -0
  471. package/dist/core/compaction/region-trimming.d.ts.map +1 -0
  472. package/dist/core/compaction/region-trimming.js +73 -0
  473. package/dist/core/compaction/region-trimming.js.map +1 -0
  474. package/dist/core/compaction/transcript-serialization.d.ts +8 -1
  475. package/dist/core/compaction/transcript-serialization.d.ts.map +1 -1
  476. package/dist/core/compaction/transcript-serialization.js +78 -27
  477. package/dist/core/compaction/transcript-serialization.js.map +1 -1
  478. package/dist/core/context-tool-pairing.d.ts +19 -0
  479. package/dist/core/context-tool-pairing.d.ts.map +1 -0
  480. package/dist/core/context-tool-pairing.js +50 -0
  481. package/dist/core/context-tool-pairing.js.map +1 -0
  482. package/dist/core/diagnostics.d.ts +8 -0
  483. package/dist/core/diagnostics.d.ts.map +1 -1
  484. package/dist/core/diagnostics.js.map +1 -1
  485. package/dist/core/extensions/context-types.d.ts +3 -0
  486. package/dist/core/extensions/context-types.d.ts.map +1 -1
  487. package/dist/core/extensions/context-types.js.map +1 -1
  488. package/dist/core/extensions/index.d.ts +2 -0
  489. package/dist/core/extensions/index.d.ts.map +1 -1
  490. package/dist/core/extensions/index.js.map +1 -1
  491. package/dist/core/extensions/loader-api.d.ts.map +1 -1
  492. package/dist/core/extensions/loader-api.js +48 -27
  493. package/dist/core/extensions/loader-api.js.map +1 -1
  494. package/dist/core/extensions/loader-runtime.d.ts +2 -4
  495. package/dist/core/extensions/loader-runtime.d.ts.map +1 -1
  496. package/dist/core/extensions/loader-runtime.js +199 -18
  497. package/dist/core/extensions/loader-runtime.js.map +1 -1
  498. package/dist/core/extensions/message-types.d.ts +7 -4
  499. package/dist/core/extensions/message-types.d.ts.map +1 -1
  500. package/dist/core/extensions/message-types.js.map +1 -1
  501. package/dist/core/extensions/provider-types.d.ts +9 -4
  502. package/dist/core/extensions/provider-types.d.ts.map +1 -1
  503. package/dist/core/extensions/provider-types.js.map +1 -1
  504. package/dist/core/extensions/runner-context.d.ts +2 -0
  505. package/dist/core/extensions/runner-context.d.ts.map +1 -1
  506. package/dist/core/extensions/runner-context.js +4 -0
  507. package/dist/core/extensions/runner-context.js.map +1 -1
  508. package/dist/core/extensions/runner.d.ts +1 -0
  509. package/dist/core/extensions/runner.d.ts.map +1 -1
  510. package/dist/core/extensions/runner.js +28 -20
  511. package/dist/core/extensions/runner.js.map +1 -1
  512. package/dist/core/extensions/runtime-types.d.ts +25 -0
  513. package/dist/core/extensions/runtime-types.d.ts.map +1 -1
  514. package/dist/core/extensions/runtime-types.js.map +1 -1
  515. package/dist/core/extensions/tool-types.d.ts +7 -3
  516. package/dist/core/extensions/tool-types.d.ts.map +1 -1
  517. package/dist/core/extensions/tool-types.js.map +1 -1
  518. package/dist/core/extensions/ui-types.d.ts +14 -4
  519. package/dist/core/extensions/ui-types.d.ts.map +1 -1
  520. package/dist/core/extensions/ui-types.js.map +1 -1
  521. package/dist/core/fallback-models.d.ts +37 -0
  522. package/dist/core/fallback-models.d.ts.map +1 -0
  523. package/dist/core/fallback-models.js +48 -0
  524. package/dist/core/fallback-models.js.map +1 -0
  525. package/dist/core/flattened-tool-arguments.d.ts +4 -7
  526. package/dist/core/flattened-tool-arguments.d.ts.map +1 -1
  527. package/dist/core/flattened-tool-arguments.js +4 -7
  528. package/dist/core/flattened-tool-arguments.js.map +1 -1
  529. package/dist/core/http-dispatcher.d.ts.map +1 -1
  530. package/dist/core/http-dispatcher.js +0 -5
  531. package/dist/core/http-dispatcher.js.map +1 -1
  532. package/dist/core/messages.d.ts +14 -2
  533. package/dist/core/messages.d.ts.map +1 -1
  534. package/dist/core/messages.js +28 -4
  535. package/dist/core/messages.js.map +1 -1
  536. package/dist/core/model-capabilities.d.ts +18 -0
  537. package/dist/core/model-capabilities.d.ts.map +1 -0
  538. package/dist/core/model-capabilities.js +23 -0
  539. package/dist/core/model-capabilities.js.map +1 -0
  540. package/dist/core/model-registry-auth.d.ts.map +1 -1
  541. package/dist/core/model-registry-auth.js +0 -2
  542. package/dist/core/model-registry-auth.js.map +1 -1
  543. package/dist/core/model-registry-builtins.d.ts +0 -2
  544. package/dist/core/model-registry-builtins.d.ts.map +1 -1
  545. package/dist/core/model-registry-builtins.js +9 -76
  546. package/dist/core/model-registry-builtins.js.map +1 -1
  547. package/dist/core/model-registry-custom-loader.d.ts.map +1 -1
  548. package/dist/core/model-registry-custom-loader.js +1 -12
  549. package/dist/core/model-registry-custom-loader.js.map +1 -1
  550. package/dist/core/model-registry-dynamic.d.ts.map +1 -1
  551. package/dist/core/model-registry-dynamic.js +3 -15
  552. package/dist/core/model-registry-dynamic.js.map +1 -1
  553. package/dist/core/model-registry-extension-refresh.d.ts +23 -0
  554. package/dist/core/model-registry-extension-refresh.d.ts.map +1 -0
  555. package/dist/core/model-registry-extension-refresh.js +32 -0
  556. package/dist/core/model-registry-extension-refresh.js.map +1 -0
  557. package/dist/core/model-registry-schemas.d.ts +118 -9
  558. package/dist/core/model-registry-schemas.d.ts.map +1 -1
  559. package/dist/core/model-registry-schemas.js +10 -3
  560. package/dist/core/model-registry-schemas.js.map +1 -1
  561. package/dist/core/model-registry-types.d.ts +5 -5
  562. package/dist/core/model-registry-types.d.ts.map +1 -1
  563. package/dist/core/model-registry-types.js.map +1 -1
  564. package/dist/core/model-registry-validation.d.ts +7 -0
  565. package/dist/core/model-registry-validation.d.ts.map +1 -0
  566. package/dist/core/model-registry-validation.js +12 -0
  567. package/dist/core/model-registry-validation.js.map +1 -0
  568. package/dist/core/model-registry.d.ts +5 -3
  569. package/dist/core/model-registry.d.ts.map +1 -1
  570. package/dist/core/model-registry.js +34 -33
  571. package/dist/core/model-registry.js.map +1 -1
  572. package/dist/core/model-resolver-defaults.d.ts.map +1 -1
  573. package/dist/core/model-resolver-defaults.js +0 -1
  574. package/dist/core/model-resolver-defaults.js.map +1 -1
  575. package/dist/core/model-resolver-initial.d.ts.map +1 -1
  576. package/dist/core/model-resolver-initial.js +9 -0
  577. package/dist/core/model-resolver-initial.js.map +1 -1
  578. package/dist/core/model-resolver-patterns.d.ts.map +1 -1
  579. package/dist/core/model-resolver-patterns.js +0 -2
  580. package/dist/core/model-resolver-patterns.js.map +1 -1
  581. package/dist/core/model-resolver-scope.d.ts +2 -0
  582. package/dist/core/model-resolver-scope.d.ts.map +1 -1
  583. package/dist/core/model-resolver-scope.js +18 -4
  584. package/dist/core/model-resolver-scope.js.map +1 -1
  585. package/dist/core/model-resolver-types.d.ts +2 -0
  586. package/dist/core/model-resolver-types.d.ts.map +1 -1
  587. package/dist/core/model-resolver-types.js.map +1 -1
  588. package/dist/core/oauth-provider-bridge.d.ts +21 -0
  589. package/dist/core/oauth-provider-bridge.d.ts.map +1 -1
  590. package/dist/core/oauth-provider-bridge.js +68 -7
  591. package/dist/core/oauth-provider-bridge.js.map +1 -1
  592. package/dist/core/package-manager-auto-resources.d.ts.map +1 -1
  593. package/dist/core/package-manager-auto-resources.js +12 -4
  594. package/dist/core/package-manager-auto-resources.js.map +1 -1
  595. package/dist/core/package-manager-resolver.d.ts.map +1 -1
  596. package/dist/core/package-manager-resolver.js +42 -11
  597. package/dist/core/package-manager-resolver.js.map +1 -1
  598. package/dist/core/package-manager-types.d.ts +2 -0
  599. package/dist/core/package-manager-types.d.ts.map +1 -1
  600. package/dist/core/package-manager-types.js.map +1 -1
  601. package/dist/core/package-manager.d.ts +1 -1
  602. package/dist/core/package-manager.d.ts.map +1 -1
  603. package/dist/core/package-manager.js.map +1 -1
  604. package/dist/core/remote-catalog-provider.d.ts +1 -1
  605. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  606. package/dist/core/remote-catalog-provider.js +17 -11
  607. package/dist/core/remote-catalog-provider.js.map +1 -1
  608. package/dist/core/resource-loader-assets.d.ts.map +1 -1
  609. package/dist/core/resource-loader-assets.js +30 -4
  610. package/dist/core/resource-loader-assets.js.map +1 -1
  611. package/dist/core/resource-loader-context-files.d.ts.map +1 -1
  612. package/dist/core/resource-loader-context-files.js +3 -1
  613. package/dist/core/resource-loader-context-files.js.map +1 -1
  614. package/dist/core/resource-loader-core.d.ts +2 -1
  615. package/dist/core/resource-loader-core.d.ts.map +1 -1
  616. package/dist/core/resource-loader-core.js +3 -0
  617. package/dist/core/resource-loader-core.js.map +1 -1
  618. package/dist/core/resource-loader-extensions.d.ts +1 -0
  619. package/dist/core/resource-loader-extensions.d.ts.map +1 -1
  620. package/dist/core/resource-loader-extensions.js +120 -7
  621. package/dist/core/resource-loader-extensions.js.map +1 -1
  622. package/dist/core/resource-loader-package-resources.d.ts.map +1 -1
  623. package/dist/core/resource-loader-package-resources.js +14 -1
  624. package/dist/core/resource-loader-package-resources.js.map +1 -1
  625. package/dist/core/resource-loader-reload.d.ts.map +1 -1
  626. package/dist/core/resource-loader-reload.js +2 -1
  627. package/dist/core/resource-loader-reload.js.map +1 -1
  628. package/dist/core/resource-loader-source-info.d.ts.map +1 -1
  629. package/dist/core/resource-loader-source-info.js +6 -3
  630. package/dist/core/resource-loader-source-info.js.map +1 -1
  631. package/dist/core/sdk-types.d.ts +11 -10
  632. package/dist/core/sdk-types.d.ts.map +1 -1
  633. package/dist/core/sdk-types.js.map +1 -1
  634. package/dist/core/sdk.d.ts +1 -0
  635. package/dist/core/sdk.d.ts.map +1 -1
  636. package/dist/core/sdk.js +13 -84
  637. package/dist/core/sdk.js.map +1 -1
  638. package/dist/core/session-manager-core.d.ts +3 -3
  639. package/dist/core/session-manager-core.d.ts.map +1 -1
  640. package/dist/core/session-manager-core.js +18 -25
  641. package/dist/core/session-manager-core.js.map +1 -1
  642. package/dist/core/session-manager-entries.d.ts +2 -5
  643. package/dist/core/session-manager-entries.d.ts.map +1 -1
  644. package/dist/core/session-manager-entries.js +2 -8
  645. package/dist/core/session-manager-entries.js.map +1 -1
  646. package/dist/core/session-manager-history.d.ts +3 -3
  647. package/dist/core/session-manager-history.d.ts.map +1 -1
  648. package/dist/core/session-manager-history.js +49 -27
  649. package/dist/core/session-manager-history.js.map +1 -1
  650. package/dist/core/session-manager-storage.d.ts +6 -0
  651. package/dist/core/session-manager-storage.d.ts.map +1 -1
  652. package/dist/core/session-manager-storage.js +38 -5
  653. package/dist/core/session-manager-storage.js.map +1 -1
  654. package/dist/core/session-manager-types.d.ts +6 -6
  655. package/dist/core/session-manager-types.d.ts.map +1 -1
  656. package/dist/core/session-manager-types.js.map +1 -1
  657. package/dist/core/session-manager.d.ts +1 -1
  658. package/dist/core/session-manager.d.ts.map +1 -1
  659. package/dist/core/session-manager.js.map +1 -1
  660. package/dist/core/settings-manager-basic-accessors.d.ts +0 -4
  661. package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
  662. package/dist/core/settings-manager-basic-accessors.js +0 -50
  663. package/dist/core/settings-manager-basic-accessors.js.map +1 -1
  664. package/dist/core/settings-manager-core.d.ts +2 -4
  665. package/dist/core/settings-manager-core.d.ts.map +1 -1
  666. package/dist/core/settings-manager-core.js +5 -51
  667. package/dist/core/settings-manager-core.js.map +1 -1
  668. package/dist/core/settings-manager.d.ts +1 -1
  669. package/dist/core/settings-manager.d.ts.map +1 -1
  670. package/dist/core/settings-manager.js.map +1 -1
  671. package/dist/core/settings-storage.d.ts +3 -1
  672. package/dist/core/settings-storage.d.ts.map +1 -1
  673. package/dist/core/settings-storage.js +22 -0
  674. package/dist/core/settings-storage.js.map +1 -1
  675. package/dist/core/settings-types.d.ts +2 -4
  676. package/dist/core/settings-types.d.ts.map +1 -1
  677. package/dist/core/settings-types.js.map +1 -1
  678. package/dist/core/slash-commands.d.ts.map +1 -1
  679. package/dist/core/slash-commands.js +68 -22
  680. package/dist/core/slash-commands.js.map +1 -1
  681. package/dist/core/source-info.d.ts +3 -1
  682. package/dist/core/source-info.d.ts.map +1 -1
  683. package/dist/core/source-info.js +2 -0
  684. package/dist/core/source-info.js.map +1 -1
  685. package/dist/core/tools/ask-user-question/ask-user-question.js +1 -1
  686. package/dist/core/tools/ask-user-question/ask-user-question.js.map +1 -1
  687. package/dist/core/tools/bash-session-environment.d.ts +13 -0
  688. package/dist/core/tools/bash-session-environment.d.ts.map +1 -0
  689. package/dist/core/tools/bash-session-environment.js +35 -0
  690. package/dist/core/tools/bash-session-environment.js.map +1 -0
  691. package/dist/core/tools/bash.d.ts +4 -1
  692. package/dist/core/tools/bash.d.ts.map +1 -1
  693. package/dist/core/tools/bash.js +16 -8
  694. package/dist/core/tools/bash.js.map +1 -1
  695. package/dist/core/tools/tool-definition-wrapper.d.ts +3 -0
  696. package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
  697. package/dist/core/tools/tool-definition-wrapper.js +10 -2
  698. package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
  699. package/dist/extensions/index.js +1 -1
  700. package/dist/extensions/index.js.map +1 -1
  701. package/dist/extensions/llama/provider.d.ts +3 -2
  702. package/dist/extensions/llama/provider.d.ts.map +1 -1
  703. package/dist/extensions/llama/provider.js +9 -3
  704. package/dist/extensions/llama/provider.js.map +1 -1
  705. package/dist/index-extensions.d.ts +1 -1
  706. package/dist/index-extensions.d.ts.map +1 -1
  707. package/dist/index-extensions.js.map +1 -1
  708. package/dist/index.d.ts +2 -3
  709. package/dist/index.d.ts.map +1 -1
  710. package/dist/index.js +1 -2
  711. package/dist/index.js.map +1 -1
  712. package/dist/main-session-options.d.ts.map +1 -1
  713. package/dist/main-session-options.js +0 -4
  714. package/dist/main-session-options.js.map +1 -1
  715. package/dist/main-session.d.ts.map +1 -1
  716. package/dist/main-session.js +2 -1
  717. package/dist/main-session.js.map +1 -1
  718. package/dist/main.d.ts.map +1 -1
  719. package/dist/main.js +1 -17
  720. package/dist/main.js.map +1 -1
  721. package/dist/modes/index.d.ts +1 -1
  722. package/dist/modes/index.d.ts.map +1 -1
  723. package/dist/modes/index.js.map +1 -1
  724. package/dist/modes/interactive/chat-input-actions.d.ts +1 -1
  725. package/dist/modes/interactive/chat-input-actions.d.ts.map +1 -1
  726. package/dist/modes/interactive/chat-input-actions.js +14 -96
  727. package/dist/modes/interactive/chat-input-actions.js.map +1 -1
  728. package/dist/modes/interactive/components/atomic-banner.d.ts +9 -8
  729. package/dist/modes/interactive/components/atomic-banner.d.ts.map +1 -1
  730. package/dist/modes/interactive/components/atomic-banner.js +68 -24
  731. package/dist/modes/interactive/components/atomic-banner.js.map +1 -1
  732. package/dist/modes/interactive/components/atomic-working-status.d.ts +52 -0
  733. package/dist/modes/interactive/components/atomic-working-status.d.ts.map +1 -0
  734. package/dist/modes/interactive/components/atomic-working-status.js +202 -0
  735. package/dist/modes/interactive/components/atomic-working-status.js.map +1 -0
  736. package/dist/modes/interactive/components/chat-message-renderer.js +1 -1
  737. package/dist/modes/interactive/components/chat-message-renderer.js.map +1 -1
  738. package/dist/modes/interactive/components/chat-session-host-actions.d.ts.map +1 -1
  739. package/dist/modes/interactive/components/chat-session-host-actions.js +87 -7
  740. package/dist/modes/interactive/components/chat-session-host-actions.js.map +1 -1
  741. package/dist/modes/interactive/components/chat-session-host-editor.js +3 -3
  742. package/dist/modes/interactive/components/chat-session-host-editor.js.map +1 -1
  743. package/dist/modes/interactive/components/chat-session-host-events.d.ts.map +1 -1
  744. package/dist/modes/interactive/components/chat-session-host-events.js +61 -9
  745. package/dist/modes/interactive/components/chat-session-host-events.js.map +1 -1
  746. package/dist/modes/interactive/components/chat-session-host-rendering.d.ts.map +1 -1
  747. package/dist/modes/interactive/components/chat-session-host-rendering.js +23 -7
  748. package/dist/modes/interactive/components/chat-session-host-rendering.js.map +1 -1
  749. package/dist/modes/interactive/components/chat-session-host-runtime.d.ts +27 -0
  750. package/dist/modes/interactive/components/chat-session-host-runtime.d.ts.map +1 -1
  751. package/dist/modes/interactive/components/chat-session-host-runtime.js +120 -18
  752. package/dist/modes/interactive/components/chat-session-host-runtime.js.map +1 -1
  753. package/dist/modes/interactive/components/chat-session-host-state.d.ts +9 -0
  754. package/dist/modes/interactive/components/chat-session-host-state.d.ts.map +1 -1
  755. package/dist/modes/interactive/components/chat-session-host-state.js +5 -0
  756. package/dist/modes/interactive/components/chat-session-host-state.js.map +1 -1
  757. package/dist/modes/interactive/components/chat-session-host-types.d.ts +10 -0
  758. package/dist/modes/interactive/components/chat-session-host-types.d.ts.map +1 -1
  759. package/dist/modes/interactive/components/chat-session-host-types.js.map +1 -1
  760. package/dist/modes/interactive/components/chat-session-host.d.ts +13 -0
  761. package/dist/modes/interactive/components/chat-session-host.d.ts.map +1 -1
  762. package/dist/modes/interactive/components/chat-session-host.js +22 -1
  763. package/dist/modes/interactive/components/chat-session-host.js.map +1 -1
  764. package/dist/modes/interactive/components/compaction-boundary-message.d.ts.map +1 -1
  765. package/dist/modes/interactive/components/compaction-boundary-message.js +2 -1
  766. package/dist/modes/interactive/components/compaction-boundary-message.js.map +1 -1
  767. package/dist/modes/interactive/components/custom-message.d.ts +3 -1
  768. package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
  769. package/dist/modes/interactive/components/custom-message.js +9 -2
  770. package/dist/modes/interactive/components/custom-message.js.map +1 -1
  771. package/dist/modes/interactive/components/extension-editor.d.ts +3 -2
  772. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  773. package/dist/modes/interactive/components/extension-editor.js +14 -43
  774. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  775. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  776. package/dist/modes/interactive/components/scoped-models-selector.js +18 -13
  777. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  778. package/dist/modes/interactive/components/startup-identity.d.ts +22 -0
  779. package/dist/modes/interactive/components/startup-identity.d.ts.map +1 -0
  780. package/dist/modes/interactive/components/startup-identity.js +58 -0
  781. package/dist/modes/interactive/components/startup-identity.js.map +1 -0
  782. package/dist/modes/interactive/components/tree-selector-content.d.ts.map +1 -1
  783. package/dist/modes/interactive/components/tree-selector-content.js +0 -6
  784. package/dist/modes/interactive/components/tree-selector-content.js.map +1 -1
  785. package/dist/modes/interactive/components/tree-selector-model.d.ts.map +1 -1
  786. package/dist/modes/interactive/components/tree-selector-model.js +0 -1
  787. package/dist/modes/interactive/components/tree-selector-model.js.map +1 -1
  788. package/dist/modes/interactive/components/working-status.d.ts +5 -11
  789. package/dist/modes/interactive/components/working-status.d.ts.map +1 -1
  790. package/dist/modes/interactive/components/working-status.js +14 -15
  791. package/dist/modes/interactive/components/working-status.js.map +1 -1
  792. package/dist/modes/interactive/external-editor.d.ts +23 -0
  793. package/dist/modes/interactive/external-editor.d.ts.map +1 -0
  794. package/dist/modes/interactive/external-editor.js +120 -0
  795. package/dist/modes/interactive/external-editor.js.map +1 -0
  796. package/dist/modes/interactive/interactive-agent-events.js +33 -22
  797. package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
  798. package/dist/modes/interactive/interactive-auth-login.js +16 -6
  799. package/dist/modes/interactive/interactive-auth-login.js.map +1 -1
  800. package/dist/modes/interactive/interactive-auth-routing.js +3 -0
  801. package/dist/modes/interactive/interactive-auth-routing.js.map +1 -1
  802. package/dist/modes/interactive/interactive-bash-compact.d.ts +2 -1
  803. package/dist/modes/interactive/interactive-bash-compact.d.ts.map +1 -1
  804. package/dist/modes/interactive/interactive-bash-compact.js +8 -0
  805. package/dist/modes/interactive/interactive-bash-compact.js.map +1 -1
  806. package/dist/modes/interactive/interactive-deferred-startup.d.ts.map +1 -1
  807. package/dist/modes/interactive/interactive-deferred-startup.js +49 -19
  808. package/dist/modes/interactive/interactive-deferred-startup.js.map +1 -1
  809. package/dist/modes/interactive/interactive-editor-actions.js +4 -3
  810. package/dist/modes/interactive/interactive-editor-actions.js.map +1 -1
  811. package/dist/modes/interactive/interactive-extension-dialogs.js +1 -1
  812. package/dist/modes/interactive/interactive-extension-dialogs.js.map +1 -1
  813. package/dist/modes/interactive/interactive-extension-runtime.js +3 -2
  814. package/dist/modes/interactive/interactive-extension-runtime.js.map +1 -1
  815. package/dist/modes/interactive/interactive-initial-session-binding.d.ts +4 -0
  816. package/dist/modes/interactive/interactive-initial-session-binding.d.ts.map +1 -0
  817. package/dist/modes/interactive/interactive-initial-session-binding.js +23 -0
  818. package/dist/modes/interactive/interactive-initial-session-binding.js.map +1 -0
  819. package/dist/modes/interactive/interactive-input-handling.d.ts +2 -1
  820. package/dist/modes/interactive/interactive-input-handling.d.ts.map +1 -1
  821. package/dist/modes/interactive/interactive-input-handling.js +27 -51
  822. package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
  823. package/dist/modes/interactive/interactive-mode-base.d.ts +11 -7
  824. package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
  825. package/dist/modes/interactive/interactive-mode-base.js +14 -6
  826. package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
  827. package/dist/modes/interactive/interactive-mode-deps.d.ts +2 -4
  828. package/dist/modes/interactive/interactive-mode-deps.d.ts.map +1 -1
  829. package/dist/modes/interactive/interactive-mode-deps.js +2 -4
  830. package/dist/modes/interactive/interactive-mode-deps.js.map +1 -1
  831. package/dist/modes/interactive/interactive-mode-surface.d.ts +9 -8
  832. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  833. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  834. package/dist/modes/interactive/interactive-mode.d.ts +1 -0
  835. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  836. package/dist/modes/interactive/interactive-mode.js +1 -0
  837. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  838. package/dist/modes/interactive/interactive-model-catalog-startup.d.ts +2 -3
  839. package/dist/modes/interactive/interactive-model-catalog-startup.d.ts.map +1 -1
  840. package/dist/modes/interactive/interactive-model-catalog-startup.js +3 -6
  841. package/dist/modes/interactive/interactive-model-catalog-startup.js.map +1 -1
  842. package/dist/modes/interactive/interactive-model-routing.js +26 -97
  843. package/dist/modes/interactive/interactive-model-routing.js.map +1 -1
  844. package/dist/modes/interactive/interactive-pause.d.ts +4 -0
  845. package/dist/modes/interactive/interactive-pause.d.ts.map +1 -0
  846. package/dist/modes/interactive/interactive-pause.js +8 -0
  847. package/dist/modes/interactive/interactive-pause.js.map +1 -0
  848. package/dist/modes/interactive/interactive-process-lifecycle.js +5 -4
  849. package/dist/modes/interactive/interactive-process-lifecycle.js.map +1 -1
  850. package/dist/modes/interactive/interactive-prompt-turn.d.ts +2 -0
  851. package/dist/modes/interactive/interactive-prompt-turn.d.ts.map +1 -0
  852. package/dist/modes/interactive/interactive-prompt-turn.js +41 -0
  853. package/dist/modes/interactive/interactive-prompt-turn.js.map +1 -0
  854. package/dist/modes/interactive/interactive-render-chat.js +20 -8
  855. package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
  856. package/dist/modes/interactive/interactive-resource-paths.js +11 -2
  857. package/dist/modes/interactive/interactive-resource-paths.js.map +1 -1
  858. package/dist/modes/interactive/interactive-resource-rendering.js +99 -0
  859. package/dist/modes/interactive/interactive-resource-rendering.js.map +1 -1
  860. package/dist/modes/interactive/interactive-session-runtime.js +1 -1
  861. package/dist/modes/interactive/interactive-session-runtime.js.map +1 -1
  862. package/dist/modes/interactive/interactive-slash-commands.js +1 -1
  863. package/dist/modes/interactive/interactive-slash-commands.js.map +1 -1
  864. package/dist/modes/interactive/interactive-startup-chat-container.d.ts +20 -0
  865. package/dist/modes/interactive/interactive-startup-chat-container.d.ts.map +1 -0
  866. package/dist/modes/interactive/interactive-startup-chat-container.js +26 -0
  867. package/dist/modes/interactive/interactive-startup-chat-container.js.map +1 -0
  868. package/dist/modes/interactive/interactive-startup.d.ts +1 -1
  869. package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
  870. package/dist/modes/interactive/interactive-startup.js +30 -25
  871. package/dist/modes/interactive/interactive-startup.js.map +1 -1
  872. package/dist/modes/interactive/interactive-summarization-retry-events.d.ts.map +1 -1
  873. package/dist/modes/interactive/interactive-summarization-retry-events.js +9 -3
  874. package/dist/modes/interactive/interactive-summarization-retry-events.js.map +1 -1
  875. package/dist/modes/interactive/theme/catppuccin-frappe.json +1 -1
  876. package/dist/modes/interactive/theme/catppuccin-latte.json +1 -1
  877. package/dist/modes/interactive/theme/catppuccin-macchiato.json +1 -1
  878. package/dist/modes/interactive/theme/catppuccin-mocha.json +9 -1
  879. package/dist/modes/interactive/theme/dark.json +1 -1
  880. package/dist/modes/interactive/theme/light.json +1 -1
  881. package/dist/modes/interactive/theme/theme-class.d.ts +4 -0
  882. package/dist/modes/interactive/theme/theme-class.d.ts.map +1 -1
  883. package/dist/modes/interactive/theme/theme-class.js +7 -0
  884. package/dist/modes/interactive/theme/theme-class.js.map +1 -1
  885. package/dist/modes/interactive/theme/theme-loading.d.ts.map +1 -1
  886. package/dist/modes/interactive/theme/theme-loading.js +4 -0
  887. package/dist/modes/interactive/theme/theme-loading.js.map +1 -1
  888. package/dist/modes/interactive/theme/theme-schema.d.ts +32 -0
  889. package/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
  890. package/dist/modes/interactive/theme/theme-schema.js +8 -0
  891. package/dist/modes/interactive/theme/theme-schema.js.map +1 -1
  892. package/dist/modes/interactive/theme/theme-schema.json +15 -2
  893. package/dist/modes/interactive/whimsical-messages.d.ts +1 -0
  894. package/dist/modes/interactive/whimsical-messages.d.ts.map +1 -1
  895. package/dist/modes/interactive/whimsical-messages.js +2 -2
  896. package/dist/modes/interactive/whimsical-messages.js.map +1 -1
  897. package/dist/modes/interactive-engine/create-isolated-runtime.d.ts.map +1 -1
  898. package/dist/modes/interactive-engine/create-isolated-runtime.js +3 -1
  899. package/dist/modes/interactive-engine/create-isolated-runtime.js.map +1 -1
  900. package/dist/modes/interactive-engine/engine-args.d.ts.map +1 -1
  901. package/dist/modes/interactive-engine/engine-args.js +0 -1
  902. package/dist/modes/interactive-engine/engine-args.js.map +1 -1
  903. package/dist/modes/interactive-engine/engine-custom-ui.d.ts.map +1 -1
  904. package/dist/modes/interactive-engine/engine-custom-ui.js +5 -17
  905. package/dist/modes/interactive-engine/engine-custom-ui.js.map +1 -1
  906. package/dist/modes/interactive-engine/engine-render-service.d.ts.map +1 -1
  907. package/dist/modes/interactive-engine/engine-render-service.js +8 -19
  908. package/dist/modes/interactive-engine/engine-render-service.js.map +1 -1
  909. package/dist/modes/interactive-engine/extension-ui-bridge.d.ts +2 -0
  910. package/dist/modes/interactive-engine/extension-ui-bridge.d.ts.map +1 -1
  911. package/dist/modes/interactive-engine/extension-ui-bridge.js +3 -0
  912. package/dist/modes/interactive-engine/extension-ui-bridge.js.map +1 -1
  913. package/dist/modes/interactive-engine/isolated-auth.d.ts +10 -0
  914. package/dist/modes/interactive-engine/isolated-auth.d.ts.map +1 -0
  915. package/dist/modes/interactive-engine/isolated-auth.js +14 -0
  916. package/dist/modes/interactive-engine/isolated-auth.js.map +1 -0
  917. package/dist/modes/interactive-engine/isolated-runtime.d.ts +9 -1
  918. package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -1
  919. package/dist/modes/interactive-engine/isolated-runtime.js +46 -34
  920. package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
  921. package/dist/modes/interactive-engine/protocol.d.ts +1 -1
  922. package/dist/modes/interactive-engine/protocol.d.ts.map +1 -1
  923. package/dist/modes/interactive-engine/protocol.js +3 -10
  924. package/dist/modes/interactive-engine/protocol.js.map +1 -1
  925. package/dist/modes/interactive-engine/remote-model-catalog.d.ts +1 -0
  926. package/dist/modes/interactive-engine/remote-model-catalog.d.ts.map +1 -1
  927. package/dist/modes/interactive-engine/remote-model-catalog.js +10 -1
  928. package/dist/modes/interactive-engine/remote-model-catalog.js.map +1 -1
  929. package/dist/modes/interactive-engine/remote-queue-pause.d.ts +13 -0
  930. package/dist/modes/interactive-engine/remote-queue-pause.d.ts.map +1 -0
  931. package/dist/modes/interactive-engine/remote-queue-pause.js +38 -0
  932. package/dist/modes/interactive-engine/remote-queue-pause.js.map +1 -0
  933. package/dist/modes/interactive-engine/remote-renderer.d.ts +3 -1
  934. package/dist/modes/interactive-engine/remote-renderer.d.ts.map +1 -1
  935. package/dist/modes/interactive-engine/remote-renderer.js +4 -1
  936. package/dist/modes/interactive-engine/remote-renderer.js.map +1 -1
  937. package/dist/modes/print-mode.d.ts.map +1 -1
  938. package/dist/modes/print-mode.js +5 -0
  939. package/dist/modes/print-mode.js.map +1 -1
  940. package/dist/modes/rpc/jsonl.d.ts +2 -7
  941. package/dist/modes/rpc/jsonl.d.ts.map +1 -1
  942. package/dist/modes/rpc/jsonl.js +7 -24
  943. package/dist/modes/rpc/jsonl.js.map +1 -1
  944. package/dist/modes/rpc/queued-writer.d.ts +19 -0
  945. package/dist/modes/rpc/queued-writer.d.ts.map +1 -0
  946. package/dist/modes/rpc/{bounded-writer.js → queued-writer.js} +7 -30
  947. package/dist/modes/rpc/queued-writer.js.map +1 -0
  948. package/dist/modes/rpc/rpc-bash-request-owners.d.ts +24 -0
  949. package/dist/modes/rpc/rpc-bash-request-owners.d.ts.map +1 -0
  950. package/dist/modes/rpc/rpc-bash-request-owners.js +45 -0
  951. package/dist/modes/rpc/rpc-bash-request-owners.js.map +1 -0
  952. package/dist/modes/rpc/rpc-client-api.d.ts +8 -5
  953. package/dist/modes/rpc/rpc-client-api.d.ts.map +1 -1
  954. package/dist/modes/rpc/rpc-client-api.js +10 -11
  955. package/dist/modes/rpc/rpc-client-api.js.map +1 -1
  956. package/dist/modes/rpc/rpc-client-process.d.ts +1 -4
  957. package/dist/modes/rpc/rpc-client-process.d.ts.map +1 -1
  958. package/dist/modes/rpc/rpc-client-process.js +2 -14
  959. package/dist/modes/rpc/rpc-client-process.js.map +1 -1
  960. package/dist/modes/rpc/rpc-client.d.ts +8 -4
  961. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  962. package/dist/modes/rpc/rpc-client.js +21 -30
  963. package/dist/modes/rpc/rpc-client.js.map +1 -1
  964. package/dist/modes/rpc/rpc-command-handler.d.ts +7 -4
  965. package/dist/modes/rpc/rpc-command-handler.d.ts.map +1 -1
  966. package/dist/modes/rpc/rpc-command-handler.js +76 -93
  967. package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
  968. package/dist/modes/rpc/rpc-input-scheduler.d.ts +3 -3
  969. package/dist/modes/rpc/rpc-input-scheduler.d.ts.map +1 -1
  970. package/dist/modes/rpc/rpc-input-scheduler.js +7 -4
  971. package/dist/modes/rpc/rpc-input-scheduler.js.map +1 -1
  972. package/dist/modes/rpc/rpc-mode.d.ts +1 -1
  973. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  974. package/dist/modes/rpc/rpc-mode.js +5 -5
  975. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  976. package/dist/modes/rpc/rpc-model-fallback-prompt.d.ts +4 -0
  977. package/dist/modes/rpc/rpc-model-fallback-prompt.d.ts.map +1 -0
  978. package/dist/modes/rpc/rpc-model-fallback-prompt.js +11 -0
  979. package/dist/modes/rpc/rpc-model-fallback-prompt.js.map +1 -0
  980. package/dist/modes/rpc/rpc-oauth-client.d.ts +22 -0
  981. package/dist/modes/rpc/rpc-oauth-client.d.ts.map +1 -0
  982. package/dist/modes/rpc/rpc-oauth-client.js +74 -0
  983. package/dist/modes/rpc/rpc-oauth-client.js.map +1 -0
  984. package/dist/modes/rpc/rpc-oauth-interaction.d.ts +9 -0
  985. package/dist/modes/rpc/rpc-oauth-interaction.d.ts.map +1 -0
  986. package/dist/modes/rpc/rpc-oauth-interaction.js +49 -0
  987. package/dist/modes/rpc/rpc-oauth-interaction.js.map +1 -0
  988. package/dist/modes/rpc/rpc-output-buffer.d.ts +2 -1
  989. package/dist/modes/rpc/rpc-output-buffer.d.ts.map +1 -1
  990. package/dist/modes/rpc/rpc-output-buffer.js +4 -39
  991. package/dist/modes/rpc/rpc-output-buffer.js.map +1 -1
  992. package/dist/modes/rpc/rpc-provider-auth.d.ts +23 -0
  993. package/dist/modes/rpc/rpc-provider-auth.d.ts.map +1 -0
  994. package/dist/modes/rpc/rpc-provider-auth.js +145 -0
  995. package/dist/modes/rpc/rpc-provider-auth.js.map +1 -0
  996. package/dist/modes/rpc/rpc-responses.d.ts +0 -1
  997. package/dist/modes/rpc/rpc-responses.d.ts.map +1 -1
  998. package/dist/modes/rpc/rpc-responses.js +0 -14
  999. package/dist/modes/rpc/rpc-responses.js.map +1 -1
  1000. package/dist/modes/rpc/rpc-types.d.ts +83 -27
  1001. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  1002. package/dist/modes/rpc/rpc-types.js.map +1 -1
  1003. package/dist/utils/clipboard.d.ts.map +1 -1
  1004. package/dist/utils/clipboard.js +21 -8
  1005. package/dist/utils/clipboard.js.map +1 -1
  1006. package/dist/utils/version-check.d.ts.map +1 -1
  1007. package/dist/utils/version-check.js +3 -1
  1008. package/dist/utils/version-check.js.map +1 -1
  1009. package/docs/changelog.mdx +12 -1
  1010. package/docs/compaction.md +101 -18
  1011. package/docs/custom-provider.md +13 -4
  1012. package/docs/docs.json +1 -0
  1013. package/docs/environment-variables.md +37 -0
  1014. package/docs/extensions.md +45 -9
  1015. package/docs/index.md +1 -0
  1016. package/docs/intercom.md +1 -1
  1017. package/docs/json.md +4 -4
  1018. package/docs/keybindings.md +4 -2
  1019. package/docs/llama-cpp.md +3 -1
  1020. package/docs/models.md +29 -43
  1021. package/docs/providers.md +18 -24
  1022. package/docs/quickstart.md +19 -16
  1023. package/docs/rpc.md +38 -85
  1024. package/docs/sdk.md +15 -22
  1025. package/docs/session-format.md +2 -15
  1026. package/docs/sessions.md +1 -1
  1027. package/docs/settings.md +10 -15
  1028. package/docs/skills.md +8 -0
  1029. package/docs/subagents.md +17 -9
  1030. package/docs/themes.md +10 -1
  1031. package/docs/tui.md +10 -5
  1032. package/docs/usage.md +21 -2
  1033. package/docs/windows.md +1 -1
  1034. package/docs/workflows.md +1096 -518
  1035. package/examples/extensions/README.md +1 -1
  1036. package/examples/extensions/handoff.ts +8 -1
  1037. package/examples/extensions/message-renderer.ts +2 -2
  1038. package/examples/extensions/summarize.ts +3 -0
  1039. package/examples/extensions/working-indicator.ts +2 -2
  1040. package/npm-shrinkwrap.json +40 -46
  1041. package/package.json +9 -7
  1042. package/dist/builtin/cursor/CHANGELOG.md +0 -281
  1043. package/dist/builtin/cursor/LICENSE +0 -26
  1044. package/dist/builtin/cursor/README.md +0 -24
  1045. package/dist/builtin/cursor/index.ts +0 -9
  1046. package/dist/builtin/cursor/package.json +0 -47
  1047. package/dist/builtin/cursor/src/auth.ts +0 -352
  1048. package/dist/builtin/cursor/src/catalog-cache.ts +0 -155
  1049. package/dist/builtin/cursor/src/config.ts +0 -123
  1050. package/dist/builtin/cursor/src/conversation-state.ts +0 -135
  1051. package/dist/builtin/cursor/src/cursor-models-raw.json +0 -412
  1052. package/dist/builtin/cursor/src/model-mapper.ts +0 -369
  1053. package/dist/builtin/cursor/src/model-reference.ts +0 -282
  1054. package/dist/builtin/cursor/src/models.ts +0 -54
  1055. package/dist/builtin/cursor/src/native-loader.ts +0 -71
  1056. package/dist/builtin/cursor/src/proto/README.md +0 -34
  1057. package/dist/builtin/cursor/src/proto/agent_pb.ts +0 -15294
  1058. package/dist/builtin/cursor/src/proto/protobuf-codec-base64.ts +0 -22
  1059. package/dist/builtin/cursor/src/proto/protobuf-codec-json.ts +0 -44
  1060. package/dist/builtin/cursor/src/proto/protobuf-codec-request.ts +0 -311
  1061. package/dist/builtin/cursor/src/proto/protobuf-codec-wire.ts +0 -248
  1062. package/dist/builtin/cursor/src/proto/protobuf-codec.ts +0 -200
  1063. package/dist/builtin/cursor/src/provider.ts +0 -301
  1064. package/dist/builtin/cursor/src/stream.ts +0 -494
  1065. package/dist/builtin/cursor/src/transport-errors.ts +0 -74
  1066. package/dist/builtin/cursor/src/transport-frame.ts +0 -56
  1067. package/dist/builtin/cursor/src/transport-http2.ts +0 -122
  1068. package/dist/builtin/cursor/src/transport-native-client.ts +0 -161
  1069. package/dist/builtin/cursor/src/transport-run-stream.ts +0 -188
  1070. package/dist/builtin/cursor/src/transport-timeouts.ts +0 -87
  1071. package/dist/builtin/cursor/src/transport-types.ts +0 -143
  1072. package/dist/builtin/cursor/src/transport.ts +0 -26
  1073. package/dist/builtin/workflows/builtin/deep-research-codebase-runner.ts +0 -492
  1074. package/dist/builtin/workflows/builtin/deep-research-codebase-utils.ts +0 -383
  1075. package/dist/builtin/workflows/builtin/deep-research-codebase.d.ts +0 -35
  1076. package/dist/builtin/workflows/builtin/deep-research-codebase.ts +0 -47
  1077. package/dist/builtin/workflows/skills/impeccable/reference/brand.md +0 -108
  1078. package/dist/builtin/workflows/skills/impeccable/reference/codex.md +0 -105
  1079. package/dist/builtin/workflows/skills/impeccable/reference/interaction-design.md +0 -189
  1080. package/dist/builtin/workflows/skills/impeccable/scripts/hook-before-edit.mjs +0 -516
  1081. package/dist/core/context-window.d.ts +0 -54
  1082. package/dist/core/context-window.d.ts.map +0 -1
  1083. package/dist/core/context-window.js +0 -110
  1084. package/dist/core/context-window.js.map +0 -1
  1085. package/dist/core/copilot-anthropic-sse-repair.d.ts +0 -23
  1086. package/dist/core/copilot-anthropic-sse-repair.d.ts.map +0 -1
  1087. package/dist/core/copilot-anthropic-sse-repair.js +0 -340
  1088. package/dist/core/copilot-anthropic-sse-repair.js.map +0 -1
  1089. package/dist/core/copilot-errors.d.ts +0 -9
  1090. package/dist/core/copilot-errors.d.ts.map +0 -1
  1091. package/dist/core/copilot-errors.js +0 -32
  1092. package/dist/core/copilot-errors.js.map +0 -1
  1093. package/dist/core/copilot-gemini-payload-sanitizer.d.ts +0 -72
  1094. package/dist/core/copilot-gemini-payload-sanitizer.d.ts.map +0 -1
  1095. package/dist/core/copilot-gemini-payload-sanitizer.js +0 -296
  1096. package/dist/core/copilot-gemini-payload-sanitizer.js.map +0 -1
  1097. package/dist/core/copilot-gemini-reasoning.d.ts +0 -126
  1098. package/dist/core/copilot-gemini-reasoning.d.ts.map +0 -1
  1099. package/dist/core/copilot-gemini-reasoning.js +0 -265
  1100. package/dist/core/copilot-gemini-reasoning.js.map +0 -1
  1101. package/dist/core/copilot-gemini-tool-arguments.d.ts +0 -42
  1102. package/dist/core/copilot-gemini-tool-arguments.d.ts.map +0 -1
  1103. package/dist/core/copilot-gemini-tool-arguments.js +0 -159
  1104. package/dist/core/copilot-gemini-tool-arguments.js.map +0 -1
  1105. package/dist/core/copilot-hosts.d.ts +0 -12
  1106. package/dist/core/copilot-hosts.d.ts.map +0 -1
  1107. package/dist/core/copilot-hosts.js +0 -33
  1108. package/dist/core/copilot-hosts.js.map +0 -1
  1109. package/dist/core/copilot-model-catalog.d.ts +0 -114
  1110. package/dist/core/copilot-model-catalog.d.ts.map +0 -1
  1111. package/dist/core/copilot-model-catalog.js +0 -392
  1112. package/dist/core/copilot-model-catalog.js.map +0 -1
  1113. package/dist/core/copilot-model-static-fallbacks.d.ts +0 -43
  1114. package/dist/core/copilot-model-static-fallbacks.d.ts.map +0 -1
  1115. package/dist/core/copilot-model-static-fallbacks.js +0 -50
  1116. package/dist/core/copilot-model-static-fallbacks.js.map +0 -1
  1117. package/dist/core/copilot-model-synthesis.d.ts +0 -10
  1118. package/dist/core/copilot-model-synthesis.d.ts.map +0 -1
  1119. package/dist/core/copilot-model-synthesis.js +0 -91
  1120. package/dist/core/copilot-model-synthesis.js.map +0 -1
  1121. package/dist/modes/interactive/components/context-window-selector.d.ts +0 -53
  1122. package/dist/modes/interactive/components/context-window-selector.d.ts.map +0 -1
  1123. package/dist/modes/interactive/components/context-window-selector.js +0 -136
  1124. package/dist/modes/interactive/components/context-window-selector.js.map +0 -1
  1125. package/dist/modes/rpc/bounded-writer.d.ts +0 -27
  1126. package/dist/modes/rpc/bounded-writer.d.ts.map +0 -1
  1127. package/dist/modes/rpc/bounded-writer.js.map +0 -1
@@ -1,265 +0,0 @@
1
- import { maybeRepairCopilotAnthropicMessagesResponse } from "./copilot-anthropic-sse-repair.js";
2
- import { isCopilotApiHost } from "./copilot-hosts.js";
3
- import { isCopilotGeminiModel } from "./copilot-gemini-payload-sanitizer.js";
4
- /** OpenRouter-style encrypted reasoning detail the pi-ai client round-trips. */
5
- const REASONING_ENCRYPTED_TYPE = "reasoning.encrypted";
6
- function isPlainObject(value) {
7
- return typeof value === "object" && value !== null && !Array.isArray(value);
8
- }
9
- /**
10
- * Inject `reasoning_details` into a parsed CAPI Gemini streaming chunk so the
11
- * pi-ai OpenAI-completions parser captures the Gemini thought signature.
12
- *
13
- * For each `choices[].delta` that carries a non-empty `reasoning_opaque` string
14
- * and a `tool_calls[]` entry with an `id`, adds a single
15
- * `reasoning_details: [{ type: "reasoning.encrypted", id, data: <opaque> }]`
16
- * entry keyed by that tool-call id. Returns whether the chunk was mutated.
17
- *
18
- * No-op when the delta already has `reasoning_details`, has no id-bearing tool
19
- * call (e.g. argument-continuation deltas or pure-text thought chunks), or has
20
- * no `reasoning_opaque`.
21
- */
22
- export function injectCopilotGeminiReasoningDetails(chunk) {
23
- if (!isPlainObject(chunk))
24
- return false;
25
- const choices = chunk.choices;
26
- if (!Array.isArray(choices))
27
- return false;
28
- let mutated = false;
29
- for (const choice of choices) {
30
- if (!isPlainObject(choice))
31
- continue;
32
- const delta = choice.delta;
33
- if (!isPlainObject(delta))
34
- continue;
35
- const opaque = delta.reasoning_opaque;
36
- if (typeof opaque !== "string" || opaque.length === 0)
37
- continue;
38
- // Already carries the encrypted detail (don't double-inject / clobber).
39
- if (Array.isArray(delta.reasoning_details) && delta.reasoning_details.length > 0) {
40
- continue;
41
- }
42
- const toolCalls = delta.tool_calls;
43
- if (!Array.isArray(toolCalls))
44
- continue;
45
- const idBearing = toolCalls.find((call) => isPlainObject(call) && typeof call.id === "string" && call.id.length > 0);
46
- if (!idBearing)
47
- continue;
48
- delta.reasoning_details = [
49
- { type: REASONING_ENCRYPTED_TYPE, id: idBearing.id, data: opaque },
50
- ];
51
- mutated = true;
52
- }
53
- return mutated;
54
- }
55
- /**
56
- * Rewrite the JSON payload of a single SSE `data:` line. Returns the original
57
- * string unchanged when it is not a Gemini chunk that needs a thought signature
58
- * bridged, or when parsing fails (fail-open: never corrupt the stream).
59
- */
60
- export function rewriteCopilotGeminiSseData(dataPayload) {
61
- // Cheap gate: only chunks that actually carry a thought signature are touched.
62
- if (!dataPayload.includes("reasoning_opaque"))
63
- return dataPayload;
64
- let parsed;
65
- try {
66
- parsed = JSON.parse(dataPayload);
67
- }
68
- catch {
69
- return dataPayload;
70
- }
71
- if (!injectCopilotGeminiReasoningDetails(parsed))
72
- return dataPayload;
73
- return JSON.stringify(parsed);
74
- }
75
- /** Rewrite one SSE line, preserving a trailing carriage return when present. */
76
- function rewriteSseLine(line) {
77
- const hasCr = line.endsWith("\r");
78
- const core = hasCr ? line.slice(0, -1) : line;
79
- if (!core.startsWith("data:"))
80
- return line;
81
- const payload = core.slice("data:".length).trimStart();
82
- if (payload.length === 0 || payload === "[DONE]")
83
- return line;
84
- const rewritten = rewriteCopilotGeminiSseData(payload);
85
- if (rewritten === payload)
86
- return line;
87
- const rebuilt = `data: ${rewritten}`;
88
- return hasCr ? `${rebuilt}\r` : rebuilt;
89
- }
90
- /**
91
- * Wrap a CAPI Gemini SSE byte stream so `reasoning_opaque` is bridged into
92
- * `reasoning_details`. Buffers across chunk boundaries and rewrites whole lines
93
- * only; bytes that are not affected pass through unchanged.
94
- *
95
- * Implemented as a `ReadableStream` over the source reader (rather than a
96
- * `TransformStream` piped via `pipeThrough`) so the transform pulls lazily and
97
- * propagates cancellation to the upstream body.
98
- */
99
- export function createCopilotGeminiSseStream(source) {
100
- const reader = source.getReader();
101
- const decoder = new TextDecoder();
102
- const encoder = new TextEncoder();
103
- let buffer = "";
104
- return new ReadableStream({
105
- async pull(controller) {
106
- // Loop until we emit at least one chunk or close, so a read that yields no
107
- // complete line still makes progress without relying on the runtime to
108
- // re-invoke pull after a no-enqueue return.
109
- for (;;) {
110
- const { done, value } = await reader.read();
111
- if (done) {
112
- buffer += decoder.decode();
113
- if (buffer.length > 0) {
114
- controller.enqueue(encoder.encode(rewriteSseLine(buffer)));
115
- buffer = "";
116
- }
117
- controller.close();
118
- return;
119
- }
120
- buffer += decoder.decode(value, { stream: true });
121
- let newlineIndex = buffer.indexOf("\n");
122
- let out = "";
123
- while (newlineIndex !== -1) {
124
- const line = buffer.slice(0, newlineIndex);
125
- buffer = buffer.slice(newlineIndex + 1);
126
- out += `${rewriteSseLine(line)}\n`;
127
- newlineIndex = buffer.indexOf("\n");
128
- }
129
- if (out.length > 0) {
130
- controller.enqueue(encoder.encode(out));
131
- return;
132
- }
133
- }
134
- },
135
- cancel(reason) {
136
- return reader.cancel(reason);
137
- },
138
- });
139
- }
140
- /**
141
- * Convert the `reasoning_details` the pi-ai client re-emits on replayed
142
- * assistant messages back into the single `reasoning_opaque` field CAPI reads.
143
- *
144
- * For GitHub Copilot Gemini payloads, each assistant message that carries a
145
- * `reasoning_details` entry of `type: "reasoning.encrypted"` has its `data`
146
- * (the original CAPI thought-signature blob) promoted to `reasoning_opaque`,
147
- * and the now-redundant `reasoning_details` removed. No-op for every other
148
- * provider/model and for payloads without such messages.
149
- */
150
- export function restoreCopilotGeminiReasoningOpaque(payload, model) {
151
- if (!isCopilotGeminiModel(model))
152
- return payload;
153
- if (!isPlainObject(payload))
154
- return payload;
155
- const payloadObject = payload;
156
- const messages = payloadObject.messages;
157
- if (!Array.isArray(messages))
158
- return payload;
159
- let mutated = false;
160
- const nextMessages = messages.map((message) => {
161
- if (!isPlainObject(message) || message.role !== "assistant")
162
- return message;
163
- const details = message.reasoning_details;
164
- if (!Array.isArray(details) || details.length === 0)
165
- return message;
166
- const encrypted = details.find((detail) => isPlainObject(detail) &&
167
- detail.type === REASONING_ENCRYPTED_TYPE &&
168
- typeof detail.data === "string" &&
169
- detail.data.length > 0);
170
- if (!encrypted)
171
- return message;
172
- mutated = true;
173
- const { reasoning_details: _omitted, ...rest } = message;
174
- return { ...rest, reasoning_opaque: encrypted.data };
175
- });
176
- if (!mutated)
177
- return payload;
178
- return { ...payloadObject, messages: nextMessages };
179
- }
180
- /** Resolve the request URL string from a `fetch` input argument. */
181
- function resolveRequestUrl(input) {
182
- if (typeof input === "string")
183
- return input;
184
- if (input instanceof URL)
185
- return input.href;
186
- if (typeof input === "object" && input !== null && "url" in input) {
187
- const url = input.url;
188
- if (typeof url === "string")
189
- return url;
190
- }
191
- return undefined;
192
- }
193
- /**
194
- * Rewrite a streaming CAPI Gemini response so its SSE body bridges
195
- * `reasoning_opaque` into `reasoning_details`. Returns the original response
196
- * untouched for non-Copilot hosts, non-event-stream responses, or bodyless
197
- * responses, keeping the blast radius to streaming CAPI Gemini turns only.
198
- */
199
- export function maybeRewriteCopilotGeminiResponse(url, response) {
200
- if (!url || !isCopilotApiHost(url))
201
- return response;
202
- const contentType = response.headers.get("content-type") ?? "";
203
- if (!contentType.includes("text/event-stream"))
204
- return response;
205
- if (!response.body)
206
- return response;
207
- const transformed = createCopilotGeminiSseStream(response.body);
208
- return new Response(transformed, {
209
- status: response.status,
210
- statusText: response.statusText,
211
- headers: response.headers,
212
- });
213
- }
214
- /**
215
- * Apply Copilot response-body transforms before pi-ai parses streamed provider
216
- * output. Anthropic Messages repair gets first refusal for `/v1/messages`
217
- * streams; other Copilot event streams keep the existing Gemini reasoning bridge.
218
- */
219
- export function maybeRewriteCopilotProviderResponse(url, response) {
220
- const anthropicRepaired = maybeRepairCopilotAnthropicMessagesResponse(url, response);
221
- if (anthropicRepaired !== response)
222
- return anthropicRepaired;
223
- return maybeRewriteCopilotGeminiResponse(url, response);
224
- }
225
- let originalFetch;
226
- /**
227
- * Install a `globalThis.fetch` wrapper that applies Copilot-only stream
228
- * compatibility shims before pi-ai parses provider output. Currently this
229
- * includes the Gemini `reasoning_opaque` bridge and the Anthropic Messages
230
- * terminal `message_stop` repair. Idempotent.
231
- *
232
- * SDK clients resolve `globalThis.fetch` at client-construction time, and a new
233
- * client is built per request, so wrapping the global before the first request
234
- * is reliably picked up. Non-Copilot hosts and non-event-stream responses are
235
- * returned untouched by the underlying shims.
236
- */
237
- export function installCopilotResponseInterceptor() {
238
- if (originalFetch)
239
- return;
240
- if (typeof globalThis.fetch !== "function")
241
- return;
242
- const base = globalThis.fetch;
243
- originalFetch = base;
244
- const boundFetch = base.bind(globalThis);
245
- const wrapped = (async (input, init) => {
246
- const response = await boundFetch(input, init);
247
- try {
248
- return maybeRewriteCopilotProviderResponse(resolveRequestUrl(input), response);
249
- }
250
- catch {
251
- return response;
252
- }
253
- });
254
- // Preserve `fetch.preconnect` so the wrapper remains a drop-in replacement.
255
- const preconnect = base.preconnect;
256
- if (typeof preconnect === "function") {
257
- wrapped.preconnect = preconnect.bind(globalThis);
258
- }
259
- globalThis.fetch = wrapped;
260
- }
261
- /** Backward-compatible name for the original Gemini-only interceptor export. */
262
- export function installCopilotGeminiReasoningInterceptor() {
263
- installCopilotResponseInterceptor();
264
- }
265
- //# sourceMappingURL=copilot-gemini-reasoning.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"copilot-gemini-reasoning.js","sourceRoot":"","sources":["../../src/core/copilot-gemini-reasoning.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2CAA2C,EAAE,MAAM,mCAAmC,CAAC;AAChG,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAyD7E,gFAAgF;AAChF,MAAM,wBAAwB,GAAG,qBAAqB,CAAC;AAEvD,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,mCAAmC,CAAC,KAAgB;IAClE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IAE1C,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;YAAE,SAAS;QACrC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;YAAE,SAAS;QAEpC,MAAM,MAAM,GAAG,KAAK,CAAC,gBAAgB,CAAC;QACtC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAEhE,wEAAwE;QACxE,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjF,SAAS;QACX,CAAC;QAED,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;YAAE,SAAS;QACxC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAC9B,CAAC,IAAI,EAAsB,EAAE,CAC3B,aAAa,CAAC,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,IAAI,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAC3E,CAAC;QACF,IAAI,CAAC,SAAS;YAAE,SAAS;QAEzB,KAAK,CAAC,iBAAiB,GAAG;YACxB,EAAE,IAAI,EAAE,wBAAwB,EAAE,EAAE,EAAE,SAAS,CAAC,EAAY,EAAE,IAAI,EAAE,MAAM,EAAE;SAC7E,CAAC;QACF,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CAAC,WAAmB;IAC7D,+EAA+E;IAC/E,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QAAE,OAAO,WAAW,CAAC;IAClE,IAAI,MAAiB,CAAC;IACtB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAc,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,IAAI,CAAC,mCAAmC,CAAC,MAAM,CAAC;QAAE,OAAO,WAAW,CAAC;IACrE,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC;AAED,gFAAgF;AAChF,SAAS,cAAc,CAAC,IAAY;IAClC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9C,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC;IACvD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC9D,MAAM,SAAS,GAAG,2BAA2B,CAAC,OAAO,CAAC,CAAC;IACvD,IAAI,SAAS,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IACvC,MAAM,OAAO,GAAG,SAAS,SAAS,EAAE,CAAC;IACrC,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;AAC1C,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,4BAA4B,CAC1C,MAAkC;IAElC,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,OAAO,IAAI,cAAc,CAAa;QACpC,KAAK,CAAC,IAAI,CAAC,UAAU;YACnB,2EAA2E;YAC3E,uEAAuE;YACvE,4CAA4C;YAC5C,SAAS,CAAC;gBACR,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC5C,IAAI,IAAI,EAAE,CAAC;oBACT,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;oBAC3B,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACtB,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;wBAC3D,MAAM,GAAG,EAAE,CAAC;oBACd,CAAC;oBACD,UAAU,CAAC,KAAK,EAAE,CAAC;oBACnB,OAAO;gBACT,CAAC;gBACD,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;gBAClD,IAAI,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACxC,IAAI,GAAG,GAAG,EAAE,CAAC;gBACb,OAAO,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;oBAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;oBAC3C,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;oBACxC,GAAG,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;oBACnC,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACtC,CAAC;gBACD,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACnB,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;oBACxC,OAAO;gBACT,CAAC;YACH,CAAC;QACH,CAAC;QACD,MAAM,CAAC,MAAM;YACX,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,mCAAmC,CACjD,OAAgB,EAChB,KAAkD;IAElD,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IACjD,IAAI,CAAC,aAAa,CAAC,OAAoB,CAAC;QAAE,OAAO,OAAO,CAAC;IACzD,MAAM,aAAa,GAAG,OAAqB,CAAC;IAC5C,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC;IACxC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;QAAE,OAAO,OAAO,CAAC;IAE7C,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QAC5C,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW;YAAE,OAAO,OAAO,CAAC;QAC5E,MAAM,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC;QAC1C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,OAAO,CAAC;QACpE,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAC5B,CAAC,MAAM,EAAwB,EAAE,CAC/B,aAAa,CAAC,MAAM,CAAC;YACrB,MAAM,CAAC,IAAI,KAAK,wBAAwB;YACxC,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;YAC/B,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CACzB,CAAC;QACF,IAAI,CAAC,SAAS;YAAE,OAAO,OAAO,CAAC;QAC/B,OAAO,GAAG,IAAI,CAAC;QACf,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;QACzD,OAAO,EAAE,GAAG,IAAI,EAAE,gBAAgB,EAAE,SAAS,CAAC,IAAc,EAAE,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,OAAO;QAAE,OAAO,OAAO,CAAC;IAC7B,OAAO,EAAE,GAAG,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;AACtD,CAAC;AAED,oEAAoE;AACpE,SAAS,iBAAiB,CAAC,KAAkC;IAC3D,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,KAAK,YAAY,GAAG;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC;IAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC;QAClE,MAAM,GAAG,GAAI,KAA2B,CAAC,GAAG,CAAC;QAC7C,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,GAAG,CAAC;IAC1C,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iCAAiC,CAC/C,GAAuB,EACvB,QAAkB;IAElB,IAAI,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;QAAE,OAAO,QAAQ,CAAC;IACpD,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IAC/D,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAAE,OAAO,QAAQ,CAAC;IAChE,IAAI,CAAC,QAAQ,CAAC,IAAI;QAAE,OAAO,QAAQ,CAAC;IACpC,MAAM,WAAW,GAAG,4BAA4B,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAChE,OAAO,IAAI,QAAQ,CAAC,WAAW,EAAE;QAC/B,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,OAAO,EAAE,QAAQ,CAAC,OAAO;KAC1B,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mCAAmC,CACjD,GAAuB,EACvB,QAAkB;IAElB,MAAM,iBAAiB,GAAG,2CAA2C,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACrF,IAAI,iBAAiB,KAAK,QAAQ;QAAE,OAAO,iBAAiB,CAAC;IAC7D,OAAO,iCAAiC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAC1D,CAAC;AAED,IAAI,aAAuC,CAAC;AAE5C;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iCAAiC;IAC/C,IAAI,aAAa;QAAE,OAAO;IAC1B,IAAI,OAAO,UAAU,CAAC,KAAK,KAAK,UAAU;QAAE,OAAO;IACnD,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC;IAC9B,aAAa,GAAG,IAAI,CAAC;IACrB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAEzC,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACrC,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC;YACH,OAAO,mCAAmC,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC;QACjF,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC,CAAiB,CAAC;IAEnB,4EAA4E;IAC5E,MAAM,UAAU,GAAI,IAAiC,CAAC,UAAU,CAAC;IACjE,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE,CAAC;QACpC,OAAoC,CAAC,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACjF,CAAC;IAED,UAAU,CAAC,KAAK,GAAG,OAAO,CAAC;AAC7B,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,wCAAwC;IACtD,iCAAiC,EAAE,CAAC;AACtC,CAAC","sourcesContent":["import type { Api, Model } from \"@earendil-works/pi-ai/compat\";\nimport { maybeRepairCopilotAnthropicMessagesResponse } from \"./copilot-anthropic-sse-repair.ts\";\nimport { isCopilotApiHost } from \"./copilot-hosts.ts\";\nimport { isCopilotGeminiModel } from \"./copilot-gemini-payload-sanitizer.ts\";\n\n/**\n * Round-trips GitHub Copilot Gemini \"thought signatures\" so multi-turn tool use\n * does not silently die after the first tool call.\n *\n * Why this exists\n * ---------------\n * `github-copilot` Gemini models (e.g. `gemini-3.1-pro-preview`) are served\n * through Copilot's CAPI gateway, which proxies to Google's GenAI API. Gemini\n * is a thinking model: when it emits a function/tool call it also returns an\n * opaque **thought signature** that must be sent back, verbatim, on the next\n * request or Gemini refuses to continue the reasoning chain.\n *\n * CAPI carries that signature in a non-standard OpenAI-completions field named\n * **`reasoning_opaque`** (an encrypted blob) on the assistant message / streamed\n * delta, and on replay it reads the same `reasoning_opaque` back off the\n * assistant message and re-attaches the signature to each Gemini function-call\n * part (keyed by `tool_call.id`). The underlying OpenAI-completions client\n * (`@earendil-works/pi-ai`) does not understand `reasoning_opaque`; it captures\n * thought signatures only from the OpenRouter-style\n * `reasoning_details: [{ type: \"reasoning.encrypted\", id, data }]` shape, which\n * CAPI never emits. So the real Gemini thought signature was being dropped on\n * the way in and never replayed on the way out.\n *\n * With the signature missing, CAPI substitutes the sentinel\n * `skip_thought_signature_validator` on the first replayed function call, and\n * Gemini responds with an empty candidate / `finish_reason: \"stop\"` and zero\n * output tokens — the harness sees a degenerate empty completion, retries with\n * the same signature-less history, and eventually gives up: \"Gemini just stops\n * responding.\"\n *\n * What this does\n * --------------\n * Two gated, self-contained transforms bridge CAPI's `reasoning_opaque` to the\n * `reasoning_details` mechanism the client already round-trips:\n *\n * - **Inbound** ({@link rewriteCopilotGeminiSseData} via\n * {@link createCopilotGeminiSseStream}): rewrites the CAPI Gemini SSE\n * stream so each streamed delta that carries both `reasoning_opaque` and a\n * `tool_calls[].id` gains a\n * `reasoning_details: [{ type: \"reasoning.encrypted\", id, data: <opaque> }]`\n * entry. The client then stores it as the tool call's `thoughtSignature`.\n * CAPI confirms `reasoning_opaque` rides on the same streamed delta as the\n * first (id-bearing) tool-call chunk, so the association is exact.\n * - **Outbound** ({@link restoreCopilotGeminiReasoningOpaque} from the\n * `onPayload` hook): converts the `reasoning_details` the client re-emits on\n * replayed assistant messages back into a single `reasoning_opaque` field on\n * that assistant message, which is the only shape CAPI reads.\n *\n * Both transforms are gated to GitHub Copilot Gemini and are no-ops for every\n * other provider/model (and for Gemini turns that carry no thought signature).\n */\n\ntype JsonObject = { [key: string]: JsonValue };\ntype JsonValue = string | number | boolean | null | JsonValue[] | JsonObject;\n\n/** OpenRouter-style encrypted reasoning detail the pi-ai client round-trips. */\nconst REASONING_ENCRYPTED_TYPE = \"reasoning.encrypted\";\n\nfunction isPlainObject(value: unknown): value is JsonObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/**\n * Inject `reasoning_details` into a parsed CAPI Gemini streaming chunk so the\n * pi-ai OpenAI-completions parser captures the Gemini thought signature.\n *\n * For each `choices[].delta` that carries a non-empty `reasoning_opaque` string\n * and a `tool_calls[]` entry with an `id`, adds a single\n * `reasoning_details: [{ type: \"reasoning.encrypted\", id, data: <opaque> }]`\n * entry keyed by that tool-call id. Returns whether the chunk was mutated.\n *\n * No-op when the delta already has `reasoning_details`, has no id-bearing tool\n * call (e.g. argument-continuation deltas or pure-text thought chunks), or has\n * no `reasoning_opaque`.\n */\nexport function injectCopilotGeminiReasoningDetails(chunk: JsonValue): boolean {\n if (!isPlainObject(chunk)) return false;\n const choices = chunk.choices;\n if (!Array.isArray(choices)) return false;\n\n let mutated = false;\n for (const choice of choices) {\n if (!isPlainObject(choice)) continue;\n const delta = choice.delta;\n if (!isPlainObject(delta)) continue;\n\n const opaque = delta.reasoning_opaque;\n if (typeof opaque !== \"string\" || opaque.length === 0) continue;\n\n // Already carries the encrypted detail (don't double-inject / clobber).\n if (Array.isArray(delta.reasoning_details) && delta.reasoning_details.length > 0) {\n continue;\n }\n\n const toolCalls = delta.tool_calls;\n if (!Array.isArray(toolCalls)) continue;\n const idBearing = toolCalls.find(\n (call): call is JsonObject =>\n isPlainObject(call) && typeof call.id === \"string\" && call.id.length > 0,\n );\n if (!idBearing) continue;\n\n delta.reasoning_details = [\n { type: REASONING_ENCRYPTED_TYPE, id: idBearing.id as string, data: opaque },\n ];\n mutated = true;\n }\n return mutated;\n}\n\n/**\n * Rewrite the JSON payload of a single SSE `data:` line. Returns the original\n * string unchanged when it is not a Gemini chunk that needs a thought signature\n * bridged, or when parsing fails (fail-open: never corrupt the stream).\n */\nexport function rewriteCopilotGeminiSseData(dataPayload: string): string {\n // Cheap gate: only chunks that actually carry a thought signature are touched.\n if (!dataPayload.includes(\"reasoning_opaque\")) return dataPayload;\n let parsed: JsonValue;\n try {\n parsed = JSON.parse(dataPayload) as JsonValue;\n } catch {\n return dataPayload;\n }\n if (!injectCopilotGeminiReasoningDetails(parsed)) return dataPayload;\n return JSON.stringify(parsed);\n}\n\n/** Rewrite one SSE line, preserving a trailing carriage return when present. */\nfunction rewriteSseLine(line: string): string {\n const hasCr = line.endsWith(\"\\r\");\n const core = hasCr ? line.slice(0, -1) : line;\n if (!core.startsWith(\"data:\")) return line;\n const payload = core.slice(\"data:\".length).trimStart();\n if (payload.length === 0 || payload === \"[DONE]\") return line;\n const rewritten = rewriteCopilotGeminiSseData(payload);\n if (rewritten === payload) return line;\n const rebuilt = `data: ${rewritten}`;\n return hasCr ? `${rebuilt}\\r` : rebuilt;\n}\n\n/**\n * Wrap a CAPI Gemini SSE byte stream so `reasoning_opaque` is bridged into\n * `reasoning_details`. Buffers across chunk boundaries and rewrites whole lines\n * only; bytes that are not affected pass through unchanged.\n *\n * Implemented as a `ReadableStream` over the source reader (rather than a\n * `TransformStream` piped via `pipeThrough`) so the transform pulls lazily and\n * propagates cancellation to the upstream body.\n */\nexport function createCopilotGeminiSseStream(\n source: ReadableStream<Uint8Array>,\n): ReadableStream<Uint8Array> {\n const reader = source.getReader();\n const decoder = new TextDecoder();\n const encoder = new TextEncoder();\n let buffer = \"\";\n\n return new ReadableStream<Uint8Array>({\n async pull(controller) {\n // Loop until we emit at least one chunk or close, so a read that yields no\n // complete line still makes progress without relying on the runtime to\n // re-invoke pull after a no-enqueue return.\n for (;;) {\n const { done, value } = await reader.read();\n if (done) {\n buffer += decoder.decode();\n if (buffer.length > 0) {\n controller.enqueue(encoder.encode(rewriteSseLine(buffer)));\n buffer = \"\";\n }\n controller.close();\n return;\n }\n buffer += decoder.decode(value, { stream: true });\n let newlineIndex = buffer.indexOf(\"\\n\");\n let out = \"\";\n while (newlineIndex !== -1) {\n const line = buffer.slice(0, newlineIndex);\n buffer = buffer.slice(newlineIndex + 1);\n out += `${rewriteSseLine(line)}\\n`;\n newlineIndex = buffer.indexOf(\"\\n\");\n }\n if (out.length > 0) {\n controller.enqueue(encoder.encode(out));\n return;\n }\n }\n },\n cancel(reason) {\n return reader.cancel(reason);\n },\n });\n}\n\n/**\n * Convert the `reasoning_details` the pi-ai client re-emits on replayed\n * assistant messages back into the single `reasoning_opaque` field CAPI reads.\n *\n * For GitHub Copilot Gemini payloads, each assistant message that carries a\n * `reasoning_details` entry of `type: \"reasoning.encrypted\"` has its `data`\n * (the original CAPI thought-signature blob) promoted to `reasoning_opaque`,\n * and the now-redundant `reasoning_details` removed. No-op for every other\n * provider/model and for payloads without such messages.\n */\nexport function restoreCopilotGeminiReasoningOpaque(\n payload: unknown,\n model: Pick<Model<Api>, \"provider\" | \"api\" | \"id\">,\n): unknown {\n if (!isCopilotGeminiModel(model)) return payload;\n if (!isPlainObject(payload as JsonValue)) return payload;\n const payloadObject = payload as JsonObject;\n const messages = payloadObject.messages;\n if (!Array.isArray(messages)) return payload;\n\n let mutated = false;\n const nextMessages = messages.map((message) => {\n if (!isPlainObject(message) || message.role !== \"assistant\") return message;\n const details = message.reasoning_details;\n if (!Array.isArray(details) || details.length === 0) return message;\n const encrypted = details.find(\n (detail): detail is JsonObject =>\n isPlainObject(detail) &&\n detail.type === REASONING_ENCRYPTED_TYPE &&\n typeof detail.data === \"string\" &&\n detail.data.length > 0,\n );\n if (!encrypted) return message;\n mutated = true;\n const { reasoning_details: _omitted, ...rest } = message;\n return { ...rest, reasoning_opaque: encrypted.data as string };\n });\n\n if (!mutated) return payload;\n return { ...payloadObject, messages: nextMessages };\n}\n\n/** Resolve the request URL string from a `fetch` input argument. */\nfunction resolveRequestUrl(input: Parameters<typeof fetch>[0]): string | undefined {\n if (typeof input === \"string\") return input;\n if (input instanceof URL) return input.href;\n if (typeof input === \"object\" && input !== null && \"url\" in input) {\n const url = (input as { url?: unknown }).url;\n if (typeof url === \"string\") return url;\n }\n return undefined;\n}\n\n/**\n * Rewrite a streaming CAPI Gemini response so its SSE body bridges\n * `reasoning_opaque` into `reasoning_details`. Returns the original response\n * untouched for non-Copilot hosts, non-event-stream responses, or bodyless\n * responses, keeping the blast radius to streaming CAPI Gemini turns only.\n */\nexport function maybeRewriteCopilotGeminiResponse(\n url: string | undefined,\n response: Response,\n): Response {\n if (!url || !isCopilotApiHost(url)) return response;\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n if (!contentType.includes(\"text/event-stream\")) return response;\n if (!response.body) return response;\n const transformed = createCopilotGeminiSseStream(response.body);\n return new Response(transformed, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n}\n\n/**\n * Apply Copilot response-body transforms before pi-ai parses streamed provider\n * output. Anthropic Messages repair gets first refusal for `/v1/messages`\n * streams; other Copilot event streams keep the existing Gemini reasoning bridge.\n */\nexport function maybeRewriteCopilotProviderResponse(\n url: string | undefined,\n response: Response,\n): Response {\n const anthropicRepaired = maybeRepairCopilotAnthropicMessagesResponse(url, response);\n if (anthropicRepaired !== response) return anthropicRepaired;\n return maybeRewriteCopilotGeminiResponse(url, response);\n}\n\nlet originalFetch: typeof fetch | undefined;\n\n/**\n * Install a `globalThis.fetch` wrapper that applies Copilot-only stream\n * compatibility shims before pi-ai parses provider output. Currently this\n * includes the Gemini `reasoning_opaque` bridge and the Anthropic Messages\n * terminal `message_stop` repair. Idempotent.\n *\n * SDK clients resolve `globalThis.fetch` at client-construction time, and a new\n * client is built per request, so wrapping the global before the first request\n * is reliably picked up. Non-Copilot hosts and non-event-stream responses are\n * returned untouched by the underlying shims.\n */\nexport function installCopilotResponseInterceptor(): void {\n if (originalFetch) return;\n if (typeof globalThis.fetch !== \"function\") return;\n const base = globalThis.fetch;\n originalFetch = base;\n const boundFetch = base.bind(globalThis);\n\n const wrapped = (async (input, init) => {\n const response = await boundFetch(input, init);\n try {\n return maybeRewriteCopilotProviderResponse(resolveRequestUrl(input), response);\n } catch {\n return response;\n }\n }) as typeof fetch;\n\n // Preserve `fetch.preconnect` so the wrapper remains a drop-in replacement.\n const preconnect = (base as { preconnect?: unknown }).preconnect;\n if (typeof preconnect === \"function\") {\n (wrapped as { preconnect?: unknown }).preconnect = preconnect.bind(globalThis);\n }\n\n globalThis.fetch = wrapped;\n}\n\n/** Backward-compatible name for the original Gemini-only interceptor export. */\nexport function installCopilotGeminiReasoningInterceptor(): void {\n installCopilotResponseInterceptor();\n}\n"]}
@@ -1,42 +0,0 @@
1
- import type { Api, Model } from "@earendil-works/pi-ai/compat";
2
- /**
3
- * Reconstruct flattened Gemini tool-call arguments into proper nested
4
- * arrays/objects. Returns the original reference unchanged when there is nothing
5
- * to reconstruct. Bracket-indexed keys are always reconstructed; purely dotted
6
- * keys are reconstructed only when the optional `schema` marks their head
7
- * segment as an object/array container property. Reconstruction (and its
8
- * prototype-pollution guard) is delegated to the shared canonical helper.
9
- */
10
- export declare function unflattenGeminiToolArguments(args: unknown, schema?: unknown): unknown;
11
- /**
12
- * If `model` is a GitHub Copilot Gemini model, normalize flattened tool-call
13
- * arguments; otherwise return them unchanged. Used to gate
14
- * {@link unflattenGeminiToolArguments} by model at tool-call time. The optional
15
- * `schema` is the tool's parameter schema, used to disambiguate dotted keys.
16
- */
17
- export declare function normalizeToolArgumentsForModel(args: unknown, model: Pick<Model<Api>, "provider" | "api" | "id"> | undefined, schema?: unknown): unknown;
18
- /**
19
- * Reconstruct flattened GitHub Copilot Gemini tool-call arguments on the
20
- * **outbound replay payload**, so prior assistant tool calls are sent back to
21
- * CAPI in the nested array/object shape Gemini originally produced.
22
- *
23
- * Why this exists
24
- * ---------------
25
- * {@link normalizeToolArgumentsForModel} only unflattens at tool *execution*
26
- * time; the persisted assistant message keeps the raw flattened arguments CAPI
27
- * delivered (for example `{ "edits[0].newText": "..." }`). When that message is
28
- * replayed on the next turn, CAPI parses those literal keys straight into the
29
- * Gemini `FunctionCall.Args`, producing a function call that does not match the
30
- * tool's declared schema (nor the structure Gemini signed). Gemini then ends
31
- * the turn with `MALFORMED_FUNCTION_CALL` / `UNEXPECTED_TOOL_CALL` / `OTHER`,
32
- * which CAPI surfaces as a bare `finish_reason: "error"` — so multi-turn tool
33
- * use dies one turn after any array/object tool call (such as `edit`).
34
- *
35
- * This rewrites each replayed assistant `tool_calls[].function.arguments` JSON
36
- * into the reconstructed nested shape (reusing {@link unflattenGeminiToolArguments}
37
- * with the tool's own parameter schema, looked up from the payload's `tools`),
38
- * fixing both new and already-persisted sessions. Gated to GitHub Copilot Gemini
39
- * models, fail-open on non-JSON arguments, and a no-op for well-formed args.
40
- */
41
- export declare function normalizeCopilotGeminiReplayToolArguments(payload: unknown, model: Pick<Model<Api>, "provider" | "api" | "id">): unknown;
42
- //# sourceMappingURL=copilot-gemini-tool-arguments.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"copilot-gemini-tool-arguments.d.ts","sourceRoot":"","sources":["../../src/core/copilot-gemini-tool-arguments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAkF/D;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAMrF;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,UAAU,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,SAAS,EAC9D,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAGT;AAoBD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,yCAAyC,CACvD,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,UAAU,GAAG,KAAK,GAAG,IAAI,CAAC,GACjD,OAAO,CA2CT"}
@@ -1,159 +0,0 @@
1
- import { isCopilotGeminiModel } from "./copilot-gemini-payload-sanitizer.js";
2
- import { unflattenArgumentsWithSchema } from "./flattened-tool-arguments.js";
3
- function isPlainObject(value) {
4
- return typeof value === "object" && value !== null && !Array.isArray(value);
5
- }
6
- function schemaTypeIncludes(schema, type) {
7
- if (schema.type === type)
8
- return true;
9
- return Array.isArray(schema.type) && schema.type.includes(type);
10
- }
11
- function isArraySchema(schema) {
12
- if (!isPlainObject(schema))
13
- return false;
14
- if (schemaTypeIncludes(schema, "array"))
15
- return true;
16
- if ("items" in schema && !schemaTypeIncludes(schema, "object"))
17
- return true;
18
- const union = schema.anyOf ?? schema.oneOf;
19
- return Array.isArray(union) && union.some((branch) => isArraySchema(branch));
20
- }
21
- function requiredArrayPropertyNames(schema) {
22
- if (!isPlainObject(schema))
23
- return [];
24
- const required = schema.required;
25
- const properties = schema.properties;
26
- if (!Array.isArray(required) || !isPlainObject(properties))
27
- return [];
28
- return required.filter((name) => (typeof name === "string" &&
29
- Object.hasOwn(properties, name) &&
30
- isArraySchema(properties[name])));
31
- }
32
- function fillMissingRequiredArrayProperties(args, schema) {
33
- const missing = requiredArrayPropertyNames(schema).filter((name) => !Object.hasOwn(args, name));
34
- if (missing.length === 0)
35
- return args;
36
- const next = { ...args };
37
- for (const name of missing)
38
- next[name] = [];
39
- return next;
40
- }
41
- /**
42
- * Reconstruct flattened Gemini tool-call arguments into proper nested
43
- * arrays/objects. Returns the original reference unchanged when there is nothing
44
- * to reconstruct. Bracket-indexed keys are always reconstructed; purely dotted
45
- * keys are reconstructed only when the optional `schema` marks their head
46
- * segment as an object/array container property. Reconstruction (and its
47
- * prototype-pollution guard) is delegated to the shared canonical helper.
48
- */
49
- export function unflattenGeminiToolArguments(args, schema) {
50
- if (!isPlainObject(args))
51
- return args;
52
- const reconstructed = unflattenArgumentsWithSchema(args, schema);
53
- return isPlainObject(reconstructed)
54
- ? fillMissingRequiredArrayProperties(reconstructed, schema)
55
- : reconstructed;
56
- }
57
- /**
58
- * If `model` is a GitHub Copilot Gemini model, normalize flattened tool-call
59
- * arguments; otherwise return them unchanged. Used to gate
60
- * {@link unflattenGeminiToolArguments} by model at tool-call time. The optional
61
- * `schema` is the tool's parameter schema, used to disambiguate dotted keys.
62
- */
63
- export function normalizeToolArgumentsForModel(args, model, schema) {
64
- if (!model || !isCopilotGeminiModel(model))
65
- return args;
66
- return unflattenGeminiToolArguments(args, schema);
67
- }
68
- /** Map each tool name in an OpenAI chat-completions payload to its parameter schema. */
69
- function toolParameterSchemas(tools) {
70
- const schemas = new Map();
71
- if (!Array.isArray(tools))
72
- return schemas;
73
- for (const tool of tools) {
74
- if (!isPlainObject(tool))
75
- continue;
76
- // OpenAI chat-completions tool shape: { type: "function", function: { name, parameters } }.
77
- const fn = tool.function;
78
- if (isPlainObject(fn) && typeof fn.name === "string") {
79
- schemas.set(fn.name, fn.parameters);
80
- continue;
81
- }
82
- // Defensive: flat tool shape { name, parameters }.
83
- if (typeof tool.name === "string")
84
- schemas.set(tool.name, tool.parameters);
85
- }
86
- return schemas;
87
- }
88
- /**
89
- * Reconstruct flattened GitHub Copilot Gemini tool-call arguments on the
90
- * **outbound replay payload**, so prior assistant tool calls are sent back to
91
- * CAPI in the nested array/object shape Gemini originally produced.
92
- *
93
- * Why this exists
94
- * ---------------
95
- * {@link normalizeToolArgumentsForModel} only unflattens at tool *execution*
96
- * time; the persisted assistant message keeps the raw flattened arguments CAPI
97
- * delivered (for example `{ "edits[0].newText": "..." }`). When that message is
98
- * replayed on the next turn, CAPI parses those literal keys straight into the
99
- * Gemini `FunctionCall.Args`, producing a function call that does not match the
100
- * tool's declared schema (nor the structure Gemini signed). Gemini then ends
101
- * the turn with `MALFORMED_FUNCTION_CALL` / `UNEXPECTED_TOOL_CALL` / `OTHER`,
102
- * which CAPI surfaces as a bare `finish_reason: "error"` — so multi-turn tool
103
- * use dies one turn after any array/object tool call (such as `edit`).
104
- *
105
- * This rewrites each replayed assistant `tool_calls[].function.arguments` JSON
106
- * into the reconstructed nested shape (reusing {@link unflattenGeminiToolArguments}
107
- * with the tool's own parameter schema, looked up from the payload's `tools`),
108
- * fixing both new and already-persisted sessions. Gated to GitHub Copilot Gemini
109
- * models, fail-open on non-JSON arguments, and a no-op for well-formed args.
110
- */
111
- export function normalizeCopilotGeminiReplayToolArguments(payload, model) {
112
- if (!isCopilotGeminiModel(model))
113
- return payload;
114
- if (!isPlainObject(payload))
115
- return payload;
116
- const messages = payload.messages;
117
- if (!Array.isArray(messages))
118
- return payload;
119
- const schemas = toolParameterSchemas(payload.tools);
120
- let mutated = false;
121
- const nextMessages = messages.map((message) => {
122
- if (!isPlainObject(message) || message.role !== "assistant")
123
- return message;
124
- const toolCalls = message.tool_calls;
125
- if (!Array.isArray(toolCalls) || toolCalls.length === 0)
126
- return message;
127
- let messageMutated = false;
128
- const nextToolCalls = toolCalls.map((toolCall) => {
129
- if (!isPlainObject(toolCall))
130
- return toolCall;
131
- const fn = toolCall.function;
132
- if (!isPlainObject(fn) || typeof fn.arguments !== "string")
133
- return toolCall;
134
- let parsed;
135
- try {
136
- parsed = JSON.parse(fn.arguments);
137
- }
138
- catch {
139
- return toolCall; // fail open: never corrupt a replayed argument string
140
- }
141
- if (!isPlainObject(parsed))
142
- return toolCall;
143
- const schema = typeof fn.name === "string" ? schemas.get(fn.name) : undefined;
144
- const reconstructed = unflattenGeminiToolArguments(parsed, schema);
145
- if (reconstructed === parsed)
146
- return toolCall;
147
- messageMutated = true;
148
- return { ...toolCall, function: { ...fn, arguments: JSON.stringify(reconstructed) } };
149
- });
150
- if (!messageMutated)
151
- return message;
152
- mutated = true;
153
- return { ...message, tool_calls: nextToolCalls };
154
- });
155
- if (!mutated)
156
- return payload;
157
- return { ...payload, messages: nextMessages };
158
- }
159
- //# sourceMappingURL=copilot-gemini-tool-arguments.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"copilot-gemini-tool-arguments.js","sourceRoot":"","sources":["../../src/core/copilot-gemini-tool-arguments.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Api, Model } from \"@earendil-works/pi-ai/compat\";\nimport { isCopilotGeminiModel } from \"./copilot-gemini-payload-sanitizer.ts\";\nimport { unflattenArgumentsWithSchema } from \"./flattened-tool-arguments.ts\";\n\n/**\n * Normalizes GitHub Copilot Gemini tool-call arguments.\n *\n * Why this exists\n * ---------------\n * `github-copilot` Gemini models are served through Copilot's CAPI gateway,\n * which proxies to Google's GenAI API. When a function/tool argument is an\n * array (or a nested object/array), Gemini serializes it on the wire as\n * **flattened, indexed keys** instead of a real JSON array/object. For example\n * a tool called with `{ keywords: [\"a\", \"b\"] }` arrives as:\n *\n * ```json\n * { \"keywords[0]\": \"a\", \"keywords[1]\": \"b\" }\n * ```\n *\n * This was confirmed by capturing the raw CAPI SSE stream: the\n * `tool_calls[].function.arguments` JSON itself contains the `name[index]`\n * keys, so the runtime parses valid-but-wrong JSON. Schema validation then\n * fails (`keywords: must have required properties keywords` and\n * `root: must not have additional properties`) and the model retries forever,\n * because it keeps re-emitting the same flattened shape. This is most visible\n * with the workflow `structured_output` tool but affects any Gemini tool call\n * whose schema contains an array or nested object.\n *\n * What it does\n * ------------\n * Reconstructs flattened keys (`name[i]`, `name[i].sub`, `parent.child`) back\n * into the intended nested arrays/objects, before tool-argument validation\n * runs. Bracket-indexed keys (`name[<digit>]`) are always reconstructed. A\n * purely dotted key (`parent.child`, with no array anywhere) is ambiguous —\n * a legitimate argument key can itself contain a dot — so it is only split when\n * the optional tool `schema` marks its head segment as an object/array\n * container property. When Gemini omits a required empty array entirely (there\n * are no `name[0]` keys to send), the schema is also used to synthesize `[]` for\n * missing required top-level array properties so normal validation can proceed.\n * The transform is gated to GitHub Copilot Gemini models, so it never touches\n * well-formed arguments from any other provider/model.\n */\n\ntype JsonRecord = Record<string, unknown>;\n\nfunction isPlainObject(value: unknown): value is JsonRecord {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction schemaTypeIncludes(schema: JsonRecord, type: string): boolean {\n if (schema.type === type) return true;\n return Array.isArray(schema.type) && schema.type.includes(type);\n}\n\nfunction isArraySchema(schema: unknown): boolean {\n if (!isPlainObject(schema)) return false;\n if (schemaTypeIncludes(schema, \"array\")) return true;\n if (\"items\" in schema && !schemaTypeIncludes(schema, \"object\")) return true;\n const union = schema.anyOf ?? schema.oneOf;\n return Array.isArray(union) && union.some((branch) => isArraySchema(branch));\n}\n\nfunction requiredArrayPropertyNames(schema: unknown): readonly string[] {\n if (!isPlainObject(schema)) return [];\n const required = schema.required;\n const properties = schema.properties;\n if (!Array.isArray(required) || !isPlainObject(properties)) return [];\n return required.filter((name): name is string => (\n typeof name === \"string\" &&\n Object.hasOwn(properties, name) &&\n isArraySchema(properties[name])\n ));\n}\n\nfunction fillMissingRequiredArrayProperties(args: JsonRecord, schema: unknown): JsonRecord {\n const missing = requiredArrayPropertyNames(schema).filter((name) => !Object.hasOwn(args, name));\n if (missing.length === 0) return args;\n const next: JsonRecord = { ...args };\n for (const name of missing) next[name] = [];\n return next;\n}\n\n/**\n * Reconstruct flattened Gemini tool-call arguments into proper nested\n * arrays/objects. Returns the original reference unchanged when there is nothing\n * to reconstruct. Bracket-indexed keys are always reconstructed; purely dotted\n * keys are reconstructed only when the optional `schema` marks their head\n * segment as an object/array container property. Reconstruction (and its\n * prototype-pollution guard) is delegated to the shared canonical helper.\n */\nexport function unflattenGeminiToolArguments(args: unknown, schema?: unknown): unknown {\n if (!isPlainObject(args)) return args;\n const reconstructed = unflattenArgumentsWithSchema(args, schema);\n return isPlainObject(reconstructed)\n ? fillMissingRequiredArrayProperties(reconstructed, schema)\n : reconstructed;\n}\n\n/**\n * If `model` is a GitHub Copilot Gemini model, normalize flattened tool-call\n * arguments; otherwise return them unchanged. Used to gate\n * {@link unflattenGeminiToolArguments} by model at tool-call time. The optional\n * `schema` is the tool's parameter schema, used to disambiguate dotted keys.\n */\nexport function normalizeToolArgumentsForModel(\n args: unknown,\n model: Pick<Model<Api>, \"provider\" | \"api\" | \"id\"> | undefined,\n schema?: unknown,\n): unknown {\n if (!model || !isCopilotGeminiModel(model)) return args;\n return unflattenGeminiToolArguments(args, schema);\n}\n\n/** Map each tool name in an OpenAI chat-completions payload to its parameter schema. */\nfunction toolParameterSchemas(tools: unknown): Map<string, unknown> {\n const schemas = new Map<string, unknown>();\n if (!Array.isArray(tools)) return schemas;\n for (const tool of tools) {\n if (!isPlainObject(tool)) continue;\n // OpenAI chat-completions tool shape: { type: \"function\", function: { name, parameters } }.\n const fn = tool.function;\n if (isPlainObject(fn) && typeof fn.name === \"string\") {\n schemas.set(fn.name, fn.parameters);\n continue;\n }\n // Defensive: flat tool shape { name, parameters }.\n if (typeof tool.name === \"string\") schemas.set(tool.name, tool.parameters);\n }\n return schemas;\n}\n\n/**\n * Reconstruct flattened GitHub Copilot Gemini tool-call arguments on the\n * **outbound replay payload**, so prior assistant tool calls are sent back to\n * CAPI in the nested array/object shape Gemini originally produced.\n *\n * Why this exists\n * ---------------\n * {@link normalizeToolArgumentsForModel} only unflattens at tool *execution*\n * time; the persisted assistant message keeps the raw flattened arguments CAPI\n * delivered (for example `{ \"edits[0].newText\": \"...\" }`). When that message is\n * replayed on the next turn, CAPI parses those literal keys straight into the\n * Gemini `FunctionCall.Args`, producing a function call that does not match the\n * tool's declared schema (nor the structure Gemini signed). Gemini then ends\n * the turn with `MALFORMED_FUNCTION_CALL` / `UNEXPECTED_TOOL_CALL` / `OTHER`,\n * which CAPI surfaces as a bare `finish_reason: \"error\"` — so multi-turn tool\n * use dies one turn after any array/object tool call (such as `edit`).\n *\n * This rewrites each replayed assistant `tool_calls[].function.arguments` JSON\n * into the reconstructed nested shape (reusing {@link unflattenGeminiToolArguments}\n * with the tool's own parameter schema, looked up from the payload's `tools`),\n * fixing both new and already-persisted sessions. Gated to GitHub Copilot Gemini\n * models, fail-open on non-JSON arguments, and a no-op for well-formed args.\n */\nexport function normalizeCopilotGeminiReplayToolArguments(\n payload: unknown,\n model: Pick<Model<Api>, \"provider\" | \"api\" | \"id\">,\n): unknown {\n if (!isCopilotGeminiModel(model)) return payload;\n if (!isPlainObject(payload)) return payload;\n const messages = payload.messages;\n if (!Array.isArray(messages)) return payload;\n\n const schemas = toolParameterSchemas(payload.tools);\n let mutated = false;\n\n const nextMessages = messages.map((message) => {\n if (!isPlainObject(message) || message.role !== \"assistant\") return message;\n const toolCalls = message.tool_calls;\n if (!Array.isArray(toolCalls) || toolCalls.length === 0) return message;\n\n let messageMutated = false;\n const nextToolCalls = toolCalls.map((toolCall) => {\n if (!isPlainObject(toolCall)) return toolCall;\n const fn = toolCall.function;\n if (!isPlainObject(fn) || typeof fn.arguments !== \"string\") return toolCall;\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(fn.arguments);\n } catch {\n return toolCall; // fail open: never corrupt a replayed argument string\n }\n if (!isPlainObject(parsed)) return toolCall;\n\n const schema = typeof fn.name === \"string\" ? schemas.get(fn.name) : undefined;\n const reconstructed = unflattenGeminiToolArguments(parsed, schema);\n if (reconstructed === parsed) return toolCall;\n\n messageMutated = true;\n return { ...toolCall, function: { ...fn, arguments: JSON.stringify(reconstructed) } };\n });\n\n if (!messageMutated) return message;\n mutated = true;\n return { ...message, tool_calls: nextToolCalls };\n });\n\n if (!mutated) return payload;\n return { ...payload, messages: nextMessages };\n}\n"]}
@@ -1,12 +0,0 @@
1
- /** Shared strict host predicates for GitHub Copilot CAPI endpoints. */
2
- /**
3
- * Whether the URL targets a GitHub Copilot CAPI gateway.
4
- *
5
- * Accepts the public/enterprise githubcopilot.com gateway family and the GHE
6
- * tenant routing shape Atomic derives from *.ghe.com server URLs:
7
- * copilot-api.<enterprise>.ghe.com. The suffix checks are label-aware so
8
- * look-alikes such as githubcopilot.com.evil.test or
9
- * copilot-api.company.ghe.com.evil.test are rejected.
10
- */
11
- export declare function isCopilotApiHost(url: URL | string): boolean;
12
- //# sourceMappingURL=copilot-hosts.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"copilot-hosts.d.ts","sourceRoot":"","sources":["../../src/core/copilot-hosts.ts"],"names":[],"mappings":"AAAA,uEAAuE;AAWvE;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,GAAG,OAAO,CAa3D"}
@@ -1,33 +0,0 @@
1
- /** Shared strict host predicates for GitHub Copilot CAPI endpoints. */
2
- const GITHUB_COPILOT_HOST = "githubcopilot.com";
3
- const GHE_COPILOT_API_HOST_PREFIX = "copilot-api.";
4
- const GHE_HOST_SUFFIX = ".ghe.com";
5
- const DNS_LABEL_PATTERN = /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/;
6
- function hasValidDnsLabels(hostFragment) {
7
- return hostFragment.split(".").every((label) => DNS_LABEL_PATTERN.test(label));
8
- }
9
- /**
10
- * Whether the URL targets a GitHub Copilot CAPI gateway.
11
- *
12
- * Accepts the public/enterprise githubcopilot.com gateway family and the GHE
13
- * tenant routing shape Atomic derives from *.ghe.com server URLs:
14
- * copilot-api.<enterprise>.ghe.com. The suffix checks are label-aware so
15
- * look-alikes such as githubcopilot.com.evil.test or
16
- * copilot-api.company.ghe.com.evil.test are rejected.
17
- */
18
- export function isCopilotApiHost(url) {
19
- let host;
20
- try {
21
- host = (typeof url === "string" ? new URL(url).hostname : url.hostname).toLowerCase();
22
- }
23
- catch {
24
- return false;
25
- }
26
- if (host === GITHUB_COPILOT_HOST || host.endsWith(`.${GITHUB_COPILOT_HOST}`))
27
- return true;
28
- if (!host.startsWith(GHE_COPILOT_API_HOST_PREFIX) || !host.endsWith(GHE_HOST_SUFFIX))
29
- return false;
30
- const enterpriseHost = host.slice(GHE_COPILOT_API_HOST_PREFIX.length, -GHE_HOST_SUFFIX.length);
31
- return enterpriseHost.length > 0 && hasValidDnsLabels(enterpriseHost);
32
- }
33
- //# sourceMappingURL=copilot-hosts.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"copilot-hosts.js","sourceRoot":"","sources":["../../src/core/copilot-hosts.ts"],"names":[],"mappings":"AAAA,uEAAuE;AAEvE,MAAM,mBAAmB,GAAG,mBAAmB,CAAC;AAChD,MAAM,2BAA2B,GAAG,cAAc,CAAC;AACnD,MAAM,eAAe,GAAG,UAAU,CAAC;AACnC,MAAM,iBAAiB,GAAG,wCAAwC,CAAC;AAEnE,SAAS,iBAAiB,CAAC,YAAoB;IAC7C,OAAO,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACjF,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAiB;IAChD,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IACxF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,IAAI,KAAK,mBAAmB,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,mBAAmB,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1F,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;QAAE,OAAO,KAAK,CAAC;IAEnG,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,MAAM,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAC/F,OAAO,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,iBAAiB,CAAC,cAAc,CAAC,CAAC;AACxE,CAAC","sourcesContent":["/** Shared strict host predicates for GitHub Copilot CAPI endpoints. */\n\nconst GITHUB_COPILOT_HOST = \"githubcopilot.com\";\nconst GHE_COPILOT_API_HOST_PREFIX = \"copilot-api.\";\nconst GHE_HOST_SUFFIX = \".ghe.com\";\nconst DNS_LABEL_PATTERN = /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/;\n\nfunction hasValidDnsLabels(hostFragment: string): boolean {\n return hostFragment.split(\".\").every((label) => DNS_LABEL_PATTERN.test(label));\n}\n\n/**\n * Whether the URL targets a GitHub Copilot CAPI gateway.\n *\n * Accepts the public/enterprise githubcopilot.com gateway family and the GHE\n * tenant routing shape Atomic derives from *.ghe.com server URLs:\n * copilot-api.<enterprise>.ghe.com. The suffix checks are label-aware so\n * look-alikes such as githubcopilot.com.evil.test or\n * copilot-api.company.ghe.com.evil.test are rejected.\n */\nexport function isCopilotApiHost(url: URL | string): boolean {\n let host: string;\n try {\n host = (typeof url === \"string\" ? new URL(url).hostname : url.hostname).toLowerCase();\n } catch {\n return false;\n }\n\n if (host === GITHUB_COPILOT_HOST || host.endsWith(`.${GITHUB_COPILOT_HOST}`)) return true;\n if (!host.startsWith(GHE_COPILOT_API_HOST_PREFIX) || !host.endsWith(GHE_HOST_SUFFIX)) return false;\n\n const enterpriseHost = host.slice(GHE_COPILOT_API_HOST_PREFIX.length, -GHE_HOST_SUFFIX.length);\n return enterpriseHost.length > 0 && hasValidDnsLabels(enterpriseHost);\n}\n"]}