@psnext/slingcli 2.4.20260507-3 → 2.4.20260509-1

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 (393) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -1
  3. package/bin/sling.js +12 -12
  4. package/node_modules/@aws-sdk/client-bedrock-runtime/package.json +2 -2
  5. package/node_modules/@aws-sdk/token-providers/package.json +1 -1
  6. package/node_modules/{@mariozechner → @earendil-works}/pi-agent-core/dist/agent-loop.js +1 -1
  7. package/node_modules/{@mariozechner → @earendil-works}/pi-agent-core/dist/agent.js +4 -3
  8. package/node_modules/@earendil-works/pi-agent-core/dist/harness/agent-harness.js +526 -0
  9. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/branch-summarization.js +243 -0
  10. package/node_modules/@earendil-works/pi-agent-core/dist/harness/compaction/compaction.js +616 -0
  11. package/node_modules/@earendil-works/pi-agent-core/dist/harness/env/nodejs.js +348 -0
  12. package/node_modules/@earendil-works/pi-agent-core/dist/harness/execution-env.js +3 -0
  13. package/node_modules/@earendil-works/pi-agent-core/dist/harness/factory.js +9 -0
  14. package/node_modules/@earendil-works/pi-agent-core/dist/harness/messages.js +102 -0
  15. package/node_modules/@earendil-works/pi-agent-core/dist/harness/prompt-templates.js +194 -0
  16. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/jsonl.js +92 -0
  17. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/memory.js +42 -0
  18. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/repo/shared.js +31 -0
  19. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/session.js +196 -0
  20. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/jsonl.js +170 -0
  21. package/node_modules/@earendil-works/pi-agent-core/dist/harness/session/storage/memory.js +90 -0
  22. package/node_modules/@earendil-works/pi-agent-core/dist/harness/skills.js +258 -0
  23. package/node_modules/@earendil-works/pi-agent-core/dist/harness/system-prompt.js +30 -0
  24. package/node_modules/@earendil-works/pi-agent-core/dist/harness/types.js +16 -0
  25. package/node_modules/@earendil-works/pi-agent-core/dist/harness/utils/shell-output.js +97 -0
  26. package/node_modules/@earendil-works/pi-agent-core/dist/index.js +26 -0
  27. package/node_modules/{@mariozechner → @earendil-works}/pi-agent-core/dist/proxy.js +1 -1
  28. package/node_modules/{@mariozechner → @earendil-works}/pi-agent-core/package.json +7 -5
  29. package/node_modules/{@mariozechner → @earendil-works}/pi-ai/dist/cli.js +6 -6
  30. package/node_modules/{@mariozechner → @earendil-works}/pi-ai/dist/env-api-keys.js +1 -0
  31. package/node_modules/@earendil-works/pi-ai/dist/image-models.generated.js +307 -0
  32. package/node_modules/@earendil-works/pi-ai/dist/image-models.js +23 -0
  33. package/node_modules/@earendil-works/pi-ai/dist/images-api-registry.js +22 -0
  34. package/node_modules/@earendil-works/pi-ai/dist/images.js +14 -0
  35. package/node_modules/{@mariozechner → @earendil-works}/pi-ai/dist/index.js +4 -0
  36. package/node_modules/{@mariozechner → @earendil-works}/pi-ai/dist/models.generated.js +427 -122
  37. package/node_modules/@earendil-works/pi-ai/dist/providers/images/openrouter.js +129 -0
  38. package/node_modules/@earendil-works/pi-ai/dist/providers/images/register-builtins.js +34 -0
  39. package/node_modules/{@mariozechner → @earendil-works}/pi-ai/dist/providers/openai-codex-responses.js +1 -1
  40. package/node_modules/{@mariozechner/pi-agent-core/node_modules/@mariozechner → @earendil-works}/pi-ai/dist/providers/openai-completions.js +150 -122
  41. package/node_modules/{@mariozechner → @earendil-works}/pi-ai/dist/providers/openai-responses-shared.js +14 -1
  42. package/node_modules/{@mariozechner → @earendil-works}/pi-ai/dist/utils/oauth/openai-codex.js +25 -14
  43. package/node_modules/{@mariozechner/pi-agent-core/node_modules/@mariozechner → @earendil-works}/pi-ai/dist/utils/overflow.js +3 -0
  44. package/node_modules/{@mariozechner/pi-agent-core/node_modules/@mariozechner → @earendil-works}/pi-ai/package.json +5 -4
  45. package/node_modules/@earendil-works/pi-coding-agent/dist/bun/register-bedrock.js +4 -0
  46. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/cli/args.js +1 -0
  47. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/cli/config-selector.js +1 -1
  48. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/cli/list-models.js +1 -1
  49. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/cli/session-picker.js +1 -1
  50. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/config.js +52 -30
  51. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/agent-session.js +1 -1
  52. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/auth-storage.js +2 -2
  53. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/compaction/branch-summarization.js +1 -1
  54. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/compaction/compaction.js +1 -1
  55. package/node_modules/@earendil-works/pi-coding-agent/dist/core/compaction/utils.js +153 -0
  56. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/export-html/template.css +45 -1
  57. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/export-html/template.js +68 -4
  58. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/extensions/loader.js +26 -12
  59. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/keybindings.js +1 -1
  60. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/model-registry.js +3 -2
  61. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/model-resolver.js +2 -1
  62. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/package-manager.js +22 -5
  63. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/provider-display-names.js +1 -0
  64. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/sdk.js +3 -3
  65. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/tools/bash.js +1 -1
  66. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/tools/edit.js +1 -1
  67. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/tools/find.js +1 -1
  68. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/tools/grep.js +1 -1
  69. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/tools/ls.js +1 -1
  70. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/tools/read.js +3 -2
  71. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/tools/render-utils.js +1 -1
  72. package/node_modules/@earendil-works/pi-coding-agent/dist/core/tools/truncate.js +205 -0
  73. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/tools/write.js +1 -1
  74. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/main.js +2 -2
  75. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/migrations.js +3 -3
  76. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/assistant-message.js +1 -1
  77. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/bash-execution.js +1 -1
  78. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/bordered-loader.js +1 -1
  79. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/branch-summary-message.js +1 -1
  80. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/compaction-summary-message.js +1 -1
  81. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/config-selector.js +25 -3
  82. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/custom-editor.js +1 -1
  83. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/custom-message.js +1 -1
  84. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/earendil-announcement.js +1 -1
  85. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/extension-editor.js +1 -1
  86. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/extension-input.js +1 -1
  87. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/extension-selector.js +1 -1
  88. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/footer.js +1 -1
  89. package/node_modules/@earendil-works/pi-coding-agent/dist/modes/interactive/components/keybinding-hints.js +36 -0
  90. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/login-dialog.js +4 -3
  91. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/model-selector.js +2 -2
  92. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/oauth-selector.js +1 -1
  93. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/scoped-models-selector.js +1 -1
  94. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/session-selector-search.js +1 -1
  95. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/session-selector.js +1 -1
  96. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/settings-selector.js +4 -2
  97. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/show-images-selector.js +1 -1
  98. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/skill-invocation-message.js +1 -1
  99. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/theme-selector.js +1 -1
  100. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/thinking-selector.js +1 -1
  101. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +1 -1
  102. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/tree-selector.js +3 -2
  103. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/user-message-selector.js +1 -1
  104. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/user-message.js +1 -1
  105. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/visual-truncate.js +1 -1
  106. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/interactive/interactive-mode.js +47 -32
  107. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/interactive/theme/dark.json +1 -1
  108. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/interactive/theme/light.json +1 -1
  109. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/interactive/theme/theme.js +1 -1
  110. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/package-manager-cli.js +42 -39
  111. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/utils/clipboard.js +9 -2
  112. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/utils/paths.js +16 -0
  113. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/utils/version-check.js +9 -2
  114. package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/package.json +9 -8
  115. package/node_modules/{@mariozechner → @earendil-works}/pi-tui/dist/components/image.js +14 -7
  116. package/node_modules/{@mariozechner → @earendil-works}/pi-tui/dist/components/markdown.js +24 -84
  117. package/node_modules/{@mariozechner → @earendil-works}/pi-tui/dist/terminal-image.js +10 -4
  118. package/node_modules/{@mariozechner → @earendil-works}/pi-tui/dist/tui.js +73 -4
  119. package/node_modules/{@mariozechner → @earendil-works}/pi-tui/dist/utils.js +33 -7
  120. package/node_modules/{@mariozechner → @earendil-works}/pi-tui/package.json +3 -3
  121. package/node_modules/@mariozechner/clipboard/README.md +58 -0
  122. package/node_modules/@mariozechner/clipboard/index.d.ts +23 -0
  123. package/node_modules/@mariozechner/clipboard-linux-x64-gnu/README.md +3 -0
  124. package/node_modules/@types/node/README.md +1 -1
  125. package/node_modules/@types/node/http2.d.ts +4 -1
  126. package/node_modules/@types/node/package.json +2 -2
  127. package/node_modules/@types/node/stream/web.d.ts +4 -0
  128. package/node_modules/brace-expansion/dist/commonjs/index.js +1 -1
  129. package/node_modules/brace-expansion/dist/commonjs/index.js.map +1 -1
  130. package/node_modules/brace-expansion/dist/esm/index.js +1 -1
  131. package/node_modules/brace-expansion/dist/esm/index.js.map +1 -1
  132. package/node_modules/brace-expansion/package.json +1 -1
  133. package/node_modules/fast-xml-builder/CHANGELOG.md +4 -0
  134. package/node_modules/fast-xml-builder/lib/fxb.cjs +1 -1
  135. package/node_modules/fast-xml-builder/lib/fxb.d.cts +91 -1
  136. package/node_modules/fast-xml-builder/lib/fxb.min.js +1 -1
  137. package/node_modules/fast-xml-builder/lib/fxb.min.js.map +1 -1
  138. package/node_modules/fast-xml-builder/package.json +3 -2
  139. package/node_modules/fast-xml-builder/src/fxb.d.ts +92 -3
  140. package/node_modules/fast-xml-builder/src/fxb.js +92 -31
  141. package/node_modules/fast-xml-builder/src/orderedJs2Xml.js +87 -33
  142. package/node_modules/get-east-asian-width/lookup-data.js +15 -12
  143. package/node_modules/get-east-asian-width/lookup.js +25 -22
  144. package/node_modules/get-east-asian-width/package.json +1 -1
  145. package/node_modules/jiti/README.md +258 -0
  146. package/node_modules/jiti/dist/babel.cjs +257 -0
  147. package/node_modules/jiti/dist/jiti.cjs +1 -0
  148. package/node_modules/jiti/lib/jiti.mjs +29 -0
  149. package/node_modules/jiti/lib/types.d.ts +420 -0
  150. package/node_modules/jiti/package.json +146 -0
  151. package/node_modules/protobufjs/dist/light/protobuf.js +5 -3
  152. package/node_modules/protobufjs/dist/light/protobuf.js.map +1 -1
  153. package/node_modules/protobufjs/dist/light/protobuf.min.js +3 -3
  154. package/node_modules/protobufjs/dist/light/protobuf.min.js.map +1 -1
  155. package/node_modules/protobufjs/dist/minimal/protobuf.js +2 -2
  156. package/node_modules/protobufjs/dist/minimal/protobuf.min.js +2 -2
  157. package/node_modules/protobufjs/dist/protobuf.js +5 -3
  158. package/node_modules/protobufjs/dist/protobuf.js.map +1 -1
  159. package/node_modules/protobufjs/dist/protobuf.min.js +3 -3
  160. package/node_modules/protobufjs/dist/protobuf.min.js.map +1 -1
  161. package/node_modules/protobufjs/package.json +1 -1
  162. package/node_modules/protobufjs/src/namespace.js +3 -1
  163. package/node_modules/semver/README.md +19 -4
  164. package/node_modules/semver/bin/semver.js +14 -10
  165. package/node_modules/semver/functions/truncate.js +48 -0
  166. package/node_modules/semver/index.js +2 -0
  167. package/node_modules/semver/internal/re.js +1 -1
  168. package/node_modules/semver/package.json +3 -3
  169. package/node_modules/semver/range.bnf +5 -4
  170. package/node_modules/socks/package.json +2 -2
  171. package/node_modules/xml-naming/README.md +189 -0
  172. package/node_modules/xml-naming/package.json +54 -0
  173. package/node_modules/xml-naming/src/index.d.ts +74 -0
  174. package/node_modules/xml-naming/src/index.js +270 -0
  175. package/package.json +6 -6
  176. package/sling-default-packages.json +2 -1
  177. package/slingshot/index.js +442 -23
  178. package/node_modules/@mariozechner/jiti/dist/babel.cjs +0 -246
  179. package/node_modules/@mariozechner/jiti/dist/jiti.cjs +0 -1
  180. package/node_modules/@mariozechner/jiti/package.json +0 -96
  181. package/node_modules/@mariozechner/pi-agent-core/dist/index.js +0 -9
  182. package/node_modules/@mariozechner/pi-agent-core/node_modules/@mariozechner/pi-ai/dist/cli.js +0 -116
  183. package/node_modules/@mariozechner/pi-agent-core/node_modules/@mariozechner/pi-ai/dist/env-api-keys.js +0 -166
  184. package/node_modules/@mariozechner/pi-agent-core/node_modules/@mariozechner/pi-ai/dist/index.js +0 -15
  185. package/node_modules/@mariozechner/pi-agent-core/node_modules/@mariozechner/pi-ai/dist/models.generated.js +0 -16568
  186. package/node_modules/@mariozechner/pi-agent-core/node_modules/@mariozechner/pi-ai/dist/providers/amazon-bedrock.js +0 -753
  187. package/node_modules/@mariozechner/pi-agent-core/node_modules/@mariozechner/pi-ai/dist/providers/openai-codex-responses.js +0 -909
  188. package/node_modules/@mariozechner/pi-agent-core/node_modules/@mariozechner/pi-ai/dist/providers/openai-responses-shared.js +0 -479
  189. package/node_modules/@mariozechner/pi-agent-core/node_modules/@mariozechner/pi-ai/dist/utils/oauth/openai-codex.js +0 -374
  190. package/node_modules/@mariozechner/pi-ai/dist/api-registry.js +0 -44
  191. package/node_modules/@mariozechner/pi-ai/dist/bedrock-provider.js +0 -6
  192. package/node_modules/@mariozechner/pi-ai/dist/models.js +0 -71
  193. package/node_modules/@mariozechner/pi-ai/dist/oauth.js +0 -2
  194. package/node_modules/@mariozechner/pi-ai/dist/providers/anthropic.js +0 -951
  195. package/node_modules/@mariozechner/pi-ai/dist/providers/azure-openai-responses.js +0 -208
  196. package/node_modules/@mariozechner/pi-ai/dist/providers/cloudflare.js +0 -26
  197. package/node_modules/@mariozechner/pi-ai/dist/providers/faux.js +0 -368
  198. package/node_modules/@mariozechner/pi-ai/dist/providers/github-copilot-headers.js +0 -29
  199. package/node_modules/@mariozechner/pi-ai/dist/providers/google-shared.js +0 -329
  200. package/node_modules/@mariozechner/pi-ai/dist/providers/google-vertex.js +0 -442
  201. package/node_modules/@mariozechner/pi-ai/dist/providers/google.js +0 -400
  202. package/node_modules/@mariozechner/pi-ai/dist/providers/mistral.js +0 -535
  203. package/node_modules/@mariozechner/pi-ai/dist/providers/openai-completions.js +0 -908
  204. package/node_modules/@mariozechner/pi-ai/dist/providers/openai-responses.js +0 -220
  205. package/node_modules/@mariozechner/pi-ai/dist/providers/register-builtins.js +0 -243
  206. package/node_modules/@mariozechner/pi-ai/dist/providers/simple-options.js +0 -39
  207. package/node_modules/@mariozechner/pi-ai/dist/providers/transform-messages.js +0 -184
  208. package/node_modules/@mariozechner/pi-ai/dist/stream.js +0 -27
  209. package/node_modules/@mariozechner/pi-ai/dist/types.js +0 -2
  210. package/node_modules/@mariozechner/pi-ai/dist/utils/event-stream.js +0 -81
  211. package/node_modules/@mariozechner/pi-ai/dist/utils/hash.js +0 -14
  212. package/node_modules/@mariozechner/pi-ai/dist/utils/headers.js +0 -8
  213. package/node_modules/@mariozechner/pi-ai/dist/utils/json-parse.js +0 -113
  214. package/node_modules/@mariozechner/pi-ai/dist/utils/oauth/anthropic.js +0 -335
  215. package/node_modules/@mariozechner/pi-ai/dist/utils/oauth/github-copilot.js +0 -292
  216. package/node_modules/@mariozechner/pi-ai/dist/utils/oauth/index.js +0 -121
  217. package/node_modules/@mariozechner/pi-ai/dist/utils/oauth/oauth-page.js +0 -105
  218. package/node_modules/@mariozechner/pi-ai/dist/utils/oauth/pkce.js +0 -31
  219. package/node_modules/@mariozechner/pi-ai/dist/utils/oauth/types.js +0 -2
  220. package/node_modules/@mariozechner/pi-ai/dist/utils/overflow.js +0 -146
  221. package/node_modules/@mariozechner/pi-ai/dist/utils/sanitize-unicode.js +0 -26
  222. package/node_modules/@mariozechner/pi-ai/dist/utils/typebox-helpers.js +0 -21
  223. package/node_modules/@mariozechner/pi-ai/dist/utils/validation.js +0 -281
  224. package/node_modules/@mariozechner/pi-ai/package.json +0 -108
  225. package/node_modules/@mariozechner/pi-coding-agent/dist/bun/register-bedrock.js +0 -4
  226. package/node_modules/@mariozechner/pi-coding-agent/dist/modes/interactive/components/keybinding-hints.js +0 -22
  227. package/node_modules/@mariozechner/pi-coding-agent/node_modules/@mariozechner/pi-agent-core/dist/agent-loop.js +0 -458
  228. package/node_modules/@mariozechner/pi-coding-agent/node_modules/@mariozechner/pi-agent-core/dist/agent.js +0 -398
  229. package/node_modules/@mariozechner/pi-coding-agent/node_modules/@mariozechner/pi-agent-core/dist/index.js +0 -9
  230. package/node_modules/@mariozechner/pi-coding-agent/node_modules/@mariozechner/pi-agent-core/dist/proxy.js +0 -278
  231. package/node_modules/@mariozechner/pi-coding-agent/node_modules/@mariozechner/pi-agent-core/dist/types.js +0 -2
  232. package/node_modules/@mariozechner/pi-coding-agent/node_modules/@mariozechner/pi-agent-core/package.json +0 -45
  233. package/node_modules/socks/.claude/settings.local.json +0 -26
  234. package/node_modules/std-env/LICENCE +0 -22
  235. package/node_modules/std-env/README.md +0 -118
  236. package/node_modules/std-env/dist/index.cjs +0 -1
  237. package/node_modules/std-env/dist/index.d.cts +0 -92
  238. package/node_modules/std-env/dist/index.d.mts +0 -92
  239. package/node_modules/std-env/dist/index.d.ts +0 -92
  240. package/node_modules/std-env/dist/index.mjs +0 -1
  241. package/node_modules/std-env/package.json +0 -46
  242. package/node_modules/yoctocolors/base.d.ts +0 -47
  243. package/node_modules/yoctocolors/base.js +0 -94
  244. package/node_modules/yoctocolors/index.d.ts +0 -2
  245. package/node_modules/yoctocolors/index.js +0 -2
  246. package/node_modules/yoctocolors/license +0 -9
  247. package/node_modules/yoctocolors/package.json +0 -69
  248. package/node_modules/yoctocolors/readme.md +0 -138
  249. /package/node_modules/{@mariozechner/pi-coding-agent/dist/core → @earendil-works/pi-agent-core/dist/harness}/compaction/utils.js +0 -0
  250. /package/node_modules/{@mariozechner/pi-coding-agent/dist/core/tools → @earendil-works/pi-agent-core/dist/harness/utils}/truncate.js +0 -0
  251. /package/node_modules/{@mariozechner → @earendil-works}/pi-agent-core/dist/types.js +0 -0
  252. /package/node_modules/{@mariozechner/pi-agent-core/node_modules/@mariozechner → @earendil-works}/pi-ai/dist/api-registry.js +0 -0
  253. /package/node_modules/{@mariozechner/pi-agent-core/node_modules/@mariozechner → @earendil-works}/pi-ai/dist/bedrock-provider.js +0 -0
  254. /package/node_modules/{@mariozechner/pi-agent-core/node_modules/@mariozechner → @earendil-works}/pi-ai/dist/models.js +0 -0
  255. /package/node_modules/{@mariozechner/pi-agent-core/node_modules/@mariozechner → @earendil-works}/pi-ai/dist/oauth.js +0 -0
  256. /package/node_modules/{@mariozechner → @earendil-works}/pi-ai/dist/providers/amazon-bedrock.js +0 -0
  257. /package/node_modules/{@mariozechner/pi-agent-core/node_modules/@mariozechner → @earendil-works}/pi-ai/dist/providers/anthropic.js +0 -0
  258. /package/node_modules/{@mariozechner/pi-agent-core/node_modules/@mariozechner → @earendil-works}/pi-ai/dist/providers/azure-openai-responses.js +0 -0
  259. /package/node_modules/{@mariozechner/pi-agent-core/node_modules/@mariozechner → @earendil-works}/pi-ai/dist/providers/cloudflare.js +0 -0
  260. /package/node_modules/{@mariozechner/pi-agent-core/node_modules/@mariozechner → @earendil-works}/pi-ai/dist/providers/faux.js +0 -0
  261. /package/node_modules/{@mariozechner/pi-agent-core/node_modules/@mariozechner → @earendil-works}/pi-ai/dist/providers/github-copilot-headers.js +0 -0
  262. /package/node_modules/{@mariozechner/pi-agent-core/node_modules/@mariozechner → @earendil-works}/pi-ai/dist/providers/google-shared.js +0 -0
  263. /package/node_modules/{@mariozechner/pi-agent-core/node_modules/@mariozechner → @earendil-works}/pi-ai/dist/providers/google-vertex.js +0 -0
  264. /package/node_modules/{@mariozechner/pi-agent-core/node_modules/@mariozechner → @earendil-works}/pi-ai/dist/providers/google.js +0 -0
  265. /package/node_modules/{@mariozechner/pi-agent-core/node_modules/@mariozechner → @earendil-works}/pi-ai/dist/providers/mistral.js +0 -0
  266. /package/node_modules/{@mariozechner/pi-agent-core/node_modules/@mariozechner → @earendil-works}/pi-ai/dist/providers/openai-responses.js +0 -0
  267. /package/node_modules/{@mariozechner/pi-agent-core/node_modules/@mariozechner → @earendil-works}/pi-ai/dist/providers/register-builtins.js +0 -0
  268. /package/node_modules/{@mariozechner/pi-agent-core/node_modules/@mariozechner → @earendil-works}/pi-ai/dist/providers/simple-options.js +0 -0
  269. /package/node_modules/{@mariozechner/pi-agent-core/node_modules/@mariozechner → @earendil-works}/pi-ai/dist/providers/transform-messages.js +0 -0
  270. /package/node_modules/{@mariozechner → @earendil-works}/pi-ai/dist/session-resources.js +0 -0
  271. /package/node_modules/{@mariozechner/pi-agent-core/node_modules/@mariozechner → @earendil-works}/pi-ai/dist/stream.js +0 -0
  272. /package/node_modules/{@mariozechner/pi-agent-core/node_modules/@mariozechner → @earendil-works}/pi-ai/dist/types.js +0 -0
  273. /package/node_modules/{@mariozechner → @earendil-works}/pi-ai/dist/utils/diagnostics.js +0 -0
  274. /package/node_modules/{@mariozechner/pi-agent-core/node_modules/@mariozechner → @earendil-works}/pi-ai/dist/utils/event-stream.js +0 -0
  275. /package/node_modules/{@mariozechner/pi-agent-core/node_modules/@mariozechner → @earendil-works}/pi-ai/dist/utils/hash.js +0 -0
  276. /package/node_modules/{@mariozechner/pi-agent-core/node_modules/@mariozechner → @earendil-works}/pi-ai/dist/utils/headers.js +0 -0
  277. /package/node_modules/{@mariozechner/pi-agent-core/node_modules/@mariozechner → @earendil-works}/pi-ai/dist/utils/json-parse.js +0 -0
  278. /package/node_modules/{@mariozechner/pi-agent-core/node_modules/@mariozechner → @earendil-works}/pi-ai/dist/utils/oauth/anthropic.js +0 -0
  279. /package/node_modules/{@mariozechner/pi-agent-core/node_modules/@mariozechner → @earendil-works}/pi-ai/dist/utils/oauth/github-copilot.js +0 -0
  280. /package/node_modules/{@mariozechner/pi-agent-core/node_modules/@mariozechner → @earendil-works}/pi-ai/dist/utils/oauth/index.js +0 -0
  281. /package/node_modules/{@mariozechner/pi-agent-core/node_modules/@mariozechner → @earendil-works}/pi-ai/dist/utils/oauth/oauth-page.js +0 -0
  282. /package/node_modules/{@mariozechner/pi-agent-core/node_modules/@mariozechner → @earendil-works}/pi-ai/dist/utils/oauth/pkce.js +0 -0
  283. /package/node_modules/{@mariozechner/pi-agent-core/node_modules/@mariozechner → @earendil-works}/pi-ai/dist/utils/oauth/types.js +0 -0
  284. /package/node_modules/{@mariozechner/pi-agent-core/node_modules/@mariozechner → @earendil-works}/pi-ai/dist/utils/sanitize-unicode.js +0 -0
  285. /package/node_modules/{@mariozechner/pi-agent-core/node_modules/@mariozechner → @earendil-works}/pi-ai/dist/utils/typebox-helpers.js +0 -0
  286. /package/node_modules/{@mariozechner/pi-agent-core/node_modules/@mariozechner → @earendil-works}/pi-ai/dist/utils/validation.js +0 -0
  287. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/bun/cli.js +0 -0
  288. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/bun/restore-sandbox-env.js +0 -0
  289. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/cli/file-processor.js +0 -0
  290. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/cli/initial-message.js +0 -0
  291. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/cli.js +0 -0
  292. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/agent-session-runtime.js +0 -0
  293. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/agent-session-services.js +0 -0
  294. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/auth-guidance.js +0 -0
  295. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/bash-executor.js +0 -0
  296. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/compaction/index.js +0 -0
  297. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/defaults.js +0 -0
  298. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/diagnostics.js +0 -0
  299. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/event-bus.js +0 -0
  300. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/exec.js +0 -0
  301. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/export-html/ansi-to-html.js +0 -0
  302. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/export-html/index.js +0 -0
  303. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/export-html/template.html +0 -0
  304. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/export-html/tool-renderer.js +0 -0
  305. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/export-html/vendor/highlight.min.js +0 -0
  306. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/export-html/vendor/marked.min.js +0 -0
  307. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/extensions/index.js +0 -0
  308. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/extensions/runner.js +0 -0
  309. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/extensions/types.js +0 -0
  310. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/extensions/wrapper.js +0 -0
  311. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/footer-data-provider.js +0 -0
  312. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/index.js +0 -0
  313. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/messages.js +0 -0
  314. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/output-guard.js +0 -0
  315. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/prompt-templates.js +0 -0
  316. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/resolve-config-value.js +0 -0
  317. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/resource-loader.js +0 -0
  318. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/session-cwd.js +0 -0
  319. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/session-manager.js +0 -0
  320. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/settings-manager.js +0 -0
  321. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/skills.js +0 -0
  322. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/slash-commands.js +0 -0
  323. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/source-info.js +0 -0
  324. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/system-prompt.js +0 -0
  325. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/telemetry.js +0 -0
  326. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/timings.js +0 -0
  327. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/tools/edit-diff.js +0 -0
  328. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/tools/file-mutation-queue.js +0 -0
  329. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/tools/index.js +0 -0
  330. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/tools/output-accumulator.js +0 -0
  331. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/tools/path-utils.js +0 -0
  332. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/core/tools/tool-definition-wrapper.js +0 -0
  333. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/index.js +0 -0
  334. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/index.js +0 -0
  335. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/interactive/assets/clankolas.png +0 -0
  336. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/armin.js +0 -0
  337. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/countdown-timer.js +0 -0
  338. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/daxnuts.js +0 -0
  339. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/diff.js +0 -0
  340. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/dynamic-border.js +0 -0
  341. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/interactive/components/index.js +0 -0
  342. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/interactive/theme/theme-schema.json +0 -0
  343. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/print-mode.js +0 -0
  344. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/rpc/jsonl.js +0 -0
  345. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/rpc/rpc-client.js +0 -0
  346. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/rpc/rpc-mode.js +0 -0
  347. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/modes/rpc/rpc-types.js +0 -0
  348. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/utils/changelog.js +0 -0
  349. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/utils/child-process.js +0 -0
  350. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/utils/clipboard-image.js +0 -0
  351. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/utils/clipboard-native.js +0 -0
  352. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/utils/exif-orientation.js +0 -0
  353. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/utils/frontmatter.js +0 -0
  354. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/utils/fs-watch.js +0 -0
  355. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/utils/git.js +0 -0
  356. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/utils/image-convert.js +0 -0
  357. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/utils/image-resize.js +0 -0
  358. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/utils/mime.js +0 -0
  359. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/utils/photon.js +0 -0
  360. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/utils/pi-user-agent.js +0 -0
  361. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/utils/shell.js +0 -0
  362. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/utils/sleep.js +0 -0
  363. /package/node_modules/{@mariozechner → @earendil-works}/pi-coding-agent/dist/utils/tools-manager.js +0 -0
  364. /package/node_modules/{@mariozechner → @earendil-works}/pi-tui/dist/autocomplete.js +0 -0
  365. /package/node_modules/{@mariozechner → @earendil-works}/pi-tui/dist/components/box.js +0 -0
  366. /package/node_modules/{@mariozechner → @earendil-works}/pi-tui/dist/components/cancellable-loader.js +0 -0
  367. /package/node_modules/{@mariozechner → @earendil-works}/pi-tui/dist/components/editor.js +0 -0
  368. /package/node_modules/{@mariozechner → @earendil-works}/pi-tui/dist/components/input.js +0 -0
  369. /package/node_modules/{@mariozechner → @earendil-works}/pi-tui/dist/components/loader.js +0 -0
  370. /package/node_modules/{@mariozechner → @earendil-works}/pi-tui/dist/components/select-list.js +0 -0
  371. /package/node_modules/{@mariozechner → @earendil-works}/pi-tui/dist/components/settings-list.js +0 -0
  372. /package/node_modules/{@mariozechner → @earendil-works}/pi-tui/dist/components/spacer.js +0 -0
  373. /package/node_modules/{@mariozechner → @earendil-works}/pi-tui/dist/components/text.js +0 -0
  374. /package/node_modules/{@mariozechner → @earendil-works}/pi-tui/dist/components/truncated-text.js +0 -0
  375. /package/node_modules/{@mariozechner → @earendil-works}/pi-tui/dist/editor-component.js +0 -0
  376. /package/node_modules/{@mariozechner → @earendil-works}/pi-tui/dist/fuzzy.js +0 -0
  377. /package/node_modules/{@mariozechner → @earendil-works}/pi-tui/dist/index.js +0 -0
  378. /package/node_modules/{@mariozechner → @earendil-works}/pi-tui/dist/keybindings.js +0 -0
  379. /package/node_modules/{@mariozechner → @earendil-works}/pi-tui/dist/keys.js +0 -0
  380. /package/node_modules/{@mariozechner → @earendil-works}/pi-tui/dist/kill-ring.js +0 -0
  381. /package/node_modules/{@mariozechner → @earendil-works}/pi-tui/dist/stdin-buffer.js +0 -0
  382. /package/node_modules/{@mariozechner → @earendil-works}/pi-tui/dist/terminal.js +0 -0
  383. /package/node_modules/{@mariozechner → @earendil-works}/pi-tui/dist/undo-stack.js +0 -0
  384. /package/node_modules/{@mariozechner/jiti → jiti}/LICENSE +0 -0
  385. /package/node_modules/{@mariozechner/jiti → jiti}/lib/jiti-cli.mjs +0 -0
  386. /package/node_modules/{@mariozechner/jiti → jiti}/lib/jiti-hooks.mjs +0 -0
  387. /package/node_modules/{@mariozechner/jiti → jiti}/lib/jiti-native.mjs +0 -0
  388. /package/node_modules/{@mariozechner/jiti → jiti}/lib/jiti-register.d.mts +0 -0
  389. /package/node_modules/{@mariozechner/jiti → jiti}/lib/jiti-register.mjs +0 -0
  390. /package/node_modules/{@mariozechner/jiti/lib/jiti.mjs → jiti/lib/jiti-static.mjs} +0 -0
  391. /package/node_modules/{@mariozechner/jiti → jiti}/lib/jiti.cjs +0 -0
  392. /package/node_modules/{@mariozechner/jiti → jiti}/lib/jiti.d.cts +0 -0
  393. /package/node_modules/{@mariozechner/jiti → jiti}/lib/jiti.d.mts +0 -0
