@chances-ai/engine 24.0.0

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 (389) hide show
  1. package/dist/agents/discover.d.ts +30 -0
  2. package/dist/agents/discover.d.ts.map +1 -0
  3. package/dist/agents/discover.js +183 -0
  4. package/dist/agents/discover.js.map +1 -0
  5. package/dist/agents/index.d.ts +20 -0
  6. package/dist/agents/index.d.ts.map +1 -0
  7. package/dist/agents/index.js +52 -0
  8. package/dist/agents/index.js.map +1 -0
  9. package/dist/agents/parse.d.ts +61 -0
  10. package/dist/agents/parse.d.ts.map +1 -0
  11. package/dist/agents/parse.js +527 -0
  12. package/dist/agents/parse.js.map +1 -0
  13. package/dist/agents/types.d.ts +52 -0
  14. package/dist/agents/types.d.ts.map +1 -0
  15. package/dist/agents/types.js +8 -0
  16. package/dist/agents/types.js.map +1 -0
  17. package/dist/ai/adapters/ai-sdk-stream.d.ts +19 -0
  18. package/dist/ai/adapters/ai-sdk-stream.d.ts.map +1 -0
  19. package/dist/ai/adapters/ai-sdk-stream.js +125 -0
  20. package/dist/ai/adapters/ai-sdk-stream.js.map +1 -0
  21. package/dist/ai/adapters/ai-sdk.d.ts +56 -0
  22. package/dist/ai/adapters/ai-sdk.d.ts.map +1 -0
  23. package/dist/ai/adapters/ai-sdk.js +112 -0
  24. package/dist/ai/adapters/ai-sdk.js.map +1 -0
  25. package/dist/ai/adapters/mock.d.ts +13 -0
  26. package/dist/ai/adapters/mock.d.ts.map +1 -0
  27. package/dist/ai/adapters/mock.js +54 -0
  28. package/dist/ai/adapters/mock.js.map +1 -0
  29. package/dist/ai/adapters/openai-compatible.d.ts +23 -0
  30. package/dist/ai/adapters/openai-compatible.d.ts.map +1 -0
  31. package/dist/ai/adapters/openai-compatible.js +45 -0
  32. package/dist/ai/adapters/openai-compatible.js.map +1 -0
  33. package/dist/ai/cost.d.ts +3 -0
  34. package/dist/ai/cost.d.ts.map +1 -0
  35. package/dist/ai/cost.js +5 -0
  36. package/dist/ai/cost.js.map +1 -0
  37. package/dist/ai/index.d.ts +12 -0
  38. package/dist/ai/index.d.ts.map +1 -0
  39. package/dist/ai/index.js +11 -0
  40. package/dist/ai/index.js.map +1 -0
  41. package/dist/ai/known-models.d.ts +20 -0
  42. package/dist/ai/known-models.d.ts.map +1 -0
  43. package/dist/ai/known-models.js +129 -0
  44. package/dist/ai/known-models.js.map +1 -0
  45. package/dist/ai/registry.d.ts +12 -0
  46. package/dist/ai/registry.d.ts.map +1 -0
  47. package/dist/ai/registry.js +24 -0
  48. package/dist/ai/registry.js.map +1 -0
  49. package/dist/ai/retry.d.ts +11 -0
  50. package/dist/ai/retry.d.ts.map +1 -0
  51. package/dist/ai/retry.js +14 -0
  52. package/dist/ai/retry.js.map +1 -0
  53. package/dist/ai/router.d.ts +25 -0
  54. package/dist/ai/router.d.ts.map +1 -0
  55. package/dist/ai/router.js +36 -0
  56. package/dist/ai/router.js.map +1 -0
  57. package/dist/ai/setup.d.ts +23 -0
  58. package/dist/ai/setup.d.ts.map +1 -0
  59. package/dist/ai/setup.js +47 -0
  60. package/dist/ai/setup.js.map +1 -0
  61. package/dist/ai/summarizer.d.ts +24 -0
  62. package/dist/ai/summarizer.d.ts.map +1 -0
  63. package/dist/ai/summarizer.js +56 -0
  64. package/dist/ai/summarizer.js.map +1 -0
  65. package/dist/ai/types.d.ts +83 -0
  66. package/dist/ai/types.d.ts.map +1 -0
  67. package/dist/ai/types.js +2 -0
  68. package/dist/ai/types.js.map +1 -0
  69. package/dist/core/compaction/circuit-breaker.d.ts +32 -0
  70. package/dist/core/compaction/circuit-breaker.d.ts.map +1 -0
  71. package/dist/core/compaction/circuit-breaker.js +42 -0
  72. package/dist/core/compaction/circuit-breaker.js.map +1 -0
  73. package/dist/core/compaction/compactor.d.ts +75 -0
  74. package/dist/core/compaction/compactor.d.ts.map +1 -0
  75. package/dist/core/compaction/compactor.js +261 -0
  76. package/dist/core/compaction/compactor.js.map +1 -0
  77. package/dist/core/compaction/estimate.d.ts +39 -0
  78. package/dist/core/compaction/estimate.d.ts.map +1 -0
  79. package/dist/core/compaction/estimate.js +74 -0
  80. package/dist/core/compaction/estimate.js.map +1 -0
  81. package/dist/core/compaction/index.d.ts +5 -0
  82. package/dist/core/compaction/index.d.ts.map +1 -0
  83. package/dist/core/compaction/index.js +5 -0
  84. package/dist/core/compaction/index.js.map +1 -0
  85. package/dist/core/compaction/prune.d.ts +43 -0
  86. package/dist/core/compaction/prune.d.ts.map +1 -0
  87. package/dist/core/compaction/prune.js +51 -0
  88. package/dist/core/compaction/prune.js.map +1 -0
  89. package/dist/core/engine.d.ts +268 -0
  90. package/dist/core/engine.d.ts.map +1 -0
  91. package/dist/core/engine.js +767 -0
  92. package/dist/core/engine.js.map +1 -0
  93. package/dist/core/index.d.ts +6 -0
  94. package/dist/core/index.d.ts.map +1 -0
  95. package/dist/core/index.js +6 -0
  96. package/dist/core/index.js.map +1 -0
  97. package/dist/core/task-tool.d.ts +175 -0
  98. package/dist/core/task-tool.d.ts.map +1 -0
  99. package/dist/core/task-tool.js +901 -0
  100. package/dist/core/task-tool.js.map +1 -0
  101. package/dist/core/workspace-query.d.ts +83 -0
  102. package/dist/core/workspace-query.d.ts.map +1 -0
  103. package/dist/core/workspace-query.js +217 -0
  104. package/dist/core/workspace-query.js.map +1 -0
  105. package/dist/core/worktree/active-marker.d.ts +31 -0
  106. package/dist/core/worktree/active-marker.d.ts.map +1 -0
  107. package/dist/core/worktree/active-marker.js +109 -0
  108. package/dist/core/worktree/active-marker.js.map +1 -0
  109. package/dist/core/worktree/create.d.ts +40 -0
  110. package/dist/core/worktree/create.d.ts.map +1 -0
  111. package/dist/core/worktree/create.js +121 -0
  112. package/dist/core/worktree/create.js.map +1 -0
  113. package/dist/core/worktree/errors.d.ts +7 -0
  114. package/dist/core/worktree/errors.d.ts.map +1 -0
  115. package/dist/core/worktree/errors.js +11 -0
  116. package/dist/core/worktree/errors.js.map +1 -0
  117. package/dist/core/worktree/gc.d.ts +39 -0
  118. package/dist/core/worktree/gc.d.ts.map +1 -0
  119. package/dist/core/worktree/gc.js +146 -0
  120. package/dist/core/worktree/gc.js.map +1 -0
  121. package/dist/core/worktree/git.d.ts +53 -0
  122. package/dist/core/worktree/git.d.ts.map +1 -0
  123. package/dist/core/worktree/git.js +166 -0
  124. package/dist/core/worktree/git.js.map +1 -0
  125. package/dist/core/worktree/index.d.ts +8 -0
  126. package/dist/core/worktree/index.d.ts.map +1 -0
  127. package/dist/core/worktree/index.js +8 -0
  128. package/dist/core/worktree/index.js.map +1 -0
  129. package/dist/core/worktree/paths.d.ts +26 -0
  130. package/dist/core/worktree/paths.d.ts.map +1 -0
  131. package/dist/core/worktree/paths.js +57 -0
  132. package/dist/core/worktree/paths.js.map +1 -0
  133. package/dist/core/worktree/slug.d.ts +6 -0
  134. package/dist/core/worktree/slug.d.ts.map +1 -0
  135. package/dist/core/worktree/slug.js +21 -0
  136. package/dist/core/worktree/slug.js.map +1 -0
  137. package/dist/local-vault/file-store.d.ts +64 -0
  138. package/dist/local-vault/file-store.d.ts.map +1 -0
  139. package/dist/local-vault/file-store.js +225 -0
  140. package/dist/local-vault/file-store.js.map +1 -0
  141. package/dist/local-vault/index.d.ts +57 -0
  142. package/dist/local-vault/index.d.ts.map +1 -0
  143. package/dist/local-vault/index.js +68 -0
  144. package/dist/local-vault/index.js.map +1 -0
  145. package/dist/local-vault/keychain.d.ts +58 -0
  146. package/dist/local-vault/keychain.d.ts.map +1 -0
  147. package/dist/local-vault/keychain.js +200 -0
  148. package/dist/local-vault/keychain.js.map +1 -0
  149. package/dist/local-vault/mutex.d.ts +20 -0
  150. package/dist/local-vault/mutex.d.ts.map +1 -0
  151. package/dist/local-vault/mutex.js +44 -0
  152. package/dist/local-vault/mutex.js.map +1 -0
  153. package/dist/local-vault/passphrase.d.ts +30 -0
  154. package/dist/local-vault/passphrase.d.ts.map +1 -0
  155. package/dist/local-vault/passphrase.js +72 -0
  156. package/dist/local-vault/passphrase.js.map +1 -0
  157. package/dist/lsp/config.d.ts +34 -0
  158. package/dist/lsp/config.d.ts.map +1 -0
  159. package/dist/lsp/config.js +68 -0
  160. package/dist/lsp/config.js.map +1 -0
  161. package/dist/lsp/detect.d.ts +7 -0
  162. package/dist/lsp/detect.d.ts.map +1 -0
  163. package/dist/lsp/detect.js +78 -0
  164. package/dist/lsp/detect.js.map +1 -0
  165. package/dist/lsp/errors.d.ts +11 -0
  166. package/dist/lsp/errors.d.ts.map +1 -0
  167. package/dist/lsp/errors.js +11 -0
  168. package/dist/lsp/errors.js.map +1 -0
  169. package/dist/lsp/formatters.d.ts +147 -0
  170. package/dist/lsp/formatters.d.ts.map +1 -0
  171. package/dist/lsp/formatters.js +259 -0
  172. package/dist/lsp/formatters.js.map +1 -0
  173. package/dist/lsp/index.d.ts +31 -0
  174. package/dist/lsp/index.d.ts.map +1 -0
  175. package/dist/lsp/index.js +31 -0
  176. package/dist/lsp/index.js.map +1 -0
  177. package/dist/lsp/instance.d.ts +72 -0
  178. package/dist/lsp/instance.d.ts.map +1 -0
  179. package/dist/lsp/instance.js +489 -0
  180. package/dist/lsp/instance.js.map +1 -0
  181. package/dist/lsp/lazy-load.d.ts +27 -0
  182. package/dist/lsp/lazy-load.d.ts.map +1 -0
  183. package/dist/lsp/lazy-load.js +57 -0
  184. package/dist/lsp/lazy-load.js.map +1 -0
  185. package/dist/lsp/manager.d.ts +59 -0
  186. package/dist/lsp/manager.d.ts.map +1 -0
  187. package/dist/lsp/manager.js +242 -0
  188. package/dist/lsp/manager.js.map +1 -0
  189. package/dist/lsp/ops.d.ts +13 -0
  190. package/dist/lsp/ops.d.ts.map +1 -0
  191. package/dist/lsp/ops.js +225 -0
  192. package/dist/lsp/ops.js.map +1 -0
  193. package/dist/lsp/rpc.d.ts +47 -0
  194. package/dist/lsp/rpc.d.ts.map +1 -0
  195. package/dist/lsp/rpc.js +134 -0
  196. package/dist/lsp/rpc.js.map +1 -0
  197. package/dist/lsp/safe-uri.d.ts +18 -0
  198. package/dist/lsp/safe-uri.d.ts.map +1 -0
  199. package/dist/lsp/safe-uri.js +96 -0
  200. package/dist/lsp/safe-uri.js.map +1 -0
  201. package/dist/lsp/types.d.ts +70 -0
  202. package/dist/lsp/types.d.ts.map +1 -0
  203. package/dist/lsp/types.js +16 -0
  204. package/dist/lsp/types.js.map +1 -0
  205. package/dist/mcp/bridge.d.ts +57 -0
  206. package/dist/mcp/bridge.d.ts.map +1 -0
  207. package/dist/mcp/bridge.js +98 -0
  208. package/dist/mcp/bridge.js.map +1 -0
  209. package/dist/mcp/category.d.ts +22 -0
  210. package/dist/mcp/category.d.ts.map +1 -0
  211. package/dist/mcp/category.js +11 -0
  212. package/dist/mcp/category.js.map +1 -0
  213. package/dist/mcp/client.d.ts +228 -0
  214. package/dist/mcp/client.d.ts.map +1 -0
  215. package/dist/mcp/client.js +352 -0
  216. package/dist/mcp/client.js.map +1 -0
  217. package/dist/mcp/content.d.ts +86 -0
  218. package/dist/mcp/content.d.ts.map +1 -0
  219. package/dist/mcp/content.js +147 -0
  220. package/dist/mcp/content.js.map +1 -0
  221. package/dist/mcp/env.d.ts +19 -0
  222. package/dist/mcp/env.d.ts.map +1 -0
  223. package/dist/mcp/env.js +50 -0
  224. package/dist/mcp/env.js.map +1 -0
  225. package/dist/mcp/host.d.ts +199 -0
  226. package/dist/mcp/host.d.ts.map +1 -0
  227. package/dist/mcp/host.js +530 -0
  228. package/dist/mcp/host.js.map +1 -0
  229. package/dist/mcp/index.d.ts +18 -0
  230. package/dist/mcp/index.d.ts.map +1 -0
  231. package/dist/mcp/index.js +17 -0
  232. package/dist/mcp/index.js.map +1 -0
  233. package/dist/mcp/load-mcp-host.d.ts +32 -0
  234. package/dist/mcp/load-mcp-host.d.ts.map +1 -0
  235. package/dist/mcp/load-mcp-host.js +49 -0
  236. package/dist/mcp/load-mcp-host.js.map +1 -0
  237. package/dist/mcp/oauth/callback-server.d.ts +73 -0
  238. package/dist/mcp/oauth/callback-server.d.ts.map +1 -0
  239. package/dist/mcp/oauth/callback-server.js +280 -0
  240. package/dist/mcp/oauth/callback-server.js.map +1 -0
  241. package/dist/mcp/oauth/config-hash.d.ts +24 -0
  242. package/dist/mcp/oauth/config-hash.d.ts.map +1 -0
  243. package/dist/mcp/oauth/config-hash.js +55 -0
  244. package/dist/mcp/oauth/config-hash.js.map +1 -0
  245. package/dist/mcp/oauth/error-normalize.d.ts +39 -0
  246. package/dist/mcp/oauth/error-normalize.d.ts.map +1 -0
  247. package/dist/mcp/oauth/error-normalize.js +91 -0
  248. package/dist/mcp/oauth/error-normalize.js.map +1 -0
  249. package/dist/mcp/oauth/provider.d.ts +190 -0
  250. package/dist/mcp/oauth/provider.d.ts.map +1 -0
  251. package/dist/mcp/oauth/provider.js +305 -0
  252. package/dist/mcp/oauth/provider.js.map +1 -0
  253. package/dist/mcp/oauth/refresh-coalescer.d.ts +46 -0
  254. package/dist/mcp/oauth/refresh-coalescer.d.ts.map +1 -0
  255. package/dist/mcp/oauth/refresh-coalescer.js +77 -0
  256. package/dist/mcp/oauth/refresh-coalescer.js.map +1 -0
  257. package/dist/mcp/oauth/sdk-shapes.d.ts +77 -0
  258. package/dist/mcp/oauth/sdk-shapes.d.ts.map +1 -0
  259. package/dist/mcp/oauth/sdk-shapes.js +21 -0
  260. package/dist/mcp/oauth/sdk-shapes.js.map +1 -0
  261. package/dist/mcp/parse.d.ts +28 -0
  262. package/dist/mcp/parse.d.ts.map +1 -0
  263. package/dist/mcp/parse.js +209 -0
  264. package/dist/mcp/parse.js.map +1 -0
  265. package/dist/mcp/prompts.d.ts +31 -0
  266. package/dist/mcp/prompts.d.ts.map +1 -0
  267. package/dist/mcp/prompts.js +71 -0
  268. package/dist/mcp/prompts.js.map +1 -0
  269. package/dist/mcp/redact.d.ts +62 -0
  270. package/dist/mcp/redact.d.ts.map +1 -0
  271. package/dist/mcp/redact.js +87 -0
  272. package/dist/mcp/redact.js.map +1 -0
  273. package/dist/mcp/resources.d.ts +70 -0
  274. package/dist/mcp/resources.d.ts.map +1 -0
  275. package/dist/mcp/resources.js +170 -0
  276. package/dist/mcp/resources.js.map +1 -0
  277. package/dist/mcp/types.d.ts +123 -0
  278. package/dist/mcp/types.d.ts.map +1 -0
  279. package/dist/mcp/types.js +2 -0
  280. package/dist/mcp/types.js.map +1 -0
  281. package/dist/memory/frontmatter.d.ts +18 -0
  282. package/dist/memory/frontmatter.d.ts.map +1 -0
  283. package/dist/memory/frontmatter.js +81 -0
  284. package/dist/memory/frontmatter.js.map +1 -0
  285. package/dist/memory/index.d.ts +5 -0
  286. package/dist/memory/index.d.ts.map +1 -0
  287. package/dist/memory/index.js +5 -0
  288. package/dist/memory/index.js.map +1 -0
  289. package/dist/memory/store.d.ts +44 -0
  290. package/dist/memory/store.d.ts.map +1 -0
  291. package/dist/memory/store.js +237 -0
  292. package/dist/memory/store.js.map +1 -0
  293. package/dist/memory/tools.d.ts +11 -0
  294. package/dist/memory/tools.d.ts.map +1 -0
  295. package/dist/memory/tools.js +159 -0
  296. package/dist/memory/tools.js.map +1 -0
  297. package/dist/memory/types.d.ts +32 -0
  298. package/dist/memory/types.d.ts.map +1 -0
  299. package/dist/memory/types.js +20 -0
  300. package/dist/memory/types.js.map +1 -0
  301. package/dist/plugin-api/index.d.ts +167 -0
  302. package/dist/plugin-api/index.d.ts.map +1 -0
  303. package/dist/plugin-api/index.js +151 -0
  304. package/dist/plugin-api/index.js.map +1 -0
  305. package/dist/plugin-logger/index.d.ts +21 -0
  306. package/dist/plugin-logger/index.d.ts.map +1 -0
  307. package/dist/plugin-logger/index.js +59 -0
  308. package/dist/plugin-logger/index.js.map +1 -0
  309. package/dist/session/index.d.ts +125 -0
  310. package/dist/session/index.d.ts.map +1 -0
  311. package/dist/session/index.js +202 -0
  312. package/dist/session/index.js.map +1 -0
  313. package/dist/tools/approval.d.ts +33 -0
  314. package/dist/tools/approval.d.ts.map +1 -0
  315. package/dist/tools/approval.js +53 -0
  316. package/dist/tools/approval.js.map +1 -0
  317. package/dist/tools/builtins/_shared.d.ts +94 -0
  318. package/dist/tools/builtins/_shared.d.ts.map +1 -0
  319. package/dist/tools/builtins/_shared.js +246 -0
  320. package/dist/tools/builtins/_shared.js.map +1 -0
  321. package/dist/tools/builtins/ask-user-question.d.ts +27 -0
  322. package/dist/tools/builtins/ask-user-question.d.ts.map +1 -0
  323. package/dist/tools/builtins/ask-user-question.js +191 -0
  324. package/dist/tools/builtins/ask-user-question.js.map +1 -0
  325. package/dist/tools/builtins/bash.d.ts +3 -0
  326. package/dist/tools/builtins/bash.d.ts.map +1 -0
  327. package/dist/tools/builtins/bash.js +158 -0
  328. package/dist/tools/builtins/bash.js.map +1 -0
  329. package/dist/tools/builtins/diff.d.ts +3 -0
  330. package/dist/tools/builtins/diff.d.ts.map +1 -0
  331. package/dist/tools/builtins/diff.js +83 -0
  332. package/dist/tools/builtins/diff.js.map +1 -0
  333. package/dist/tools/builtins/edit.d.ts +3 -0
  334. package/dist/tools/builtins/edit.d.ts.map +1 -0
  335. package/dist/tools/builtins/edit.js +40 -0
  336. package/dist/tools/builtins/edit.js.map +1 -0
  337. package/dist/tools/builtins/glob.d.ts +3 -0
  338. package/dist/tools/builtins/glob.d.ts.map +1 -0
  339. package/dist/tools/builtins/glob.js +37 -0
  340. package/dist/tools/builtins/glob.js.map +1 -0
  341. package/dist/tools/builtins/grep.d.ts +3 -0
  342. package/dist/tools/builtins/grep.d.ts.map +1 -0
  343. package/dist/tools/builtins/grep.js +81 -0
  344. package/dist/tools/builtins/grep.js.map +1 -0
  345. package/dist/tools/builtins/lsp.d.ts +3 -0
  346. package/dist/tools/builtins/lsp.d.ts.map +1 -0
  347. package/dist/tools/builtins/lsp.js +102 -0
  348. package/dist/tools/builtins/lsp.js.map +1 -0
  349. package/dist/tools/builtins/pty.d.ts +64 -0
  350. package/dist/tools/builtins/pty.d.ts.map +1 -0
  351. package/dist/tools/builtins/pty.js +536 -0
  352. package/dist/tools/builtins/pty.js.map +1 -0
  353. package/dist/tools/builtins/read.d.ts +3 -0
  354. package/dist/tools/builtins/read.d.ts.map +1 -0
  355. package/dist/tools/builtins/read.js +18 -0
  356. package/dist/tools/builtins/read.js.map +1 -0
  357. package/dist/tools/builtins/web-fetch.d.ts +4 -0
  358. package/dist/tools/builtins/web-fetch.d.ts.map +1 -0
  359. package/dist/tools/builtins/web-fetch.js +353 -0
  360. package/dist/tools/builtins/web-fetch.js.map +1 -0
  361. package/dist/tools/builtins/write.d.ts +3 -0
  362. package/dist/tools/builtins/write.d.ts.map +1 -0
  363. package/dist/tools/builtins/write.js +48 -0
  364. package/dist/tools/builtins/write.js.map +1 -0
  365. package/dist/tools/builtins.d.ts +9 -0
  366. package/dist/tools/builtins.d.ts.map +1 -0
  367. package/dist/tools/builtins.js +29 -0
  368. package/dist/tools/builtins.js.map +1 -0
  369. package/dist/tools/diff.d.ts +18 -0
  370. package/dist/tools/diff.d.ts.map +1 -0
  371. package/dist/tools/diff.js +57 -0
  372. package/dist/tools/diff.js.map +1 -0
  373. package/dist/tools/index.d.ts +10 -0
  374. package/dist/tools/index.d.ts.map +1 -0
  375. package/dist/tools/index.js +9 -0
  376. package/dist/tools/index.js.map +1 -0
  377. package/dist/tools/permission.d.ts +120 -0
  378. package/dist/tools/permission.d.ts.map +1 -0
  379. package/dist/tools/permission.js +208 -0
  380. package/dist/tools/permission.js.map +1 -0
  381. package/dist/tools/registry.d.ts +12 -0
  382. package/dist/tools/registry.d.ts.map +1 -0
  383. package/dist/tools/registry.js +19 -0
  384. package/dist/tools/registry.js.map +1 -0
  385. package/dist/tools/types.d.ts +244 -0
  386. package/dist/tools/types.d.ts.map +1 -0
  387. package/dist/tools/types.js +15 -0
  388. package/dist/tools/types.js.map +1 -0
  389. package/package.json +109 -0
