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,960 @@
1
+ import {
2
+ JSONValue,
3
+ LanguageModelV4FinishReason,
4
+ LanguageModelV4StreamPart,
5
+ LanguageModelV4Usage,
6
+ SharedV4ProviderMetadata,
7
+ SharedV4Warning,
8
+ } from '@ai-sdk/provider';
9
+ import {
10
+ createIdGenerator,
11
+ DelayedPromise,
12
+ FlexibleSchema,
13
+ ProviderOptions,
14
+ type InferSchema,
15
+ } from '@ai-sdk/provider-utils';
16
+ import { ServerResponse } from 'http';
17
+ import { logWarnings } from '../logger/log-warnings';
18
+ import { resolveLanguageModel } from '../model/resolve-model';
19
+ import { LanguageModelCallOptions } from '../prompt/language-model-call-options';
20
+ import { prepareLanguageModelCallOptions } from '../prompt/prepare-language-model-call-options';
21
+ import { RequestOptions } from '../prompt/request-options';
22
+ import { convertToLanguageModelPrompt } from '../prompt/convert-to-language-model-prompt';
23
+ import { Prompt } from '../prompt/prompt';
24
+ import { standardizePrompt } from '../prompt/standardize-prompt';
25
+ import { wrapGatewayError } from '../prompt/wrap-gateway-error';
26
+ import { createTelemetryDispatcher } from '../telemetry/create-telemetry-dispatcher';
27
+ import { TelemetryOptions } from '../telemetry/telemetry-options';
28
+ import { createTextStreamResponse } from '../text-stream/create-text-stream-response';
29
+ import { pipeTextStreamToResponse } from '../text-stream/pipe-text-stream-to-response';
30
+ import {
31
+ CallWarning,
32
+ FinishReason,
33
+ LanguageModel,
34
+ } from '../types/language-model';
35
+ import { LanguageModelRequestMetadata } from '../types/language-model-request-metadata';
36
+ import { LanguageModelResponseMetadata } from '../types/language-model-response-metadata';
37
+ import { ProviderMetadata } from '../types/provider-metadata';
38
+ import {
39
+ asLanguageModelUsage,
40
+ createNullLanguageModelUsage,
41
+ LanguageModelUsage,
42
+ } from '../types/usage';
43
+ import { DeepPartial, isDeepEqualData, parsePartialJson } from '../util';
44
+ import {
45
+ AsyncIterableStream,
46
+ createAsyncIterableStream,
47
+ } from '../util/async-iterable-stream';
48
+ import type { Callback } from '../util/callback';
49
+ import { createStitchableStream } from '../util/create-stitchable-stream';
50
+ import { DownloadFunction } from '../util/download/download-function';
51
+ import { notify } from '../util/notify';
52
+ import { now as originalNow } from '../util/now';
53
+ import { prepareRetries } from '../util/prepare-retries';
54
+ import type {
55
+ GenerateObjectEndEvent,
56
+ GenerateObjectStartEvent,
57
+ GenerateObjectStepEndEvent,
58
+ GenerateObjectStepStartEvent,
59
+ } from './structured-output-events';
60
+ import { getOutputStrategy, OutputStrategy } from './output-strategy';
61
+ import { parseAndValidateObjectResultWithRepair } from './parse-and-validate-object-result';
62
+ import { RepairTextFunction } from './repair-text';
63
+ import { ObjectStreamPart, StreamObjectResult } from './stream-object-result';
64
+ import { validateObjectGenerationInput } from './validate-object-generation-input';
65
+
66
+ const originalGenerateId = createIdGenerator({ prefix: 'aiobj', size: 24 });
67
+
68
+ /**
69
+ * Callback that is set using the `onError` option.
70
+ *
71
+ * @param event - The event that is passed to the callback.
72
+ */
73
+ export type StreamObjectOnErrorCallback = (event: {
74
+ error: unknown;
75
+ }) => Promise<void> | void;
76
+
77
+ /**
78
+ * Callback that is set using the `onFinish` option.
79
+ *
80
+ * @param event - The event that is passed to the callback.
81
+ */
82
+ export type StreamObjectOnFinishCallback<RESULT> = (event: {
83
+ /**
84
+ * The token usage of the generated response.
85
+ */
86
+ usage: LanguageModelUsage;
87
+
88
+ /**
89
+ * The generated object. Can be undefined if the final object does not match the schema.
90
+ */
91
+ object: RESULT | undefined;
92
+
93
+ /**
94
+ * Optional error object. This is e.g. a TypeValidationError when the final object does not match the schema.
95
+ */
96
+ error: unknown | undefined;
97
+
98
+ /**
99
+ * Response metadata.
100
+ */
101
+ response: LanguageModelResponseMetadata;
102
+
103
+ /**
104
+ * Warnings from the model provider (e.g. unsupported settings).
105
+ */
106
+ warnings?: CallWarning[];
107
+
108
+ /**
109
+ * Additional provider-specific metadata. They are passed through
110
+ * to the provider from the AI SDK and enable provider-specific
111
+ * functionality that can be fully encapsulated in the provider.
112
+ */
113
+ providerMetadata: ProviderMetadata | undefined;
114
+ }) => Promise<void> | void;
115
+
116
+ /**
117
+ * Generate a structured, typed object for a given prompt and schema using a language model.
118
+ *
119
+ * This function streams the output. If you do not want to stream the output, use `generateObject` instead.
120
+ *
121
+ * @param model - The language model to use.
122
+ *
123
+ * @param system - A system message that will be part of the prompt.
124
+ * @param prompt - A simple text prompt. You can either use `prompt` or `messages` but not both.
125
+ * @param messages - A list of messages. You can either use `prompt` or `messages` but not both.
126
+ *
127
+ * @param maxOutputTokens - Maximum number of tokens to generate.
128
+ * @param temperature - Temperature setting.
129
+ * The value is passed through to the provider. The range depends on the provider and model.
130
+ * It is recommended to set either `temperature` or `topP`, but not both.
131
+ * @param topP - Nucleus sampling.
132
+ * The value is passed through to the provider. The range depends on the provider and model.
133
+ * It is recommended to set either `temperature` or `topP`, but not both.
134
+ * @param topK - Only sample from the top K options for each subsequent token.
135
+ * Used to remove "long tail" low probability responses.
136
+ * Recommended for advanced use cases only. You usually only need to use temperature.
137
+ * @param presencePenalty - Presence penalty setting.
138
+ * It affects the likelihood of the model to repeat information that is already in the prompt.
139
+ * The value is passed through to the provider. The range depends on the provider and model.
140
+ * @param frequencyPenalty - Frequency penalty setting.
141
+ * It affects the likelihood of the model to repeatedly use the same words or phrases.
142
+ * The value is passed through to the provider. The range depends on the provider and model.
143
+ * @param stopSequences - Stop sequences.
144
+ * If set, the model will stop generating text when one of the stop sequences is generated.
145
+ * @param seed - The seed (integer) to use for random sampling.
146
+ * If set and supported by the model, calls will generate deterministic results.
147
+ *
148
+ * @param maxRetries - Maximum number of retries. Set to 0 to disable retries. Default: 2.
149
+ * @param abortSignal - An optional abort signal that can be used to cancel the call.
150
+ * @param headers - Additional HTTP headers to be sent with the request. Only applicable for HTTP-based providers.
151
+ *
152
+ * @param schema - The schema of the object that the model should generate.
153
+ * @param schemaName - Optional name of the output that should be generated.
154
+ * Used by some providers for additional LLM guidance, e.g.
155
+ * via tool or schema name.
156
+ * @param schemaDescription - Optional description of the output that should be generated.
157
+ * Used by some providers for additional LLM guidance, e.g.
158
+ * via tool or schema description.
159
+ *
160
+ * @param output - The type of the output.
161
+ *
162
+ * - 'object': The output is an object.
163
+ * - 'array': The output is an array.
164
+ * - 'enum': The output is an enum.
165
+ * - 'no-schema': The output is not a schema.
166
+ *
167
+ * @param telemetry - Optional telemetry configuration.
168
+ *
169
+ * @param providerOptions - Additional provider-specific options. They are passed through
170
+ * to the provider from the AI SDK and enable provider-specific
171
+ * functionality that can be fully encapsulated in the provider.
172
+ *
173
+ * @returns
174
+ * A result object for accessing the partial object stream and additional information.
175
+ *
176
+ * @deprecated Use `streamText` with an `output` setting instead.
177
+ */
178
+ export function streamObject<
179
+ SCHEMA extends FlexibleSchema<unknown> = FlexibleSchema<JSONValue>,
180
+ OUTPUT extends 'object' | 'array' | 'enum' | 'no-schema' =
181
+ InferSchema<SCHEMA> extends string ? 'enum' : 'object',
182
+ RESULT = OUTPUT extends 'array'
183
+ ? Array<InferSchema<SCHEMA>>
184
+ : InferSchema<SCHEMA>,
185
+ >(
186
+ options: Omit<LanguageModelCallOptions, 'stopSequences'> &
187
+ Omit<RequestOptions, 'timeout'> &
188
+ Prompt &
189
+ (OUTPUT extends 'enum'
190
+ ? {
191
+ /**
192
+ * The enum values that the model should use.
193
+ */
194
+ enum: Array<RESULT>;
195
+ output: 'enum';
196
+ }
197
+ : OUTPUT extends 'no-schema'
198
+ ? {}
199
+ : {
200
+ /**
201
+ * The schema of the object that the model should generate.
202
+ */
203
+ schema: SCHEMA;
204
+
205
+ /**
206
+ * Optional name of the output that should be generated.
207
+ * Used by some providers for additional LLM guidance, e.g.
208
+ * via tool or schema name.
209
+ */
210
+ schemaName?: string;
211
+
212
+ /**
213
+ * Optional description of the output that should be generated.
214
+ * Used by some providers for additional LLM guidance, e.g.
215
+ * via tool or schema description.
216
+ */
217
+ schemaDescription?: string;
218
+ }) & {
219
+ output?: OUTPUT;
220
+
221
+ /**
222
+ * The language model to use.
223
+ */
224
+ model: LanguageModel;
225
+
226
+ /**
227
+ * A function that attempts to repair the raw output of the model
228
+ * to enable JSON parsing.
229
+ */
230
+ experimental_repairText?: RepairTextFunction;
231
+
232
+ /**
233
+ * Optional telemetry configuration.
234
+ */
235
+ telemetry?: TelemetryOptions;
236
+
237
+ /**
238
+ * Optional telemetry configuration.
239
+ *
240
+ * @deprecated Use `telemetry` instead. This alias will be removed in a future major release.
241
+ */
242
+ experimental_telemetry?: TelemetryOptions;
243
+
244
+ /**
245
+ * Custom download function to use for URLs.
246
+ *
247
+ * By default, files are downloaded if the model does not support the URL for the given media type.
248
+ */
249
+ experimental_download?: DownloadFunction | undefined;
250
+
251
+ /**
252
+ * Additional provider-specific options. They are passed through
253
+ * to the provider from the AI SDK and enable provider-specific
254
+ * functionality that can be fully encapsulated in the provider.
255
+ */
256
+ providerOptions?: ProviderOptions;
257
+
258
+ /**
259
+ * Callback that is called when the streamObject operation begins,
260
+ * before the LLM call is made.
261
+ */
262
+ experimental_onStart?: Callback<GenerateObjectStartEvent>;
263
+
264
+ /**
265
+ * Callback that is called when the model call (step) begins,
266
+ * before the provider is called.
267
+ */
268
+ experimental_onStepStart?: Callback<GenerateObjectStepStartEvent>;
269
+
270
+ /**
271
+ * Callback that is called when the model streaming step completes,
272
+ * with the raw accumulated text before final schema validation.
273
+ */
274
+ onStepFinish?: Callback<GenerateObjectStepEndEvent>;
275
+
276
+ /**
277
+ * Callback that is invoked when an error occurs during streaming.
278
+ * You can use it to log errors.
279
+ * The stream processing will pause until the callback promise is resolved.
280
+ */
281
+ onError?: StreamObjectOnErrorCallback;
282
+
283
+ /**
284
+ * Callback that is called when the LLM response and the final object validation are finished.
285
+ */
286
+ onFinish?: Callback<GenerateObjectEndEvent<RESULT>>;
287
+
288
+ /**
289
+ * Internal. For test use only. May change without notice.
290
+ */
291
+ _internal?: {
292
+ generateId?: () => string;
293
+ currentDate?: () => Date;
294
+ now?: () => number;
295
+ };
296
+ },
297
+ ): StreamObjectResult<
298
+ OUTPUT extends 'enum'
299
+ ? string
300
+ : OUTPUT extends 'array'
301
+ ? RESULT
302
+ : DeepPartial<RESULT>,
303
+ OUTPUT extends 'array' ? RESULT : RESULT,
304
+ OUTPUT extends 'array'
305
+ ? RESULT extends Array<infer U>
306
+ ? AsyncIterableStream<U>
307
+ : never
308
+ : never
309
+ > {
310
+ const {
311
+ model,
312
+ output = 'object',
313
+ system,
314
+ prompt,
315
+ messages,
316
+ maxRetries,
317
+ abortSignal,
318
+ headers,
319
+ experimental_repairText: repairText,
320
+ experimental_telemetry,
321
+ telemetry = experimental_telemetry,
322
+ experimental_download: download,
323
+ providerOptions,
324
+ experimental_onStart: onStart,
325
+ experimental_onStepStart: onStepStart,
326
+ onStepFinish,
327
+ onError = ({ error }: { error: unknown }) => {
328
+ console.error(error);
329
+ },
330
+ onFinish,
331
+ _internal: {
332
+ generateId = originalGenerateId,
333
+ currentDate = () => new Date(),
334
+ now = originalNow,
335
+ } = {},
336
+ ...settings
337
+ } = options;
338
+
339
+ const enumValues =
340
+ 'enum' in options && options.enum ? options.enum : undefined;
341
+
342
+ const {
343
+ schema: inputSchema,
344
+ schemaDescription,
345
+ schemaName,
346
+ } = 'schema' in options ? options : {};
347
+
348
+ validateObjectGenerationInput({
349
+ output,
350
+ schema: inputSchema,
351
+ schemaName,
352
+ schemaDescription,
353
+ enumValues,
354
+ });
355
+
356
+ const outputStrategy = getOutputStrategy({
357
+ output,
358
+ schema: inputSchema,
359
+ enumValues,
360
+ });
361
+
362
+ return new DefaultStreamObjectResult({
363
+ model,
364
+ telemetry,
365
+ headers,
366
+ settings,
367
+ maxRetries,
368
+ abortSignal,
369
+ outputStrategy,
370
+ system,
371
+ prompt,
372
+ messages,
373
+ schemaName,
374
+ schemaDescription,
375
+ providerOptions,
376
+ repairText,
377
+ onStart,
378
+ onStepStart,
379
+ onStepFinish,
380
+ onError,
381
+ onFinish,
382
+ download,
383
+ generateId,
384
+ currentDate,
385
+ now,
386
+ });
387
+ }
388
+
389
+ class DefaultStreamObjectResult<
390
+ PARTIAL,
391
+ RESULT,
392
+ ELEMENT_STREAM,
393
+ > implements StreamObjectResult<PARTIAL, RESULT, ELEMENT_STREAM> {
394
+ private readonly _object = new DelayedPromise<RESULT>();
395
+ private readonly _usage = new DelayedPromise<LanguageModelUsage>();
396
+ private readonly _providerMetadata = new DelayedPromise<
397
+ ProviderMetadata | undefined
398
+ >();
399
+ private readonly _warnings = new DelayedPromise<CallWarning[] | undefined>();
400
+ private readonly _request =
401
+ new DelayedPromise<LanguageModelRequestMetadata>();
402
+ private readonly _response =
403
+ new DelayedPromise<LanguageModelResponseMetadata>();
404
+ private readonly _finishReason = new DelayedPromise<FinishReason>();
405
+
406
+ private readonly baseStream: ReadableStream<ObjectStreamPart<PARTIAL>>;
407
+
408
+ private readonly outputStrategy: OutputStrategy<
409
+ PARTIAL,
410
+ RESULT,
411
+ ELEMENT_STREAM
412
+ >;
413
+
414
+ constructor({
415
+ model: modelArg,
416
+ headers,
417
+ telemetry,
418
+ settings,
419
+ maxRetries: maxRetriesArg,
420
+ abortSignal,
421
+ outputStrategy,
422
+ system,
423
+ prompt,
424
+ messages,
425
+ schemaName,
426
+ schemaDescription,
427
+ providerOptions,
428
+ repairText,
429
+ onStart,
430
+ onStepStart,
431
+ onStepFinish,
432
+ onError,
433
+ onFinish,
434
+ download,
435
+ generateId,
436
+ currentDate,
437
+ now,
438
+ }: {
439
+ model: LanguageModel;
440
+ telemetry: TelemetryOptions | undefined;
441
+ headers: Record<string, string | undefined> | undefined;
442
+ settings: LanguageModelCallOptions;
443
+ maxRetries: number | undefined;
444
+ abortSignal: AbortSignal | undefined;
445
+ outputStrategy: OutputStrategy<PARTIAL, RESULT, ELEMENT_STREAM>;
446
+ system: Prompt['system'];
447
+ prompt: Prompt['prompt'];
448
+ messages: Prompt['messages'];
449
+ schemaName: string | undefined;
450
+ schemaDescription: string | undefined;
451
+ providerOptions: ProviderOptions | undefined;
452
+ repairText: RepairTextFunction | undefined;
453
+ onStart: Callback<GenerateObjectStartEvent> | undefined;
454
+ onStepStart: Callback<GenerateObjectStepStartEvent> | undefined;
455
+ onStepFinish: Callback<GenerateObjectStepEndEvent> | undefined;
456
+ onError: StreamObjectOnErrorCallback;
457
+ onFinish: Callback<GenerateObjectEndEvent<RESULT>> | undefined;
458
+ download: DownloadFunction | undefined;
459
+ generateId: () => string;
460
+ currentDate: () => Date;
461
+ now: () => number;
462
+ }) {
463
+ const model = resolveLanguageModel(modelArg);
464
+
465
+ const { maxRetries, retry } = prepareRetries({
466
+ maxRetries: maxRetriesArg,
467
+ abortSignal,
468
+ });
469
+
470
+ const callSettings = prepareLanguageModelCallOptions(settings);
471
+
472
+ const telemetryDispatcher = createTelemetryDispatcher({
473
+ telemetry,
474
+ });
475
+
476
+ const self = this;
477
+
478
+ const stitchableStream =
479
+ createStitchableStream<ObjectStreamPart<PARTIAL>>();
480
+
481
+ const eventProcessor = new TransformStream<
482
+ ObjectStreamPart<PARTIAL>,
483
+ ObjectStreamPart<PARTIAL>
484
+ >({
485
+ transform(chunk, controller) {
486
+ controller.enqueue(chunk);
487
+
488
+ if (chunk.type === 'error') {
489
+ onError({ error: wrapGatewayError(chunk.error) });
490
+ }
491
+ },
492
+ });
493
+
494
+ this.baseStream = stitchableStream.stream.pipeThrough(eventProcessor);
495
+
496
+ const callId = generateId();
497
+
498
+ (async () => {
499
+ const jsonSchema = await outputStrategy.jsonSchema();
500
+
501
+ await notify({
502
+ event: {
503
+ callId,
504
+ operationId: 'ai.streamObject' as const,
505
+ provider: model.provider,
506
+ modelId: model.modelId,
507
+ system,
508
+ prompt,
509
+ messages,
510
+ maxOutputTokens: callSettings.maxOutputTokens,
511
+ temperature: callSettings.temperature,
512
+ topP: callSettings.topP,
513
+ topK: callSettings.topK,
514
+ presencePenalty: callSettings.presencePenalty,
515
+ frequencyPenalty: callSettings.frequencyPenalty,
516
+ seed: callSettings.seed,
517
+ maxRetries,
518
+ headers,
519
+ providerOptions,
520
+ output: outputStrategy.type as
521
+ | 'object'
522
+ | 'array'
523
+ | 'enum'
524
+ | 'no-schema',
525
+ schema: jsonSchema as Record<string, unknown> | undefined,
526
+ schemaName,
527
+ schemaDescription,
528
+ },
529
+ callbacks: [onStart, telemetryDispatcher.onStart],
530
+ });
531
+
532
+ const standardizedPrompt = await standardizePrompt({
533
+ system,
534
+ prompt,
535
+ messages,
536
+ } as Prompt);
537
+
538
+ const callOptions = {
539
+ responseFormat: {
540
+ type: 'json' as const,
541
+ schema: jsonSchema,
542
+ name: schemaName,
543
+ description: schemaDescription,
544
+ },
545
+ ...prepareLanguageModelCallOptions(settings),
546
+ prompt: await convertToLanguageModelPrompt({
547
+ prompt: standardizedPrompt,
548
+ supportedUrls: await model.supportedUrls,
549
+ download,
550
+ provider: model.provider.split('.')[0],
551
+ }),
552
+ providerOptions,
553
+ abortSignal,
554
+ headers,
555
+ includeRawChunks: false,
556
+ };
557
+
558
+ await notify({
559
+ event: {
560
+ callId,
561
+ stepNumber: 0 as const,
562
+ provider: model.provider,
563
+ modelId: model.modelId,
564
+ providerOptions,
565
+ headers,
566
+ promptMessages: callOptions.prompt,
567
+ },
568
+ callbacks: [onStepStart, telemetryDispatcher.onObjectStepStart],
569
+ });
570
+
571
+ const transformer: Transformer<
572
+ LanguageModelV4StreamPart,
573
+ ObjectStreamInputPart
574
+ > = {
575
+ transform: (chunk, controller) => {
576
+ switch (chunk.type) {
577
+ case 'text-delta':
578
+ controller.enqueue(chunk.delta);
579
+ break;
580
+ case 'response-metadata':
581
+ case 'finish':
582
+ case 'error':
583
+ case 'stream-start':
584
+ controller.enqueue(chunk);
585
+ break;
586
+ }
587
+ },
588
+ };
589
+
590
+ const startTimestampMs = now();
591
+ const { stream, response, request } = await retry(() =>
592
+ model.doStream(callOptions),
593
+ );
594
+
595
+ self._request.resolve(request ?? {});
596
+
597
+ let warnings: SharedV4Warning[] | undefined;
598
+ let usage: LanguageModelUsage = createNullLanguageModelUsage();
599
+ let finishReason: FinishReason | undefined;
600
+ let providerMetadata: ProviderMetadata | undefined;
601
+ let object: RESULT | undefined;
602
+ let error: unknown | undefined;
603
+ let msToFirstChunk: number | undefined = undefined;
604
+
605
+ let accumulatedText = '';
606
+ let textDelta = '';
607
+ let fullResponse: {
608
+ id: string;
609
+ timestamp: Date;
610
+ modelId: string;
611
+ } = {
612
+ id: generateId(),
613
+ timestamp: currentDate(),
614
+ modelId: model.modelId,
615
+ };
616
+
617
+ let latestObjectJson: JSONValue | undefined = undefined;
618
+ let latestObject: PARTIAL | undefined = undefined;
619
+ let isFirstChunk = true;
620
+ let isFirstDelta = true;
621
+
622
+ const transformedStream = stream
623
+ .pipeThrough(new TransformStream(transformer))
624
+ .pipeThrough(
625
+ new TransformStream<
626
+ string | ObjectStreamInputPart,
627
+ ObjectStreamPart<PARTIAL>
628
+ >({
629
+ async transform(chunk, controller): Promise<void> {
630
+ if (typeof chunk === 'object' && chunk.type === 'stream-start') {
631
+ warnings = chunk.warnings;
632
+ return;
633
+ }
634
+
635
+ if (isFirstChunk) {
636
+ msToFirstChunk = now() - startTimestampMs;
637
+ isFirstChunk = false;
638
+ }
639
+
640
+ if (typeof chunk === 'string') {
641
+ accumulatedText += chunk;
642
+ textDelta += chunk;
643
+
644
+ const { value: currentObjectJson, state: parseState } =
645
+ await parsePartialJson(accumulatedText);
646
+
647
+ if (
648
+ currentObjectJson !== undefined &&
649
+ !isDeepEqualData(latestObjectJson, currentObjectJson)
650
+ ) {
651
+ const validationResult =
652
+ await outputStrategy.validatePartialResult({
653
+ value: currentObjectJson,
654
+ textDelta,
655
+ latestObject,
656
+ isFirstDelta,
657
+ isFinalDelta: parseState === 'successful-parse',
658
+ });
659
+
660
+ if (
661
+ validationResult.success &&
662
+ !isDeepEqualData(
663
+ latestObject,
664
+ validationResult.value.partial,
665
+ )
666
+ ) {
667
+ latestObjectJson = currentObjectJson;
668
+ latestObject = validationResult.value.partial;
669
+
670
+ controller.enqueue({
671
+ type: 'object',
672
+ object: latestObject,
673
+ });
674
+
675
+ controller.enqueue({
676
+ type: 'text-delta',
677
+ textDelta: validationResult.value.textDelta,
678
+ });
679
+
680
+ textDelta = '';
681
+ isFirstDelta = false;
682
+ }
683
+ }
684
+
685
+ return;
686
+ }
687
+
688
+ switch (chunk.type) {
689
+ case 'response-metadata': {
690
+ fullResponse = {
691
+ id: chunk.id ?? fullResponse.id,
692
+ timestamp: chunk.timestamp ?? fullResponse.timestamp,
693
+ modelId: chunk.modelId ?? fullResponse.modelId,
694
+ };
695
+ break;
696
+ }
697
+
698
+ case 'finish': {
699
+ if (textDelta !== '') {
700
+ controller.enqueue({ type: 'text-delta', textDelta });
701
+ }
702
+
703
+ finishReason = chunk.finishReason.unified;
704
+
705
+ usage = asLanguageModelUsage(chunk.usage);
706
+ providerMetadata = chunk.providerMetadata;
707
+
708
+ controller.enqueue({
709
+ ...chunk,
710
+ finishReason: chunk.finishReason.unified,
711
+ usage,
712
+ response: fullResponse,
713
+ });
714
+
715
+ logWarnings({
716
+ warnings: warnings ?? [],
717
+ provider: model.provider,
718
+ model: model.modelId,
719
+ });
720
+
721
+ self._usage.resolve(usage);
722
+ self._providerMetadata.resolve(providerMetadata);
723
+ self._warnings.resolve(warnings);
724
+ self._response.resolve({
725
+ ...fullResponse,
726
+ headers: response?.headers,
727
+ });
728
+ self._finishReason.resolve(finishReason ?? 'other');
729
+
730
+ try {
731
+ object = await parseAndValidateObjectResultWithRepair(
732
+ accumulatedText,
733
+ outputStrategy,
734
+ repairText,
735
+ {
736
+ response: fullResponse,
737
+ usage,
738
+ finishReason,
739
+ },
740
+ );
741
+ self._object.resolve(object);
742
+ } catch (e) {
743
+ error = e;
744
+ self._object.reject(e);
745
+ }
746
+ break;
747
+ }
748
+
749
+ default: {
750
+ controller.enqueue(chunk);
751
+ break;
752
+ }
753
+ }
754
+ },
755
+
756
+ async flush(controller) {
757
+ try {
758
+ const finalUsage = usage ?? {
759
+ promptTokens: NaN,
760
+ completionTokens: NaN,
761
+ totalTokens: NaN,
762
+ };
763
+
764
+ await notify({
765
+ event: {
766
+ callId,
767
+ stepNumber: 0 as const,
768
+ provider: model.provider,
769
+ modelId: model.modelId,
770
+ finishReason: finishReason ?? 'other',
771
+ usage: finalUsage,
772
+ objectText: accumulatedText,
773
+ msToFirstChunk,
774
+ reasoning: undefined,
775
+ warnings,
776
+ request: request ?? {},
777
+ response: {
778
+ ...fullResponse,
779
+ headers: response?.headers,
780
+ },
781
+ providerMetadata,
782
+ },
783
+ callbacks: [
784
+ onStepFinish,
785
+ telemetryDispatcher.onObjectStepFinish,
786
+ ],
787
+ });
788
+
789
+ await notify({
790
+ event: {
791
+ callId,
792
+ object,
793
+ error,
794
+ reasoning: undefined,
795
+ finishReason: finishReason ?? 'other',
796
+ usage: finalUsage,
797
+ warnings,
798
+ request: request ?? {},
799
+ response: {
800
+ ...fullResponse,
801
+ headers: response?.headers,
802
+ },
803
+ providerMetadata,
804
+ },
805
+ callbacks: [onFinish, telemetryDispatcher.onFinish],
806
+ });
807
+ } catch (error) {
808
+ controller.enqueue({ type: 'error', error });
809
+ }
810
+ },
811
+ }),
812
+ );
813
+
814
+ stitchableStream.addStream(transformedStream);
815
+ })()
816
+ .catch(async error => {
817
+ await telemetryDispatcher.onError?.({ callId, error });
818
+
819
+ stitchableStream.addStream(
820
+ new ReadableStream({
821
+ start(controller) {
822
+ controller.enqueue({ type: 'error', error });
823
+ controller.close();
824
+ },
825
+ }),
826
+ );
827
+ })
828
+ .finally(() => {
829
+ stitchableStream.close();
830
+ });
831
+
832
+ this.outputStrategy = outputStrategy;
833
+ }
834
+
835
+ get object() {
836
+ return this._object.promise;
837
+ }
838
+
839
+ get usage() {
840
+ return this._usage.promise;
841
+ }
842
+
843
+ get providerMetadata() {
844
+ return this._providerMetadata.promise;
845
+ }
846
+
847
+ get warnings() {
848
+ return this._warnings.promise;
849
+ }
850
+
851
+ get request() {
852
+ return this._request.promise;
853
+ }
854
+
855
+ get response() {
856
+ return this._response.promise;
857
+ }
858
+
859
+ get finishReason() {
860
+ return this._finishReason.promise;
861
+ }
862
+
863
+ get partialObjectStream(): AsyncIterableStream<PARTIAL> {
864
+ return createAsyncIterableStream(
865
+ this.baseStream.pipeThrough(
866
+ new TransformStream<ObjectStreamPart<PARTIAL>, PARTIAL>({
867
+ transform(chunk, controller) {
868
+ switch (chunk.type) {
869
+ case 'object':
870
+ controller.enqueue(chunk.object);
871
+ break;
872
+
873
+ case 'text-delta':
874
+ case 'finish':
875
+ case 'error': // suppress error (use onError instead)
876
+ break;
877
+
878
+ default: {
879
+ const _exhaustiveCheck: never = chunk;
880
+ throw new Error(`Unsupported chunk type: ${_exhaustiveCheck}`);
881
+ }
882
+ }
883
+ },
884
+ }),
885
+ ),
886
+ );
887
+ }
888
+
889
+ get elementStream(): ELEMENT_STREAM {
890
+ return this.outputStrategy.createElementStream(this.baseStream);
891
+ }
892
+
893
+ get textStream(): AsyncIterableStream<string> {
894
+ return createAsyncIterableStream(
895
+ this.baseStream.pipeThrough(
896
+ new TransformStream<ObjectStreamPart<PARTIAL>, string>({
897
+ transform(chunk, controller) {
898
+ switch (chunk.type) {
899
+ case 'text-delta':
900
+ controller.enqueue(chunk.textDelta);
901
+ break;
902
+
903
+ case 'object':
904
+ case 'finish':
905
+ case 'error': // suppress error (use onError instead)
906
+ break;
907
+
908
+ default: {
909
+ const _exhaustiveCheck: never = chunk;
910
+ throw new Error(`Unsupported chunk type: ${_exhaustiveCheck}`);
911
+ }
912
+ }
913
+ },
914
+ }),
915
+ ),
916
+ );
917
+ }
918
+
919
+ get fullStream(): AsyncIterableStream<ObjectStreamPart<PARTIAL>> {
920
+ return createAsyncIterableStream(this.baseStream);
921
+ }
922
+
923
+ pipeTextStreamToResponse(response: ServerResponse, init?: ResponseInit) {
924
+ pipeTextStreamToResponse({
925
+ response,
926
+ textStream: this.textStream,
927
+ ...init,
928
+ });
929
+ }
930
+
931
+ toTextStreamResponse(init?: ResponseInit): Response {
932
+ return createTextStreamResponse({
933
+ textStream: this.textStream,
934
+ ...init,
935
+ });
936
+ }
937
+ }
938
+
939
+ export type ObjectStreamInputPart =
940
+ | string
941
+ | {
942
+ type: 'stream-start';
943
+ warnings: SharedV4Warning[];
944
+ }
945
+ | {
946
+ type: 'error';
947
+ error: unknown;
948
+ }
949
+ | {
950
+ type: 'response-metadata';
951
+ id?: string;
952
+ timestamp?: Date;
953
+ modelId?: string;
954
+ }
955
+ | {
956
+ type: 'finish';
957
+ finishReason: LanguageModelV4FinishReason;
958
+ usage: LanguageModelV4Usage;
959
+ providerMetadata?: SharedV4ProviderMetadata;
960
+ };