ashlr-plugin 1.36.4

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 (499) hide show
  1. package/.agents/plugins/marketplace.json +20 -0
  2. package/.claude-plugin/marketplace.json +39 -0
  3. package/.claude-plugin/plugin.json +36 -0
  4. package/.codex/agents/README.md +9 -0
  5. package/.codex/agents/ashlr-explorer.md +36 -0
  6. package/.codex/agents/ashlr-worker.md +38 -0
  7. package/.codex-plugin/plugin.json +45 -0
  8. package/.mcp.json +14 -0
  9. package/LICENSE +21 -0
  10. package/README.md +311 -0
  11. package/agents/ashlr-code.md +69 -0
  12. package/agents/ashlr-explore.md +44 -0
  13. package/agents/ashlr-plan.md +54 -0
  14. package/bench/fixtures/notebook-large.ipynb +660 -0
  15. package/bench/fixtures/notebook-small.ipynb +39 -0
  16. package/bench/fixtures/tasklist-closed.json +62 -0
  17. package/bench/fixtures/tasklist-large-mixed.json +27 -0
  18. package/bench/fixtures/tasklist-sprint-open.json +79 -0
  19. package/bench/fixtures/websearch-bun-runtime.json +32 -0
  20. package/bench/fixtures/websearch-react-hooks-patterns.json +32 -0
  21. package/bench/fixtures/websearch-typescript-generics.json +38 -0
  22. package/bench/refs/node-sdk/.refrev +1 -0
  23. package/bench/refs/node-sdk/README.md +17 -0
  24. package/bench/refs/node-sdk/src/agent/agent.ts +163 -0
  25. package/bench/refs/node-sdk/src/agent/create-agent-ui-stream.ts +83 -0
  26. package/bench/refs/node-sdk/src/agent/tool-loop-agent.ts +238 -0
  27. package/bench/refs/node-sdk/src/embed/embed-many.ts +409 -0
  28. package/bench/refs/node-sdk/src/embed/embed-result.ts +50 -0
  29. package/bench/refs/node-sdk/src/embed/embed.ts +257 -0
  30. package/bench/refs/node-sdk/src/error/invalid-argument-error.ts +34 -0
  31. package/bench/refs/node-sdk/src/error/invalid-tool-input-error.ts +33 -0
  32. package/bench/refs/node-sdk/src/error/no-object-generated-error.ts +70 -0
  33. package/bench/refs/node-sdk/src/generate-image/generate-image-result.ts +42 -0
  34. package/bench/refs/node-sdk/src/generate-image/generate-image.ts +362 -0
  35. package/bench/refs/node-sdk/src/generate-object/generate-object-result.ts +67 -0
  36. package/bench/refs/node-sdk/src/generate-object/generate-object.ts +501 -0
  37. package/bench/refs/node-sdk/src/generate-object/inject-json-instruction.ts +30 -0
  38. package/bench/refs/node-sdk/src/generate-object/output-strategy.ts +415 -0
  39. package/bench/refs/node-sdk/src/generate-object/repair-text.ts +12 -0
  40. package/bench/refs/node-sdk/src/generate-object/stream-object.ts +960 -0
  41. package/bench/refs/node-sdk/src/generate-speech/generate-speech.ts +191 -0
  42. package/bench/refs/node-sdk/src/generate-text/generate-text.ts +1484 -0
  43. package/bench/refs/node-sdk/src/generate-text/stream-text.ts +2708 -0
  44. package/bench/refs/node-sdk/src/generate-text/tool-call.ts +59 -0
  45. package/bench/refs/node-sdk/src/generate-text/tool-result.ts +36 -0
  46. package/bench/refs/node-sdk/src/telemetry/create-telemetry-dispatcher.ts +146 -0
  47. package/bench/refs/node-sdk/src/telemetry/telemetry-registry.ts +15 -0
  48. package/bench/refs/node-sdk/src/telemetry/telemetry.ts +223 -0
  49. package/bench/refs/node-sdk/src/util/async-iterable-stream.ts +94 -0
  50. package/bench/refs/node-sdk/src/util/consume-stream.ts +31 -0
  51. package/bench/refs/node-sdk/src/util/create-stitchable-stream.ts +112 -0
  52. package/bench/refs/node-sdk/src/util/download/download.ts +74 -0
  53. package/bench/refs/node-sdk/src/util/error-handler.ts +1 -0
  54. package/bench/refs/node-sdk/src/util/fix-json.ts +401 -0
  55. package/bench/refs/node-sdk/src/util/merge-objects.ts +79 -0
  56. package/bench/refs/python-lib/.refrev +1 -0
  57. package/bench/refs/python-lib/README.md +18 -0
  58. package/bench/refs/python-lib/pandas/core/_numba/executor.py +249 -0
  59. package/bench/refs/python-lib/pandas/core/_numba/extensions.py +586 -0
  60. package/bench/refs/python-lib/pandas/core/_numba/kernels/mean_.py +198 -0
  61. package/bench/refs/python-lib/pandas/core/_numba/kernels/min_max_.py +178 -0
  62. package/bench/refs/python-lib/pandas/core/_numba/kernels/sum_.py +255 -0
  63. package/bench/refs/python-lib/pandas/core/_numba/kernels/var_.py +251 -0
  64. package/bench/refs/python-lib/pandas/core/accessor.py +520 -0
  65. package/bench/refs/python-lib/pandas/core/api.py +138 -0
  66. package/bench/refs/python-lib/pandas/core/array_algos/masked_accumulations.py +97 -0
  67. package/bench/refs/python-lib/pandas/core/array_algos/masked_reductions.py +252 -0
  68. package/bench/refs/python-lib/pandas/core/array_algos/putmask.py +150 -0
  69. package/bench/refs/python-lib/pandas/core/array_algos/quantile.py +232 -0
  70. package/bench/refs/python-lib/pandas/core/array_algos/replace.py +159 -0
  71. package/bench/refs/python-lib/pandas/core/array_algos/take.py +609 -0
  72. package/bench/refs/python-lib/pandas/core/arraylike.py +534 -0
  73. package/bench/refs/python-lib/pandas/core/arrays/_arrow_string_mixins.py +434 -0
  74. package/bench/refs/python-lib/pandas/core/arrays/_mixins.py +630 -0
  75. package/bench/refs/python-lib/pandas/core/arrays/_ranges.py +276 -0
  76. package/bench/refs/python-lib/pandas/core/arrays/_utils.py +77 -0
  77. package/bench/refs/python-lib/pandas/core/arrays/arrow/accessors.py +521 -0
  78. package/bench/refs/python-lib/pandas/core/arrays/arrow/extension_types.py +174 -0
  79. package/bench/refs/python-lib/pandas/core/arrays/boolean.py +454 -0
  80. package/bench/refs/python-lib/pandas/core/arrays/floating.py +192 -0
  81. package/bench/refs/python-lib/pandas/core/arrays/integer.py +296 -0
  82. package/bench/refs/python-lib/pandas/core/arrays/masked.py +2140 -0
  83. package/bench/refs/python-lib/pandas/core/arrays/numeric.py +305 -0
  84. package/bench/refs/python-lib/pandas/core/arrays/numpy_.py +701 -0
  85. package/bench/refs/python-lib/pandas/core/arrays/period.py +1586 -0
  86. package/bench/refs/python-lib/pandas/core/arrays/sparse/accessor.py +505 -0
  87. package/bench/refs/python-lib/pandas/core/arrays/sparse/scipy_sparse.py +208 -0
  88. package/bench/refs/rust-project/.refrev +1 -0
  89. package/bench/refs/rust-project/README.md +17 -0
  90. package/bench/refs/rust-project/tokio/src/doc/os.rs +68 -0
  91. package/bench/refs/rust-project/tokio/src/fs/dir_builder.rs +129 -0
  92. package/bench/refs/rust-project/tokio/src/fs/file.rs +1113 -0
  93. package/bench/refs/rust-project/tokio/src/fs/mocks.rs +176 -0
  94. package/bench/refs/rust-project/tokio/src/fs/mod.rs +324 -0
  95. package/bench/refs/rust-project/tokio/src/fs/open_options.rs +856 -0
  96. package/bench/refs/rust-project/tokio/src/fs/read.rs +80 -0
  97. package/bench/refs/rust-project/tokio/src/fs/read_dir.rs +357 -0
  98. package/bench/refs/rust-project/tokio/src/fs/write.rs +99 -0
  99. package/bench/refs/rust-project/tokio/src/future/maybe_done.rs +123 -0
  100. package/bench/refs/rust-project/tokio/src/future/try_join.rs +82 -0
  101. package/bench/refs/rust-project/tokio/src/io/async_buf_read.rs +117 -0
  102. package/bench/refs/rust-project/tokio/src/io/async_read.rs +133 -0
  103. package/bench/refs/rust-project/tokio/src/io/async_seek.rs +96 -0
  104. package/bench/refs/rust-project/tokio/src/io/async_write.rs +402 -0
  105. package/bench/refs/rust-project/tokio/src/io/blocking.rs +339 -0
  106. package/bench/refs/rust-project/tokio/src/io/interest.rs +345 -0
  107. package/bench/refs/rust-project/tokio/src/io/join.rs +130 -0
  108. package/bench/refs/rust-project/tokio/src/io/mod.rs +308 -0
  109. package/bench/refs/rust-project/tokio/src/io/poll_evented.rs +319 -0
  110. package/bench/refs/rust-project/tokio/src/io/read_buf.rs +344 -0
  111. package/bench/refs/rust-project/tokio/src/io/ready.rs +322 -0
  112. package/bench/refs/rust-project/tokio/src/io/split.rs +166 -0
  113. package/bench/refs/rust-project/tokio/src/io/stderr.rs +148 -0
  114. package/bench/refs/rust-project/tokio/src/io/stdin.rs +98 -0
  115. package/bench/refs/rust-project/tokio/src/io/stdio_common.rs +222 -0
  116. package/bench/refs/rust-project/tokio/src/io/stdout.rs +197 -0
  117. package/bench/refs/rust-project/tokio/src/io/util/buf_reader.rs +311 -0
  118. package/bench/refs/rust-project/tokio/src/io/util/buf_stream.rs +207 -0
  119. package/bench/refs/rust-project/tokio/src/io/util/buf_writer.rs +310 -0
  120. package/bench/refs/rust-project/tokio/src/io/util/chain.rs +144 -0
  121. package/commands/_spawn-patterns.json +32 -0
  122. package/commands/ashlr-allow.md +21 -0
  123. package/commands/ashlr-benchmark.md +53 -0
  124. package/commands/ashlr-brief.md +97 -0
  125. package/commands/ashlr-budget.md +76 -0
  126. package/commands/ashlr-compact.md +54 -0
  127. package/commands/ashlr-dashboard.md +37 -0
  128. package/commands/ashlr-doctor.md +56 -0
  129. package/commands/ashlr-eco-mode.md +92 -0
  130. package/commands/ashlr-genome-init.md +24 -0
  131. package/commands/ashlr-genome-keygen.md +36 -0
  132. package/commands/ashlr-genome-loop.md +118 -0
  133. package/commands/ashlr-genome-push.md +36 -0
  134. package/commands/ashlr-genome-rewrap.md +48 -0
  135. package/commands/ashlr-genome-team-init.md +67 -0
  136. package/commands/ashlr-handoff.md +23 -0
  137. package/commands/ashlr-help.md +86 -0
  138. package/commands/ashlr-hook-timings.md +30 -0
  139. package/commands/ashlr-leaderboard.md +50 -0
  140. package/commands/ashlr-ollama-setup.md +39 -0
  141. package/commands/ashlr-orchestrate-status.md +72 -0
  142. package/commands/ashlr-orchestrate.md +83 -0
  143. package/commands/ashlr-parallelize.md +63 -0
  144. package/commands/ashlr-report-crash.md +33 -0
  145. package/commands/ashlr-resume.md +72 -0
  146. package/commands/ashlr-savings.md +24 -0
  147. package/commands/ashlr-settings.md +50 -0
  148. package/commands/ashlr-spawn.md +61 -0
  149. package/commands/ashlr-start.md +60 -0
  150. package/commands/ashlr-status.md +64 -0
  151. package/commands/ashlr-team-invite.md +47 -0
  152. package/commands/ashlr-tier.md +122 -0
  153. package/commands/ashlr-tour.md +60 -0
  154. package/commands/ashlr-update.md +155 -0
  155. package/commands/ashlr-upgrade.md +96 -0
  156. package/commands/goal.md +58 -0
  157. package/commands/loop.md +40 -0
  158. package/docs/CNAME +1 -0
  159. package/docs/PRO_TIER.md +104 -0
  160. package/docs/README.md +21 -0
  161. package/docs/architecture.md +415 -0
  162. package/docs/ashlr-pipe.md +161 -0
  163. package/docs/assets/logo.svg +19 -0
  164. package/docs/assets/og.png +0 -0
  165. package/docs/assets/og.svg +41 -0
  166. package/docs/benchmarks-v2.json +355 -0
  167. package/docs/benchmarks.json +102 -0
  168. package/docs/benchmarks.md +211 -0
  169. package/docs/billing.md +185 -0
  170. package/docs/cloud-genome.md +155 -0
  171. package/docs/competitive-wozcode.md +92 -0
  172. package/docs/deploy.md +325 -0
  173. package/docs/email-templates.md +113 -0
  174. package/docs/embed-tuning.md +103 -0
  175. package/docs/genome.md +120 -0
  176. package/docs/github-oauth-onboarding.md +127 -0
  177. package/docs/hero-video-script.md +129 -0
  178. package/docs/index.html +2262 -0
  179. package/docs/install-prompt.md +78 -0
  180. package/docs/install-windows.md +132 -0
  181. package/docs/install.ps1 +171 -0
  182. package/docs/install.sh +146 -0
  183. package/docs/launch/README.md +114 -0
  184. package/docs/launch/hn.md +49 -0
  185. package/docs/launch/reddit.md +45 -0
  186. package/docs/launch/x.md +65 -0
  187. package/docs/launch-post.md +112 -0
  188. package/docs/legal.md +78 -0
  189. package/docs/llm-providers.md +99 -0
  190. package/docs/multi-host-mcp.md +217 -0
  191. package/docs/multi-turn-architecture.md +108 -0
  192. package/docs/operations/deployment.md +108 -0
  193. package/docs/operations/error-monitoring.md +70 -0
  194. package/docs/operations/weekly-digest.md +70 -0
  195. package/docs/operations.md +494 -0
  196. package/docs/platform-support.md +133 -0
  197. package/docs/policy-packs.md +188 -0
  198. package/docs/press-kit/fact-sheet.md +78 -0
  199. package/docs/press-kit/founder-bio.md +3 -0
  200. package/docs/press-kit/logo.svg +33 -0
  201. package/docs/press-kit/screenshots.md +146 -0
  202. package/docs/pricing.md +251 -0
  203. package/docs/pro-backend-architecture.md +523 -0
  204. package/docs/producthunt.md +52 -0
  205. package/docs/router-migration.md +110 -0
  206. package/docs/session-log-schema.md +68 -0
  207. package/docs/social.md +95 -0
  208. package/docs/team-genome.md +528 -0
  209. package/docs/telemetry.md +194 -0
  210. package/docs/test-isolation.md +100 -0
  211. package/docs/upgrade.md +159 -0
  212. package/hooks/_hook-errors.ts +87 -0
  213. package/hooks/_hook-perf-emit.ts +113 -0
  214. package/hooks/_hook-timing-ledger.ts +1133 -0
  215. package/hooks/_nudge-throttle.ts +127 -0
  216. package/hooks/_recent-blocks.ts +127 -0
  217. package/hooks/audit-upload.ts +86 -0
  218. package/hooks/codex-hooks.json +171 -0
  219. package/hooks/commit-attribution.ts +179 -0
  220. package/hooks/edit-batching-nudge.ts +154 -0
  221. package/hooks/genome-scribe-hook.ts +219 -0
  222. package/hooks/hooks.json +294 -0
  223. package/hooks/orient-nudge-hook.ts +242 -0
  224. package/hooks/policy-enforce.ts +214 -0
  225. package/hooks/post-tool-use-embedding.ts +93 -0
  226. package/hooks/post-tool-use-genome.sh +37 -0
  227. package/hooks/post-tool-use-genome.ts +69 -0
  228. package/hooks/posttooluse-correlate.ts +122 -0
  229. package/hooks/posttooluse-dedupe-output.ts +241 -0
  230. package/hooks/posttooluse-genome-refresh.ts +223 -0
  231. package/hooks/posttooluse-native-nudge.ts +205 -0
  232. package/hooks/posttooluse-stale-result.ts +277 -0
  233. package/hooks/pretooluse-bash.ts +63 -0
  234. package/hooks/pretooluse-budget-guard.ts +318 -0
  235. package/hooks/pretooluse-common.ts +985 -0
  236. package/hooks/pretooluse-eco-router.ts +196 -0
  237. package/hooks/pretooluse-edit.sh +93 -0
  238. package/hooks/pretooluse-edit.ts +197 -0
  239. package/hooks/pretooluse-glob.ts +70 -0
  240. package/hooks/pretooluse-grep.sh +85 -0
  241. package/hooks/pretooluse-grep.ts +96 -0
  242. package/hooks/pretooluse-notebookedit.ts +121 -0
  243. package/hooks/pretooluse-read.sh +118 -0
  244. package/hooks/pretooluse-read.ts +118 -0
  245. package/hooks/pretooluse-task.ts +130 -0
  246. package/hooks/pretooluse-webfetch.ts +66 -0
  247. package/hooks/pretooluse-websearch.ts +85 -0
  248. package/hooks/pretooluse-write.ts +128 -0
  249. package/hooks/pulse-emit.ts +197 -0
  250. package/hooks/session-end-consolidate.sh +35 -0
  251. package/hooks/session-end-consolidate.ts +188 -0
  252. package/hooks/session-end-stats-gc.ts +80 -0
  253. package/hooks/session-log-append.sh +94 -0
  254. package/hooks/session-log-append.ts +116 -0
  255. package/hooks/session-start.ts +993 -0
  256. package/hooks/sessionend-hook-health-nudge.ts +451 -0
  257. package/hooks/sessionend-savings-nudge.ts +318 -0
  258. package/hooks/sessionend-status-line-nudge.ts +296 -0
  259. package/hooks/sessionstart-brief.ts +140 -0
  260. package/hooks/sessionstart-cost-refactor.ts +95 -0
  261. package/hooks/sessionstart-efficient.ts +110 -0
  262. package/hooks/sessionstart-genome-author.ts +93 -0
  263. package/hooks/sessionstart-lean-tools.ts +98 -0
  264. package/hooks/sessionstart-search.ts +97 -0
  265. package/hooks/stop-accounting.ts +152 -0
  266. package/hooks/subagent-stop-rollup.ts +162 -0
  267. package/hooks/userpromptsubmit-brief-trigger.ts +156 -0
  268. package/package.json +56 -0
  269. package/ports/README.md +108 -0
  270. package/ports/cursor/mcp.json +11 -0
  271. package/ports/goose/recipe.yaml +26 -0
  272. package/scripts/ashlr-mcp.ts +40 -0
  273. package/scripts/auto-update.ts +177 -0
  274. package/scripts/baseline-scan.ts +831 -0
  275. package/scripts/bench-orchestrate.ts +377 -0
  276. package/scripts/benchmark-refs.ts +292 -0
  277. package/scripts/bootstrap.mjs +100 -0
  278. package/scripts/brief-eval.ts +234 -0
  279. package/scripts/bump-version.ts +82 -0
  280. package/scripts/bun-resolve.d.mts +11 -0
  281. package/scripts/bun-resolve.mjs +59 -0
  282. package/scripts/calibrate-grep.ts +467 -0
  283. package/scripts/capture-grep-workload.ts +260 -0
  284. package/scripts/check-tier.ts +61 -0
  285. package/scripts/check-version-sync.ts +97 -0
  286. package/scripts/cli-orchestrate-status.ts +386 -0
  287. package/scripts/cli-orchestrate.ts +303 -0
  288. package/scripts/cli.ts +478 -0
  289. package/scripts/cloud-smoke-test.ts +313 -0
  290. package/scripts/coach-report.ts +373 -0
  291. package/scripts/context-db-migrate.ts +137 -0
  292. package/scripts/context-status.ts +43 -0
  293. package/scripts/demo-run.ts +255 -0
  294. package/scripts/deploy-smoke.sh +140 -0
  295. package/scripts/doctor.ts +992 -0
  296. package/scripts/embed-file-worker.ts +104 -0
  297. package/scripts/embed-tune.ts +308 -0
  298. package/scripts/errors-report.ts +428 -0
  299. package/scripts/find-test-leak.ts +69 -0
  300. package/scripts/generate-badge.ts +357 -0
  301. package/scripts/genome-auto-consolidate.ts +533 -0
  302. package/scripts/genome-auto-propose.ts +578 -0
  303. package/scripts/genome-cloud-pull.ts +363 -0
  304. package/scripts/genome-cloud-push.ts +382 -0
  305. package/scripts/genome-cloud-sync.ts +587 -0
  306. package/scripts/genome-commit-watcher.ts +295 -0
  307. package/scripts/genome-init.ts +986 -0
  308. package/scripts/genome-key.ts +233 -0
  309. package/scripts/genome-keygen.ts +168 -0
  310. package/scripts/genome-link.ts +59 -0
  311. package/scripts/genome-refresh-worker.ts +364 -0
  312. package/scripts/genome-rewrap.ts +90 -0
  313. package/scripts/genome-synthesizer.ts +679 -0
  314. package/scripts/genome-team-init.ts +312 -0
  315. package/scripts/handoff-pack.ts +438 -0
  316. package/scripts/hook-bootstrap.mjs +75 -0
  317. package/scripts/hook-timing-reader.ts +371 -0
  318. package/scripts/hook-timings-report.ts +554 -0
  319. package/scripts/install-genome-hooks.ts +196 -0
  320. package/scripts/install-onnx-model.ts +154 -0
  321. package/scripts/install-permissions.ts +276 -0
  322. package/scripts/install-status-line.ts +150 -0
  323. package/scripts/mcp-entrypoint.sh +78 -0
  324. package/scripts/mcp-entrypoint.ts +130 -0
  325. package/scripts/mdx-angle-bracket-lint.ts +152 -0
  326. package/scripts/measure-cold-start.ts +126 -0
  327. package/scripts/migrate-stats-to-sqlite.ts +86 -0
  328. package/scripts/ollama-setup.ts +498 -0
  329. package/scripts/onboarding-wizard.ts +1691 -0
  330. package/scripts/orchestrate-emit-telemetry.ts +177 -0
  331. package/scripts/orchestrate-expand.ts +517 -0
  332. package/scripts/orchestrate-run.ts +744 -0
  333. package/scripts/print-legend.ts +50 -0
  334. package/scripts/product-metadata.ts +38 -0
  335. package/scripts/prune-old-memories.ts +208 -0
  336. package/scripts/publish.sh +88 -0
  337. package/scripts/read-calibration.ts +122 -0
  338. package/scripts/report-crash.ts +226 -0
  339. package/scripts/run-benchmark.ts +750 -0
  340. package/scripts/run-root-tests.ts +28 -0
  341. package/scripts/savings-dashboard.ts +1258 -0
  342. package/scripts/savings-report-extras.ts +447 -0
  343. package/scripts/savings-status-line.ts +873 -0
  344. package/scripts/session-event-emit.ts +266 -0
  345. package/scripts/session-greet.ts +686 -0
  346. package/scripts/session-log-report.ts +551 -0
  347. package/scripts/session-resume.ts +614 -0
  348. package/scripts/set-hook-mode.ts +83 -0
  349. package/scripts/smoke-cross-platform.ts +117 -0
  350. package/scripts/smoke-realtime.ts +257 -0
  351. package/scripts/smoke-tools.ts +21 -0
  352. package/scripts/stats-cloud-pull.ts +213 -0
  353. package/scripts/stats-cloud-sync.ts +261 -0
  354. package/scripts/telemetry-flush.ts +160 -0
  355. package/scripts/telemetry-status.ts +266 -0
  356. package/scripts/timing-budget.ts +35 -0
  357. package/scripts/ui-animation.ts +120 -0
  358. package/scripts/ui.ts +431 -0
  359. package/scripts/upgrade-flow.ts +775 -0
  360. package/scripts/weekly-digest.ts +394 -0
  361. package/servers/_accounting.ts +78 -0
  362. package/servers/_ask-router.ts +84 -0
  363. package/servers/_ast-chunker.ts +434 -0
  364. package/servers/_ast-helpers.ts +183 -0
  365. package/servers/_ast-languages.ts +153 -0
  366. package/servers/_ast-refactor/_shared.ts +221 -0
  367. package/servers/_ast-refactor/cross-file-rename.ts +560 -0
  368. package/servers/_ast-refactor/extract-function.ts +357 -0
  369. package/servers/_ast-refactor/file-local-rename.ts +172 -0
  370. package/servers/_ast-refactor.ts +41 -0
  371. package/servers/_ast-skeleton.ts +107 -0
  372. package/servers/_bash-summarizers-registry.ts +1096 -0
  373. package/servers/_crash-dump.ts +210 -0
  374. package/servers/_cwd-clamp.ts +342 -0
  375. package/servers/_edit-log.ts +28 -0
  376. package/servers/_edit-match.ts +236 -0
  377. package/servers/_edit-validate.ts +196 -0
  378. package/servers/_embed-calibration.ts +123 -0
  379. package/servers/_embedding-cache.ts +401 -0
  380. package/servers/_embedding-model.ts +329 -0
  381. package/servers/_events.ts +113 -0
  382. package/servers/_genome-cache.ts +154 -0
  383. package/servers/_genome-commits.ts +172 -0
  384. package/servers/_genome-crypto-v2.ts +242 -0
  385. package/servers/_genome-crypto.ts +259 -0
  386. package/servers/_genome-discoveries.ts +140 -0
  387. package/servers/_genome-embed-populator.ts +216 -0
  388. package/servers/_genome-freshness.ts +134 -0
  389. package/servers/_genome-issues.ts +171 -0
  390. package/servers/_genome-live.ts +263 -0
  391. package/servers/_genome-prs.ts +188 -0
  392. package/servers/_genome-search.ts +479 -0
  393. package/servers/_genome-sync.ts +297 -0
  394. package/servers/_history-tracker.ts +279 -0
  395. package/servers/_http-helpers.ts +151 -0
  396. package/servers/_identity-hash.ts +151 -0
  397. package/servers/_llm-providers/anthropic.ts +132 -0
  398. package/servers/_llm-providers/cloud.ts +195 -0
  399. package/servers/_llm-providers/index.ts +350 -0
  400. package/servers/_llm-providers/local.ts +127 -0
  401. package/servers/_llm-providers/onnx.ts +393 -0
  402. package/servers/_llm-providers/types.ts +27 -0
  403. package/servers/_manifest-v2.ts +447 -0
  404. package/servers/_mcp-host.ts +93 -0
  405. package/servers/_nudge-events.ts +451 -0
  406. package/servers/_orchestrate-executor.ts +316 -0
  407. package/servers/_prefetch.ts +435 -0
  408. package/servers/_pricing.ts +256 -0
  409. package/servers/_pro.ts +381 -0
  410. package/servers/_read-cache.ts +44 -0
  411. package/servers/_router-handlers.ts +46 -0
  412. package/servers/_router.ts +55 -0
  413. package/servers/_run-with-timeout.ts +173 -0
  414. package/servers/_savings-render.ts +214 -0
  415. package/servers/_stats-sqlite.ts +640 -0
  416. package/servers/_stats.ts +1183 -0
  417. package/servers/_status-line-cells.ts +469 -0
  418. package/servers/_streaks.ts +162 -0
  419. package/servers/_summarize.ts +208 -0
  420. package/servers/_task-graph-render.ts +217 -0
  421. package/servers/_task-graph.ts +545 -0
  422. package/servers/_telemetry.ts +719 -0
  423. package/servers/_test-parsers.ts +530 -0
  424. package/servers/_test-watch.ts +626 -0
  425. package/servers/_text-helpers.ts +37 -0
  426. package/servers/_token-measure.ts +160 -0
  427. package/servers/_tool-base.ts +248 -0
  428. package/servers/_weekly-digest.ts +391 -0
  429. package/servers/ask-server-handlers.ts +49 -0
  430. package/servers/ask-server.ts +174 -0
  431. package/servers/bash-server-handlers.ts +138 -0
  432. package/servers/bash-server.ts +1136 -0
  433. package/servers/bench.ts +186 -0
  434. package/servers/diff-semantic-server-handlers.ts +39 -0
  435. package/servers/diff-semantic-server.ts +566 -0
  436. package/servers/diff-server-handlers.ts +317 -0
  437. package/servers/diff-server.ts +20 -0
  438. package/servers/edit-server-handlers.ts +31 -0
  439. package/servers/edit-server.ts +209 -0
  440. package/servers/edit-structural-server-handlers.ts +322 -0
  441. package/servers/efficiency-server-handlers.ts +161 -0
  442. package/servers/efficiency-server.ts +1135 -0
  443. package/servers/flush-server-handlers.ts +21 -0
  444. package/servers/flush-server.ts +19 -0
  445. package/servers/genome-server-handlers.ts +118 -0
  446. package/servers/genome-server.ts +397 -0
  447. package/servers/github-server-handlers.ts +187 -0
  448. package/servers/github-server.ts +856 -0
  449. package/servers/glob-server-handlers.ts +233 -0
  450. package/servers/glob-server.ts +20 -0
  451. package/servers/grep-server-handlers.ts +61 -0
  452. package/servers/grep-server.ts +564 -0
  453. package/servers/http-server-handlers.ts +36 -0
  454. package/servers/http-server.ts +149 -0
  455. package/servers/logs-server-handlers.ts +42 -0
  456. package/servers/logs-server.ts +359 -0
  457. package/servers/ls-server-handlers.ts +166 -0
  458. package/servers/ls-server.ts +20 -0
  459. package/servers/multi-edit-server-handlers.ts +51 -0
  460. package/servers/multi-edit-server.ts +422 -0
  461. package/servers/notebook-edit-server-handlers.ts +34 -0
  462. package/servers/notebook-edit-server.ts +181 -0
  463. package/servers/orient-server-handlers.ts +52 -0
  464. package/servers/orient-server.ts +436 -0
  465. package/servers/pipe-server-handlers.ts +68 -0
  466. package/servers/pipe-server.ts +300 -0
  467. package/servers/read-server-handlers.ts +42 -0
  468. package/servers/read-server.ts +206 -0
  469. package/servers/rename-file-server-handlers.ts +67 -0
  470. package/servers/rename-file-server.ts +699 -0
  471. package/servers/savings-server-handlers.ts +27 -0
  472. package/servers/savings-server.ts +54 -0
  473. package/servers/search-replace-regex-server-handlers.ts +96 -0
  474. package/servers/search-replace-regex-server.ts +751 -0
  475. package/servers/sql-server-handlers.ts +58 -0
  476. package/servers/sql-server.ts +505 -0
  477. package/servers/task-server-handlers.ts +358 -0
  478. package/servers/task-server.ts +24 -0
  479. package/servers/test-server-handlers.ts +351 -0
  480. package/servers/test-server.ts +20 -0
  481. package/servers/tree-server-handlers.ts +503 -0
  482. package/servers/tree-server.ts +20 -0
  483. package/servers/webfetch-server-handlers.ts +166 -0
  484. package/servers/webfetch-server.ts +20 -0
  485. package/servers/websearch-server-handlers.ts +215 -0
  486. package/servers/websearch-server.ts +19 -0
  487. package/servers/write-server-handlers.ts +27 -0
  488. package/servers/write-server.ts +97 -0
  489. package/skills/ashlr-brief/SKILL.md +80 -0
  490. package/skills/ashlr-codex-doctor/SKILL.md +21 -0
  491. package/skills/ashlr-codex-efficient-tools/SKILL.md +17 -0
  492. package/skills/ashlr-codex-genome-refresh/SKILL.md +20 -0
  493. package/skills/ashlr-codex-parallel-explore/SKILL.md +20 -0
  494. package/skills/ashlr-codex-savings/SKILL.md +17 -0
  495. package/skills/ashlr-cost-refactor/SKILL.md +50 -0
  496. package/skills/ashlr-efficient/SKILL.md +64 -0
  497. package/skills/ashlr-genome-author/SKILL.md +43 -0
  498. package/skills/ashlr-lean-tools/SKILL.md +43 -0
  499. package/skills/ashlr-search/SKILL.md +46 -0