@@ -0,0 +1,125 @@
1
+ import { createId } from "@chances-ai/runtime";
2
+ /** Normalize SDK-delivered tool args (typed `unknown`) into a guaranteed
3
+ * JSON-safe `JSONValue` before they cross into the engine/session (codex R2
4
+ * Q5 — the previous `as JSONValue` cast was unsound). A JSON round-trip drops
5
+ * functions/symbols/`undefined` and rejects cycles; non-serializable input
6
+ * degrades to `{}` rather than leaking a non-JSON value downstream. */
7
+ function toJsonArgs(x) {
8
+ if (x === undefined || x === null)
9
+ return {};
10
+ try {
11
+ return JSON.parse(JSON.stringify(x));
12
+ }
13
+ catch {
14
+ return {};
15
+ }
16
+ }
17
+ /**
18
+ * Streams a chat request through any Vercel AI SDK language model. Both
19
+ * {@link AiSdkAdapter} (native @ai-sdk/* providers) and
20
+ * {@link OpenAICompatibleAdapter} (createOpenAICompatible-backed providers)
21
+ * call into this so the normalization → ProviderEvent mapping lives in one
22
+ * place.
23
+ *
24
+ * `model` is typed as `unknown` because the AI SDK module is dynamic-imported
25
+ * and we don't pin its type surface here; callers pass through whatever
26
+ * `streamText({ model })` accepts at their installed version.
27
+ *
28
+ * `loadAi` is a test-only seam — the adapters thread their own
29
+ * `__loadSdkModuleForTest` through it so an end-to-end test can drive the
30
+ * streaming-error redaction path without depending on the real `ai`
31
+ * package's internals. Production callers omit it and pay one `import("ai")`.
32
+ */
33
+ export async function* streamFromAiSdk(model, req, signal, loadAi = () => import("ai")) {
34
+ const ai = (await loadAi().catch(() => null));
35
+ const streamText = ai?.streamText;
36
+ const jsonSchema = ai?.jsonSchema;
37
+ if (typeof streamText !== "function" || typeof jsonSchema !== "function") {
38
+ yield {
39
+ type: "error",
40
+ message: ai
41
+ ? "The 'ai' package is installed but incompatible (missing streamText/jsonSchema)"
42
+ : "The 'ai' package is not installed",
43
+ };
44
+ return;
45
+ }
46
+ const tools = Object.fromEntries(req.tools.map((t) => [
47
+ t.name,
48
+ { description: t.description, parameters: jsonSchema(t.parameters) },
49
+ ]));
50
+ let result;
51
+ try {
52
+ result = streamText({
53
+ model,
54
+ system: req.system,
55
+ messages: req.messages.map(toCoreMessage),
56
+ tools,
57
+ abortSignal: signal,
58
+ });
59
+ }
60
+ catch (err) {
61
+ yield { type: "error", message: err instanceof Error ? err.message : String(err) };
62
+ return;
63
+ }
64
+ try {
65
+ for await (const part of result.fullStream) {
66
+ switch (part.type) {
67
+ case "text-delta":
68
+ yield { type: "text-delta", text: part.text ?? part.textDelta ?? "" };
69
+ break;
70
+ case "tool-call":
71
+ yield {
72
+ type: "tool-call",
73
+ call: {
74
+ callId: part.toolCallId ?? createId("call"),
75
+ name: part.toolName ?? "",
76
+ args: toJsonArgs(part.args ?? part.input),
77
+ },
78
+ };
79
+ break;
80
+ case "finish": {
81
+ const u = part.usage ?? {};
82
+ yield {
83
+ type: "usage",
84
+ usage: {
85
+ inputTokens: u.inputTokens ?? u.promptTokens ?? 0,
86
+ outputTokens: u.outputTokens ?? u.completionTokens ?? 0,
87
+ },
88
+ };
89
+ break;
90
+ }
91
+ case "error":
92
+ yield { type: "error", message: String(part.error ?? "provider error") };
93
+ break;
94
+ }
95
+ }
96
+ }
97
+ catch (err) {
98
+ yield { type: "error", message: err instanceof Error ? err.message : String(err) };
99
+ return;
100
+ }
101
+ yield { type: "done" };
102
+ }
103
+ function toCoreMessage(m) {
104
+ if (m.role === "tool") {
105
+ return {
106
+ role: "tool",
107
+ content: m.content
108
+ .filter((c) => c.type === "tool-result")
109
+ .map((c) => {
110
+ const r = c;
111
+ return { type: "tool-result", toolCallId: r.callId, toolName: r.name, result: r.output };
112
+ }),
113
+ };
114
+ }
115
+ if (m.role === "assistant") {
116
+ return {
117
+ role: "assistant",
118
+ content: m.content.map((c) => c.type === "tool-call"
119
+ ? { type: "tool-call", toolCallId: c.callId, toolName: c.name, args: c.args }
120
+ : { type: "text", text: c.type === "text" ? c.text : "" }),
121
+ };
122
+ }
123
+ return { role: m.role, content: m.content.map((c) => (c.type === "text" ? c.text : "")).join("") };
124
+ }
125
+ //# sourceMappingURL=ai-sdk-stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-sdk-stream.js","sourceRoot":"","sources":["../../../src/ai/adapters/ai-sdk-stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAkB,MAAM,qBAAqB,CAAC;AAsC/D;;;;uEAIuE;AACvE,SAAS,UAAU,CAAC,CAAU;IAC5B,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IAC7C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAc,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,eAAe,CACpC,KAAc,EACd,GAAgB,EAChB,MAAmB,EACnB,SAAiC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;IAEnD,MAAM,EAAE,GAAG,CAAC,MAAM,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAuB,CAAC;IACpE,MAAM,UAAU,GAAG,EAAE,EAAE,UAAU,CAAC;IAClC,MAAM,UAAU,GAAG,EAAE,EAAE,UAAU,CAAC;IAClC,IAAI,OAAO,UAAU,KAAK,UAAU,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE,CAAC;QACzE,MAAM;YACJ,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,EAAE;gBACT,CAAC,CAAC,gFAAgF;gBAClF,CAAC,CAAC,mCAAmC;SACxC,CAAC;QACF,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAC9B,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACnB,CAAC,CAAC,IAAI;QACN,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE;KACrE,CAAC,CACH,CAAC;IAEF,IAAI,MAAqD,CAAC;IAC1D,IAAI,CAAC;QACH,MAAM,GAAG,UAAU,CAAC;YAClB,KAAK;YACL,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC;YACzC,KAAK;YACL,WAAW,EAAE,MAAM;SACpB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QACnF,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YAC3C,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;gBAClB,KAAK,YAAY;oBACf,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;oBACtE,MAAM;gBACR,KAAK,WAAW;oBACd,MAAM;wBACJ,IAAI,EAAE,WAAW;wBACjB,IAAI,EAAE;4BACJ,MAAM,EAAE,IAAI,CAAC,UAAU,IAAI,QAAQ,CAAC,MAAM,CAAC;4BAC3C,IAAI,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;4BACzB,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC;yBAC1C;qBACF,CAAC;oBACF,MAAM;gBACR,KAAK,QAAQ,CAAC,CAAC,CAAC;oBACd,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;oBAC3B,MAAM;wBACJ,IAAI,EAAE,OAAO;wBACb,KAAK,EAAE;4BACL,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,YAAY,IAAI,CAAC;4BACjD,YAAY,EAAE,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,gBAAgB,IAAI,CAAC;yBACxD;qBACF,CAAC;oBACF,MAAM;gBACR,CAAC;gBACD,KAAK,OAAO;oBACV,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,gBAAgB,CAAC,EAAE,CAAC;oBACzE,MAAM;YACV,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QACnF,OAAO;IACT,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AACzB,CAAC;AAED,SAAS,aAAa,CAAC,CAAU;IAC/B,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO;YACL,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,CAAC,CAAC,OAAO;iBACf,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC;iBACvC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACT,MAAM,CAAC,GAAG,CAAkD,CAAC;gBAC7D,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;YAC3F,CAAC,CAAC;SACL,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC3B,OAAO;YACL,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC3B,CAAC,CAAC,IAAI,KAAK,WAAW;gBACpB,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;gBAC7E,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAC5D;SACF,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;AACrG,CAAC"}
@@ -0,0 +1,56 @@
1
+ import type { ChatRequest, ModelDescriptor, ProviderAdapter, ProviderEvent } from "../types.js";
2
+ export type AiSdkProvider = "anthropic" | "openai" | "google";
3
+ /** Maps native AI-SDK providers to the npm package each one needs. Exported
4
+ * so the diagnostic in {@link AiSdkAdapter.createModel} and tests share one
5
+ * source of truth — keep this in sync with `packages/ai/package.json`'s
6
+ * `peerDependencies`. */
7
+ export declare const AI_SDK_PACKAGES: Record<AiSdkProvider, string>;
8
+ export interface AiSdkAdapterOptions {
9
+ /** Provider id — one of the natively-supported AI SDK families. */
10
+ provider: AiSdkProvider;
11
+ apiKey: string;
12
+ models: ModelDescriptor[];
13
+ /**
14
+ * @internal Test-only seam. Production code leaves this undefined and the
15
+ * adapter uses the native `import()` of the package name in
16
+ * {@link AI_SDK_PACKAGES}. Tests inject a stub to simulate a missing peer
17
+ * dependency or return a mocked SDK module without hitting npm. The
18
+ * double-underscore + `ForTest` suffix is the convention to discourage
19
+ * non-test use; the field is intentionally not surfaced anywhere in the
20
+ * CLI or config path.
21
+ */
22
+ __loadSdkModuleForTest?: (specifier: string) => Promise<unknown>;
23
+ }
24
+ /**
25
+ * Adapter pattern over the Vercel AI SDK for providers that have their own
26
+ * `@ai-sdk/<vendor>` package (anthropic / openai / google). Providers that
27
+ * only expose OpenAI-compatible endpoints — including all five Chinese
28
+ * providers — go through {@link OpenAICompatibleAdapter} instead, sharing
29
+ * one adapter class.
30
+ *
31
+ * The SDK module is imported dynamically and typed loosely so the package
32
+ * builds even when `ai` / `@ai-sdk/*` isn't installed, and so minor AI-SDK
33
+ * version drift can't break the typecheck of the whole monorepo. A missing
34
+ * peer-dependency surfaces as a `provider:error` event carrying a concrete
35
+ * install hint — the old behavior was a misleading "Unknown provider".
36
+ */
37
+ export declare class AiSdkAdapter implements ProviderAdapter {
38
+ private readonly opts;
39
+ readonly id: string;
40
+ constructor(opts: AiSdkAdapterOptions);
41
+ listModels(): ModelDescriptor[];
42
+ stream(req: ChatRequest, signal: AbortSignal): AsyncIterable<ProviderEvent>;
43
+ private createModel;
44
+ }
45
+ /** Replaces every occurrence of `apiKey` in `message` with `[REDACTED]`.
46
+ * No-op when the key is empty / shorter than 8 chars (avoids redacting
47
+ * innocuous test fixtures like `""` or `"sk"` that could substring-match
48
+ * real prose). Exact-string match, not regex, so a key containing regex
49
+ * metacharacters can't blow up. Exported so OpenAICompatibleAdapter
50
+ * shares one redactor. */
51
+ export declare function redact(message: string, apiKey: string): string;
52
+ /** Pipes a ProviderEvent stream through {@link redact} for every `error`
53
+ * event's `message`. Other event types pass through unchanged so streaming
54
+ * remains zero-copy for the hot path (text-delta / tool-call / usage). */
55
+ export declare function redactStream(source: AsyncIterable<ProviderEvent>, apiKey: string): AsyncIterable<ProviderEvent>;
56
+ //# sourceMappingURL=ai-sdk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-sdk.d.ts","sourceRoot":"","sources":["../../../src/ai/adapters/ai-sdk.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EACf,eAAe,EACf,aAAa,EACd,MAAM,aAAa,CAAC;AAGrB,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE9D;;;yBAGyB;AACzB,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAIzD,CAAC;AAoBF,MAAM,WAAW,mBAAmB;IAClC,mEAAmE;IACnE,QAAQ,EAAE,aAAa,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B;;;;;;;;OAQG;IACH,sBAAsB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAClE;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,YAAa,YAAW,eAAe;IAGtC,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFjC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;gBAES,IAAI,EAAE,mBAAmB;IAItD,UAAU,IAAI,eAAe,EAAE;IAIxB,MAAM,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,GAAG,aAAa,CAAC,aAAa,CAAC;YAuBpE,WAAW;CAyB1B;AAED;;;;;2BAK2B;AAC3B,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAG9D;AAED;;2EAE2E;AAC3E,wBAAuB,YAAY,CACjC,MAAM,EAAE,aAAa,CAAC,aAAa,CAAC,EACpC,MAAM,EAAE,MAAM,GACb,aAAa,CAAC,aAAa,CAAC,CAQ9B"}
@@ -0,0 +1,112 @@
1
+ import { streamFromAiSdk } from "./ai-sdk-stream.js";
2
+ /** Maps native AI-SDK providers to the npm package each one needs. Exported
3
+ * so the diagnostic in {@link AiSdkAdapter.createModel} and tests share one
4
+ * source of truth — keep this in sync with `packages/ai/package.json`'s
5
+ * `peerDependencies`. */
6
+ export const AI_SDK_PACKAGES = {
7
+ anthropic: "@ai-sdk/anthropic",
8
+ openai: "@ai-sdk/openai",
9
+ google: "@ai-sdk/google",
10
+ };
11
+ /** Provider → the SDK factory export it must expose. */
12
+ const FACTORY_NAMES = {
13
+ anthropic: "createAnthropic",
14
+ openai: "createOpenAI",
15
+ google: "createGoogleGenerativeAI",
16
+ };
17
+ /**
18
+ * Adapter pattern over the Vercel AI SDK for providers that have their own
19
+ * `@ai-sdk/<vendor>` package (anthropic / openai / google). Providers that
20
+ * only expose OpenAI-compatible endpoints — including all five Chinese
21
+ * providers — go through {@link OpenAICompatibleAdapter} instead, sharing
22
+ * one adapter class.
23
+ *
24
+ * The SDK module is imported dynamically and typed loosely so the package
25
+ * builds even when `ai` / `@ai-sdk/*` isn't installed, and so minor AI-SDK
26
+ * version drift can't break the typecheck of the whole monorepo. A missing
27
+ * peer-dependency surfaces as a `provider:error` event carrying a concrete
28
+ * install hint — the old behavior was a misleading "Unknown provider".
29
+ */
30
+ export class AiSdkAdapter {
31
+ opts;
32
+ id;
33
+ constructor(opts) {
34
+ this.opts = opts;
35
+ this.id = opts.provider;
36
+ }
37
+ listModels() {
38
+ return this.opts.models;
39
+ }
40
+ async *stream(req, signal) {
41
+ let model;
42
+ try {
43
+ model = await this.createModel(req.model);
44
+ }
45
+ catch (e) {
46
+ const message = e instanceof Error ? e.message : String(e);
47
+ yield { type: "error", message: redact(message, this.opts.apiKey) };
48
+ return;
49
+ }
50
+ if (!model) {
51
+ yield { type: "error", message: `Unknown provider: ${this.opts.provider}` };
52
+ return;
53
+ }
54
+ // Redact the api key from EVERY downstream error too — streamFromAiSdk
55
+ // wraps `ai.streamText()` / `fullStream` whose errors come straight from
56
+ // the SDK and could in principle echo request headers / auth. Defense in
57
+ // depth: scrub at the adapter boundary regardless of source.
58
+ const loadAi = this.opts.__loadSdkModuleForTest
59
+ ? () => this.opts.__loadSdkModuleForTest("ai")
60
+ : undefined;
61
+ yield* redactStream(streamFromAiSdk(model, req, signal, loadAi), this.opts.apiKey);
62
+ }
63
+ async createModel(modelId) {
64
+ const pkg = AI_SDK_PACKAGES[this.opts.provider];
65
+ if (!pkg)
66
+ return null;
67
+ const load = this.opts.__loadSdkModuleForTest ?? ((specifier) => import(specifier));
68
+ let mod;
69
+ try {
70
+ mod = (await load(pkg));
71
+ }
72
+ catch (cause) {
73
+ const reason = cause instanceof Error ? cause.message : String(cause);
74
+ throw new Error(`Provider '${this.opts.provider}' requires the '${pkg}' npm package to be installed. It is declared as an optional peer dependency of @chances-ai/ai. Install it with the package manager you use (e.g. \`bun add ${pkg}\`, \`npm i ${pkg}\`, \`pnpm add ${pkg}\`). (underlying: ${reason})`);
75
+ }
76
+ // Resolve the provider's factory by name. If the module loaded but lacks
77
+ // the expected `create…` export, surface a clear named error (better than
78
+ // the bare "x is not a function" TypeError the untyped code relied on) —
79
+ // it bubbles to the stream's outer try/catch as an error event.
80
+ const factoryName = FACTORY_NAMES[this.opts.provider];
81
+ const factory = mod[factoryName];
82
+ if (typeof factory !== "function") {
83
+ throw new Error(`Provider '${this.opts.provider}' module '${pkg}' does not expose ${factoryName}.`);
84
+ }
85
+ return factory({ apiKey: this.opts.apiKey })(modelId);
86
+ }
87
+ }
88
+ /** Replaces every occurrence of `apiKey` in `message` with `[REDACTED]`.
89
+ * No-op when the key is empty / shorter than 8 chars (avoids redacting
90
+ * innocuous test fixtures like `""` or `"sk"` that could substring-match
91
+ * real prose). Exact-string match, not regex, so a key containing regex
92
+ * metacharacters can't blow up. Exported so OpenAICompatibleAdapter
93
+ * shares one redactor. */
94
+ export function redact(message, apiKey) {
95
+ if (!apiKey || apiKey.length < 8)
96
+ return message;
97
+ return message.split(apiKey).join("[REDACTED]");
98
+ }
99
+ /** Pipes a ProviderEvent stream through {@link redact} for every `error`
100
+ * event's `message`. Other event types pass through unchanged so streaming
101
+ * remains zero-copy for the hot path (text-delta / tool-call / usage). */
102
+ export async function* redactStream(source, apiKey) {
103
+ for await (const ev of source) {
104
+ if (ev.type === "error") {
105
+ yield { type: "error", message: redact(ev.message, apiKey) };
106
+ }
107
+ else {
108
+ yield ev;
109
+ }
110
+ }
111
+ }
112
+ //# sourceMappingURL=ai-sdk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-sdk.js","sourceRoot":"","sources":["../../../src/ai/adapters/ai-sdk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { ChatRequest, ModelDescriptor, ProviderAdapter, ProviderEvent } from "../types.js";
2
+ /**
3
+ * Deterministic, offline provider used as the default in dev/tests. It drives
4
+ * the full agent loop without network or API keys:
5
+ * - "read <path>" -> issues a `read` tool call, then summarizes the result
6
+ * - otherwise -> streams a short echo response
7
+ */
8
+ export declare class MockAdapter implements ProviderAdapter {
9
+ readonly id = "mock";
10
+ listModels(): ModelDescriptor[];
11
+ stream(req: ChatRequest, _signal: AbortSignal): AsyncIterable<ProviderEvent>;
12
+ }
13
+ //# sourceMappingURL=mock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../../src/ai/adapters/mock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,EAEX,eAAe,EACf,eAAe,EACf,aAAa,EACd,MAAM,aAAa,CAAC;AAErB;;;;;GAKG;AACH,qBAAa,WAAY,YAAW,eAAe;IACjD,QAAQ,CAAC,EAAE,UAAU;IAErB,UAAU,IAAI,eAAe,EAAE;IAexB,MAAM,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,GAAG,aAAa,CAAC,aAAa,CAAC;CAwBpF"}
@@ -0,0 +1,54 @@
1
+ import { createId } from "@chances-ai/runtime";
2
+ /**
3
+ * Deterministic, offline provider used as the default in dev/tests. It drives
4
+ * the full agent loop without network or API keys:
5
+ * - "read <path>" -> issues a `read` tool call, then summarizes the result
6
+ * - otherwise -> streams a short echo response
7
+ */
8
+ export class MockAdapter {
9
+ id = "mock";
10
+ listModels() {
11
+ return [
12
+ {
13
+ id: "mock-1",
14
+ provider: "mock",
15
+ api: "openai",
16
+ contextWindow: 200_000,
17
+ supportsTools: true,
18
+ supportsVision: false,
19
+ inputCostPerMTok: 0,
20
+ outputCostPerMTok: 0,
21
+ },
22
+ ];
23
+ }
24
+ async *stream(req, _signal) {
25
+ const lastUser = [...req.messages].reverse().find((m) => m.role === "user");
26
+ const text = lastUser ? textOf(lastUser.content) : "";
27
+ const alreadyHasToolResult = req.messages.some((m) => m.content.some((c) => c.type === "tool-result"));
28
+ const readMatch = /^\s*read\s+(\S+)/i.exec(text);
29
+ if (readMatch && !alreadyHasToolResult && req.tools.some((t) => t.name === "read")) {
30
+ yield { type: "tool-call", call: { callId: createId("call"), name: "read", args: { path: readMatch[1] } } };
31
+ yield { type: "usage", usage: { inputTokens: estimate(text), outputTokens: 4 } };
32
+ yield { type: "done" };
33
+ return;
34
+ }
35
+ const reply = alreadyHasToolResult
36
+ ? `Done — I read the file you asked for.`
37
+ : `You said: ${text || "(nothing)"}`;
38
+ for (const chunk of reply.match(/.{1,12}/g) ?? [reply]) {
39
+ yield { type: "text-delta", text: chunk };
40
+ }
41
+ yield { type: "usage", usage: { inputTokens: estimate(text), outputTokens: estimate(reply) } };
42
+ yield { type: "done" };
43
+ }
44
+ }
45
+ function textOf(content) {
46
+ return content
47
+ .filter((c) => c.type === "text")
48
+ .map((c) => c.text)
49
+ .join("");
50
+ }
51
+ function estimate(s) {
52
+ return Math.max(1, Math.ceil(s.length / 4));
53
+ }
54
+ //# sourceMappingURL=mock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock.js","sourceRoot":"","sources":["../../../src/ai/adapters/mock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { ChatRequest, ModelDescriptor, ProviderAdapter, ProviderEvent } from "../types.js";
2
+ export interface OpenAICompatibleAdapterOptions {
3
+ /** Provider id, e.g. "deepseek" or "xai". Becomes the adapter id. */
4
+ provider: string;
5
+ /** API endpoint, e.g. https://api.deepseek.com. */
6
+ baseURL: string;
7
+ apiKey: string;
8
+ models: ModelDescriptor[];
9
+ }
10
+ /**
11
+ * One adapter, many OpenAI-compatible providers (deepseek / doubao / minimax /
12
+ * glm / kimi + xai / groq / openrouter). Parameterised by `baseURL` + `apiKey`
13
+ * — `@ai-sdk/openai-compatible` is dynamic-imported, so the package
14
+ * type-checks even when it isn't installed.
15
+ */
16
+ export declare class OpenAICompatibleAdapter implements ProviderAdapter {
17
+ private readonly opts;
18
+ readonly id: string;
19
+ constructor(opts: OpenAICompatibleAdapterOptions);
20
+ listModels(): ModelDescriptor[];
21
+ stream(req: ChatRequest, signal: AbortSignal): AsyncIterable<ProviderEvent>;
22
+ }
23
+ //# sourceMappingURL=openai-compatible.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-compatible.d.ts","sourceRoot":"","sources":["../../../src/ai/adapters/openai-compatible.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EACf,eAAe,EACf,aAAa,EACd,MAAM,aAAa,CAAC;AAIrB,MAAM,WAAW,8BAA8B;IAC7C,qEAAqE;IACrE,QAAQ,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED;;;;;GAKG;AACH,qBAAa,uBAAwB,YAAW,eAAe;IAGjD,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFjC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;gBAES,IAAI,EAAE,8BAA8B;IAIjE,UAAU,IAAI,eAAe,EAAE;IAIxB,MAAM,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,GAAG,aAAa,CAAC,aAAa,CAAC;CAgCnF"}
@@ -0,0 +1,45 @@
1
+ import { streamFromAiSdk } from "./ai-sdk-stream.js";
2
+ import { redact, redactStream } from "./ai-sdk.js";
3
+ /**
4
+ * One adapter, many OpenAI-compatible providers (deepseek / doubao / minimax /
5
+ * glm / kimi + xai / groq / openrouter). Parameterised by `baseURL` + `apiKey`
6
+ * — `@ai-sdk/openai-compatible` is dynamic-imported, so the package
7
+ * type-checks even when it isn't installed.
8
+ */
9
+ export class OpenAICompatibleAdapter {
10
+ opts;
11
+ id;
12
+ constructor(opts) {
13
+ this.opts = opts;
14
+ this.id = opts.provider;
15
+ }
16
+ listModels() {
17
+ return this.opts.models;
18
+ }
19
+ async *stream(req, signal) {
20
+ const compat = (await import("@ai-sdk/openai-compatible").catch(() => null));
21
+ const create = compat?.createOpenAICompatible;
22
+ if (!create) {
23
+ yield { type: "error", message: "@ai-sdk/openai-compatible is not installed" };
24
+ return;
25
+ }
26
+ let provider;
27
+ try {
28
+ provider = create({
29
+ name: this.opts.provider,
30
+ baseURL: this.opts.baseURL,
31
+ apiKey: this.opts.apiKey,
32
+ });
33
+ }
34
+ catch (e) {
35
+ const message = e instanceof Error ? e.message : String(e);
36
+ yield { type: "error", message: redact(message, this.opts.apiKey) };
37
+ return;
38
+ }
39
+ // Redact downstream stream errors too — same defense-in-depth posture as
40
+ // AiSdkAdapter. We pass `apiKey` into a third-party constructor, so any
41
+ // future SDK that echoes the key on throw shouldn't reach the bus.
42
+ yield* redactStream(streamFromAiSdk(provider(req.model), req, signal), this.opts.apiKey);
43
+ }
44
+ }
45
+ //# sourceMappingURL=openai-compatible.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-compatible.js","sourceRoot":"","sources":["../../../src/ai/adapters/openai-compatible.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAWnD;;;;;GAKG;AACH,MAAM,OAAO,uBAAuB;IAGL;IAFpB,EAAE,CAAS;IAEpB,YAA6B,IAAoC;QAApC,SAAI,GAAJ,IAAI,CAAgC;QAC/D,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC1B,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,CAAC,MAAM,CAAC,GAAgB,EAAE,MAAmB;QASjD,MAAM,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAwB,CAAC;QACpG,MAAM,MAAM,GAAG,MAAM,EAAE,sBAAsB,CAAC;QAC9C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,4CAA4C,EAAE,CAAC;YAC/E,OAAO;QACT,CAAC;QACD,IAAI,QAAsC,CAAC;QAC3C,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,CAAC;gBAChB,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ;gBACxB,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO;gBAC1B,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM;aACzB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,OAAO,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC3D,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACpE,OAAO;QACT,CAAC;QACD,yEAAyE;QACzE,wEAAwE;QACxE,mEAAmE;QACnE,KAAK,CAAC,CAAC,YAAY,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3F,CAAC;CACF"}
@@ -0,0 +1,3 @@
1
+ import type { ModelDescriptor, Usage } from "./types.js";
2
+ export declare function estimateCost(model: ModelDescriptor, usage: Usage): number;
3
+ //# sourceMappingURL=cost.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost.d.ts","sourceRoot":"","sources":["../../src/ai/cost.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEzD,wBAAgB,YAAY,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,CAKzE"}
@@ -0,0 +1,5 @@
1
+ export function estimateCost(model, usage) {
2
+ return ((usage.inputTokens / 1_000_000) * model.inputCostPerMTok +
3
+ (usage.outputTokens / 1_000_000) * model.outputCostPerMTok);
4
+ }
5
+ //# sourceMappingURL=cost.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost.js","sourceRoot":"","sources":["../../src/ai/cost.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,YAAY,CAAC,KAAsB,EAAE,KAAY;IAC/D,OAAO,CACL,CAAC,KAAK,CAAC,WAAW,GAAG,SAAS,CAAC,GAAG,KAAK,CAAC,gBAAgB;QACxD,CAAC,KAAK,CAAC,YAAY,GAAG,SAAS,CAAC,GAAG,KAAK,CAAC,iBAAiB,CAC3D,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ export type { Role, ContentPart, Message, ToolDefinition, ToolCallRequest, Usage, ApiFamily, ModelDescriptor, ChatRequest, ProviderEvent, ProviderAdapter, } from "./types.js";
2
+ export { ModelRegistry } from "./registry.js";
3
+ export { ModelRouter, type RouteHints, type Route } from "./router.js";
4
+ export { estimateCost } from "./cost.js";
5
+ export { MockAdapter } from "./adapters/mock.js";
6
+ export { AiSdkAdapter, AI_SDK_PACKAGES, type AiSdkAdapterOptions, type AiSdkProvider, } from "./adapters/ai-sdk.js";
7
+ export { OpenAICompatibleAdapter, type OpenAICompatibleAdapterOptions, } from "./adapters/openai-compatible.js";
8
+ export { KNOWN_MODELS, type ProviderEntry } from "./known-models.js";
9
+ export { buildRegistry, envByProviderFrom, type RegistryOptions } from "./setup.js";
10
+ export { classifyProviderError, defaultRetryConfig, type RetryConfig, type RetryDecision, } from "./retry.js";
11
+ export { summarizeConversation, COMPACT_SUMMARY_SYSTEM } from "./summarizer.js";
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,IAAI,EACJ,WAAW,EACX,OAAO,EACP,cAAc,EACd,eAAe,EACf,KAAK,EACL,SAAS,EACT,eAAe,EACf,WAAW,EACX,aAAa,EACb,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EACL,YAAY,EACZ,eAAe,EACf,KAAK,mBAAmB,EACxB,KAAK,aAAa,GACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,uBAAuB,EACvB,KAAK,8BAA8B,GACpC,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AACpF,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,KAAK,WAAW,EAChB,KAAK,aAAa,GACnB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,11 @@
1
+ export { ModelRegistry } from "./registry.js";
2
+ export { ModelRouter } from "./router.js";
3
+ export { estimateCost } from "./cost.js";
4
+ export { MockAdapter } from "./adapters/mock.js";
5
+ export { AiSdkAdapter, AI_SDK_PACKAGES, } from "./adapters/ai-sdk.js";
6
+ export { OpenAICompatibleAdapter, } from "./adapters/openai-compatible.js";
7
+ export { KNOWN_MODELS } from "./known-models.js";
8
+ export { buildRegistry, envByProviderFrom } from "./setup.js";
9
+ export { classifyProviderError, defaultRetryConfig, } from "./retry.js";
10
+ export { summarizeConversation, COMPACT_SUMMARY_SYSTEM } from "./summarizer.js";
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,WAAW,EAA+B,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EACL,YAAY,EACZ,eAAe,GAGhB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,uBAAuB,GAExB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,YAAY,EAAsB,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAwB,MAAM,YAAY,CAAC;AACpF,OAAO,EACL,qBAAqB,EACrB,kBAAkB,GAGnB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { ApiFamily, ModelDescriptor } from "./types.js";
2
+ /**
3
+ * Per-provider metadata used by `buildRegistry` to wire the right adapter.
4
+ * `models` is the capability table the registry indexes; `envKey` resolves
5
+ * the API key; `baseURL` is required for the `openai-compatible` family
6
+ * (Chinese providers + xai/groq/openrouter) and ignored for the native ones.
7
+ *
8
+ * Prices are USD per 1M tokens and should be reviewed per release.
9
+ * `supportsTools` is per-model — uneven across the OpenAI-compatible set
10
+ * (especially older MiniMax / Kimi). Verify before flipping the flag.
11
+ */
12
+ export interface ProviderEntry {
13
+ id: string;
14
+ api: ApiFamily;
15
+ envKey: string;
16
+ baseURL?: string;
17
+ models: ModelDescriptor[];
18
+ }
19
+ export declare const KNOWN_MODELS: ProviderEntry[];
20
+ //# sourceMappingURL=known-models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"known-models.d.ts","sourceRoot":"","sources":["../../src/ai/known-models.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7D;;;;;;;;;GASG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,SAAS,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED,eAAO,MAAM,YAAY,EAAE,aAAa,EA4HvC,CAAC"}