@evalops/maestro 0.10.8 → 0.10.11
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/README.md +3 -1
- package/dist/agent/action-approval.d.ts +6 -0
- package/dist/agent/action-approval.d.ts.map +1 -1
- package/dist/agent/action-approval.js.map +1 -1
- package/dist/agent/agent.d.ts +13 -1
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/agent.js +368 -1
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/auto-compaction.d.ts +4 -4
- package/dist/agent/auto-compaction.d.ts.map +1 -1
- package/dist/agent/auto-compaction.js.map +1 -1
- package/dist/agent/compaction-cleanup.d.ts +2 -0
- package/dist/agent/compaction-cleanup.d.ts.map +1 -1
- package/dist/agent/compaction-cleanup.js +17 -2
- package/dist/agent/compaction-cleanup.js.map +1 -1
- package/dist/agent/compaction.d.ts +3 -1
- package/dist/agent/compaction.d.ts.map +1 -1
- package/dist/agent/compaction.js +10 -2
- package/dist/agent/compaction.js.map +1 -1
- package/dist/agent/context-manager.d.ts +4 -0
- package/dist/agent/context-manager.d.ts.map +1 -1
- package/dist/agent/context-manager.js +8 -0
- package/dist/agent/context-manager.js.map +1 -1
- package/dist/agent/context-providers.d.ts +2 -0
- package/dist/agent/context-providers.d.ts.map +1 -1
- package/dist/agent/context-providers.js +3 -2
- package/dist/agent/context-providers.js.map +1 -1
- package/dist/agent/providers/google-gemini-cli.js +17 -5
- package/dist/agent/providers/google.js +174 -144
- package/dist/agent/providers/openai-codex-responses.d.ts +4 -0
- package/dist/agent/providers/openai-codex-responses.d.ts.map +1 -0
- package/dist/agent/providers/openai-codex-responses.js +637 -0
- package/dist/agent/providers/openai-codex-responses.js.map +1 -0
- package/dist/agent/providers/openai-codex-session.d.ts +18 -0
- package/dist/agent/providers/openai-codex-session.d.ts.map +1 -0
- package/dist/agent/providers/openai-codex-session.js +53 -0
- package/dist/agent/providers/openai-codex-session.js.map +1 -0
- package/dist/agent/providers/openai-responses-sdk.d.ts.map +1 -1
- package/dist/agent/providers/openai-responses-sdk.js +16 -6
- package/dist/agent/providers/openai-responses-sdk.js.map +1 -1
- package/dist/agent/providers/openai-shared.d.ts +12 -5
- package/dist/agent/providers/openai-shared.d.ts.map +1 -1
- package/dist/agent/providers/openai-shared.js +291 -2
- package/dist/agent/providers/openai-shared.js.map +1 -1
- package/dist/agent/providers/openai.d.ts +1 -1
- package/dist/agent/providers/openai.d.ts.map +1 -1
- package/dist/agent/providers/openai.js +48 -20
- package/dist/agent/providers/openai.js.map +1 -1
- package/dist/agent/providers/vertex.js +7 -0
- package/dist/agent/tracing.d.ts +16 -5
- package/dist/agent/tracing.d.ts.map +1 -1
- package/dist/agent/tracing.js +44 -2
- package/dist/agent/tracing.js.map +1 -1
- package/dist/agent/transport/create-provider-stream.d.ts.map +1 -1
- package/dist/agent/transport/create-provider-stream.js +9 -0
- package/dist/agent/transport/create-provider-stream.js.map +1 -1
- package/dist/agent/transport/tool-execution-bridge.d.ts +86 -0
- package/dist/agent/transport/tool-execution-bridge.d.ts.map +1 -0
- package/dist/agent/transport/tool-execution-bridge.js +665 -0
- package/dist/agent/transport/tool-execution-bridge.js.map +1 -0
- package/dist/agent/transport/tool-execution.d.ts +3 -0
- package/dist/agent/transport/tool-execution.d.ts.map +1 -1
- package/dist/agent/transport/tool-execution.js +16 -1
- package/dist/agent/transport/tool-execution.js.map +1 -1
- package/dist/agent/transport/tool-safety-pipeline.d.ts +7 -1
- package/dist/agent/transport/tool-safety-pipeline.d.ts.map +1 -1
- package/dist/agent/transport/tool-safety-pipeline.js +207 -40
- package/dist/agent/transport/tool-safety-pipeline.js.map +1 -1
- package/dist/agent/transport/tool-update-queue.d.ts +2 -0
- package/dist/agent/transport/tool-update-queue.d.ts.map +1 -1
- package/dist/agent/transport/tool-update-queue.js.map +1 -1
- package/dist/agent/transport.d.ts +3 -0
- package/dist/agent/transport.d.ts.map +1 -1
- package/dist/agent/transport.js +96 -16
- package/dist/agent/transport.js.map +1 -1
- package/dist/agent/types.d.ts +50 -2
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/approvals/platform-action-approval.d.ts +32 -0
- package/dist/approvals/platform-action-approval.d.ts.map +1 -0
- package/dist/approvals/platform-action-approval.js +210 -0
- package/dist/approvals/platform-action-approval.js.map +1 -0
- package/dist/approvals/service-client.d.ts +56 -0
- package/dist/approvals/service-client.d.ts.map +1 -0
- package/dist/approvals/service-client.js +316 -0
- package/dist/approvals/service-client.js.map +1 -0
- package/dist/audit/logger.d.ts +4 -4
- package/dist/bootstrap/auth-setup.d.ts +2 -2
- package/dist/bootstrap/auth-setup.d.ts.map +1 -1
- package/dist/bootstrap/auth-setup.js +4 -7
- package/dist/bootstrap/auth-setup.js.map +1 -1
- package/dist/cli/args.d.ts +2 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +29 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/commands/codex.d.ts +2 -0
- package/dist/cli/commands/codex.d.ts.map +1 -0
- package/dist/cli/commands/codex.js +65 -0
- package/dist/cli/commands/codex.js.map +1 -0
- package/dist/cli/commands/config.js +1 -1
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/evalops.d.ts +2 -0
- package/dist/cli/commands/evalops.d.ts.map +1 -0
- package/dist/cli/commands/evalops.js +74 -0
- package/dist/cli/commands/evalops.js.map +1 -0
- package/dist/cli/commands/hosted-runner.d.ts +23 -0
- package/dist/cli/commands/hosted-runner.d.ts.map +1 -0
- package/dist/cli/commands/hosted-runner.js +241 -0
- package/dist/cli/commands/hosted-runner.js.map +1 -0
- package/dist/cli/commands/init.d.ts +4 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +140 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/memory.d.ts.map +1 -1
- package/dist/cli/commands/memory.js +23 -30
- package/dist/cli/commands/memory.js.map +1 -1
- package/dist/cli/commands/remote.d.ts +3 -0
- package/dist/cli/commands/remote.d.ts.map +1 -0
- package/dist/cli/commands/remote.js +631 -0
- package/dist/cli/commands/remote.js.map +1 -0
- package/dist/cli/commands/stats.d.ts +7 -0
- package/dist/cli/commands/stats.d.ts.map +1 -0
- package/dist/cli/commands/stats.js +167 -0
- package/dist/cli/commands/stats.js.map +1 -0
- package/dist/cli/headless-protocol.d.ts +16 -1
- package/dist/cli/headless-protocol.d.ts.map +1 -1
- package/dist/cli/headless-protocol.js +60 -4
- package/dist/cli/headless-protocol.js.map +1 -1
- package/dist/cli/headless.d.ts.map +1 -1
- package/dist/cli/headless.js +1 -0
- package/dist/cli/headless.js.map +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +44 -1
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/jsonl-writer.d.ts.map +1 -1
- package/dist/cli/jsonl-writer.js +19 -6
- package/dist/cli/jsonl-writer.js.map +1 -1
- package/dist/cli-tui/client-tools/client-tool-controller.d.ts.map +1 -1
- package/dist/cli-tui/client-tools/client-tool-controller.js +17 -1
- package/dist/cli-tui/client-tools/client-tool-controller.js.map +1 -1
- package/dist/cli-tui/commands/access-command.js +1 -1
- package/dist/cli-tui/commands/access-command.js.map +1 -1
- package/dist/cli-tui/commands/audit-command.js +1 -1
- package/dist/cli-tui/commands/audit-command.js.map +1 -1
- package/dist/cli-tui/commands/command-catalog.d.ts +29 -0
- package/dist/cli-tui/commands/command-catalog.d.ts.map +1 -0
- package/dist/cli-tui/commands/command-catalog.js +645 -0
- package/dist/cli-tui/commands/command-catalog.js.map +1 -0
- package/dist/cli-tui/commands/command-registry-adapter.d.ts +12 -0
- package/dist/cli-tui/commands/command-registry-adapter.d.ts.map +1 -0
- package/dist/cli-tui/commands/command-registry-adapter.js +120 -0
- package/dist/cli-tui/commands/command-registry-adapter.js.map +1 -0
- package/dist/cli-tui/commands/command-suite-catalog.d.ts +14 -0
- package/dist/cli-tui/commands/command-suite-catalog.d.ts.map +1 -0
- package/dist/cli-tui/commands/command-suite-catalog.js +147 -0
- package/dist/cli-tui/commands/command-suite-catalog.js.map +1 -0
- package/dist/cli-tui/commands/{grouped-command-handlers.d.ts → command-suite-handlers.d.ts} +27 -26
- package/dist/cli-tui/commands/command-suite-handlers.d.ts.map +1 -0
- package/dist/cli-tui/commands/command-suite-handlers.js +110 -0
- package/dist/cli-tui/commands/command-suite-handlers.js.map +1 -0
- package/dist/cli-tui/commands/hotkeys-command.d.ts +1 -1
- package/dist/cli-tui/commands/hotkeys-command.d.ts.map +1 -1
- package/dist/cli-tui/commands/hotkeys-command.js +2 -2
- package/dist/cli-tui/commands/hotkeys-command.js.map +1 -1
- package/dist/cli-tui/commands/limits-command.js +1 -1
- package/dist/cli-tui/commands/limits-command.js.map +1 -1
- package/dist/cli-tui/commands/pii-command.js +1 -1
- package/dist/cli-tui/commands/pii-command.js.map +1 -1
- package/dist/cli-tui/commands/registry.d.ts +1 -1
- package/dist/cli-tui/commands/registry.d.ts.map +1 -1
- package/dist/cli-tui/commands/registry.js +29 -921
- package/dist/cli-tui/commands/registry.js.map +1 -1
- package/dist/cli-tui/commands/{grouped → subcommands}/auth-commands.d.ts +2 -1
- package/dist/cli-tui/commands/subcommands/auth-commands.d.ts.map +1 -0
- package/dist/cli-tui/commands/{grouped → subcommands}/auth-commands.js +22 -6
- package/dist/cli-tui/commands/subcommands/auth-commands.js.map +1 -0
- package/dist/cli-tui/commands/{grouped → subcommands}/config-commands.d.ts +0 -1
- package/dist/cli-tui/commands/subcommands/config-commands.d.ts.map +1 -0
- package/dist/cli-tui/commands/{grouped → subcommands}/config-commands.js +2 -2
- package/dist/cli-tui/commands/subcommands/config-commands.js.map +1 -0
- package/dist/cli-tui/commands/{grouped → subcommands}/diag-commands.d.ts +1 -2
- package/dist/cli-tui/commands/subcommands/diag-commands.d.ts.map +1 -0
- package/dist/cli-tui/commands/{grouped → subcommands}/diag-commands.js +5 -7
- package/dist/cli-tui/commands/subcommands/diag-commands.js.map +1 -0
- package/dist/cli-tui/commands/{grouped → subcommands}/git-commands.d.ts +0 -2
- package/dist/cli-tui/commands/subcommands/git-commands.d.ts.map +1 -0
- package/dist/cli-tui/commands/{grouped → subcommands}/git-commands.js +2 -2
- package/dist/cli-tui/commands/subcommands/git-commands.js.map +1 -0
- package/dist/cli-tui/commands/{grouped → subcommands}/index.d.ts +2 -2
- package/dist/cli-tui/commands/subcommands/index.d.ts.map +1 -0
- package/dist/cli-tui/commands/{grouped → subcommands}/index.js +2 -2
- package/dist/cli-tui/commands/subcommands/index.js.map +1 -0
- package/dist/cli-tui/commands/{grouped → subcommands}/safety-commands.d.ts +0 -1
- package/dist/cli-tui/commands/subcommands/safety-commands.d.ts.map +1 -0
- package/dist/cli-tui/commands/{grouped → subcommands}/safety-commands.js +12 -12
- package/dist/cli-tui/commands/subcommands/safety-commands.js.map +1 -0
- package/dist/cli-tui/commands/{grouped → subcommands}/session-commands.d.ts +1 -2
- package/dist/cli-tui/commands/subcommands/session-commands.d.ts.map +1 -0
- package/dist/cli-tui/commands/{grouped → subcommands}/session-commands.js +3 -3
- package/dist/cli-tui/commands/subcommands/session-commands.js.map +1 -0
- package/dist/cli-tui/commands/{grouped → subcommands}/tools-commands.d.ts +0 -1
- package/dist/cli-tui/commands/subcommands/tools-commands.d.ts.map +1 -0
- package/dist/cli-tui/commands/{grouped → subcommands}/tools-commands.js +2 -2
- package/dist/cli-tui/commands/subcommands/tools-commands.js.map +1 -0
- package/dist/cli-tui/commands/{grouped → subcommands}/ui-commands.d.ts +0 -1
- package/dist/cli-tui/commands/subcommands/ui-commands.d.ts.map +1 -0
- package/dist/cli-tui/commands/{grouped → subcommands}/ui-commands.js +5 -5
- package/dist/cli-tui/commands/subcommands/ui-commands.js.map +1 -0
- package/dist/cli-tui/commands/{grouped → subcommands}/undo-commands.d.ts +1 -2
- package/dist/cli-tui/commands/subcommands/undo-commands.d.ts.map +1 -0
- package/dist/cli-tui/commands/{grouped → subcommands}/undo-commands.js +6 -6
- package/dist/cli-tui/commands/subcommands/undo-commands.js.map +1 -0
- package/dist/cli-tui/commands/subcommands/usage-commands.d.ts.map +1 -0
- package/dist/cli-tui/commands/{grouped → subcommands}/usage-commands.js +2 -2
- package/dist/cli-tui/commands/subcommands/usage-commands.js.map +1 -0
- package/dist/cli-tui/commands/{grouped → subcommands}/utils.d.ts +15 -15
- package/dist/cli-tui/commands/subcommands/utils.d.ts.map +1 -0
- package/dist/cli-tui/commands/{grouped → subcommands}/utils.js +13 -8
- package/dist/cli-tui/commands/subcommands/utils.js.map +1 -0
- package/dist/cli-tui/commands/types.d.ts +3 -3
- package/dist/cli-tui/commands/types.d.ts.map +1 -1
- package/dist/cli-tui/commands/types.js.map +1 -1
- package/dist/cli-tui/editor-view.d.ts +1 -1
- package/dist/cli-tui/editor-view.d.ts.map +1 -1
- package/dist/cli-tui/editor-view.js +1 -1
- package/dist/cli-tui/editor-view.js.map +1 -1
- package/dist/cli-tui/oauth/oauth-flow-controller.d.ts +4 -0
- package/dist/cli-tui/oauth/oauth-flow-controller.d.ts.map +1 -1
- package/dist/cli-tui/oauth/oauth-flow-controller.js +76 -5
- package/dist/cli-tui/oauth/oauth-flow-controller.js.map +1 -1
- package/dist/cli-tui/run/run-controller.d.ts +2 -2
- package/dist/cli-tui/run/run-controller.d.ts.map +1 -1
- package/dist/cli-tui/run/run-controller.js +3 -2
- package/dist/cli-tui/run/run-controller.js.map +1 -1
- package/dist/cli-tui/run/run-shell-command.d.ts.map +1 -1
- package/dist/cli-tui/run/run-shell-command.js +11 -3
- package/dist/cli-tui/run/run-shell-command.js.map +1 -1
- package/dist/cli-tui/run/streaming-shell-command.d.ts.map +1 -1
- package/dist/cli-tui/run/streaming-shell-command.js +11 -3
- package/dist/cli-tui/run/streaming-shell-command.js.map +1 -1
- package/dist/cli-tui/selectors/model-selector.d.ts.map +1 -1
- package/dist/cli-tui/selectors/model-selector.js +1 -0
- package/dist/cli-tui/selectors/model-selector.js.map +1 -1
- package/dist/cli-tui/tui-renderer/agent-event-bridge.d.ts +8 -0
- package/dist/cli-tui/tui-renderer/agent-event-bridge.d.ts.map +1 -1
- package/dist/cli-tui/tui-renderer/agent-event-bridge.js +23 -2
- package/dist/cli-tui/tui-renderer/agent-event-bridge.js.map +1 -1
- package/dist/cli-tui/tui-renderer/command-registry-options.d.ts +3 -3
- package/dist/cli-tui/tui-renderer/command-registry-options.d.ts.map +1 -1
- package/dist/cli-tui/tui-renderer/command-registry-options.js +12 -2
- package/dist/cli-tui/tui-renderer/command-registry-options.js.map +1 -1
- package/dist/cli-tui/tui-renderer/command-suite-wiring.d.ts +32 -0
- package/dist/cli-tui/tui-renderer/command-suite-wiring.d.ts.map +1 -0
- package/dist/cli-tui/tui-renderer/command-suite-wiring.js +108 -0
- package/dist/cli-tui/tui-renderer/command-suite-wiring.js.map +1 -0
- package/dist/cli-tui/tui-renderer/input-controller.d.ts +2 -2
- package/dist/cli-tui/tui-renderer/input-controller.d.ts.map +1 -1
- package/dist/cli-tui/tui-renderer/input-controller.js +2 -2
- package/dist/cli-tui/tui-renderer/input-controller.js.map +1 -1
- package/dist/cli-tui/tui-renderer/ui-state-controller.d.ts +1 -1
- package/dist/cli-tui/tui-renderer/ui-state-controller.js +1 -1
- package/dist/cli-tui/tui-renderer/ui-state-controller.js.map +1 -1
- package/dist/cli-tui/tui-renderer.d.ts +1 -3
- package/dist/cli-tui/tui-renderer.d.ts.map +1 -1
- package/dist/cli-tui/tui-renderer.js +37 -83
- package/dist/cli-tui/tui-renderer.js.map +1 -1
- package/dist/cli-tui/utils/runtime-badges.d.ts +8 -0
- package/dist/cli-tui/utils/runtime-badges.d.ts.map +1 -1
- package/dist/cli-tui/utils/runtime-badges.js +58 -0
- package/dist/cli-tui/utils/runtime-badges.js.map +1 -1
- package/dist/cli.js +42555 -23133
- package/dist/cli.js.map +1 -1
- package/dist/config/env-vars.d.ts +4 -0
- package/dist/config/env-vars.d.ts.map +1 -1
- package/dist/config/env-vars.js +4 -0
- package/dist/config/env-vars.js.map +1 -1
- package/dist/config/feature-flags.d.ts +44 -0
- package/dist/config/feature-flags.d.ts.map +1 -1
- package/dist/config/feature-flags.js +214 -0
- package/dist/config/feature-flags.js.map +1 -1
- package/dist/connectors/service-client.d.ts +98 -0
- package/dist/connectors/service-client.d.ts.map +1 -0
- package/dist/connectors/service-client.js +459 -0
- package/dist/connectors/service-client.js.map +1 -0
- package/dist/conversation/render-model.d.ts.map +1 -1
- package/dist/conversation/render-model.js +53 -3
- package/dist/conversation/render-model.js.map +1 -1
- package/dist/db/health.d.ts +8 -0
- package/dist/db/health.d.ts.map +1 -0
- package/dist/db/health.js +64 -0
- package/dist/db/health.js.map +1 -0
- package/dist/db/migrate.d.ts +301 -0
- package/dist/db/migrate.d.ts.map +1 -1
- package/dist/db/migrate.js +186 -0
- package/dist/db/migrate.js.map +1 -1
- package/dist/db/migrations/0000_initial.sql +308 -0
- package/dist/db/migrations/0001_shared_sessions.sql +18 -0
- package/dist/db/migrations/0002_usage_metrics.sql +28 -0
- package/dist/db/migrations/0003_execution_traces.sql +18 -0
- package/dist/db/migrations/0004_workspace_config.sql +11 -0
- package/dist/db/migrations/0005_revenue_attribution.sql +31 -0
- package/dist/db/migrations/0006_hosted_session_storage.sql +51 -0
- package/dist/db/migrations/0007_reconcile_legacy_audit_hash_cache.sql +24 -0
- package/dist/db/migrations/0008_reconcile_legacy_webhook_deliveries.sql +290 -0
- package/dist/db/migrations/meta/0000_snapshot.json +2438 -0
- package/dist/db/migrations/meta/_journal.json +69 -0
- package/dist/db/schema.d.ts +2232 -844
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +187 -1
- package/dist/db/schema.js.map +1 -1
- package/dist/evalops/agent-bootstrap.d.ts +73 -0
- package/dist/evalops/agent-bootstrap.d.ts.map +1 -0
- package/dist/evalops/agent-bootstrap.js +380 -0
- package/dist/evalops/agent-bootstrap.js.map +1 -0
- package/dist/export-html.d.ts.map +1 -1
- package/dist/export-html.js +7 -4
- package/dist/export-html.js.map +1 -1
- package/dist/headless/utility-command-manager.d.ts +2 -1
- package/dist/headless/utility-command-manager.d.ts.map +1 -1
- package/dist/headless/utility-command-manager.js +12 -6
- package/dist/headless/utility-command-manager.js.map +1 -1
- package/dist/headless/utility-file-read.d.ts +1 -0
- package/dist/headless/utility-file-read.d.ts.map +1 -1
- package/dist/headless/utility-file-read.js +5 -1
- package/dist/headless/utility-file-read.js.map +1 -1
- package/dist/headless/utility-file-search.d.ts +1 -0
- package/dist/headless/utility-file-search.d.ts.map +1 -1
- package/dist/headless/utility-file-search.js +4 -1
- package/dist/headless/utility-file-search.js.map +1 -1
- package/dist/headless/utility-file-watch-manager.d.ts +2 -1
- package/dist/headless/utility-file-watch-manager.d.ts.map +1 -1
- package/dist/headless/utility-file-watch-manager.js +6 -2
- package/dist/headless/utility-file-watch-manager.js.map +1 -1
- package/dist/headless/workspace-root.d.ts +8 -0
- package/dist/headless/workspace-root.d.ts.map +1 -0
- package/dist/headless/workspace-root.js +74 -0
- package/dist/headless/workspace-root.js.map +1 -0
- package/dist/hooks/notification-hooks.d.ts +5 -0
- package/dist/hooks/notification-hooks.d.ts.map +1 -1
- package/dist/hooks/notification-hooks.js +4 -0
- package/dist/hooks/notification-hooks.js.map +1 -1
- package/dist/lsp/diagnostic-deltas.d.ts +20 -0
- package/dist/lsp/diagnostic-deltas.d.ts.map +1 -0
- package/dist/lsp/diagnostic-deltas.js +92 -0
- package/dist/lsp/diagnostic-deltas.js.map +1 -0
- package/dist/lsp/diagnostic-repair.d.ts +48 -0
- package/dist/lsp/diagnostic-repair.d.ts.map +1 -0
- package/dist/lsp/diagnostic-repair.js +143 -0
- package/dist/lsp/diagnostic-repair.js.map +1 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +127 -37
- package/dist/main.js.map +1 -1
- package/dist/mcp/config.d.ts +4 -2
- package/dist/mcp/config.d.ts.map +1 -1
- package/dist/mcp/config.js +58 -14
- package/dist/mcp/config.js.map +1 -1
- package/dist/mcp/index.d.ts +1 -0
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +1 -0
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/manager.d.ts +1 -0
- package/dist/mcp/manager.d.ts.map +1 -1
- package/dist/mcp/manager.js +1 -0
- package/dist/mcp/manager.js.map +1 -1
- package/dist/mcp/platform-plugin.d.ts +3 -0
- package/dist/mcp/platform-plugin.d.ts.map +1 -0
- package/dist/mcp/platform-plugin.js +117 -0
- package/dist/mcp/platform-plugin.js.map +1 -0
- package/dist/mcp/tool-bridge.d.ts +15 -0
- package/dist/mcp/tool-bridge.d.ts.map +1 -1
- package/dist/mcp/tool-bridge.js +194 -6
- package/dist/mcp/tool-bridge.js.map +1 -1
- package/dist/memory/platform-memory-client.d.ts +130 -0
- package/dist/memory/platform-memory-client.d.ts.map +1 -0
- package/dist/memory/platform-memory-client.js +330 -0
- package/dist/memory/platform-memory-client.js.map +1 -0
- package/dist/memory/service-client.d.ts.map +1 -1
- package/dist/memory/service-client.js +1 -2
- package/dist/memory/service-client.js.map +1 -1
- package/dist/models/builtin.d.ts.map +1 -1
- package/dist/models/builtin.js +137 -0
- package/dist/models/builtin.js.map +1 -1
- package/dist/models/config-loader.d.ts +10 -10
- package/dist/models/config-loader.d.ts.map +1 -1
- package/dist/models/config-loader.js +1 -0
- package/dist/models/config-loader.js.map +1 -1
- package/dist/models/registry.d.ts +1 -0
- package/dist/models/registry.d.ts.map +1 -1
- package/dist/models/registry.js +1 -0
- package/dist/models/registry.js.map +1 -1
- package/dist/oauth/connectors.d.ts +25 -0
- package/dist/oauth/connectors.d.ts.map +1 -0
- package/dist/oauth/connectors.js +253 -0
- package/dist/oauth/connectors.js.map +1 -0
- package/dist/oauth/device-identity.d.ts +18 -0
- package/dist/oauth/device-identity.d.ts.map +1 -0
- package/dist/oauth/device-identity.js +193 -0
- package/dist/oauth/device-identity.js.map +1 -0
- package/dist/oauth/evalops.d.ts.map +1 -1
- package/dist/oauth/evalops.js +74 -15
- package/dist/oauth/evalops.js.map +1 -1
- package/dist/oauth/index.d.ts +1 -1
- package/dist/oauth/index.d.ts.map +1 -1
- package/dist/oauth/index.js +31 -1
- package/dist/oauth/index.js.map +1 -1
- package/dist/oauth/openai-codex.d.ts +16 -0
- package/dist/oauth/openai-codex.d.ts.map +1 -0
- package/dist/oauth/openai-codex.js +300 -0
- package/dist/oauth/openai-codex.js.map +1 -0
- package/dist/opentelemetry.d.ts.map +1 -1
- package/dist/opentelemetry.js +9 -2
- package/dist/opentelemetry.js.map +1 -1
- package/dist/platform/agent-runtime-client.d.ts +279 -0
- package/dist/platform/agent-runtime-client.d.ts.map +1 -0
- package/dist/platform/agent-runtime-client.js +515 -0
- package/dist/platform/agent-runtime-client.js.map +1 -0
- package/dist/platform/cerebro-facts-client.d.ts +56 -0
- package/dist/platform/cerebro-facts-client.d.ts.map +1 -0
- package/dist/platform/cerebro-facts-client.js +297 -0
- package/dist/platform/cerebro-facts-client.js.map +1 -0
- package/dist/platform/client.d.ts +2 -1
- package/dist/platform/client.d.ts.map +1 -1
- package/dist/platform/client.js +9 -26
- package/dist/platform/client.js.map +1 -1
- package/dist/platform/core-services.d.ts +128 -0
- package/dist/platform/core-services.d.ts.map +1 -1
- package/dist/platform/core-services.js +128 -0
- package/dist/platform/core-services.js.map +1 -1
- package/dist/platform/maestro-timeline-client.d.ts +22 -0
- package/dist/platform/maestro-timeline-client.d.ts.map +1 -0
- package/dist/platform/maestro-timeline-client.js +373 -0
- package/dist/platform/maestro-timeline-client.js.map +1 -0
- package/dist/platform/tool-execution-client.d.ts +104 -0
- package/dist/platform/tool-execution-client.d.ts.map +1 -0
- package/dist/platform/tool-execution-client.js +284 -0
- package/dist/platform/tool-execution-client.js.map +1 -0
- package/dist/prompts/service-client.d.ts.map +1 -1
- package/dist/prompts/service-client.js +5 -2
- package/dist/prompts/service-client.js.map +1 -1
- package/dist/providers/anthropic-auth.d.ts.map +1 -1
- package/dist/providers/anthropic-auth.js +8 -6
- package/dist/providers/anthropic-auth.js.map +1 -1
- package/dist/providers/api-keys.d.ts +1 -0
- package/dist/providers/api-keys.d.ts.map +1 -1
- package/dist/providers/api-keys.js +5 -0
- package/dist/providers/api-keys.js.map +1 -1
- package/dist/providers/auth.d.ts +2 -1
- package/dist/providers/auth.d.ts.map +1 -1
- package/dist/providers/auth.js +26 -3
- package/dist/providers/auth.js.map +1 -1
- package/dist/remote-runner/attach-client.d.ts +41 -0
- package/dist/remote-runner/attach-client.d.ts.map +1 -0
- package/dist/remote-runner/attach-client.js +692 -0
- package/dist/remote-runner/attach-client.js.map +1 -0
- package/dist/remote-runner/client.d.ts +205 -0
- package/dist/remote-runner/client.d.ts.map +1 -0
- package/dist/remote-runner/client.js +633 -0
- package/dist/remote-runner/client.js.map +1 -0
- package/dist/safety/action-firewall.d.ts +6 -1
- package/dist/safety/action-firewall.d.ts.map +1 -1
- package/dist/safety/action-firewall.js +62 -26
- package/dist/safety/action-firewall.js.map +1 -1
- package/dist/safety/governance-service-client.d.ts +36 -0
- package/dist/safety/governance-service-client.d.ts.map +1 -0
- package/dist/safety/governance-service-client.js +279 -0
- package/dist/safety/governance-service-client.js.map +1 -0
- package/dist/safety/policy.d.ts +13 -2
- package/dist/safety/policy.d.ts.map +1 -1
- package/dist/safety/policy.js +474 -52
- package/dist/safety/policy.js.map +1 -1
- package/dist/sdk-tools.d.ts +21 -0
- package/dist/sdk-tools.d.ts.map +1 -1
- package/dist/sdk-tools.js +16 -0
- package/dist/sdk-tools.js.map +1 -1
- package/dist/server/app-context.d.ts +25 -0
- package/dist/server/app-context.d.ts.map +1 -1
- package/dist/server/app-context.js.map +1 -1
- package/dist/server/approval-service.d.ts +7 -8
- package/dist/server/approval-service.d.ts.map +1 -1
- package/dist/server/approval-service.js +12 -24
- package/dist/server/approval-service.js.map +1 -1
- package/dist/server/authz.d.ts +23 -2
- package/dist/server/authz.d.ts.map +1 -1
- package/dist/server/authz.js +153 -17
- package/dist/server/authz.js.map +1 -1
- package/dist/server/handlers/approvals.d.ts.map +1 -1
- package/dist/server/handlers/approvals.js +3 -10
- package/dist/server/handlers/approvals.js.map +1 -1
- package/dist/server/handlers/branch.d.ts.map +1 -1
- package/dist/server/handlers/branch.js +29 -20
- package/dist/server/handlers/branch.js.map +1 -1
- package/dist/server/handlers/bridge.d.ts.map +1 -1
- package/dist/server/handlers/bridge.js +3 -2
- package/dist/server/handlers/bridge.js.map +1 -1
- package/dist/server/handlers/chat-ws.d.ts.map +1 -1
- package/dist/server/handlers/chat-ws.js +23 -31
- package/dist/server/handlers/chat-ws.js.map +1 -1
- package/dist/server/handlers/chat.d.ts.map +1 -1
- package/dist/server/handlers/chat.js +105 -46
- package/dist/server/handlers/chat.js.map +1 -1
- package/dist/server/handlers/compliance.d.ts +3 -0
- package/dist/server/handlers/compliance.d.ts.map +1 -0
- package/dist/server/handlers/compliance.js +53 -0
- package/dist/server/handlers/compliance.js.map +1 -0
- package/dist/server/handlers/context.d.ts.map +1 -1
- package/dist/server/handlers/context.js +3 -8
- package/dist/server/handlers/context.js.map +1 -1
- package/dist/server/handlers/fleet.d.ts +4 -0
- package/dist/server/handlers/fleet.d.ts.map +1 -0
- package/dist/server/handlers/fleet.js +9 -0
- package/dist/server/handlers/fleet.js.map +1 -0
- package/dist/server/handlers/headless-sessions.d.ts +4 -0
- package/dist/server/handlers/headless-sessions.d.ts.map +1 -1
- package/dist/server/handlers/headless-sessions.js +168 -3
- package/dist/server/handlers/headless-sessions.js.map +1 -1
- package/dist/server/handlers/health.d.ts +31 -2
- package/dist/server/handlers/health.d.ts.map +1 -1
- package/dist/server/handlers/health.js +82 -8
- package/dist/server/handlers/health.js.map +1 -1
- package/dist/server/handlers/hosted-runner-drain.d.ts +128 -0
- package/dist/server/handlers/hosted-runner-drain.d.ts.map +1 -0
- package/dist/server/handlers/hosted-runner-drain.js +373 -0
- package/dist/server/handlers/hosted-runner-drain.js.map +1 -0
- package/dist/server/handlers/hosted-runner-identity.d.ts +17 -0
- package/dist/server/handlers/hosted-runner-identity.d.ts.map +1 -0
- package/dist/server/handlers/hosted-runner-identity.js +39 -0
- package/dist/server/handlers/hosted-runner-identity.js.map +1 -0
- package/dist/server/handlers/intelligent-router.d.ts +3 -0
- package/dist/server/handlers/intelligent-router.d.ts.map +1 -0
- package/dist/server/handlers/intelligent-router.js +141 -0
- package/dist/server/handlers/intelligent-router.js.map +1 -0
- package/dist/server/handlers/models.d.ts.map +1 -1
- package/dist/server/handlers/models.js +14 -0
- package/dist/server/handlers/models.js.map +1 -1
- package/dist/server/handlers/pending-requests.d.ts +8 -0
- package/dist/server/handlers/pending-requests.d.ts.map +1 -0
- package/dist/server/handlers/pending-requests.js +149 -0
- package/dist/server/handlers/pending-requests.js.map +1 -0
- package/dist/server/handlers/revenue-attribution.d.ts +3 -0
- package/dist/server/handlers/revenue-attribution.d.ts.map +1 -0
- package/dist/server/handlers/revenue-attribution.js +45 -0
- package/dist/server/handlers/revenue-attribution.js.map +1 -0
- package/dist/server/handlers/runtime-app-server-ws.d.ts +10 -0
- package/dist/server/handlers/runtime-app-server-ws.d.ts.map +1 -0
- package/dist/server/handlers/runtime-app-server-ws.js +206 -0
- package/dist/server/handlers/runtime-app-server-ws.js.map +1 -0
- package/dist/server/handlers/session-artifacts.js +2 -2
- package/dist/server/handlers/session-artifacts.js.map +1 -1
- package/dist/server/handlers/session-attachments.js +3 -3
- package/dist/server/handlers/session-attachments.js.map +1 -1
- package/dist/server/handlers/session-timeline.d.ts +11 -0
- package/dist/server/handlers/session-timeline.d.ts.map +1 -0
- package/dist/server/handlers/session-timeline.js +77 -0
- package/dist/server/handlers/session-timeline.js.map +1 -0
- package/dist/server/handlers/sessions.d.ts +11 -0
- package/dist/server/handlers/sessions.d.ts.map +1 -1
- package/dist/server/handlers/sessions.js +68 -100
- package/dist/server/handlers/sessions.js.map +1 -1
- package/dist/server/handlers/traces.d.ts +3 -0
- package/dist/server/handlers/traces.d.ts.map +1 -0
- package/dist/server/handlers/traces.js +60 -0
- package/dist/server/handlers/traces.js.map +1 -0
- package/dist/server/handlers/usage-analytics.d.ts +3 -0
- package/dist/server/handlers/usage-analytics.d.ts.map +1 -0
- package/dist/server/handlers/usage-analytics.js +40 -0
- package/dist/server/handlers/usage-analytics.js.map +1 -0
- package/dist/server/handlers/workspace-config.d.ts +3 -0
- package/dist/server/handlers/workspace-config.d.ts.map +1 -0
- package/dist/server/handlers/workspace-config.js +62 -0
- package/dist/server/handlers/workspace-config.js.map +1 -0
- package/dist/server/headless-in-process-host.d.ts +8 -1
- package/dist/server/headless-in-process-host.d.ts.map +1 -1
- package/dist/server/headless-in-process-host.js +6 -0
- package/dist/server/headless-in-process-host.js.map +1 -1
- package/dist/server/headless-runtime-service.d.ts +99 -1
- package/dist/server/headless-runtime-service.d.ts.map +1 -1
- package/dist/server/headless-runtime-service.js +286 -23
- package/dist/server/headless-runtime-service.js.map +1 -1
- package/dist/server/hosted-session-manager.d.ts +103 -0
- package/dist/server/hosted-session-manager.d.ts.map +1 -0
- package/dist/server/hosted-session-manager.js +629 -0
- package/dist/server/hosted-session-manager.js.map +1 -0
- package/dist/server/pending-request-payload.d.ts +4 -0
- package/dist/server/pending-request-payload.d.ts.map +1 -0
- package/dist/server/pending-request-payload.js +107 -0
- package/dist/server/pending-request-payload.js.map +1 -0
- package/dist/server/request-context.d.ts +4 -0
- package/dist/server/request-context.d.ts.map +1 -1
- package/dist/server/request-context.js +9 -0
- package/dist/server/request-context.js.map +1 -1
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +149 -1
- package/dist/server/routes.js.map +1 -1
- package/dist/server/runtime-ws-access.d.ts +16 -0
- package/dist/server/runtime-ws-access.d.ts.map +1 -0
- package/dist/server/runtime-ws-access.js +21 -0
- package/dist/server/runtime-ws-access.js.map +1 -0
- package/dist/server/server-middlewares.d.ts +1 -1
- package/dist/server/server-middlewares.d.ts.map +1 -1
- package/dist/server/server-middlewares.js +35 -27
- package/dist/server/server-middlewares.js.map +1 -1
- package/dist/server/server-request-manager.d.ts +8 -27
- package/dist/server/server-request-manager.d.ts.map +1 -1
- package/dist/server/server-request-manager.js +7 -0
- package/dist/server/server-request-manager.js.map +1 -1
- package/dist/server/server-utils.d.ts +2 -1
- package/dist/server/server-utils.d.ts.map +1 -1
- package/dist/server/server-utils.js +11 -1
- package/dist/server/server-utils.js.map +1 -1
- package/dist/server/session-event-env.d.ts +2 -0
- package/dist/server/session-event-env.d.ts.map +1 -0
- package/dist/server/session-event-env.js +8 -0
- package/dist/server/session-event-env.js.map +1 -0
- package/dist/server/session-initialization.d.ts +25 -4
- package/dist/server/session-initialization.d.ts.map +1 -1
- package/dist/server/session-initialization.js +22 -5
- package/dist/server/session-initialization.js.map +1 -1
- package/dist/server/session-scope.d.ts +4 -0
- package/dist/server/session-scope.d.ts.map +1 -1
- package/dist/server/session-scope.js +44 -4
- package/dist/server/session-scope.js.map +1 -1
- package/dist/server/session-timeline.d.ts +13 -0
- package/dist/server/session-timeline.d.ts.map +1 -0
- package/dist/server/session-timeline.js +566 -0
- package/dist/server/session-timeline.js.map +1 -0
- package/dist/services/compliance/controls.d.ts +6 -0
- package/dist/services/compliance/controls.d.ts.map +1 -0
- package/dist/services/compliance/controls.js +113 -0
- package/dist/services/compliance/controls.js.map +1 -0
- package/dist/services/compliance/index.d.ts +6 -0
- package/dist/services/compliance/index.d.ts.map +1 -0
- package/dist/services/compliance/index.js +5 -0
- package/dist/services/compliance/index.js.map +1 -0
- package/dist/services/compliance/normalize.d.ts +23 -0
- package/dist/services/compliance/normalize.d.ts.map +1 -0
- package/dist/services/compliance/normalize.js +226 -0
- package/dist/services/compliance/normalize.js.map +1 -0
- package/dist/services/compliance/recorder.d.ts +22 -0
- package/dist/services/compliance/recorder.d.ts.map +1 -0
- package/dist/services/compliance/recorder.js +89 -0
- package/dist/services/compliance/recorder.js.map +1 -0
- package/dist/services/compliance/service.d.ts +24 -0
- package/dist/services/compliance/service.d.ts.map +1 -0
- package/dist/services/compliance/service.js +426 -0
- package/dist/services/compliance/service.js.map +1 -0
- package/dist/services/compliance/types.d.ts +185 -0
- package/dist/services/compliance/types.d.ts.map +1 -0
- package/dist/services/compliance/types.js +2 -0
- package/dist/services/compliance/types.js.map +1 -0
- package/dist/services/intelligent-router/index.d.ts +5 -0
- package/dist/services/intelligent-router/index.d.ts.map +1 -0
- package/dist/services/intelligent-router/index.js +5 -0
- package/dist/services/intelligent-router/index.js.map +1 -0
- package/dist/services/intelligent-router/normalize.d.ts +9 -0
- package/dist/services/intelligent-router/normalize.d.ts.map +1 -0
- package/dist/services/intelligent-router/normalize.js +169 -0
- package/dist/services/intelligent-router/normalize.js.map +1 -0
- package/dist/services/intelligent-router/recorder.d.ts +24 -0
- package/dist/services/intelligent-router/recorder.d.ts.map +1 -0
- package/dist/services/intelligent-router/recorder.js +98 -0
- package/dist/services/intelligent-router/recorder.js.map +1 -0
- package/dist/services/intelligent-router/service.d.ts +22 -0
- package/dist/services/intelligent-router/service.d.ts.map +1 -0
- package/dist/services/intelligent-router/service.js +328 -0
- package/dist/services/intelligent-router/service.js.map +1 -0
- package/dist/services/intelligent-router/types.d.ts +98 -0
- package/dist/services/intelligent-router/types.d.ts.map +1 -0
- package/dist/services/intelligent-router/types.js +7 -0
- package/dist/services/intelligent-router/types.js.map +1 -0
- package/dist/services/revenue-attribution/index.d.ts +4 -0
- package/dist/services/revenue-attribution/index.d.ts.map +1 -0
- package/dist/services/revenue-attribution/index.js +4 -0
- package/dist/services/revenue-attribution/index.js.map +1 -0
- package/dist/services/revenue-attribution/normalize.d.ts +13 -0
- package/dist/services/revenue-attribution/normalize.d.ts.map +1 -0
- package/dist/services/revenue-attribution/normalize.js +155 -0
- package/dist/services/revenue-attribution/normalize.js.map +1 -0
- package/dist/services/revenue-attribution/service.d.ts +21 -0
- package/dist/services/revenue-attribution/service.d.ts.map +1 -0
- package/dist/services/revenue-attribution/service.js +248 -0
- package/dist/services/revenue-attribution/service.js.map +1 -0
- package/dist/services/revenue-attribution/types.d.ts +96 -0
- package/dist/services/revenue-attribution/types.d.ts.map +1 -0
- package/dist/services/revenue-attribution/types.js +7 -0
- package/dist/services/revenue-attribution/types.js.map +1 -0
- package/dist/services/traces/index.d.ts +5 -0
- package/dist/services/traces/index.d.ts.map +1 -0
- package/dist/services/traces/index.js +4 -0
- package/dist/services/traces/index.js.map +1 -0
- package/dist/services/traces/normalize.d.ts +20 -0
- package/dist/services/traces/normalize.d.ts.map +1 -0
- package/dist/services/traces/normalize.js +261 -0
- package/dist/services/traces/normalize.js.map +1 -0
- package/dist/services/traces/otel.d.ts +3 -0
- package/dist/services/traces/otel.d.ts.map +1 -0
- package/dist/services/traces/otel.js +173 -0
- package/dist/services/traces/otel.js.map +1 -0
- package/dist/services/traces/service.d.ts +17 -0
- package/dist/services/traces/service.d.ts.map +1 -0
- package/dist/services/traces/service.js +197 -0
- package/dist/services/traces/service.js.map +1 -0
- package/dist/services/traces/types.d.ts +130 -0
- package/dist/services/traces/types.d.ts.map +1 -0
- package/dist/services/traces/types.js +8 -0
- package/dist/services/traces/types.js.map +1 -0
- package/dist/services/usage-analytics/aggregation.d.ts +18 -0
- package/dist/services/usage-analytics/aggregation.d.ts.map +1 -0
- package/dist/services/usage-analytics/aggregation.js +130 -0
- package/dist/services/usage-analytics/aggregation.js.map +1 -0
- package/dist/services/usage-analytics/index.d.ts +5 -0
- package/dist/services/usage-analytics/index.d.ts.map +1 -0
- package/dist/services/usage-analytics/index.js +4 -0
- package/dist/services/usage-analytics/index.js.map +1 -0
- package/dist/services/usage-analytics/recorder.d.ts +16 -0
- package/dist/services/usage-analytics/recorder.d.ts.map +1 -0
- package/dist/services/usage-analytics/recorder.js +128 -0
- package/dist/services/usage-analytics/recorder.js.map +1 -0
- package/dist/services/usage-analytics/service.d.ts +15 -0
- package/dist/services/usage-analytics/service.d.ts.map +1 -0
- package/dist/services/usage-analytics/service.js +210 -0
- package/dist/services/usage-analytics/service.js.map +1 -0
- package/dist/services/usage-analytics/types.d.ts +80 -0
- package/dist/services/usage-analytics/types.d.ts.map +1 -0
- package/dist/services/usage-analytics/types.js +2 -0
- package/dist/services/usage-analytics/types.js.map +1 -0
- package/dist/services/workspace-config/index.d.ts +6 -0
- package/dist/services/workspace-config/index.d.ts.map +1 -0
- package/dist/services/workspace-config/index.js +5 -0
- package/dist/services/workspace-config/index.js.map +1 -0
- package/dist/services/workspace-config/middleware.d.ts +5 -0
- package/dist/services/workspace-config/middleware.d.ts.map +1 -0
- package/dist/services/workspace-config/middleware.js +98 -0
- package/dist/services/workspace-config/middleware.js.map +1 -0
- package/dist/services/workspace-config/normalize.d.ts +17 -0
- package/dist/services/workspace-config/normalize.d.ts.map +1 -0
- package/dist/services/workspace-config/normalize.js +148 -0
- package/dist/services/workspace-config/normalize.js.map +1 -0
- package/dist/services/workspace-config/policy.d.ts +16 -0
- package/dist/services/workspace-config/policy.d.ts.map +1 -0
- package/dist/services/workspace-config/policy.js +77 -0
- package/dist/services/workspace-config/policy.js.map +1 -0
- package/dist/services/workspace-config/service.d.ts +20 -0
- package/dist/services/workspace-config/service.d.ts.map +1 -0
- package/dist/services/workspace-config/service.js +162 -0
- package/dist/services/workspace-config/service.js.map +1 -0
- package/dist/services/workspace-config/types.d.ts +71 -0
- package/dist/services/workspace-config/types.d.ts.map +1 -0
- package/dist/services/workspace-config/types.js +2 -0
- package/dist/services/workspace-config/types.js.map +1 -0
- package/dist/session/manager.d.ts.map +1 -1
- package/dist/session/manager.js +10 -0
- package/dist/session/manager.js.map +1 -1
- package/dist/session/migration.d.ts.map +1 -1
- package/dist/session/migration.js +2 -1
- package/dist/session/migration.js.map +1 -1
- package/dist/session/session-memory.d.ts.map +1 -1
- package/dist/session/session-memory.js +7 -1
- package/dist/session/session-memory.js.map +1 -1
- package/dist/session/types.d.ts +1 -2
- package/dist/session/types.d.ts.map +1 -1
- package/dist/session/types.js +1 -22
- package/dist/session/types.js.map +1 -1
- package/dist/session/wire-format.d.ts +7 -0
- package/dist/session/wire-format.d.ts.map +1 -0
- package/dist/session/wire-format.generated.d.ts +95 -0
- package/dist/session/wire-format.generated.d.ts.map +1 -0
- package/dist/session/wire-format.generated.js +111 -0
- package/dist/session/wire-format.generated.js.map +1 -0
- package/dist/session/wire-format.js +145 -0
- package/dist/session/wire-format.js.map +1 -0
- package/dist/shared-memory/client.d.ts.map +1 -1
- package/dist/shared-memory/client.js +22 -22
- package/dist/shared-memory/client.js.map +1 -1
- package/dist/skills/artifact-metadata.d.ts +16 -0
- package/dist/skills/artifact-metadata.d.ts.map +1 -0
- package/dist/skills/artifact-metadata.js +86 -0
- package/dist/skills/artifact-metadata.js.map +1 -0
- package/dist/skills/loader.d.ts +2 -2
- package/dist/skills/loader.d.ts.map +1 -1
- package/dist/skills/loader.js +1 -0
- package/dist/skills/loader.js.map +1 -1
- package/dist/skills/service-client.d.ts +42 -0
- package/dist/skills/service-client.d.ts.map +1 -0
- package/dist/skills/service-client.js +258 -0
- package/dist/skills/service-client.js.map +1 -0
- package/dist/skills/tool.d.ts +3 -0
- package/dist/skills/tool.d.ts.map +1 -1
- package/dist/skills/tool.js +67 -5
- package/dist/skills/tool.js.map +1 -1
- package/dist/telemetry/index.d.ts +4 -0
- package/dist/telemetry/index.d.ts.map +1 -1
- package/dist/telemetry/index.js +5 -0
- package/dist/telemetry/index.js.map +1 -1
- package/dist/telemetry/maestro-event-bus.d.ts +440 -0
- package/dist/telemetry/maestro-event-bus.d.ts.map +1 -0
- package/dist/telemetry/maestro-event-bus.js +784 -0
- package/dist/telemetry/maestro-event-bus.js.map +1 -0
- package/dist/telemetry/maestro-event-catalog.d.ts +48 -0
- package/dist/telemetry/maestro-event-catalog.d.ts.map +1 -0
- package/dist/telemetry/maestro-event-catalog.js +69 -0
- package/dist/telemetry/maestro-event-catalog.js.map +1 -0
- package/dist/telemetry/maestro-platform-replay-fixture.d.ts +24 -0
- package/dist/telemetry/maestro-platform-replay-fixture.d.ts.map +1 -0
- package/dist/telemetry/maestro-platform-replay-fixture.js +400 -0
- package/dist/telemetry/maestro-platform-replay-fixture.js.map +1 -0
- package/dist/telemetry/maestro-publisher-conformance-fixture.d.ts +29 -0
- package/dist/telemetry/maestro-publisher-conformance-fixture.d.ts.map +1 -0
- package/dist/telemetry/maestro-publisher-conformance-fixture.js +240 -0
- package/dist/telemetry/maestro-publisher-conformance-fixture.js.map +1 -0
- package/dist/telemetry/meter-service-client.d.ts +0 -33
- package/dist/telemetry/meter-service-client.d.ts.map +1 -1
- package/dist/telemetry/meter-service-client.js +22 -50
- package/dist/telemetry/meter-service-client.js.map +1 -1
- package/dist/telemetry/turn-tracker.d.ts.map +1 -1
- package/dist/telemetry/turn-tracker.js +5 -5
- package/dist/telemetry/turn-tracker.js.map +1 -1
- package/dist/telemetry/wide-events.d.ts +8 -0
- package/dist/telemetry/wide-events.d.ts.map +1 -1
- package/dist/telemetry/wide-events.js +28 -0
- package/dist/telemetry/wide-events.js.map +1 -1
- package/dist/telemetry.d.ts +1 -1
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +14 -4
- package/dist/telemetry.js.map +1 -1
- package/dist/timeline/redaction.d.ts +5 -0
- package/dist/timeline/redaction.d.ts.map +1 -0
- package/dist/timeline/redaction.js +119 -0
- package/dist/timeline/redaction.js.map +1 -0
- package/dist/tools/ask-user.d.ts +26 -0
- package/dist/tools/ask-user.d.ts.map +1 -1
- package/dist/tools/ask-user.js +33 -1
- package/dist/tools/ask-user.js.map +1 -1
- package/dist/tools/background/task-types.d.ts +1 -1
- package/dist/tools/edit.d.ts +2 -0
- package/dist/tools/edit.d.ts.map +1 -1
- package/dist/tools/edit.js +27 -7
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/index.d.ts +9 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/pipeline.d.ts.map +1 -1
- package/dist/tools/pipeline.js +16 -7
- package/dist/tools/pipeline.js.map +1 -1
- package/dist/tools/write.d.ts +2 -0
- package/dist/tools/write.d.ts.map +1 -1
- package/dist/tools/write.js +24 -6
- package/dist/tools/write.js.map +1 -1
- package/dist/tracking/cost-tracker.d.ts +15 -12
- package/dist/tracking/cost-tracker.d.ts.map +1 -1
- package/dist/tracking/cost-tracker.js +29 -40
- package/dist/tracking/cost-tracker.js.map +1 -1
- package/dist/utils/checkpoint-profiler.d.ts +29 -0
- package/dist/utils/checkpoint-profiler.d.ts.map +1 -0
- package/dist/utils/checkpoint-profiler.js +118 -0
- package/dist/utils/checkpoint-profiler.js.map +1 -0
- package/dist/utils/downstream-http.d.ts +21 -0
- package/dist/utils/downstream-http.d.ts.map +1 -0
- package/dist/utils/downstream-http.js +151 -0
- package/dist/utils/downstream-http.js.map +1 -0
- package/dist/utils/downstream.d.ts +18 -0
- package/dist/utils/downstream.d.ts.map +1 -0
- package/dist/utils/downstream.js +47 -0
- package/dist/utils/downstream.js.map +1 -0
- package/dist/utils/logger.d.ts +3 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +12 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/oauth-http.d.ts +8 -0
- package/dist/utils/oauth-http.d.ts.map +1 -0
- package/dist/utils/oauth-http.js +41 -0
- package/dist/utils/oauth-http.js.map +1 -0
- package/dist/utils/path-utils.d.ts +2 -0
- package/dist/utils/path-utils.d.ts.map +1 -0
- package/dist/utils/path-utils.js +12 -0
- package/dist/utils/path-utils.js.map +1 -0
- package/dist/utils/path-validation.d.ts +1 -1
- package/dist/utils/path-validation.d.ts.map +1 -1
- package/dist/utils/path-validation.js +3 -3
- package/dist/utils/path-validation.js.map +1 -1
- package/dist/version.json +2 -2
- package/dist/web-server.d.ts +7 -1
- package/dist/web-server.d.ts.map +1 -1
- package/dist/web-server.js +117 -15
- package/dist/web-server.js.map +1 -1
- package/dist/webhooks/delivery.d.ts.map +1 -1
- package/dist/webhooks/delivery.js +9 -12
- package/dist/webhooks/delivery.js.map +1 -1
- package/node_modules/@bufbuild/protobuf/dist/cjs/descriptors.d.ts +12 -5
- package/node_modules/@bufbuild/protobuf/dist/cjs/from-binary.js +7 -7
- package/node_modules/@bufbuild/protobuf/dist/cjs/from-json.d.ts +1 -1
- package/node_modules/@bufbuild/protobuf/dist/cjs/from-json.js +1 -1
- package/node_modules/@bufbuild/protobuf/dist/cjs/reflect/path.d.ts +1 -1
- package/node_modules/@bufbuild/protobuf/dist/cjs/registry.js +24 -1
- package/node_modules/@bufbuild/protobuf/dist/cjs/to-json.d.ts +1 -1
- package/node_modules/@bufbuild/protobuf/dist/cjs/to-json.js +9 -10
- package/node_modules/@bufbuild/protobuf/dist/cjs/types.d.ts +1 -1
- package/node_modules/@bufbuild/protobuf/dist/cjs/wire/binary-encoding.d.ts +9 -7
- package/node_modules/@bufbuild/protobuf/dist/cjs/wire/binary-encoding.js +18 -8
- package/node_modules/@bufbuild/protobuf/dist/cjs/wire/text-encoding.d.ts +4 -2
- package/node_modules/@bufbuild/protobuf/dist/cjs/wire/text-encoding.js +8 -1
- package/node_modules/@bufbuild/protobuf/dist/cjs/wkt/gen/google/protobuf/api_pb.d.ts +1 -1
- package/node_modules/@bufbuild/protobuf/dist/cjs/wkt/gen/google/protobuf/compiler/plugin_pb.d.ts +2 -2
- package/node_modules/@bufbuild/protobuf/dist/cjs/wkt/gen/google/protobuf/descriptor_pb.d.ts +37 -23
- package/node_modules/@bufbuild/protobuf/dist/cjs/wkt/gen/google/protobuf/descriptor_pb.js +1 -1
- package/node_modules/@bufbuild/protobuf/dist/cjs/wkt/gen/google/protobuf/field_mask_pb.d.ts +32 -36
- package/node_modules/@bufbuild/protobuf/dist/cjs/wkt/gen/google/protobuf/go_features_pb.d.ts +65 -0
- package/node_modules/@bufbuild/protobuf/dist/cjs/wkt/gen/google/protobuf/go_features_pb.js +38 -2
- package/node_modules/@bufbuild/protobuf/dist/cjs/wkt/gen/google/protobuf/timestamp_pb.d.ts +5 -5
- package/node_modules/@bufbuild/protobuf/dist/cjs/wkt/gen/google/protobuf/type_pb.d.ts +3 -3
- package/node_modules/@bufbuild/protobuf/dist/cjs/wkt/wrappers.d.ts +10 -0
- package/node_modules/@bufbuild/protobuf/dist/cjs/wkt/wrappers.js +24 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/descriptors.d.ts +12 -5
- package/node_modules/@bufbuild/protobuf/dist/esm/from-binary.js +7 -7
- package/node_modules/@bufbuild/protobuf/dist/esm/from-json.d.ts +1 -1
- package/node_modules/@bufbuild/protobuf/dist/esm/from-json.js +2 -2
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/path.d.ts +1 -1
- package/node_modules/@bufbuild/protobuf/dist/esm/registry.js +24 -1
- package/node_modules/@bufbuild/protobuf/dist/esm/to-json.d.ts +1 -1
- package/node_modules/@bufbuild/protobuf/dist/esm/to-json.js +10 -11
- package/node_modules/@bufbuild/protobuf/dist/esm/types.d.ts +1 -1
- package/node_modules/@bufbuild/protobuf/dist/esm/wire/binary-encoding.d.ts +9 -7
- package/node_modules/@bufbuild/protobuf/dist/esm/wire/binary-encoding.js +18 -8
- package/node_modules/@bufbuild/protobuf/dist/esm/wire/text-encoding.d.ts +4 -2
- package/node_modules/@bufbuild/protobuf/dist/esm/wire/text-encoding.js +8 -1
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/api_pb.d.ts +1 -1
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/compiler/plugin_pb.d.ts +2 -2
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/descriptor_pb.d.ts +37 -23
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/descriptor_pb.js +1 -1
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/field_mask_pb.d.ts +32 -36
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/go_features_pb.d.ts +65 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/go_features_pb.js +37 -1
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/timestamp_pb.d.ts +5 -5
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/type_pb.d.ts +3 -3
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/wrappers.d.ts +10 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/wrappers.js +23 -0
- package/node_modules/@bufbuild/protobuf/package.json +1 -1
- package/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.d.ts +305 -2
- package/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.d.ts.map +1 -1
- package/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.js +34 -4
- package/node_modules/@evalops/contracts/dist/headless-protocol-schemas.generated.js.map +1 -1
- package/node_modules/@evalops/contracts/dist/index.d.ts +88 -0
- package/node_modules/@evalops/contracts/dist/index.d.ts.map +1 -1
- package/node_modules/@evalops/contracts/dist/index.js +2 -0
- package/node_modules/@evalops/contracts/dist/index.js.map +1 -1
- package/node_modules/@evalops/contracts/dist/proto/maestro/v1/headless_pb.d.ts +77 -77
- package/node_modules/@evalops/contracts/dist/proto/maestro/v1/headless_pb.d.ts.map +1 -1
- package/node_modules/@evalops/contracts/dist/proto/maestro/v1/headless_pb.js +1 -1
- package/node_modules/@evalops/contracts/dist/proto/maestro/v1/headless_pb.js.map +1 -1
- package/node_modules/@evalops/contracts/dist/runtime-app-server.d.ts +182 -0
- package/node_modules/@evalops/contracts/dist/runtime-app-server.d.ts.map +1 -0
- package/node_modules/@evalops/contracts/dist/runtime-app-server.js +83 -0
- package/node_modules/@evalops/contracts/dist/runtime-app-server.js.map +1 -0
- package/node_modules/@evalops/contracts/dist/runtime-server-request.d.ts +133 -0
- package/node_modules/@evalops/contracts/dist/runtime-server-request.d.ts.map +1 -0
- package/node_modules/@evalops/contracts/dist/runtime-server-request.js +68 -0
- package/node_modules/@evalops/contracts/dist/runtime-server-request.js.map +1 -0
- package/node_modules/@evalops/contracts/dist/schemas.d.ts +178 -0
- package/node_modules/@evalops/contracts/dist/schemas.d.ts.map +1 -1
- package/node_modules/@evalops/contracts/dist/schemas.js +165 -0
- package/node_modules/@evalops/contracts/dist/schemas.js.map +1 -1
- package/node_modules/@evalops/contracts/dist/typebox-utils.d.ts +2 -0
- package/node_modules/@evalops/contracts/dist/typebox-utils.d.ts.map +1 -0
- package/node_modules/@evalops/contracts/dist/typebox-utils.js +5 -0
- package/node_modules/@evalops/contracts/dist/typebox-utils.js.map +1 -0
- package/node_modules/@evalops/contracts/dist/validators.d.ts +4 -1
- package/node_modules/@evalops/contracts/dist/validators.d.ts.map +1 -1
- package/node_modules/@evalops/contracts/dist/validators.js +4 -1
- package/node_modules/@evalops/contracts/dist/validators.js.map +1 -1
- package/node_modules/@evalops/contracts/package.json +1 -1
- package/node_modules/@evalops/tui/package.json +1 -1
- package/node_modules/string-width/index.js +93 -9
- package/node_modules/string-width/package.json +1 -1
- package/package.json +32 -25
- package/dist/cli-tui/commands/grouped/auth-commands.d.ts.map +0 -1
- package/dist/cli-tui/commands/grouped/auth-commands.js.map +0 -1
- package/dist/cli-tui/commands/grouped/config-commands.d.ts.map +0 -1
- package/dist/cli-tui/commands/grouped/config-commands.js.map +0 -1
- package/dist/cli-tui/commands/grouped/diag-commands.d.ts.map +0 -1
- package/dist/cli-tui/commands/grouped/diag-commands.js.map +0 -1
- package/dist/cli-tui/commands/grouped/git-commands.d.ts.map +0 -1
- package/dist/cli-tui/commands/grouped/git-commands.js.map +0 -1
- package/dist/cli-tui/commands/grouped/index.d.ts.map +0 -1
- package/dist/cli-tui/commands/grouped/index.js.map +0 -1
- package/dist/cli-tui/commands/grouped/safety-commands.d.ts.map +0 -1
- package/dist/cli-tui/commands/grouped/safety-commands.js.map +0 -1
- package/dist/cli-tui/commands/grouped/session-commands.d.ts.map +0 -1
- package/dist/cli-tui/commands/grouped/session-commands.js.map +0 -1
- package/dist/cli-tui/commands/grouped/tools-commands.d.ts.map +0 -1
- package/dist/cli-tui/commands/grouped/tools-commands.js.map +0 -1
- package/dist/cli-tui/commands/grouped/ui-commands.d.ts.map +0 -1
- package/dist/cli-tui/commands/grouped/ui-commands.js.map +0 -1
- package/dist/cli-tui/commands/grouped/undo-commands.d.ts.map +0 -1
- package/dist/cli-tui/commands/grouped/undo-commands.js.map +0 -1
- package/dist/cli-tui/commands/grouped/usage-commands.d.ts.map +0 -1
- package/dist/cli-tui/commands/grouped/usage-commands.js.map +0 -1
- package/dist/cli-tui/commands/grouped/utils.d.ts.map +0 -1
- package/dist/cli-tui/commands/grouped/utils.js.map +0 -1
- package/dist/cli-tui/commands/grouped-command-handlers.d.ts.map +0 -1
- package/dist/cli-tui/commands/grouped-command-handlers.js +0 -135
- package/dist/cli-tui/commands/grouped-command-handlers.js.map +0 -1
- package/dist/cli-tui/tui-renderer/grouped-handlers-wiring.d.ts +0 -78
- package/dist/cli-tui/tui-renderer/grouped-handlers-wiring.d.ts.map +0 -1
- package/dist/cli-tui/tui-renderer/grouped-handlers-wiring.js +0 -129
- package/dist/cli-tui/tui-renderer/grouped-handlers-wiring.js.map +0 -1
- package/node_modules/@evalops/memory/dist/client.d.ts +0 -94
- package/node_modules/@evalops/memory/dist/client.js +0 -503
- package/node_modules/@evalops/memory/gen/proto/dist/memory/v1/memory_pb.d.ts +0 -608
- package/node_modules/@evalops/memory/gen/proto/dist/memory/v1/memory_pb.js +0 -187
- package/node_modules/@evalops/memory/package.json +0 -26
- /package/dist/cli-tui/commands/{grouped → subcommands}/usage-commands.d.ts +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/agent/providers/openai.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * OpenAI Provider - LLM Integration for OpenAI-Compatible APIs\n *\n * This module implements streaming communication with OpenAI's API and\n * any OpenAI-compatible endpoints (e.g., Azure OpenAI, local models via\n * LM Studio, Ollama, vLLM, etc.).\n *\n * ## Supported APIs\n *\n * This provider supports two OpenAI API variants:\n *\n * ### 1. Chat Completions API (`openai-completions`)\n *\n * The standard OpenAI chat API at `/v1/chat/completions`:\n *\n * ```json\n * {\n * \"model\": \"gpt-4o\",\n * \"messages\": [{\"role\": \"user\", \"content\": \"Hello\"}],\n * \"stream\": true,\n * \"tools\": [...]\n * }\n * ```\n *\n * **Event Types:**\n * - `chat.completion.chunk`: Streaming text/tool_call deltas\n * - Final chunk has `finish_reason` and optional usage stats\n *\n * ### 2. Responses API (`openai-responses`)\n *\n * The newer stateful API at `/v1/responses`:\n *\n * ```json\n * {\n * \"model\": \"gpt-4o\",\n * \"input\": [{\"role\": \"user\", \"content\": [...]}],\n * \"stream\": true,\n * \"tools\": [...]\n * }\n * ```\n *\n * **Event Types:**\n * - `response.output_text.delta`: Text streaming\n * - `response.function_call_arguments.delta`: Tool call streaming\n * - `response.completed`: Final response with usage\n *\n * ## Streaming Architecture\n *\n * Both APIs use Server-Sent Events (SSE) for streaming:\n *\n * ```\n * Client Server\n * │ │\n * │── POST /v1/chat/completions ──>│\n * │ │\n * │<── data: {\"choices\":[...]} ────│\n * │<── data: {\"choices\":[...]} ────│\n * │<── data: {\"choices\":[...]} ────│\n * │<── data: [DONE] ───────────────│\n * │ │\n * ```\n *\n * ## Tool Calling\n *\n * Tools are converted to OpenAI function format:\n *\n * ```json\n * {\n * \"type\": \"function\",\n * \"function\": {\n * \"name\": \"read_file\",\n * \"description\": \"Reads a file from disk\",\n * \"parameters\": {...json-schema...}\n * }\n * }\n * ```\n *\n * Tool calls are streamed as deltas and accumulated before execution.\n *\n * ## Extended Thinking / Reasoning\n *\n * For models that support it (e.g., o1, o1-mini), reasoning effort\n * can be specified via `reasoning_effort` parameter:\n *\n * | Effort | Behavior |\n * |---------|------------------------------------|\n * | minimal | Brief chain-of-thought |\n * | low | Short reasoning |\n * | medium | Moderate exploration |\n * | high | Deep reasoning with alternatives |\n *\n * @module agent/providers/openai\n */\n\nimport crypto from \"node:crypto\";\nimport { normalizeLLMBaseUrl } from \"../../models/url-normalize.js\";\nimport { fetchWithRetry } from \"../../providers/network-config.js\";\nimport {\n\tcreateTimeoutReader,\n\tisStreamIdleTimeoutError,\n} from \"../../providers/stream-idle-timeout.js\";\nimport { createLogger } from \"../../utils/logger.js\";\nimport { mapThinkingLevelToOpenAIEffort } from \"../thinking-level-mapper.js\";\nimport type {\n\tApi,\n\tAssistantMessage,\n\tAssistantMessageEvent,\n\tContext,\n\tMessage,\n\tModel,\n\tReasoningEffort,\n\tStreamOptions,\n} from \"../types.js\";\n\nconst logger = createLogger(\"agent:providers:openai\");\nimport { streamResponsesApiSdk } from \"./openai-responses-sdk.js\";\nexport { filterResponsesApiTools } from \"./openai-shared.js\";\nexport type {\n\tOpenAIOptions,\n\tOpenAIResponseFormat,\n\tOpenAIToolChoice,\n\tResponsesContentPart,\n\tResponsesInputMessage,\n\tResponsesInputTextPart,\n\tResponsesOutputTextPart,\n} from \"./openai-shared.js\";\nimport type {\n\tOpenAIOptions,\n\tOpenAIResponseFormat,\n\tOpenAIToolChoice,\n} from \"./openai-shared.js\";\nimport { sanitizeSurrogates } from \"./sanitize-unicode.js\";\nimport {\n\tcreateToolArgumentNormalizer,\n\tdescribeValueType,\n\tisRecord,\n} from \"./tool-arguments.js\";\nimport { transformMessages } from \"./transform-messages.js\";\n\nconst toolArgumentNormalizer = createToolArgumentNormalizer({\n\tlogger,\n\tproviderLabel: \"OpenAI\",\n});\n\ninterface OpenAICompat {\n\tsupportsStore: boolean;\n\tsupportsDeveloperRole: boolean;\n\tsupportsReasoningEffort: boolean;\n\tsupportsResponsesApi: boolean;\n\t/** Supports Anthropic-style cache_control (OpenRouter with Claude models) */\n\tsupportsCacheControl: boolean;\n\tmaxTokensField: \"max_tokens\" | \"max_completion_tokens\";\n\trequiresToolResultName: boolean;\n\trequiresAssistantAfterToolResult: boolean;\n\trequiresThinkingAsText: boolean;\n\trequiresMistralToolIds: boolean;\n}\n\nfunction resolveOpenAICompat(\n\tmodel: Pick<Model<Api>, \"baseUrl\" | \"provider\" | \"compat\" | \"id\">,\n): Required<OpenAICompat> {\n\tconst rawBaseUrl = model.baseUrl ?? \"\";\n\tlet baseUrl = rawBaseUrl.toLowerCase();\n\ttry {\n\t\tconst parsed = new URL(rawBaseUrl);\n\t\tconst upstream = parsed.searchParams.get(\"url\");\n\t\tif (upstream) {\n\t\t\tbaseUrl = upstream.toLowerCase();\n\t\t}\n\t} catch {\n\t\t// ignore malformed URLs for compat detection\n\t}\n\tconst provider = (model.provider ?? \"\").toLowerCase();\n\tconst modelId = (model.id ?? \"\").toLowerCase();\n\tconst isMistral = baseUrl.includes(\"mistral.ai\") || provider === \"mistral\";\n\tconst isGrok = baseUrl.includes(\"api.x.ai\") || provider === \"xai\";\n\tconst isOpenAIBase = baseUrl.includes(\"api.openai.com\");\n\tconst isOpenAIProvider = provider === \"openai\";\n\tconst isOpenRouter =\n\t\tbaseUrl.includes(\"openrouter.ai\") || provider === \"openrouter\";\n\tconst supportsResponsesApi =\n\t\tisOpenAIBase ||\n\t\tisOpenAIProvider ||\n\t\tisOpenRouter ||\n\t\tbaseUrl.includes(\"api.groq.com\") ||\n\t\tprovider === \"groq\";\n\t// OpenRouter supports cache_control for Anthropic/Claude models\n\tconst isAnthropicModel =\n\t\tmodelId.includes(\"claude\") || modelId.includes(\"anthropic\");\n\tconst supportsCacheControl = isOpenRouter && isAnthropicModel;\n\tconst nonOpenAIHosts = [\n\t\t\"mistral.ai\",\n\t\t\"api.x.ai\",\n\t\t\"cerebras.ai\",\n\t\t\"chutes.ai\",\n\t\t\"openrouter.ai\",\n\t\t\"api.groq.com\",\n\t\t\"openai.azure.com\",\n\t];\n\tconst isNonOpenAIBase = nonOpenAIHosts.some((host) => baseUrl.includes(host));\n\tconst isOpenAI =\n\t\t(isOpenAIBase || isOpenAIProvider) &&\n\t\t!isNonOpenAIBase &&\n\t\t!isMistral &&\n\t\t!isGrok;\n\n\tconst detected: Required<OpenAICompat> = {\n\t\tsupportsStore: isOpenAI,\n\t\tsupportsDeveloperRole: isOpenAI,\n\t\tsupportsReasoningEffort: isOpenAI && !isGrok,\n\t\tsupportsResponsesApi,\n\t\tsupportsCacheControl,\n\t\tmaxTokensField: isOpenAI ? \"max_completion_tokens\" : \"max_tokens\",\n\t\trequiresToolResultName: isMistral,\n\t\trequiresAssistantAfterToolResult: false,\n\t\trequiresThinkingAsText: isMistral,\n\t\trequiresMistralToolIds: isMistral,\n\t};\n\n\tconst overrides = model.compat;\n\tif (!overrides) {\n\t\treturn detected;\n\t}\n\n\treturn {\n\t\tsupportsStore: overrides.supportsStore ?? detected.supportsStore,\n\t\tsupportsDeveloperRole:\n\t\t\toverrides.supportsDeveloperRole ?? detected.supportsDeveloperRole,\n\t\tsupportsReasoningEffort:\n\t\t\toverrides.supportsReasoningEffort ?? detected.supportsReasoningEffort,\n\t\tsupportsResponsesApi:\n\t\t\toverrides.supportsResponsesApi ?? detected.supportsResponsesApi,\n\t\tsupportsCacheControl:\n\t\t\toverrides.supportsCacheControl ?? detected.supportsCacheControl,\n\t\tmaxTokensField: overrides.maxTokensField ?? detected.maxTokensField,\n\t\trequiresToolResultName:\n\t\t\toverrides.requiresToolResultName ?? detected.requiresToolResultName,\n\t\trequiresAssistantAfterToolResult:\n\t\t\toverrides.requiresAssistantAfterToolResult ??\n\t\t\tdetected.requiresAssistantAfterToolResult,\n\t\trequiresThinkingAsText:\n\t\t\toverrides.requiresThinkingAsText ?? detected.requiresThinkingAsText,\n\t\trequiresMistralToolIds:\n\t\t\toverrides.requiresMistralToolIds ?? detected.requiresMistralToolIds,\n\t};\n}\n\n// Exported for tests\nexport function resolveOpenAICompatForTest(\n\tmodel: Pick<Model<Api>, \"baseUrl\" | \"provider\" | \"compat\" | \"id\">,\n): Required<OpenAICompat> {\n\treturn resolveOpenAICompat(model);\n}\n\n/**\n * Normalize tool call IDs for Mistral.\n * Mistral requires tool IDs to be exactly 9 alphanumeric characters (a-z, A-Z, 0-9).\n * Use a per-request mapping to avoid collisions across multiple tool calls.\n */\nfunction createMistralToolIdNormalizer(isMistral: boolean) {\n\tif (!isMistral) {\n\t\treturn (id: string) => id;\n\t}\n\n\tconst byOriginal = new Map<string, string>();\n\tconst used = new Set<string>();\n\n\tconst hashToBase36 = (value: string) => {\n\t\tconst hex = crypto.createHash(\"sha1\").update(value).digest(\"hex\");\n\t\tconst base36 = BigInt(`0x${hex}`).toString(36);\n\t\treturn base36.padStart(9, \"0\");\n\t};\n\n\tconst makeCandidate = (id: string, attempt: number) => {\n\t\tconst cleaned = id.replace(/[^a-zA-Z0-9]/g, \"\");\n\t\tif (attempt === 0 && cleaned.length >= 9) {\n\t\t\treturn cleaned.slice(0, 9);\n\t\t}\n\t\tconst hashed = hashToBase36(`${id}:${attempt}`);\n\t\treturn hashed.slice(0, 9);\n\t};\n\n\treturn (id: string) => {\n\t\tconst existing = byOriginal.get(id);\n\t\tif (existing) return existing;\n\n\t\tlet attempt = 0;\n\t\tlet candidate = makeCandidate(id, attempt);\n\t\twhile (used.has(candidate)) {\n\t\t\tattempt += 1;\n\t\t\tcandidate = makeCandidate(id, attempt);\n\t\t}\n\t\tused.add(candidate);\n\t\tbyOriginal.set(id, candidate);\n\t\treturn candidate;\n\t};\n}\n\n/**\n * Check if conversation messages contain tool calls or tool results.\n * Some OpenAI-compatible proxies require the tools param when tool history exists.\n */\nfunction hasToolHistory(messages: Context[\"messages\"]): boolean {\n\tfor (const msg of messages ?? []) {\n\t\tif (!msg) continue;\n\t\tif (msg.role === \"toolResult\") return true;\n\t\tif (msg.role === \"assistant\") {\n\t\t\tif (msg.content.some((block) => block.type === \"toolCall\")) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n}\n\n// OpenAI API Types\n\n/** Anthropic-style cache control for OpenRouter */\ninterface CacheControl {\n\ttype: \"ephemeral\";\n}\n\ninterface OpenAITextContentPart {\n\ttype: \"text\";\n\ttext: string;\n\tcache_control?: CacheControl;\n}\n\ninterface OpenAIImageContentPart {\n\ttype: \"image_url\";\n\timage_url: { url: string; detail?: \"auto\" | \"low\" | \"high\" };\n\tcache_control?: CacheControl;\n}\n\ntype OpenAIContentPart = OpenAITextContentPart | OpenAIImageContentPart;\n\ninterface OpenAIResponsesRequestBody {\n\tmodel: string;\n\tinput: Array<{\n\t\trole: string;\n\t\tcontent: Array<\n\t\t\t| { type: \"input_text\"; text: string }\n\t\t\t| { type: \"output_text\"; text: string }\n\t\t>;\n\t}>;\n\tstream: boolean;\n\t// Responses API uses flat tool format (name at top level, not nested under function)\n\ttools?: Array<{\n\t\ttype: \"function\";\n\t\tname: string;\n\t\tdescription: string;\n\t\tparameters: unknown;\n\t}>;\n\ttool_choice?: OpenAIToolChoice;\n\tmax_output_tokens?: number;\n\treasoning?: { effort: string };\n}\n\ninterface OpenAICompletionsRequestBody {\n\tmodel: string;\n\tmessages: OpenAIMessage[];\n\tmax_tokens?: number;\n\tmax_completion_tokens?: number;\n\tstream: boolean;\n\tstream_options: { include_usage: boolean };\n\ttools?: Array<{\n\t\ttype: \"function\";\n\t\tfunction: {\n\t\t\tname: string;\n\t\t\tdescription: string;\n\t\t\tparameters: unknown;\n\t\t};\n\t}>;\n\ttool_choice?: OpenAIToolChoice;\n\ttemperature?: number;\n\treasoning_effort?: string;\n\tresponse_format?: OpenAIResponseFormat;\n\tstore?: boolean;\n}\n\n// =============================================================================\n// Shared Streaming Utilities\n// =============================================================================\n\n/**\n * Appends a delta to existing text, handling potential duplicate prefixes.\n *\n * Some providers may send overlapping deltas where the new delta starts\n * with content that was already received. This function detects and handles\n * such cases to prevent duplicate text.\n *\n * @param existing - The accumulated text so far\n * @param delta - The new delta to append\n * @returns Object with the new text and whether the delta was skipped\n */\nexport function appendDelta(\n\texisting: string,\n\tdelta: string,\n): { next: string; skipped: boolean } {\n\tif (!delta) return { next: existing, skipped: true };\n\tif (existing.endsWith(delta)) {\n\t\treturn { next: existing, skipped: true };\n\t}\n\tconst overlap = Math.min(existing.length, delta.length);\n\tlet shared = 0;\n\tfor (let i = overlap; i > 0; i--) {\n\t\tif (existing.endsWith(delta.slice(0, i))) {\n\t\t\tshared = i;\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn { next: existing + delta.slice(shared), skipped: false };\n}\n\n/**\n * Creates a cost calculator function for a specific model.\n *\n * @param model - The model configuration with cost rates\n * @returns A function that updates usage costs on an AssistantMessage\n */\nexport function createCostCalculator(model: {\n\tcost: { input: number; output: number; cacheRead: number };\n}): (usage: {\n\tinput: number;\n\toutput: number;\n\tcacheRead: number;\n\tcacheWrite: number;\n\tcost: {\n\t\tinput: number;\n\t\toutput: number;\n\t\tcacheRead: number;\n\t\tcacheWrite: number;\n\t\ttotal: number;\n\t};\n}) => void {\n\treturn (usage) => {\n\t\tusage.cost = {\n\t\t\tinput: (usage.input * model.cost.input) / 1_000_000,\n\t\t\toutput: (usage.output * model.cost.output) / 1_000_000,\n\t\t\tcacheRead: (usage.cacheRead * model.cost.cacheRead) / 1_000_000,\n\t\t\tcacheWrite: 0, // OpenAI doesn't charge for cache writes\n\t\t\ttotal: 0,\n\t\t};\n\t\tusage.cost.total =\n\t\t\tusage.cost.input + usage.cost.output + usage.cost.cacheRead;\n\t};\n}\n\n// OpenAI SSE Event Types (Completions API)\ninterface OpenAICompletionsDelta {\n\tcontent?: string | Array<unknown>;\n\treasoning_content?: string;\n\treasoning?: string;\n\ttool_calls?: Array<{\n\t\tindex: number;\n\t\tid?: string;\n\t\tfunction?: {\n\t\t\tname?: string;\n\t\t\targuments?: string | Record<string, unknown> | null;\n\t\t};\n\t}>;\n}\n\ninterface OpenAICompletionsChoice {\n\tindex: number;\n\tdelta?: OpenAICompletionsDelta;\n\tfinish_reason?: \"stop\" | \"length\" | \"tool_calls\" | null;\n}\n\ninterface OpenAICompletionsUsage {\n\tprompt_tokens?: number;\n\tcompletion_tokens?: number;\n\tprompt_tokens_details?: {\n\t\tcached_tokens?: number;\n\t};\n}\n\ninterface OpenAICompletionsChunk {\n\tchoices?: OpenAICompletionsChoice[];\n\tusage?: OpenAICompletionsUsage;\n}\n\ninterface OpenAIMessage {\n\trole: \"system\" | \"developer\" | \"user\" | \"assistant\" | \"tool\";\n\tcontent:\n\t\t| string\n\t\t| Array<\n\t\t\t\t| { type: \"text\"; text: string; cache_control?: CacheControl }\n\t\t\t\t| {\n\t\t\t\t\t\ttype: \"image_url\";\n\t\t\t\t\t\timage_url: { url: string; detail?: \"auto\" | \"low\" | \"high\" };\n\t\t\t\t\t\tcache_control?: CacheControl;\n\t\t\t\t }\n\t\t >;\n\ttool_call_id?: string;\n\ttool_calls?: Array<{\n\t\tid: string;\n\t\ttype: \"function\";\n\t\tfunction: { name: string; arguments: string };\n\t}>;\n}\n\n/**\n * OpenAI/OpenRouter provider with automatic prompt caching (no explicit cache_control needed).\n * Caching is automatic for prompts >= 1024 tokens.\n * Structure prompts with static content at the beginning for best cache hit rates.\n */\n// Exported for tests\nexport function resolveOpenAIUrlForTest(\n\tbaseUrl: string,\n\tapi: \"openai-responses\" | \"openai-completions\",\n): string {\n\treturn normalizeLLMBaseUrl(baseUrl, \"openai\", api);\n}\n\nexport async function* streamOpenAI(\n\tmodel: Model<\"openai-responses\" | \"openai-completions\">,\n\tcontext: Context,\n\toptions: OpenAIOptions,\n): AsyncGenerator<AssistantMessageEvent, void, unknown> {\n\tconst apiKey = options.apiKey;\n\tif (!apiKey) {\n\t\tconst providerLabel = model.provider || \"openai\";\n\t\tconst hint =\n\t\t\tproviderLabel === \"github-copilot\"\n\t\t\t\t? \" Run /login github-copilot to authorize.\"\n\t\t\t\t: \"\";\n\t\tthrow new Error(\n\t\t\t`API key is required for provider \"${providerLabel}\".${hint}`,\n\t\t);\n\t}\n\n\tconst compat = resolveOpenAICompat(model);\n\tif (model.api === \"openai-responses\" && !compat.supportsResponsesApi) {\n\t\tthrow new Error(\n\t\t\t`Responses API is not supported by ${model.provider}/${model.id}. Use openai-completions or set compat.supportsResponsesApi if your endpoint supports /responses.`,\n\t\t);\n\t}\n\tconst hasSummaryRequest =\n\t\toptions.reasoningSummary !== undefined && options.reasoningSummary !== null;\n\tif (hasSummaryRequest && model.api !== \"openai-responses\") {\n\t\tthrow new Error(\n\t\t\t`Reasoning summaries require the Responses API (model: ${model.provider}/${model.id}).`,\n\t\t);\n\t}\n\tif (hasSummaryRequest && !model.reasoning) {\n\t\tthrow new Error(\n\t\t\t`Reasoning summaries are not supported for non-reasoning models (model: ${model.provider}/${model.id}).`,\n\t\t);\n\t}\n\tif (options.reasoningEffort && !compat.supportsReasoningEffort) {\n\t\tthrow new Error(\n\t\t\t`Reasoning effort is not supported by ${model.provider}/${model.id}. Disable thinking or choose another model.`,\n\t\t);\n\t}\n\tconst normalizeToolId = createMistralToolIdNormalizer(\n\t\tcompat.requiresMistralToolIds,\n\t);\n\tconst messages: OpenAIMessage[] = [];\n\tconst pushMessage = (message: OpenAIMessage) => {\n\t\tmessages.push(message);\n\t\tlastSentRole = message.role;\n\t};\n\n\t// Track cache control items (max 4 for Anthropic compatibility)\n\tlet cacheAppliedCount = 0;\n\tconst maxCacheItems = 4;\n\n\t// System prompt\n\tif (context.systemPrompt) {\n\t\tconst role =\n\t\t\tmodel.reasoning && compat.supportsDeveloperRole ? \"developer\" : \"system\";\n\t\tconst systemMessage: OpenAIMessage = {\n\t\t\trole,\n\t\t\tcontent: sanitizeSurrogates(context.systemPrompt),\n\t\t};\n\t\t// Apply cache_control for OpenRouter with Claude models\n\t\tif (compat.supportsCacheControl && cacheAppliedCount < maxCacheItems) {\n\t\t\t// Wrap content in array format with cache_control\n\t\t\tsystemMessage.content = [\n\t\t\t\t{\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\ttext: sanitizeSurrogates(context.systemPrompt),\n\t\t\t\t\tcache_control: { type: \"ephemeral\" },\n\t\t\t\t},\n\t\t\t];\n\t\t\tcacheAppliedCount++;\n\t\t}\n\t\tmessages.push(systemMessage);\n\t}\n\n\t// Transform messages for cross-provider compatibility\n\tconst transformedMessages = transformMessages(context.messages, model);\n\tlet lastOriginalRole: Message[\"role\"] | null = null;\n\tlet lastSentRole: OpenAIMessage[\"role\"] | null = null;\n\n\t// Convert messages\n\tfor (const msg of transformedMessages) {\n\t\tlet didSend = false;\n\n\t\tif (\n\t\t\tcompat.requiresAssistantAfterToolResult &&\n\t\t\tlastOriginalRole === \"toolResult\" &&\n\t\t\tmsg.role === \"user\"\n\t\t) {\n\t\t\tpushMessage({\n\t\t\t\trole: \"assistant\",\n\t\t\t\tcontent: \"I have processed the tool results.\",\n\t\t\t});\n\t\t}\n\n\t\tif (msg.role === \"user\") {\n\t\t\tconst content =\n\t\t\t\ttypeof msg.content === \"string\"\n\t\t\t\t\t? sanitizeSurrogates(msg.content)\n\t\t\t\t\t: msg.content.map((c) => {\n\t\t\t\t\t\t\tif (c.type === \"text\") {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\ttype: \"text\" as const,\n\t\t\t\t\t\t\t\t\ttext: sanitizeSurrogates(c.text),\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// OpenAI expects image URLs\n\t\t\t\t\t\t\tconst dataUrl = `data:${c.mimeType};base64,${c.data}`;\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\ttype: \"image_url\" as const,\n\t\t\t\t\t\t\t\timage_url: { url: dataUrl },\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t});\n\n\t\t\tif (Array.isArray(content)) {\n\t\t\t\tconst filteredContent = model.input.includes(\"image\")\n\t\t\t\t\t? content\n\t\t\t\t\t: content.filter((c) => c.type !== \"image_url\");\n\t\t\t\tif (filteredContent.length === 0) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tpushMessage({ role: \"user\", content: filteredContent });\n\t\t\t\tdidSend = true;\n\t\t\t} else {\n\t\t\t\tpushMessage({ role: \"user\", content });\n\t\t\t\tdidSend = true;\n\t\t\t}\n\t\t} else if (msg.role === \"assistant\") {\n\t\t\tconst textContent: Array<{ type: \"text\"; text: string }> = [];\n\t\t\tconst toolCalls: Array<{\n\t\t\t\tid: string;\n\t\t\t\ttype: \"function\";\n\t\t\t\tfunction: { name: string; arguments: string };\n\t\t\t}> = [];\n\n\t\t\tfor (const c of msg.content) {\n\t\t\t\tif (c.type === \"text\") {\n\t\t\t\t\tconst text = sanitizeSurrogates(c.text);\n\t\t\t\t\tif (text.length === 0) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttextContent.push({ type: \"text\", text });\n\t\t\t\t} else if (c.type === \"toolCall\") {\n\t\t\t\t\ttoolCalls.push({\n\t\t\t\t\t\tid: normalizeToolId(c.id),\n\t\t\t\t\t\ttype: \"function\",\n\t\t\t\t\t\tfunction: {\n\t\t\t\t\t\t\tname: c.name,\n\t\t\t\t\t\t\targuments: JSON.stringify(c.arguments),\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst message: OpenAIMessage & Record<string, unknown> = {\n\t\t\t\trole: \"assistant\",\n\t\t\t\tcontent: textContent.length > 0 ? textContent : \"\",\n\t\t\t};\n\n\t\t\tlet hasReasoningSignature = false;\n\t\t\tconst thinkingBlocks = msg.content.filter(\n\t\t\t\t(block) => block.type === \"thinking\",\n\t\t\t);\n\t\t\tif (thinkingBlocks.length > 0) {\n\t\t\t\tif (compat.requiresThinkingAsText) {\n\t\t\t\t\tconst thinkingText = thinkingBlocks\n\t\t\t\t\t\t.map((block) =>\n\t\t\t\t\t\t\tsanitizeSurrogates(\n\t\t\t\t\t\t\t\t(block.type === \"thinking\" ? block.thinking : \"\") ?? \"\",\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join(\"\\n\");\n\t\t\t\t\tconst textBlock = `<thinking>\\n${thinkingText}\\n</thinking>`;\n\t\t\t\t\tif (Array.isArray(message.content)) {\n\t\t\t\t\t\tmessage.content.unshift({ type: \"text\", text: textBlock });\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmessage.content = [{ type: \"text\", text: textBlock }];\n\t\t\t\t\t}\n\t\t\t\t} else if (thinkingBlocks[0]?.type === \"thinking\") {\n\t\t\t\t\tconst signature = thinkingBlocks[0].thinkingSignature;\n\t\t\t\t\tif (signature && signature.length > 0) {\n\t\t\t\t\t\tmessage[signature] = thinkingBlocks\n\t\t\t\t\t\t\t.map((block) =>\n\t\t\t\t\t\t\t\tsanitizeSurrogates(\n\t\t\t\t\t\t\t\t\t(block.type === \"thinking\" ? block.thinking : \"\") ?? \"\",\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.join(\"\\n\");\n\t\t\t\t\t\thasReasoningSignature = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (toolCalls.length > 0) {\n\t\t\t\tmessage.tool_calls = toolCalls;\n\t\t\t}\n\n\t\t\tconst content = message.content;\n\t\t\tconst hasContent = Array.isArray(content)\n\t\t\t\t? content.length > 0\n\t\t\t\t: content.length > 0;\n\t\t\tif (!hasContent && toolCalls.length === 0 && !hasReasoningSignature) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tpushMessage(message);\n\t\t\tdidSend = true;\n\t\t} else if (msg.role === \"toolResult\") {\n\t\t\tconst textResult =\n\t\t\t\ttypeof msg.content === \"string\"\n\t\t\t\t\t? msg.content\n\t\t\t\t\t: msg.content\n\t\t\t\t\t\t\t.filter((c) => c.type === \"text\")\n\t\t\t\t\t\t\t.map((c) => sanitizeSurrogates(c.text))\n\t\t\t\t\t\t\t.join(\"\\n\");\n\t\t\tconst hasImages =\n\t\t\t\ttypeof msg.content !== \"string\" &&\n\t\t\t\tmsg.content.some((c) => c.type === \"image\");\n\t\t\tconst hasText = textResult.length > 0;\n\n\t\t\tconst toolMessage: OpenAIMessage & { name?: string } = {\n\t\t\t\trole: \"tool\",\n\t\t\t\ttool_call_id: normalizeToolId(msg.toolCallId),\n\t\t\t\tcontent: sanitizeSurrogates(\n\t\t\t\t\thasText\n\t\t\t\t\t\t? textResult\n\t\t\t\t\t\t: hasImages\n\t\t\t\t\t\t\t? \"(see attached image)\"\n\t\t\t\t\t\t\t: \"(empty result)\",\n\t\t\t\t),\n\t\t\t};\n\n\t\t\t// Some providers (e.g., Mistral) require the 'name' field in tool results\n\t\t\tif (compat.requiresToolResultName && msg.toolName) {\n\t\t\t\ttoolMessage.name = msg.toolName;\n\t\t\t}\n\n\t\t\tpushMessage(toolMessage);\n\t\t\tdidSend = true;\n\n\t\t\tif (hasImages && model.input.includes(\"image\")) {\n\t\t\t\tconst contentBlocks: Array<\n\t\t\t\t\t| { type: \"text\"; text: string }\n\t\t\t\t\t| { type: \"image_url\"; image_url: { url: string } }\n\t\t\t\t> = [];\n\n\t\t\t\tcontentBlocks.push({\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\ttext: \"Attached image(s) from tool result:\",\n\t\t\t\t});\n\n\t\t\t\tif (typeof msg.content !== \"string\") {\n\t\t\t\t\tfor (const block of msg.content) {\n\t\t\t\t\t\tif (block.type === \"image\") {\n\t\t\t\t\t\t\tcontentBlocks.push({\n\t\t\t\t\t\t\t\ttype: \"image_url\",\n\t\t\t\t\t\t\t\timage_url: {\n\t\t\t\t\t\t\t\t\turl: `data:${block.mimeType};base64,${block.data}`,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tpushMessage({\n\t\t\t\t\trole: \"user\",\n\t\t\t\t\tcontent: contentBlocks,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (didSend) {\n\t\t\tlastOriginalRole = msg.role;\n\t\t}\n\t}\n\n\tif (model.api === \"openai-responses\") {\n\t\treturn yield* streamResponsesApiSdk(\n\t\t\tmodel as Model<\"openai-responses\">,\n\t\t\tcontext,\n\t\t\toptions,\n\t\t);\n\t}\n\n\t// Apply cache_control to last messages for OpenRouter with Claude\n\tif (compat.supportsCacheControl) {\n\t\t// Find last user message and apply cache_control\n\t\tfor (\n\t\t\tlet i = messages.length - 1;\n\t\t\ti >= 0 && cacheAppliedCount < maxCacheItems;\n\t\t\ti--\n\t\t) {\n\t\t\tconst msg = messages[i];\n\t\t\tif (!msg) continue;\n\t\t\tif (msg.role === \"user\" && typeof msg.content !== \"string\") {\n\t\t\t\tconst lastContent = msg.content[msg.content.length - 1];\n\t\t\t\tif (lastContent && !lastContent.cache_control) {\n\t\t\t\t\tlastContent.cache_control = { type: \"ephemeral\" };\n\t\t\t\t\tcacheAppliedCount++;\n\t\t\t\t}\n\t\t\t} else if (msg.role === \"user\" && typeof msg.content === \"string\") {\n\t\t\t\t// Convert string content to array format with cache_control\n\t\t\t\tmessages[i] = {\n\t\t\t\t\trole: msg.role,\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\ttext: msg.content,\n\t\t\t\t\t\t\tcache_control: { type: \"ephemeral\" },\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t};\n\t\t\t\tcacheAppliedCount++;\n\t\t\t}\n\t\t}\n\t}\n\n\tconst requestBody: OpenAICompletionsRequestBody = {\n\t\tmodel: model.id,\n\t\tmessages,\n\t\tstream: true,\n\t\tstream_options: { include_usage: true },\n\t};\n\n\tif (compat.supportsStore) {\n\t\trequestBody.store = false;\n\t}\n\n\tconst maxTokens = options.maxTokens ?? model.maxTokens;\n\tif (compat.maxTokensField === \"max_tokens\") {\n\t\trequestBody.max_tokens = maxTokens;\n\t} else {\n\t\trequestBody.max_completion_tokens = maxTokens;\n\t}\n\n\tif (context.tools && context.tools.length > 0) {\n\t\trequestBody.tools = context.tools.map((tool, idx, arr) => {\n\t\t\tconst toolDef: {\n\t\t\t\ttype: \"function\";\n\t\t\t\tfunction: { name: string; description: string; parameters: unknown };\n\t\t\t\tcache_control?: CacheControl;\n\t\t\t} = {\n\t\t\t\ttype: \"function\" as const,\n\t\t\t\tfunction: {\n\t\t\t\t\tname: tool.name,\n\t\t\t\t\tdescription: tool.description,\n\t\t\t\t\tparameters: tool.parameters,\n\t\t\t\t},\n\t\t\t};\n\t\t\t// Apply cache_control to last tool for OpenRouter with Claude\n\t\t\tif (\n\t\t\t\tcompat.supportsCacheControl &&\n\t\t\t\tidx === arr.length - 1 &&\n\t\t\t\tcacheAppliedCount < maxCacheItems\n\t\t\t) {\n\t\t\t\ttoolDef.cache_control = { type: \"ephemeral\" };\n\t\t\t\tcacheAppliedCount++;\n\t\t\t}\n\t\t\treturn toolDef;\n\t\t});\n\t} else if (hasToolHistory(context.messages)) {\n\t\trequestBody.tools = [];\n\t}\n\n\t// Set tool_choice if specified\n\tif (options.toolChoice && requestBody.tools && requestBody.tools.length > 0) {\n\t\trequestBody.tool_choice = options.toolChoice;\n\t}\n\n\tif (options.temperature !== undefined) {\n\t\trequestBody.temperature = options.temperature;\n\t}\n\n\t// Add response format for structured outputs\n\tif (options.responseFormat) {\n\t\trequestBody.response_format = options.responseFormat;\n\t}\n\n\t// Add reasoning effort for reasoning-capable models using unified thinking level mapper\n\tif (\n\t\toptions.reasoningEffort &&\n\t\tmodel.reasoning &&\n\t\tcompat.supportsReasoningEffort\n\t) {\n\t\tconst effort = mapThinkingLevelToOpenAIEffort(options.reasoningEffort);\n\t\tif (effort) {\n\t\t\trequestBody.reasoning_effort = effort;\n\t\t}\n\t}\n\tif (options.requestBody) {\n\t\tObject.assign(requestBody, options.requestBody);\n\t}\n\n\tconst headers: Record<string, string> = {\n\t\t\"Content-Type\": \"application/json\",\n\t\tAuthorization: `Bearer ${apiKey}`,\n\t\t...options.headers,\n\t};\n\tif (model.provider === \"github-copilot\") {\n\t\tconst isAgentCall = lastSentRole ? lastSentRole !== \"user\" : false;\n\t\theaders[\"X-Initiator\"] = isAgentCall ? \"agent\" : \"user\";\n\t}\n\n\tconst targetUrl = normalizeLLMBaseUrl(\n\t\tmodel.baseUrl,\n\t\tmodel.provider,\n\t\tmodel.api,\n\t);\n\n\tconst response = await fetchWithRetry(\n\t\ttargetUrl,\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\theaders,\n\t\t\tbody: JSON.stringify(requestBody),\n\t\t\tsignal: options.signal,\n\t\t},\n\t\tmodel.provider,\n\t\t{ modelId: model.id },\n\t);\n\n\tif (!response.ok) {\n\t\tconst errorText = await response.text();\n\t\tthrow new Error(`OpenAI API error (${response.status}): ${errorText}`);\n\t}\n\n\tif (!response.body) {\n\t\tthrow new Error(\"Response body is null\");\n\t}\n\n\tconst partial: AssistantMessage = {\n\t\trole: \"assistant\",\n\t\tcontent: [],\n\t\tapi: model.api,\n\t\tprovider: model.provider,\n\t\tmodel: model.id,\n\t\tusage: {\n\t\t\tinput: 0,\n\t\t\toutput: 0,\n\t\t\tcacheRead: 0,\n\t\t\tcacheWrite: 0,\n\t\t\tcost: {\n\t\t\t\tinput: 0,\n\t\t\t\toutput: 0,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t\ttotal: 0,\n\t\t\t},\n\t\t},\n\t\tstopReason: \"stop\",\n\t\ttimestamp: Date.now(),\n\t};\n\n\tyield { type: \"start\", partial };\n\n\t// Wrap reader with idle timeout detection\n\tconst rawReader = response.body.getReader();\n\tconst reader = createTimeoutReader(rawReader, {\n\t\tprovider: model.provider,\n\t\tsignal: options.signal,\n\t});\n\tconst decoder = new TextDecoder();\n\tlet buffer = \"\";\n\tconst toolArgBuffers = new Map<number, string>();\n\tconst toolArgOverrides = new Map<number, Record<string, unknown>>();\n\tconst toolCallContentIndexes = new Map<number, number>();\n\tlet cacheAdjusted = false;\n\tconst textEnded = new Set<number>();\n\tconst toolEnded = new Set<number>();\n\tconst thinkingEnded = new Set<number>();\n\n\t// Use shared utilities for delta handling and cost calculation\n\tconst updateCosts = createCostCalculator(model);\n\n\ttry {\n\t\twhile (true) {\n\t\t\tconst { done, value } = await reader.read();\n\t\t\tif (done) break;\n\n\t\t\tbuffer += decoder.decode(value, { stream: true });\n\t\t\tconst lines = buffer.split(\"\\n\");\n\t\t\tbuffer = lines.pop() || \"\";\n\n\t\t\tfor (const line of lines) {\n\t\t\t\tif (!line.trim() || !line.startsWith(\"data: \")) continue;\n\t\t\t\tconst data = line.slice(6);\n\t\t\t\tif (data === \"[DONE]\") continue;\n\n\t\t\t\ttry {\n\t\t\t\t\tconst event = JSON.parse(data);\n\t\t\t\t\tconst choice = event.choices?.[0];\n\n\t\t\t\t\tif (!choice) {\n\t\t\t\t\t\t// Check for usage data\n\t\t\t\t\t\tif (event.usage) {\n\t\t\t\t\t\t\tpartial.usage.input = event.usage.prompt_tokens || 0;\n\t\t\t\t\t\t\t// Include reasoning tokens in output count\n\t\t\t\t\t\t\tpartial.usage.output =\n\t\t\t\t\t\t\t\t(event.usage.completion_tokens || 0) +\n\t\t\t\t\t\t\t\t(event.usage.completion_tokens_details?.reasoning_tokens || 0);\n\t\t\t\t\t\t\t// OpenAI caching: cached_tokens in prompt_tokens_details\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tevent.usage.prompt_tokens_details?.cached_tokens &&\n\t\t\t\t\t\t\t\t!cacheAdjusted\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tpartial.usage.cacheRead =\n\t\t\t\t\t\t\t\t\tevent.usage.prompt_tokens_details.cached_tokens;\n\t\t\t\t\t\t\t\t// Adjust input tokens to not double count (only once)\n\t\t\t\t\t\t\t\tpartial.usage.input -= partial.usage.cacheRead;\n\t\t\t\t\t\t\t\tcacheAdjusted = true;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tupdateCosts(partial.usage);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst delta = choice.delta;\n\t\t\t\t\tif (delta?.content) {\n\t\t\t\t\t\tconst contentDelta = Array.isArray(delta.content)\n\t\t\t\t\t\t\t? delta.content\n\t\t\t\t\t\t\t\t\t.map((part: unknown) => {\n\t\t\t\t\t\t\t\t\t\tif (typeof part === \"string\")\n\t\t\t\t\t\t\t\t\t\t\treturn sanitizeSurrogates(part);\n\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\tpart &&\n\t\t\t\t\t\t\t\t\t\t\ttypeof part === \"object\" &&\n\t\t\t\t\t\t\t\t\t\t\t\"text\" in part &&\n\t\t\t\t\t\t\t\t\t\t\ttypeof (part as { text: unknown }).text === \"string\"\n\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\treturn sanitizeSurrogates(\n\t\t\t\t\t\t\t\t\t\t\t\t(part as { text: string }).text,\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tlogger.warn(\"Unsupported OpenAI content part\", {\n\t\t\t\t\t\t\t\t\t\t\tpartType: typeof part,\n\t\t\t\t\t\t\t\t\t\t\tkeys:\n\t\t\t\t\t\t\t\t\t\t\t\tpart && typeof part === \"object\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t? Object.keys(part)\n\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\t\t\ttype:\n\t\t\t\t\t\t\t\t\t\t\t\tpart && typeof part === \"object\" && \"type\" in part\n\t\t\t\t\t\t\t\t\t\t\t\t\t? (part as { type: unknown }).type\n\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\treturn \"\";\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t.filter((s: string) => s.length > 0)\n\t\t\t\t\t\t\t\t\t.join(\"\")\n\t\t\t\t\t\t\t: sanitizeSurrogates(delta.content);\n\n\t\t\t\t\t\tif (contentDelta && contentDelta.length > 0) {\n\t\t\t\t\t\t\t// Find or create text content block\n\t\t\t\t\t\t\tlet textBlock = partial.content.find((c) => c.type === \"text\");\n\t\t\t\t\t\t\tif (!textBlock) {\n\t\t\t\t\t\t\t\tconst idx = partial.content.length;\n\t\t\t\t\t\t\t\ttextBlock = { type: \"text\", text: \"\" };\n\t\t\t\t\t\t\t\tpartial.content.push(textBlock);\n\t\t\t\t\t\t\t\tyield { type: \"text_start\", contentIndex: idx, partial };\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst idx = partial.content.indexOf(textBlock);\n\t\t\t\t\t\t\tconst previousLength = textBlock.text.length;\n\t\t\t\t\t\t\tconst { next, skipped } = appendDelta(\n\t\t\t\t\t\t\t\ttextBlock.text,\n\t\t\t\t\t\t\t\tcontentDelta,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (skipped) continue;\n\t\t\t\t\t\t\ttextBlock.text = next;\n\t\t\t\t\t\t\tif (!textEnded.has(idx)) {\n\t\t\t\t\t\t\t\t// will mark ended on text_end\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\t\ttype: \"text_delta\",\n\t\t\t\t\t\t\t\tcontentIndex: idx,\n\t\t\t\t\t\t\t\tdelta: next.slice(previousLength),\n\t\t\t\t\t\t\t\tpartial,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Handle reasoning/thinking content\n\t\t\t\t\t// Some endpoints return reasoning in \"reasoning_content\" (llama.cpp),\n\t\t\t\t\t// others use \"reasoning\" (other OpenAI-compatible endpoints)\n\t\t\t\t\tconst reasoningDelta = delta\n\t\t\t\t\t\t? delta.reasoning_content || delta.reasoning || \"\"\n\t\t\t\t\t\t: \"\";\n\t\t\t\t\tif (reasoningDelta.length > 0) {\n\t\t\t\t\t\t// Find or create thinking block\n\t\t\t\t\t\tlet thinkingBlock = partial.content.find(\n\t\t\t\t\t\t\t(c) => c.type === \"thinking\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (!thinkingBlock) {\n\t\t\t\t\t\t\tconst idx = partial.content.length;\n\t\t\t\t\t\t\tthinkingBlock = { type: \"thinking\", thinking: \"\" };\n\t\t\t\t\t\t\tpartial.content.push(thinkingBlock);\n\t\t\t\t\t\t\tyield { type: \"thinking_start\", contentIndex: idx, partial };\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (thinkingBlock.type === \"thinking\") {\n\t\t\t\t\t\t\tconst idx = partial.content.indexOf(thinkingBlock);\n\t\t\t\t\t\t\tconst previousLength = thinkingBlock.thinking.length;\n\t\t\t\t\t\t\tconst { next, skipped } = appendDelta(\n\t\t\t\t\t\t\t\tthinkingBlock.thinking,\n\t\t\t\t\t\t\t\treasoningDelta,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (skipped) continue;\n\t\t\t\t\t\t\tthinkingBlock.thinking = next;\n\t\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\t\ttype: \"thinking_delta\",\n\t\t\t\t\t\t\t\tcontentIndex: idx,\n\t\t\t\t\t\t\t\tdelta: next.slice(previousLength),\n\t\t\t\t\t\t\t\tpartial,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (delta?.tool_calls) {\n\t\t\t\t\t\tfor (const toolCall of delta.tool_calls) {\n\t\t\t\t\t\t\tconst streamIdx = toolCall.index;\n\t\t\t\t\t\t\tlet idx = toolCallContentIndexes.get(streamIdx);\n\n\t\t\t\t\t\t\tif (idx === undefined) {\n\t\t\t\t\t\t\t\tidx = partial.content.length;\n\t\t\t\t\t\t\t\tpartial.content.push({\n\t\t\t\t\t\t\t\t\ttype: \"toolCall\",\n\t\t\t\t\t\t\t\t\tid: \"\",\n\t\t\t\t\t\t\t\t\tname: \"\",\n\t\t\t\t\t\t\t\t\targuments: {},\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\ttoolCallContentIndexes.set(streamIdx, idx);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst block = partial.content[idx];\n\t\t\t\t\t\t\tif (!block || block.type !== \"toolCall\") continue;\n\n\t\t\t\t\t\t\tif (toolCall.id) {\n\t\t\t\t\t\t\t\tblock.id = toolCall.id;\n\t\t\t\t\t\t\t\tblock.name = toolCall.function?.name || \"\";\n\t\t\t\t\t\t\t\tyield { type: \"toolcall_start\", contentIndex: idx, partial };\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (toolCall.function && \"arguments\" in toolCall.function) {\n\t\t\t\t\t\t\t\tconst argsDelta = toolCall.function.arguments;\n\t\t\t\t\t\t\t\tif (typeof argsDelta === \"string\") {\n\t\t\t\t\t\t\t\t\ttoolArgOverrides.delete(idx);\n\t\t\t\t\t\t\t\t\tconst existing = toolArgBuffers.get(idx) ?? \"\";\n\t\t\t\t\t\t\t\t\tconst combined = existing + argsDelta;\n\t\t\t\t\t\t\t\t\ttoolArgBuffers.set(idx, combined);\n\n\t\t\t\t\t\t\t\t\t// Parse streaming JSON progressively\n\t\t\t\t\t\t\t\t\t// This allows UI to show partial arguments like file paths\n\t\t\t\t\t\t\t\t\t// before the complete JSON arrives\n\t\t\t\t\t\t\t\t\tblock.arguments = toolArgumentNormalizer.parseFromString(\n\t\t\t\t\t\t\t\t\t\tcombined,\n\t\t\t\t\t\t\t\t\t\t{ callId: block.id, name: block.name, stage: \"delta\" },\n\t\t\t\t\t\t\t\t\t\t{ logInvalid: false },\n\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\t\t\t\ttype: \"toolcall_delta\",\n\t\t\t\t\t\t\t\t\t\tcontentIndex: idx,\n\t\t\t\t\t\t\t\t\t\tdelta: argsDelta,\n\t\t\t\t\t\t\t\t\t\tpartial,\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t} else if (isRecord(argsDelta)) {\n\t\t\t\t\t\t\t\t\ttoolArgumentNormalizer.warnOnce(\n\t\t\t\t\t\t\t\t\t\t\"delta:object\",\n\t\t\t\t\t\t\t\t\t\t\"OpenAI tool call arguments delta was object\",\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tcallId: block.id,\n\t\t\t\t\t\t\t\t\t\t\tname: block.name,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\ttoolArgOverrides.set(idx, argsDelta);\n\t\t\t\t\t\t\t\t\ttoolArgBuffers.delete(idx);\n\t\t\t\t\t\t\t\t\tblock.arguments = argsDelta;\n\t\t\t\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\t\t\t\ttype: \"toolcall_delta\",\n\t\t\t\t\t\t\t\t\t\tcontentIndex: idx,\n\t\t\t\t\t\t\t\t\t\tdelta: JSON.stringify(argsDelta),\n\t\t\t\t\t\t\t\t\t\tpartial,\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t} else if (argsDelta !== null && argsDelta !== undefined) {\n\t\t\t\t\t\t\t\t\tconst rawType = describeValueType(argsDelta);\n\t\t\t\t\t\t\t\t\ttoolArgumentNormalizer.warnOnce(\n\t\t\t\t\t\t\t\t\t\t`delta:${rawType}`,\n\t\t\t\t\t\t\t\t\t\t\"OpenAI tool call arguments delta was non-string\",\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tcallId: block.id,\n\t\t\t\t\t\t\t\t\t\t\tname: block.name,\n\t\t\t\t\t\t\t\t\t\t\trawType,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (choice.finish_reason) {\n\t\t\t\t\t\tpartial.stopReason =\n\t\t\t\t\t\t\tchoice.finish_reason === \"stop\"\n\t\t\t\t\t\t\t\t? \"stop\"\n\t\t\t\t\t\t\t\t: choice.finish_reason === \"length\"\n\t\t\t\t\t\t\t\t\t? \"length\"\n\t\t\t\t\t\t\t\t\t: choice.finish_reason === \"tool_calls\"\n\t\t\t\t\t\t\t\t\t\t? \"toolUse\"\n\t\t\t\t\t\t\t\t\t\t: \"stop\";\n\n\t\t\t\t\t\t// Finalize all content blocks\n\t\t\t\t\t\tfor (let i = 0; i < partial.content.length; i++) {\n\t\t\t\t\t\t\tconst block = partial.content[i];\n\t\t\t\t\t\t\tif (!block) continue;\n\t\t\t\t\t\t\tif (block.type === \"toolCall\" && !toolEnded.has(i)) {\n\t\t\t\t\t\t\t\tconst overrideArgs = toolArgOverrides.get(i);\n\t\t\t\t\t\t\t\tif (overrideArgs) {\n\t\t\t\t\t\t\t\t\tblock.arguments = overrideArgs;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t// Final parse of accumulated JSON\n\t\t\t\t\t\t\t\t\tconst partialArgs = toolArgBuffers.get(i);\n\t\t\t\t\t\t\t\t\tif (partialArgs !== undefined) {\n\t\t\t\t\t\t\t\t\t\tblock.arguments = toolArgumentNormalizer.parseFromString(\n\t\t\t\t\t\t\t\t\t\t\tpartialArgs,\n\t\t\t\t\t\t\t\t\t\t\t{ callId: block.id, name: block.name, stage: \"done\" },\n\t\t\t\t\t\t\t\t\t\t\t{ logInvalid: true },\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tblock.arguments = isRecord(block.arguments)\n\t\t\t\t\t\t\t\t\t\t\t? block.arguments\n\t\t\t\t\t\t\t\t\t\t\t: {};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttoolArgBuffers.delete(i);\n\t\t\t\t\t\t\t\ttoolArgOverrides.delete(i);\n\n\t\t\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\t\t\t\t\t\tcontentIndex: i,\n\t\t\t\t\t\t\t\t\ttoolCall: block,\n\t\t\t\t\t\t\t\t\tpartial,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\ttoolEnded.add(i);\n\t\t\t\t\t\t\t} else if (block.type === \"text\" && !textEnded.has(i)) {\n\t\t\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\t\t\ttype: \"text_end\",\n\t\t\t\t\t\t\t\t\tcontentIndex: i,\n\t\t\t\t\t\t\t\t\tcontent: block.text,\n\t\t\t\t\t\t\t\t\tpartial,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\ttextEnded.add(i);\n\t\t\t\t\t\t\t} else if (block.type === \"thinking\" && !thinkingEnded.has(i)) {\n\t\t\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\t\t\ttype: \"thinking_end\",\n\t\t\t\t\t\t\t\t\tcontentIndex: i,\n\t\t\t\t\t\t\t\t\tcontent: block.thinking,\n\t\t\t\t\t\t\t\t\tpartial,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tthinkingEnded.add(i);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Calculate costs one last time (in case no usage block arrived)\n\t\t\t\t\t\tupdateCosts(partial.usage);\n\n\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\ttype: \"done\",\n\t\t\t\t\t\t\treason: partial.stopReason,\n\t\t\t\t\t\t\tmessage: partial,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tlogger.warn(\"Failed to parse OpenAI event\", {\n\t\t\t\t\t\terror: e instanceof Error ? e.message : String(e),\n\t\t\t\t\t\tstack: e instanceof Error ? e.stack : undefined,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} catch (error: unknown) {\n\t\tif (error instanceof Error && error.name === \"AbortError\") {\n\t\t\tpartial.stopReason = \"aborted\";\n\t\t\tyield { type: \"error\", reason: \"aborted\", error: partial };\n\t\t} else if (isStreamIdleTimeoutError(error)) {\n\t\t\t// Re-throw idle timeout errors so caller can retry\n\t\t\tthrow error;\n\t\t} else {\n\t\t\tthrow error;\n\t\t}\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/agent/providers/openai.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * OpenAI Provider - LLM Integration for OpenAI-Compatible APIs\n *\n * This module implements streaming communication with OpenAI's API and\n * any OpenAI-compatible endpoints (e.g., Azure OpenAI, local models via\n * LM Studio, Ollama, vLLM, etc.).\n *\n * ## Supported APIs\n *\n * This provider supports two OpenAI API variants:\n *\n * ### 1. Chat Completions API (`openai-completions`)\n *\n * The standard OpenAI chat API at `/v1/chat/completions`:\n *\n * ```json\n * {\n * \"model\": \"gpt-4o\",\n * \"messages\": [{\"role\": \"user\", \"content\": \"Hello\"}],\n * \"stream\": true,\n * \"tools\": [...]\n * }\n * ```\n *\n * **Event Types:**\n * - `chat.completion.chunk`: Streaming text/tool_call deltas\n * - Final chunk has `finish_reason` and optional usage stats\n *\n * ### 2. Responses API (`openai-responses`)\n *\n * The newer stateful API at `/v1/responses`:\n *\n * ```json\n * {\n * \"model\": \"gpt-4o\",\n * \"input\": [{\"role\": \"user\", \"content\": [...]}],\n * \"stream\": true,\n * \"tools\": [...]\n * }\n * ```\n *\n * **Event Types:**\n * - `response.output_text.delta`: Text streaming\n * - `response.function_call_arguments.delta`: Tool call streaming\n * - `response.completed`: Final response with usage\n *\n * ## Streaming Architecture\n *\n * Both APIs use Server-Sent Events (SSE) for streaming:\n *\n * ```\n * Client Server\n * │ │\n * │── POST /v1/chat/completions ──>│\n * │ │\n * │<── data: {\"choices\":[...]} ────│\n * │<── data: {\"choices\":[...]} ────│\n * │<── data: {\"choices\":[...]} ────│\n * │<── data: [DONE] ───────────────│\n * │ │\n * ```\n *\n * ## Tool Calling\n *\n * Tools are converted to OpenAI function format:\n *\n * ```json\n * {\n * \"type\": \"function\",\n * \"function\": {\n * \"name\": \"read_file\",\n * \"description\": \"Reads a file from disk\",\n * \"parameters\": {...json-schema...}\n * }\n * }\n * ```\n *\n * Tool calls are streamed as deltas and accumulated before execution.\n *\n * ## Extended Thinking / Reasoning\n *\n * For models that support it (e.g., o1, o1-mini), reasoning effort\n * can be specified via `reasoning_effort` parameter:\n *\n * | Effort | Behavior |\n * |---------|------------------------------------|\n * | minimal | Brief chain-of-thought |\n * | low | Short reasoning |\n * | medium | Moderate exploration |\n * | high | Deep reasoning with alternatives |\n *\n * @module agent/providers/openai\n */\n\nimport crypto from \"node:crypto\";\nimport { normalizeLLMBaseUrl } from \"../../models/url-normalize.js\";\nimport { fetchWithRetry } from \"../../providers/network-config.js\";\nimport {\n\tcreateTimeoutReader,\n\tisStreamIdleTimeoutError,\n} from \"../../providers/stream-idle-timeout.js\";\nimport { createLogger } from \"../../utils/logger.js\";\nimport { mapThinkingLevelToOpenAIEffort } from \"../thinking-level-mapper.js\";\nimport type {\n\tApi,\n\tAssistantMessage,\n\tAssistantMessageEvent,\n\tContext,\n\tMessage,\n\tModel,\n\tReasoningEffort,\n\tStreamOptions,\n} from \"../types.js\";\n\nconst logger = createLogger(\"agent:providers:openai\");\nimport { streamResponsesApiSdk } from \"./openai-responses-sdk.js\";\nexport {\n\tfilterResponsesApiTools,\n\tnormalizeOpenAIToolParameters,\n} from \"./openai-shared.js\";\nexport type {\n\tOpenAIOptions,\n\tOpenAIResponseFormat,\n\tOpenAIToolChoice,\n\tResponsesContentPart,\n\tResponsesInputMessage,\n\tResponsesInputTextPart,\n\tResponsesOutputTextPart,\n} from \"./openai-shared.js\";\nimport type {\n\tOpenAIOptions,\n\tOpenAIResponseFormat,\n\tOpenAIToolChoice,\n} from \"./openai-shared.js\";\nimport { filterResponsesApiTools } from \"./openai-shared.js\";\nimport { sanitizeSurrogates } from \"./sanitize-unicode.js\";\nimport {\n\tcreateToolArgumentNormalizer,\n\tdescribeValueType,\n\tisRecord,\n} from \"./tool-arguments.js\";\nimport { transformMessages } from \"./transform-messages.js\";\n\nconst toolArgumentNormalizer = createToolArgumentNormalizer({\n\tlogger,\n\tproviderLabel: \"OpenAI\",\n});\n\ninterface OpenAICompat {\n\tsupportsStore: boolean;\n\tsupportsDeveloperRole: boolean;\n\tsupportsReasoningEffort: boolean;\n\tsupportsResponsesApi: boolean;\n\t/** Supports Anthropic-style cache_control (OpenRouter with Claude models) */\n\tsupportsCacheControl: boolean;\n\tmaxTokensField: \"max_tokens\" | \"max_completion_tokens\";\n\trequiresToolResultName: boolean;\n\trequiresAssistantAfterToolResult: boolean;\n\trequiresThinkingAsText: boolean;\n\trequiresMistralToolIds: boolean;\n}\n\nfunction resolveOpenAICompat(\n\tmodel: Pick<Model<Api>, \"baseUrl\" | \"provider\" | \"compat\" | \"id\">,\n): Required<OpenAICompat> {\n\tconst rawBaseUrl = model.baseUrl ?? \"\";\n\tlet baseUrl = rawBaseUrl.toLowerCase();\n\ttry {\n\t\tconst parsed = new URL(rawBaseUrl);\n\t\tconst upstream = parsed.searchParams.get(\"url\");\n\t\tif (upstream) {\n\t\t\tbaseUrl = upstream.toLowerCase();\n\t\t}\n\t} catch {\n\t\t// ignore malformed URLs for compat detection\n\t}\n\tconst provider = (model.provider ?? \"\").toLowerCase();\n\tconst modelId = (model.id ?? \"\").toLowerCase();\n\tconst isMistral = baseUrl.includes(\"mistral.ai\") || provider === \"mistral\";\n\tconst isGrok = baseUrl.includes(\"api.x.ai\") || provider === \"xai\";\n\tconst isOpenAIBase = baseUrl.includes(\"api.openai.com\");\n\tconst isOpenAIProvider = provider === \"openai\";\n\tconst isOpenRouter =\n\t\tbaseUrl.includes(\"openrouter.ai\") || provider === \"openrouter\";\n\tconst supportsResponsesApi =\n\t\tisOpenAIBase ||\n\t\tisOpenAIProvider ||\n\t\tisOpenRouter ||\n\t\tbaseUrl.includes(\"api.groq.com\") ||\n\t\tprovider === \"groq\";\n\t// OpenRouter supports cache_control for Anthropic/Claude models\n\tconst isAnthropicModel =\n\t\tmodelId.includes(\"claude\") || modelId.includes(\"anthropic\");\n\tconst supportsCacheControl = isOpenRouter && isAnthropicModel;\n\tconst nonOpenAIHosts = [\n\t\t\"mistral.ai\",\n\t\t\"api.x.ai\",\n\t\t\"cerebras.ai\",\n\t\t\"chutes.ai\",\n\t\t\"openrouter.ai\",\n\t\t\"api.groq.com\",\n\t\t\"openai.azure.com\",\n\t];\n\tconst isNonOpenAIBase = nonOpenAIHosts.some((host) => baseUrl.includes(host));\n\tconst isOpenAI =\n\t\t(isOpenAIBase || isOpenAIProvider) &&\n\t\t!isNonOpenAIBase &&\n\t\t!isMistral &&\n\t\t!isGrok;\n\n\tconst detected: Required<OpenAICompat> = {\n\t\tsupportsStore: isOpenAI,\n\t\tsupportsDeveloperRole: isOpenAI,\n\t\tsupportsReasoningEffort: isOpenAI && !isGrok,\n\t\tsupportsResponsesApi,\n\t\tsupportsCacheControl,\n\t\tmaxTokensField: isOpenAI ? \"max_completion_tokens\" : \"max_tokens\",\n\t\trequiresToolResultName: isMistral,\n\t\trequiresAssistantAfterToolResult: false,\n\t\trequiresThinkingAsText: isMistral,\n\t\trequiresMistralToolIds: isMistral,\n\t};\n\n\tconst overrides = model.compat;\n\tif (!overrides) {\n\t\treturn detected;\n\t}\n\n\treturn {\n\t\tsupportsStore: overrides.supportsStore ?? detected.supportsStore,\n\t\tsupportsDeveloperRole:\n\t\t\toverrides.supportsDeveloperRole ?? detected.supportsDeveloperRole,\n\t\tsupportsReasoningEffort:\n\t\t\toverrides.supportsReasoningEffort ?? detected.supportsReasoningEffort,\n\t\tsupportsResponsesApi:\n\t\t\toverrides.supportsResponsesApi ?? detected.supportsResponsesApi,\n\t\tsupportsCacheControl:\n\t\t\toverrides.supportsCacheControl ?? detected.supportsCacheControl,\n\t\tmaxTokensField: overrides.maxTokensField ?? detected.maxTokensField,\n\t\trequiresToolResultName:\n\t\t\toverrides.requiresToolResultName ?? detected.requiresToolResultName,\n\t\trequiresAssistantAfterToolResult:\n\t\t\toverrides.requiresAssistantAfterToolResult ??\n\t\t\tdetected.requiresAssistantAfterToolResult,\n\t\trequiresThinkingAsText:\n\t\t\toverrides.requiresThinkingAsText ?? detected.requiresThinkingAsText,\n\t\trequiresMistralToolIds:\n\t\t\toverrides.requiresMistralToolIds ?? detected.requiresMistralToolIds,\n\t};\n}\n\n// Exported for tests\nexport function resolveOpenAICompatForTest(\n\tmodel: Pick<Model<Api>, \"baseUrl\" | \"provider\" | \"compat\" | \"id\">,\n): Required<OpenAICompat> {\n\treturn resolveOpenAICompat(model);\n}\n\n/**\n * Normalize tool call IDs for Mistral.\n * Mistral requires tool IDs to be exactly 9 alphanumeric characters (a-z, A-Z, 0-9).\n * Use a per-request mapping to avoid collisions across multiple tool calls.\n */\nfunction createMistralToolIdNormalizer(isMistral: boolean) {\n\tif (!isMistral) {\n\t\treturn (id: string) => id;\n\t}\n\n\tconst byOriginal = new Map<string, string>();\n\tconst used = new Set<string>();\n\n\tconst hashToBase36 = (value: string) => {\n\t\tconst hex = crypto.createHash(\"sha1\").update(value).digest(\"hex\");\n\t\tconst base36 = BigInt(`0x${hex}`).toString(36);\n\t\treturn base36.padStart(9, \"0\");\n\t};\n\n\tconst makeCandidate = (id: string, attempt: number) => {\n\t\tconst cleaned = id.replace(/[^a-zA-Z0-9]/g, \"\");\n\t\tif (attempt === 0 && cleaned.length >= 9) {\n\t\t\treturn cleaned.slice(0, 9);\n\t\t}\n\t\tconst hashed = hashToBase36(`${id}:${attempt}`);\n\t\treturn hashed.slice(0, 9);\n\t};\n\n\treturn (id: string) => {\n\t\tconst existing = byOriginal.get(id);\n\t\tif (existing) return existing;\n\n\t\tlet attempt = 0;\n\t\tlet candidate = makeCandidate(id, attempt);\n\t\twhile (used.has(candidate)) {\n\t\t\tattempt += 1;\n\t\t\tcandidate = makeCandidate(id, attempt);\n\t\t}\n\t\tused.add(candidate);\n\t\tbyOriginal.set(id, candidate);\n\t\treturn candidate;\n\t};\n}\n\n/**\n * Check if conversation messages contain tool calls or tool results.\n * Some OpenAI-compatible proxies require the tools param when tool history exists.\n */\nfunction hasToolHistory(messages: Context[\"messages\"]): boolean {\n\tfor (const msg of messages ?? []) {\n\t\tif (!msg) continue;\n\t\tif (msg.role === \"toolResult\") return true;\n\t\tif (msg.role === \"assistant\") {\n\t\t\tif (msg.content.some((block) => block.type === \"toolCall\")) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n}\n\n// OpenAI API Types\n\n/** Anthropic-style cache control for OpenRouter */\ninterface CacheControl {\n\ttype: \"ephemeral\";\n}\n\ninterface OpenAITextContentPart {\n\ttype: \"text\";\n\ttext: string;\n\tcache_control?: CacheControl;\n}\n\ninterface OpenAIImageContentPart {\n\ttype: \"image_url\";\n\timage_url: { url: string; detail?: \"auto\" | \"low\" | \"high\" };\n\tcache_control?: CacheControl;\n}\n\ntype OpenAIContentPart = OpenAITextContentPart | OpenAIImageContentPart;\n\ninterface OpenAIResponsesRequestBody {\n\tmodel: string;\n\tinput: Array<{\n\t\trole: string;\n\t\tcontent: Array<\n\t\t\t| { type: \"input_text\"; text: string }\n\t\t\t| { type: \"output_text\"; text: string }\n\t\t>;\n\t}>;\n\tstream: boolean;\n\t// Responses API uses flat tool format (name at top level, not nested under function)\n\ttools?: Array<{\n\t\ttype: \"function\";\n\t\tname: string;\n\t\tdescription: string;\n\t\tparameters: unknown;\n\t}>;\n\ttool_choice?: OpenAIToolChoice;\n\tmax_output_tokens?: number;\n\treasoning?: { effort: string };\n}\n\ninterface OpenAICompletionsRequestBody {\n\tmodel: string;\n\tmessages: OpenAIMessage[];\n\tmax_tokens?: number;\n\tmax_completion_tokens?: number;\n\tstream: boolean;\n\tstream_options: { include_usage: boolean };\n\ttools?: Array<{\n\t\ttype: \"function\";\n\t\tfunction: {\n\t\t\tname: string;\n\t\t\tdescription: string;\n\t\t\tparameters: unknown;\n\t\t};\n\t}>;\n\ttool_choice?: OpenAIToolChoice;\n\ttemperature?: number;\n\treasoning_effort?: string;\n\tresponse_format?: OpenAIResponseFormat;\n\tstore?: boolean;\n}\n\n// =============================================================================\n// Shared Streaming Utilities\n// =============================================================================\n\n/**\n * Appends a delta to existing text, handling potential duplicate prefixes.\n *\n * Some providers may send overlapping deltas where the new delta starts\n * with content that was already received. This function detects and handles\n * such cases to prevent duplicate text.\n *\n * @param existing - The accumulated text so far\n * @param delta - The new delta to append\n * @returns Object with the new text and whether the delta was skipped\n */\nexport function appendDelta(\n\texisting: string,\n\tdelta: string,\n): { next: string; skipped: boolean } {\n\tif (!delta) return { next: existing, skipped: true };\n\tif (existing.endsWith(delta)) {\n\t\treturn { next: existing, skipped: true };\n\t}\n\tconst overlap = Math.min(existing.length, delta.length);\n\tlet shared = 0;\n\tfor (let i = overlap; i > 0; i--) {\n\t\tif (existing.endsWith(delta.slice(0, i))) {\n\t\t\tshared = i;\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn { next: existing + delta.slice(shared), skipped: false };\n}\n\n/**\n * Creates a cost calculator function for a specific model.\n *\n * @param model - The model configuration with cost rates\n * @returns A function that updates usage costs on an AssistantMessage\n */\nexport function createCostCalculator(model: {\n\tcost: { input: number; output: number; cacheRead: number };\n}): (usage: {\n\tinput: number;\n\toutput: number;\n\tcacheRead: number;\n\tcacheWrite: number;\n\tcost: {\n\t\tinput: number;\n\t\toutput: number;\n\t\tcacheRead: number;\n\t\tcacheWrite: number;\n\t\ttotal: number;\n\t};\n}) => void {\n\treturn (usage) => {\n\t\tusage.cost = {\n\t\t\tinput: (usage.input * model.cost.input) / 1_000_000,\n\t\t\toutput: (usage.output * model.cost.output) / 1_000_000,\n\t\t\tcacheRead: (usage.cacheRead * model.cost.cacheRead) / 1_000_000,\n\t\t\tcacheWrite: 0, // OpenAI doesn't charge for cache writes\n\t\t\ttotal: 0,\n\t\t};\n\t\tusage.cost.total =\n\t\t\tusage.cost.input + usage.cost.output + usage.cost.cacheRead;\n\t};\n}\n\n// OpenAI SSE Event Types (Completions API)\ninterface OpenAICompletionsDelta {\n\tcontent?: string | Array<unknown>;\n\treasoning_content?: string;\n\treasoning?: string;\n\ttool_calls?: Array<{\n\t\tindex: number;\n\t\tid?: string;\n\t\tfunction?: {\n\t\t\tname?: string;\n\t\t\targuments?: string | Record<string, unknown> | null;\n\t\t};\n\t}>;\n}\n\ninterface OpenAICompletionsChoice {\n\tindex: number;\n\tdelta?: OpenAICompletionsDelta;\n\tfinish_reason?: \"stop\" | \"length\" | \"tool_calls\" | null;\n}\n\ninterface OpenAICompletionsUsage {\n\tprompt_tokens?: number;\n\tcompletion_tokens?: number;\n\tprompt_tokens_details?: {\n\t\tcached_tokens?: number;\n\t};\n}\n\ninterface OpenAICompletionsChunk {\n\tchoices?: OpenAICompletionsChoice[];\n\tusage?: OpenAICompletionsUsage;\n}\n\ninterface OpenAIMessage {\n\trole: \"system\" | \"developer\" | \"user\" | \"assistant\" | \"tool\";\n\tcontent:\n\t\t| string\n\t\t| Array<\n\t\t\t\t| { type: \"text\"; text: string; cache_control?: CacheControl }\n\t\t\t\t| {\n\t\t\t\t\t\ttype: \"image_url\";\n\t\t\t\t\t\timage_url: { url: string; detail?: \"auto\" | \"low\" | \"high\" };\n\t\t\t\t\t\tcache_control?: CacheControl;\n\t\t\t\t }\n\t\t >;\n\ttool_call_id?: string;\n\ttool_calls?: Array<{\n\t\tid: string;\n\t\ttype: \"function\";\n\t\tfunction: { name: string; arguments: string };\n\t}>;\n}\n\n/**\n * OpenAI/OpenRouter provider with automatic prompt caching (no explicit cache_control needed).\n * Caching is automatic for prompts >= 1024 tokens.\n * Structure prompts with static content at the beginning for best cache hit rates.\n */\n// Exported for tests\nexport function resolveOpenAIUrlForTest(\n\tbaseUrl: string,\n\tapi: \"openai-responses\" | \"openai-completions\",\n): string {\n\treturn normalizeLLMBaseUrl(baseUrl, \"openai\", api);\n}\n\nexport async function* streamOpenAI(\n\tmodel: Model<\"openai-responses\" | \"openai-completions\">,\n\tcontext: Context,\n\toptions: OpenAIOptions,\n): AsyncGenerator<AssistantMessageEvent, void, unknown> {\n\tconst apiKey = options.apiKey;\n\tif (!apiKey) {\n\t\tconst providerLabel = model.provider || \"openai\";\n\t\tconst hint =\n\t\t\tproviderLabel === \"github-copilot\"\n\t\t\t\t? \" Run /login github-copilot to authorize.\"\n\t\t\t\t: \"\";\n\t\tthrow new Error(\n\t\t\t`API key is required for provider \"${providerLabel}\".${hint}`,\n\t\t);\n\t}\n\n\tconst compat = resolveOpenAICompat(model);\n\tif (model.api === \"openai-responses\" && !compat.supportsResponsesApi) {\n\t\tthrow new Error(\n\t\t\t`Responses API is not supported by ${model.provider}/${model.id}. Use openai-completions or set compat.supportsResponsesApi if your endpoint supports /responses.`,\n\t\t);\n\t}\n\tconst hasSummaryRequest =\n\t\toptions.reasoningSummary !== undefined && options.reasoningSummary !== null;\n\tif (hasSummaryRequest && model.api !== \"openai-responses\") {\n\t\tthrow new Error(\n\t\t\t`Reasoning summaries require the Responses API (model: ${model.provider}/${model.id}).`,\n\t\t);\n\t}\n\tif (hasSummaryRequest && !model.reasoning) {\n\t\tthrow new Error(\n\t\t\t`Reasoning summaries are not supported for non-reasoning models (model: ${model.provider}/${model.id}).`,\n\t\t);\n\t}\n\tif (options.reasoningEffort && !compat.supportsReasoningEffort) {\n\t\tthrow new Error(\n\t\t\t`Reasoning effort is not supported by ${model.provider}/${model.id}. Disable thinking or choose another model.`,\n\t\t);\n\t}\n\tconst normalizeToolId = createMistralToolIdNormalizer(\n\t\tcompat.requiresMistralToolIds,\n\t);\n\tconst messages: OpenAIMessage[] = [];\n\tconst pushMessage = (message: OpenAIMessage) => {\n\t\tmessages.push(message);\n\t\tlastSentRole = message.role;\n\t};\n\n\t// Track cache control items (max 4 for Anthropic compatibility)\n\tlet cacheAppliedCount = 0;\n\tconst maxCacheItems = 4;\n\n\t// System prompt\n\tif (context.systemPrompt) {\n\t\tconst role =\n\t\t\tmodel.reasoning && compat.supportsDeveloperRole ? \"developer\" : \"system\";\n\t\tconst systemMessage: OpenAIMessage = {\n\t\t\trole,\n\t\t\tcontent: sanitizeSurrogates(context.systemPrompt),\n\t\t};\n\t\t// Apply cache_control for OpenRouter with Claude models\n\t\tif (compat.supportsCacheControl && cacheAppliedCount < maxCacheItems) {\n\t\t\t// Wrap content in array format with cache_control\n\t\t\tsystemMessage.content = [\n\t\t\t\t{\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\ttext: sanitizeSurrogates(context.systemPrompt),\n\t\t\t\t\tcache_control: { type: \"ephemeral\" },\n\t\t\t\t},\n\t\t\t];\n\t\t\tcacheAppliedCount++;\n\t\t}\n\t\tmessages.push(systemMessage);\n\t}\n\n\t// Transform messages for cross-provider compatibility\n\tconst transformedMessages = transformMessages(context.messages, model);\n\tlet lastOriginalRole: Message[\"role\"] | null = null;\n\tlet lastSentRole: OpenAIMessage[\"role\"] | null = null;\n\n\t// Convert messages\n\tfor (const msg of transformedMessages) {\n\t\tlet didSend = false;\n\n\t\tif (\n\t\t\tcompat.requiresAssistantAfterToolResult &&\n\t\t\tlastOriginalRole === \"toolResult\" &&\n\t\t\tmsg.role === \"user\"\n\t\t) {\n\t\t\tpushMessage({\n\t\t\t\trole: \"assistant\",\n\t\t\t\tcontent: \"I have processed the tool results.\",\n\t\t\t});\n\t\t}\n\n\t\tif (msg.role === \"user\") {\n\t\t\tconst content =\n\t\t\t\ttypeof msg.content === \"string\"\n\t\t\t\t\t? sanitizeSurrogates(msg.content)\n\t\t\t\t\t: msg.content.map((c) => {\n\t\t\t\t\t\t\tif (c.type === \"text\") {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\ttype: \"text\" as const,\n\t\t\t\t\t\t\t\t\ttext: sanitizeSurrogates(c.text),\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// OpenAI expects image URLs\n\t\t\t\t\t\t\tconst dataUrl = `data:${c.mimeType};base64,${c.data}`;\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\ttype: \"image_url\" as const,\n\t\t\t\t\t\t\t\timage_url: { url: dataUrl },\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t});\n\n\t\t\tif (Array.isArray(content)) {\n\t\t\t\tconst filteredContent = model.input.includes(\"image\")\n\t\t\t\t\t? content\n\t\t\t\t\t: content.filter((c) => c.type !== \"image_url\");\n\t\t\t\tif (filteredContent.length === 0) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tpushMessage({ role: \"user\", content: filteredContent });\n\t\t\t\tdidSend = true;\n\t\t\t} else {\n\t\t\t\tpushMessage({ role: \"user\", content });\n\t\t\t\tdidSend = true;\n\t\t\t}\n\t\t} else if (msg.role === \"assistant\") {\n\t\t\tconst textContent: Array<{ type: \"text\"; text: string }> = [];\n\t\t\tconst toolCalls: Array<{\n\t\t\t\tid: string;\n\t\t\t\ttype: \"function\";\n\t\t\t\tfunction: { name: string; arguments: string };\n\t\t\t}> = [];\n\n\t\t\tfor (const c of msg.content) {\n\t\t\t\tif (c.type === \"text\") {\n\t\t\t\t\tconst text = sanitizeSurrogates(c.text);\n\t\t\t\t\tif (text.length === 0) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\ttextContent.push({ type: \"text\", text });\n\t\t\t\t} else if (c.type === \"toolCall\") {\n\t\t\t\t\ttoolCalls.push({\n\t\t\t\t\t\tid: normalizeToolId(c.id),\n\t\t\t\t\t\ttype: \"function\",\n\t\t\t\t\t\tfunction: {\n\t\t\t\t\t\t\tname: c.name,\n\t\t\t\t\t\t\targuments: JSON.stringify(c.arguments),\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst message: OpenAIMessage & Record<string, unknown> = {\n\t\t\t\trole: \"assistant\",\n\t\t\t\tcontent: textContent.length > 0 ? textContent : \"\",\n\t\t\t};\n\n\t\t\tlet hasReasoningSignature = false;\n\t\t\tconst thinkingBlocks = msg.content.filter(\n\t\t\t\t(block) => block.type === \"thinking\",\n\t\t\t);\n\t\t\tif (thinkingBlocks.length > 0) {\n\t\t\t\tif (compat.requiresThinkingAsText) {\n\t\t\t\t\tconst thinkingText = thinkingBlocks\n\t\t\t\t\t\t.map((block) =>\n\t\t\t\t\t\t\tsanitizeSurrogates(\n\t\t\t\t\t\t\t\t(block.type === \"thinking\" ? block.thinking : \"\") ?? \"\",\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join(\"\\n\");\n\t\t\t\t\tconst textBlock = `<thinking>\\n${thinkingText}\\n</thinking>`;\n\t\t\t\t\tif (Array.isArray(message.content)) {\n\t\t\t\t\t\tmessage.content.unshift({ type: \"text\", text: textBlock });\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmessage.content = [{ type: \"text\", text: textBlock }];\n\t\t\t\t\t}\n\t\t\t\t} else if (thinkingBlocks[0]?.type === \"thinking\") {\n\t\t\t\t\tconst signature = thinkingBlocks[0].thinkingSignature;\n\t\t\t\t\tif (signature && signature.length > 0) {\n\t\t\t\t\t\tmessage[signature] = thinkingBlocks\n\t\t\t\t\t\t\t.map((block) =>\n\t\t\t\t\t\t\t\tsanitizeSurrogates(\n\t\t\t\t\t\t\t\t\t(block.type === \"thinking\" ? block.thinking : \"\") ?? \"\",\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.join(\"\\n\");\n\t\t\t\t\t\thasReasoningSignature = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (toolCalls.length > 0) {\n\t\t\t\tmessage.tool_calls = toolCalls;\n\t\t\t}\n\n\t\t\tconst content = message.content;\n\t\t\tconst hasContent = Array.isArray(content)\n\t\t\t\t? content.length > 0\n\t\t\t\t: content.length > 0;\n\t\t\tif (!hasContent && toolCalls.length === 0 && !hasReasoningSignature) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tpushMessage(message);\n\t\t\tdidSend = true;\n\t\t} else if (msg.role === \"toolResult\") {\n\t\t\tconst textResult =\n\t\t\t\ttypeof msg.content === \"string\"\n\t\t\t\t\t? msg.content\n\t\t\t\t\t: msg.content\n\t\t\t\t\t\t\t.filter((c) => c.type === \"text\")\n\t\t\t\t\t\t\t.map((c) => sanitizeSurrogates(c.text))\n\t\t\t\t\t\t\t.join(\"\\n\");\n\t\t\tconst hasImages =\n\t\t\t\ttypeof msg.content !== \"string\" &&\n\t\t\t\tmsg.content.some((c) => c.type === \"image\");\n\t\t\tconst hasText = textResult.length > 0;\n\n\t\t\tconst toolMessage: OpenAIMessage & { name?: string } = {\n\t\t\t\trole: \"tool\",\n\t\t\t\ttool_call_id: normalizeToolId(msg.toolCallId),\n\t\t\t\tcontent: sanitizeSurrogates(\n\t\t\t\t\thasText\n\t\t\t\t\t\t? textResult\n\t\t\t\t\t\t: hasImages\n\t\t\t\t\t\t\t? \"(see attached image)\"\n\t\t\t\t\t\t\t: \"(empty result)\",\n\t\t\t\t),\n\t\t\t};\n\n\t\t\t// Some providers (e.g., Mistral) require the 'name' field in tool results\n\t\t\tif (compat.requiresToolResultName && msg.toolName) {\n\t\t\t\ttoolMessage.name = msg.toolName;\n\t\t\t}\n\n\t\t\tpushMessage(toolMessage);\n\t\t\tdidSend = true;\n\n\t\t\tif (hasImages && model.input.includes(\"image\")) {\n\t\t\t\tconst contentBlocks: Array<\n\t\t\t\t\t| { type: \"text\"; text: string }\n\t\t\t\t\t| { type: \"image_url\"; image_url: { url: string } }\n\t\t\t\t> = [];\n\n\t\t\t\tcontentBlocks.push({\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\ttext: \"Attached image(s) from tool result:\",\n\t\t\t\t});\n\n\t\t\t\tif (typeof msg.content !== \"string\") {\n\t\t\t\t\tfor (const block of msg.content) {\n\t\t\t\t\t\tif (block.type === \"image\") {\n\t\t\t\t\t\t\tcontentBlocks.push({\n\t\t\t\t\t\t\t\ttype: \"image_url\",\n\t\t\t\t\t\t\t\timage_url: {\n\t\t\t\t\t\t\t\t\turl: `data:${block.mimeType};base64,${block.data}`,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tpushMessage({\n\t\t\t\t\trole: \"user\",\n\t\t\t\t\tcontent: contentBlocks,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (didSend) {\n\t\t\tlastOriginalRole = msg.role;\n\t\t}\n\t}\n\n\tif (model.api === \"openai-responses\") {\n\t\treturn yield* streamResponsesApiSdk(\n\t\t\tmodel as Model<\"openai-responses\">,\n\t\t\tcontext,\n\t\t\toptions,\n\t\t);\n\t}\n\n\t// Apply cache_control to last messages for OpenRouter with Claude\n\tif (compat.supportsCacheControl) {\n\t\t// Find last user message and apply cache_control\n\t\tfor (\n\t\t\tlet i = messages.length - 1;\n\t\t\ti >= 0 && cacheAppliedCount < maxCacheItems;\n\t\t\ti--\n\t\t) {\n\t\t\tconst msg = messages[i];\n\t\t\tif (!msg) continue;\n\t\t\tif (msg.role === \"user\" && typeof msg.content !== \"string\") {\n\t\t\t\tconst lastContent = msg.content[msg.content.length - 1];\n\t\t\t\tif (lastContent && !lastContent.cache_control) {\n\t\t\t\t\tlastContent.cache_control = { type: \"ephemeral\" };\n\t\t\t\t\tcacheAppliedCount++;\n\t\t\t\t}\n\t\t\t} else if (msg.role === \"user\" && typeof msg.content === \"string\") {\n\t\t\t\t// Convert string content to array format with cache_control\n\t\t\t\tmessages[i] = {\n\t\t\t\t\trole: msg.role,\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\ttext: msg.content,\n\t\t\t\t\t\t\tcache_control: { type: \"ephemeral\" },\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t};\n\t\t\t\tcacheAppliedCount++;\n\t\t\t}\n\t\t}\n\t}\n\n\tconst requestBody: OpenAICompletionsRequestBody = {\n\t\tmodel: model.id,\n\t\tmessages,\n\t\tstream: true,\n\t\tstream_options: { include_usage: true },\n\t};\n\n\tif (compat.supportsStore) {\n\t\trequestBody.store = false;\n\t}\n\n\tconst maxTokens = options.maxTokens ?? model.maxTokens;\n\tif (compat.maxTokensField === \"max_tokens\") {\n\t\trequestBody.max_tokens = maxTokens;\n\t} else {\n\t\trequestBody.max_completion_tokens = maxTokens;\n\t}\n\n\tif (context.tools && context.tools.length > 0) {\n\t\tconst validTools = filterResponsesApiTools(context.tools);\n\t\tif (validTools.length < context.tools.length) {\n\t\t\tconst filtered = context.tools.filter(\n\t\t\t\t(t) => !validTools.some((v) => v.name === t.name),\n\t\t\t);\n\t\t\tlogger.warn(\n\t\t\t\t\"Some tools filtered out due to OpenAI-compatible schema limitations\",\n\t\t\t\t{\n\t\t\t\t\tfilteredTools: filtered.map((t) => t.name),\n\t\t\t\t\treason:\n\t\t\t\t\t\t\"OpenAI-compatible tool schemas cannot preserve lossy top-level unions\",\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t\tif (validTools.length > 0) {\n\t\t\trequestBody.tools = validTools.map((tool, idx, arr) => {\n\t\t\t\tconst toolDef: {\n\t\t\t\t\ttype: \"function\";\n\t\t\t\t\tfunction: { name: string; description: string; parameters: unknown };\n\t\t\t\t\tcache_control?: CacheControl;\n\t\t\t\t} = {\n\t\t\t\t\ttype: \"function\" as const,\n\t\t\t\t\tfunction: {\n\t\t\t\t\t\tname: tool.name,\n\t\t\t\t\t\tdescription: tool.description,\n\t\t\t\t\t\tparameters: tool.parameters,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\t// Apply cache_control to last tool for OpenRouter with Claude\n\t\t\t\tif (\n\t\t\t\t\tcompat.supportsCacheControl &&\n\t\t\t\t\tidx === arr.length - 1 &&\n\t\t\t\t\tcacheAppliedCount < maxCacheItems\n\t\t\t\t) {\n\t\t\t\t\ttoolDef.cache_control = { type: \"ephemeral\" };\n\t\t\t\t\tcacheAppliedCount++;\n\t\t\t\t}\n\t\t\t\treturn toolDef;\n\t\t\t});\n\t\t} else if (hasToolHistory(context.messages)) {\n\t\t\trequestBody.tools = [];\n\t\t}\n\t} else if (hasToolHistory(context.messages)) {\n\t\trequestBody.tools = [];\n\t}\n\n\t// Set tool_choice if specified\n\tif (options.toolChoice && requestBody.tools && requestBody.tools.length > 0) {\n\t\tif (\n\t\t\ttypeof options.toolChoice === \"object\" &&\n\t\t\toptions.toolChoice.type === \"function\"\n\t\t) {\n\t\t\tconst toolName = options.toolChoice.function.name;\n\t\t\tif (requestBody.tools.some((tool) => tool.function.name === toolName)) {\n\t\t\t\trequestBody.tool_choice = options.toolChoice;\n\t\t\t} else {\n\t\t\t\tlogger.warn(\n\t\t\t\t\t\"Dropping tool_choice for filtered OpenAI-compatible tool\",\n\t\t\t\t\t{\n\t\t\t\t\t\ttoolName,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\trequestBody.tool_choice = options.toolChoice;\n\t\t}\n\t}\n\n\tif (options.temperature !== undefined) {\n\t\trequestBody.temperature = options.temperature;\n\t}\n\n\t// Add response format for structured outputs\n\tif (options.responseFormat) {\n\t\trequestBody.response_format = options.responseFormat;\n\t}\n\n\t// Add reasoning effort for reasoning-capable models using unified thinking level mapper\n\tif (\n\t\toptions.reasoningEffort &&\n\t\tmodel.reasoning &&\n\t\tcompat.supportsReasoningEffort\n\t) {\n\t\tconst effort = mapThinkingLevelToOpenAIEffort(options.reasoningEffort);\n\t\tif (effort) {\n\t\t\trequestBody.reasoning_effort = effort;\n\t\t}\n\t}\n\tif (options.requestBody) {\n\t\tObject.assign(requestBody, options.requestBody);\n\t}\n\n\tconst headers: Record<string, string> = {\n\t\t\"Content-Type\": \"application/json\",\n\t\tAuthorization: `Bearer ${apiKey}`,\n\t\t...options.headers,\n\t};\n\tif (model.provider === \"github-copilot\") {\n\t\tconst isAgentCall = lastSentRole ? lastSentRole !== \"user\" : false;\n\t\theaders[\"X-Initiator\"] = isAgentCall ? \"agent\" : \"user\";\n\t}\n\n\tconst targetUrl = normalizeLLMBaseUrl(\n\t\tmodel.baseUrl,\n\t\tmodel.provider,\n\t\tmodel.api,\n\t);\n\n\tconst response = await fetchWithRetry(\n\t\ttargetUrl,\n\t\t{\n\t\t\tmethod: \"POST\",\n\t\t\theaders,\n\t\t\tbody: JSON.stringify(requestBody),\n\t\t\tsignal: options.signal,\n\t\t},\n\t\tmodel.provider,\n\t\t{ modelId: model.id },\n\t);\n\n\tif (!response.ok) {\n\t\tconst errorText = await response.text();\n\t\tthrow new Error(`OpenAI API error (${response.status}): ${errorText}`);\n\t}\n\n\tif (!response.body) {\n\t\tthrow new Error(\"Response body is null\");\n\t}\n\n\tconst partial: AssistantMessage = {\n\t\trole: \"assistant\",\n\t\tcontent: [],\n\t\tapi: model.api,\n\t\tprovider: model.provider,\n\t\tmodel: model.id,\n\t\tusage: {\n\t\t\tinput: 0,\n\t\t\toutput: 0,\n\t\t\tcacheRead: 0,\n\t\t\tcacheWrite: 0,\n\t\t\tcost: {\n\t\t\t\tinput: 0,\n\t\t\t\toutput: 0,\n\t\t\t\tcacheRead: 0,\n\t\t\t\tcacheWrite: 0,\n\t\t\t\ttotal: 0,\n\t\t\t},\n\t\t},\n\t\tstopReason: \"stop\",\n\t\ttimestamp: Date.now(),\n\t};\n\n\tyield { type: \"start\", partial };\n\n\t// Wrap reader with idle timeout detection\n\tconst rawReader = response.body.getReader();\n\tconst reader = createTimeoutReader(rawReader, {\n\t\tprovider: model.provider,\n\t\tsignal: options.signal,\n\t});\n\tconst decoder = new TextDecoder();\n\tlet buffer = \"\";\n\tconst toolArgBuffers = new Map<number, string>();\n\tconst toolArgOverrides = new Map<number, Record<string, unknown>>();\n\tconst toolCallContentIndexes = new Map<number, number>();\n\tlet cacheAdjusted = false;\n\tconst textEnded = new Set<number>();\n\tconst toolEnded = new Set<number>();\n\tconst thinkingEnded = new Set<number>();\n\n\t// Use shared utilities for delta handling and cost calculation\n\tconst updateCosts = createCostCalculator(model);\n\n\ttry {\n\t\twhile (true) {\n\t\t\tconst { done, value } = await reader.read();\n\t\t\tif (done) break;\n\n\t\t\tbuffer += decoder.decode(value, { stream: true });\n\t\t\tconst lines = buffer.split(\"\\n\");\n\t\t\tbuffer = lines.pop() || \"\";\n\n\t\t\tfor (const line of lines) {\n\t\t\t\tif (!line.trim() || !line.startsWith(\"data: \")) continue;\n\t\t\t\tconst data = line.slice(6);\n\t\t\t\tif (data === \"[DONE]\") continue;\n\n\t\t\t\ttry {\n\t\t\t\t\tconst event = JSON.parse(data);\n\t\t\t\t\tconst choice = event.choices?.[0];\n\n\t\t\t\t\tif (!choice) {\n\t\t\t\t\t\t// Check for usage data\n\t\t\t\t\t\tif (event.usage) {\n\t\t\t\t\t\t\tpartial.usage.input = event.usage.prompt_tokens || 0;\n\t\t\t\t\t\t\t// Include reasoning tokens in output count\n\t\t\t\t\t\t\tpartial.usage.output =\n\t\t\t\t\t\t\t\t(event.usage.completion_tokens || 0) +\n\t\t\t\t\t\t\t\t(event.usage.completion_tokens_details?.reasoning_tokens || 0);\n\t\t\t\t\t\t\t// OpenAI caching: cached_tokens in prompt_tokens_details\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tevent.usage.prompt_tokens_details?.cached_tokens &&\n\t\t\t\t\t\t\t\t!cacheAdjusted\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tpartial.usage.cacheRead =\n\t\t\t\t\t\t\t\t\tevent.usage.prompt_tokens_details.cached_tokens;\n\t\t\t\t\t\t\t\t// Adjust input tokens to not double count (only once)\n\t\t\t\t\t\t\t\tpartial.usage.input -= partial.usage.cacheRead;\n\t\t\t\t\t\t\t\tcacheAdjusted = true;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tupdateCosts(partial.usage);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst delta = choice.delta;\n\t\t\t\t\tif (delta?.content) {\n\t\t\t\t\t\tconst contentDelta = Array.isArray(delta.content)\n\t\t\t\t\t\t\t? delta.content\n\t\t\t\t\t\t\t\t\t.map((part: unknown) => {\n\t\t\t\t\t\t\t\t\t\tif (typeof part === \"string\")\n\t\t\t\t\t\t\t\t\t\t\treturn sanitizeSurrogates(part);\n\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\tpart &&\n\t\t\t\t\t\t\t\t\t\t\ttypeof part === \"object\" &&\n\t\t\t\t\t\t\t\t\t\t\t\"text\" in part &&\n\t\t\t\t\t\t\t\t\t\t\ttypeof (part as { text: unknown }).text === \"string\"\n\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\treturn sanitizeSurrogates(\n\t\t\t\t\t\t\t\t\t\t\t\t(part as { text: string }).text,\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tlogger.warn(\"Unsupported OpenAI content part\", {\n\t\t\t\t\t\t\t\t\t\t\tpartType: typeof part,\n\t\t\t\t\t\t\t\t\t\t\tkeys:\n\t\t\t\t\t\t\t\t\t\t\t\tpart && typeof part === \"object\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t? Object.keys(part)\n\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\t\t\ttype:\n\t\t\t\t\t\t\t\t\t\t\t\tpart && typeof part === \"object\" && \"type\" in part\n\t\t\t\t\t\t\t\t\t\t\t\t\t? (part as { type: unknown }).type\n\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\treturn \"\";\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t.filter((s: string) => s.length > 0)\n\t\t\t\t\t\t\t\t\t.join(\"\")\n\t\t\t\t\t\t\t: sanitizeSurrogates(delta.content);\n\n\t\t\t\t\t\tif (contentDelta && contentDelta.length > 0) {\n\t\t\t\t\t\t\t// Find or create text content block\n\t\t\t\t\t\t\tlet textBlock = partial.content.find((c) => c.type === \"text\");\n\t\t\t\t\t\t\tif (!textBlock) {\n\t\t\t\t\t\t\t\tconst idx = partial.content.length;\n\t\t\t\t\t\t\t\ttextBlock = { type: \"text\", text: \"\" };\n\t\t\t\t\t\t\t\tpartial.content.push(textBlock);\n\t\t\t\t\t\t\t\tyield { type: \"text_start\", contentIndex: idx, partial };\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst idx = partial.content.indexOf(textBlock);\n\t\t\t\t\t\t\tconst previousLength = textBlock.text.length;\n\t\t\t\t\t\t\tconst { next, skipped } = appendDelta(\n\t\t\t\t\t\t\t\ttextBlock.text,\n\t\t\t\t\t\t\t\tcontentDelta,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (skipped) continue;\n\t\t\t\t\t\t\ttextBlock.text = next;\n\t\t\t\t\t\t\tif (!textEnded.has(idx)) {\n\t\t\t\t\t\t\t\t// will mark ended on text_end\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\t\ttype: \"text_delta\",\n\t\t\t\t\t\t\t\tcontentIndex: idx,\n\t\t\t\t\t\t\t\tdelta: next.slice(previousLength),\n\t\t\t\t\t\t\t\tpartial,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Handle reasoning/thinking content\n\t\t\t\t\t// Some endpoints return reasoning in \"reasoning_content\" (llama.cpp),\n\t\t\t\t\t// others use \"reasoning\" (other OpenAI-compatible endpoints)\n\t\t\t\t\tconst reasoningDelta = delta\n\t\t\t\t\t\t? delta.reasoning_content || delta.reasoning || \"\"\n\t\t\t\t\t\t: \"\";\n\t\t\t\t\tif (reasoningDelta.length > 0) {\n\t\t\t\t\t\t// Find or create thinking block\n\t\t\t\t\t\tlet thinkingBlock = partial.content.find(\n\t\t\t\t\t\t\t(c) => c.type === \"thinking\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (!thinkingBlock) {\n\t\t\t\t\t\t\tconst idx = partial.content.length;\n\t\t\t\t\t\t\tthinkingBlock = { type: \"thinking\", thinking: \"\" };\n\t\t\t\t\t\t\tpartial.content.push(thinkingBlock);\n\t\t\t\t\t\t\tyield { type: \"thinking_start\", contentIndex: idx, partial };\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (thinkingBlock.type === \"thinking\") {\n\t\t\t\t\t\t\tconst idx = partial.content.indexOf(thinkingBlock);\n\t\t\t\t\t\t\tconst previousLength = thinkingBlock.thinking.length;\n\t\t\t\t\t\t\tconst { next, skipped } = appendDelta(\n\t\t\t\t\t\t\t\tthinkingBlock.thinking,\n\t\t\t\t\t\t\t\treasoningDelta,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (skipped) continue;\n\t\t\t\t\t\t\tthinkingBlock.thinking = next;\n\t\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\t\ttype: \"thinking_delta\",\n\t\t\t\t\t\t\t\tcontentIndex: idx,\n\t\t\t\t\t\t\t\tdelta: next.slice(previousLength),\n\t\t\t\t\t\t\t\tpartial,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (delta?.tool_calls) {\n\t\t\t\t\t\tfor (const toolCall of delta.tool_calls) {\n\t\t\t\t\t\t\tconst streamIdx = toolCall.index;\n\t\t\t\t\t\t\tlet idx = toolCallContentIndexes.get(streamIdx);\n\n\t\t\t\t\t\t\tif (idx === undefined) {\n\t\t\t\t\t\t\t\tidx = partial.content.length;\n\t\t\t\t\t\t\t\tpartial.content.push({\n\t\t\t\t\t\t\t\t\ttype: \"toolCall\",\n\t\t\t\t\t\t\t\t\tid: \"\",\n\t\t\t\t\t\t\t\t\tname: \"\",\n\t\t\t\t\t\t\t\t\targuments: {},\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\ttoolCallContentIndexes.set(streamIdx, idx);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst block = partial.content[idx];\n\t\t\t\t\t\t\tif (!block || block.type !== \"toolCall\") continue;\n\n\t\t\t\t\t\t\tif (toolCall.id) {\n\t\t\t\t\t\t\t\tblock.id = toolCall.id;\n\t\t\t\t\t\t\t\tblock.name = toolCall.function?.name || \"\";\n\t\t\t\t\t\t\t\tyield { type: \"toolcall_start\", contentIndex: idx, partial };\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (toolCall.function && \"arguments\" in toolCall.function) {\n\t\t\t\t\t\t\t\tconst argsDelta = toolCall.function.arguments;\n\t\t\t\t\t\t\t\tif (typeof argsDelta === \"string\") {\n\t\t\t\t\t\t\t\t\ttoolArgOverrides.delete(idx);\n\t\t\t\t\t\t\t\t\tconst existing = toolArgBuffers.get(idx) ?? \"\";\n\t\t\t\t\t\t\t\t\tconst combined = existing + argsDelta;\n\t\t\t\t\t\t\t\t\ttoolArgBuffers.set(idx, combined);\n\n\t\t\t\t\t\t\t\t\t// Parse streaming JSON progressively\n\t\t\t\t\t\t\t\t\t// This allows UI to show partial arguments like file paths\n\t\t\t\t\t\t\t\t\t// before the complete JSON arrives\n\t\t\t\t\t\t\t\t\tblock.arguments = toolArgumentNormalizer.parseFromString(\n\t\t\t\t\t\t\t\t\t\tcombined,\n\t\t\t\t\t\t\t\t\t\t{ callId: block.id, name: block.name, stage: \"delta\" },\n\t\t\t\t\t\t\t\t\t\t{ logInvalid: false },\n\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\t\t\t\ttype: \"toolcall_delta\",\n\t\t\t\t\t\t\t\t\t\tcontentIndex: idx,\n\t\t\t\t\t\t\t\t\t\tdelta: argsDelta,\n\t\t\t\t\t\t\t\t\t\tpartial,\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t} else if (isRecord(argsDelta)) {\n\t\t\t\t\t\t\t\t\ttoolArgumentNormalizer.warnOnce(\n\t\t\t\t\t\t\t\t\t\t\"delta:object\",\n\t\t\t\t\t\t\t\t\t\t\"OpenAI tool call arguments delta was object\",\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tcallId: block.id,\n\t\t\t\t\t\t\t\t\t\t\tname: block.name,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\ttoolArgOverrides.set(idx, argsDelta);\n\t\t\t\t\t\t\t\t\ttoolArgBuffers.delete(idx);\n\t\t\t\t\t\t\t\t\tblock.arguments = argsDelta;\n\t\t\t\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\t\t\t\ttype: \"toolcall_delta\",\n\t\t\t\t\t\t\t\t\t\tcontentIndex: idx,\n\t\t\t\t\t\t\t\t\t\tdelta: JSON.stringify(argsDelta),\n\t\t\t\t\t\t\t\t\t\tpartial,\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t} else if (argsDelta !== null && argsDelta !== undefined) {\n\t\t\t\t\t\t\t\t\tconst rawType = describeValueType(argsDelta);\n\t\t\t\t\t\t\t\t\ttoolArgumentNormalizer.warnOnce(\n\t\t\t\t\t\t\t\t\t\t`delta:${rawType}`,\n\t\t\t\t\t\t\t\t\t\t\"OpenAI tool call arguments delta was non-string\",\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tcallId: block.id,\n\t\t\t\t\t\t\t\t\t\t\tname: block.name,\n\t\t\t\t\t\t\t\t\t\t\trawType,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (choice.finish_reason) {\n\t\t\t\t\t\tpartial.stopReason =\n\t\t\t\t\t\t\tchoice.finish_reason === \"stop\"\n\t\t\t\t\t\t\t\t? \"stop\"\n\t\t\t\t\t\t\t\t: choice.finish_reason === \"length\"\n\t\t\t\t\t\t\t\t\t? \"length\"\n\t\t\t\t\t\t\t\t\t: choice.finish_reason === \"tool_calls\"\n\t\t\t\t\t\t\t\t\t\t? \"toolUse\"\n\t\t\t\t\t\t\t\t\t\t: \"stop\";\n\n\t\t\t\t\t\t// Finalize all content blocks\n\t\t\t\t\t\tfor (let i = 0; i < partial.content.length; i++) {\n\t\t\t\t\t\t\tconst block = partial.content[i];\n\t\t\t\t\t\t\tif (!block) continue;\n\t\t\t\t\t\t\tif (block.type === \"toolCall\" && !toolEnded.has(i)) {\n\t\t\t\t\t\t\t\tconst overrideArgs = toolArgOverrides.get(i);\n\t\t\t\t\t\t\t\tif (overrideArgs) {\n\t\t\t\t\t\t\t\t\tblock.arguments = overrideArgs;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t// Final parse of accumulated JSON\n\t\t\t\t\t\t\t\t\tconst partialArgs = toolArgBuffers.get(i);\n\t\t\t\t\t\t\t\t\tif (partialArgs !== undefined) {\n\t\t\t\t\t\t\t\t\t\tblock.arguments = toolArgumentNormalizer.parseFromString(\n\t\t\t\t\t\t\t\t\t\t\tpartialArgs,\n\t\t\t\t\t\t\t\t\t\t\t{ callId: block.id, name: block.name, stage: \"done\" },\n\t\t\t\t\t\t\t\t\t\t\t{ logInvalid: true },\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tblock.arguments = isRecord(block.arguments)\n\t\t\t\t\t\t\t\t\t\t\t? block.arguments\n\t\t\t\t\t\t\t\t\t\t\t: {};\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttoolArgBuffers.delete(i);\n\t\t\t\t\t\t\t\ttoolArgOverrides.delete(i);\n\n\t\t\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\t\t\ttype: \"toolcall_end\",\n\t\t\t\t\t\t\t\t\tcontentIndex: i,\n\t\t\t\t\t\t\t\t\ttoolCall: block,\n\t\t\t\t\t\t\t\t\tpartial,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\ttoolEnded.add(i);\n\t\t\t\t\t\t\t} else if (block.type === \"text\" && !textEnded.has(i)) {\n\t\t\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\t\t\ttype: \"text_end\",\n\t\t\t\t\t\t\t\t\tcontentIndex: i,\n\t\t\t\t\t\t\t\t\tcontent: block.text,\n\t\t\t\t\t\t\t\t\tpartial,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\ttextEnded.add(i);\n\t\t\t\t\t\t\t} else if (block.type === \"thinking\" && !thinkingEnded.has(i)) {\n\t\t\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\t\t\ttype: \"thinking_end\",\n\t\t\t\t\t\t\t\t\tcontentIndex: i,\n\t\t\t\t\t\t\t\t\tcontent: block.thinking,\n\t\t\t\t\t\t\t\t\tpartial,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tthinkingEnded.add(i);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Calculate costs one last time (in case no usage block arrived)\n\t\t\t\t\t\tupdateCosts(partial.usage);\n\n\t\t\t\t\t\tyield {\n\t\t\t\t\t\t\ttype: \"done\",\n\t\t\t\t\t\t\treason: partial.stopReason,\n\t\t\t\t\t\t\tmessage: partial,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tlogger.warn(\"Failed to parse OpenAI event\", {\n\t\t\t\t\t\terror: e instanceof Error ? e.message : String(e),\n\t\t\t\t\t\tstack: e instanceof Error ? e.stack : undefined,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} catch (error: unknown) {\n\t\tif (error instanceof Error && error.name === \"AbortError\") {\n\t\t\tpartial.stopReason = \"aborted\";\n\t\t\tyield { type: \"error\", reason: \"aborted\", error: partial };\n\t\t} else if (isStreamIdleTimeoutError(error)) {\n\t\t\t// Re-throw idle timeout errors so caller can retry\n\t\t\tthrow error;\n\t\t} else {\n\t\t\tthrow error;\n\t\t}\n\t}\n}\n"]}
|
|
@@ -18333,6 +18333,13 @@ var FEATURES = {
|
|
|
18333
18333
|
};
|
|
18334
18334
|
|
|
18335
18335
|
// dist/utils/logger.js
|
|
18336
|
+
var originalConsole = {
|
|
18337
|
+
log: console.log.bind(console),
|
|
18338
|
+
info: console.info.bind(console),
|
|
18339
|
+
warn: console.warn.bind(console),
|
|
18340
|
+
error: console.error.bind(console),
|
|
18341
|
+
debug: console.debug.bind(console)
|
|
18342
|
+
};
|
|
18336
18343
|
var LOG_LEVELS = {
|
|
18337
18344
|
debug: 0,
|
|
18338
18345
|
info: 1,
|
package/dist/agent/tracing.d.ts
CHANGED
|
@@ -6,27 +6,38 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { type Span } from "@opentelemetry/api";
|
|
8
8
|
import type { ThinkingLevel, Usage } from "./types.js";
|
|
9
|
-
export interface
|
|
9
|
+
export interface MaestroTraceIdentityContext {
|
|
10
|
+
organizationId?: string;
|
|
11
|
+
workspaceId?: string;
|
|
12
|
+
userId?: string;
|
|
13
|
+
sessionId?: string;
|
|
14
|
+
agentId?: string;
|
|
15
|
+
agentRunId?: string;
|
|
16
|
+
agentRunStepId?: string;
|
|
17
|
+
traceId?: string;
|
|
18
|
+
requestId?: string;
|
|
19
|
+
surface?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface AgentTurnContext extends MaestroTraceIdentityContext {
|
|
10
22
|
modelId: string;
|
|
11
23
|
modelProvider: string;
|
|
12
24
|
thinkingLevel: ThinkingLevel;
|
|
13
25
|
toolCount: number;
|
|
14
26
|
messageCount: number;
|
|
15
|
-
userId?: string;
|
|
16
|
-
sessionId?: string;
|
|
17
27
|
}
|
|
18
|
-
export interface ToolCallContext {
|
|
28
|
+
export interface ToolCallContext extends MaestroTraceIdentityContext {
|
|
19
29
|
toolName: string;
|
|
20
30
|
toolCallId: string;
|
|
21
31
|
inputSize: number;
|
|
22
32
|
}
|
|
23
|
-
export interface LlmRequestContext {
|
|
33
|
+
export interface LlmRequestContext extends MaestroTraceIdentityContext {
|
|
24
34
|
modelId: string;
|
|
25
35
|
provider: string;
|
|
26
36
|
inputTokens?: number;
|
|
27
37
|
outputTokens?: number;
|
|
28
38
|
thinkingTokens?: number;
|
|
29
39
|
}
|
|
40
|
+
export declare function maestroTraceIdentityAttributes(context?: MaestroTraceIdentityContext): Record<string, string | undefined>;
|
|
30
41
|
/**
|
|
31
42
|
* Creates a span for an agent turn (user message → assistant response cycle).
|
|
32
43
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracing.d.ts","sourceRoot":"","sources":["../../src/agent/tracing.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,IAAI,EAAkB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"tracing.d.ts","sourceRoot":"","sources":["../../src/agent/tracing.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/tracing.js
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { SpanStatusCode } from "@opentelemetry/api";
|
|
8
8
|
import { getTelemetryTracer, isOpenTelemetryEnabled, } from "../opentelemetry.js";
|
|
9
|
+
import { resolveMaestroEventBusConfig } from "../telemetry/maestro-event-bus.js";
|
|
9
10
|
/**
|
|
10
11
|
* Wraps an async operation in an OpenTelemetry span.
|
|
11
12
|
* If OpenTelemetry is not enabled, executes the operation directly.
|
|
@@ -41,6 +42,46 @@ async function withSpan(spanName, attributes, operation) {
|
|
|
41
42
|
}
|
|
42
43
|
});
|
|
43
44
|
}
|
|
45
|
+
export function maestroTraceIdentityAttributes(context = {}) {
|
|
46
|
+
const eventBusConfig = resolveMaestroEventBusConfig();
|
|
47
|
+
const correlation = eventBusConfig.defaultCorrelation;
|
|
48
|
+
const principal = eventBusConfig.defaultPrincipal;
|
|
49
|
+
const organizationId = traceIdentityValue(context.organizationId ??
|
|
50
|
+
correlation.organization_id ??
|
|
51
|
+
principal?.organization_id);
|
|
52
|
+
const workspaceId = traceIdentityValue(context.workspaceId ?? correlation.workspace_id ?? principal?.workspace_id);
|
|
53
|
+
const userId = traceIdentityValue(context.userId ?? correlation.user_id ?? principal?.user_id);
|
|
54
|
+
const sessionId = traceIdentityValue(context.sessionId ?? correlation.session_id);
|
|
55
|
+
const agentId = traceIdentityValue(context.agentId ?? correlation.agent_id);
|
|
56
|
+
const agentRunId = traceIdentityValue(context.agentRunId ?? correlation.agent_run_id);
|
|
57
|
+
const agentRunStepId = traceIdentityValue(context.agentRunStepId ?? correlation.agent_run_step_id);
|
|
58
|
+
const traceId = traceIdentityValue(context.traceId ?? correlation.trace_id);
|
|
59
|
+
const requestId = traceIdentityValue(context.requestId ?? correlation.request_id);
|
|
60
|
+
const surface = context.surface ?? eventBusConfig.defaultSurface;
|
|
61
|
+
return {
|
|
62
|
+
"enduser.id": userId,
|
|
63
|
+
"user.id": userId,
|
|
64
|
+
"agent.user.id": userId,
|
|
65
|
+
"organization.id": organizationId,
|
|
66
|
+
"evalops.organization_id": organizationId,
|
|
67
|
+
"workspace.id": workspaceId,
|
|
68
|
+
"evalops.workspace_id": workspaceId,
|
|
69
|
+
"agent.session.id": sessionId,
|
|
70
|
+
"maestro.session_id": sessionId,
|
|
71
|
+
"agent.id": agentId,
|
|
72
|
+
"maestro.agent_run_id": agentRunId,
|
|
73
|
+
"maestro.agent_run_step_id": agentRunStepId,
|
|
74
|
+
"trace.id": traceId,
|
|
75
|
+
"request.id": requestId,
|
|
76
|
+
"maestro.surface": surface,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
function traceIdentityValue(value) {
|
|
80
|
+
if (value === undefined || value === "" || value === "unknown") {
|
|
81
|
+
return undefined;
|
|
82
|
+
}
|
|
83
|
+
return value;
|
|
84
|
+
}
|
|
44
85
|
/**
|
|
45
86
|
* Creates a span for an agent turn (user message → assistant response cycle).
|
|
46
87
|
*
|
|
@@ -57,13 +98,12 @@ async function withSpan(spanName, attributes, operation) {
|
|
|
57
98
|
*/
|
|
58
99
|
export async function traceAgentTurn(context, operation) {
|
|
59
100
|
return withSpan("agent.turn", {
|
|
101
|
+
...maestroTraceIdentityAttributes(context),
|
|
60
102
|
"agent.model.id": context.modelId,
|
|
61
103
|
"agent.model.provider": context.modelProvider,
|
|
62
104
|
"agent.thinking_level": context.thinkingLevel,
|
|
63
105
|
"agent.tools.count": context.toolCount,
|
|
64
106
|
"agent.messages.count": context.messageCount,
|
|
65
|
-
"agent.user.id": context.userId,
|
|
66
|
-
"agent.session.id": context.sessionId,
|
|
67
107
|
}, operation);
|
|
68
108
|
}
|
|
69
109
|
/**
|
|
@@ -82,6 +122,7 @@ export async function traceAgentTurn(context, operation) {
|
|
|
82
122
|
export async function traceToolCall(context, operation) {
|
|
83
123
|
const startTime = performance.now();
|
|
84
124
|
return withSpan(`tool.${context.toolName}`, {
|
|
125
|
+
...maestroTraceIdentityAttributes(context),
|
|
85
126
|
"tool.name": context.toolName,
|
|
86
127
|
"tool.call_id": context.toolCallId,
|
|
87
128
|
"tool.input_size": context.inputSize,
|
|
@@ -115,6 +156,7 @@ export async function traceToolCall(context, operation) {
|
|
|
115
156
|
export async function traceLlmRequest(context, operation) {
|
|
116
157
|
const startTime = performance.now();
|
|
117
158
|
return withSpan("llm.request", {
|
|
159
|
+
...maestroTraceIdentityAttributes(context),
|
|
118
160
|
"llm.model.id": context.modelId,
|
|
119
161
|
"llm.model.provider": context.provider,
|
|
120
162
|
"llm.input_tokens": context.inputTokens,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracing.js","sourceRoot":"","sources":["../../src/agent/tracing.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Agent-level tracing for OpenTelemetry integration.\n *\n * This module provides tracing capabilities for agent turns, tool calls,\n * and LLM requests to enable observability into agent execution.\n */\n\nimport { type Span, SpanStatusCode } from \"@opentelemetry/api\";\nimport {\n\tgetTelemetryTracer,\n\tisOpenTelemetryEnabled,\n} from \"../opentelemetry.js\";\nimport type { AgentTool, Api, Model, ThinkingLevel, Usage } from \"./types.js\";\n\nexport interface AgentTurnContext {\n\tmodelId: string;\n\tmodelProvider: string;\n\tthinkingLevel: ThinkingLevel;\n\ttoolCount: number;\n\tmessageCount: number;\n\tuserId?: string;\n\tsessionId?: string;\n}\n\nexport interface ToolCallContext {\n\ttoolName: string;\n\ttoolCallId: string;\n\tinputSize: number;\n}\n\nexport interface LlmRequestContext {\n\tmodelId: string;\n\tprovider: string;\n\tinputTokens?: number;\n\toutputTokens?: number;\n\tthinkingTokens?: number;\n}\n\n/**\n * Wraps an async operation in an OpenTelemetry span.\n * If OpenTelemetry is not enabled, executes the operation directly.\n */\nasync function withSpan<T>(\n\tspanName: string,\n\tattributes: Record<string, string | number | boolean | undefined>,\n\toperation: (span: Span | null) => Promise<T>,\n): Promise<T> {\n\tif (!isOpenTelemetryEnabled()) {\n\t\treturn operation(null);\n\t}\n\n\tconst tracer = getTelemetryTracer();\n\treturn tracer.startActiveSpan(spanName, async (span: Span) => {\n\t\t// Filter out undefined values\n\t\tconst filteredAttrs: Record<string, string | number | boolean> = {};\n\t\tfor (const [key, value] of Object.entries(attributes)) {\n\t\t\tif (value !== undefined) {\n\t\t\t\tfilteredAttrs[key] = value;\n\t\t\t}\n\t\t}\n\t\tspan.setAttributes(filteredAttrs);\n\n\t\ttry {\n\t\t\tconst result = await operation(span);\n\t\t\tspan.setStatus({ code: SpanStatusCode.OK });\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tspan.setStatus({\n\t\t\t\tcode: SpanStatusCode.ERROR,\n\t\t\t\tmessage: error instanceof Error ? error.message : String(error),\n\t\t\t});\n\t\t\tthrow error;\n\t\t} finally {\n\t\t\tspan.end();\n\t\t}\n\t});\n}\n\n/**\n * Creates a span for an agent turn (user message → assistant response cycle).\n *\n * @example\n * ```typescript\n * await traceAgentTurn(\n * { modelId: \"claude-3\", toolCount: 5, messageCount: 10 },\n * async (span) => {\n * // Execute the turn\n * await agent.prompt(userMessage);\n * }\n * );\n * ```\n */\nexport async function traceAgentTurn<T>(\n\tcontext: AgentTurnContext,\n\toperation: (span: Span | null) => Promise<T>,\n): Promise<T> {\n\treturn withSpan(\n\t\t\"agent.turn\",\n\t\t{\n\t\t\t\"agent.model.id\": context.modelId,\n\t\t\t\"agent.model.provider\": context.modelProvider,\n\t\t\t\"agent.thinking_level\": context.thinkingLevel,\n\t\t\t\"agent.tools.count\": context.toolCount,\n\t\t\t\"agent.messages.count\": context.messageCount,\n\t\t\t\"agent.user.id\": context.userId,\n\t\t\t\"agent.session.id\": context.sessionId,\n\t\t},\n\t\toperation,\n\t);\n}\n\n/**\n * Creates a span for a tool execution.\n *\n * @example\n * ```typescript\n * const result = await traceToolCall(\n * { toolName: \"bash\", toolCallId: \"123\", inputSize: 50 },\n * async (span) => {\n * return await tool.execute(args);\n * }\n * );\n * ```\n */\nexport async function traceToolCall<T>(\n\tcontext: ToolCallContext,\n\toperation: (span: Span | null) => Promise<T>,\n): Promise<T> {\n\tconst startTime = performance.now();\n\n\treturn withSpan(\n\t\t`tool.${context.toolName}`,\n\t\t{\n\t\t\t\"tool.name\": context.toolName,\n\t\t\t\"tool.call_id\": context.toolCallId,\n\t\t\t\"tool.input_size\": context.inputSize,\n\t\t},\n\t\tasync (span) => {\n\t\t\tconst result = await operation(span);\n\n\t\t\tif (span) {\n\t\t\t\tspan.setAttribute(\"tool.duration_ms\", performance.now() - startTime);\n\t\t\t}\n\n\t\t\treturn result;\n\t\t},\n\t);\n}\n\n/**\n * Creates a span for an LLM API request.\n *\n * @example\n * ```typescript\n * const response = await traceLlmRequest(\n * { modelId: \"claude-3\", provider: \"anthropic\" },\n * async (span) => {\n * const response = await client.complete(messages);\n * // Add token counts after response\n * if (span) {\n * span.setAttribute(\"llm.input_tokens\", response.usage.input);\n * span.setAttribute(\"llm.output_tokens\", response.usage.output);\n * }\n * return response;\n * }\n * );\n * ```\n */\nexport async function traceLlmRequest<T>(\n\tcontext: LlmRequestContext,\n\toperation: (span: Span | null) => Promise<T>,\n): Promise<T> {\n\tconst startTime = performance.now();\n\n\treturn withSpan(\n\t\t\"llm.request\",\n\t\t{\n\t\t\t\"llm.model.id\": context.modelId,\n\t\t\t\"llm.model.provider\": context.provider,\n\t\t\t\"llm.input_tokens\": context.inputTokens,\n\t\t\t\"llm.output_tokens\": context.outputTokens,\n\t\t\t\"llm.thinking_tokens\": context.thinkingTokens,\n\t\t},\n\t\tasync (span) => {\n\t\t\tconst result = await operation(span);\n\n\t\t\tif (span) {\n\t\t\t\tspan.setAttribute(\"llm.duration_ms\", performance.now() - startTime);\n\t\t\t}\n\n\t\t\treturn result;\n\t\t},\n\t);\n}\n\n/**\n * Records usage metrics on an existing span.\n */\nexport function recordUsageOnSpan(span: Span | null, usage: Usage): void {\n\tif (!span) return;\n\n\tspan.setAttributes({\n\t\t\"llm.usage.input_tokens\": usage.input,\n\t\t\"llm.usage.output_tokens\": usage.output,\n\t\t\"llm.usage.cache_read_tokens\": usage.cacheRead,\n\t\t\"llm.usage.cache_write_tokens\": usage.cacheWrite,\n\t\t\"llm.usage.cost_total\": usage.cost.total,\n\t});\n}\n\n/**\n * Creates a span for approval flow (when user approval is required).\n */\nexport async function traceApprovalFlow<T>(\n\tcontext: {\n\t\ttoolName: string;\n\t\truleId?: string;\n\t\tactionType: string;\n\t},\n\toperation: (span: Span | null) => Promise<T>,\n): Promise<T> {\n\tconst startTime = performance.now();\n\n\treturn withSpan(\n\t\t\"agent.approval\",\n\t\t{\n\t\t\t\"approval.tool_name\": context.toolName,\n\t\t\t\"approval.rule_id\": context.ruleId,\n\t\t\t\"approval.action_type\": context.actionType,\n\t\t},\n\t\tasync (span) => {\n\t\t\tconst result = await operation(span);\n\n\t\t\tif (span) {\n\t\t\t\tspan.setAttribute(\n\t\t\t\t\t\"approval.wait_duration_ms\",\n\t\t\t\t\tperformance.now() - startTime,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn result;\n\t\t},\n\t);\n}\n\n/**\n * Records an approval decision on a span.\n */\nexport function recordApprovalDecision(\n\tspan: Span | null,\n\tdecision: \"approved\" | \"denied\" | \"auto\",\n): void {\n\tif (!span) return;\n\tspan.setAttribute(\"approval.decision\", decision);\n}\n\n/**\n * Creates a simple event span (non-async, immediate recording).\n */\nexport function recordAgentEvent(\n\teventType: string,\n\tattributes: Record<string, string | number | boolean | undefined>,\n): void {\n\tif (!isOpenTelemetryEnabled()) return;\n\n\tconst tracer = getTelemetryTracer();\n\ttracer.startActiveSpan(`agent.event.${eventType}`, (span: Span) => {\n\t\tconst filteredAttrs: Record<string, string | number | boolean> = {};\n\t\tfor (const [key, value] of Object.entries(attributes)) {\n\t\t\tif (value !== undefined) {\n\t\t\t\tfilteredAttrs[key] = value;\n\t\t\t}\n\t\t}\n\t\tspan.setAttributes({\n\t\t\t\"agent.event.type\": eventType,\n\t\t\t...filteredAttrs,\n\t\t});\n\t\tspan.setStatus({ code: SpanStatusCode.OK });\n\t\tspan.end();\n\t});\n}\n\n/**\n * Records a model switch event.\n */\nexport function recordModelSwitch(\n\tpreviousModel: string | undefined,\n\tnewModel: string,\n\tprovider: string,\n): void {\n\trecordAgentEvent(\"model_switch\", {\n\t\t\"agent.model.previous\": previousModel,\n\t\t\"agent.model.new\": newModel,\n\t\t\"agent.model.provider\": provider,\n\t});\n}\n\n/**\n * Records a thinking level change event.\n */\nexport function recordThinkingLevelChange(\n\tpreviousLevel: ThinkingLevel,\n\tnewLevel: ThinkingLevel,\n): void {\n\trecordAgentEvent(\"thinking_level_change\", {\n\t\t\"agent.thinking.previous\": previousLevel,\n\t\t\"agent.thinking.new\": newLevel,\n\t});\n}\n\n/**\n * Records a session start event.\n */\nexport function recordSessionStart(\n\tsessionId: string,\n\tmodelId: string,\n\tprovider: string,\n): void {\n\trecordAgentEvent(\"session_start\", {\n\t\t\"agent.session.id\": sessionId,\n\t\t\"agent.model.id\": modelId,\n\t\t\"agent.model.provider\": provider,\n\t});\n}\n\n/**\n * Records a session end event.\n */\nexport function recordSessionEnd(\n\tsessionId: string,\n\tmessageCount: number,\n\ttotalCost: number,\n): void {\n\trecordAgentEvent(\"session_end\", {\n\t\t\"agent.session.id\": sessionId,\n\t\t\"agent.session.message_count\": messageCount,\n\t\t\"agent.session.total_cost\": totalCost,\n\t});\n}\n"]}
|
|
1
|
+
{"version":3,"file":"tracing.js","sourceRoot":"","sources":["../../src/agent/tracing.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Agent-level tracing for OpenTelemetry integration.\n *\n * This module provides tracing capabilities for agent turns, tool calls,\n * and LLM requests to enable observability into agent execution.\n */\n\nimport { type Span, SpanStatusCode } from \"@opentelemetry/api\";\nimport {\n\tgetTelemetryTracer,\n\tisOpenTelemetryEnabled,\n} from \"../opentelemetry.js\";\nimport { resolveMaestroEventBusConfig } from \"../telemetry/maestro-event-bus.js\";\nimport type { AgentTool, Api, Model, ThinkingLevel, Usage } from \"./types.js\";\n\nexport interface MaestroTraceIdentityContext {\n\torganizationId?: string;\n\tworkspaceId?: string;\n\tuserId?: string;\n\tsessionId?: string;\n\tagentId?: string;\n\tagentRunId?: string;\n\tagentRunStepId?: string;\n\ttraceId?: string;\n\trequestId?: string;\n\tsurface?: string;\n}\n\nexport interface AgentTurnContext extends MaestroTraceIdentityContext {\n\tmodelId: string;\n\tmodelProvider: string;\n\tthinkingLevel: ThinkingLevel;\n\ttoolCount: number;\n\tmessageCount: number;\n}\n\nexport interface ToolCallContext extends MaestroTraceIdentityContext {\n\ttoolName: string;\n\ttoolCallId: string;\n\tinputSize: number;\n}\n\nexport interface LlmRequestContext extends MaestroTraceIdentityContext {\n\tmodelId: string;\n\tprovider: string;\n\tinputTokens?: number;\n\toutputTokens?: number;\n\tthinkingTokens?: number;\n}\n\n/**\n * Wraps an async operation in an OpenTelemetry span.\n * If OpenTelemetry is not enabled, executes the operation directly.\n */\nasync function withSpan<T>(\n\tspanName: string,\n\tattributes: Record<string, string | number | boolean | undefined>,\n\toperation: (span: Span | null) => Promise<T>,\n): Promise<T> {\n\tif (!isOpenTelemetryEnabled()) {\n\t\treturn operation(null);\n\t}\n\n\tconst tracer = getTelemetryTracer();\n\treturn tracer.startActiveSpan(spanName, async (span: Span) => {\n\t\t// Filter out undefined values\n\t\tconst filteredAttrs: Record<string, string | number | boolean> = {};\n\t\tfor (const [key, value] of Object.entries(attributes)) {\n\t\t\tif (value !== undefined) {\n\t\t\t\tfilteredAttrs[key] = value;\n\t\t\t}\n\t\t}\n\t\tspan.setAttributes(filteredAttrs);\n\n\t\ttry {\n\t\t\tconst result = await operation(span);\n\t\t\tspan.setStatus({ code: SpanStatusCode.OK });\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tspan.setStatus({\n\t\t\t\tcode: SpanStatusCode.ERROR,\n\t\t\t\tmessage: error instanceof Error ? error.message : String(error),\n\t\t\t});\n\t\t\tthrow error;\n\t\t} finally {\n\t\t\tspan.end();\n\t\t}\n\t});\n}\n\nexport function maestroTraceIdentityAttributes(\n\tcontext: MaestroTraceIdentityContext = {},\n): Record<string, string | undefined> {\n\tconst eventBusConfig = resolveMaestroEventBusConfig();\n\tconst correlation = eventBusConfig.defaultCorrelation;\n\tconst principal = eventBusConfig.defaultPrincipal;\n\tconst organizationId = traceIdentityValue(\n\t\tcontext.organizationId ??\n\t\t\tcorrelation.organization_id ??\n\t\t\tprincipal?.organization_id,\n\t);\n\tconst workspaceId = traceIdentityValue(\n\t\tcontext.workspaceId ?? correlation.workspace_id ?? principal?.workspace_id,\n\t);\n\tconst userId = traceIdentityValue(\n\t\tcontext.userId ?? correlation.user_id ?? principal?.user_id,\n\t);\n\tconst sessionId = traceIdentityValue(\n\t\tcontext.sessionId ?? correlation.session_id,\n\t);\n\tconst agentId = traceIdentityValue(context.agentId ?? correlation.agent_id);\n\tconst agentRunId = traceIdentityValue(\n\t\tcontext.agentRunId ?? correlation.agent_run_id,\n\t);\n\tconst agentRunStepId = traceIdentityValue(\n\t\tcontext.agentRunStepId ?? correlation.agent_run_step_id,\n\t);\n\tconst traceId = traceIdentityValue(context.traceId ?? correlation.trace_id);\n\tconst requestId = traceIdentityValue(\n\t\tcontext.requestId ?? correlation.request_id,\n\t);\n\tconst surface = context.surface ?? eventBusConfig.defaultSurface;\n\n\treturn {\n\t\t\"enduser.id\": userId,\n\t\t\"user.id\": userId,\n\t\t\"agent.user.id\": userId,\n\t\t\"organization.id\": organizationId,\n\t\t\"evalops.organization_id\": organizationId,\n\t\t\"workspace.id\": workspaceId,\n\t\t\"evalops.workspace_id\": workspaceId,\n\t\t\"agent.session.id\": sessionId,\n\t\t\"maestro.session_id\": sessionId,\n\t\t\"agent.id\": agentId,\n\t\t\"maestro.agent_run_id\": agentRunId,\n\t\t\"maestro.agent_run_step_id\": agentRunStepId,\n\t\t\"trace.id\": traceId,\n\t\t\"request.id\": requestId,\n\t\t\"maestro.surface\": surface,\n\t};\n}\n\nfunction traceIdentityValue(value: string | undefined): string | undefined {\n\tif (value === undefined || value === \"\" || value === \"unknown\") {\n\t\treturn undefined;\n\t}\n\treturn value;\n}\n\n/**\n * Creates a span for an agent turn (user message → assistant response cycle).\n *\n * @example\n * ```typescript\n * await traceAgentTurn(\n * { modelId: \"claude-3\", toolCount: 5, messageCount: 10 },\n * async (span) => {\n * // Execute the turn\n * await agent.prompt(userMessage);\n * }\n * );\n * ```\n */\nexport async function traceAgentTurn<T>(\n\tcontext: AgentTurnContext,\n\toperation: (span: Span | null) => Promise<T>,\n): Promise<T> {\n\treturn withSpan(\n\t\t\"agent.turn\",\n\t\t{\n\t\t\t...maestroTraceIdentityAttributes(context),\n\t\t\t\"agent.model.id\": context.modelId,\n\t\t\t\"agent.model.provider\": context.modelProvider,\n\t\t\t\"agent.thinking_level\": context.thinkingLevel,\n\t\t\t\"agent.tools.count\": context.toolCount,\n\t\t\t\"agent.messages.count\": context.messageCount,\n\t\t},\n\t\toperation,\n\t);\n}\n\n/**\n * Creates a span for a tool execution.\n *\n * @example\n * ```typescript\n * const result = await traceToolCall(\n * { toolName: \"bash\", toolCallId: \"123\", inputSize: 50 },\n * async (span) => {\n * return await tool.execute(args);\n * }\n * );\n * ```\n */\nexport async function traceToolCall<T>(\n\tcontext: ToolCallContext,\n\toperation: (span: Span | null) => Promise<T>,\n): Promise<T> {\n\tconst startTime = performance.now();\n\n\treturn withSpan(\n\t\t`tool.${context.toolName}`,\n\t\t{\n\t\t\t...maestroTraceIdentityAttributes(context),\n\t\t\t\"tool.name\": context.toolName,\n\t\t\t\"tool.call_id\": context.toolCallId,\n\t\t\t\"tool.input_size\": context.inputSize,\n\t\t},\n\t\tasync (span) => {\n\t\t\tconst result = await operation(span);\n\n\t\t\tif (span) {\n\t\t\t\tspan.setAttribute(\"tool.duration_ms\", performance.now() - startTime);\n\t\t\t}\n\n\t\t\treturn result;\n\t\t},\n\t);\n}\n\n/**\n * Creates a span for an LLM API request.\n *\n * @example\n * ```typescript\n * const response = await traceLlmRequest(\n * { modelId: \"claude-3\", provider: \"anthropic\" },\n * async (span) => {\n * const response = await client.complete(messages);\n * // Add token counts after response\n * if (span) {\n * span.setAttribute(\"llm.input_tokens\", response.usage.input);\n * span.setAttribute(\"llm.output_tokens\", response.usage.output);\n * }\n * return response;\n * }\n * );\n * ```\n */\nexport async function traceLlmRequest<T>(\n\tcontext: LlmRequestContext,\n\toperation: (span: Span | null) => Promise<T>,\n): Promise<T> {\n\tconst startTime = performance.now();\n\n\treturn withSpan(\n\t\t\"llm.request\",\n\t\t{\n\t\t\t...maestroTraceIdentityAttributes(context),\n\t\t\t\"llm.model.id\": context.modelId,\n\t\t\t\"llm.model.provider\": context.provider,\n\t\t\t\"llm.input_tokens\": context.inputTokens,\n\t\t\t\"llm.output_tokens\": context.outputTokens,\n\t\t\t\"llm.thinking_tokens\": context.thinkingTokens,\n\t\t},\n\t\tasync (span) => {\n\t\t\tconst result = await operation(span);\n\n\t\t\tif (span) {\n\t\t\t\tspan.setAttribute(\"llm.duration_ms\", performance.now() - startTime);\n\t\t\t}\n\n\t\t\treturn result;\n\t\t},\n\t);\n}\n\n/**\n * Records usage metrics on an existing span.\n */\nexport function recordUsageOnSpan(span: Span | null, usage: Usage): void {\n\tif (!span) return;\n\n\tspan.setAttributes({\n\t\t\"llm.usage.input_tokens\": usage.input,\n\t\t\"llm.usage.output_tokens\": usage.output,\n\t\t\"llm.usage.cache_read_tokens\": usage.cacheRead,\n\t\t\"llm.usage.cache_write_tokens\": usage.cacheWrite,\n\t\t\"llm.usage.cost_total\": usage.cost.total,\n\t});\n}\n\n/**\n * Creates a span for approval flow (when user approval is required).\n */\nexport async function traceApprovalFlow<T>(\n\tcontext: {\n\t\ttoolName: string;\n\t\truleId?: string;\n\t\tactionType: string;\n\t},\n\toperation: (span: Span | null) => Promise<T>,\n): Promise<T> {\n\tconst startTime = performance.now();\n\n\treturn withSpan(\n\t\t\"agent.approval\",\n\t\t{\n\t\t\t\"approval.tool_name\": context.toolName,\n\t\t\t\"approval.rule_id\": context.ruleId,\n\t\t\t\"approval.action_type\": context.actionType,\n\t\t},\n\t\tasync (span) => {\n\t\t\tconst result = await operation(span);\n\n\t\t\tif (span) {\n\t\t\t\tspan.setAttribute(\n\t\t\t\t\t\"approval.wait_duration_ms\",\n\t\t\t\t\tperformance.now() - startTime,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn result;\n\t\t},\n\t);\n}\n\n/**\n * Records an approval decision on a span.\n */\nexport function recordApprovalDecision(\n\tspan: Span | null,\n\tdecision: \"approved\" | \"denied\" | \"auto\",\n): void {\n\tif (!span) return;\n\tspan.setAttribute(\"approval.decision\", decision);\n}\n\n/**\n * Creates a simple event span (non-async, immediate recording).\n */\nexport function recordAgentEvent(\n\teventType: string,\n\tattributes: Record<string, string | number | boolean | undefined>,\n): void {\n\tif (!isOpenTelemetryEnabled()) return;\n\n\tconst tracer = getTelemetryTracer();\n\ttracer.startActiveSpan(`agent.event.${eventType}`, (span: Span) => {\n\t\tconst filteredAttrs: Record<string, string | number | boolean> = {};\n\t\tfor (const [key, value] of Object.entries(attributes)) {\n\t\t\tif (value !== undefined) {\n\t\t\t\tfilteredAttrs[key] = value;\n\t\t\t}\n\t\t}\n\t\tspan.setAttributes({\n\t\t\t\"agent.event.type\": eventType,\n\t\t\t...filteredAttrs,\n\t\t});\n\t\tspan.setStatus({ code: SpanStatusCode.OK });\n\t\tspan.end();\n\t});\n}\n\n/**\n * Records a model switch event.\n */\nexport function recordModelSwitch(\n\tpreviousModel: string | undefined,\n\tnewModel: string,\n\tprovider: string,\n): void {\n\trecordAgentEvent(\"model_switch\", {\n\t\t\"agent.model.previous\": previousModel,\n\t\t\"agent.model.new\": newModel,\n\t\t\"agent.model.provider\": provider,\n\t});\n}\n\n/**\n * Records a thinking level change event.\n */\nexport function recordThinkingLevelChange(\n\tpreviousLevel: ThinkingLevel,\n\tnewLevel: ThinkingLevel,\n): void {\n\trecordAgentEvent(\"thinking_level_change\", {\n\t\t\"agent.thinking.previous\": previousLevel,\n\t\t\"agent.thinking.new\": newLevel,\n\t});\n}\n\n/**\n * Records a session start event.\n */\nexport function recordSessionStart(\n\tsessionId: string,\n\tmodelId: string,\n\tprovider: string,\n): void {\n\trecordAgentEvent(\"session_start\", {\n\t\t\"agent.session.id\": sessionId,\n\t\t\"agent.model.id\": modelId,\n\t\t\"agent.model.provider\": provider,\n\t});\n}\n\n/**\n * Records a session end event.\n */\nexport function recordSessionEnd(\n\tsessionId: string,\n\tmessageCount: number,\n\ttotalCost: number,\n): void {\n\trecordAgentEvent(\"session_end\", {\n\t\t\"agent.session.id\": sessionId,\n\t\t\"agent.session.message_count\": messageCount,\n\t\t\"agent.session.total_cost\": totalCost,\n\t});\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-provider-stream.d.ts","sourceRoot":"","sources":["../../../src/agent/transport/create-provider-stream.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACX,GAAG,EACH,qBAAqB,EACrB,OAAO,EACP,KAAK,EACL,eAAe,EACf,aAAa,EACb,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,gBAAgB;IAChC,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,IAAI,CAAC;CAC1D;AAED;;;;;GAKG;AACH,wBAAuB,oBAAoB,CAC1C,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EACjB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,aAAa,EACtB,SAAS,EAAE,gBAAgB,GACzB,cAAc,CAAC,qBAAqB,EAAE,IAAI,EAAE,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"create-provider-stream.d.ts","sourceRoot":"","sources":["../../../src/agent/transport/create-provider-stream.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACX,GAAG,EACH,qBAAqB,EACrB,OAAO,EACP,KAAK,EACL,eAAe,EACf,aAAa,EACb,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,gBAAgB;IAChC,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,IAAI,CAAC;CAC1D;AAED;;;;;GAKG;AACH,wBAAuB,oBAAoB,CAC1C,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EACjB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,aAAa,EACtB,SAAS,EAAE,gBAAgB,GACzB,cAAc,CAAC,qBAAqB,EAAE,IAAI,EAAE,OAAO,CAAC,CA4EtD"}
|