@@ -0,0 +1,238 @@
1
+ import type { Context, ModelMessage, ToolSet } from '@ai-sdk/provider-utils';
2
+ import { generateText } from '../generate-text/generate-text';
3
+ import { GenerateTextResult } from '../generate-text/generate-text-result';
4
+ import { Output } from '../generate-text/output';
5
+ import { isStepCount } from '../generate-text/stop-condition';
6
+ import { streamText } from '../generate-text/stream-text';
7
+ import { StreamTextResult } from '../generate-text/stream-text-result';
8
+ import { Prompt } from '../prompt';
9
+ import { mergeCallbacks } from '../util/merge-callbacks';
10
+ import { Agent, AgentCallParameters, AgentStreamParameters } from './agent';
11
+ import {
12
+ ToolLoopAgentOnStartCallback,
13
+ ToolLoopAgentOnStepStartCallback,
14
+ ToolLoopAgentSettings,
15
+ } from './tool-loop-agent-settings';
16
+
17
+ /**
18
+ * A tool loop agent is an agent that runs tools in a loop. In each step,
19
+ * it calls the LLM, and if there are tool calls, it executes the tools
20
+ * and calls the LLM again in a new step with the tool results.
21
+ *
22
+ * The loop continues until:
23
+ * - A finish reasoning other than tool-calls is returned, or
24
+ * - A tool that is invoked does not have an execute function, or
25
+ * - A tool call needs approval via `toolApproval` or tool-level `needsApproval`, or
26
+ * - A stop condition is met (default stop condition is isStepCount(20))
27
+ */
28
+ export class ToolLoopAgent<
29
+ CALL_OPTIONS = never,
30
+ TOOLS extends ToolSet = {},
31
+ RUNTIME_CONTEXT extends Context = Context,
32
+ OUTPUT extends Output = never,
33
+ > implements Agent<CALL_OPTIONS, TOOLS, RUNTIME_CONTEXT, OUTPUT> {
34
+ readonly version = 'agent-v1';
35
+
36
+ private readonly settings: ToolLoopAgentSettings<
37
+ CALL_OPTIONS,
38
+ TOOLS,
39
+ RUNTIME_CONTEXT,
40
+ OUTPUT
41
+ >;
42
+
43
+ constructor(
44
+ settings: ToolLoopAgentSettings<
45
+ CALL_OPTIONS,
46
+ TOOLS,
47
+ RUNTIME_CONTEXT,
48
+ OUTPUT
49
+ >,
50
+ ) {
51
+ this.settings = settings;
52
+ }
53
+
54
+ /**
55
+ * The id of the agent.
56
+ */
57
+ get id(): string | undefined {
58
+ return this.settings.id;
59
+ }
60
+
61
+ /**
62
+ * The tools that the agent can use.
63
+ */
64
+ get tools(): TOOLS {
65
+ return this.settings.tools as TOOLS;
66
+ }
67
+
68
+ private async prepareCall(options: {
69
+ prompt?: string | Array<ModelMessage>;
70
+ messages?: Array<ModelMessage>;
71
+ options?: CALL_OPTIONS;
72
+ }): Promise<
73
+ Omit<
74
+ ToolLoopAgentSettings<CALL_OPTIONS, TOOLS, RUNTIME_CONTEXT, OUTPUT>,
75
+ | 'prepareCall'
76
+ | 'instructions'
77
+ | 'experimental_onStart'
78
+ | 'experimental_onStepStart'
79
+ | 'experimental_onToolExecutionStart'
80
+ | 'experimental_onToolExecutionEnd'
81
+ | 'onStepFinish'
82
+ | 'onFinish'
83
+ > &
84
+ Prompt
85
+ > {
86
+ const {
87
+ experimental_onStart: _settingsOnStart,
88
+ experimental_onStepStart: _settingsOnStepStart,
89
+ experimental_onToolExecutionStart: _settingsOnToolExecutionStart,
90
+ experimental_onToolExecutionEnd: _settingsOnToolExecutionEnd,
91
+ onStepFinish: _settingsOnStepFinish,
92
+ onFinish: _settingsOnFinish,
93
+ ...settingsWithoutCallbacks
94
+ } = this.settings;
95
+
96
+ const baseCallArgs = {
97
+ ...settingsWithoutCallbacks,
98
+ stopWhen: this.settings.stopWhen ?? isStepCount(20),
99
+ ...options,
100
+ };
101
+
102
+ const preparedCallArgs =
103
+ (await this.settings.prepareCall?.(
104
+ baseCallArgs as Parameters<
105
+ NonNullable<
106
+ ToolLoopAgentSettings<
107
+ CALL_OPTIONS,
108
+ TOOLS,
109
+ RUNTIME_CONTEXT,
110
+ OUTPUT
111
+ >['prepareCall']
112
+ >
113
+ >[0],
114
+ )) ?? baseCallArgs;
115
+
116
+ const { instructions, messages, prompt, runtimeContext, ...callArgs } =
117
+ preparedCallArgs;
118
+
119
+ const promptArgs = { system: instructions, messages, prompt } as Prompt;
120
+
121
+ if (runtimeContext === undefined) {
122
+ return {
123
+ ...callArgs,
124
+ ...promptArgs,
125
+ };
126
+ }
127
+
128
+ return {
129
+ ...callArgs,
130
+ runtimeContext,
131
+ ...promptArgs,
132
+ };
133
+ }
134
+
135
+ /**
136
+ * Generates an output from the agent (non-streaming).
137
+ */
138
+ async generate({
139
+ abortSignal,
140
+ timeout,
141
+ experimental_onStart,
142
+ experimental_onStepStart,
143
+ experimental_onToolExecutionStart,
144
+ experimental_onToolExecutionEnd,
145
+ onStepFinish,
146
+ onFinish,
147
+ ...options
148
+ }: AgentCallParameters<CALL_OPTIONS, TOOLS, RUNTIME_CONTEXT>): Promise<
149
+ GenerateTextResult<TOOLS, RUNTIME_CONTEXT, OUTPUT>
150
+ > {
151
+ const generate = generateText<TOOLS, RUNTIME_CONTEXT, OUTPUT>;
152
+ const preparedCall = await this.prepareCall(options);
153
+ const callbackArgs = {
154
+ abortSignal,
155
+ timeout,
156
+ experimental_onStart: mergeCallbacks(
157
+ this.settings.experimental_onStart,
158
+ experimental_onStart as
159
+ | ToolLoopAgentOnStartCallback<TOOLS, RUNTIME_CONTEXT, OUTPUT>
160
+ | undefined,
161
+ ),
162
+ experimental_onStepStart: mergeCallbacks(
163
+ this.settings.experimental_onStepStart,
164
+ experimental_onStepStart as
165
+ | ToolLoopAgentOnStepStartCallback<TOOLS, RUNTIME_CONTEXT, OUTPUT>
166
+ | undefined,
167
+ ),
168
+ experimental_onToolExecutionStart: mergeCallbacks(
169
+ this.settings.experimental_onToolExecutionStart,
170
+ experimental_onToolExecutionStart,
171
+ ),
172
+ experimental_onToolExecutionEnd: mergeCallbacks(
173
+ this.settings.experimental_onToolExecutionEnd,
174
+ experimental_onToolExecutionEnd,
175
+ ),
176
+ onStepFinish: mergeCallbacks(this.settings.onStepFinish, onStepFinish),
177
+ onFinish: mergeCallbacks(this.settings.onFinish, onFinish),
178
+ };
179
+
180
+ return await generate({
181
+ ...preparedCall,
182
+ ...callbackArgs,
183
+ } as unknown as Parameters<typeof generate>[0]);
184
+ }
185
+
186
+ /**
187
+ * Streams an output from the agent (streaming).
188
+ */
189
+ async stream({
190
+ abortSignal,
191
+ timeout,
192
+ experimental_transform,
193
+ experimental_onStart,
194
+ experimental_onStepStart,
195
+ experimental_onToolExecutionStart,
196
+ experimental_onToolExecutionEnd,
197
+ onStepFinish,
198
+ onFinish,
199
+ ...options
200
+ }: AgentStreamParameters<CALL_OPTIONS, TOOLS, RUNTIME_CONTEXT>): Promise<
201
+ StreamTextResult<TOOLS, RUNTIME_CONTEXT, OUTPUT>
202
+ > {
203
+ const stream = streamText<TOOLS, RUNTIME_CONTEXT, OUTPUT>;
204
+ const preparedCall = await this.prepareCall(options);
205
+ const callbackArgs = {
206
+ abortSignal,
207
+ timeout,
208
+ experimental_transform,
209
+ experimental_onStart: mergeCallbacks(
210
+ this.settings.experimental_onStart,
211
+ experimental_onStart as
212
+ | ToolLoopAgentOnStartCallback<TOOLS, RUNTIME_CONTEXT, OUTPUT>
213
+ | undefined,
214
+ ),
215
+ experimental_onStepStart: mergeCallbacks(
216
+ this.settings.experimental_onStepStart,
217
+ experimental_onStepStart as
218
+ | ToolLoopAgentOnStepStartCallback<TOOLS, RUNTIME_CONTEXT, OUTPUT>
219
+ | undefined,
220
+ ),
221
+ experimental_onToolExecutionStart: mergeCallbacks(
222
+ this.settings.experimental_onToolExecutionStart,
223
+ experimental_onToolExecutionStart,
224
+ ),
225
+ experimental_onToolExecutionEnd: mergeCallbacks(
226
+ this.settings.experimental_onToolExecutionEnd,
227
+ experimental_onToolExecutionEnd,
228
+ ),
229
+ onStepFinish: mergeCallbacks(this.settings.onStepFinish, onStepFinish),
230
+ onFinish: mergeCallbacks(this.settings.onFinish, onFinish),
231
+ };
232
+
233
+ return await stream({
234
+ ...preparedCall,
235
+ ...callbackArgs,
236
+ } as unknown as Parameters<typeof stream>[0]);
237
+ }
238
+ }
@@ -0,0 +1,409 @@
1
+ import {
2
+ createIdGenerator,
3
+ ProviderOptions,
4
+ withUserAgentSuffix,
5
+ } from '@ai-sdk/provider-utils';
6
+ import { logWarnings } from '../logger/log-warnings';
7
+ import { resolveEmbeddingModel } from '../model/resolve-model';
8
+ import { createTelemetryDispatcher } from '../telemetry/create-telemetry-dispatcher';
9
+ import { TelemetryOptions } from '../telemetry/telemetry-options';
10
+ import { Embedding, EmbeddingModel, ProviderMetadata } from '../types';
11
+ import { Warning } from '../types/warning';
12
+ import type { Callback } from '../util/callback';
13
+ import { notify } from '../util/notify';
14
+ import { prepareRetries } from '../util/prepare-retries';
15
+ import { splitArray } from '../util/split-array';
16
+ import type { EmbedEndEvent, EmbedStartEvent } from './embed-events';
17
+ import { EmbedManyResult } from './embed-many-result';
18
+ import { VERSION } from '../version';
19
+
20
+ const originalGenerateCallId = createIdGenerator({
21
+ prefix: 'call',
22
+ size: 24,
23
+ });
24
+
25
+ /**
26
+ * Embed several values using an embedding model. The type of the value is defined
27
+ * by the embedding model.
28
+ *
29
+ * `embedMany` automatically splits large requests into smaller chunks if the model
30
+ * has a limit on how many embeddings can be generated in a single call.
31
+ *
32
+ * @param model - The embedding model to use.
33
+ * @param values - The values that should be embedded.
34
+ *
35
+ * @param maxRetries - Maximum number of retries. Set to 0 to disable retries. Default: 2.
36
+ * @param abortSignal - An optional abort signal that can be used to cancel the call.
37
+ * @param headers - Additional HTTP headers to be sent with the request. Only applicable for HTTP-based providers.
38
+ *
39
+ * @param maxParallelCalls - Maximum number of concurrent requests. Default: Infinity.
40
+ *
41
+ * @param telemetry - Optional telemetry configuration.
42
+ *
43
+ * @param providerOptions - Additional provider-specific options. They are passed through
44
+ * to the provider from the AI SDK and enable provider-specific
45
+ * functionality that can be fully encapsulated in the provider.
46
+ *
47
+ * @returns A result object that contains the embeddings, the value, and additional information.
48
+ */
49
+ export async function embedMany({
50
+ model: modelArg,
51
+ values,
52
+ maxParallelCalls = Infinity,
53
+ maxRetries: maxRetriesArg,
54
+ abortSignal,
55
+ headers,
56
+ providerOptions,
57
+ experimental_telemetry,
58
+ telemetry = experimental_telemetry,
59
+ experimental_onStart: onStart,
60
+ experimental_onFinish: onFinish,
61
+ _internal: { generateCallId = originalGenerateCallId } = {},
62
+ }: {
63
+ /**
64
+ * The embedding model to use.
65
+ */
66
+ model: EmbeddingModel;
67
+
68
+ /**
69
+ * The values that should be embedded.
70
+ */
71
+ values: Array<string>;
72
+
73
+ /**
74
+ * Maximum number of retries per embedding model call. Set to 0 to disable retries.
75
+ *
76
+ * @default 2
77
+ */
78
+ maxRetries?: number;
79
+
80
+ /**
81
+ * Abort signal.
82
+ */
83
+ abortSignal?: AbortSignal;
84
+
85
+ /**
86
+ * Additional headers to include in the request.
87
+ * Only applicable for HTTP-based providers.
88
+ */
89
+ headers?: Record<string, string>;
90
+
91
+ /**
92
+ * Optional telemetry configuration.
93
+ */
94
+ telemetry?: TelemetryOptions;
95
+
96
+ /**
97
+ * Optional telemetry configuration.
98
+ *
99
+ * @deprecated Use `telemetry` instead. This alias will be removed in a future major release.
100
+ */
101
+ experimental_telemetry?: TelemetryOptions;
102
+
103
+ /**
104
+ * Additional provider-specific options. They are passed through
105
+ * to the provider from the AI SDK and enable provider-specific
106
+ * functionality that can be fully encapsulated in the provider.
107
+ */
108
+ providerOptions?: ProviderOptions;
109
+
110
+ /**
111
+ * Maximum number of concurrent requests.
112
+ *
113
+ * @default Infinity
114
+ */
115
+ maxParallelCalls?: number;
116
+
117
+ /**
118
+ * Callback that is called when the embedMany operation begins,
119
+ * before the embedding model is called.
120
+ */
121
+ experimental_onStart?: Callback<EmbedStartEvent>;
122
+
123
+ /**
124
+ * Callback that is called when the embedMany operation completes,
125
+ * after all embedding model calls return.
126
+ */
127
+ experimental_onFinish?: Callback<EmbedEndEvent>;
128
+
129
+ /**
130
+ * Internal. For test use only. May change without notice.
131
+ */
132
+ _internal?: {
133
+ generateCallId?: () => string;
134
+ };
135
+ }): Promise<EmbedManyResult> {
136
+ const model = resolveEmbeddingModel(modelArg);
137
+
138
+ const { maxRetries, retry } = prepareRetries({
139
+ maxRetries: maxRetriesArg,
140
+ abortSignal,
141
+ });
142
+
143
+ const headersWithUserAgent = withUserAgentSuffix(
144
+ headers ?? {},
145
+ `ai/${VERSION}`,
146
+ );
147
+
148
+ const callId = generateCallId();
149
+
150
+ const telemetryDispatcher = createTelemetryDispatcher({
151
+ telemetry,
152
+ });
153
+
154
+ await notify({
155
+ event: {
156
+ callId,
157
+ operationId: 'ai.embedMany',
158
+ provider: model.provider,
159
+ modelId: model.modelId,
160
+ value: values,
161
+ maxRetries,
162
+ headers: headersWithUserAgent,
163
+ providerOptions,
164
+ },
165
+ callbacks: [onStart, telemetryDispatcher.onStart],
166
+ });
167
+
168
+ try {
169
+ const [maxEmbeddingsPerCall, supportsParallelCalls] = await Promise.all([
170
+ model.maxEmbeddingsPerCall,
171
+ model.supportsParallelCalls,
172
+ ]);
173
+
174
+ if (maxEmbeddingsPerCall == null || maxEmbeddingsPerCall === Infinity) {
175
+ const { embeddings, usage, warnings, response, providerMetadata } =
176
+ await retry(async () => {
177
+ const embedCallId = generateCallId();
178
+
179
+ await notify({
180
+ event: {
181
+ callId,
182
+ embedCallId,
183
+ operationId: 'ai.embedMany.doEmbed',
184
+ provider: model.provider,
185
+ modelId: model.modelId,
186
+ values,
187
+ },
188
+ callbacks: [telemetryDispatcher.onEmbedStart],
189
+ });
190
+
191
+ const modelResponse = await model.doEmbed({
192
+ values,
193
+ abortSignal,
194
+ headers: headersWithUserAgent,
195
+ providerOptions,
196
+ });
197
+
198
+ const embeddings = modelResponse.embeddings;
199
+ const usage = modelResponse.usage ?? { tokens: NaN };
200
+
201
+ await notify({
202
+ event: {
203
+ callId,
204
+ embedCallId,
205
+ operationId: 'ai.embedMany.doEmbed',
206
+ provider: model.provider,
207
+ modelId: model.modelId,
208
+ values,
209
+ embeddings,
210
+ usage,
211
+ },
212
+ callbacks: [telemetryDispatcher.onEmbedFinish],
213
+ });
214
+
215
+ return {
216
+ embeddings,
217
+ usage,
218
+ warnings: modelResponse.warnings,
219
+ providerMetadata: modelResponse.providerMetadata,
220
+ response: modelResponse.response,
221
+ };
222
+ });
223
+
224
+ logWarnings({
225
+ warnings,
226
+ provider: model.provider,
227
+ model: model.modelId,
228
+ });
229
+
230
+ await notify({
231
+ event: {
232
+ callId,
233
+ operationId: 'ai.embedMany',
234
+ provider: model.provider,
235
+ modelId: model.modelId,
236
+ value: values,
237
+ embedding: embeddings,
238
+ usage,
239
+ warnings,
240
+ providerMetadata,
241
+ response: [response],
242
+ },
243
+ callbacks: [onFinish, telemetryDispatcher.onFinish],
244
+ });
245
+
246
+ return new DefaultEmbedManyResult({
247
+ values,
248
+ embeddings,
249
+ usage,
250
+ warnings,
251
+ providerMetadata,
252
+ responses: [response],
253
+ });
254
+ }
255
+
256
+ const valueChunks = splitArray(values, maxEmbeddingsPerCall);
257
+
258
+ const embeddings: Array<Embedding> = [];
259
+ const warnings: Array<Warning> = [];
260
+ const responses: Array<
261
+ | {
262
+ headers?: Record<string, string>;
263
+ body?: unknown;
264
+ }
265
+ | undefined
266
+ > = [];
267
+ let tokens = 0;
268
+ let providerMetadata: ProviderMetadata | undefined;
269
+
270
+ const parallelChunks = splitArray(
271
+ valueChunks,
272
+ supportsParallelCalls ? maxParallelCalls : 1,
273
+ );
274
+
275
+ for (const parallelChunk of parallelChunks) {
276
+ const results = await Promise.all(
277
+ parallelChunk.map(chunk => {
278
+ return retry(async () => {
279
+ const embedCallId = generateCallId();
280
+
281
+ await notify({
282
+ event: {
283
+ callId,
284
+ embedCallId,
285
+ operationId: 'ai.embedMany.doEmbed',
286
+ provider: model.provider,
287
+ modelId: model.modelId,
288
+ values: chunk,
289
+ },
290
+ callbacks: [telemetryDispatcher.onEmbedStart],
291
+ });
292
+
293
+ const modelResponse = await model.doEmbed({
294
+ values: chunk,
295
+ abortSignal,
296
+ headers: headersWithUserAgent,
297
+ providerOptions,
298
+ });
299
+
300
+ const chunkEmbeddings = modelResponse.embeddings;
301
+ const usage = modelResponse.usage ?? { tokens: NaN };
302
+
303
+ await notify({
304
+ event: {
305
+ callId,
306
+ embedCallId,
307
+ operationId: 'ai.embedMany.doEmbed',
308
+ provider: model.provider,
309
+ modelId: model.modelId,
310
+ values: chunk,
311
+ embeddings: chunkEmbeddings,
312
+ usage,
313
+ },
314
+ callbacks: [telemetryDispatcher.onEmbedFinish],
315
+ });
316
+
317
+ return {
318
+ embeddings: chunkEmbeddings,
319
+ usage,
320
+ warnings: modelResponse.warnings,
321
+ providerMetadata: modelResponse.providerMetadata,
322
+ response: modelResponse.response,
323
+ };
324
+ });
325
+ }),
326
+ );
327
+
328
+ for (const result of results) {
329
+ embeddings.push(...result.embeddings);
330
+ warnings.push(...result.warnings);
331
+ responses.push(result.response);
332
+ tokens += result.usage.tokens;
333
+ if (result.providerMetadata) {
334
+ if (!providerMetadata) {
335
+ providerMetadata = { ...result.providerMetadata };
336
+ } else {
337
+ for (const [providerName, metadata] of Object.entries(
338
+ result.providerMetadata,
339
+ )) {
340
+ providerMetadata[providerName] = {
341
+ ...(providerMetadata[providerName] ?? {}),
342
+ ...metadata,
343
+ };
344
+ }
345
+ }
346
+ }
347
+ }
348
+ }
349
+
350
+ logWarnings({
351
+ warnings,
352
+ provider: model.provider,
353
+ model: model.modelId,
354
+ });
355
+
356
+ await notify({
357
+ event: {
358
+ callId,
359
+ operationId: 'ai.embedMany',
360
+ provider: model.provider,
361
+ modelId: model.modelId,
362
+ value: values,
363
+ embedding: embeddings,
364
+ usage: { tokens },
365
+ warnings,
366
+ providerMetadata,
367
+ response: responses,
368
+ },
369
+ callbacks: [onFinish, telemetryDispatcher.onFinish],
370
+ });
371
+
372
+ return new DefaultEmbedManyResult({
373
+ values,
374
+ embeddings,
375
+ usage: { tokens },
376
+ warnings,
377
+ providerMetadata: providerMetadata,
378
+ responses,
379
+ });
380
+ } catch (error) {
381
+ await telemetryDispatcher.onError?.({ callId, error });
382
+ throw error;
383
+ }
384
+ }
385
+
386
+ class DefaultEmbedManyResult implements EmbedManyResult {
387
+ readonly values: EmbedManyResult['values'];
388
+ readonly embeddings: EmbedManyResult['embeddings'];
389
+ readonly usage: EmbedManyResult['usage'];
390
+ readonly warnings: EmbedManyResult['warnings'];
391
+ readonly providerMetadata: EmbedManyResult['providerMetadata'];
392
+ readonly responses: EmbedManyResult['responses'];
393
+
394
+ constructor(options: {
395
+ values: EmbedManyResult['values'];
396
+ embeddings: EmbedManyResult['embeddings'];
397
+ usage: EmbedManyResult['usage'];
398
+ warnings: EmbedManyResult['warnings'];
399
+ providerMetadata?: EmbedManyResult['providerMetadata'];
400
+ responses?: EmbedManyResult['responses'];
401
+ }) {
402
+ this.values = options.values;
403
+ this.embeddings = options.embeddings;
404
+ this.usage = options.usage;
405
+ this.warnings = options.warnings;
406
+ this.providerMetadata = options.providerMetadata;
407
+ this.responses = options.responses;
408
+ }
409
+ }
@@ -0,0 +1,50 @@
1
+ import { Embedding } from '../types';
2
+ import { EmbeddingModelUsage } from '../types/usage';
3
+ import { ProviderMetadata } from '../types';
4
+ import { Warning } from '../types/warning';
5
+
6
+ /**
7
+ * The result of an `embed` call.
8
+ * It contains the embedding, the value, and additional information.
9
+ */
10
+ export interface EmbedResult {
11
+ /**
12
+ * The value that was embedded.
13
+ */
14
+ readonly value: string;
15
+
16
+ /**
17
+ * The embedding of the value.
18
+ */
19
+ readonly embedding: Embedding;
20
+
21
+ /**
22
+ * The embedding token usage.
23
+ */
24
+ readonly usage: EmbeddingModelUsage;
25
+
26
+ /**
27
+ * Warnings for the call, e.g. unsupported settings.
28
+ */
29
+ readonly warnings: Array<Warning>;
30
+
31
+ /**
32
+ * Optional provider-specific metadata.
33
+ */
34
+ readonly providerMetadata?: ProviderMetadata;
35
+
36
+ /**
37
+ * Optional response data.
38
+ */
39
+ readonly response?: {
40
+ /**
41
+ * Response headers.
42
+ */
43
+ headers?: Record<string, string>;
44
+
45
+ /**
46
+ * The response body.
47
+ */
48
+ body?: unknown;
49
+ };
50
+ }