experimental-ash 0.26.0 → 0.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/dist/docs/public/channels/README.md +50 -2
- package/dist/docs/public/channels/discord.md +15 -7
- package/dist/docs/public/channels/teams.md +121 -0
- package/dist/docs/public/channels/telegram.md +201 -0
- package/dist/docs/public/subagents.md +38 -0
- package/dist/docs/public/typescript-api.md +41 -1
- package/dist/src/_virtual/_rolldown/runtime.js +1 -0
- package/dist/src/channel/adapter-context.js +1 -24
- package/dist/src/channel/adapter.js +1 -62
- package/dist/src/channel/compiled-channel.js +1 -6
- package/dist/src/channel/cross-channel-receive.js +2 -108
- package/dist/src/channel/http.js +1 -30
- package/dist/src/channel/receive-args.js +1 -1
- package/dist/src/channel/resolve-text.js +1 -59
- package/dist/src/channel/routes.js +1 -15
- package/dist/src/channel/schedule.js +1 -81
- package/dist/src/channel/send.js +1 -81
- package/dist/src/channel/session-callback.js +1 -65
- package/dist/src/channel/session.js +1 -58
- package/dist/src/channel/types.js +1 -1
- package/dist/src/cli/commands/channels.js +3 -9
- package/dist/src/cli/commands/info.js +2 -2
- package/dist/src/cli/dev/environment.js +1 -1
- package/dist/src/cli/dev/input-requests.js +1 -1
- package/dist/src/cli/dev/input.js +1 -1
- package/dist/src/cli/dev/repl.js +2 -3
- package/dist/src/cli/dev/terminal.js +5 -5
- package/dist/src/cli/dev/url.js +1 -1
- package/dist/src/cli/run.js +2 -2
- package/dist/src/cli/ui/output.js +8 -8
- package/dist/src/client/client-error.js +1 -19
- package/dist/src/client/client.js +1 -128
- package/dist/src/client/index.js +1 -11
- package/dist/src/client/message-reducer-types.js +1 -1
- package/dist/src/client/message-reducer.js +1 -456
- package/dist/src/client/message-response.js +1 -55
- package/dist/src/client/ndjson.js +3 -62
- package/dist/src/client/open-stream.js +1 -45
- package/dist/src/client/reducer.js +1 -1
- package/dist/src/client/session-utils.js +1 -62
- package/dist/src/client/session.js +1 -206
- package/dist/src/client/types.js +1 -1
- package/dist/src/client/url.js +1 -34
- package/dist/src/compiled/.vendor-stamp.json +6 -1
- package/dist/src/compiled/@vercel/oidc/LICENSE +202 -0
- package/dist/src/compiled/@vercel/oidc/index.d.ts +21 -0
- package/dist/src/compiled/@vercel/oidc/index.js +2 -0
- package/dist/src/compiled/@vercel/oidc/package.json +7 -0
- package/dist/src/compiled/chokidar/LICENSE +21 -0
- package/dist/src/compiled/chokidar/index.d.ts +33 -0
- package/dist/src/compiled/chokidar/index.js +1 -0
- package/dist/src/compiled/chokidar/package.json +7 -0
- package/dist/src/compiled/commander/LICENSE +22 -0
- package/dist/src/compiled/commander/index.d.ts +1113 -0
- package/dist/src/{chunks/url-JdCGA634.js → compiled/commander/index.js} +10 -10
- package/dist/src/compiled/commander/package.json +7 -0
- package/dist/src/compiled/gray-matter/LICENSE +21 -0
- package/dist/src/compiled/gray-matter/index.d.ts +62 -0
- package/dist/src/{chunks/gray-matter-D-9jHwOT.js → compiled/gray-matter/index.js} +2 -2
- package/dist/src/compiled/gray-matter/package.json +7 -0
- package/dist/src/compiled/picocolors/LICENSE +15 -0
- package/dist/src/compiled/picocolors/index.d.ts +55 -0
- package/dist/src/compiled/picocolors/index.js +1 -0
- package/dist/src/compiled/picocolors/package.json +7 -0
- package/dist/src/compiler/artifacts.js +1 -147
- package/dist/src/compiler/compile-agent.js +3 -76
- package/dist/src/compiler/compile-from-memory.js +1 -59
- package/dist/src/compiler/manifest.js +1 -424
- package/dist/src/compiler/model-catalog.js +1 -224
- package/dist/src/compiler/module-map.js +5 -295
- package/dist/src/compiler/normalize-agent-config.js +1 -157
- package/dist/src/compiler/normalize-channel.js +1 -51
- package/dist/src/compiler/normalize-connection.js +1 -58
- package/dist/src/compiler/normalize-helpers.js +1 -23
- package/dist/src/compiler/normalize-hook.js +1 -19
- package/dist/src/compiler/normalize-instructions.js +1 -28
- package/dist/src/compiler/normalize-manifest.js +1 -79
- package/dist/src/compiler/normalize-sandbox.js +1 -20
- package/dist/src/compiler/normalize-schedule.js +1 -38
- package/dist/src/compiler/normalize-skill.js +1 -60
- package/dist/src/compiler/normalize-subagent.js +1 -174
- package/dist/src/compiler/normalize-tool.js +1 -40
- package/dist/src/compiler/remote-agent-node.js +1 -19
- package/dist/src/compiler/workspace-resources.js +1 -85
- package/dist/src/context/accessors.js +1 -93
- package/dist/src/context/container.js +1 -89
- package/dist/src/context/hook-lifecycle.js +1 -242
- package/dist/src/context/key.js +1 -39
- package/dist/src/context/keys.js +1 -43
- package/dist/src/context/node.js +1 -9
- package/dist/src/context/provider.js +1 -1
- package/dist/src/context/providers/connection.js +1 -17
- package/dist/src/context/providers/sandbox.js +1 -46
- package/dist/src/context/providers/session.js +1 -18
- package/dist/src/context/run-step.js +1 -51
- package/dist/src/context/seed-keys.js +1 -37
- package/dist/src/context/serialize.js +1 -44
- package/dist/src/discover/connections.js +1 -153
- package/dist/src/discover/diagnostics.js +1 -82
- package/dist/src/discover/discover-agent.js +1 -159
- package/dist/src/discover/discover-subagent.js +1 -223
- package/dist/src/discover/filesystem.js +1 -215
- package/dist/src/discover/grammar.js +1 -371
- package/dist/src/discover/lib.js +1 -34
- package/dist/src/discover/manifest.js +1 -136
- package/dist/src/discover/markdown.js +1 -17
- package/dist/src/discover/named-source-directory.js +1 -188
- package/dist/src/discover/project-source.js +1 -152
- package/dist/src/discover/project.js +1 -117
- package/dist/src/discover/sandbox.js +1 -220
- package/dist/src/discover/schedules.js +1 -41
- package/dist/src/discover/skills.js +1 -274
- package/dist/src/discover/slots.js +1 -68
- package/dist/src/evals/cli/eval.js +1 -1
- package/dist/src/evals/define-eval-suite.js +1 -1
- package/dist/src/evals/index.js +1 -1
- package/dist/src/evals/loaders/index.js +1 -1
- package/dist/src/evals/loaders/json.js +1 -1
- package/dist/src/evals/loaders/yaml.js +1 -1
- package/dist/src/evals/reporters/index.js +1 -1
- package/dist/src/evals/runner/artifacts.js +3 -3
- package/dist/src/evals/runner/derive-run-facts.js +1 -1
- package/dist/src/evals/runner/discover.js +1 -1
- package/dist/src/evals/runner/execute-case.js +1 -1
- package/dist/src/evals/runner/execute-suite.js +1 -1
- package/dist/src/evals/runner/reporters/braintrust.js +2 -2
- package/dist/src/evals/runner/reporters/console.js +1 -1
- package/dist/src/evals/runner/resolve-git-metadata.js +1 -1
- package/dist/src/evals/scorers/autoevals-client.js +2 -2
- package/dist/src/evals/scorers/autoevals.js +1 -1
- package/dist/src/evals/scorers/json.js +1 -1
- package/dist/src/evals/scorers/run.js +1 -1
- package/dist/src/evals/scorers/sql.js +1 -1
- package/dist/src/evals/scorers/text.js +1 -1
- package/dist/src/evals/scores/index.js +1 -1
- package/dist/src/execution/authorization-challenge-defaults.js +1 -60
- package/dist/src/execution/await-authorization-orchestrator.js +1 -192
- package/dist/src/execution/await-authorization-splice.js +1 -66
- package/dist/src/execution/connection-auth-steps.js +1 -338
- package/dist/src/execution/node-step.js +1 -146
- package/dist/src/execution/remote-agent-dispatch.js +1 -79
- package/dist/src/execution/runtime-context.js +1 -26
- package/dist/src/execution/runtime-errors.js +1 -19
- package/dist/src/execution/sandbox/bash-tool.js +1 -42
- package/dist/src/execution/sandbox/bindings/local.js +1 -296
- package/dist/src/execution/sandbox/bindings/vercel.js +1 -363
- package/dist/src/execution/sandbox/ensure.js +1 -91
- package/dist/src/execution/sandbox/glob-tool.js +3 -146
- package/dist/src/execution/sandbox/grep-tool.js +3 -183
- package/dist/src/execution/sandbox/lazy-backend.js +1 -33
- package/dist/src/execution/sandbox/prewarm.js +1 -132
- package/dist/src/execution/sandbox/read-file-tool.js +3 -118
- package/dist/src/execution/sandbox/require-sandbox.js +1 -32
- package/dist/src/execution/sandbox/ripgrep-probe.js +1 -36
- package/dist/src/execution/sandbox/session.js +3 -158
- package/dist/src/execution/sandbox/shell-quote.js +1 -14
- package/dist/src/execution/sandbox/stream-utils.js +1 -22
- package/dist/src/execution/sandbox/truncate-output.js +3 -110
- package/dist/src/execution/sandbox/write-file-tool.js +1 -62
- package/dist/src/execution/session-callback-step.js +1 -72
- package/dist/src/execution/session.js +3 -94
- package/dist/src/execution/skills/instructions.js +2 -30
- package/dist/src/execution/skills/types.js +1 -1
- package/dist/src/execution/subagent-adapter.js +1 -94
- package/dist/src/execution/subagent-hitl-proxy.js +1 -81
- package/dist/src/execution/subagent-invocation.js +2 -16
- package/dist/src/execution/subagent-tool.js +1 -48
- package/dist/src/execution/tool-compaction.js +1 -54
- package/dist/src/execution/turn-workflow.js +1 -95
- package/dist/src/execution/web-fetch/html.js +7 -60
- package/dist/src/execution/web-fetch/tool.js +1 -90
- package/dist/src/execution/workflow-entry.js +1 -494
- package/dist/src/execution/workflow-errors.js +1 -54
- package/dist/src/execution/workflow-runtime.js +3 -161
- package/dist/src/execution/workflow-steps.js +1 -467
- package/dist/src/harness/action-result-helpers.js +1 -82
- package/dist/src/harness/attachment-staging.js +1 -303
- package/dist/src/harness/compaction.js +4 -221
- package/dist/src/harness/emission.js +1 -323
- package/dist/src/harness/execute-tool.js +1 -1
- package/dist/src/harness/input-extraction.js +1 -62
- package/dist/src/harness/input-requests.js +1 -306
- package/dist/src/harness/instrumentation-config.js +1 -42
- package/dist/src/harness/messages.js +1 -144
- package/dist/src/harness/model-call-error.js +1 -368
- package/dist/src/harness/otel-integration.js +1 -18
- package/dist/src/harness/prompt-cache.js +1 -137
- package/dist/src/harness/provider-tools.js +1 -137
- package/dist/src/harness/proxy-input-requests.js +1 -91
- package/dist/src/harness/runtime-actions.js +1 -321
- package/dist/src/harness/step-hooks.js +1 -192
- package/dist/src/harness/tool-loop.js +1 -877
- package/dist/src/harness/tool-result-pruning.js +1 -124
- package/dist/src/harness/tools.js +1 -98
- package/dist/src/harness/types.js +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/internal/application/cache-metadata.js +1 -42
- package/dist/src/internal/application/compiled-artifacts.js +4 -114
- package/dist/src/internal/application/import-specifier.js +1 -58
- package/dist/src/internal/application/package.js +1 -196
- package/dist/src/internal/application/paths.js +1 -117
- package/dist/src/internal/application/runtime-compiled-artifacts-source.js +1 -11
- package/dist/src/internal/attachments/data.js +1 -127
- package/dist/src/internal/attachments/errors.js +1 -26
- package/dist/src/internal/attachments/refs.js +1 -94
- package/dist/src/internal/attachments/sandbox-refs.js +1 -78
- package/dist/src/internal/attachments/url-refs.js +1 -20
- package/dist/src/internal/authored-asset-import-plugin.js +1 -141
- package/dist/src/internal/authored-definition/channel.js +1 -21
- package/dist/src/internal/authored-definition/connection.js +1 -148
- package/dist/src/internal/authored-definition/core.js +1 -180
- package/dist/src/internal/authored-definition/sandbox.js +1 -47
- package/dist/src/internal/authored-definition/schema-backed.js +1 -56
- package/dist/src/internal/authored-module-bundle.js +2 -19
- package/dist/src/internal/authored-module-loader.js +2 -263
- package/dist/src/internal/authored-module-map-loader.js +1 -53
- package/dist/src/internal/authored-module.js +1 -81
- package/dist/src/internal/authored-package-tsconfig-paths.js +1 -209
- package/dist/src/internal/bundler/nitro-rolldown.js +1 -42
- package/dist/src/internal/helpers/markdown.js +3 -174
- package/dist/src/internal/json-schema.js +1 -13
- package/dist/src/internal/logging.js +1 -226
- package/dist/src/internal/nitro/host/artifacts-config.js +1 -17
- package/dist/src/internal/nitro/host/build-application.js +1 -177
- package/dist/src/internal/nitro/host/build-vercel-agent-summary.js +1 -140
- package/dist/src/internal/nitro/host/channel-routes.js +2 -126
- package/dist/src/internal/nitro/host/compiled-sandbox-backend-prune-plugin.js +2 -28
- package/dist/src/internal/nitro/host/configure-nitro-routes.js +4 -272
- package/dist/src/internal/nitro/host/create-application-nitro.js +1 -491
- package/dist/src/internal/nitro/host/cron-handler-route.js +1 -49
- package/dist/src/internal/nitro/host/dev-authored-source-watcher.js +1 -390
- package/dist/src/internal/nitro/host/nitro-bundler-config.js +1 -10
- package/dist/src/internal/nitro/host/nitro-routing-import-specifier-plugin.js +1 -28
- package/dist/src/internal/nitro/host/prepare-application-host.js +1 -32
- package/dist/src/internal/nitro/host/schedule-task-routes.js +2 -148
- package/dist/src/internal/nitro/host/server-external-packages.js +1 -107
- package/dist/src/internal/nitro/host/start-development-server.js +1 -223
- package/dist/src/internal/nitro/host/types.js +1 -1
- package/dist/src/internal/nitro/host/vercel-build-output-config.js +1 -14
- package/dist/src/internal/nitro/host/vercel-build-prewarm.js +1 -30
- package/dist/src/internal/nitro/host.js +1 -2
- package/dist/src/internal/nitro/routes/agent-info/build-agent-info-response.js +2 -180
- package/dist/src/internal/nitro/routes/agent-info/load-agent-info-data.js +1 -46
- package/dist/src/internal/nitro/routes/channel-dispatch.js +1 -74
- package/dist/src/internal/nitro/routes/health.js +1 -17
- package/dist/src/internal/nitro/routes/index.js +2 -89
- package/dist/src/internal/nitro/routes/info.js +1 -50
- package/dist/src/internal/nitro/routes/runtime-artifacts.js +1 -24
- package/dist/src/internal/nitro/routes/runtime-stack.js +1 -23
- package/dist/src/internal/nitro/routes/schedule-task.js +1 -57
- package/dist/src/internal/nitro/routes/workflow-data.js +1 -141
- package/dist/src/internal/nitro/routes/workflow-route-helpers.js +1 -137
- package/dist/src/internal/nitro/routes/workflow-run-events.js +1 -41
- package/dist/src/internal/nitro/routes/workflow-run-steps.js +1 -41
- package/dist/src/internal/nitro/routes/workflow-run.js +1 -34
- package/dist/src/internal/nitro/routes/workflow-runs.js +1 -28
- package/dist/src/internal/node-esm-compat-banner.js +2 -65
- package/dist/src/internal/package-name.js +1 -8
- package/dist/src/internal/process/pnpm.js +1 -50
- package/dist/src/internal/runtime-model.js +1 -24
- package/dist/src/internal/runtime-registry.js +1 -93
- package/dist/src/internal/vercel-agent-summary.js +1 -72
- package/dist/src/internal/workflow/builtins.js +1 -18
- package/dist/src/internal/workflow/index.js +1 -9
- package/dist/src/internal/workflow-bundle/ash-service-route-output.js +3 -93
- package/dist/src/internal/workflow-bundle/builder-support.js +5 -372
- package/dist/src/internal/workflow-bundle/builder.js +5 -472
- package/dist/src/internal/workflow-bundle/nitro-step-entry.js +2 -132
- package/dist/src/internal/workflow-bundle/vercel-workflow-output.js +3 -494
- package/dist/src/internal/workflow-bundle/workflow-builders.js +1 -292
- package/dist/src/internal/workflow-bundle/workflow-core-shim.js +1 -84
- package/dist/src/internal/workflow-bundle/workflow-transformer.js +5 -318
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/ajv.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/codegen/code.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/codegen/index.js +2 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/codegen/scope.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/errors.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/index.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/names.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/ref_error.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/resolve.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/rules.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/util.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/applicability.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/boolSchema.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/dataType.js +4 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/defaults.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/index.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/keyword.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/compile/validate/subschema.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/core.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/refs/data.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/refs/json-schema-draft-07.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/runtime/equal.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/runtime/ucs2length.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/runtime/uri.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/runtime/validation_error.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/allOf.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/anyOf.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/contains.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/dependencies.js +4 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/if.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/index.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/items.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/items2020.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/not.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/oneOf.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/properties.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/applicator/thenElse.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/code.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/core/id.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/core/index.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/core/ref.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/discriminator/index.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/discriminator/types.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/draft7.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/format/format.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/format/index.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/metadata.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/const.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/enum.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/index.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/limitItems.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/limitLength.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/limitNumber.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/limitProperties.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/multipleOf.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/pattern.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/required.js +1 -0
- package/dist/src/node_modules/.pnpm/ajv@8.20.0/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js +1 -0
- package/dist/src/node_modules/.pnpm/autoevals@0.0.132_ws@8.21.0/node_modules/autoevals/jsdist/index.js +384 -0
- package/dist/src/node_modules/.pnpm/compute-cosine-similarity@1.1.0/node_modules/compute-cosine-similarity/lib/index.js +1 -0
- package/dist/src/node_modules/.pnpm/compute-dot@1.1.0/node_modules/compute-dot/lib/index.js +1 -0
- package/dist/src/node_modules/.pnpm/compute-l2norm@1.1.0/node_modules/compute-l2norm/lib/index.js +1 -0
- package/dist/src/node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js +1 -0
- package/dist/src/node_modules/.pnpm/fast-uri@3.1.2/node_modules/fast-uri/index.js +1 -0
- package/dist/src/node_modules/.pnpm/fast-uri@3.1.2/node_modules/fast-uri/lib/schemes.js +1 -0
- package/dist/src/node_modules/.pnpm/fast-uri@3.1.2/node_modules/fast-uri/lib/utils.js +1 -0
- package/dist/src/node_modules/.pnpm/js-levenshtein@1.1.6/node_modules/js-levenshtein/index.js +1 -0
- package/dist/src/node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.js +32 -0
- package/dist/src/node_modules/.pnpm/json-schema-traverse@1.0.0/node_modules/json-schema-traverse/index.js +1 -0
- package/dist/src/node_modules/.pnpm/mustache@4.2.0/node_modules/mustache/mustache.js +4 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/_vendor/partial-json-parser/parser.js +2 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/auth/workload-identity-auth.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/azure.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/client.js +11 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/core/api-promise.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/core/error.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/core/pagination.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/core/resource.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/core/streaming.js +3 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/core/uploads.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/error.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/index.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/internal/decoders/line.js +3 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/internal/detect-platform.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/internal/errors.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/internal/headers.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/internal/parse.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/internal/qs/formats.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/internal/qs/stringify.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/internal/qs/utils.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/internal/request-options.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/internal/shims.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/internal/to-file.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/internal/tslib.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/internal/uploads.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/internal/utils/base64.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/internal/utils/bytes.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/internal/utils/env.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/internal/utils/log.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/internal/utils/path.js +2 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/internal/utils/query.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/internal/utils/sleep.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/internal/utils/uuid.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/internal/utils/values.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/internal/utils.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/lib/AbstractChatCompletionRunner.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/lib/AssistantStream.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/lib/ChatCompletionRunner.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/lib/ChatCompletionStream.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/lib/ChatCompletionStreamingRunner.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/lib/EventStream.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/lib/ResponsesParser.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/lib/RunnableFunction.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/lib/Util.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/lib/chatCompletionUtils.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/lib/parser.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/lib/responses/ResponseStream.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/admin/admin.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/admin/organization/admin-api-keys.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/admin/organization/audit-logs.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/admin/organization/certificates.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/admin/organization/data-retention.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/admin/organization/groups/groups.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/admin/organization/groups/roles.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/admin/organization/groups/users.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/admin/organization/invites.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/admin/organization/organization.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/admin/organization/projects/api-keys.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/admin/organization/projects/certificates.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/admin/organization/projects/data-retention.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/admin/organization/projects/groups/groups.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/admin/organization/projects/groups/roles.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/admin/organization/projects/hosted-tool-permissions.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/admin/organization/projects/model-permissions.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/admin/organization/projects/projects.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/admin/organization/projects/rate-limits.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/admin/organization/projects/roles.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/admin/organization/projects/service-accounts.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/admin/organization/projects/spend-alerts.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/admin/organization/projects/users/roles.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/admin/organization/projects/users/users.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/admin/organization/roles.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/admin/organization/spend-alerts.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/admin/organization/usage.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/admin/organization/users/roles.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/admin/organization/users/users.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/audio/audio.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/audio/speech.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/audio/transcriptions.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/audio/translations.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/batches.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/beta/assistants.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/beta/beta.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/beta/chatkit/chatkit.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/beta/chatkit/sessions.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/beta/chatkit/threads.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/beta/realtime/realtime.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/beta/realtime/sessions.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/beta/realtime/transcription-sessions.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/beta/threads/messages.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/beta/threads/runs/runs.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/beta/threads/runs/steps.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/beta/threads/threads.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/chat/chat.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/chat/completions/completions.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/chat/completions/index.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/chat/completions/messages.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/chat/index.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/completions.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/containers/containers.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/containers/files/content.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/containers/files/files.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/conversations/conversations.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/conversations/items.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/embeddings.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/evals/evals.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/evals/runs/output-items.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/evals/runs/runs.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/files.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/fine-tuning/alpha/alpha.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/fine-tuning/alpha/graders.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/fine-tuning/checkpoints/checkpoints.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/fine-tuning/checkpoints/permissions.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/fine-tuning/fine-tuning.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/fine-tuning/jobs/checkpoints.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/fine-tuning/jobs/jobs.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/fine-tuning/methods.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/graders/grader-models.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/graders/graders.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/images.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/index.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/models.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/moderations.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/realtime/calls.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/realtime/client-secrets.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/realtime/realtime.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/responses/input-items.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/responses/input-tokens.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/responses/responses.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/shared.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/skills/content.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/skills/skills.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/skills/versions/content.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/skills/versions/versions.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/uploads/parts.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/uploads/uploads.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/vector-stores/file-batches.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/vector-stores/files.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/vector-stores/vector-stores.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/videos.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/webhooks/index.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/webhooks/webhooks.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/resources/webhooks.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/streaming.js +1 -0
- package/dist/src/node_modules/.pnpm/openai@6.39.0_ws@8.21.0_zod@3.25.76/node_modules/openai/version.js +1 -0
- package/dist/src/node_modules/.pnpm/validate.io-array@1.0.6/node_modules/validate.io-array/lib/index.js +1 -0
- package/dist/src/node_modules/.pnpm/validate.io-function@1.0.2/node_modules/validate.io-function/lib/index.js +1 -0
- package/dist/src/node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/Options.js +1 -0
- package/dist/src/node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/Refs.js +1 -0
- package/dist/src/node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/errorMessages.js +1 -0
- package/dist/src/node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/getRelativePath.js +1 -0
- package/dist/src/node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/index.js +1 -0
- package/dist/src/node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parseDef.js +1 -0
- package/dist/src/node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parseTypes.js +1 -0
- package/dist/src/node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/any.js +1 -0
- package/dist/src/node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/array.js +1 -0
- package/dist/src/node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/bigint.js +1 -0
- package/dist/src/node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/boolean.js +1 -0
- package/dist/src/node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/branded.js +1 -0
- package/dist/src/node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/catch.js +1 -0
- package/dist/src/node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/date.js +1 -0
- package/dist/src/node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/default.js +1 -0
- package/dist/src/node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/effects.js +1 -0
- package/dist/src/node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/enum.js +1 -0
- package/dist/src/node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/intersection.js +1 -0
- package/dist/src/node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/literal.js +1 -0
- package/dist/src/node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/map.js +1 -0
- package/dist/src/node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/nativeEnum.js +1 -0
- package/dist/src/node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/never.js +1 -0
- package/dist/src/node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/null.js +1 -0
- package/dist/src/node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/nullable.js +1 -0
- package/dist/src/node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/number.js +1 -0
- package/dist/src/node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/object.js +1 -0
- package/dist/src/node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/optional.js +1 -0
- package/dist/src/node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/pipeline.js +1 -0
- package/dist/src/node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/promise.js +1 -0
- package/dist/src/node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/readonly.js +1 -0
- package/dist/src/node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/record.js +1 -0
- package/dist/src/node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/set.js +1 -0
- package/dist/src/node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/string.js +3 -0
- package/dist/src/node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/tuple.js +1 -0
- package/dist/src/node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/undefined.js +1 -0
- package/dist/src/node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/union.js +1 -0
- package/dist/src/node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/unknown.js +1 -0
- package/dist/src/node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/selectParser.js +1 -0
- package/dist/src/node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/zodToJsonSchema.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@3.25.76/node_modules/zod/index.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/ZodError.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/errors.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/typeAliases.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/index.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/locales/en.js +1 -0
- package/dist/src/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.js +1 -0
- package/dist/src/packages/ash-scaffold/src/channels.js +7 -0
- package/dist/src/packages/ash-scaffold/src/files.js +1 -0
- package/dist/src/packages/ash-scaffold/src/index.js +1 -0
- package/dist/src/packages/ash-scaffold/src/module-files.js +1 -0
- package/dist/src/packages/ash-scaffold/src/package-json.js +1 -0
- package/dist/src/packages/ash-scaffold/src/project.js +1 -0
- package/dist/src/protocol/message.js +2 -501
- package/dist/src/protocol/routes.js +1 -85
- package/dist/src/public/agents/auth.js +1 -37
- package/dist/src/public/channels/ash.js +2 -346
- package/dist/src/public/channels/auth.js +1 -414
- package/dist/src/public/channels/discord/api.js +2 -167
- package/dist/src/public/channels/discord/defaults.js +3 -74
- package/dist/src/public/channels/discord/discordChannel.js +1 -402
- package/dist/src/public/channels/discord/hitl.js +1 -194
- package/dist/src/public/channels/discord/inbound.js +2 -238
- package/dist/src/public/channels/discord/index.js +1 -6
- package/dist/src/public/channels/discord/responses.js +1 -40
- package/dist/src/public/channels/discord/verify.js +1 -72
- package/dist/src/public/channels/discord/verifyInbound.js +1 -19
- package/dist/src/public/channels/index.js +1 -1
- package/dist/src/public/channels/slack/api-encoding.js +1 -40
- package/dist/src/public/channels/slack/api.js +1 -333
- package/dist/src/public/channels/slack/attachments.js +1 -156
- package/dist/src/public/channels/slack/blocks.js +3 -266
- package/dist/src/public/channels/slack/connections.js +1 -70
- package/dist/src/public/channels/slack/constants.js +1 -7
- package/dist/src/public/channels/slack/defaults.js +4 -211
- package/dist/src/public/channels/slack/hitl.js +1 -242
- package/dist/src/public/channels/slack/inbound.js +2 -149
- package/dist/src/public/channels/slack/index.js +1 -13
- package/dist/src/public/channels/slack/interactions.js +1 -315
- package/dist/src/public/channels/slack/limits.js +1 -75
- package/dist/src/public/channels/slack/mrkdwn.js +1 -89
- package/dist/src/public/channels/slack/slackChannel.js +1 -251
- package/dist/src/public/channels/slack/thread.js +1 -45
- package/dist/src/public/channels/slack/verify.js +1 -70
- package/dist/src/public/channels/teams/api.d.ts +140 -0
- package/dist/src/public/channels/teams/api.js +4 -0
- package/dist/src/public/channels/teams/attachments.d.ts +25 -0
- package/dist/src/public/channels/teams/attachments.js +1 -0
- package/dist/src/public/channels/teams/defaults.d.ts +24 -0
- package/dist/src/public/channels/teams/defaults.js +3 -0
- package/dist/src/public/channels/teams/hitl.d.ts +36 -0
- package/dist/src/public/channels/teams/hitl.js +1 -0
- package/dist/src/public/channels/teams/inbound.d.ts +80 -0
- package/dist/src/public/channels/teams/inbound.js +3 -0
- package/dist/src/public/channels/teams/index.d.ts +8 -0
- package/dist/src/public/channels/teams/index.js +1 -0
- package/dist/src/public/channels/teams/limits.d.ts +8 -0
- package/dist/src/public/channels/teams/limits.js +1 -0
- package/dist/src/public/channels/teams/teamsChannel.d.ts +162 -0
- package/dist/src/public/channels/teams/teamsChannel.js +1 -0
- package/dist/src/public/channels/teams/verify.d.ts +43 -0
- package/dist/src/public/channels/teams/verify.js +1 -0
- package/dist/src/public/channels/telegram/api.d.ts +107 -0
- package/dist/src/public/channels/telegram/api.js +2 -0
- package/dist/src/public/channels/telegram/attachments.d.ts +23 -0
- package/dist/src/public/channels/telegram/attachments.js +1 -0
- package/dist/src/public/channels/telegram/defaults.d.ts +9 -0
- package/dist/src/public/channels/telegram/defaults.js +3 -0
- package/dist/src/public/channels/telegram/hitl.d.ts +44 -0
- package/dist/src/public/channels/telegram/hitl.js +1 -0
- package/dist/src/public/channels/telegram/inbound.d.ts +88 -0
- package/dist/src/public/channels/telegram/inbound.js +2 -0
- package/dist/src/public/channels/telegram/index.d.ts +8 -0
- package/dist/src/public/channels/telegram/index.js +1 -0
- package/dist/src/public/channels/telegram/telegramChannel.d.ts +126 -0
- package/dist/src/public/channels/telegram/telegramChannel.js +1 -0
- package/dist/src/public/channels/telegram/verify.d.ts +30 -0
- package/dist/src/public/channels/telegram/verify.js +1 -0
- package/dist/src/public/channels/twilio/api.js +1 -103
- package/dist/src/public/channels/twilio/defaults.js +3 -69
- package/dist/src/public/channels/twilio/inbound.js +2 -123
- package/dist/src/public/channels/twilio/index.js +1 -4
- package/dist/src/public/channels/twilio/twilioChannel.js +1 -316
- package/dist/src/public/channels/twilio/twiml.js +1 -58
- package/dist/src/public/channels/twilio/verify.js +1 -73
- package/dist/src/public/channels/upload-policy.js +1 -170
- package/dist/src/public/connections/errors.js +1 -53
- package/dist/src/public/connections/index.js +1 -6
- package/dist/src/public/context/index.js +1 -13
- package/dist/src/public/definitions/agent.js +1 -6
- package/dist/src/public/definitions/channel.js +1 -24
- package/dist/src/public/definitions/connections/mcp.js +1 -20
- package/dist/src/public/definitions/defineChannel.js +1 -74
- package/dist/src/public/definitions/hook.js +1 -11
- package/dist/src/public/definitions/instructions.js +1 -7
- package/dist/src/public/definitions/instrumentation.js +1 -13
- package/dist/src/public/definitions/remote-agent.js +1 -11
- package/dist/src/public/definitions/sandbox-backend.js +1 -13
- package/dist/src/public/definitions/sandbox.js +1 -6
- package/dist/src/public/definitions/schedule.js +1 -32
- package/dist/src/public/definitions/skill.js +1 -7
- package/dist/src/public/definitions/source.js +1 -1
- package/dist/src/public/definitions/state.js +1 -34
- package/dist/src/public/definitions/tool.js +1 -27
- package/dist/src/public/hooks/index.js +1 -9
- package/dist/src/public/index.js +1 -5
- package/dist/src/public/instructions/index.js +1 -4
- package/dist/src/public/instrumentation/index.js +1 -4
- package/dist/src/public/next/index.js +1 -148
- package/dist/src/public/next/server.js +1 -348
- package/dist/src/public/next/vercel-json.js +1 -77
- package/dist/src/public/sandbox/backends/default.js +1 -15
- package/dist/src/public/sandbox/backends/local.js +1 -18
- package/dist/src/public/sandbox/backends/vercel.js +1 -25
- package/dist/src/public/sandbox/index.js +1 -10
- package/dist/src/public/sandbox/local-sandbox.js +1 -1
- package/dist/src/public/sandbox/vercel-sandbox.js +1 -1
- package/dist/src/public/schedules/index.js +1 -4
- package/dist/src/public/skills/index.js +1 -5
- package/dist/src/public/tool-result-narrowing.js +1 -87
- package/dist/src/public/tools/approval/approval-helpers.js +1 -22
- package/dist/src/public/tools/approval/index.js +1 -4
- package/dist/src/public/tools/defaults.js +1 -70
- package/dist/src/public/tools/define-bash-tool.js +1 -14
- package/dist/src/public/tools/define-glob-tool.js +1 -21
- package/dist/src/public/tools/define-grep-tool.js +1 -21
- package/dist/src/public/tools/define-read-file-tool.js +1 -27
- package/dist/src/public/tools/define-write-file-tool.js +1 -21
- package/dist/src/public/tools/index.js +1 -10
- package/dist/src/public/tools/internal.js +1 -24
- package/dist/src/public/types/json.js +1 -13
- package/dist/src/react/index.js +1 -3
- package/dist/src/react/use-ash-agent.js +2 -348
- package/dist/src/runtime/actions/keys.js +1 -30
- package/dist/src/runtime/actions/types.js +1 -99
- package/dist/src/runtime/agent/bootstrap-model-utils.js +1 -148
- package/dist/src/runtime/agent/bootstrap-model.js +1 -36
- package/dist/src/runtime/agent/bootstrap.js +1 -49
- package/dist/src/runtime/agent/mock-model-adapter.js +7 -358
- package/dist/src/runtime/agent/resolve-model.js +1 -48
- package/dist/src/runtime/cache-key.js +1 -52
- package/dist/src/runtime/channels/registry.js +1 -133
- package/dist/src/runtime/compiled-artifacts-source.js +1 -42
- package/dist/src/runtime/connections/authorization-complete-page.js +2 -21
- package/dist/src/runtime/connections/authorization-tokens.js +1 -66
- package/dist/src/runtime/connections/callback-route.js +1 -139
- package/dist/src/runtime/connections/mcp-client.js +1 -307
- package/dist/src/runtime/connections/principal-context.js +1 -111
- package/dist/src/runtime/connections/principal.js +1 -106
- package/dist/src/runtime/connections/registry.js +1 -61
- package/dist/src/runtime/connections/types.js +1 -41
- package/dist/src/runtime/connections/validate-authorization.js +1 -92
- package/dist/src/runtime/framework-channels/index.js +1 -38
- package/dist/src/runtime/framework-tools/ask-question.js +1 -30
- package/dist/src/runtime/framework-tools/bash.js +1 -40
- package/dist/src/runtime/framework-tools/connection-search.js +1 -224
- package/dist/src/runtime/framework-tools/connection-tools.js +1 -103
- package/dist/src/runtime/framework-tools/file-state.js +1 -71
- package/dist/src/runtime/framework-tools/glob.js +2 -56
- package/dist/src/runtime/framework-tools/grep.js +2 -75
- package/dist/src/runtime/framework-tools/index.js +1 -52
- package/dist/src/runtime/framework-tools/pending-connection-tool-calls.js +1 -63
- package/dist/src/runtime/framework-tools/read-file.js +2 -64
- package/dist/src/runtime/framework-tools/skill.js +1 -47
- package/dist/src/runtime/framework-tools/todo.js +3 -122
- package/dist/src/runtime/framework-tools/web-fetch.js +2 -42
- package/dist/src/runtime/framework-tools/web-search.js +1 -15
- package/dist/src/runtime/framework-tools/write-file.js +2 -48
- package/dist/src/runtime/governance/auth/http-basic.js +1 -63
- package/dist/src/runtime/governance/auth/jwt-ecdsa.js +1 -69
- package/dist/src/runtime/governance/auth/jwt-hmac.js +1 -39
- package/dist/src/runtime/governance/auth/oidc.js +1 -126
- package/dist/src/runtime/governance/auth/token-claims.js +1 -84
- package/dist/src/runtime/governance/auth/types.js +1 -14
- package/dist/src/runtime/governance/network/ip-allow-list.js +1 -66
- package/dist/src/runtime/graph.js +1 -17
- package/dist/src/runtime/hooks/registry.js +1 -55
- package/dist/src/runtime/input/types.js +1 -63
- package/dist/src/runtime/loaders/artifact-paths.js +1 -26
- package/dist/src/runtime/loaders/bundled-artifacts.js +1 -21
- package/dist/src/runtime/loaders/compile-metadata.js +1 -92
- package/dist/src/runtime/loaders/manifest.js +1 -56
- package/dist/src/runtime/loaders/module-map.js +1 -64
- package/dist/src/runtime/prompt/compose.js +2 -47
- package/dist/src/runtime/prompt/connections.js +2 -23
- package/dist/src/runtime/resolve-agent-graph.js +1 -287
- package/dist/src/runtime/resolve-agent.js +1 -134
- package/dist/src/runtime/resolve-channel.js +1 -62
- package/dist/src/runtime/resolve-connection.js +1 -72
- package/dist/src/runtime/resolve-helpers.js +1 -58
- package/dist/src/runtime/resolve-hook.js +1 -67
- package/dist/src/runtime/resolve-sandbox.js +1 -65
- package/dist/src/runtime/resolve-tool.js +1 -110
- package/dist/src/runtime/sandbox/keys.js +1 -72
- package/dist/src/runtime/sandbox/registry.js +1 -42
- package/dist/src/runtime/schedules/register.js +1 -62
- package/dist/src/runtime/schedules/resolve-schedule.js +1 -66
- package/dist/src/runtime/session-callback-route.js +1 -87
- package/dist/src/runtime/sessions/auth.js +1 -18
- package/dist/src/runtime/sessions/compiled-agent-cache.js +1 -125
- package/dist/src/runtime/sessions/runtime-session.js +1 -50
- package/dist/src/runtime/sessions/turn.js +1 -1
- package/dist/src/runtime/skills/fragment-context.js +1 -4
- package/dist/src/runtime/skills/sandbox-access.js +1 -85
- package/dist/src/runtime/subagents/registry.js +1 -62
- package/dist/src/runtime/tools/registry.js +1 -40
- package/dist/src/runtime/types.js +1 -1
- package/dist/src/runtime/validation.js +1 -7
- package/dist/src/runtime/workspace/seed-files.js +1 -42
- package/dist/src/runtime/workspace/spec.js +2 -22
- package/dist/src/runtime/workspace/types.js +1 -9
- package/dist/src/sandbox/state.js +1 -1
- package/dist/src/services/dev-client/request-headers.js +1 -197
- package/dist/src/services/dev-client/stream.js +1 -7
- package/dist/src/services/dev-client/url.js +1 -25
- package/dist/src/services/dev-client/vercel-auth-error.js +2 -98
- package/dist/src/services/dev-client.js +1 -48
- package/dist/src/services/inspect-application.js +1 -45
- package/dist/src/shared/agent-definition.js +1 -1
- package/dist/src/shared/errors.js +1 -66
- package/dist/src/shared/guards.js +1 -35
- package/dist/src/shared/json-schemas.js +1 -41
- package/dist/src/shared/json.js +1 -80
- package/dist/src/shared/node.js +1 -1
- package/dist/src/shared/optional.js +1 -1
- package/dist/src/shared/run-mode.js +1 -1
- package/dist/src/shared/sandbox-backend.js +1 -1
- package/dist/src/shared/sandbox-definition.js +1 -1
- package/dist/src/shared/sandbox-session.js +1 -1
- package/dist/src/shared/skill-definition.js +1 -1
- package/dist/src/shared/skill-package.js +1 -100
- package/dist/src/shared/source-ref.js +1 -1
- package/dist/src/shared/tool-definition.js +1 -1
- package/package.json +14 -4
- package/dist/src/chunks/authored-module-loader-DcCfCiBm.js +0 -4
- package/dist/src/chunks/chunk-DSjMdhoD.js +0 -1
- package/dist/src/chunks/client-ZqNLLMZB.js +0 -4
- package/dist/src/chunks/compile-agent-DrIyb818.js +0 -5
- package/dist/src/chunks/dev-authored-source-watcher-C1WUVv9F.js +0 -1
- package/dist/src/chunks/errors-HYWjHxV6.js +0 -1
- package/dist/src/chunks/guards-26p6sOw3.js +0 -1
- package/dist/src/chunks/host-CwAcCrg7.js +0 -70
- package/dist/src/chunks/input-requests-DJiy6dG9.js +0 -1
- package/dist/src/chunks/jsdist-BkeWZ7EZ.js +0 -443
- package/dist/src/chunks/paths-CWZN-XRX.js +0 -85
- package/dist/src/chunks/picocolors-aAkqW4On.js +0 -1
- package/dist/src/chunks/runtime-model-Dh0Nz64z.js +0 -1
- package/dist/src/chunks/token-YW4VSeBB.js +0 -1
- package/dist/src/chunks/types-BJSR0JNV.js +0 -1
|
@@ -1,877 +1 @@
|
|
|
1
|
-
import { context as otelContext, trace, } from "#compiled/@opentelemetry/api/index.js";
|
|
2
|
-
import { isStepCount, ToolLoopAgent, } from "ai";
|
|
3
|
-
import { resolveInstalledPackageInfo } from "#internal/application/package.js";
|
|
4
|
-
import { createErrorId, createLogger, formatError, recordErrorOnSpan } from "#internal/logging.js";
|
|
5
|
-
import { formatLanguageModelGatewayId } from "#internal/runtime-model.js";
|
|
6
|
-
import { contextStorage } from "#context/container.js";
|
|
7
|
-
import { toErrorMessage } from "#shared/errors.js";
|
|
8
|
-
import { createCompactionCompletedEvent, createCompactionRequestedEvent, createInputRequestedEvent, } from "#protocol/message.js";
|
|
9
|
-
import { ASK_QUESTION_TOOL_NAME } from "#runtime/framework-tools/ask-question.js";
|
|
10
|
-
import { ConnectionRegistryKey, DiscoveredConnectionToolsKey, } from "#runtime/framework-tools/connection-search.js";
|
|
11
|
-
import { resolveConnectionToolsFromState } from "#runtime/framework-tools/connection-tools.js";
|
|
12
|
-
import { WEB_SEARCH_TOOL_DEFINITION } from "#runtime/framework-tools/web-search.js";
|
|
13
|
-
import { hydrateSandboxAttachments, stageAttachmentsToSandbox, } from "#harness/attachment-staging.js";
|
|
14
|
-
import { compactMessages, getInputTokenCount, resolveCompactionModel, shouldCompact, } from "#harness/compaction.js";
|
|
15
|
-
import { advanceStep, emitFailedStep, emitRecoverableFailedTurn, emitStreamContent, emitTurnEpilogue, emitTurnPreamble, getHarnessEmissionState, setHarnessEmissionState, } from "#harness/emission.js";
|
|
16
|
-
import { extractQuestionInputRequests, extractToolApprovalInputRequests, } from "#harness/input-extraction.js";
|
|
17
|
-
import { consumeDeferredStepInput, getApprovedTools, hasDeferredStepInput, hasStepInput, resolvePendingInput, setPendingInputBatch, } from "#harness/input-requests.js";
|
|
18
|
-
import { getInstrumentationConfig } from "#harness/instrumentation-config.js";
|
|
19
|
-
import { resolveAssistantStepText } from "#harness/messages.js";
|
|
20
|
-
import { classifyModelCallError, extractModelCallErrorDetails, extractUnsupportedProviderToolTypes, summarizeKnownModelCallConfigError, summarizeKnownModelCallRequestError, } from "#harness/model-call-error.js";
|
|
21
|
-
import { ensureOtelIntegration } from "#harness/otel-integration.js";
|
|
22
|
-
import { applyLastToolCacheBreakpoint, detectPromptCachePath, getAnthropicCacheMarker, } from "#harness/prompt-cache.js";
|
|
23
|
-
import { resolveFrameworkToolFromUpstreamType, resolveGatewayPinForWebSearchBackend, resolveWebSearchBackend, } from "#harness/provider-tools.js";
|
|
24
|
-
import { createRuntimeActionRequestFromToolCall, resolvePendingRuntimeActions, setPendingRuntimeActionBatch, } from "#harness/runtime-actions.js";
|
|
25
|
-
import { buildStepHooks, emitStepActions, isInvalidToolCall, } from "#harness/step-hooks.js";
|
|
26
|
-
import { pruneToolResults } from "#harness/tool-result-pruning.js";
|
|
27
|
-
import { buildToolSetWithProviderTools } from "#harness/tools.js";
|
|
28
|
-
/**
|
|
29
|
-
* Creates a tool-loop harness step function backed by AI SDK `ToolLoopAgent`.
|
|
30
|
-
*/
|
|
31
|
-
/**
|
|
32
|
-
* Builds the `telemetry` value for the AI SDK from authored settings.
|
|
33
|
-
*
|
|
34
|
-
* Custom metadata (authored `InstrumentationDefinition.metadata` plus
|
|
35
|
-
* ash-specific identifiers such as `ash.session.id`) is flowed through
|
|
36
|
-
* {@link buildTelemetryRuntimeContext} because AI SDK v7 surfaces
|
|
37
|
-
* per-call attributes via `runtimeContext`, not a dedicated metadata
|
|
38
|
-
* field on `TelemetryOptions`.
|
|
39
|
-
*/
|
|
40
|
-
const environment = process.env.NODE_ENV ?? "unknown";
|
|
41
|
-
const ashVersion = resolveInstalledPackageInfo().version;
|
|
42
|
-
const log = createLogger("harness.tool-loop");
|
|
43
|
-
/**
|
|
44
|
-
* Max attempts (1 original + N retries) for transient model-call
|
|
45
|
-
* failures before the harness gives up and falls back to the
|
|
46
|
-
* recoverable/terminal emission path. Kept small on purpose — every
|
|
47
|
-
* attempt costs a round-trip plus prompt tokens, and the dominant
|
|
48
|
-
* use case (429 / 502) clears quickly or not at all.
|
|
49
|
-
*/
|
|
50
|
-
const MODEL_CALL_MAX_ATTEMPTS = 3;
|
|
51
|
-
/**
|
|
52
|
-
* Base delay (ms) between model-call retries. Doubled each attempt,
|
|
53
|
-
* plus a small random jitter to avoid thundering-herd behavior when
|
|
54
|
-
* a provider incident clears.
|
|
55
|
-
*/
|
|
56
|
-
const MODEL_CALL_RETRY_BASE_DELAY_MS = 500;
|
|
57
|
-
function enrichTelemetry(authored, agentName) {
|
|
58
|
-
if (authored === undefined) {
|
|
59
|
-
return undefined;
|
|
60
|
-
}
|
|
61
|
-
return {
|
|
62
|
-
functionId: authored.functionId ?? agentName,
|
|
63
|
-
isEnabled: true,
|
|
64
|
-
recordInputs: authored.recordInputs ?? true,
|
|
65
|
-
recordOutputs: authored.recordOutputs ?? true,
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Builds the `runtimeContext` passed into AI SDK calls so that
|
|
70
|
-
* ash-specific identifiers (version, environment, session id,
|
|
71
|
-
* continuation token) and any authored instrumentation metadata
|
|
72
|
-
* are attached to AI SDK spans as `ai.settings.context.*` attributes.
|
|
73
|
-
*/
|
|
74
|
-
function buildTelemetryRuntimeContext(authored, session) {
|
|
75
|
-
if (authored === undefined) {
|
|
76
|
-
return undefined;
|
|
77
|
-
}
|
|
78
|
-
return {
|
|
79
|
-
...authored.metadata,
|
|
80
|
-
"ash.continuation_token": session.continuationToken,
|
|
81
|
-
"ash.environment": environment,
|
|
82
|
-
"ash.session.id": session.sessionId,
|
|
83
|
-
"ash.version": ashVersion,
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Resolves the gateway provider slug to pin via
|
|
88
|
-
* `providerOptions.gateway.only` for one harness step, or `undefined`
|
|
89
|
-
* when no pin is needed.
|
|
90
|
-
*
|
|
91
|
-
* A pin is added when all of:
|
|
92
|
-
* 1. The model is gateway-routed (the `gateway-auto` cache path —
|
|
93
|
-
* matches the existing `gateway.caching` hint condition).
|
|
94
|
-
* 2. The effective toolset includes a framework provider tool whose
|
|
95
|
-
* backend pins to one provider (e.g. `web_search` on Anthropic).
|
|
96
|
-
*
|
|
97
|
-
* The author keeps the final say via `providerOptions.gateway.only` or
|
|
98
|
-
* `.order` on their model reference — those overrides flow through
|
|
99
|
-
* {@link mergeGatewayProviderPin} which is a no-op when either field is
|
|
100
|
-
* already set.
|
|
101
|
-
*/
|
|
102
|
-
function resolveGatewayPinForStep(input) {
|
|
103
|
-
if (input.cachePath.kind !== "gateway-auto") {
|
|
104
|
-
return undefined;
|
|
105
|
-
}
|
|
106
|
-
if (input.tools[WEB_SEARCH_TOOL_DEFINITION.name] === undefined) {
|
|
107
|
-
return undefined;
|
|
108
|
-
}
|
|
109
|
-
const backend = resolveWebSearchBackend(input.modelReference);
|
|
110
|
-
if (backend === null) {
|
|
111
|
-
return undefined;
|
|
112
|
-
}
|
|
113
|
-
const pin = resolveGatewayPinForWebSearchBackend(backend);
|
|
114
|
-
return pin ?? undefined;
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Builds AI Gateway app attribution headers when the model is gateway-routed.
|
|
118
|
-
*
|
|
119
|
-
* Gateway routing is detected by `typeof model === "string"` — the same
|
|
120
|
-
* condition used for the `gateway-auto` cache path. Returns `undefined`
|
|
121
|
-
* for non-gateway models or when no meaningful attribution is available.
|
|
122
|
-
*/
|
|
123
|
-
function buildGatewayAttributionHeaders(model, runtimeIdentity) {
|
|
124
|
-
if (typeof model !== "string") {
|
|
125
|
-
return undefined;
|
|
126
|
-
}
|
|
127
|
-
const title = runtimeIdentity?.agentName ?? runtimeIdentity?.agentId;
|
|
128
|
-
const deploymentHost = process.env.VERCEL_PROJECT_PRODUCTION_URL || process.env.VERCEL_URL;
|
|
129
|
-
const referer = deploymentHost ? `https://${deploymentHost}` : undefined;
|
|
130
|
-
if (!title && !referer) {
|
|
131
|
-
return undefined;
|
|
132
|
-
}
|
|
133
|
-
const headers = {};
|
|
134
|
-
if (title)
|
|
135
|
-
headers["x-title"] = title;
|
|
136
|
-
if (referer)
|
|
137
|
-
headers["http-referer"] = referer;
|
|
138
|
-
return headers;
|
|
139
|
-
}
|
|
140
|
-
// ---------------------------------------------------------------------------
|
|
141
|
-
// Turn trace state — survives step boundaries via session.state
|
|
142
|
-
// ---------------------------------------------------------------------------
|
|
143
|
-
const TURN_TRACE_STATE_KEY = "ash.harness.turnTrace";
|
|
144
|
-
function getTurnTraceState(session) {
|
|
145
|
-
return session.state?.[TURN_TRACE_STATE_KEY];
|
|
146
|
-
}
|
|
147
|
-
function setTurnTraceState(session, spanContext) {
|
|
148
|
-
const stored = {
|
|
149
|
-
traceId: spanContext.traceId,
|
|
150
|
-
spanId: spanContext.spanId,
|
|
151
|
-
traceFlags: spanContext.traceFlags,
|
|
152
|
-
};
|
|
153
|
-
return {
|
|
154
|
-
...session,
|
|
155
|
-
state: {
|
|
156
|
-
...session.state,
|
|
157
|
-
[TURN_TRACE_STATE_KEY]: stored,
|
|
158
|
-
},
|
|
159
|
-
};
|
|
160
|
-
}
|
|
161
|
-
/**
|
|
162
|
-
* Resolves the OTel context for the current step.
|
|
163
|
-
*
|
|
164
|
-
* First step of a turn: uses the newly created turn span.
|
|
165
|
-
* Continuation steps: restores the parent span context from session state
|
|
166
|
-
* so AI SDK spans nest under the same trace as the first step.
|
|
167
|
-
*/
|
|
168
|
-
function resolveStepOtelContext(tracer, turnSpan, session) {
|
|
169
|
-
if (turnSpan) {
|
|
170
|
-
return trace.setSpan(otelContext.active(), turnSpan);
|
|
171
|
-
}
|
|
172
|
-
if (tracer) {
|
|
173
|
-
const stored = getTurnTraceState(session);
|
|
174
|
-
if (stored) {
|
|
175
|
-
const parent = trace.wrapSpanContext({
|
|
176
|
-
traceId: stored.traceId,
|
|
177
|
-
spanId: stored.spanId,
|
|
178
|
-
traceFlags: stored.traceFlags,
|
|
179
|
-
});
|
|
180
|
-
return trace.setSpan(otelContext.active(), parent);
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
return undefined;
|
|
184
|
-
}
|
|
185
|
-
export function createToolLoopHarness(config) {
|
|
186
|
-
const emit = config.emit;
|
|
187
|
-
const telemetryConfig = getInstrumentationConfig();
|
|
188
|
-
if (telemetryConfig !== undefined) {
|
|
189
|
-
ensureOtelIntegration();
|
|
190
|
-
}
|
|
191
|
-
const tracer = telemetryConfig !== undefined ? trace.getTracer("ash") : undefined;
|
|
192
|
-
const agentName = config.runtimeIdentity?.agentName;
|
|
193
|
-
async function runStep(initialSession, input) {
|
|
194
|
-
// --- Turn span lifecycle ------------------------------------------------
|
|
195
|
-
// First step of a turn: open a new parent span. Continuation steps
|
|
196
|
-
// restore the parent from session state via resolveStepOtelContext.
|
|
197
|
-
let turnSpan;
|
|
198
|
-
if (tracer && hasStepInput(input)) {
|
|
199
|
-
const functionId = telemetryConfig?.functionId ?? agentName;
|
|
200
|
-
const attributes = {
|
|
201
|
-
"ash.version": ashVersion,
|
|
202
|
-
"ash.environment": environment,
|
|
203
|
-
"ash.session.id": initialSession.sessionId,
|
|
204
|
-
"ash.continuation_token": initialSession.continuationToken,
|
|
205
|
-
};
|
|
206
|
-
if (functionId) {
|
|
207
|
-
attributes["ai.telemetry.functionId"] = functionId;
|
|
208
|
-
}
|
|
209
|
-
turnSpan = tracer.startSpan("ai.ash.turn", { attributes });
|
|
210
|
-
}
|
|
211
|
-
// Run the step body inside the turn span's (or restored parent's)
|
|
212
|
-
// OTel context so AI SDK spans nest as children.
|
|
213
|
-
const parentContext = resolveStepOtelContext(tracer, turnSpan, initialSession);
|
|
214
|
-
const executeStep = () => executeStepBody(initialSession, input, turnSpan);
|
|
215
|
-
try {
|
|
216
|
-
if (parentContext) {
|
|
217
|
-
return await otelContext.with(parentContext, executeStep);
|
|
218
|
-
}
|
|
219
|
-
return await executeStep();
|
|
220
|
-
}
|
|
221
|
-
finally {
|
|
222
|
-
turnSpan?.end();
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
async function executeStepBody(initialSession, input, turnSpan) {
|
|
226
|
-
let session = initialSession;
|
|
227
|
-
// Store the turn span context on the session so continuation steps
|
|
228
|
-
// can restore the parent trace across step boundaries.
|
|
229
|
-
if (turnSpan) {
|
|
230
|
-
session = setTurnTraceState(session, turnSpan.spanContext());
|
|
231
|
-
}
|
|
232
|
-
let emissionState = getHarnessEmissionState(session);
|
|
233
|
-
// Resolve deferred input, runtime actions, then HITL input; each stage
|
|
234
|
-
// may park when its resume payload has not arrived.
|
|
235
|
-
const stepInput = consumeDeferredStepInput({ input, session });
|
|
236
|
-
session = stepInput.session;
|
|
237
|
-
const resolvedRuntimeActions = await resolvePendingRuntimeActions({
|
|
238
|
-
emit,
|
|
239
|
-
session,
|
|
240
|
-
stepInput: stepInput.input,
|
|
241
|
-
});
|
|
242
|
-
if (resolvedRuntimeActions.outcome === "unresolved") {
|
|
243
|
-
return { next: null, session: resolvedRuntimeActions.session };
|
|
244
|
-
}
|
|
245
|
-
session = resolvedRuntimeActions.session;
|
|
246
|
-
const pending = resolvePendingInput({
|
|
247
|
-
history: resolvedRuntimeActions.messages,
|
|
248
|
-
resolveApprovalKey: resolveApprovalKeyFromTools(config.tools),
|
|
249
|
-
session,
|
|
250
|
-
stepInput: stepInput.input,
|
|
251
|
-
});
|
|
252
|
-
if (pending.outcome === "unresolved") {
|
|
253
|
-
return { next: null, session: pending.session };
|
|
254
|
-
}
|
|
255
|
-
// --- Turn preamble ------------------------------------------------------
|
|
256
|
-
if (emit && hasStepInput(input)) {
|
|
257
|
-
emissionState = await emitTurnPreamble(emit, input ?? {}, emissionState, config.runtimeIdentity);
|
|
258
|
-
session = setHarnessEmissionState(session, emissionState);
|
|
259
|
-
if (turnSpan) {
|
|
260
|
-
turnSpan.setAttribute("ash.turn.id", emissionState.turnId);
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
session = pending.session;
|
|
264
|
-
let messages = pending.messages;
|
|
265
|
-
if (stepInput.input?.message !== undefined && !pending.deferredMessage) {
|
|
266
|
-
// Staging writes FilePart bytes into the sandbox and replaces
|
|
267
|
-
// each part's `data` with a compact `ash-sandbox:` URL. The
|
|
268
|
-
// `messages` array — and everything that flows into
|
|
269
|
-
// `session.history` from it — therefore never carries raw
|
|
270
|
-
// attachment bytes across step boundaries.
|
|
271
|
-
const content = await stageAttachmentsToSandbox(stepInput.input.message);
|
|
272
|
-
messages.push({ content, role: "user" });
|
|
273
|
-
}
|
|
274
|
-
// --- Model + tools ------------------------------------------------------
|
|
275
|
-
const model = await config.resolveModel(session.agent.modelReference);
|
|
276
|
-
const cachePath = detectPromptCachePath(model);
|
|
277
|
-
const marker = cachePath.kind === "anthropic-direct" ? getAnthropicCacheMarker() : undefined;
|
|
278
|
-
// --- Compaction ---------------------------------------------------------
|
|
279
|
-
//
|
|
280
|
-
// Runs before `agent.stream()` so the compacted messages flow through
|
|
281
|
-
// `messages` (which the harness uses to rebuild session history).
|
|
282
|
-
const attributionHeaders = buildGatewayAttributionHeaders(model, config.runtimeIdentity);
|
|
283
|
-
({ messages, session } = await maybeCompact({
|
|
284
|
-
emit,
|
|
285
|
-
emissionState,
|
|
286
|
-
headers: attributionHeaders,
|
|
287
|
-
messages,
|
|
288
|
-
model,
|
|
289
|
-
onCompaction: config.onCompaction,
|
|
290
|
-
resolveModel: config.resolveModel,
|
|
291
|
-
session,
|
|
292
|
-
telemetry: enrichTelemetry(telemetryConfig, agentName) ?? undefined,
|
|
293
|
-
}));
|
|
294
|
-
const approvedTools = getApprovedTools(session);
|
|
295
|
-
// Inject connection tools discovered by a prior `connection_search`.
|
|
296
|
-
// Direct harness unit tests may run without an ambient context.
|
|
297
|
-
const ctx = contextStorage.getStore();
|
|
298
|
-
const registry = ctx?.get(ConnectionRegistryKey);
|
|
299
|
-
const discovered = ctx?.get(DiscoveredConnectionToolsKey);
|
|
300
|
-
// --- Execute via ToolLoopAgent ------------------------------------------
|
|
301
|
-
/*
|
|
302
|
-
* The `onError` override suppresses the AI SDK's default
|
|
303
|
-
* `console.error(error)` handler inside `streamText`. Errors are
|
|
304
|
-
* handled by the harness catch block and emitted as stream events.
|
|
305
|
-
*/
|
|
306
|
-
// Hydrate `ash-sandbox:` ref FileParts into inline bytes for the
|
|
307
|
-
// model call only. The result is transient — `messages` itself
|
|
308
|
-
// remains ref-only so it can flow into `session.history` without
|
|
309
|
-
// bloating every future step boundary.
|
|
310
|
-
const hydratedMessages = await hydrateSandboxAttachments(messages);
|
|
311
|
-
const ephemeralContext = stepInput.input?.modelContext;
|
|
312
|
-
// AI SDK rejects role:"system" in `messages` — route durable history
|
|
313
|
-
// and ephemeral context system entries to `instructions` instead.
|
|
314
|
-
const systemMessages = [];
|
|
315
|
-
const nonSystemMessages = [];
|
|
316
|
-
for (const entry of hydratedMessages) {
|
|
317
|
-
if (entry.role === "system") {
|
|
318
|
-
systemMessages.push(entry);
|
|
319
|
-
}
|
|
320
|
-
else {
|
|
321
|
-
nonSystemMessages.push(entry);
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
if (ephemeralContext !== undefined) {
|
|
325
|
-
for (const entry of ephemeralContext) {
|
|
326
|
-
if (entry.role === "system") {
|
|
327
|
-
systemMessages.push(entry);
|
|
328
|
-
}
|
|
329
|
-
else {
|
|
330
|
-
nonSystemMessages.push(entry);
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
const modelMessages = nonSystemMessages;
|
|
335
|
-
/**
|
|
336
|
-
* Assembles the effective toolset, instructions, and ToolLoopAgent
|
|
337
|
-
* for one attempt of this step, then runs the model call.
|
|
338
|
-
*
|
|
339
|
-
* Called twice in the recovery path: once for the original attempt
|
|
340
|
-
* with full tools, and once after the gateway rejects a
|
|
341
|
-
* provider-specific tool — the retry passes `disabledProviderTools`
|
|
342
|
-
* to drop the offending tool and `extraSystemNote` to tell the
|
|
343
|
-
* model why a capability was removed.
|
|
344
|
-
*/
|
|
345
|
-
const runOneModelCall = async (opts) => {
|
|
346
|
-
const tools = await buildToolSetWithProviderTools({
|
|
347
|
-
approvedTools,
|
|
348
|
-
capabilities: config.capabilities,
|
|
349
|
-
disabledProviderTools: opts.disabledProviderTools,
|
|
350
|
-
modelReference: session.agent.modelReference,
|
|
351
|
-
tools: config.tools,
|
|
352
|
-
});
|
|
353
|
-
if (registry !== undefined && discovered !== undefined) {
|
|
354
|
-
const connectionTools = await resolveConnectionToolsFromState(registry, discovered, {
|
|
355
|
-
approvedTools,
|
|
356
|
-
existingToolNames: new Set(Object.keys(tools)),
|
|
357
|
-
});
|
|
358
|
-
Object.assign(tools, connectionTools);
|
|
359
|
-
}
|
|
360
|
-
const effectiveTools = marker ? applyLastToolCacheBreakpoint(tools, marker) : tools;
|
|
361
|
-
// Pin gateway routing to the provider that owns any
|
|
362
|
-
// provider-specific tool in this step's toolset. Converts a
|
|
363
|
-
// transient primary outage into a retryable 503 instead of
|
|
364
|
-
// routing to an incompatible fallback provider. Skipped on the
|
|
365
|
-
// recovery retry because the offending tool was dropped — any
|
|
366
|
-
// provider can serve the request now.
|
|
367
|
-
const gatewayPinProvider = resolveGatewayPinForStep({
|
|
368
|
-
cachePath,
|
|
369
|
-
modelReference: session.agent.modelReference,
|
|
370
|
-
tools: effectiveTools,
|
|
371
|
-
});
|
|
372
|
-
// Build instructions, optionally prepending the recovery
|
|
373
|
-
// system note so the model sees one explicit signal that a
|
|
374
|
-
// capability was removed for this attempt.
|
|
375
|
-
const extraSystemEntry = opts.extraSystemNote
|
|
376
|
-
? [{ role: "system", content: opts.extraSystemNote }]
|
|
377
|
-
: [];
|
|
378
|
-
const baseSystemEntry = session.agent.system
|
|
379
|
-
? [{ role: "system", content: session.agent.system }]
|
|
380
|
-
: [];
|
|
381
|
-
const instructions = systemMessages.length > 0 || extraSystemEntry.length > 0
|
|
382
|
-
? [...extraSystemEntry, ...baseSystemEntry, ...systemMessages]
|
|
383
|
-
: session.agent.system || undefined;
|
|
384
|
-
const hooks = buildStepHooks({
|
|
385
|
-
cachePath,
|
|
386
|
-
emit,
|
|
387
|
-
emissionState,
|
|
388
|
-
emitStepStarted: opts.suppressStepStartedEmission !== true,
|
|
389
|
-
gatewayPinProvider,
|
|
390
|
-
marker,
|
|
391
|
-
session,
|
|
392
|
-
});
|
|
393
|
-
const agentSettings = {
|
|
394
|
-
headers: attributionHeaders,
|
|
395
|
-
instructions,
|
|
396
|
-
model,
|
|
397
|
-
onError() { },
|
|
398
|
-
onStepFinish: hooks.onStepFinish,
|
|
399
|
-
prepareStep: hooks.prepareStep,
|
|
400
|
-
runtimeContext: buildTelemetryRuntimeContext(telemetryConfig, session),
|
|
401
|
-
stopWhen: isStepCount(1),
|
|
402
|
-
telemetry: enrichTelemetry(telemetryConfig, agentName),
|
|
403
|
-
tools: effectiveTools,
|
|
404
|
-
};
|
|
405
|
-
const agent = new ToolLoopAgent(agentSettings);
|
|
406
|
-
const executeModelCall = async () => {
|
|
407
|
-
if (emit) {
|
|
408
|
-
const streamResult = await agent.stream({ messages: modelMessages });
|
|
409
|
-
const { inlineActionResultCallIds, inlineToolResultParts } = await emitStreamContent(emit, emissionState, streamResult.fullStream);
|
|
410
|
-
const stepResult = await hooks.stepResult;
|
|
411
|
-
await emitStepActions(emit, emissionState, stepResult, {
|
|
412
|
-
excludedActionToolNames: new Set([ASK_QUESTION_TOOL_NAME]),
|
|
413
|
-
inlineActionResultCallIds,
|
|
414
|
-
tools: config.tools,
|
|
415
|
-
});
|
|
416
|
-
if (inlineToolResultParts.length > 0) {
|
|
417
|
-
/*
|
|
418
|
-
* AI SDK `StepResult` is a class whose `content`,
|
|
419
|
-
* `toolCalls`, `toolResults`, `text` are prototype getters.
|
|
420
|
-
* Each field is read explicitly here rather than via spread
|
|
421
|
-
* so the returned plain object carries the values — spread
|
|
422
|
-
* would copy only own enumerable properties and the
|
|
423
|
-
* downstream `extractQuestionInputRequests` would crash on
|
|
424
|
-
* `toolCalls === undefined`.
|
|
425
|
-
*/
|
|
426
|
-
return {
|
|
427
|
-
content: stepResult.content,
|
|
428
|
-
finishReason: stepResult.finishReason,
|
|
429
|
-
response: {
|
|
430
|
-
...stepResult.response,
|
|
431
|
-
messages: [
|
|
432
|
-
{ role: "tool", content: [...inlineToolResultParts] },
|
|
433
|
-
...stepResult.response.messages,
|
|
434
|
-
],
|
|
435
|
-
},
|
|
436
|
-
text: stepResult.text,
|
|
437
|
-
toolCalls: stepResult.toolCalls,
|
|
438
|
-
toolResults: stepResult.toolResults,
|
|
439
|
-
usage: stepResult.usage,
|
|
440
|
-
};
|
|
441
|
-
}
|
|
442
|
-
return stepResult;
|
|
443
|
-
}
|
|
444
|
-
await agent.generate({ messages: modelMessages });
|
|
445
|
-
return await hooks.stepResult;
|
|
446
|
-
};
|
|
447
|
-
return runModelCallWithRetries(executeModelCall, {
|
|
448
|
-
sessionId: session.sessionId,
|
|
449
|
-
turnId: emissionState.turnId,
|
|
450
|
-
});
|
|
451
|
-
};
|
|
452
|
-
let result;
|
|
453
|
-
try {
|
|
454
|
-
result = await runOneModelCall({});
|
|
455
|
-
}
|
|
456
|
-
catch (error) {
|
|
457
|
-
// First, try to recover by dropping any provider-specific tool
|
|
458
|
-
// that the AI Gateway's fallback provider rejected. This converts
|
|
459
|
-
// the otherwise-terminal failure into one extra model call with a
|
|
460
|
-
// degraded toolset — the agent's turn proceeds without the
|
|
461
|
-
// capability the chosen provider could not serve.
|
|
462
|
-
const recoveryResult = await attemptUnsupportedProviderToolRecovery({
|
|
463
|
-
error,
|
|
464
|
-
runOneModelCall,
|
|
465
|
-
sessionId: session.sessionId,
|
|
466
|
-
turnId: emissionState.turnId,
|
|
467
|
-
});
|
|
468
|
-
if (recoveryResult.outcome === "recovered") {
|
|
469
|
-
result = recoveryResult.result;
|
|
470
|
-
}
|
|
471
|
-
else {
|
|
472
|
-
// Surface the full cause chain + upstream responseBody to OTel
|
|
473
|
-
// via the turn span. The AI SDK's automatic
|
|
474
|
-
// `span.recordException(err)` on its own `ai.streamText` span
|
|
475
|
-
// only captures `error.stack` and does not traverse `cause`,
|
|
476
|
-
// so the gateway-wrapped upstream 4xx body would otherwise be
|
|
477
|
-
// invisible to OTel providers.
|
|
478
|
-
const finalError = recoveryResult.error;
|
|
479
|
-
if (turnSpan) {
|
|
480
|
-
recordErrorOnSpan(turnSpan, finalError);
|
|
481
|
-
}
|
|
482
|
-
if (!emit) {
|
|
483
|
-
// Internal harness callers without an emit fn (tests, task-only
|
|
484
|
-
// code paths) get the raw throw. Only runtime-connected harness
|
|
485
|
-
// calls go through the structured failure path below.
|
|
486
|
-
throw finalError;
|
|
487
|
-
}
|
|
488
|
-
const classification = classifyModelCallError(finalError);
|
|
489
|
-
const errorId = createErrorId();
|
|
490
|
-
const configSummary = classification === "terminal" ? summarizeKnownModelCallConfigError(finalError) : null;
|
|
491
|
-
const requestSummary = configSummary === null ? summarizeKnownModelCallRequestError(finalError) : null;
|
|
492
|
-
const errorMessage = configSummary?.message ?? requestSummary?.message ?? toErrorMessage(finalError);
|
|
493
|
-
const modelCallDetails = extractModelCallErrorDetails(finalError);
|
|
494
|
-
const details = buildModelCallFailureDetails({
|
|
495
|
-
configSummary,
|
|
496
|
-
error: finalError,
|
|
497
|
-
errorId,
|
|
498
|
-
modelCallDetails,
|
|
499
|
-
requestSummary,
|
|
500
|
-
});
|
|
501
|
-
const modelCallLogFields = buildModelCallFailureLogFields({
|
|
502
|
-
error: finalError,
|
|
503
|
-
errorId,
|
|
504
|
-
modelCallDetails,
|
|
505
|
-
requestSummary,
|
|
506
|
-
sessionId: session.sessionId,
|
|
507
|
-
turnId: emissionState.turnId,
|
|
508
|
-
});
|
|
509
|
-
if (classification === "terminal") {
|
|
510
|
-
if (configSummary !== null) {
|
|
511
|
-
// Recognized configuration failure: log a concise single line
|
|
512
|
-
// and skip the structured SDK dump so the user sees an
|
|
513
|
-
// actionable hint instead of a wall of inspector output.
|
|
514
|
-
log.error(`${configSummary.name}: ${configSummary.message}`, {
|
|
515
|
-
errorId,
|
|
516
|
-
sessionId: session.sessionId,
|
|
517
|
-
turnId: emissionState.turnId,
|
|
518
|
-
});
|
|
519
|
-
}
|
|
520
|
-
else {
|
|
521
|
-
log.error(requestSummary?.message ?? "model call failed terminally", modelCallLogFields);
|
|
522
|
-
}
|
|
523
|
-
await emitFailedStep(emit, emissionState, {
|
|
524
|
-
code: "MODEL_CALL_FAILED",
|
|
525
|
-
details,
|
|
526
|
-
message: errorMessage,
|
|
527
|
-
sessionId: session.sessionId,
|
|
528
|
-
});
|
|
529
|
-
return {
|
|
530
|
-
next: { done: true, output: "" },
|
|
531
|
-
session,
|
|
532
|
-
};
|
|
533
|
-
}
|
|
534
|
-
log.error(requestSummary?.message ?? "model call failed — parking session for retry by the user", modelCallLogFields);
|
|
535
|
-
emissionState = await emitRecoverableFailedTurn(emit, emissionState, {
|
|
536
|
-
code: "MODEL_CALL_FAILED",
|
|
537
|
-
details,
|
|
538
|
-
message: errorMessage,
|
|
539
|
-
});
|
|
540
|
-
const parkedSession = setHarnessEmissionState(session, emissionState);
|
|
541
|
-
return { next: null, session: parkedSession };
|
|
542
|
-
}
|
|
543
|
-
}
|
|
544
|
-
// --- Handle result ------------------------------------------------------
|
|
545
|
-
return handleStepResult({
|
|
546
|
-
config,
|
|
547
|
-
emit,
|
|
548
|
-
emissionState,
|
|
549
|
-
promptMessages: messages,
|
|
550
|
-
result,
|
|
551
|
-
runStep,
|
|
552
|
-
session,
|
|
553
|
-
});
|
|
554
|
-
}
|
|
555
|
-
return runStep;
|
|
556
|
-
}
|
|
557
|
-
// ---------------------------------------------------------------------------
|
|
558
|
-
// Model-call failure projection
|
|
559
|
-
// ---------------------------------------------------------------------------
|
|
560
|
-
/**
|
|
561
|
-
* Projects a model-call failure into the `step.failed` / `turn.failed`
|
|
562
|
-
* `details` payload. Three mutually exclusive branches:
|
|
563
|
-
*
|
|
564
|
-
* 1. Config summary (known terminal: missing key, gateway auth) → friendly
|
|
565
|
-
* `name` + `message`, no SDK inspector dump.
|
|
566
|
-
* 2. Request summary (ambiguous gateway 4xx that we recover from) → raw
|
|
567
|
-
* error `message`, friendly `name`, no inspector dump.
|
|
568
|
-
* 3. Fallback → full {@link formatError} projection (cause chain via
|
|
569
|
-
* `util.inspect`) so unrecognized failures still carry the upstream
|
|
570
|
-
* stack to log aggregators.
|
|
571
|
-
*
|
|
572
|
-
* All branches merge {@link extractModelCallErrorDetails} on top so the
|
|
573
|
-
* compact gateway diagnostics (`statusCode`, `upstreamMessage`,
|
|
574
|
-
* `responseBodySnippet`, ...) always show up next to the message.
|
|
575
|
-
*/
|
|
576
|
-
function buildModelCallFailureDetails(input) {
|
|
577
|
-
const { configSummary, error, errorId, modelCallDetails, requestSummary } = input;
|
|
578
|
-
if (configSummary !== null) {
|
|
579
|
-
return {
|
|
580
|
-
errorId,
|
|
581
|
-
message: configSummary.message,
|
|
582
|
-
name: configSummary.name,
|
|
583
|
-
...modelCallDetails,
|
|
584
|
-
};
|
|
585
|
-
}
|
|
586
|
-
if (requestSummary !== null) {
|
|
587
|
-
return {
|
|
588
|
-
errorId,
|
|
589
|
-
message: toErrorMessage(error),
|
|
590
|
-
name: requestSummary.name,
|
|
591
|
-
...modelCallDetails,
|
|
592
|
-
};
|
|
593
|
-
}
|
|
594
|
-
return { ...formatError(error, errorId), ...modelCallDetails };
|
|
595
|
-
}
|
|
596
|
-
/**
|
|
597
|
-
* Builds the structured log fields for a model-call failure. When we
|
|
598
|
-
* recognized the failure as an ambiguous gateway request rejection, attach
|
|
599
|
-
* the compact `details` payload and *omit* the raw `error` so the logger's
|
|
600
|
-
* `util.inspect` of the cause chain (which would render `[object Object]`
|
|
601
|
-
* for upstream `APICallError` shapes) is bypassed. Otherwise fall back to
|
|
602
|
-
* the raw error so unrecognized failures keep their full stack in logs.
|
|
603
|
-
*/
|
|
604
|
-
function buildModelCallFailureLogFields(input) {
|
|
605
|
-
const base = {
|
|
606
|
-
errorId: input.errorId,
|
|
607
|
-
sessionId: input.sessionId,
|
|
608
|
-
turnId: input.turnId,
|
|
609
|
-
};
|
|
610
|
-
if (input.requestSummary !== null) {
|
|
611
|
-
return { ...base, details: input.modelCallDetails };
|
|
612
|
-
}
|
|
613
|
-
return { ...base, error: input.error };
|
|
614
|
-
}
|
|
615
|
-
/**
|
|
616
|
-
* Inspects a model-call failure for the "tool type 'X' is not supported"
|
|
617
|
-
* provider-attempt rejection that AI Gateway returns when a fallback
|
|
618
|
-
* provider cannot serve a provider-specific tool. On a match, retries the
|
|
619
|
-
* step once with the offending tool dropped and a one-shot system note
|
|
620
|
-
* telling the model which capability has been removed.
|
|
621
|
-
*
|
|
622
|
-
* Returns `recovered` when the retry succeeded so the caller can hand
|
|
623
|
-
* the result off to the usual post-step handler. Returns `failed`
|
|
624
|
-
* (with the original error, or the retry's error if the retry also
|
|
625
|
-
* threw) otherwise so the caller's existing terminal/recoverable
|
|
626
|
-
* cascade still runs.
|
|
627
|
-
*
|
|
628
|
-
* Recovery is intentionally scoped to known provider tools — entries in
|
|
629
|
-
* {@link UPSTREAM_TOOL_TYPE_TO_FRAMEWORK_NAME} — so an unrelated
|
|
630
|
-
* upstream rejection cannot accidentally drop a user-authored tool.
|
|
631
|
-
*/
|
|
632
|
-
async function attemptUnsupportedProviderToolRecovery(input) {
|
|
633
|
-
const unsupportedTypes = extractUnsupportedProviderToolTypes(input.error);
|
|
634
|
-
if (unsupportedTypes.length === 0) {
|
|
635
|
-
return { outcome: "failed", error: input.error };
|
|
636
|
-
}
|
|
637
|
-
const toolsToDisable = [];
|
|
638
|
-
for (const type of unsupportedTypes) {
|
|
639
|
-
const frameworkName = resolveFrameworkToolFromUpstreamType(type);
|
|
640
|
-
if (frameworkName !== null && !toolsToDisable.includes(frameworkName)) {
|
|
641
|
-
toolsToDisable.push(frameworkName);
|
|
642
|
-
}
|
|
643
|
-
}
|
|
644
|
-
if (toolsToDisable.length === 0) {
|
|
645
|
-
return { outcome: "failed", error: input.error };
|
|
646
|
-
}
|
|
647
|
-
log.warn("disabling unsupported provider tool(s); retrying step once", {
|
|
648
|
-
disabled: toolsToDisable,
|
|
649
|
-
sessionId: input.sessionId,
|
|
650
|
-
turnId: input.turnId,
|
|
651
|
-
upstreamTypes: unsupportedTypes,
|
|
652
|
-
});
|
|
653
|
-
try {
|
|
654
|
-
const result = await input.runOneModelCall({
|
|
655
|
-
disabledProviderTools: new Set(toolsToDisable),
|
|
656
|
-
extraSystemNote: buildDisabledToolNote(toolsToDisable),
|
|
657
|
-
suppressStepStartedEmission: true,
|
|
658
|
-
});
|
|
659
|
-
return { outcome: "recovered", result };
|
|
660
|
-
}
|
|
661
|
-
catch (retryError) {
|
|
662
|
-
return { outcome: "failed", error: retryError };
|
|
663
|
-
}
|
|
664
|
-
}
|
|
665
|
-
/**
|
|
666
|
-
* Builds the one-shot system note prepended to the recovery retry's
|
|
667
|
-
* instructions so the model has explicit context for why a capability
|
|
668
|
-
* disappeared mid-turn.
|
|
669
|
-
*/
|
|
670
|
-
function buildDisabledToolNote(toolNames) {
|
|
671
|
-
const list = toolNames.join(", ");
|
|
672
|
-
const noun = toolNames.length === 1 ? "tool is" : "tools are";
|
|
673
|
-
return (`The following ${noun} not available with the current model and ` +
|
|
674
|
-
`has been removed: ${list}. Proceed using the remaining tools or your ` +
|
|
675
|
-
`training knowledge.`);
|
|
676
|
-
}
|
|
677
|
-
// ---------------------------------------------------------------------------
|
|
678
|
-
// Post-step result handling
|
|
679
|
-
// ---------------------------------------------------------------------------
|
|
680
|
-
/**
|
|
681
|
-
* Processes the step result: extracts input requests, decides whether to
|
|
682
|
-
* park, continue the tool loop, or terminate.
|
|
683
|
-
*/
|
|
684
|
-
async function handleStepResult(input) {
|
|
685
|
-
const { config, emit, promptMessages, result, runStep } = input;
|
|
686
|
-
let { emissionState, session } = input;
|
|
687
|
-
const responseMessages = result.response.messages;
|
|
688
|
-
const stepOutput = resolveAssistantStepText(responseMessages, result.text);
|
|
689
|
-
const approvalRequests = extractToolApprovalInputRequests({ content: result.content ?? [] });
|
|
690
|
-
const approvalRequestCallIds = new Set(approvalRequests.map((request) => request.action.callId));
|
|
691
|
-
const questionRequests = extractQuestionInputRequests({
|
|
692
|
-
toolCalls: result.toolCalls,
|
|
693
|
-
excludedCallIds: approvalRequestCallIds,
|
|
694
|
-
});
|
|
695
|
-
const inputRequests = [...approvalRequests, ...questionRequests];
|
|
696
|
-
const baseSession = {
|
|
697
|
-
...session,
|
|
698
|
-
compaction: createNextCompactionConfig(session.compaction, promptMessages, result),
|
|
699
|
-
};
|
|
700
|
-
const pendingRuntimeActions = (result.toolCalls ?? [])
|
|
701
|
-
.filter((toolCall) => !isInvalidToolCall(toolCall))
|
|
702
|
-
.filter((toolCall) => config.tools.get(toolCall.toolName)?.runtimeAction !== undefined)
|
|
703
|
-
.map((toolCall) => createRuntimeActionRequestFromToolCall({
|
|
704
|
-
toolCall,
|
|
705
|
-
tools: config.tools,
|
|
706
|
-
}));
|
|
707
|
-
if (pendingRuntimeActions.length > 0) {
|
|
708
|
-
return {
|
|
709
|
-
next: null,
|
|
710
|
-
session: setPendingRuntimeActionBatch({
|
|
711
|
-
actions: pendingRuntimeActions,
|
|
712
|
-
event: {
|
|
713
|
-
sequence: emissionState.sequence,
|
|
714
|
-
stepIndex: emissionState.stepIndex,
|
|
715
|
-
turnId: emissionState.turnId,
|
|
716
|
-
},
|
|
717
|
-
responseMessages,
|
|
718
|
-
session: { ...baseSession, history: [...promptMessages] },
|
|
719
|
-
}),
|
|
720
|
-
};
|
|
721
|
-
}
|
|
722
|
-
// --- Park on input requests -----------------------------------------------
|
|
723
|
-
if (inputRequests.length > 0) {
|
|
724
|
-
let parkedSession = setPendingInputBatch({
|
|
725
|
-
requests: inputRequests,
|
|
726
|
-
responseMessages,
|
|
727
|
-
session: { ...baseSession, history: [...promptMessages] },
|
|
728
|
-
});
|
|
729
|
-
if (emit) {
|
|
730
|
-
await emit(createInputRequestedEvent({
|
|
731
|
-
requests: inputRequests,
|
|
732
|
-
sequence: emissionState.sequence,
|
|
733
|
-
stepIndex: emissionState.stepIndex,
|
|
734
|
-
turnId: emissionState.turnId,
|
|
735
|
-
}));
|
|
736
|
-
if (config.mode === "conversation") {
|
|
737
|
-
emissionState = await emitTurnEpilogue(emit, emissionState, config.mode);
|
|
738
|
-
parkedSession = setHarnessEmissionState(parkedSession, emissionState);
|
|
739
|
-
}
|
|
740
|
-
}
|
|
741
|
-
return { next: null, session: parkedSession };
|
|
742
|
-
}
|
|
743
|
-
// --- Continue or terminate ------------------------------------------------
|
|
744
|
-
const prunedHistory = pruneToolResults(promptMessages, config.retentionPolicies);
|
|
745
|
-
const historyWasPruned = prunedHistory !== promptMessages;
|
|
746
|
-
// When pruning rewrites messages that the model already counted, the
|
|
747
|
-
// exact input-token snapshot recorded by createNextCompactionConfig
|
|
748
|
-
// becomes stale. Clear it so the next step falls back to the
|
|
749
|
-
// estimation heuristic instead of overestimating and compacting early.
|
|
750
|
-
let compaction = baseSession.compaction;
|
|
751
|
-
if (historyWasPruned && compaction.lastKnownInputTokens !== undefined) {
|
|
752
|
-
compaction = {
|
|
753
|
-
recentWindowSize: compaction.recentWindowSize,
|
|
754
|
-
threshold: compaction.threshold,
|
|
755
|
-
};
|
|
756
|
-
}
|
|
757
|
-
const updatedHistory = [...prunedHistory, ...responseMessages];
|
|
758
|
-
let nextSession = { ...baseSession, compaction, history: updatedHistory };
|
|
759
|
-
const continueLoop = responseMessages.at(-1)?.role === "tool" || hasDeferredStepInput(nextSession);
|
|
760
|
-
if (emit) {
|
|
761
|
-
if (!continueLoop) {
|
|
762
|
-
emissionState = await emitTurnEpilogue(emit, emissionState, config.mode);
|
|
763
|
-
}
|
|
764
|
-
else {
|
|
765
|
-
emissionState = advanceStep(emissionState);
|
|
766
|
-
}
|
|
767
|
-
nextSession = setHarnessEmissionState(nextSession, emissionState);
|
|
768
|
-
}
|
|
769
|
-
if (continueLoop) {
|
|
770
|
-
return { next: runStep, session: nextSession };
|
|
771
|
-
}
|
|
772
|
-
return {
|
|
773
|
-
next: config.mode === "task" ? { done: true, output: stepOutput ?? "" } : null,
|
|
774
|
-
session: nextSession,
|
|
775
|
-
};
|
|
776
|
-
}
|
|
777
|
-
function createNextCompactionConfig(current, promptMessages, result) {
|
|
778
|
-
const next = {
|
|
779
|
-
recentWindowSize: current.recentWindowSize,
|
|
780
|
-
threshold: current.threshold,
|
|
781
|
-
};
|
|
782
|
-
if (result.usage?.inputTokens !== undefined) {
|
|
783
|
-
next.lastKnownInputTokens = result.usage.inputTokens;
|
|
784
|
-
next.lastKnownPromptMessageCount = promptMessages.length;
|
|
785
|
-
}
|
|
786
|
-
return next;
|
|
787
|
-
}
|
|
788
|
-
/**
|
|
789
|
-
* Runs the compaction pipeline once if the session's input-token estimate
|
|
790
|
-
* is over the configured threshold. Mutates neither input; returns the new
|
|
791
|
-
* messages array and (possibly updated) session.
|
|
792
|
-
*
|
|
793
|
-
* Kept in the tool-loop (rather than the AI SDK's `prepareStep` hook) so
|
|
794
|
-
* the compacted messages flow through the same `messages` variable the
|
|
795
|
-
* harness uses to rebuild `session.history` after the step.
|
|
796
|
-
*/
|
|
797
|
-
async function maybeCompact(input) {
|
|
798
|
-
const { emit, emissionState } = input;
|
|
799
|
-
let messages = input.messages;
|
|
800
|
-
let session = input.session;
|
|
801
|
-
if (!shouldCompact(messages, session.compaction)) {
|
|
802
|
-
return { messages, session };
|
|
803
|
-
}
|
|
804
|
-
const compaction = await resolveCompactionModel({
|
|
805
|
-
compactionModelReference: session.agent.compactionModelReference,
|
|
806
|
-
model: input.model,
|
|
807
|
-
modelReference: session.agent.modelReference,
|
|
808
|
-
resolveModel: input.resolveModel,
|
|
809
|
-
});
|
|
810
|
-
if (emit) {
|
|
811
|
-
await emit(createCompactionRequestedEvent({
|
|
812
|
-
modelId: formatLanguageModelGatewayId(compaction.model),
|
|
813
|
-
sequence: emissionState.sequence,
|
|
814
|
-
sessionId: session.sessionId,
|
|
815
|
-
turnId: emissionState.turnId,
|
|
816
|
-
usageInputTokens: getInputTokenCount(messages, session.compaction),
|
|
817
|
-
}));
|
|
818
|
-
}
|
|
819
|
-
messages = await compactMessages(messages, compaction.model, session.compaction, compaction.providerOptions, input.telemetry, input.headers);
|
|
820
|
-
if (input.onCompaction) {
|
|
821
|
-
const compacted = await input.onCompaction(session);
|
|
822
|
-
session = compacted.session;
|
|
823
|
-
for (const msg of compacted.messages) {
|
|
824
|
-
messages.push(msg);
|
|
825
|
-
}
|
|
826
|
-
}
|
|
827
|
-
if (emit) {
|
|
828
|
-
await emit(createCompactionCompletedEvent({
|
|
829
|
-
modelId: formatLanguageModelGatewayId(compaction.model),
|
|
830
|
-
sequence: emissionState.sequence,
|
|
831
|
-
sessionId: session.sessionId,
|
|
832
|
-
turnId: emissionState.turnId,
|
|
833
|
-
}));
|
|
834
|
-
}
|
|
835
|
-
return { messages, session };
|
|
836
|
-
}
|
|
837
|
-
/**
|
|
838
|
-
* Creates an approval-key resolver from the tool map. The resolver computes
|
|
839
|
-
* compound keys at recording time instead of pre-computing and persisting
|
|
840
|
-
* them on the pending batch.
|
|
841
|
-
*/
|
|
842
|
-
function resolveApprovalKeyFromTools(tools) {
|
|
843
|
-
return (request) => {
|
|
844
|
-
const toolDef = tools.get(request.action.toolName);
|
|
845
|
-
if (toolDef?.approvalKey === undefined) {
|
|
846
|
-
return undefined;
|
|
847
|
-
}
|
|
848
|
-
return toolDef.approvalKey(request.action.input);
|
|
849
|
-
};
|
|
850
|
-
}
|
|
851
|
-
/**
|
|
852
|
-
* Retries `fn` with exponential backoff while the thrown error is
|
|
853
|
-
* classified as `"retry"`. Rethrows the last error once attempts are
|
|
854
|
-
* exhausted or the error is classified as something other than
|
|
855
|
-
* transient.
|
|
856
|
-
*/
|
|
857
|
-
async function runModelCallWithRetries(fn, diag) {
|
|
858
|
-
for (let attempt = 1;; attempt++) {
|
|
859
|
-
try {
|
|
860
|
-
return await fn();
|
|
861
|
-
}
|
|
862
|
-
catch (error) {
|
|
863
|
-
if (attempt === MODEL_CALL_MAX_ATTEMPTS || classifyModelCallError(error) !== "retry") {
|
|
864
|
-
throw error;
|
|
865
|
-
}
|
|
866
|
-
const delayMs = MODEL_CALL_RETRY_BASE_DELAY_MS * 2 ** (attempt - 1) + Math.floor(Math.random() * 250);
|
|
867
|
-
log.warn("model call failed transiently — retrying", {
|
|
868
|
-
attempt,
|
|
869
|
-
delayMs,
|
|
870
|
-
sessionId: diag.sessionId,
|
|
871
|
-
turnId: diag.turnId,
|
|
872
|
-
error,
|
|
873
|
-
});
|
|
874
|
-
await new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
875
|
-
}
|
|
876
|
-
}
|
|
877
|
-
}
|
|
1
|
+
import{createErrorId,createLogger,formatError,recordErrorOnSpan}from"#internal/logging.js";import{toErrorMessage}from"#shared/errors.js";import{createCompactionCompletedEvent,createCompactionRequestedEvent,createInputRequestedEvent}from"#protocol/message.js";import{resolveInstalledPackageInfo}from"#internal/application/package.js";import{formatLanguageModelGatewayId}from"#internal/runtime-model.js";import{contextStorage}from"#context/container.js";import{context,trace}from"#compiled/@opentelemetry/api/index.js";import{ConnectionRegistryKey,DiscoveredConnectionToolsKey}from"#runtime/framework-tools/connection-search.js";import{ToolLoopAgent,isStepCount}from"ai";import{advanceStep,emitFailedStep,emitRecoverableFailedTurn,emitStreamContent,emitTurnEpilogue,emitTurnPreamble,getHarnessEmissionState,setHarnessEmissionState}from"#harness/emission.js";import{consumeDeferredStepInput,getApprovedTools,hasDeferredStepInput,hasStepInput,resolvePendingInput,setPendingInputBatch}from"#harness/input-requests.js";import{createRuntimeActionRequestFromToolCall,resolvePendingRuntimeActions,setPendingRuntimeActionBatch}from"#harness/runtime-actions.js";import{resolveAssistantStepText}from"#harness/messages.js";import{ASK_QUESTION_TOOL_NAME}from"#runtime/framework-tools/ask-question.js";import{WEB_SEARCH_TOOL_DEFINITION}from"#runtime/framework-tools/web-search.js";import{extractQuestionInputRequests,extractToolApprovalInputRequests}from"#harness/input-extraction.js";import{applyLastToolCacheBreakpoint,detectPromptCachePath,getAnthropicCacheMarker}from"#harness/prompt-cache.js";import{resolveFrameworkToolFromUpstreamType,resolveGatewayPinForWebSearchBackend,resolveWebSearchBackend}from"#harness/provider-tools.js";import{resolveConnectionToolsFromState}from"#runtime/framework-tools/connection-tools.js";import{hydrateSandboxAttachments,stageAttachmentsToSandbox}from"#harness/attachment-staging.js";import{compactMessages,getInputTokenCount,resolveCompactionModel,shouldCompact}from"#harness/compaction.js";import{getInstrumentationConfig}from"#harness/instrumentation-config.js";import{classifyModelCallError,extractModelCallErrorDetails,extractUnsupportedProviderToolTypes,summarizeKnownModelCallConfigError,summarizeKnownModelCallRequestError}from"#harness/model-call-error.js";import{ensureOtelIntegration}from"#harness/otel-integration.js";import{buildStepHooks,emitStepActions,isInvalidToolCall}from"#harness/step-hooks.js";import{pruneToolResults}from"#harness/tool-result-pruning.js";import{buildToolSetWithProviderTools}from"#harness/tools.js";var environment=process.env.NODE_ENV??`unknown`,ashVersion=resolveInstalledPackageInfo().version,log=createLogger(`harness.tool-loop`),MODEL_CALL_MAX_ATTEMPTS=3,MODEL_CALL_RETRY_BASE_DELAY_MS=500;function enrichTelemetry(e,t){if(e!==void 0)return{functionId:e.functionId??t,isEnabled:!0,recordInputs:e.recordInputs??!0,recordOutputs:e.recordOutputs??!0}}function buildTelemetryRuntimeContext(e,t){if(e!==void 0)return{...e.metadata,"ash.continuation_token":t.continuationToken,"ash.environment":environment,"ash.session.id":t.sessionId,"ash.version":ashVersion}}function resolveGatewayPinForStep(e){if(e.cachePath.kind!==`gateway-auto`||e.tools[WEB_SEARCH_TOOL_DEFINITION.name]===void 0)return;let t=resolveWebSearchBackend(e.modelReference);return t===null?void 0:resolveGatewayPinForWebSearchBackend(t)??void 0}function buildGatewayAttributionHeaders(e,t){if(typeof e!=`string`)return;let n=t?.agentName??t?.agentId,r=process.env.VERCEL_PROJECT_PRODUCTION_URL||process.env.VERCEL_URL,i=r?`https://${r}`:void 0;if(!n&&!i)return;let a={};return n&&(a[`x-title`]=n),i&&(a[`http-referer`]=i),a}var TURN_TRACE_STATE_KEY=`ash.harness.turnTrace`;function getTurnTraceState(e){return e.state?.[TURN_TRACE_STATE_KEY]}function setTurnTraceState(e,t){let n={traceId:t.traceId,spanId:t.spanId,traceFlags:t.traceFlags};return{...e,state:{...e.state,[TURN_TRACE_STATE_KEY]:n}}}function resolveStepOtelContext(e,t,n){if(t)return trace.setSpan(context.active(),t);if(e){let e=getTurnTraceState(n);if(e){let t=trace.wrapSpanContext({traceId:e.traceId,spanId:e.spanId,traceFlags:e.traceFlags});return trace.setSpan(context.active(),t)}}}function createToolLoopHarness(t){let n=t.emit,a=getInstrumentationConfig();a!==void 0&&ensureOtelIntegration();let o=a===void 0?void 0:trace.getTracer(`ash`),s=t.runtimeIdentity?.agentName;async function runStep(e,t){let n;if(o&&hasStepInput(t)){let t=a?.functionId??s,r={"ash.version":ashVersion,"ash.environment":environment,"ash.session.id":e.sessionId,"ash.continuation_token":e.continuationToken};t&&(r[`ai.telemetry.functionId`]=t),n=o.startSpan(`ai.ash.turn`,{attributes:r})}let r=resolveStepOtelContext(o,n,e),executeStep=()=>executeStepBody(e,t,n);try{return r?await context.with(r,executeStep):await executeStep()}finally{n?.end()}}async function executeStepBody(o,c,l){let d=o;l&&(d=setTurnTraceState(d,l.spanContext()));let f=getHarnessEmissionState(d),_=consumeDeferredStepInput({input:c,session:d});d=_.session;let x=await resolvePendingRuntimeActions({emit:n,session:d,stepInput:_.input});if(x.outcome===`unresolved`)return{next:null,session:x.session};d=x.session;let T=resolvePendingInput({history:x.messages,resolveApprovalKey:resolveApprovalKeyFromTools(t.tools),session:d,stepInput:_.input});if(T.outcome===`unresolved`)return{next:null,session:T.session};n&&hasStepInput(c)&&(f=await emitTurnPreamble(n,c??{},f,t.runtimeIdentity),d=setHarnessEmissionState(d,f),l&&l.setAttribute(`ash.turn.id`,f.turnId)),d=T.session;let E=T.messages;if(_.input?.message!==void 0&&!T.deferredMessage){let e=await stageAttachmentsToSandbox(_.input.message);E.push({content:e,role:`user`})}let D=await t.resolveModel(d.agent.modelReference),O=detectPromptCachePath(D),k=O.kind===`anthropic-direct`?getAnthropicCacheMarker():void 0,A=buildGatewayAttributionHeaders(D,t.runtimeIdentity);({messages:E,session:d}=await maybeCompact({emit:n,emissionState:f,headers:A,messages:E,model:D,onCompaction:t.onCompaction,resolveModel:t.resolveModel,session:d,telemetry:enrichTelemetry(a,s)??void 0}));let j=getApprovedTools(d),M=contextStorage.getStore(),N=M?.get(ConnectionRegistryKey),P=M?.get(DiscoveredConnectionToolsKey),F=await hydrateSandboxAttachments(E),I=_.input?.modelContext,L=[],R=[];for(let e of F)e.role===`system`?L.push(e):R.push(e);if(I!==void 0)for(let e of I)e.role===`system`?L.push(e):R.push(e);let z=R,runOneModelCall=async e=>{let r=await buildToolSetWithProviderTools({approvedTools:j,capabilities:t.capabilities,disabledProviderTools:e.disabledProviderTools,modelReference:d.agent.modelReference,tools:t.tools});if(N!==void 0&&P!==void 0){let e=await resolveConnectionToolsFromState(N,P,{approvedTools:j,existingToolNames:new Set(Object.keys(r))});Object.assign(r,e)}let i=k?applyLastToolCacheBreakpoint(r,k):r,o=resolveGatewayPinForStep({cachePath:O,modelReference:d.agent.modelReference,tools:i}),c=e.extraSystemNote?[{role:`system`,content:e.extraSystemNote}]:[],l=d.agent.system?[{role:`system`,content:d.agent.system}]:[],u=L.length>0||c.length>0?[...c,...l,...L]:d.agent.system||void 0,p=buildStepHooks({cachePath:O,emit:n,emissionState:f,emitStepStarted:e.suppressStepStartedEmission!==!0,gatewayPinProvider:o,marker:k,session:d}),m=new ToolLoopAgent({headers:A,instructions:u,model:D,onError(){},onStepFinish:p.onStepFinish,prepareStep:p.prepareStep,runtimeContext:buildTelemetryRuntimeContext(a,d),stopWhen:isStepCount(1),telemetry:enrichTelemetry(a,s),tools:i});return runModelCallWithRetries(async()=>{if(n){let e=await m.stream({messages:z}),{inlineActionResultCallIds:r,inlineToolResultParts:i}=await emitStreamContent(n,f,e.fullStream),a=await p.stepResult;return await emitStepActions(n,f,a,{excludedActionToolNames:new Set([ASK_QUESTION_TOOL_NAME]),inlineActionResultCallIds:r,tools:t.tools}),i.length>0?{content:a.content,finishReason:a.finishReason,response:{...a.response,messages:[{role:`tool`,content:[...i]},...a.response.messages]},text:a.text,toolCalls:a.toolCalls,toolResults:a.toolResults,usage:a.usage}:a}return await m.generate({messages:z}),await p.stepResult},{sessionId:d.sessionId,turnId:f.turnId})},B;try{B=await runOneModelCall({})}catch(t){let a=await attemptUnsupportedProviderToolRecovery({error:t,runOneModelCall,sessionId:d.sessionId,turnId:f.turnId});if(a.outcome===`recovered`)B=a.result;else{let t=a.error;if(l&&recordErrorOnSpan(l,t),!n)throw t;let o=classifyModelCallError(t),s=createErrorId(),c=o===`terminal`?summarizeKnownModelCallConfigError(t):null,u=c===null?summarizeKnownModelCallRequestError(t):null,p=c?.message??u?.message??toErrorMessage(t),m=extractModelCallErrorDetails(t),h=buildModelCallFailureDetails({configSummary:c,error:t,errorId:s,modelCallDetails:m,requestSummary:u}),g=buildModelCallFailureLogFields({error:t,errorId:s,modelCallDetails:m,requestSummary:u,sessionId:d.sessionId,turnId:f.turnId});return o===`terminal`?(c===null?log.error(u?.message??`model call failed terminally`,g):log.error(`${c.name}: ${c.message}`,{errorId:s,sessionId:d.sessionId,turnId:f.turnId}),await emitFailedStep(n,f,{code:`MODEL_CALL_FAILED`,details:h,message:p,sessionId:d.sessionId}),{next:{done:!0,output:``},session:d}):(log.error(u?.message??`model call failed — parking session for retry by the user`,g),f=await emitRecoverableFailedTurn(n,f,{code:`MODEL_CALL_FAILED`,details:h,message:p}),{next:null,session:setHarnessEmissionState(d,f)})}}return handleStepResult({config:t,emit:n,emissionState:f,promptMessages:E,result:B,runStep,session:d})}return runStep}function buildModelCallFailureDetails(e){let{configSummary:t,error:r,errorId:a,modelCallDetails:o,requestSummary:s}=e;return t===null?s===null?{...formatError(r,a),...o}:{errorId:a,message:toErrorMessage(r),name:s.name,...o}:{errorId:a,message:t.message,name:t.name,...o}}function buildModelCallFailureLogFields(e){let t={errorId:e.errorId,sessionId:e.sessionId,turnId:e.turnId};return e.requestSummary===null?{...t,error:e.error}:{...t,details:e.modelCallDetails}}async function attemptUnsupportedProviderToolRecovery(e){let t=extractUnsupportedProviderToolTypes(e.error);if(t.length===0)return{outcome:`failed`,error:e.error};let n=[];for(let e of t){let t=resolveFrameworkToolFromUpstreamType(e);t!==null&&!n.includes(t)&&n.push(t)}if(n.length===0)return{outcome:`failed`,error:e.error};log.warn(`disabling unsupported provider tool(s); retrying step once`,{disabled:n,sessionId:e.sessionId,turnId:e.turnId,upstreamTypes:t});try{return{outcome:`recovered`,result:await e.runOneModelCall({disabledProviderTools:new Set(n),extraSystemNote:buildDisabledToolNote(n),suppressStepStartedEmission:!0})}}catch(e){return{outcome:`failed`,error:e}}}function buildDisabledToolNote(e){let t=e.join(`, `);return`The following ${e.length===1?`tool is`:`tools are`} not available with the current model and has been removed: ${t}. Proceed using the remaining tools or your training knowledge.`}async function handleStepResult(e){let{config:t,emit:n,promptMessages:r,result:i,runStep:a}=e,{emissionState:o,session:c}=e,l=i.response.messages,u=resolveAssistantStepText(l,i.text),d=extractToolApprovalInputRequests({content:i.content??[]}),f=new Set(d.map(e=>e.action.callId)),p=extractQuestionInputRequests({toolCalls:i.toolCalls,excludedCallIds:f}),m=[...d,...p],h={...c,compaction:createNextCompactionConfig(c.compaction,r,i)},g=(i.toolCalls??[]).filter(e=>!isInvalidToolCall(e)).filter(e=>t.tools.get(e.toolName)?.runtimeAction!==void 0).map(e=>createRuntimeActionRequestFromToolCall({toolCall:e,tools:t.tools}));if(g.length>0)return{next:null,session:setPendingRuntimeActionBatch({actions:g,event:{sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId},responseMessages:l,session:{...h,history:[...r]}})};if(m.length>0){let e=setPendingInputBatch({requests:m,responseMessages:l,session:{...h,history:[...r]}});return n&&(await n(createInputRequestedEvent({requests:m,sequence:o.sequence,stepIndex:o.stepIndex,turnId:o.turnId})),t.mode===`conversation`&&(o=await emitTurnEpilogue(n,o,t.mode),e=setHarnessEmissionState(e,o))),{next:null,session:e}}let v=pruneToolResults(r,t.retentionPolicies),y=v!==r,b=h.compaction;y&&b.lastKnownInputTokens!==void 0&&(b={recentWindowSize:b.recentWindowSize,threshold:b.threshold});let S=[...v,...l],C={...h,compaction:b,history:S},w=l.at(-1)?.role===`tool`||hasDeferredStepInput(C);return n&&(o=w?advanceStep(o):await emitTurnEpilogue(n,o,t.mode),C=setHarnessEmissionState(C,o)),w?{next:a,session:C}:{next:t.mode===`task`?{done:!0,output:u??``}:null,session:C}}function createNextCompactionConfig(e,t,n){let r={recentWindowSize:e.recentWindowSize,threshold:e.threshold};return n.usage?.inputTokens!==void 0&&(r.lastKnownInputTokens=n.usage.inputTokens,r.lastKnownPromptMessageCount=t.length),r}async function maybeCompact(e){let{emit:t,emissionState:n}=e,r=e.messages,i=e.session;if(!shouldCompact(r,i.compaction))return{messages:r,session:i};let s=await resolveCompactionModel({compactionModelReference:i.agent.compactionModelReference,model:e.model,modelReference:i.agent.modelReference,resolveModel:e.resolveModel});if(t&&await t(createCompactionRequestedEvent({modelId:formatLanguageModelGatewayId(s.model),sequence:n.sequence,sessionId:i.sessionId,turnId:n.turnId,usageInputTokens:getInputTokenCount(r,i.compaction)})),r=await compactMessages(r,s.model,i.compaction,s.providerOptions,e.telemetry,e.headers),e.onCompaction){let t=await e.onCompaction(i);i=t.session;for(let e of t.messages)r.push(e)}return t&&await t(createCompactionCompletedEvent({modelId:formatLanguageModelGatewayId(s.model),sequence:n.sequence,sessionId:i.sessionId,turnId:n.turnId})),{messages:r,session:i}}function resolveApprovalKeyFromTools(e){return t=>{let n=e.get(t.action.toolName);if(n?.approvalKey!==void 0)return n.approvalKey(t.action.input)}}async function runModelCallWithRetries(e,t){for(let n=1;;n++)try{return await e()}catch(e){if(n===MODEL_CALL_MAX_ATTEMPTS||classifyModelCallError(e)!==`retry`)throw e;let r=MODEL_CALL_RETRY_BASE_DELAY_MS*2**(n-1)+Math.floor(Math.random()*250);log.warn(`model call failed transiently — retrying`,{attempt:n,delayMs:r,sessionId:t.sessionId,turnId:t.turnId,error:e}),await new Promise(e=>setTimeout(e,r))}}export{createToolLoopHarness};
|