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,59 @@
1
+ import { InferToolInput } from '@ai-sdk/provider-utils';
2
+ import { ProviderMetadata } from '../types';
3
+ import { ValueOf } from '../util/value-of';
4
+ import type { ToolSet } from '@ai-sdk/provider-utils';
5
+
6
+ type BaseToolCall = {
7
+ type: 'tool-call';
8
+ toolCallId: string;
9
+ providerExecuted?: boolean;
10
+ providerMetadata?: ProviderMetadata;
11
+ };
12
+
13
+ /**
14
+ * A tool call whose `toolName` maps to a tool in the declared tool set,
15
+ * with an `input` type inferred from that tool's input schema.
16
+ */
17
+ export type StaticToolCall<TOOLS extends ToolSet> = ValueOf<{
18
+ [NAME in keyof TOOLS]: BaseToolCall & {
19
+ toolName: NAME & string;
20
+ input: InferToolInput<TOOLS[NAME]>;
21
+ dynamic?: false | undefined;
22
+ invalid?: false | undefined;
23
+ error?: never;
24
+ title?: string;
25
+ };
26
+ }>;
27
+
28
+ /**
29
+ * A tool call whose `toolName` is only known at runtime, such as an invalid
30
+ * or otherwise untyped call that cannot be matched to the declared tool set.
31
+ */
32
+ export type DynamicToolCall = BaseToolCall & {
33
+ toolName: string;
34
+ input: unknown;
35
+ dynamic: true;
36
+ title?: string;
37
+
38
+ /**
39
+ * True if this is caused by an unparsable tool call or
40
+ * a tool that does not exist.
41
+ */
42
+ // Added into DynamicToolCall to avoid breaking changes.
43
+ // TODO AI SDK 6: separate into a new InvalidToolCall type
44
+ invalid?: boolean;
45
+
46
+ /**
47
+ * The error that caused the tool call to be invalid.
48
+ */
49
+ // TODO AI SDK 6: separate into a new InvalidToolCall type
50
+ error?: unknown;
51
+ };
52
+
53
+ /**
54
+ * A tool call returned by text generation, either statically typed from the
55
+ * declared tool set or dynamically typed when the tool cannot be inferred.
56
+ */
57
+ export type TypedToolCall<TOOLS extends ToolSet> =
58
+ | StaticToolCall<TOOLS>
59
+ | DynamicToolCall;
@@ -0,0 +1,36 @@
1
+ import { InferToolInput, InferToolOutput } from '@ai-sdk/provider-utils';
2
+ import { ProviderMetadata } from '../types';
3
+ import { ValueOf } from '../../src/util/value-of';
4
+ import type { ToolSet } from '@ai-sdk/provider-utils';
5
+
6
+ export type StaticToolResult<TOOLS extends ToolSet> = ValueOf<{
7
+ [NAME in keyof TOOLS]: {
8
+ type: 'tool-result';
9
+ toolCallId: string;
10
+ toolName: NAME & string;
11
+ input: InferToolInput<TOOLS[NAME]>;
12
+ output: InferToolOutput<TOOLS[NAME]>;
13
+ providerExecuted?: boolean;
14
+ providerMetadata?: ProviderMetadata;
15
+ dynamic?: false | undefined;
16
+ preliminary?: boolean;
17
+ title?: string;
18
+ };
19
+ }>;
20
+
21
+ export type DynamicToolResult = {
22
+ type: 'tool-result';
23
+ toolCallId: string;
24
+ toolName: string;
25
+ input: unknown;
26
+ output: unknown;
27
+ providerExecuted?: boolean;
28
+ providerMetadata?: ProviderMetadata;
29
+ dynamic: true;
30
+ preliminary?: boolean;
31
+ title?: string;
32
+ };
33
+
34
+ export type TypedToolResult<TOOLS extends ToolSet> =
35
+ | StaticToolResult<TOOLS>
36
+ | DynamicToolResult;
@@ -0,0 +1,146 @@
1
+ import { asArray } from '@ai-sdk/provider-utils';
2
+ import { Callback } from '../util/callback';
3
+ import { mergeCallbacks } from '../util/merge-callbacks';
4
+ import type {
5
+ InferTelemetryEvent,
6
+ Telemetry,
7
+ TelemetryDispatcher,
8
+ } from './telemetry';
9
+ import { getGlobalTelemetryIntegrations } from './telemetry-registry';
10
+ import type { TelemetryOptions } from './telemetry-options';
11
+
12
+ /**
13
+ * The subset of `TelemetryDispatcher` keys whose values are Callback callbacks.
14
+ * This excludes non-Callback properties such as `executeTool`.
15
+ */
16
+ type TelemetryCallbackKey = keyof {
17
+ [K in keyof TelemetryDispatcher as TelemetryDispatcher[K] extends
18
+ | Callback<any>
19
+ | undefined
20
+ ? K
21
+ : never]: true;
22
+ };
23
+
24
+ /**
25
+ * Resolves the public event type accepted by a telemetry callback key.
26
+ */
27
+ type TelemetryEvent<K extends TelemetryCallbackKey> =
28
+ TelemetryDispatcher[K] extends Callback<infer EVENT> | undefined
29
+ ? EVENT
30
+ : never;
31
+
32
+ function augmentEvent<EVENT>(
33
+ event: EVENT,
34
+ telemetry: Pick<
35
+ TelemetryOptions,
36
+ 'recordInputs' | 'recordOutputs' | 'functionId'
37
+ >,
38
+ ): InferTelemetryEvent<EVENT> {
39
+ return Object.assign(
40
+ Object.create(Object.getPrototypeOf(event)),
41
+ event,
42
+ telemetry,
43
+ );
44
+ }
45
+
46
+ /**
47
+ * Creates a telemetry dispatcher that sends telemetry events
48
+ * to the resolved set of integrations.
49
+ *
50
+ * When per-call integrations are provided, they take precedence over the globally
51
+ * registered integrations for that call. When no per-call integrations are
52
+ * provided, the globally registered integrations are used.
53
+ *
54
+ * @param args.telemetry - Optional per-call telemetry settings and integrations.
55
+ *
56
+ * @returns A telemetry dispatcher that fans out lifecycle events to the
57
+ * resolved set of integrations.
58
+ */
59
+ export function createTelemetryDispatcher({
60
+ telemetry,
61
+ }: {
62
+ telemetry?: TelemetryOptions;
63
+ // operationId: string;
64
+ }): TelemetryDispatcher {
65
+ // When telemetry is explicitly disabled, return a dispatcher
66
+ // that performs no work and lets tool execution pass through unwrapped.
67
+ if (telemetry?.isEnabled === false) {
68
+ return {};
69
+ }
70
+
71
+ const localIntegrations = telemetry?.integrations;
72
+ const integrations: Array<Telemetry> =
73
+ localIntegrations != null
74
+ ? asArray(localIntegrations)
75
+ : getGlobalTelemetryIntegrations();
76
+
77
+ const telemetryMetadata = {
78
+ recordInputs: telemetry?.recordInputs,
79
+ recordOutputs: telemetry?.recordOutputs,
80
+ functionId: telemetry?.functionId,
81
+ };
82
+
83
+ const mergeTelemetryCallback = <KEY extends TelemetryCallbackKey>(
84
+ key: KEY,
85
+ ): Callback<TelemetryEvent<KEY>> => {
86
+ return mergeCallbacks(
87
+ ...(
88
+ integrations
89
+ .map(integration => integration[key]?.bind(integration))
90
+ .filter(Boolean) as Array<
91
+ Callback<InferTelemetryEvent<TelemetryEvent<KEY>>>
92
+ >
93
+ ).map(
94
+ callback =>
95
+ ((event: TelemetryEvent<KEY>) =>
96
+ callback(augmentEvent(event, telemetryMetadata))) as Callback<
97
+ TelemetryEvent<KEY>
98
+ >,
99
+ ),
100
+ );
101
+ };
102
+
103
+ const executeWrappers = integrations
104
+ .map(integration => integration.executeTool?.bind(integration))
105
+ .filter(Boolean) as Array<NonNullable<Telemetry['executeTool']>>;
106
+
107
+ return {
108
+ onStart: mergeTelemetryCallback('onStart'),
109
+ onStepStart: mergeTelemetryCallback('onStepStart'),
110
+ onLanguageModelCallStart: mergeTelemetryCallback(
111
+ 'onLanguageModelCallStart',
112
+ ),
113
+ onLanguageModelCallEnd: mergeTelemetryCallback('onLanguageModelCallEnd'),
114
+ onToolExecutionStart: mergeTelemetryCallback('onToolExecutionStart'),
115
+ onToolExecutionEnd: mergeTelemetryCallback('onToolExecutionEnd'),
116
+ onChunk: mergeTelemetryCallback('onChunk'),
117
+ onStepFinish: mergeTelemetryCallback('onStepFinish'),
118
+ onObjectStepStart: mergeTelemetryCallback('onObjectStepStart'),
119
+ onObjectStepFinish: mergeTelemetryCallback('onObjectStepFinish'),
120
+ onEmbedStart: mergeTelemetryCallback('onEmbedStart'),
121
+ onEmbedFinish: mergeTelemetryCallback('onEmbedFinish'),
122
+ onRerankStart: mergeTelemetryCallback('onRerankStart'),
123
+ onRerankFinish: mergeTelemetryCallback('onRerankFinish'),
124
+ onFinish: mergeTelemetryCallback('onFinish'),
125
+ onError: mergeTelemetryCallback('onError'),
126
+
127
+ /**
128
+ * Composes all `executeTool` wrappers around the original tool execution.
129
+ * Each wrapper receives an `execute` function that calls the next wrapper in
130
+ * the chain, so integrations can establish nested telemetry context before
131
+ * delegating to the underlying tool.
132
+ */
133
+ executeTool:
134
+ executeWrappers.length > 0
135
+ ? async args => {
136
+ let execute = args.execute;
137
+ for (const executeWrapper of executeWrappers) {
138
+ const innerExecute = execute;
139
+ execute = () =>
140
+ executeWrapper({ ...args, execute: innerExecute });
141
+ }
142
+ return await execute();
143
+ }
144
+ : undefined,
145
+ };
146
+ }
@@ -0,0 +1,15 @@
1
+ import type { Telemetry } from './telemetry';
2
+
3
+ /**
4
+ * Registers one or more telemetry integrations globally.
5
+ */
6
+ export function registerTelemetry(...integrations: Telemetry[]): void {
7
+ if (!globalThis.AI_SDK_TELEMETRY_INTEGRATIONS) {
8
+ globalThis.AI_SDK_TELEMETRY_INTEGRATIONS = [];
9
+ }
10
+ globalThis.AI_SDK_TELEMETRY_INTEGRATIONS.push(...integrations);
11
+ }
12
+
13
+ export function getGlobalTelemetryIntegrations(): Telemetry[] {
14
+ return globalThis.AI_SDK_TELEMETRY_INTEGRATIONS ?? [];
15
+ }
@@ -0,0 +1,223 @@
1
+ import type { ToolSet } from '@ai-sdk/provider-utils';
2
+ import type {
3
+ EmbedEndEvent,
4
+ EmbedStartEvent,
5
+ EmbeddingModelCallEndEvent,
6
+ EmbeddingModelCallStartEvent,
7
+ } from '../embed/embed-events';
8
+ import type {
9
+ GenerateObjectEndEvent,
10
+ GenerateObjectStartEvent,
11
+ GenerateObjectStepEndEvent,
12
+ GenerateObjectStepStartEvent,
13
+ } from '../generate-object/structured-output-events';
14
+ import type {
15
+ StreamTextChunkEvent,
16
+ GenerateTextEndEvent,
17
+ GenerateTextStartEvent,
18
+ GenerateTextStepEndEvent,
19
+ GenerateTextStepStartEvent,
20
+ } from '../generate-text/core-events';
21
+ import type {
22
+ LanguageModelCallEndEvent,
23
+ LanguageModelCallStartEvent,
24
+ OnLanguageModelCallEndCallback,
25
+ OnLanguageModelCallStartCallback,
26
+ } from '../generate-text/language-model-events';
27
+ import type {
28
+ ToolExecutionEndEvent,
29
+ ToolExecutionStartEvent,
30
+ } from '../generate-text/tool-execution-events';
31
+ import type {
32
+ RerankEndEvent,
33
+ RerankStartEvent,
34
+ RerankingModelCallEndEvent,
35
+ RerankingModelCallStartEvent,
36
+ } from '../rerank/rerank-events';
37
+ import type { Callback } from '../util/callback';
38
+ import { TelemetryOptions } from '../telemetry/telemetry-options';
39
+
40
+ export type InferTelemetryEvent<EVENT> = EVENT &
41
+ Omit<TelemetryOptions, 'integrations' | 'isEnabled'>;
42
+
43
+ type OperationStartEvent =
44
+ | GenerateTextStartEvent
45
+ | GenerateObjectStartEvent
46
+ | EmbedStartEvent
47
+ | RerankStartEvent;
48
+
49
+ type OperationFinishEvent =
50
+ | GenerateTextEndEvent<ToolSet>
51
+ | GenerateObjectEndEvent<unknown>
52
+ | EmbedEndEvent
53
+ | RerankEndEvent;
54
+
55
+ export interface TelemetryDispatcher {
56
+ onStart?: Callback<OperationStartEvent>;
57
+ onStepStart?: Callback<GenerateTextStepStartEvent>;
58
+ onLanguageModelCallStart?: OnLanguageModelCallStartCallback;
59
+ onLanguageModelCallEnd?: OnLanguageModelCallEndCallback;
60
+ onToolExecutionStart?: Callback<ToolExecutionStartEvent>;
61
+ onToolExecutionEnd?: Callback<ToolExecutionEndEvent>;
62
+ onChunk?: Callback<StreamTextChunkEvent>;
63
+ onStepFinish?: Callback<GenerateTextStepEndEvent>;
64
+ onObjectStepStart?: Callback<GenerateObjectStepStartEvent>;
65
+ onObjectStepFinish?: Callback<GenerateObjectStepEndEvent>;
66
+ onEmbedStart?: Callback<EmbeddingModelCallStartEvent>;
67
+ onEmbedFinish?: Callback<EmbeddingModelCallEndEvent>;
68
+ onRerankStart?: Callback<RerankingModelCallStartEvent>;
69
+ onRerankFinish?: Callback<RerankingModelCallEndEvent>;
70
+ onFinish?: Callback<OperationFinishEvent>;
71
+ onError?: Callback<unknown>;
72
+ executeTool?: Telemetry['executeTool'];
73
+ }
74
+
75
+ /**
76
+ * Implement this interface to create custom telemetry integrations.
77
+ * Methods can be sync or return a PromiseLike.
78
+ */
79
+ export interface Telemetry {
80
+ /**
81
+ * Called when an operation begins. Fired for text generation
82
+ * (generateText/streamText), object generation (generateObject/streamObject),
83
+ * embedding (embed/embedMany), and reranking operations.
84
+ *
85
+ * Use the `operationId` field to distinguish between operation types.
86
+ */
87
+ onStart?: Callback<InferTelemetryEvent<OperationStartEvent>>;
88
+
89
+ /**
90
+ * Called when an individual step (single LLM invocation) begins.
91
+ * A generation may consist of multiple steps (e.g. when tool calls trigger
92
+ * follow-up LLM calls). Use this to create per-step spans or record
93
+ * step-level inputs.
94
+ *
95
+ * The event includes the step number, accumulated previous step results,
96
+ * and the messages that will be sent to the model.
97
+ */
98
+ onStepStart?: Callback<InferTelemetryEvent<GenerateTextStepStartEvent>>;
99
+
100
+ /**
101
+ * Called immediately before the provider model call begins.
102
+ * Unlike `onStepStart`, this callback is scoped to model work only and
103
+ * excludes any later client-side tool execution.
104
+ */
105
+ onLanguageModelCallStart?: Callback<
106
+ InferTelemetryEvent<LanguageModelCallStartEvent>
107
+ >;
108
+
109
+ /**
110
+ * Called after the model response has been normalized and parsed, but before
111
+ * any client-side tool execution begins.
112
+ */
113
+ onLanguageModelCallEnd?: Callback<
114
+ InferTelemetryEvent<LanguageModelCallEndEvent>
115
+ >;
116
+
117
+ /**
118
+ * Called when a tool execution begins, before the tool's `execute` function
119
+ * is invoked. Use this to create tool-level spans or log tool invocations.
120
+ */
121
+ onToolExecutionStart?: Callback<InferTelemetryEvent<ToolExecutionStartEvent>>;
122
+
123
+ /**
124
+ * Called when a tool execution completes, either successfully or with an error.
125
+ * The event uses a discriminated union on the `success` field — check
126
+ * `event.success` to determine whether `output` or `error` is available.
127
+ *
128
+ * The event includes execution duration (`durationMs`) for performance tracking.
129
+ */
130
+ onToolExecutionEnd?: Callback<InferTelemetryEvent<ToolExecutionEndEvent>>;
131
+
132
+ /**
133
+ * Called for each chunk received during streaming.
134
+ * Only relevant for `streamText` — not called during `generateText`.
135
+ */
136
+ onChunk?: Callback<StreamTextChunkEvent>;
137
+
138
+ /**
139
+ * Called when an individual step (single LLM invocation) completes.
140
+ * The event is a `StepResult` containing the model's response, tool calls
141
+ * and results, usage statistics, finish reason, and optional request/response
142
+ * bodies.
143
+ */
144
+ onStepFinish?: Callback<InferTelemetryEvent<GenerateTextStepEndEvent>>;
145
+
146
+ /**
147
+ * Called when an object generation step (single LLM invocation) begins.
148
+ * For generateObject/streamObject there is always exactly one step.
149
+ *
150
+ * @deprecated
151
+ */
152
+ onObjectStepStart?: Callback<
153
+ InferTelemetryEvent<GenerateObjectStepStartEvent>
154
+ >;
155
+
156
+ /**
157
+ * Called when an object generation step (single LLM invocation) completes,
158
+ * with the raw result before JSON parsing and schema validation.
159
+ *
160
+ * @deprecated
161
+ */
162
+ onObjectStepFinish?: Callback<
163
+ InferTelemetryEvent<GenerateObjectStepEndEvent>
164
+ >;
165
+
166
+ /**
167
+ * Called when an individual embedding model call (doEmbed) begins.
168
+ * For `embed`, there is one call. For `embedMany`, there may be multiple
169
+ * calls when values are chunked.
170
+ */
171
+ onEmbedStart?: Callback<InferTelemetryEvent<EmbeddingModelCallStartEvent>>;
172
+
173
+ /**
174
+ * Called when an individual embedding model call (doEmbed) completes.
175
+ * Contains the embeddings, usage, and any warnings from the model response.
176
+ */
177
+ onEmbedFinish?: Callback<InferTelemetryEvent<EmbeddingModelCallEndEvent>>;
178
+
179
+ /**
180
+ * Called when an individual reranking model call (doRerank) begins.
181
+ * There is one call per `rerank` invocation.
182
+ */
183
+ onRerankStart?: Callback<InferTelemetryEvent<RerankingModelCallStartEvent>>;
184
+
185
+ /**
186
+ * Called when an individual reranking model call (doRerank) completes.
187
+ * Contains the ranking results from the model response.
188
+ */
189
+ onRerankFinish?: Callback<InferTelemetryEvent<RerankingModelCallEndEvent>>;
190
+
191
+ /**
192
+ * Called when an operation completes. Fired for text generation
193
+ * (generateText/streamText), object generation (generateObject/streamObject),
194
+ * embedding (embed/embedMany), and reranking operations.
195
+ *
196
+ * Use the event shape or `operationId` to distinguish between operation types.
197
+ */
198
+ onFinish?: Callback<InferTelemetryEvent<OperationFinishEvent>>;
199
+
200
+ /**
201
+ * Called when an unrecoverable error occurs during the generation lifecycle.
202
+ * The error value is untyped — it may be an `Error` instance, an `AISDKError`,
203
+ * or any thrown value.
204
+ *
205
+ * Use this to record error details on telemetry spans and set error status.
206
+ */
207
+ onError?: Callback<unknown>;
208
+
209
+ /**
210
+ * Optionally runs the tool execute function in a telemetry-integration-specific context. This enables
211
+ * nested traces — e.g. when a tool's `execute` function calls `generateText`,
212
+ * the inner call's spans become children of the tool span.
213
+ *
214
+ * @param options.callId - The call ID of the tool call.
215
+ * @param options.toolCallId - The tool call ID.
216
+ * @param options.execute - The function to execute.
217
+ */
218
+ executeTool?: <T>(options: {
219
+ callId: string;
220
+ toolCallId: string;
221
+ execute: () => PromiseLike<T>;
222
+ }) => PromiseLike<T>;
223
+ }
@@ -0,0 +1,94 @@
1
+ /**
2
+ * A type that combines AsyncIterable and ReadableStream.
3
+ * This allows a ReadableStream to be consumed using for-await-of syntax.
4
+ */
5
+ export type AsyncIterableStream<T> = AsyncIterable<T> & ReadableStream<T>;
6
+
7
+ /**
8
+ * Wraps a ReadableStream and returns an object that is both a ReadableStream and an AsyncIterable.
9
+ * This enables consumption of the stream using for-await-of, with proper resource cleanup on early exit or error.
10
+ *
11
+ * @template T The type of the stream's chunks.
12
+ * @param source The source ReadableStream to wrap.
13
+ * @returns An AsyncIterableStream that can be used as both a ReadableStream and an AsyncIterable.
14
+ */
15
+ export function createAsyncIterableStream<T>(
16
+ source: ReadableStream<T>,
17
+ ): AsyncIterableStream<T> {
18
+ // Pipe through a TransformStream to ensure a fresh, unlocked stream.
19
+ const stream = source.pipeThrough(new TransformStream<T, T>());
20
+
21
+ /**
22
+ * Implements the async iterator protocol for the stream.
23
+ * Ensures proper cleanup (cancelling and releasing the reader) on completion, early exit, or error.
24
+ */
25
+ (stream as AsyncIterableStream<T>)[Symbol.asyncIterator] = function (
26
+ this: ReadableStream<T>,
27
+ ): AsyncIterator<T> {
28
+ const reader = this.getReader();
29
+
30
+ let finished = false;
31
+
32
+ /**
33
+ * Cleans up the reader by cancelling and releasing the lock.
34
+ */
35
+ async function cleanup(cancelStream: boolean) {
36
+ if (finished) return;
37
+
38
+ finished = true;
39
+ try {
40
+ if (cancelStream) {
41
+ await reader.cancel?.();
42
+ }
43
+ } finally {
44
+ try {
45
+ reader.releaseLock();
46
+ } catch {}
47
+ }
48
+ }
49
+
50
+ return {
51
+ /**
52
+ * Reads the next chunk from the stream.
53
+ * @returns A promise resolving to the next IteratorResult.
54
+ */
55
+ async next(): Promise<IteratorResult<T>> {
56
+ if (finished) {
57
+ return { done: true, value: undefined };
58
+ }
59
+
60
+ const { done, value } = await reader.read();
61
+
62
+ if (done) {
63
+ await cleanup(true);
64
+ return { done: true, value: undefined };
65
+ }
66
+
67
+ return { done: false, value };
68
+ },
69
+
70
+ /**
71
+ * May be called on early exit (e.g., break from for-await) or after completion.
72
+ * Ensures the stream is cancelled and resources are released.
73
+ * @returns A promise resolving to a completed IteratorResult.
74
+ */
75
+ async return(): Promise<IteratorResult<T>> {
76
+ await cleanup(true);
77
+ return { done: true, value: undefined };
78
+ },
79
+
80
+ /**
81
+ * Called on early exit with error.
82
+ * Ensures the stream is cancelled and resources are released, then rethrows the error.
83
+ * @param err The error to throw.
84
+ * @returns A promise that rejects with the provided error.
85
+ */
86
+ async throw(err: unknown): Promise<IteratorResult<T>> {
87
+ await cleanup(true);
88
+ throw err;
89
+ },
90
+ };
91
+ };
92
+
93
+ return stream as AsyncIterableStream<T>;
94
+ }
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Consumes a ReadableStream until it's fully read.
3
+ *
4
+ * This function reads the stream chunk by chunk until the stream is exhausted.
5
+ * It doesn't process or return the data from the stream; it simply ensures
6
+ * that the entire stream is read.
7
+ *
8
+ * @param options - The options for consuming the stream.
9
+ * @param options.stream - The ReadableStream to be consumed.
10
+ * @param options.onError - Optional callback to handle errors that occur during consumption.
11
+ * @returns A promise that resolves when the stream is fully consumed.
12
+ */
13
+ export async function consumeStream({
14
+ stream,
15
+ onError,
16
+ }: {
17
+ stream: ReadableStream;
18
+ onError?: (error: unknown) => void;
19
+ }): Promise<void> {
20
+ const reader = stream.getReader();
21
+ try {
22
+ while (true) {
23
+ const { done } = await reader.read();
24
+ if (done) break;
25
+ }
26
+ } catch (error) {
27
+ onError?.(error);
28
+ } finally {
29
+ reader.releaseLock();
30
+ }
31
+ }