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.
- package/.agents/plugins/marketplace.json +20 -0
- package/.claude-plugin/marketplace.json +39 -0
- package/.claude-plugin/plugin.json +36 -0
- package/.codex/agents/README.md +9 -0
- package/.codex/agents/ashlr-explorer.md +36 -0
- package/.codex/agents/ashlr-worker.md +38 -0
- package/.codex-plugin/plugin.json +45 -0
- package/.mcp.json +14 -0
- package/LICENSE +21 -0
- package/README.md +311 -0
- package/agents/ashlr-code.md +69 -0
- package/agents/ashlr-explore.md +44 -0
- package/agents/ashlr-plan.md +54 -0
- package/bench/fixtures/notebook-large.ipynb +660 -0
- package/bench/fixtures/notebook-small.ipynb +39 -0
- package/bench/fixtures/tasklist-closed.json +62 -0
- package/bench/fixtures/tasklist-large-mixed.json +27 -0
- package/bench/fixtures/tasklist-sprint-open.json +79 -0
- package/bench/fixtures/websearch-bun-runtime.json +32 -0
- package/bench/fixtures/websearch-react-hooks-patterns.json +32 -0
- package/bench/fixtures/websearch-typescript-generics.json +38 -0
- package/bench/refs/node-sdk/.refrev +1 -0
- package/bench/refs/node-sdk/README.md +17 -0
- package/bench/refs/node-sdk/src/agent/agent.ts +163 -0
- package/bench/refs/node-sdk/src/agent/create-agent-ui-stream.ts +83 -0
- package/bench/refs/node-sdk/src/agent/tool-loop-agent.ts +238 -0
- package/bench/refs/node-sdk/src/embed/embed-many.ts +409 -0
- package/bench/refs/node-sdk/src/embed/embed-result.ts +50 -0
- package/bench/refs/node-sdk/src/embed/embed.ts +257 -0
- package/bench/refs/node-sdk/src/error/invalid-argument-error.ts +34 -0
- package/bench/refs/node-sdk/src/error/invalid-tool-input-error.ts +33 -0
- package/bench/refs/node-sdk/src/error/no-object-generated-error.ts +70 -0
- package/bench/refs/node-sdk/src/generate-image/generate-image-result.ts +42 -0
- package/bench/refs/node-sdk/src/generate-image/generate-image.ts +362 -0
- package/bench/refs/node-sdk/src/generate-object/generate-object-result.ts +67 -0
- package/bench/refs/node-sdk/src/generate-object/generate-object.ts +501 -0
- package/bench/refs/node-sdk/src/generate-object/inject-json-instruction.ts +30 -0
- package/bench/refs/node-sdk/src/generate-object/output-strategy.ts +415 -0
- package/bench/refs/node-sdk/src/generate-object/repair-text.ts +12 -0
- package/bench/refs/node-sdk/src/generate-object/stream-object.ts +960 -0
- package/bench/refs/node-sdk/src/generate-speech/generate-speech.ts +191 -0
- package/bench/refs/node-sdk/src/generate-text/generate-text.ts +1484 -0
- package/bench/refs/node-sdk/src/generate-text/stream-text.ts +2708 -0
- package/bench/refs/node-sdk/src/generate-text/tool-call.ts +59 -0
- package/bench/refs/node-sdk/src/generate-text/tool-result.ts +36 -0
- package/bench/refs/node-sdk/src/telemetry/create-telemetry-dispatcher.ts +146 -0
- package/bench/refs/node-sdk/src/telemetry/telemetry-registry.ts +15 -0
- package/bench/refs/node-sdk/src/telemetry/telemetry.ts +223 -0
- package/bench/refs/node-sdk/src/util/async-iterable-stream.ts +94 -0
- package/bench/refs/node-sdk/src/util/consume-stream.ts +31 -0
- package/bench/refs/node-sdk/src/util/create-stitchable-stream.ts +112 -0
- package/bench/refs/node-sdk/src/util/download/download.ts +74 -0
- package/bench/refs/node-sdk/src/util/error-handler.ts +1 -0
- package/bench/refs/node-sdk/src/util/fix-json.ts +401 -0
- package/bench/refs/node-sdk/src/util/merge-objects.ts +79 -0
- package/bench/refs/python-lib/.refrev +1 -0
- package/bench/refs/python-lib/README.md +18 -0
- package/bench/refs/python-lib/pandas/core/_numba/executor.py +249 -0
- package/bench/refs/python-lib/pandas/core/_numba/extensions.py +586 -0
- package/bench/refs/python-lib/pandas/core/_numba/kernels/mean_.py +198 -0
- package/bench/refs/python-lib/pandas/core/_numba/kernels/min_max_.py +178 -0
- package/bench/refs/python-lib/pandas/core/_numba/kernels/sum_.py +255 -0
- package/bench/refs/python-lib/pandas/core/_numba/kernels/var_.py +251 -0
- package/bench/refs/python-lib/pandas/core/accessor.py +520 -0
- package/bench/refs/python-lib/pandas/core/api.py +138 -0
- package/bench/refs/python-lib/pandas/core/array_algos/masked_accumulations.py +97 -0
- package/bench/refs/python-lib/pandas/core/array_algos/masked_reductions.py +252 -0
- package/bench/refs/python-lib/pandas/core/array_algos/putmask.py +150 -0
- package/bench/refs/python-lib/pandas/core/array_algos/quantile.py +232 -0
- package/bench/refs/python-lib/pandas/core/array_algos/replace.py +159 -0
- package/bench/refs/python-lib/pandas/core/array_algos/take.py +609 -0
- package/bench/refs/python-lib/pandas/core/arraylike.py +534 -0
- package/bench/refs/python-lib/pandas/core/arrays/_arrow_string_mixins.py +434 -0
- package/bench/refs/python-lib/pandas/core/arrays/_mixins.py +630 -0
- package/bench/refs/python-lib/pandas/core/arrays/_ranges.py +276 -0
- package/bench/refs/python-lib/pandas/core/arrays/_utils.py +77 -0
- package/bench/refs/python-lib/pandas/core/arrays/arrow/accessors.py +521 -0
- package/bench/refs/python-lib/pandas/core/arrays/arrow/extension_types.py +174 -0
- package/bench/refs/python-lib/pandas/core/arrays/boolean.py +454 -0
- package/bench/refs/python-lib/pandas/core/arrays/floating.py +192 -0
- package/bench/refs/python-lib/pandas/core/arrays/integer.py +296 -0
- package/bench/refs/python-lib/pandas/core/arrays/masked.py +2140 -0
- package/bench/refs/python-lib/pandas/core/arrays/numeric.py +305 -0
- package/bench/refs/python-lib/pandas/core/arrays/numpy_.py +701 -0
- package/bench/refs/python-lib/pandas/core/arrays/period.py +1586 -0
- package/bench/refs/python-lib/pandas/core/arrays/sparse/accessor.py +505 -0
- package/bench/refs/python-lib/pandas/core/arrays/sparse/scipy_sparse.py +208 -0
- package/bench/refs/rust-project/.refrev +1 -0
- package/bench/refs/rust-project/README.md +17 -0
- package/bench/refs/rust-project/tokio/src/doc/os.rs +68 -0
- package/bench/refs/rust-project/tokio/src/fs/dir_builder.rs +129 -0
- package/bench/refs/rust-project/tokio/src/fs/file.rs +1113 -0
- package/bench/refs/rust-project/tokio/src/fs/mocks.rs +176 -0
- package/bench/refs/rust-project/tokio/src/fs/mod.rs +324 -0
- package/bench/refs/rust-project/tokio/src/fs/open_options.rs +856 -0
- package/bench/refs/rust-project/tokio/src/fs/read.rs +80 -0
- package/bench/refs/rust-project/tokio/src/fs/read_dir.rs +357 -0
- package/bench/refs/rust-project/tokio/src/fs/write.rs +99 -0
- package/bench/refs/rust-project/tokio/src/future/maybe_done.rs +123 -0
- package/bench/refs/rust-project/tokio/src/future/try_join.rs +82 -0
- package/bench/refs/rust-project/tokio/src/io/async_buf_read.rs +117 -0
- package/bench/refs/rust-project/tokio/src/io/async_read.rs +133 -0
- package/bench/refs/rust-project/tokio/src/io/async_seek.rs +96 -0
- package/bench/refs/rust-project/tokio/src/io/async_write.rs +402 -0
- package/bench/refs/rust-project/tokio/src/io/blocking.rs +339 -0
- package/bench/refs/rust-project/tokio/src/io/interest.rs +345 -0
- package/bench/refs/rust-project/tokio/src/io/join.rs +130 -0
- package/bench/refs/rust-project/tokio/src/io/mod.rs +308 -0
- package/bench/refs/rust-project/tokio/src/io/poll_evented.rs +319 -0
- package/bench/refs/rust-project/tokio/src/io/read_buf.rs +344 -0
- package/bench/refs/rust-project/tokio/src/io/ready.rs +322 -0
- package/bench/refs/rust-project/tokio/src/io/split.rs +166 -0
- package/bench/refs/rust-project/tokio/src/io/stderr.rs +148 -0
- package/bench/refs/rust-project/tokio/src/io/stdin.rs +98 -0
- package/bench/refs/rust-project/tokio/src/io/stdio_common.rs +222 -0
- package/bench/refs/rust-project/tokio/src/io/stdout.rs +197 -0
- package/bench/refs/rust-project/tokio/src/io/util/buf_reader.rs +311 -0
- package/bench/refs/rust-project/tokio/src/io/util/buf_stream.rs +207 -0
- package/bench/refs/rust-project/tokio/src/io/util/buf_writer.rs +310 -0
- package/bench/refs/rust-project/tokio/src/io/util/chain.rs +144 -0
- package/commands/_spawn-patterns.json +32 -0
- package/commands/ashlr-allow.md +21 -0
- package/commands/ashlr-benchmark.md +53 -0
- package/commands/ashlr-brief.md +97 -0
- package/commands/ashlr-budget.md +76 -0
- package/commands/ashlr-compact.md +54 -0
- package/commands/ashlr-dashboard.md +37 -0
- package/commands/ashlr-doctor.md +56 -0
- package/commands/ashlr-eco-mode.md +92 -0
- package/commands/ashlr-genome-init.md +24 -0
- package/commands/ashlr-genome-keygen.md +36 -0
- package/commands/ashlr-genome-loop.md +118 -0
- package/commands/ashlr-genome-push.md +36 -0
- package/commands/ashlr-genome-rewrap.md +48 -0
- package/commands/ashlr-genome-team-init.md +67 -0
- package/commands/ashlr-handoff.md +23 -0
- package/commands/ashlr-help.md +86 -0
- package/commands/ashlr-hook-timings.md +30 -0
- package/commands/ashlr-leaderboard.md +50 -0
- package/commands/ashlr-ollama-setup.md +39 -0
- package/commands/ashlr-orchestrate-status.md +72 -0
- package/commands/ashlr-orchestrate.md +83 -0
- package/commands/ashlr-parallelize.md +63 -0
- package/commands/ashlr-report-crash.md +33 -0
- package/commands/ashlr-resume.md +72 -0
- package/commands/ashlr-savings.md +24 -0
- package/commands/ashlr-settings.md +50 -0
- package/commands/ashlr-spawn.md +61 -0
- package/commands/ashlr-start.md +60 -0
- package/commands/ashlr-status.md +64 -0
- package/commands/ashlr-team-invite.md +47 -0
- package/commands/ashlr-tier.md +122 -0
- package/commands/ashlr-tour.md +60 -0
- package/commands/ashlr-update.md +155 -0
- package/commands/ashlr-upgrade.md +96 -0
- package/commands/goal.md +58 -0
- package/commands/loop.md +40 -0
- package/docs/CNAME +1 -0
- package/docs/PRO_TIER.md +104 -0
- package/docs/README.md +21 -0
- package/docs/architecture.md +415 -0
- package/docs/ashlr-pipe.md +161 -0
- package/docs/assets/logo.svg +19 -0
- package/docs/assets/og.png +0 -0
- package/docs/assets/og.svg +41 -0
- package/docs/benchmarks-v2.json +355 -0
- package/docs/benchmarks.json +102 -0
- package/docs/benchmarks.md +211 -0
- package/docs/billing.md +185 -0
- package/docs/cloud-genome.md +155 -0
- package/docs/competitive-wozcode.md +92 -0
- package/docs/deploy.md +325 -0
- package/docs/email-templates.md +113 -0
- package/docs/embed-tuning.md +103 -0
- package/docs/genome.md +120 -0
- package/docs/github-oauth-onboarding.md +127 -0
- package/docs/hero-video-script.md +129 -0
- package/docs/index.html +2262 -0
- package/docs/install-prompt.md +78 -0
- package/docs/install-windows.md +132 -0
- package/docs/install.ps1 +171 -0
- package/docs/install.sh +146 -0
- package/docs/launch/README.md +114 -0
- package/docs/launch/hn.md +49 -0
- package/docs/launch/reddit.md +45 -0
- package/docs/launch/x.md +65 -0
- package/docs/launch-post.md +112 -0
- package/docs/legal.md +78 -0
- package/docs/llm-providers.md +99 -0
- package/docs/multi-host-mcp.md +217 -0
- package/docs/multi-turn-architecture.md +108 -0
- package/docs/operations/deployment.md +108 -0
- package/docs/operations/error-monitoring.md +70 -0
- package/docs/operations/weekly-digest.md +70 -0
- package/docs/operations.md +494 -0
- package/docs/platform-support.md +133 -0
- package/docs/policy-packs.md +188 -0
- package/docs/press-kit/fact-sheet.md +78 -0
- package/docs/press-kit/founder-bio.md +3 -0
- package/docs/press-kit/logo.svg +33 -0
- package/docs/press-kit/screenshots.md +146 -0
- package/docs/pricing.md +251 -0
- package/docs/pro-backend-architecture.md +523 -0
- package/docs/producthunt.md +52 -0
- package/docs/router-migration.md +110 -0
- package/docs/session-log-schema.md +68 -0
- package/docs/social.md +95 -0
- package/docs/team-genome.md +528 -0
- package/docs/telemetry.md +194 -0
- package/docs/test-isolation.md +100 -0
- package/docs/upgrade.md +159 -0
- package/hooks/_hook-errors.ts +87 -0
- package/hooks/_hook-perf-emit.ts +113 -0
- package/hooks/_hook-timing-ledger.ts +1133 -0
- package/hooks/_nudge-throttle.ts +127 -0
- package/hooks/_recent-blocks.ts +127 -0
- package/hooks/audit-upload.ts +86 -0
- package/hooks/codex-hooks.json +171 -0
- package/hooks/commit-attribution.ts +179 -0
- package/hooks/edit-batching-nudge.ts +154 -0
- package/hooks/genome-scribe-hook.ts +219 -0
- package/hooks/hooks.json +294 -0
- package/hooks/orient-nudge-hook.ts +242 -0
- package/hooks/policy-enforce.ts +214 -0
- package/hooks/post-tool-use-embedding.ts +93 -0
- package/hooks/post-tool-use-genome.sh +37 -0
- package/hooks/post-tool-use-genome.ts +69 -0
- package/hooks/posttooluse-correlate.ts +122 -0
- package/hooks/posttooluse-dedupe-output.ts +241 -0
- package/hooks/posttooluse-genome-refresh.ts +223 -0
- package/hooks/posttooluse-native-nudge.ts +205 -0
- package/hooks/posttooluse-stale-result.ts +277 -0
- package/hooks/pretooluse-bash.ts +63 -0
- package/hooks/pretooluse-budget-guard.ts +318 -0
- package/hooks/pretooluse-common.ts +985 -0
- package/hooks/pretooluse-eco-router.ts +196 -0
- package/hooks/pretooluse-edit.sh +93 -0
- package/hooks/pretooluse-edit.ts +197 -0
- package/hooks/pretooluse-glob.ts +70 -0
- package/hooks/pretooluse-grep.sh +85 -0
- package/hooks/pretooluse-grep.ts +96 -0
- package/hooks/pretooluse-notebookedit.ts +121 -0
- package/hooks/pretooluse-read.sh +118 -0
- package/hooks/pretooluse-read.ts +118 -0
- package/hooks/pretooluse-task.ts +130 -0
- package/hooks/pretooluse-webfetch.ts +66 -0
- package/hooks/pretooluse-websearch.ts +85 -0
- package/hooks/pretooluse-write.ts +128 -0
- package/hooks/pulse-emit.ts +197 -0
- package/hooks/session-end-consolidate.sh +35 -0
- package/hooks/session-end-consolidate.ts +188 -0
- package/hooks/session-end-stats-gc.ts +80 -0
- package/hooks/session-log-append.sh +94 -0
- package/hooks/session-log-append.ts +116 -0
- package/hooks/session-start.ts +993 -0
- package/hooks/sessionend-hook-health-nudge.ts +451 -0
- package/hooks/sessionend-savings-nudge.ts +318 -0
- package/hooks/sessionend-status-line-nudge.ts +296 -0
- package/hooks/sessionstart-brief.ts +140 -0
- package/hooks/sessionstart-cost-refactor.ts +95 -0
- package/hooks/sessionstart-efficient.ts +110 -0
- package/hooks/sessionstart-genome-author.ts +93 -0
- package/hooks/sessionstart-lean-tools.ts +98 -0
- package/hooks/sessionstart-search.ts +97 -0
- package/hooks/stop-accounting.ts +152 -0
- package/hooks/subagent-stop-rollup.ts +162 -0
- package/hooks/userpromptsubmit-brief-trigger.ts +156 -0
- package/package.json +56 -0
- package/ports/README.md +108 -0
- package/ports/cursor/mcp.json +11 -0
- package/ports/goose/recipe.yaml +26 -0
- package/scripts/ashlr-mcp.ts +40 -0
- package/scripts/auto-update.ts +177 -0
- package/scripts/baseline-scan.ts +831 -0
- package/scripts/bench-orchestrate.ts +377 -0
- package/scripts/benchmark-refs.ts +292 -0
- package/scripts/bootstrap.mjs +100 -0
- package/scripts/brief-eval.ts +234 -0
- package/scripts/bump-version.ts +82 -0
- package/scripts/bun-resolve.d.mts +11 -0
- package/scripts/bun-resolve.mjs +59 -0
- package/scripts/calibrate-grep.ts +467 -0
- package/scripts/capture-grep-workload.ts +260 -0
- package/scripts/check-tier.ts +61 -0
- package/scripts/check-version-sync.ts +97 -0
- package/scripts/cli-orchestrate-status.ts +386 -0
- package/scripts/cli-orchestrate.ts +303 -0
- package/scripts/cli.ts +478 -0
- package/scripts/cloud-smoke-test.ts +313 -0
- package/scripts/coach-report.ts +373 -0
- package/scripts/context-db-migrate.ts +137 -0
- package/scripts/context-status.ts +43 -0
- package/scripts/demo-run.ts +255 -0
- package/scripts/deploy-smoke.sh +140 -0
- package/scripts/doctor.ts +992 -0
- package/scripts/embed-file-worker.ts +104 -0
- package/scripts/embed-tune.ts +308 -0
- package/scripts/errors-report.ts +428 -0
- package/scripts/find-test-leak.ts +69 -0
- package/scripts/generate-badge.ts +357 -0
- package/scripts/genome-auto-consolidate.ts +533 -0
- package/scripts/genome-auto-propose.ts +578 -0
- package/scripts/genome-cloud-pull.ts +363 -0
- package/scripts/genome-cloud-push.ts +382 -0
- package/scripts/genome-cloud-sync.ts +587 -0
- package/scripts/genome-commit-watcher.ts +295 -0
- package/scripts/genome-init.ts +986 -0
- package/scripts/genome-key.ts +233 -0
- package/scripts/genome-keygen.ts +168 -0
- package/scripts/genome-link.ts +59 -0
- package/scripts/genome-refresh-worker.ts +364 -0
- package/scripts/genome-rewrap.ts +90 -0
- package/scripts/genome-synthesizer.ts +679 -0
- package/scripts/genome-team-init.ts +312 -0
- package/scripts/handoff-pack.ts +438 -0
- package/scripts/hook-bootstrap.mjs +75 -0
- package/scripts/hook-timing-reader.ts +371 -0
- package/scripts/hook-timings-report.ts +554 -0
- package/scripts/install-genome-hooks.ts +196 -0
- package/scripts/install-onnx-model.ts +154 -0
- package/scripts/install-permissions.ts +276 -0
- package/scripts/install-status-line.ts +150 -0
- package/scripts/mcp-entrypoint.sh +78 -0
- package/scripts/mcp-entrypoint.ts +130 -0
- package/scripts/mdx-angle-bracket-lint.ts +152 -0
- package/scripts/measure-cold-start.ts +126 -0
- package/scripts/migrate-stats-to-sqlite.ts +86 -0
- package/scripts/ollama-setup.ts +498 -0
- package/scripts/onboarding-wizard.ts +1691 -0
- package/scripts/orchestrate-emit-telemetry.ts +177 -0
- package/scripts/orchestrate-expand.ts +517 -0
- package/scripts/orchestrate-run.ts +744 -0
- package/scripts/print-legend.ts +50 -0
- package/scripts/product-metadata.ts +38 -0
- package/scripts/prune-old-memories.ts +208 -0
- package/scripts/publish.sh +88 -0
- package/scripts/read-calibration.ts +122 -0
- package/scripts/report-crash.ts +226 -0
- package/scripts/run-benchmark.ts +750 -0
- package/scripts/run-root-tests.ts +28 -0
- package/scripts/savings-dashboard.ts +1258 -0
- package/scripts/savings-report-extras.ts +447 -0
- package/scripts/savings-status-line.ts +873 -0
- package/scripts/session-event-emit.ts +266 -0
- package/scripts/session-greet.ts +686 -0
- package/scripts/session-log-report.ts +551 -0
- package/scripts/session-resume.ts +614 -0
- package/scripts/set-hook-mode.ts +83 -0
- package/scripts/smoke-cross-platform.ts +117 -0
- package/scripts/smoke-realtime.ts +257 -0
- package/scripts/smoke-tools.ts +21 -0
- package/scripts/stats-cloud-pull.ts +213 -0
- package/scripts/stats-cloud-sync.ts +261 -0
- package/scripts/telemetry-flush.ts +160 -0
- package/scripts/telemetry-status.ts +266 -0
- package/scripts/timing-budget.ts +35 -0
- package/scripts/ui-animation.ts +120 -0
- package/scripts/ui.ts +431 -0
- package/scripts/upgrade-flow.ts +775 -0
- package/scripts/weekly-digest.ts +394 -0
- package/servers/_accounting.ts +78 -0
- package/servers/_ask-router.ts +84 -0
- package/servers/_ast-chunker.ts +434 -0
- package/servers/_ast-helpers.ts +183 -0
- package/servers/_ast-languages.ts +153 -0
- package/servers/_ast-refactor/_shared.ts +221 -0
- package/servers/_ast-refactor/cross-file-rename.ts +560 -0
- package/servers/_ast-refactor/extract-function.ts +357 -0
- package/servers/_ast-refactor/file-local-rename.ts +172 -0
- package/servers/_ast-refactor.ts +41 -0
- package/servers/_ast-skeleton.ts +107 -0
- package/servers/_bash-summarizers-registry.ts +1096 -0
- package/servers/_crash-dump.ts +210 -0
- package/servers/_cwd-clamp.ts +342 -0
- package/servers/_edit-log.ts +28 -0
- package/servers/_edit-match.ts +236 -0
- package/servers/_edit-validate.ts +196 -0
- package/servers/_embed-calibration.ts +123 -0
- package/servers/_embedding-cache.ts +401 -0
- package/servers/_embedding-model.ts +329 -0
- package/servers/_events.ts +113 -0
- package/servers/_genome-cache.ts +154 -0
- package/servers/_genome-commits.ts +172 -0
- package/servers/_genome-crypto-v2.ts +242 -0
- package/servers/_genome-crypto.ts +259 -0
- package/servers/_genome-discoveries.ts +140 -0
- package/servers/_genome-embed-populator.ts +216 -0
- package/servers/_genome-freshness.ts +134 -0
- package/servers/_genome-issues.ts +171 -0
- package/servers/_genome-live.ts +263 -0
- package/servers/_genome-prs.ts +188 -0
- package/servers/_genome-search.ts +479 -0
- package/servers/_genome-sync.ts +297 -0
- package/servers/_history-tracker.ts +279 -0
- package/servers/_http-helpers.ts +151 -0
- package/servers/_identity-hash.ts +151 -0
- package/servers/_llm-providers/anthropic.ts +132 -0
- package/servers/_llm-providers/cloud.ts +195 -0
- package/servers/_llm-providers/index.ts +350 -0
- package/servers/_llm-providers/local.ts +127 -0
- package/servers/_llm-providers/onnx.ts +393 -0
- package/servers/_llm-providers/types.ts +27 -0
- package/servers/_manifest-v2.ts +447 -0
- package/servers/_mcp-host.ts +93 -0
- package/servers/_nudge-events.ts +451 -0
- package/servers/_orchestrate-executor.ts +316 -0
- package/servers/_prefetch.ts +435 -0
- package/servers/_pricing.ts +256 -0
- package/servers/_pro.ts +381 -0
- package/servers/_read-cache.ts +44 -0
- package/servers/_router-handlers.ts +46 -0
- package/servers/_router.ts +55 -0
- package/servers/_run-with-timeout.ts +173 -0
- package/servers/_savings-render.ts +214 -0
- package/servers/_stats-sqlite.ts +640 -0
- package/servers/_stats.ts +1183 -0
- package/servers/_status-line-cells.ts +469 -0
- package/servers/_streaks.ts +162 -0
- package/servers/_summarize.ts +208 -0
- package/servers/_task-graph-render.ts +217 -0
- package/servers/_task-graph.ts +545 -0
- package/servers/_telemetry.ts +719 -0
- package/servers/_test-parsers.ts +530 -0
- package/servers/_test-watch.ts +626 -0
- package/servers/_text-helpers.ts +37 -0
- package/servers/_token-measure.ts +160 -0
- package/servers/_tool-base.ts +248 -0
- package/servers/_weekly-digest.ts +391 -0
- package/servers/ask-server-handlers.ts +49 -0
- package/servers/ask-server.ts +174 -0
- package/servers/bash-server-handlers.ts +138 -0
- package/servers/bash-server.ts +1136 -0
- package/servers/bench.ts +186 -0
- package/servers/diff-semantic-server-handlers.ts +39 -0
- package/servers/diff-semantic-server.ts +566 -0
- package/servers/diff-server-handlers.ts +317 -0
- package/servers/diff-server.ts +20 -0
- package/servers/edit-server-handlers.ts +31 -0
- package/servers/edit-server.ts +209 -0
- package/servers/edit-structural-server-handlers.ts +322 -0
- package/servers/efficiency-server-handlers.ts +161 -0
- package/servers/efficiency-server.ts +1135 -0
- package/servers/flush-server-handlers.ts +21 -0
- package/servers/flush-server.ts +19 -0
- package/servers/genome-server-handlers.ts +118 -0
- package/servers/genome-server.ts +397 -0
- package/servers/github-server-handlers.ts +187 -0
- package/servers/github-server.ts +856 -0
- package/servers/glob-server-handlers.ts +233 -0
- package/servers/glob-server.ts +20 -0
- package/servers/grep-server-handlers.ts +61 -0
- package/servers/grep-server.ts +564 -0
- package/servers/http-server-handlers.ts +36 -0
- package/servers/http-server.ts +149 -0
- package/servers/logs-server-handlers.ts +42 -0
- package/servers/logs-server.ts +359 -0
- package/servers/ls-server-handlers.ts +166 -0
- package/servers/ls-server.ts +20 -0
- package/servers/multi-edit-server-handlers.ts +51 -0
- package/servers/multi-edit-server.ts +422 -0
- package/servers/notebook-edit-server-handlers.ts +34 -0
- package/servers/notebook-edit-server.ts +181 -0
- package/servers/orient-server-handlers.ts +52 -0
- package/servers/orient-server.ts +436 -0
- package/servers/pipe-server-handlers.ts +68 -0
- package/servers/pipe-server.ts +300 -0
- package/servers/read-server-handlers.ts +42 -0
- package/servers/read-server.ts +206 -0
- package/servers/rename-file-server-handlers.ts +67 -0
- package/servers/rename-file-server.ts +699 -0
- package/servers/savings-server-handlers.ts +27 -0
- package/servers/savings-server.ts +54 -0
- package/servers/search-replace-regex-server-handlers.ts +96 -0
- package/servers/search-replace-regex-server.ts +751 -0
- package/servers/sql-server-handlers.ts +58 -0
- package/servers/sql-server.ts +505 -0
- package/servers/task-server-handlers.ts +358 -0
- package/servers/task-server.ts +24 -0
- package/servers/test-server-handlers.ts +351 -0
- package/servers/test-server.ts +20 -0
- package/servers/tree-server-handlers.ts +503 -0
- package/servers/tree-server.ts +20 -0
- package/servers/webfetch-server-handlers.ts +166 -0
- package/servers/webfetch-server.ts +20 -0
- package/servers/websearch-server-handlers.ts +215 -0
- package/servers/websearch-server.ts +19 -0
- package/servers/write-server-handlers.ts +27 -0
- package/servers/write-server.ts +97 -0
- package/skills/ashlr-brief/SKILL.md +80 -0
- package/skills/ashlr-codex-doctor/SKILL.md +21 -0
- package/skills/ashlr-codex-efficient-tools/SKILL.md +17 -0
- package/skills/ashlr-codex-genome-refresh/SKILL.md +20 -0
- package/skills/ashlr-codex-parallel-explore/SKILL.md +20 -0
- package/skills/ashlr-codex-savings/SKILL.md +17 -0
- package/skills/ashlr-cost-refactor/SKILL.md +50 -0
- package/skills/ashlr-efficient/SKILL.md +64 -0
- package/skills/ashlr-genome-author/SKILL.md +43 -0
- package/skills/ashlr-lean-tools/SKILL.md +43 -0
- 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
|
+
}
|