@@ -1,220 +0,0 @@
1
- import OpenAI from "openai";
2
- import { getEnvApiKey } from "../env-api-keys.js";
3
- import { clampThinkingLevel } from "../models.js";
4
- import { AssistantMessageEventStream } from "../utils/event-stream.js";
5
- import { headersToRecord } from "../utils/headers.js";
6
- import { isCloudflareProvider, resolveCloudflareBaseUrl } from "./cloudflare.js";
7
- import { buildCopilotDynamicHeaders, hasCopilotVisionInput } from "./github-copilot-headers.js";
8
- import { convertResponsesMessages, convertResponsesTools, processResponsesStream } from "./openai-responses-shared.js";
9
- import { buildBaseOptions } from "./simple-options.js";
10
- const OPENAI_TOOL_CALL_PROVIDERS = new Set(["openai", "openai-codex", "opencode"]);
11
- /**
12
- * Resolve cache retention preference.
13
- * Defaults to "short" and uses PI_CACHE_RETENTION for backward compatibility.
14
- */
15
- function resolveCacheRetention(cacheRetention) {
16
- if (cacheRetention) {
17
- return cacheRetention;
18
- }
19
- if (typeof process !== "undefined" && process.env.PI_CACHE_RETENTION === "long") {
20
- return "long";
21
- }
22
- return "short";
23
- }
24
- function getCompat(model) {
25
- return {
26
- sendSessionIdHeader: model.compat?.sendSessionIdHeader ?? true,
27
- supportsLongCacheRetention: model.compat?.supportsLongCacheRetention ?? true,
28
- };
29
- }
30
- function getPromptCacheRetention(compat, cacheRetention) {
31
- return cacheRetention === "long" && compat.supportsLongCacheRetention ? "24h" : undefined;
32
- }
33
- /**
34
- * Generate function for OpenAI Responses API
35
- */
36
- export const streamOpenAIResponses = (model, context, options) => {
37
- const stream = new AssistantMessageEventStream();
38
- // Start async processing
39
- (async () => {
40
- const output = {
41
- role: "assistant",
42
- content: [],
43
- api: model.api,
44
- provider: model.provider,
45
- model: model.id,
46
- usage: {
47
- input: 0,
48
- output: 0,
49
- cacheRead: 0,
50
- cacheWrite: 0,
51
- totalTokens: 0,
52
- cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
53
- },
54
- stopReason: "stop",
55
- timestamp: Date.now(),
56
- };
57
- try {
58
- // Create OpenAI client
59
- const apiKey = options?.apiKey || getEnvApiKey(model.provider) || "";
60
- const cacheRetention = resolveCacheRetention(options?.cacheRetention);
61
- const cacheSessionId = cacheRetention === "none" ? undefined : options?.sessionId;
62
- const client = createClient(model, context, apiKey, options?.headers, cacheSessionId);
63
- let params = buildParams(model, context, options);
64
- const nextParams = await options?.onPayload?.(params, model);
65
- if (nextParams !== undefined) {
66
- params = nextParams;
67
- }
68
- const requestOptions = {
69
- ...(options?.signal ? { signal: options.signal } : {}),
70
- ...(options?.timeoutMs !== undefined ? { timeout: options.timeoutMs } : {}),
71
- ...(options?.maxRetries !== undefined ? { maxRetries: options.maxRetries } : {}),
72
- };
73
- const { data: openaiStream, response } = await client.responses.create(params, requestOptions).withResponse();
74
- await options?.onResponse?.({ status: response.status, headers: headersToRecord(response.headers) }, model);
75
- stream.push({ type: "start", partial: output });
76
- await processResponsesStream(openaiStream, output, stream, model, {
77
- serviceTier: options?.serviceTier,
78
- applyServiceTierPricing: (usage, serviceTier) => applyServiceTierPricing(usage, serviceTier, model),
79
- });
80
- if (options?.signal?.aborted) {
81
- throw new Error("Request was aborted");
82
- }
83
- if (output.stopReason === "aborted" || output.stopReason === "error") {
84
- throw new Error("An unknown error occurred");
85
- }
86
- stream.push({ type: "done", reason: output.stopReason, message: output });
87
- stream.end();
88
- }
89
- catch (error) {
90
- for (const block of output.content) {
91
- delete block.index;
92
- // partialJson is only a streaming scratch buffer; never persist it.
93
- delete block.partialJson;
94
- }
95
- output.stopReason = options?.signal?.aborted ? "aborted" : "error";
96
- output.errorMessage = error instanceof Error ? error.message : JSON.stringify(error);
97
- stream.push({ type: "error", reason: output.stopReason, error: output });
98
- stream.end();
99
- }
100
- })();
101
- return stream;
102
- };
103
- export const streamSimpleOpenAIResponses = (model, context, options) => {
104
- const apiKey = options?.apiKey || getEnvApiKey(model.provider);
105
- if (!apiKey) {
106
- throw new Error(`No API key for provider: ${model.provider}`);
107
- }
108
- const base = buildBaseOptions(model, options, apiKey);
109
- const clampedReasoning = options?.reasoning ? clampThinkingLevel(model, options.reasoning) : undefined;
110
- const reasoningEffort = clampedReasoning === "off" ? undefined : clampedReasoning;
111
- return streamOpenAIResponses(model, context, {
112
- ...base,
113
- reasoningEffort,
114
- });
115
- };
116
- function createClient(model, context, apiKey, optionsHeaders, sessionId) {
117
- if (!apiKey) {
118
- if (!process.env.OPENAI_API_KEY) {
119
- throw new Error("OpenAI API key is required. Set OPENAI_API_KEY environment variable or pass it as an argument.");
120
- }
121
- apiKey = process.env.OPENAI_API_KEY;
122
- }
123
- const compat = getCompat(model);
124
- const headers = { ...model.headers };
125
- if (model.provider === "github-copilot") {
126
- const hasImages = hasCopilotVisionInput(context.messages);
127
- const copilotHeaders = buildCopilotDynamicHeaders({
128
- messages: context.messages,
129
- hasImages,
130
- });
131
- Object.assign(headers, copilotHeaders);
132
- }
133
- if (sessionId) {
134
- if (compat.sendSessionIdHeader) {
135
- headers.session_id = sessionId;
136
- }
137
- headers["x-client-request-id"] = sessionId;
138
- }
139
- // Merge options headers last so they can override defaults
140
- if (optionsHeaders) {
141
- Object.assign(headers, optionsHeaders);
142
- }
143
- const defaultHeaders = model.provider === "cloudflare-ai-gateway"
144
- ? {
145
- ...headers,
146
- Authorization: headers.Authorization ?? null,
147
- "cf-aig-authorization": `Bearer ${apiKey}`,
148
- }
149
- : headers;
150
- return new OpenAI({
151
- apiKey,
152
- baseURL: isCloudflareProvider(model.provider) ? resolveCloudflareBaseUrl(model) : model.baseUrl,
153
- dangerouslyAllowBrowser: true,
154
- defaultHeaders,
155
- });
156
- }
157
- function buildParams(model, context, options) {
158
- const messages = convertResponsesMessages(model, context, OPENAI_TOOL_CALL_PROVIDERS);
159
- const cacheRetention = resolveCacheRetention(options?.cacheRetention);
160
- const compat = getCompat(model);
161
- const params = {
162
- model: model.id,
163
- input: messages,
164
- stream: true,
165
- prompt_cache_key: cacheRetention === "none" ? undefined : options?.sessionId,
166
- prompt_cache_retention: getPromptCacheRetention(compat, cacheRetention),
167
- store: false,
168
- };
169
- if (options?.maxTokens) {
170
- params.max_output_tokens = options?.maxTokens;
171
- }
172
- if (options?.temperature !== undefined) {
173
- params.temperature = options?.temperature;
174
- }
175
- if (options?.serviceTier !== undefined) {
176
- params.service_tier = options.serviceTier;
177
- }
178
- if (context.tools && context.tools.length > 0) {
179
- params.tools = convertResponsesTools(context.tools);
180
- }
181
- if (model.reasoning) {
182
- if (options?.reasoningEffort || options?.reasoningSummary) {
183
- const effort = options?.reasoningEffort
184
- ? (model.thinkingLevelMap?.[options.reasoningEffort] ?? options.reasoningEffort)
185
- : "medium";
186
- params.reasoning = {
187
- effort: effort,
188
- summary: options?.reasoningSummary || "auto",
189
- };
190
- params.include = ["reasoning.encrypted_content"];
191
- }
192
- else if (model.provider !== "github-copilot" && model.thinkingLevelMap?.off !== null) {
193
- params.reasoning = {
194
- effort: (model.thinkingLevelMap?.off ?? "none"),
195
- };
196
- }
197
- }
198
- return params;
199
- }
200
- function getServiceTierCostMultiplier(model, serviceTier) {
201
- switch (serviceTier) {
202
- case "flex":
203
- return 0.5;
204
- case "priority":
205
- return model.id === "gpt-5.5" ? 2.5 : 2;
206
- default:
207
- return 1;
208
- }
209
- }
210
- function applyServiceTierPricing(usage, serviceTier, model) {
211
- const multiplier = getServiceTierCostMultiplier(model, serviceTier);
212
- if (multiplier === 1)
213
- return;
214
- usage.cost.input *= multiplier;
215
- usage.cost.output *= multiplier;
216
- usage.cost.cacheRead *= multiplier;
217
- usage.cost.cacheWrite *= multiplier;
218
- usage.cost.total = usage.cost.input + usage.cost.output + usage.cost.cacheRead + usage.cost.cacheWrite;
219
- }
220
- //# sourceMappingURL=openai-responses.js.map
@@ -1,243 +0,0 @@
1
- import { clearApiProviders, registerApiProvider } from "../api-registry.js";
2
- import { AssistantMessageEventStream } from "../utils/event-stream.js";
3
- const importNodeOnlyProvider = (specifier) => import(specifier);
4
- let anthropicProviderModulePromise;
5
- let azureOpenAIResponsesProviderModulePromise;
6
- let googleProviderModulePromise;
7
- let googleVertexProviderModulePromise;
8
- let mistralProviderModulePromise;
9
- let openAICodexResponsesProviderModulePromise;
10
- let openAICompletionsProviderModulePromise;
11
- let openAIResponsesProviderModulePromise;
12
- let bedrockProviderModuleOverride;
13
- let bedrockProviderModulePromise;
14
- export function setBedrockProviderModule(module) {
15
- bedrockProviderModuleOverride = {
16
- stream: module.streamBedrock,
17
- streamSimple: module.streamSimpleBedrock,
18
- };
19
- }
20
- function forwardStream(target, source) {
21
- (async () => {
22
- for await (const event of source) {
23
- target.push(event);
24
- }
25
- target.end();
26
- })();
27
- }
28
- function createLazyLoadErrorMessage(model, error) {
29
- return {
30
- role: "assistant",
31
- content: [],
32
- api: model.api,
33
- provider: model.provider,
34
- model: model.id,
35
- usage: {
36
- input: 0,
37
- output: 0,
38
- cacheRead: 0,
39
- cacheWrite: 0,
40
- totalTokens: 0,
41
- cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
42
- },
43
- stopReason: "error",
44
- errorMessage: error instanceof Error ? error.message : String(error),
45
- timestamp: Date.now(),
46
- };
47
- }
48
- function createLazyStream(loadModule) {
49
- return (model, context, options) => {
50
- const outer = new AssistantMessageEventStream();
51
- loadModule()
52
- .then((module) => {
53
- const inner = module.stream(model, context, options);
54
- forwardStream(outer, inner);
55
- })
56
- .catch((error) => {
57
- const message = createLazyLoadErrorMessage(model, error);
58
- outer.push({ type: "error", reason: "error", error: message });
59
- outer.end(message);
60
- });
61
- return outer;
62
- };
63
- }
64
- function createLazySimpleStream(loadModule) {
65
- return (model, context, options) => {
66
- const outer = new AssistantMessageEventStream();
67
- loadModule()
68
- .then((module) => {
69
- const inner = module.streamSimple(model, context, options);
70
- forwardStream(outer, inner);
71
- })
72
- .catch((error) => {
73
- const message = createLazyLoadErrorMessage(model, error);
74
- outer.push({ type: "error", reason: "error", error: message });
75
- outer.end(message);
76
- });
77
- return outer;
78
- };
79
- }
80
- function loadAnthropicProviderModule() {
81
- anthropicProviderModulePromise ||= import("./anthropic.js").then((module) => {
82
- const provider = module;
83
- return {
84
- stream: provider.streamAnthropic,
85
- streamSimple: provider.streamSimpleAnthropic,
86
- };
87
- });
88
- return anthropicProviderModulePromise;
89
- }
90
- function loadAzureOpenAIResponsesProviderModule() {
91
- azureOpenAIResponsesProviderModulePromise ||= import("./azure-openai-responses.js").then((module) => {
92
- const provider = module;
93
- return {
94
- stream: provider.streamAzureOpenAIResponses,
95
- streamSimple: provider.streamSimpleAzureOpenAIResponses,
96
- };
97
- });
98
- return azureOpenAIResponsesProviderModulePromise;
99
- }
100
- function loadGoogleProviderModule() {
101
- googleProviderModulePromise ||= import("./google.js").then((module) => {
102
- const provider = module;
103
- return {
104
- stream: provider.streamGoogle,
105
- streamSimple: provider.streamSimpleGoogle,
106
- };
107
- });
108
- return googleProviderModulePromise;
109
- }
110
- function loadGoogleVertexProviderModule() {
111
- googleVertexProviderModulePromise ||= import("./google-vertex.js").then((module) => {
112
- const provider = module;
113
- return {
114
- stream: provider.streamGoogleVertex,
115
- streamSimple: provider.streamSimpleGoogleVertex,
116
- };
117
- });
118
- return googleVertexProviderModulePromise;
119
- }
120
- function loadMistralProviderModule() {
121
- mistralProviderModulePromise ||= import("./mistral.js").then((module) => {
122
- const provider = module;
123
- return {
124
- stream: provider.streamMistral,
125
- streamSimple: provider.streamSimpleMistral,
126
- };
127
- });
128
- return mistralProviderModulePromise;
129
- }
130
- function loadOpenAICodexResponsesProviderModule() {
131
- openAICodexResponsesProviderModulePromise ||= import("./openai-codex-responses.js").then((module) => {
132
- const provider = module;
133
- return {
134
- stream: provider.streamOpenAICodexResponses,
135
- streamSimple: provider.streamSimpleOpenAICodexResponses,
136
- };
137
- });
138
- return openAICodexResponsesProviderModulePromise;
139
- }
140
- function loadOpenAICompletionsProviderModule() {
141
- openAICompletionsProviderModulePromise ||= import("./openai-completions.js").then((module) => {
142
- const provider = module;
143
- return {
144
- stream: provider.streamOpenAICompletions,
145
- streamSimple: provider.streamSimpleOpenAICompletions,
146
- };
147
- });
148
- return openAICompletionsProviderModulePromise;
149
- }
150
- function loadOpenAIResponsesProviderModule() {
151
- openAIResponsesProviderModulePromise ||= import("./openai-responses.js").then((module) => {
152
- const provider = module;
153
- return {
154
- stream: provider.streamOpenAIResponses,
155
- streamSimple: provider.streamSimpleOpenAIResponses,
156
- };
157
- });
158
- return openAIResponsesProviderModulePromise;
159
- }
160
- function loadBedrockProviderModule() {
161
- if (bedrockProviderModuleOverride) {
162
- return Promise.resolve(bedrockProviderModuleOverride);
163
- }
164
- bedrockProviderModulePromise ||= importNodeOnlyProvider("./amazon-bedrock.js").then((module) => {
165
- const provider = module;
166
- return {
167
- stream: provider.streamBedrock,
168
- streamSimple: provider.streamSimpleBedrock,
169
- };
170
- });
171
- return bedrockProviderModulePromise;
172
- }
173
- export const streamAnthropic = createLazyStream(loadAnthropicProviderModule);
174
- export const streamSimpleAnthropic = createLazySimpleStream(loadAnthropicProviderModule);
175
- export const streamAzureOpenAIResponses = createLazyStream(loadAzureOpenAIResponsesProviderModule);
176
- export const streamSimpleAzureOpenAIResponses = createLazySimpleStream(loadAzureOpenAIResponsesProviderModule);
177
- export const streamGoogle = createLazyStream(loadGoogleProviderModule);
178
- export const streamSimpleGoogle = createLazySimpleStream(loadGoogleProviderModule);
179
- export const streamGoogleVertex = createLazyStream(loadGoogleVertexProviderModule);
180
- export const streamSimpleGoogleVertex = createLazySimpleStream(loadGoogleVertexProviderModule);
181
- export const streamMistral = createLazyStream(loadMistralProviderModule);
182
- export const streamSimpleMistral = createLazySimpleStream(loadMistralProviderModule);
183
- export const streamOpenAICodexResponses = createLazyStream(loadOpenAICodexResponsesProviderModule);
184
- export const streamSimpleOpenAICodexResponses = createLazySimpleStream(loadOpenAICodexResponsesProviderModule);
185
- export const streamOpenAICompletions = createLazyStream(loadOpenAICompletionsProviderModule);
186
- export const streamSimpleOpenAICompletions = createLazySimpleStream(loadOpenAICompletionsProviderModule);
187
- export const streamOpenAIResponses = createLazyStream(loadOpenAIResponsesProviderModule);
188
- export const streamSimpleOpenAIResponses = createLazySimpleStream(loadOpenAIResponsesProviderModule);
189
- const streamBedrockLazy = createLazyStream(loadBedrockProviderModule);
190
- const streamSimpleBedrockLazy = createLazySimpleStream(loadBedrockProviderModule);
191
- export function registerBuiltInApiProviders() {
192
- registerApiProvider({
193
- api: "anthropic-messages",
194
- stream: streamAnthropic,
195
- streamSimple: streamSimpleAnthropic,
196
- });
197
- registerApiProvider({
198
- api: "openai-completions",
199
- stream: streamOpenAICompletions,
200
- streamSimple: streamSimpleOpenAICompletions,
201
- });
202
- registerApiProvider({
203
- api: "mistral-conversations",
204
- stream: streamMistral,
205
- streamSimple: streamSimpleMistral,
206
- });
207
- registerApiProvider({
208
- api: "openai-responses",
209
- stream: streamOpenAIResponses,
210
- streamSimple: streamSimpleOpenAIResponses,
211
- });
212
- registerApiProvider({
213
- api: "azure-openai-responses",
214
- stream: streamAzureOpenAIResponses,
215
- streamSimple: streamSimpleAzureOpenAIResponses,
216
- });
217
- registerApiProvider({
218
- api: "openai-codex-responses",
219
- stream: streamOpenAICodexResponses,
220
- streamSimple: streamSimpleOpenAICodexResponses,
221
- });
222
- registerApiProvider({
223
- api: "google-generative-ai",
224
- stream: streamGoogle,
225
- streamSimple: streamSimpleGoogle,
226
- });
227
- registerApiProvider({
228
- api: "google-vertex",
229
- stream: streamGoogleVertex,
230
- streamSimple: streamSimpleGoogleVertex,
231
- });
232
- registerApiProvider({
233
- api: "bedrock-converse-stream",
234
- stream: streamBedrockLazy,
235
- streamSimple: streamSimpleBedrockLazy,
236
- });
237
- }
238
- export function resetApiProviders() {
239
- clearApiProviders();
240
- registerBuiltInApiProviders();
241
- }
242
- registerBuiltInApiProviders();
243
- //# sourceMappingURL=register-builtins.js.map
@@ -1,39 +0,0 @@
1
- export function buildBaseOptions(model, options, apiKey) {
2
- return {
3
- temperature: options?.temperature,
4
- maxTokens: options?.maxTokens ?? (model.maxTokens > 0 ? Math.min(model.maxTokens, 32000) : undefined),
5
- signal: options?.signal,
6
- apiKey: apiKey || options?.apiKey,
7
- transport: options?.transport,
8
- cacheRetention: options?.cacheRetention,
9
- sessionId: options?.sessionId,
10
- headers: options?.headers,
11
- onPayload: options?.onPayload,
12
- onResponse: options?.onResponse,
13
- timeoutMs: options?.timeoutMs,
14
- maxRetries: options?.maxRetries,
15
- maxRetryDelayMs: options?.maxRetryDelayMs,
16
- metadata: options?.metadata,
17
- };
18
- }
19
- export function clampReasoning(effort) {
20
- return effort === "xhigh" ? "high" : effort;
21
- }
22
- export function adjustMaxTokensForThinking(baseMaxTokens, modelMaxTokens, reasoningLevel, customBudgets) {
23
- const defaultBudgets = {
24
- minimal: 1024,
25
- low: 2048,
26
- medium: 8192,
27
- high: 16384,
28
- };
29
- const budgets = { ...defaultBudgets, ...customBudgets };
30
- const minOutputTokens = 1024;
31
- const level = clampReasoning(reasoningLevel);
32
- let thinkingBudget = budgets[level];
33
- const maxTokens = Math.min(baseMaxTokens + thinkingBudget, modelMaxTokens);
34
- if (maxTokens <= thinkingBudget) {
35
- thinkingBudget = Math.max(0, maxTokens - minOutputTokens);
36
- }
37
- return { maxTokens, thinkingBudget };
38
- }
39
- //# sourceMappingURL=simple-options.js.map
@@ -1,184 +0,0 @@
1
- const NON_VISION_USER_IMAGE_PLACEHOLDER = "(image omitted: model does not support images)";
2
- const NON_VISION_TOOL_IMAGE_PLACEHOLDER = "(tool image omitted: model does not support images)";
3
- function replaceImagesWithPlaceholder(content, placeholder) {
4
- const result = [];
5
- let previousWasPlaceholder = false;
6
- for (const block of content) {
7
- if (block.type === "image") {
8
- if (!previousWasPlaceholder) {
9
- result.push({ type: "text", text: placeholder });
10
- }
11
- previousWasPlaceholder = true;
12
- continue;
13
- }
14
- result.push(block);
15
- previousWasPlaceholder = block.text === placeholder;
16
- }
17
- return result;
18
- }
19
- function downgradeUnsupportedImages(messages, model) {
20
- if (model.input.includes("image")) {
21
- return messages;
22
- }
23
- return messages.map((msg) => {
24
- if (msg.role === "user" && Array.isArray(msg.content)) {
25
- return {
26
- ...msg,
27
- content: replaceImagesWithPlaceholder(msg.content, NON_VISION_USER_IMAGE_PLACEHOLDER),
28
- };
29
- }
30
- if (msg.role === "toolResult") {
31
- return {
32
- ...msg,
33
- content: replaceImagesWithPlaceholder(msg.content, NON_VISION_TOOL_IMAGE_PLACEHOLDER),
34
- };
35
- }
36
- return msg;
37
- });
38
- }
39
- /**
40
- * Normalize tool call ID for cross-provider compatibility.
41
- * OpenAI Responses API generates IDs that are 450+ chars with special characters like `|`.
42
- * Anthropic APIs require IDs matching ^[a-zA-Z0-9_-]+$ (max 64 chars).
43
- */
44
- export function transformMessages(messages, model, normalizeToolCallId) {
45
- // Build a map of original tool call IDs to normalized IDs
46
- const toolCallIdMap = new Map();
47
- const imageAwareMessages = downgradeUnsupportedImages(messages, model);
48
- // First pass: transform messages (unsupported image downgrade, thinking blocks, tool call ID normalization)
49
- const transformed = imageAwareMessages.map((msg) => {
50
- // User messages pass through unchanged
51
- if (msg.role === "user") {
52
- return msg;
53
- }
54
- // Handle toolResult messages - normalize toolCallId if we have a mapping
55
- if (msg.role === "toolResult") {
56
- const normalizedId = toolCallIdMap.get(msg.toolCallId);
57
- if (normalizedId && normalizedId !== msg.toolCallId) {
58
- return { ...msg, toolCallId: normalizedId };
59
- }
60
- return msg;
61
- }
62
- // Assistant messages need transformation check
63
- if (msg.role === "assistant") {
64
- const assistantMsg = msg;
65
- const isSameModel = assistantMsg.provider === model.provider &&
66
- assistantMsg.api === model.api &&
67
- assistantMsg.model === model.id;
68
- const transformedContent = assistantMsg.content.flatMap((block) => {
69
- if (block.type === "thinking") {
70
- // Redacted thinking is opaque encrypted content, only valid for the same model.
71
- // Drop it for cross-model to avoid API errors.
72
- if (block.redacted) {
73
- return isSameModel ? block : [];
74
- }
75
- // For same model: keep thinking blocks with signatures (needed for replay)
76
- // even if the thinking text is empty (OpenAI encrypted reasoning)
77
- if (isSameModel && block.thinkingSignature)
78
- return block;
79
- // Skip empty thinking blocks, convert others to plain text
80
- if (!block.thinking || block.thinking.trim() === "")
81
- return [];
82
- if (isSameModel)
83
- return block;
84
- return {
85
- type: "text",
86
- text: block.thinking,
87
- };
88
- }
89
- if (block.type === "text") {
90
- if (isSameModel)
91
- return block;
92
- return {
93
- type: "text",
94
- text: block.text,
95
- };
96
- }
97
- if (block.type === "toolCall") {
98
- const toolCall = block;
99
- let normalizedToolCall = toolCall;
100
- if (!isSameModel && toolCall.thoughtSignature) {
101
- normalizedToolCall = { ...toolCall };
102
- delete normalizedToolCall.thoughtSignature;
103
- }
104
- if (!isSameModel && normalizeToolCallId) {
105
- const normalizedId = normalizeToolCallId(toolCall.id, model, assistantMsg);
106
- if (normalizedId !== toolCall.id) {
107
- toolCallIdMap.set(toolCall.id, normalizedId);
108
- normalizedToolCall = { ...normalizedToolCall, id: normalizedId };
109
- }
110
- }
111
- return normalizedToolCall;
112
- }
113
- return block;
114
- });
115
- return {
116
- ...assistantMsg,
117
- content: transformedContent,
118
- };
119
- }
120
- return msg;
121
- });
122
- // Second pass: insert synthetic empty tool results for orphaned tool calls
123
- // This preserves thinking signatures and satisfies API requirements
124
- const result = [];
125
- let pendingToolCalls = [];
126
- let existingToolResultIds = new Set();
127
- const insertSyntheticToolResults = () => {
128
- if (pendingToolCalls.length > 0) {
129
- for (const tc of pendingToolCalls) {
130
- if (!existingToolResultIds.has(tc.id)) {
131
- result.push({
132
- role: "toolResult",
133
- toolCallId: tc.id,
134
- toolName: tc.name,
135
- content: [{ type: "text", text: "No result provided" }],
136
- isError: true,
137
- timestamp: Date.now(),
138
- });
139
- }
140
- }
141
- pendingToolCalls = [];
142
- existingToolResultIds = new Set();
143
- }
144
- };
145
- for (let i = 0; i < transformed.length; i++) {
146
- const msg = transformed[i];
147
- if (msg.role === "assistant") {
148
- // If we have pending orphaned tool calls from a previous assistant, insert synthetic results now
149
- insertSyntheticToolResults();
150
- // Skip errored/aborted assistant messages entirely.
151
- // These are incomplete turns that shouldn't be replayed:
152
- // - May have partial content (reasoning without message, incomplete tool calls)
153
- // - Replaying them can cause API errors (e.g., OpenAI "reasoning without following item")
154
- // - The model should retry from the last valid state
155
- const assistantMsg = msg;
156
- if (assistantMsg.stopReason === "error" || assistantMsg.stopReason === "aborted") {
157
- continue;
158
- }
159
- // Track tool calls from this assistant message
160
- const toolCalls = assistantMsg.content.filter((b) => b.type === "toolCall");
161
- if (toolCalls.length > 0) {
162
- pendingToolCalls = toolCalls;
163
- existingToolResultIds = new Set();
164
- }
165
- result.push(msg);
166
- }
167
- else if (msg.role === "toolResult") {
168
- existingToolResultIds.add(msg.toolCallId);
169
- result.push(msg);
170
- }
171
- else if (msg.role === "user") {
172
- // User message interrupts tool flow - insert synthetic results for orphaned calls
173
- insertSyntheticToolResults();
174
- result.push(msg);
175
- }
176
- else {
177
- result.push(msg);
178
- }
179
- }
180
- // If the conversation ends with unresolved tool calls, synthesize results now.
181
- insertSyntheticToolResults();
182
- return result;
183
- }
184
- //# sourceMappingURL=transform-messages.js.map