@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
|
@@ -11,6 +11,8 @@
|
|
|
11
11
|
* - Tail sampling: always keep errors/slow, sample successes
|
|
12
12
|
* - Optimized for querying, not writing
|
|
13
13
|
*/
|
|
14
|
+
import type { PromptMetadata } from "../prompts/types.js";
|
|
15
|
+
import type { SkillArtifactMetadata } from "../skills/artifact-metadata.js";
|
|
14
16
|
export interface ToolExecution {
|
|
15
17
|
name: string;
|
|
16
18
|
callId: string;
|
|
@@ -46,6 +48,8 @@ export interface CanonicalTurnEvent {
|
|
|
46
48
|
turnNumber: number;
|
|
47
49
|
traceId?: string;
|
|
48
50
|
model: ModelInfo;
|
|
51
|
+
promptMetadata?: PromptMetadata;
|
|
52
|
+
skillMetadata?: SkillArtifactMetadata[];
|
|
49
53
|
totalDurationMs: number;
|
|
50
54
|
llmDurationMs: number;
|
|
51
55
|
toolDurationMs: number;
|
|
@@ -121,6 +125,8 @@ export declare class TurnCollector {
|
|
|
121
125
|
private accumulatedLlmDurationMs;
|
|
122
126
|
private queueStartTime?;
|
|
123
127
|
private model;
|
|
128
|
+
private promptMetadata?;
|
|
129
|
+
private readonly skillMetadata;
|
|
124
130
|
private tools;
|
|
125
131
|
private completedTools;
|
|
126
132
|
private sandboxMode;
|
|
@@ -136,6 +142,8 @@ export declare class TurnCollector {
|
|
|
136
142
|
private recorder?;
|
|
137
143
|
constructor(sessionId: string, turnNumber: number, samplingConfig?: Partial<TailSamplingConfig>, recorder?: TelemetryRecorder);
|
|
138
144
|
setModel(model: ModelInfo): this;
|
|
145
|
+
setPromptMetadata(promptMetadata: PromptMetadata | undefined): this;
|
|
146
|
+
recordSkillMetadata(skillMetadata: SkillArtifactMetadata | undefined): this;
|
|
139
147
|
setTraceId(traceId: string): this;
|
|
140
148
|
setSandboxMode(mode: CanonicalTurnEvent["sandboxMode"]): this;
|
|
141
149
|
setApprovalMode(mode: CanonicalTurnEvent["approvalMode"]): this;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wide-events.d.ts","sourceRoot":"","sources":["../../src/telemetry/wide-events.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;
|
|
1
|
+
{"version":3,"file":"wide-events.d.ts","sourceRoot":"","sources":["../../src/telemetry/wide-events.ts"],"names":[],"mappings":"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"}
|
|
@@ -56,6 +56,7 @@ export class TurnCollector {
|
|
|
56
56
|
provider: "unknown",
|
|
57
57
|
thinkingLevel: "off",
|
|
58
58
|
};
|
|
59
|
+
this.skillMetadata = new Map();
|
|
59
60
|
this.tools = new Map();
|
|
60
61
|
this.completedTools = [];
|
|
61
62
|
// Context fields
|
|
@@ -82,6 +83,29 @@ export class TurnCollector {
|
|
|
82
83
|
this.model = model;
|
|
83
84
|
return this;
|
|
84
85
|
}
|
|
86
|
+
setPromptMetadata(promptMetadata) {
|
|
87
|
+
this.promptMetadata = promptMetadata;
|
|
88
|
+
return this;
|
|
89
|
+
}
|
|
90
|
+
recordSkillMetadata(skillMetadata) {
|
|
91
|
+
if (!skillMetadata) {
|
|
92
|
+
return this;
|
|
93
|
+
}
|
|
94
|
+
const key = [
|
|
95
|
+
skillMetadata.artifactId,
|
|
96
|
+
skillMetadata.source,
|
|
97
|
+
skillMetadata.name,
|
|
98
|
+
skillMetadata.version,
|
|
99
|
+
skillMetadata.hash,
|
|
100
|
+
]
|
|
101
|
+
.filter(Boolean)
|
|
102
|
+
.join(":");
|
|
103
|
+
if (!key) {
|
|
104
|
+
return this;
|
|
105
|
+
}
|
|
106
|
+
this.skillMetadata.set(key, skillMetadata);
|
|
107
|
+
return this;
|
|
108
|
+
}
|
|
85
109
|
setTraceId(traceId) {
|
|
86
110
|
this.traceId = traceId;
|
|
87
111
|
return this;
|
|
@@ -191,6 +215,10 @@ export class TurnCollector {
|
|
|
191
215
|
traceId: this.traceId,
|
|
192
216
|
// Model
|
|
193
217
|
model: this.model,
|
|
218
|
+
promptMetadata: this.promptMetadata,
|
|
219
|
+
skillMetadata: this.skillMetadata.size > 0
|
|
220
|
+
? [...this.skillMetadata.values()]
|
|
221
|
+
: undefined,
|
|
194
222
|
// Timing
|
|
195
223
|
totalDurationMs: Math.round(totalDurationMs),
|
|
196
224
|
llmDurationMs: Math.round(llmDurationMs),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wide-events.js","sourceRoot":"","sources":["../../src/telemetry/wide-events.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Wide Events Telemetry - Canonical Turn Events\n *\n * Implements the \"wide events\" pattern from loggingsucks.com:\n * Instead of scattered log statements, emit ONE rich event per agent turn\n * with comprehensive context for analytics-style querying.\n *\n * Key principles:\n * - One event per turn, not N log lines\n * - High-cardinality fields for queryability\n * - Tail sampling: always keep errors/slow, sample successes\n * - Optimized for querying, not writing\n */\n\nimport { randomUUID } from \"node:crypto\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface ToolExecution {\n\tname: string;\n\tcallId: string;\n\tdurationMs: number;\n\tsuccess: boolean;\n\terrorCode?: string;\n\tinputSizeBytes?: number;\n\toutputSizeBytes?: number;\n}\n\nexport interface TokenUsage {\n\tinput: number;\n\toutput: number;\n\tcacheRead: number;\n\tcacheWrite: number;\n\tthinking?: number;\n}\n\nexport interface ModelInfo {\n\tid: string;\n\tprovider: string;\n\tthinkingLevel:\n\t\t| \"off\"\n\t\t| \"minimal\"\n\t\t| \"low\"\n\t\t| \"medium\"\n\t\t| \"high\"\n\t\t| \"max\"\n\t\t| \"ultra\";\n}\n\n/**\n * Canonical Turn Event - One wide event per agent turn\n *\n * Contains all context needed to debug and analyze any turn without\n * correlating multiple log lines. Designed for high-cardinality querying.\n */\nexport interface CanonicalTurnEvent {\n\ttype: \"canonical-turn\";\n\ttimestamp: string;\n\n\t// ─── Identity ───────────────────────────────────────────────────────────\n\tsessionId: string;\n\tturnId: string;\n\tturnNumber: number;\n\ttraceId?: string;\n\n\t// ─── Model Context ──────────────────────────────────────────────────────\n\tmodel: ModelInfo;\n\n\t// ─── Timing ─────────────────────────────────────────────────────────────\n\ttotalDurationMs: number;\n\tllmDurationMs: number;\n\ttoolDurationMs: number;\n\tqueueWaitMs?: number;\n\n\t// ─── Tool Executions ────────────────────────────────────────────────────\n\ttools: ToolExecution[];\n\ttoolCount: number;\n\ttoolSuccessCount: number;\n\ttoolFailureCount: number;\n\n\t// ─── Token Economics ────────────────────────────────────────────────────\n\ttokens: TokenUsage;\n\tcostUsd: number;\n\n\t// ─── Business Context (high cardinality = queryable) ────────────────────\n\tsandboxMode: \"docker\" | \"local\" | \"none\";\n\tapprovalMode: \"auto\" | \"prompt\" | \"fail\";\n\tmcpServerCount: number;\n\tmcpServers?: string[];\n\tcontextSourceCount: number;\n\tmessageCount: number;\n\tinputSizeBytes: number;\n\toutputSizeBytes: number;\n\n\t// ─── Feature Flags ──────────────────────────────────────────────────────\n\tfeatures: {\n\t\tsafeMode: boolean;\n\t\tguardianEnabled: boolean;\n\t\tcompactionEnabled: boolean;\n\t\thookCount: number;\n\t};\n\n\t// ─── Outcome ────────────────────────────────────────────────────────────\n\tstatus: \"success\" | \"error\" | \"aborted\" | \"rate_limited\";\n\terrorCategory?: string;\n\terrorMessage?: string;\n\tabortReason?: \"user\" | \"timeout\" | \"context_overflow\" | \"rate_limit\";\n\n\t// ─── Sampling Metadata ──────────────────────────────────────────────────\n\tsampled: boolean;\n\tsampleReason: \"always\" | \"error\" | \"slow\" | \"first_turn\" | \"random\";\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Tail Sampling Configuration\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface TailSamplingConfig {\n\t/** Sample rate for successful fast turns (0.0 to 1.0) */\n\tsuccessSampleRate: number;\n\t/** Threshold in ms above which a turn is considered \"slow\" */\n\tslowThresholdMs: number;\n\t/** Always sample first N turns of a session */\n\talwaysSampleFirstN: number;\n}\n\nconst DEFAULT_SAMPLING_CONFIG: TailSamplingConfig = {\n\tsuccessSampleRate: 0.05, // 5% of successful fast turns\n\tslowThresholdMs: 5000, // 5 seconds\n\talwaysSampleFirstN: 1, // Always sample first turn\n};\n\n/**\n * Telemetry recorder function type.\n * Injected to break circular dependency with telemetry.ts.\n */\nexport type TelemetryRecorder = (event: CanonicalTurnEvent) => Promise<void>;\n\n// Default recorder - imported lazily to break circular dependency\nlet defaultRecorder: TelemetryRecorder | undefined;\n\n/**\n * Set the default telemetry recorder.\n * Called once during initialization to inject the recordTelemetry function.\n */\nexport function setDefaultTelemetryRecorder(recorder: TelemetryRecorder): void {\n\tdefaultRecorder = recorder;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Turn Collector\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Collects context during a turn and emits a single wide event at completion.\n *\n * Usage:\n * ```typescript\n * const turn = new TurnCollector(sessionId, turnNumber);\n * turn.setModel({ id: \"claude-opus-4-6\", provider: \"anthropic\", thinkingLevel: \"medium\" });\n *\n * // During tool execution\n * turn.recordToolStart(\"bash\", \"call-123\");\n * // ... execute tool ...\n * turn.recordToolEnd(\"call-123\", true, 150);\n *\n * // At turn end\n * turn.complete(\"success\", tokens, costUsd);\n * ```\n */\nexport class TurnCollector {\n\tprivate readonly turnId: string;\n\tprivate readonly startTime: number;\n\tprivate llmStartTime?: number;\n\tprivate accumulatedLlmDurationMs = 0;\n\tprivate queueStartTime?: number;\n\n\tprivate model: ModelInfo = {\n\t\tid: \"unknown\",\n\t\tprovider: \"unknown\",\n\t\tthinkingLevel: \"off\",\n\t};\n\tprivate tools: Map<\n\t\tstring,\n\t\t{ name: string; callId: string; startTime: number; inputSizeBytes?: number }\n\t> = new Map();\n\tprivate completedTools: ToolExecution[] = [];\n\n\t// Context fields\n\tprivate sandboxMode: CanonicalTurnEvent[\"sandboxMode\"] = \"none\";\n\tprivate approvalMode: CanonicalTurnEvent[\"approvalMode\"] = \"prompt\";\n\tprivate mcpServers: string[] = [];\n\tprivate contextSourceCount = 0;\n\tprivate messageCount = 0;\n\tprivate inputSizeBytes = 0;\n\tprivate outputSizeBytes = 0;\n\tprivate features = {\n\t\tsafeMode: false,\n\t\tguardianEnabled: true,\n\t\tcompactionEnabled: true,\n\t\thookCount: 0,\n\t};\n\n\tprivate samplingConfig: TailSamplingConfig;\n\tprivate traceId?: string;\n\tprivate recorder?: TelemetryRecorder;\n\n\tconstructor(\n\t\tprivate readonly sessionId: string,\n\t\tprivate readonly turnNumber: number,\n\t\tsamplingConfig?: Partial<TailSamplingConfig>,\n\t\trecorder?: TelemetryRecorder,\n\t) {\n\t\tthis.turnId = randomUUID();\n\t\tthis.startTime = performance.now();\n\t\tthis.samplingConfig = { ...DEFAULT_SAMPLING_CONFIG, ...samplingConfig };\n\t\tthis.recorder = recorder;\n\t}\n\n\t// ─── Setters ──────────────────────────────────────────────────────────────\n\n\tsetModel(model: ModelInfo): this {\n\t\tthis.model = model;\n\t\treturn this;\n\t}\n\n\tsetTraceId(traceId: string): this {\n\t\tthis.traceId = traceId;\n\t\treturn this;\n\t}\n\n\tsetSandboxMode(mode: CanonicalTurnEvent[\"sandboxMode\"]): this {\n\t\tthis.sandboxMode = mode;\n\t\treturn this;\n\t}\n\n\tsetApprovalMode(mode: CanonicalTurnEvent[\"approvalMode\"]): this {\n\t\tthis.approvalMode = mode;\n\t\treturn this;\n\t}\n\n\tsetMcpServers(servers: string[]): this {\n\t\tthis.mcpServers = servers;\n\t\treturn this;\n\t}\n\n\tsetContextSourceCount(count: number): this {\n\t\tthis.contextSourceCount = count;\n\t\treturn this;\n\t}\n\n\tsetMessageCount(count: number): this {\n\t\tthis.messageCount = count;\n\t\treturn this;\n\t}\n\n\tsetInputSize(bytes: number): this {\n\t\tthis.inputSizeBytes = bytes;\n\t\treturn this;\n\t}\n\n\taddOutputSize(bytes: number): this {\n\t\tthis.outputSizeBytes += bytes;\n\t\treturn this;\n\t}\n\n\tsetFeatures(features: Partial<TurnCollector[\"features\"]>): this {\n\t\tthis.features = { ...this.features, ...features };\n\t\treturn this;\n\t}\n\n\t// ─── Timing ───────────────────────────────────────────────────────────────\n\n\trecordQueueStart(): this {\n\t\tthis.queueStartTime = performance.now();\n\t\treturn this;\n\t}\n\n\trecordLlmStart(): this {\n\t\tthis.llmStartTime = performance.now();\n\t\treturn this;\n\t}\n\n\trecordLlmEnd(): this {\n\t\t// Accumulate LLM duration (turns may have multiple LLM calls)\n\t\tif (this.llmStartTime !== undefined) {\n\t\t\tthis.accumulatedLlmDurationMs += performance.now() - this.llmStartTime;\n\t\t\tthis.llmStartTime = undefined;\n\t\t}\n\t\treturn this;\n\t}\n\n\t// ─── Tool Recording ───────────────────────────────────────────────────────\n\n\trecordToolStart(name: string, callId: string, inputSizeBytes?: number): this {\n\t\tthis.tools.set(callId, {\n\t\t\tname,\n\t\t\tcallId,\n\t\t\tinputSizeBytes,\n\t\t\t// Store start time; will be converted to duration in recordToolEnd\n\t\t\tstartTime: performance.now(),\n\t\t});\n\t\treturn this;\n\t}\n\n\trecordToolEnd(\n\t\tcallId: string,\n\t\tsuccess: boolean,\n\t\toutputSizeBytes?: number,\n\t\terrorCode?: string,\n\t): this {\n\t\tconst tool = this.tools.get(callId);\n\t\tif (tool && typeof tool.startTime === \"number\") {\n\t\t\tconst completed: ToolExecution = {\n\t\t\t\tname: tool.name ?? \"unknown\",\n\t\t\t\tcallId,\n\t\t\t\tdurationMs: performance.now() - tool.startTime,\n\t\t\t\tsuccess,\n\t\t\t\terrorCode,\n\t\t\t\tinputSizeBytes: tool.inputSizeBytes,\n\t\t\t\toutputSizeBytes,\n\t\t\t};\n\t\t\tthis.completedTools.push(completed);\n\t\t\tthis.tools.delete(callId);\n\t\t}\n\t\treturn this;\n\t}\n\n\t// ─── Completion ───────────────────────────────────────────────────────────\n\n\t/**\n\t * Complete the turn and emit the canonical event.\n\t * Applies tail sampling logic to decide whether to persist.\n\t */\n\tcomplete(\n\t\tstatus: CanonicalTurnEvent[\"status\"],\n\t\ttokens: TokenUsage,\n\t\tcostUsd: number,\n\t\terrorDetails?: { category?: string; message?: string },\n\t\tabortReason?: CanonicalTurnEvent[\"abortReason\"],\n\t): CanonicalTurnEvent {\n\t\tconst endTime = performance.now();\n\t\tconst totalDurationMs = endTime - this.startTime;\n\n\t\t// Calculate timing breakdown (use accumulated LLM duration for multi-call turns)\n\t\tconst llmDurationMs = this.accumulatedLlmDurationMs;\n\t\tconst toolDurationMs = this.completedTools.reduce(\n\t\t\t(sum, t) => sum + t.durationMs,\n\t\t\t0,\n\t\t);\n\t\t// Calculate queue wait time, clamping to 0 if queueStartTime > startTime\n\t\t// (which shouldn't happen but prevents negative values in telemetry)\n\t\tconst queueWaitMs =\n\t\t\tthis.queueStartTime !== undefined\n\t\t\t\t? Math.max(0, this.startTime - this.queueStartTime)\n\t\t\t\t: undefined;\n\n\t\t// Apply tail sampling\n\t\tconst { sampled, sampleReason } = this.shouldSample(\n\t\t\tstatus,\n\t\t\ttotalDurationMs,\n\t\t);\n\n\t\tconst event: CanonicalTurnEvent = {\n\t\t\ttype: \"canonical-turn\",\n\t\t\ttimestamp: new Date().toISOString(),\n\n\t\t\t// Identity\n\t\t\tsessionId: this.sessionId,\n\t\t\tturnId: this.turnId,\n\t\t\tturnNumber: this.turnNumber,\n\t\t\ttraceId: this.traceId,\n\n\t\t\t// Model\n\t\t\tmodel: this.model,\n\n\t\t\t// Timing\n\t\t\ttotalDurationMs: Math.round(totalDurationMs),\n\t\t\tllmDurationMs: Math.round(llmDurationMs),\n\t\t\ttoolDurationMs: Math.round(toolDurationMs),\n\t\t\tqueueWaitMs:\n\t\t\t\tqueueWaitMs !== undefined ? Math.round(queueWaitMs) : undefined,\n\n\t\t\t// Tools\n\t\t\ttools: this.completedTools,\n\t\t\ttoolCount: this.completedTools.length,\n\t\t\ttoolSuccessCount: this.completedTools.filter((t) => t.success).length,\n\t\t\ttoolFailureCount: this.completedTools.filter((t) => !t.success).length,\n\n\t\t\t// Tokens\n\t\t\ttokens,\n\t\t\tcostUsd,\n\n\t\t\t// Business context\n\t\t\tsandboxMode: this.sandboxMode,\n\t\t\tapprovalMode: this.approvalMode,\n\t\t\tmcpServerCount: this.mcpServers.length,\n\t\t\tmcpServers: this.mcpServers.length > 0 ? this.mcpServers : undefined,\n\t\t\tcontextSourceCount: this.contextSourceCount,\n\t\t\tmessageCount: this.messageCount,\n\t\t\tinputSizeBytes: this.inputSizeBytes,\n\t\t\toutputSizeBytes: this.outputSizeBytes,\n\n\t\t\t// Features\n\t\t\tfeatures: this.features,\n\n\t\t\t// Outcome\n\t\t\tstatus,\n\t\t\terrorCategory: errorDetails?.category,\n\t\t\terrorMessage: errorDetails?.message,\n\t\t\tabortReason,\n\n\t\t\t// Sampling\n\t\t\tsampled,\n\t\t\tsampleReason,\n\t\t};\n\n\t\t// Only persist if sampled\n\t\tif (sampled) {\n\t\t\tconst recorder = this.recorder ?? defaultRecorder;\n\t\t\tif (recorder) {\n\t\t\t\tvoid recorder(event);\n\t\t\t}\n\t\t}\n\n\t\treturn event;\n\t}\n\n\t// ─── Sampling Logic ───────────────────────────────────────────────────────\n\n\tprivate shouldSample(\n\t\tstatus: CanonicalTurnEvent[\"status\"],\n\t\ttotalDurationMs: number,\n\t): { sampled: boolean; sampleReason: CanonicalTurnEvent[\"sampleReason\"] } {\n\t\t// Always sample errors\n\t\tif (status === \"error\") {\n\t\t\treturn { sampled: true, sampleReason: \"error\" };\n\t\t}\n\n\t\t// Always sample first N turns\n\t\tif (this.turnNumber <= this.samplingConfig.alwaysSampleFirstN) {\n\t\t\treturn { sampled: true, sampleReason: \"first_turn\" };\n\t\t}\n\n\t\t// Always sample slow turns\n\t\tif (totalDurationMs >= this.samplingConfig.slowThresholdMs) {\n\t\t\treturn { sampled: true, sampleReason: \"slow\" };\n\t\t}\n\n\t\t// Random sampling for successful fast turns\n\t\tif (Math.random() < this.samplingConfig.successSampleRate) {\n\t\t\treturn { sampled: true, sampleReason: \"random\" };\n\t\t}\n\n\t\treturn { sampled: false, sampleReason: \"random\" };\n\t}\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Convenience Functions\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Create a new turn collector for a session.\n */\nexport function createTurnCollector(\n\tsessionId: string,\n\tturnNumber: number,\n\tconfig?: Partial<TailSamplingConfig>,\n\trecorder?: TelemetryRecorder,\n): TurnCollector {\n\treturn new TurnCollector(sessionId, turnNumber, config, recorder);\n}\n\n/**\n * Environment-based sampling config override.\n */\nexport function getSamplingConfigFromEnv(): Partial<TailSamplingConfig> {\n\tconst config: Partial<TailSamplingConfig> = {};\n\n\tconst sampleRate = process.env.MAESTRO_WIDE_EVENT_SAMPLE_RATE;\n\tif (sampleRate) {\n\t\tconst rate = Number.parseFloat(sampleRate);\n\t\tif (!Number.isNaN(rate) && rate >= 0 && rate <= 1) {\n\t\t\tconfig.successSampleRate = rate;\n\t\t}\n\t}\n\n\tconst slowThreshold = process.env.MAESTRO_WIDE_EVENT_SLOW_THRESHOLD_MS;\n\tif (slowThreshold) {\n\t\tconst threshold = Number.parseInt(slowThreshold, 10);\n\t\tif (!Number.isNaN(threshold) && threshold > 0) {\n\t\t\tconfig.slowThresholdMs = threshold;\n\t\t}\n\t}\n\n\treturn config;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"wide-events.js","sourceRoot":"","sources":["../../src/telemetry/wide-events.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Wide Events Telemetry - Canonical Turn Events\n *\n * Implements the \"wide events\" pattern from loggingsucks.com:\n * Instead of scattered log statements, emit ONE rich event per agent turn\n * with comprehensive context for analytics-style querying.\n *\n * Key principles:\n * - One event per turn, not N log lines\n * - High-cardinality fields for queryability\n * - Tail sampling: always keep errors/slow, sample successes\n * - Optimized for querying, not writing\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport type { PromptMetadata } from \"../prompts/types.js\";\nimport type { SkillArtifactMetadata } from \"../skills/artifact-metadata.js\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface ToolExecution {\n\tname: string;\n\tcallId: string;\n\tdurationMs: number;\n\tsuccess: boolean;\n\terrorCode?: string;\n\tinputSizeBytes?: number;\n\toutputSizeBytes?: number;\n}\n\nexport interface TokenUsage {\n\tinput: number;\n\toutput: number;\n\tcacheRead: number;\n\tcacheWrite: number;\n\tthinking?: number;\n}\n\nexport interface ModelInfo {\n\tid: string;\n\tprovider: string;\n\tthinkingLevel:\n\t\t| \"off\"\n\t\t| \"minimal\"\n\t\t| \"low\"\n\t\t| \"medium\"\n\t\t| \"high\"\n\t\t| \"max\"\n\t\t| \"ultra\";\n}\n\n/**\n * Canonical Turn Event - One wide event per agent turn\n *\n * Contains all context needed to debug and analyze any turn without\n * correlating multiple log lines. Designed for high-cardinality querying.\n */\nexport interface CanonicalTurnEvent {\n\ttype: \"canonical-turn\";\n\ttimestamp: string;\n\n\t// ─── Identity ───────────────────────────────────────────────────────────\n\tsessionId: string;\n\tturnId: string;\n\tturnNumber: number;\n\ttraceId?: string;\n\n\t// ─── Model Context ──────────────────────────────────────────────────────\n\tmodel: ModelInfo;\n\tpromptMetadata?: PromptMetadata;\n\tskillMetadata?: SkillArtifactMetadata[];\n\n\t// ─── Timing ─────────────────────────────────────────────────────────────\n\ttotalDurationMs: number;\n\tllmDurationMs: number;\n\ttoolDurationMs: number;\n\tqueueWaitMs?: number;\n\n\t// ─── Tool Executions ────────────────────────────────────────────────────\n\ttools: ToolExecution[];\n\ttoolCount: number;\n\ttoolSuccessCount: number;\n\ttoolFailureCount: number;\n\n\t// ─── Token Economics ────────────────────────────────────────────────────\n\ttokens: TokenUsage;\n\tcostUsd: number;\n\n\t// ─── Business Context (high cardinality = queryable) ────────────────────\n\tsandboxMode: \"docker\" | \"local\" | \"none\";\n\tapprovalMode: \"auto\" | \"prompt\" | \"fail\";\n\tmcpServerCount: number;\n\tmcpServers?: string[];\n\tcontextSourceCount: number;\n\tmessageCount: number;\n\tinputSizeBytes: number;\n\toutputSizeBytes: number;\n\n\t// ─── Feature Flags ──────────────────────────────────────────────────────\n\tfeatures: {\n\t\tsafeMode: boolean;\n\t\tguardianEnabled: boolean;\n\t\tcompactionEnabled: boolean;\n\t\thookCount: number;\n\t};\n\n\t// ─── Outcome ────────────────────────────────────────────────────────────\n\tstatus: \"success\" | \"error\" | \"aborted\" | \"rate_limited\";\n\terrorCategory?: string;\n\terrorMessage?: string;\n\tabortReason?: \"user\" | \"timeout\" | \"context_overflow\" | \"rate_limit\";\n\n\t// ─── Sampling Metadata ──────────────────────────────────────────────────\n\tsampled: boolean;\n\tsampleReason: \"always\" | \"error\" | \"slow\" | \"first_turn\" | \"random\";\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Tail Sampling Configuration\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface TailSamplingConfig {\n\t/** Sample rate for successful fast turns (0.0 to 1.0) */\n\tsuccessSampleRate: number;\n\t/** Threshold in ms above which a turn is considered \"slow\" */\n\tslowThresholdMs: number;\n\t/** Always sample first N turns of a session */\n\talwaysSampleFirstN: number;\n}\n\nconst DEFAULT_SAMPLING_CONFIG: TailSamplingConfig = {\n\tsuccessSampleRate: 0.05, // 5% of successful fast turns\n\tslowThresholdMs: 5000, // 5 seconds\n\talwaysSampleFirstN: 1, // Always sample first turn\n};\n\n/**\n * Telemetry recorder function type.\n * Injected to break circular dependency with telemetry.ts.\n */\nexport type TelemetryRecorder = (event: CanonicalTurnEvent) => Promise<void>;\n\n// Default recorder - imported lazily to break circular dependency\nlet defaultRecorder: TelemetryRecorder | undefined;\n\n/**\n * Set the default telemetry recorder.\n * Called once during initialization to inject the recordTelemetry function.\n */\nexport function setDefaultTelemetryRecorder(recorder: TelemetryRecorder): void {\n\tdefaultRecorder = recorder;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Turn Collector\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Collects context during a turn and emits a single wide event at completion.\n *\n * Usage:\n * ```typescript\n * const turn = new TurnCollector(sessionId, turnNumber);\n * turn.setModel({ id: \"claude-opus-4-6\", provider: \"anthropic\", thinkingLevel: \"medium\" });\n *\n * // During tool execution\n * turn.recordToolStart(\"bash\", \"call-123\");\n * // ... execute tool ...\n * turn.recordToolEnd(\"call-123\", true, 150);\n *\n * // At turn end\n * turn.complete(\"success\", tokens, costUsd);\n * ```\n */\nexport class TurnCollector {\n\tprivate readonly turnId: string;\n\tprivate readonly startTime: number;\n\tprivate llmStartTime?: number;\n\tprivate accumulatedLlmDurationMs = 0;\n\tprivate queueStartTime?: number;\n\n\tprivate model: ModelInfo = {\n\t\tid: \"unknown\",\n\t\tprovider: \"unknown\",\n\t\tthinkingLevel: \"off\",\n\t};\n\tprivate promptMetadata?: PromptMetadata;\n\tprivate readonly skillMetadata = new Map<string, SkillArtifactMetadata>();\n\tprivate tools: Map<\n\t\tstring,\n\t\t{ name: string; callId: string; startTime: number; inputSizeBytes?: number }\n\t> = new Map();\n\tprivate completedTools: ToolExecution[] = [];\n\n\t// Context fields\n\tprivate sandboxMode: CanonicalTurnEvent[\"sandboxMode\"] = \"none\";\n\tprivate approvalMode: CanonicalTurnEvent[\"approvalMode\"] = \"prompt\";\n\tprivate mcpServers: string[] = [];\n\tprivate contextSourceCount = 0;\n\tprivate messageCount = 0;\n\tprivate inputSizeBytes = 0;\n\tprivate outputSizeBytes = 0;\n\tprivate features = {\n\t\tsafeMode: false,\n\t\tguardianEnabled: true,\n\t\tcompactionEnabled: true,\n\t\thookCount: 0,\n\t};\n\n\tprivate samplingConfig: TailSamplingConfig;\n\tprivate traceId?: string;\n\tprivate recorder?: TelemetryRecorder;\n\n\tconstructor(\n\t\tprivate readonly sessionId: string,\n\t\tprivate readonly turnNumber: number,\n\t\tsamplingConfig?: Partial<TailSamplingConfig>,\n\t\trecorder?: TelemetryRecorder,\n\t) {\n\t\tthis.turnId = randomUUID();\n\t\tthis.startTime = performance.now();\n\t\tthis.samplingConfig = { ...DEFAULT_SAMPLING_CONFIG, ...samplingConfig };\n\t\tthis.recorder = recorder;\n\t}\n\n\t// ─── Setters ──────────────────────────────────────────────────────────────\n\n\tsetModel(model: ModelInfo): this {\n\t\tthis.model = model;\n\t\treturn this;\n\t}\n\n\tsetPromptMetadata(promptMetadata: PromptMetadata | undefined): this {\n\t\tthis.promptMetadata = promptMetadata;\n\t\treturn this;\n\t}\n\n\trecordSkillMetadata(skillMetadata: SkillArtifactMetadata | undefined): this {\n\t\tif (!skillMetadata) {\n\t\t\treturn this;\n\t\t}\n\t\tconst key = [\n\t\t\tskillMetadata.artifactId,\n\t\t\tskillMetadata.source,\n\t\t\tskillMetadata.name,\n\t\t\tskillMetadata.version,\n\t\t\tskillMetadata.hash,\n\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.join(\":\");\n\t\tif (!key) {\n\t\t\treturn this;\n\t\t}\n\t\tthis.skillMetadata.set(key, skillMetadata);\n\t\treturn this;\n\t}\n\n\tsetTraceId(traceId: string): this {\n\t\tthis.traceId = traceId;\n\t\treturn this;\n\t}\n\n\tsetSandboxMode(mode: CanonicalTurnEvent[\"sandboxMode\"]): this {\n\t\tthis.sandboxMode = mode;\n\t\treturn this;\n\t}\n\n\tsetApprovalMode(mode: CanonicalTurnEvent[\"approvalMode\"]): this {\n\t\tthis.approvalMode = mode;\n\t\treturn this;\n\t}\n\n\tsetMcpServers(servers: string[]): this {\n\t\tthis.mcpServers = servers;\n\t\treturn this;\n\t}\n\n\tsetContextSourceCount(count: number): this {\n\t\tthis.contextSourceCount = count;\n\t\treturn this;\n\t}\n\n\tsetMessageCount(count: number): this {\n\t\tthis.messageCount = count;\n\t\treturn this;\n\t}\n\n\tsetInputSize(bytes: number): this {\n\t\tthis.inputSizeBytes = bytes;\n\t\treturn this;\n\t}\n\n\taddOutputSize(bytes: number): this {\n\t\tthis.outputSizeBytes += bytes;\n\t\treturn this;\n\t}\n\n\tsetFeatures(features: Partial<TurnCollector[\"features\"]>): this {\n\t\tthis.features = { ...this.features, ...features };\n\t\treturn this;\n\t}\n\n\t// ─── Timing ───────────────────────────────────────────────────────────────\n\n\trecordQueueStart(): this {\n\t\tthis.queueStartTime = performance.now();\n\t\treturn this;\n\t}\n\n\trecordLlmStart(): this {\n\t\tthis.llmStartTime = performance.now();\n\t\treturn this;\n\t}\n\n\trecordLlmEnd(): this {\n\t\t// Accumulate LLM duration (turns may have multiple LLM calls)\n\t\tif (this.llmStartTime !== undefined) {\n\t\t\tthis.accumulatedLlmDurationMs += performance.now() - this.llmStartTime;\n\t\t\tthis.llmStartTime = undefined;\n\t\t}\n\t\treturn this;\n\t}\n\n\t// ─── Tool Recording ───────────────────────────────────────────────────────\n\n\trecordToolStart(name: string, callId: string, inputSizeBytes?: number): this {\n\t\tthis.tools.set(callId, {\n\t\t\tname,\n\t\t\tcallId,\n\t\t\tinputSizeBytes,\n\t\t\t// Store start time; will be converted to duration in recordToolEnd\n\t\t\tstartTime: performance.now(),\n\t\t});\n\t\treturn this;\n\t}\n\n\trecordToolEnd(\n\t\tcallId: string,\n\t\tsuccess: boolean,\n\t\toutputSizeBytes?: number,\n\t\terrorCode?: string,\n\t): this {\n\t\tconst tool = this.tools.get(callId);\n\t\tif (tool && typeof tool.startTime === \"number\") {\n\t\t\tconst completed: ToolExecution = {\n\t\t\t\tname: tool.name ?? \"unknown\",\n\t\t\t\tcallId,\n\t\t\t\tdurationMs: performance.now() - tool.startTime,\n\t\t\t\tsuccess,\n\t\t\t\terrorCode,\n\t\t\t\tinputSizeBytes: tool.inputSizeBytes,\n\t\t\t\toutputSizeBytes,\n\t\t\t};\n\t\t\tthis.completedTools.push(completed);\n\t\t\tthis.tools.delete(callId);\n\t\t}\n\t\treturn this;\n\t}\n\n\t// ─── Completion ───────────────────────────────────────────────────────────\n\n\t/**\n\t * Complete the turn and emit the canonical event.\n\t * Applies tail sampling logic to decide whether to persist.\n\t */\n\tcomplete(\n\t\tstatus: CanonicalTurnEvent[\"status\"],\n\t\ttokens: TokenUsage,\n\t\tcostUsd: number,\n\t\terrorDetails?: { category?: string; message?: string },\n\t\tabortReason?: CanonicalTurnEvent[\"abortReason\"],\n\t): CanonicalTurnEvent {\n\t\tconst endTime = performance.now();\n\t\tconst totalDurationMs = endTime - this.startTime;\n\n\t\t// Calculate timing breakdown (use accumulated LLM duration for multi-call turns)\n\t\tconst llmDurationMs = this.accumulatedLlmDurationMs;\n\t\tconst toolDurationMs = this.completedTools.reduce(\n\t\t\t(sum, t) => sum + t.durationMs,\n\t\t\t0,\n\t\t);\n\t\t// Calculate queue wait time, clamping to 0 if queueStartTime > startTime\n\t\t// (which shouldn't happen but prevents negative values in telemetry)\n\t\tconst queueWaitMs =\n\t\t\tthis.queueStartTime !== undefined\n\t\t\t\t? Math.max(0, this.startTime - this.queueStartTime)\n\t\t\t\t: undefined;\n\n\t\t// Apply tail sampling\n\t\tconst { sampled, sampleReason } = this.shouldSample(\n\t\t\tstatus,\n\t\t\ttotalDurationMs,\n\t\t);\n\n\t\tconst event: CanonicalTurnEvent = {\n\t\t\ttype: \"canonical-turn\",\n\t\t\ttimestamp: new Date().toISOString(),\n\n\t\t\t// Identity\n\t\t\tsessionId: this.sessionId,\n\t\t\tturnId: this.turnId,\n\t\t\tturnNumber: this.turnNumber,\n\t\t\ttraceId: this.traceId,\n\n\t\t\t// Model\n\t\t\tmodel: this.model,\n\t\t\tpromptMetadata: this.promptMetadata,\n\t\t\tskillMetadata:\n\t\t\t\tthis.skillMetadata.size > 0\n\t\t\t\t\t? [...this.skillMetadata.values()]\n\t\t\t\t\t: undefined,\n\n\t\t\t// Timing\n\t\t\ttotalDurationMs: Math.round(totalDurationMs),\n\t\t\tllmDurationMs: Math.round(llmDurationMs),\n\t\t\ttoolDurationMs: Math.round(toolDurationMs),\n\t\t\tqueueWaitMs:\n\t\t\t\tqueueWaitMs !== undefined ? Math.round(queueWaitMs) : undefined,\n\n\t\t\t// Tools\n\t\t\ttools: this.completedTools,\n\t\t\ttoolCount: this.completedTools.length,\n\t\t\ttoolSuccessCount: this.completedTools.filter((t) => t.success).length,\n\t\t\ttoolFailureCount: this.completedTools.filter((t) => !t.success).length,\n\n\t\t\t// Tokens\n\t\t\ttokens,\n\t\t\tcostUsd,\n\n\t\t\t// Business context\n\t\t\tsandboxMode: this.sandboxMode,\n\t\t\tapprovalMode: this.approvalMode,\n\t\t\tmcpServerCount: this.mcpServers.length,\n\t\t\tmcpServers: this.mcpServers.length > 0 ? this.mcpServers : undefined,\n\t\t\tcontextSourceCount: this.contextSourceCount,\n\t\t\tmessageCount: this.messageCount,\n\t\t\tinputSizeBytes: this.inputSizeBytes,\n\t\t\toutputSizeBytes: this.outputSizeBytes,\n\n\t\t\t// Features\n\t\t\tfeatures: this.features,\n\n\t\t\t// Outcome\n\t\t\tstatus,\n\t\t\terrorCategory: errorDetails?.category,\n\t\t\terrorMessage: errorDetails?.message,\n\t\t\tabortReason,\n\n\t\t\t// Sampling\n\t\t\tsampled,\n\t\t\tsampleReason,\n\t\t};\n\n\t\t// Only persist if sampled\n\t\tif (sampled) {\n\t\t\tconst recorder = this.recorder ?? defaultRecorder;\n\t\t\tif (recorder) {\n\t\t\t\tvoid recorder(event);\n\t\t\t}\n\t\t}\n\n\t\treturn event;\n\t}\n\n\t// ─── Sampling Logic ───────────────────────────────────────────────────────\n\n\tprivate shouldSample(\n\t\tstatus: CanonicalTurnEvent[\"status\"],\n\t\ttotalDurationMs: number,\n\t): { sampled: boolean; sampleReason: CanonicalTurnEvent[\"sampleReason\"] } {\n\t\t// Always sample errors\n\t\tif (status === \"error\") {\n\t\t\treturn { sampled: true, sampleReason: \"error\" };\n\t\t}\n\n\t\t// Always sample first N turns\n\t\tif (this.turnNumber <= this.samplingConfig.alwaysSampleFirstN) {\n\t\t\treturn { sampled: true, sampleReason: \"first_turn\" };\n\t\t}\n\n\t\t// Always sample slow turns\n\t\tif (totalDurationMs >= this.samplingConfig.slowThresholdMs) {\n\t\t\treturn { sampled: true, sampleReason: \"slow\" };\n\t\t}\n\n\t\t// Random sampling for successful fast turns\n\t\tif (Math.random() < this.samplingConfig.successSampleRate) {\n\t\t\treturn { sampled: true, sampleReason: \"random\" };\n\t\t}\n\n\t\treturn { sampled: false, sampleReason: \"random\" };\n\t}\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Convenience Functions\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Create a new turn collector for a session.\n */\nexport function createTurnCollector(\n\tsessionId: string,\n\tturnNumber: number,\n\tconfig?: Partial<TailSamplingConfig>,\n\trecorder?: TelemetryRecorder,\n): TurnCollector {\n\treturn new TurnCollector(sessionId, turnNumber, config, recorder);\n}\n\n/**\n * Environment-based sampling config override.\n */\nexport function getSamplingConfigFromEnv(): Partial<TailSamplingConfig> {\n\tconst config: Partial<TailSamplingConfig> = {};\n\n\tconst sampleRate = process.env.MAESTRO_WIDE_EVENT_SAMPLE_RATE;\n\tif (sampleRate) {\n\t\tconst rate = Number.parseFloat(sampleRate);\n\t\tif (!Number.isNaN(rate) && rate >= 0 && rate <= 1) {\n\t\t\tconfig.successSampleRate = rate;\n\t\t}\n\t}\n\n\tconst slowThreshold = process.env.MAESTRO_WIDE_EVENT_SLOW_THRESHOLD_MS;\n\tif (slowThreshold) {\n\t\tconst threshold = Number.parseInt(slowThreshold, 10);\n\t\tif (!Number.isNaN(threshold) && threshold > 0) {\n\t\t\tconfig.slowThresholdMs = threshold;\n\t\t}\n\t}\n\n\treturn config;\n}\n"]}
|
package/dist/telemetry.d.ts
CHANGED
|
@@ -141,7 +141,7 @@ export declare function recordSessionStart(sessionId: string, metadata?: Omit<Bu
|
|
|
141
141
|
/**
|
|
142
142
|
* Record session duration on end.
|
|
143
143
|
*/
|
|
144
|
-
export declare function recordSessionDuration(sessionId: string, durationMs: number, metadata?: Omit<BusinessMetricTelemetry["metadata"], "sessionId">): void
|
|
144
|
+
export declare function recordSessionDuration(sessionId: string, durationMs: number, metadata?: Omit<BusinessMetricTelemetry["metadata"], "sessionId">): Promise<void>;
|
|
145
145
|
/**
|
|
146
146
|
* Record token usage metrics.
|
|
147
147
|
*/
|
package/dist/telemetry.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}
|
package/dist/telemetry.js
CHANGED
|
@@ -3,6 +3,7 @@ import { dirname } from "node:path";
|
|
|
3
3
|
import { SpanStatusCode } from "@opentelemetry/api";
|
|
4
4
|
import { PATHS } from "./config/constants.js";
|
|
5
5
|
import { getTelemetryTracer, isOpenTelemetryEnabled, } from "./opentelemetry.js";
|
|
6
|
+
import { mirrorTelemetryToMaestroEventBus } from "./telemetry/maestro-event-bus.js";
|
|
6
7
|
import { hasRemoteMeterDestination, mirrorCanonicalTurnEventToMeter, } from "./telemetry/meter-service-client.js";
|
|
7
8
|
import { setDefaultTelemetryRecorder, } from "./telemetry/wide-events.js";
|
|
8
9
|
import { resolveEnvPath } from "./utils/path-expansion.js";
|
|
@@ -282,15 +283,18 @@ export async function recordTelemetry(event) {
|
|
|
282
283
|
if (openTelemetryEnabled) {
|
|
283
284
|
recordOpenTelemetrySpan(event);
|
|
284
285
|
}
|
|
286
|
+
const eventBusTask = mirrorTelemetryToMaestroEventBus(event);
|
|
285
287
|
const legacyEnabled = telemetryEnabled && samplingRate > 0;
|
|
286
288
|
if (!legacyEnabled) {
|
|
289
|
+
await eventBusTask;
|
|
287
290
|
return;
|
|
288
291
|
}
|
|
289
292
|
if (samplingRate < 1 && Math.random() > samplingRate) {
|
|
293
|
+
await eventBusTask;
|
|
290
294
|
return;
|
|
291
295
|
}
|
|
292
296
|
try {
|
|
293
|
-
await persistTelemetry(event);
|
|
297
|
+
await Promise.all([persistTelemetry(event), eventBusTask]);
|
|
294
298
|
}
|
|
295
299
|
catch (_error) {
|
|
296
300
|
// Ignore telemetry persistence failures
|
|
@@ -389,9 +393,15 @@ export function recordSessionStart(sessionId, metadata) {
|
|
|
389
393
|
* Record session duration on end.
|
|
390
394
|
*/
|
|
391
395
|
export function recordSessionDuration(sessionId, durationMs, metadata) {
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
396
|
+
return recordTelemetry({
|
|
397
|
+
type: "business-metric",
|
|
398
|
+
timestamp: new Date().toISOString(),
|
|
399
|
+
metric: "session.duration",
|
|
400
|
+
value: durationMs,
|
|
401
|
+
metadata: {
|
|
402
|
+
...metadata,
|
|
403
|
+
sessionId,
|
|
404
|
+
},
|
|
395
405
|
});
|
|
396
406
|
}
|
|
397
407
|
/**
|
package/dist/telemetry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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","sourcesContent":["import { appendFile, mkdir } from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\nimport { type Span, SpanStatusCode } from \"@opentelemetry/api\";\n\nimport { PATHS } from \"./config/constants.js\";\nimport {\n\tgetTelemetryTracer,\n\tinitOpenTelemetry,\n\tisOpenTelemetryEnabled,\n} from \"./opentelemetry.js\";\nimport {\n\thasRemoteMeterDestination,\n\tmirrorCanonicalTurnEventToMeter,\n} from \"./telemetry/meter-service-client.js\";\nimport {\n\ttype CanonicalTurnEvent,\n\tsetDefaultTelemetryRecorder,\n} from \"./telemetry/wide-events.js\";\nimport { resolveEnvPath } from \"./utils/path-expansion.js\";\nimport {\n\tsanitizeOptionalWithStaticMask,\n\tsanitizeWithStaticMask,\n} from \"./utils/secret-redactor.js\";\n\ntype BaseTelemetryEvent = {\n\ttype:\n\t\t| \"tool-execution\"\n\t\t| \"evaluation\"\n\t\t| \"loader-stage\"\n\t\t| \"sse\"\n\t\t| \"background-task\"\n\t\t| \"api-request\"\n\t\t| \"business-metric\"\n\t\t| \"sandbox-violation\";\n\ttimestamp: string;\n};\n\nexport interface ApiRequestTelemetry extends BaseTelemetryEvent {\n\ttype: \"api-request\";\n\tmethod: string;\n\tpath: string;\n\tstatusCode: number;\n\tdurationMs: number;\n\tmetadata?: Record<string, unknown>;\n}\n\nexport interface ToolExecutionTelemetry extends BaseTelemetryEvent {\n\ttype: \"tool-execution\";\n\ttoolName: string;\n\tsuccess: boolean;\n\tdurationMs: number;\n\tmetadata?: Record<string, unknown>;\n}\n\nexport interface EvaluationTelemetry extends BaseTelemetryEvent {\n\ttype: \"evaluation\";\n\tscenario: string;\n\tsuccess: boolean;\n\tdetails?: Record<string, unknown>;\n}\n\nexport interface LoaderStageTelemetry extends BaseTelemetryEvent {\n\ttype: \"loader-stage\";\n\tstage: string;\n\tdurationMs: number;\n\tmetadata?: Record<string, unknown>;\n}\n\nexport interface SseTelemetry extends BaseTelemetryEvent {\n\ttype: \"sse\";\n\tevent: \"skip\";\n\tsent: number;\n\tskipped: number;\n\tmetadata?: Record<string, unknown>;\n}\n\ntype BackgroundTaskStatusTelemetry =\n\t| \"running\"\n\t| \"restarting\"\n\t| \"failed\"\n\t| \"exited\"\n\t| \"stopped\";\n\nexport interface BackgroundTaskTelemetry extends BaseTelemetryEvent {\n\ttype: \"background-task\";\n\tevent: \"started\" | \"restarted\" | \"exited\" | \"failed\" | \"stopped\";\n\ttaskId: string;\n\tstatus: BackgroundTaskStatusTelemetry;\n\tcommand: string;\n\tshellMode: \"shell\" | \"exec\";\n\tcwd?: string;\n\trestartAttempts: number;\n\tlogTruncated: boolean;\n\texitCode?: number | null;\n\tsignal?: string | null;\n\tresourceUsage?: {\n\t\tmaxRssKb?: number;\n\t\tuserMs?: number;\n\t\tsystemMs?: number;\n\t};\n\tfailureReason?: string;\n\tlimitBreach?: {\n\t\tkind: \"memory\" | \"cpu\";\n\t\tlimit: number;\n\t\tactual: number;\n\t};\n}\n\n/**\n * Business metrics for tracking usage patterns.\n * Inspired by Claude Code's telemetry events.\n */\nexport interface BusinessMetricTelemetry extends BaseTelemetryEvent {\n\ttype: \"business-metric\";\n\tmetric:\n\t\t| \"session.count\"\n\t\t| \"session.duration\"\n\t\t| \"session.migration\"\n\t\t| \"lines_of_code.count\"\n\t\t| \"tokens.input\"\n\t\t| \"tokens.output\"\n\t\t| \"tokens.cache_read\"\n\t\t| \"tokens.cache_write\"\n\t\t| \"cost.usd\"\n\t\t| \"compaction.triggered\"\n\t\t| \"model.switch\";\n\tvalue: number;\n\tmetadata?: {\n\t\tsessionId?: string;\n\t\tmodel?: string;\n\t\tprovider?: string;\n\t\tgitBranch?: string;\n\t\tgitCommitSha?: string;\n\t\t[key: string]: unknown;\n\t};\n}\n\n/**\n * Sandbox violation tracking for security auditing.\n */\nexport interface SandboxViolationTelemetry extends BaseTelemetryEvent {\n\ttype: \"sandbox-violation\";\n\tevent: \"blocked\" | \"warned\" | \"allowed\";\n\ttool: string;\n\taction: string;\n\treason: string;\n\tpath?: string;\n\tcommand?: string;\n\tmetadata?: {\n\t\tsessionId?: string;\n\t\tuserId?: string;\n\t\t[key: string]: unknown;\n\t};\n}\n\n/**\n * Canonical Turn Event - Wide event emitted once per agent turn.\n * Re-exported from telemetry/wide-events.ts for type union.\n */\nexport interface CanonicalTurnEventBase {\n\ttype: \"canonical-turn\";\n\ttimestamp: string;\n\tsessionId: string;\n\tturnId: string;\n\tturnNumber: number;\n\t[key: string]: unknown;\n}\n\ntype TelemetryEvent =\n\t| ToolExecutionTelemetry\n\t| EvaluationTelemetry\n\t| LoaderStageTelemetry\n\t| SseTelemetry\n\t| BackgroundTaskTelemetry\n\t| ApiRequestTelemetry\n\t| BusinessMetricTelemetry\n\t| SandboxViolationTelemetry\n\t| CanonicalTurnEventBase\n\t| CanonicalTurnEvent;\n\nconst telemetryFlag =\n\tprocess.env.MAESTRO_TELEMETRY ?? process.env.PLAYWRIGHT_TELEMETRY;\n\nconst telemetryFileEnv =\n\tresolveEnvPath(process.env.MAESTRO_TELEMETRY_FILE) ??\n\tresolveEnvPath(process.env.PLAYWRIGHT_TELEMETRY_FILE);\n\nconst telemetryEndpointEnv =\n\tprocess.env.MAESTRO_TELEMETRY_ENDPOINT ??\n\tprocess.env.PLAYWRIGHT_TELEMETRY_ENDPOINT;\n\nconst telemetrySampleEnv =\n\tprocess.env.MAESTRO_TELEMETRY_SAMPLE ??\n\tprocess.env.PLAYWRIGHT_TELEMETRY_SAMPLE;\n\nconst shouldEnableTelemetry = (): boolean => {\n\tconst flag = telemetryFlag?.toLowerCase();\n\tif (flag === \"0\" || flag === \"false\") {\n\t\treturn false;\n\t}\n\tif (flag === \"1\" || flag === \"true\") {\n\t\treturn true;\n\t}\n\treturn Boolean(\n\t\ttelemetryEndpointEnv || telemetryFileEnv || hasRemoteMeterDestination(),\n\t);\n};\nconst initialTelemetryEnabled = shouldEnableTelemetry();\nlet telemetryEnabled = initialTelemetryEnabled;\nlet telemetryOverride: boolean | null = null;\nlet telemetryOverrideReason: string | undefined;\n\nconst parseSamplingRate = (): number => {\n\tconst raw = telemetrySampleEnv;\n\tif (!raw) {\n\t\treturn 1;\n\t}\n\tconst rate = Number.parseFloat(raw);\n\tif (Number.isNaN(rate)) {\n\t\treturn 1;\n\t}\n\treturn Math.min(Math.max(rate, 0), 1);\n};\n\nconst samplingRate = parseSamplingRate();\n\nconst defaultTelemetryFile = PATHS.TELEMETRY_LOG;\nconst toolFailureLogFile = PATHS.TOOL_FAILURE_LOG;\nconst BACKGROUND_TASK_HISTORY_LIMIT = 50;\nconst backgroundTaskHistory: BackgroundTaskTelemetry[] = [];\n\nexport interface TelemetryStatus {\n\tenabled: boolean;\n\treason: string;\n\tendpoint?: string;\n\tfilePath?: string;\n\tsampleRate: number;\n\tflagValue?: string;\n\truntimeOverride?: \"enabled\" | \"disabled\";\n\toverrideReason?: string;\n}\n\nexport function getTelemetryStatus(): TelemetryStatus {\n\tlet reason = \"disabled\";\n\tconst baseEnabled = initialTelemetryEnabled && samplingRate > 0;\n\tif (!shouldEnableTelemetry()) {\n\t\treason = \"flag disabled\";\n\t} else if (samplingRate === 0) {\n\t\treason = \"sampling=0\";\n\t} else if (telemetryEndpointEnv) {\n\t\treason = \"endpoint\";\n\t} else if (hasRemoteMeterDestination()) {\n\t\treason = \"meter\";\n\t} else if (telemetryFileEnv || baseEnabled) {\n\t\treason = \"file\";\n\t}\n\tconst runtimeOverride =\n\t\ttelemetryOverride === null\n\t\t\t? undefined\n\t\t\t: telemetryOverride\n\t\t\t\t? \"enabled\"\n\t\t\t\t: \"disabled\";\n\n\treturn {\n\t\tenabled: telemetryEnabled && samplingRate > 0,\n\t\treason,\n\t\tendpoint: telemetryEndpointEnv,\n\t\tfilePath: telemetryFileEnv || defaultTelemetryFile,\n\t\tsampleRate: samplingRate,\n\t\tflagValue: telemetryFlag,\n\t\truntimeOverride,\n\t\toverrideReason: telemetryOverrideReason,\n\t};\n}\n\nexport function setTelemetryRuntimeOverride(\n\tenabled: boolean | null,\n\treason?: string,\n): void {\n\ttelemetryOverride = enabled;\n\ttelemetryOverrideReason = reason;\n\ttelemetryEnabled = enabled === null ? initialTelemetryEnabled : enabled;\n}\n\nfunction isCanonicalTurnTelemetryEvent(\n\tevent: TelemetryEvent,\n): event is CanonicalTurnEvent {\n\treturn (\n\t\tevent.type === \"canonical-turn\" && \"model\" in event && \"tokens\" in event\n\t);\n}\n\nasync function writeToFile(payload: string) {\n\tconst filePath = telemetryFileEnv || defaultTelemetryFile;\n\tawait mkdir(dirname(filePath), { recursive: true });\n\tawait appendFile(filePath, `${payload}\\n`, \"utf-8\");\n}\n\nasync function appendToolFailure(payload: string): Promise<void> {\n\tawait mkdir(dirname(toolFailureLogFile), { recursive: true });\n\tawait appendFile(toolFailureLogFile, `${payload}\\n`, \"utf-8\");\n}\n\nasync function postToEndpoint(payload: string) {\n\tconst endpoint = telemetryEndpointEnv;\n\tif (!endpoint) {\n\t\treturn;\n\t}\n\ttry {\n\t\tawait fetch(endpoint, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { \"content-type\": \"application/json\" },\n\t\t\tbody: payload,\n\t\t});\n\t} catch (_error) {\n\t\t// Swallow telemetry transport errors\n\t}\n}\n\nfunction recordOpenTelemetrySpan(event: TelemetryEvent): void {\n\ttry {\n\t\tconst tracer = getTelemetryTracer();\n\t\ttracer.startActiveSpan(`telemetry.${event.type}`, (span: Span) => {\n\t\t\tspan.setAttributes({\n\t\t\t\t\"maestro.telemetry.type\": event.type,\n\t\t\t\t\"maestro.telemetry.timestamp\": event.timestamp,\n\t\t\t});\n\n\t\t\tswitch (event.type) {\n\t\t\t\tcase \"tool-execution\":\n\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\"maestro.tool.name\": event.toolName,\n\t\t\t\t\t\t\"maestro.tool.success\": event.success,\n\t\t\t\t\t\t\"maestro.tool.duration_ms\": event.durationMs,\n\t\t\t\t\t});\n\t\t\t\t\tspan.setStatus({\n\t\t\t\t\t\tcode: event.success ? SpanStatusCode.OK : SpanStatusCode.ERROR,\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"evaluation\":\n\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\"maestro.eval.scenario\": event.scenario,\n\t\t\t\t\t\t\"maestro.eval.success\": event.success,\n\t\t\t\t\t});\n\t\t\t\t\tspan.setStatus({\n\t\t\t\t\t\tcode: event.success ? SpanStatusCode.OK : SpanStatusCode.ERROR,\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"loader-stage\":\n\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\"maestro.loader.stage\": event.stage,\n\t\t\t\t\t\t\"maestro.loader.duration_ms\": event.durationMs,\n\t\t\t\t\t});\n\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.OK });\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"sse\":\n\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\"maestro.sse.sent\": event.sent,\n\t\t\t\t\t\t\"maestro.sse.skipped\": event.skipped,\n\t\t\t\t\t});\n\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.OK });\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"background-task\":\n\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\"maestro.background.id\": event.taskId,\n\t\t\t\t\t\t\"maestro.background.event\": event.event,\n\t\t\t\t\t\t\"maestro.background.status\": event.status,\n\t\t\t\t\t\t\"maestro.background.restart_attempts\": event.restartAttempts,\n\t\t\t\t\t\t\"maestro.background.exit_code\": event.exitCode ?? -1,\n\t\t\t\t\t\t\"maestro.background.shell_mode\": event.shellMode,\n\t\t\t\t\t});\n\t\t\t\t\tspan.setStatus(\n\t\t\t\t\t\tevent.failureReason || event.status === \"failed\"\n\t\t\t\t\t\t\t? { code: SpanStatusCode.ERROR, message: event.failureReason }\n\t\t\t\t\t\t\t: { code: SpanStatusCode.OK },\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"api-request\":\n\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\"http.method\": event.method,\n\t\t\t\t\t\t\"http.route\": event.path,\n\t\t\t\t\t\t\"http.status_code\": event.statusCode,\n\t\t\t\t\t\t\"maestro.api.duration_ms\": event.durationMs,\n\t\t\t\t\t});\n\t\t\t\t\tspan.setStatus({\n\t\t\t\t\t\tcode:\n\t\t\t\t\t\t\tevent.statusCode >= 500\n\t\t\t\t\t\t\t\t? SpanStatusCode.ERROR\n\t\t\t\t\t\t\t\t: SpanStatusCode.OK,\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"business-metric\":\n\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\"maestro.metric.name\": event.metric,\n\t\t\t\t\t\t\"maestro.metric.value\": event.value,\n\t\t\t\t\t});\n\t\t\t\t\tif (event.metadata?.model) {\n\t\t\t\t\t\tspan.setAttribute(\"maestro.metric.model\", event.metadata.model);\n\t\t\t\t\t}\n\t\t\t\t\tif (event.metadata?.provider) {\n\t\t\t\t\t\tspan.setAttribute(\n\t\t\t\t\t\t\t\"maestro.metric.provider\",\n\t\t\t\t\t\t\tevent.metadata.provider,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.OK });\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"sandbox-violation\":\n\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\"maestro.sandbox.event\": event.event,\n\t\t\t\t\t\t\"maestro.sandbox.tool\": event.tool,\n\t\t\t\t\t\t\"maestro.sandbox.action\": event.action,\n\t\t\t\t\t\t\"maestro.sandbox.reason\": event.reason,\n\t\t\t\t\t});\n\t\t\t\t\tif (event.path) {\n\t\t\t\t\t\tspan.setAttribute(\"maestro.sandbox.path\", event.path);\n\t\t\t\t\t}\n\t\t\t\t\tspan.setStatus({\n\t\t\t\t\t\tcode:\n\t\t\t\t\t\t\tevent.event === \"blocked\"\n\t\t\t\t\t\t\t\t? SpanStatusCode.ERROR\n\t\t\t\t\t\t\t\t: SpanStatusCode.OK,\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"canonical-turn\":\n\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\"maestro.turn.id\": event.turnId,\n\t\t\t\t\t\t\"maestro.turn.number\": event.turnNumber,\n\t\t\t\t\t\t\"maestro.turn.session_id\": event.sessionId,\n\t\t\t\t\t\t\"maestro.turn.status\": String(\n\t\t\t\t\t\t\t\"status\" in event ? event.status : \"unknown\",\n\t\t\t\t\t\t),\n\t\t\t\t\t\t\"maestro.turn.tool_count\": Number(\n\t\t\t\t\t\t\t\"toolCount\" in event ? event.toolCount : 0,\n\t\t\t\t\t\t),\n\t\t\t\t\t\t\"maestro.turn.total_duration_ms\": Number(\n\t\t\t\t\t\t\t\"totalDurationMs\" in event ? event.totalDurationMs : 0,\n\t\t\t\t\t\t),\n\t\t\t\t\t\t\"maestro.turn.cost_usd\": Number(\n\t\t\t\t\t\t\t\"costUsd\" in event ? event.costUsd : 0,\n\t\t\t\t\t\t),\n\t\t\t\t\t\t\"maestro.turn.sampled\": Boolean(\n\t\t\t\t\t\t\t\"sampled\" in event ? event.sampled : true,\n\t\t\t\t\t\t),\n\t\t\t\t\t});\n\t\t\t\t\tspan.setStatus({\n\t\t\t\t\t\tcode:\n\t\t\t\t\t\t\t\"status\" in event && event.status === \"error\"\n\t\t\t\t\t\t\t\t? SpanStatusCode.ERROR\n\t\t\t\t\t\t\t\t: SpanStatusCode.OK,\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.UNSET });\n\t\t\t}\n\n\t\t\tif (\"metadata\" in event && event.metadata) {\n\t\t\t\tspan.setAttributes({ \"maestro.telemetry.has_metadata\": true });\n\t\t\t}\n\n\t\t\tspan.end();\n\t\t});\n\t} catch {\n\t\t// Never let tracing failures affect runtime\n\t}\n}\n\nasync function persistTelemetry(event: TelemetryEvent) {\n\tconst payload = JSON.stringify(event);\n\tconst tasks: Promise<void>[] = [];\n\n\tif (isCanonicalTurnTelemetryEvent(event)) {\n\t\ttasks.push(mirrorCanonicalTurnEventToMeter(event).then(() => undefined));\n\t}\n\n\tif (telemetryEndpointEnv) {\n\t\ttasks.push(postToEndpoint(payload));\n\t}\n\n\tif (telemetryEndpointEnv === undefined) {\n\t\t// Default to file storage when no endpoint is configured\n\t\ttasks.push(writeToFile(payload));\n\t} else if (telemetryFileEnv) {\n\t\ttasks.push(writeToFile(payload));\n\t}\n\n\tawait Promise.all(tasks);\n}\n\nfunction cloneBackgroundTaskTelemetry(\n\tevent: BackgroundTaskTelemetry,\n): BackgroundTaskTelemetry {\n\treturn {\n\t\t...event,\n\t\tresourceUsage: event.resourceUsage ? { ...event.resourceUsage } : undefined,\n\t\tlimitBreach: event.limitBreach ? { ...event.limitBreach } : undefined,\n\t};\n}\n\nfunction recordBackgroundHistory(event: BackgroundTaskTelemetry): void {\n\tbackgroundTaskHistory.push(cloneBackgroundTaskTelemetry(event));\n\tif (backgroundTaskHistory.length > BACKGROUND_TASK_HISTORY_LIMIT) {\n\t\tbackgroundTaskHistory.shift();\n\t}\n}\n\nexport function getBackgroundTaskHistory(\n\tlimit = 10,\n): BackgroundTaskTelemetry[] {\n\tif (limit <= 0) {\n\t\treturn [];\n\t}\n\treturn backgroundTaskHistory\n\t\t.slice(-limit)\n\t\t.map((entry) => cloneBackgroundTaskTelemetry(entry));\n}\n\nexport async function recordTelemetry(event: TelemetryEvent): Promise<void> {\n\tconst openTelemetryEnabled = isOpenTelemetryEnabled();\n\tif (openTelemetryEnabled) {\n\t\trecordOpenTelemetrySpan(event);\n\t}\n\n\tconst legacyEnabled = telemetryEnabled && samplingRate > 0;\n\tif (!legacyEnabled) {\n\t\treturn;\n\t}\n\n\tif (samplingRate < 1 && Math.random() > samplingRate) {\n\t\treturn;\n\t}\n\n\ttry {\n\t\tawait persistTelemetry(event);\n\t} catch (_error) {\n\t\t// Ignore telemetry persistence failures\n\t}\n}\n\nexport function recordToolExecution(\n\ttoolName: string,\n\tsuccess: boolean,\n\tdurationMs: number,\n\tmetadata?: Record<string, unknown>,\n): void {\n\tvoid recordTelemetry({\n\t\ttype: \"tool-execution\",\n\t\ttimestamp: new Date().toISOString(),\n\t\ttoolName,\n\t\tsuccess,\n\t\tdurationMs,\n\t\tmetadata,\n\t});\n}\n\nexport function recordEvaluationResult(\n\tscenario: string,\n\tsuccess: boolean,\n\tdetails?: Record<string, unknown>,\n): void {\n\tvoid recordTelemetry({\n\t\ttype: \"evaluation\",\n\t\ttimestamp: new Date().toISOString(),\n\t\tscenario,\n\t\tsuccess,\n\t\tdetails,\n\t});\n}\n\nexport function recordLoaderStage(\n\tstage: string,\n\tdurationMs: number,\n\tmetadata?: Record<string, unknown>,\n): void {\n\tvoid recordTelemetry({\n\t\ttype: \"loader-stage\",\n\t\ttimestamp: new Date().toISOString(),\n\t\tstage,\n\t\tdurationMs,\n\t\tmetadata,\n\t});\n}\n\nexport function recordSseSkip(\n\tsent: number,\n\tskipped: number,\n\tmetadata?: Record<string, unknown>,\n): void {\n\tvoid recordTelemetry({\n\t\ttype: \"sse\",\n\t\tevent: \"skip\",\n\t\ttimestamp: new Date().toISOString(),\n\t\tsent,\n\t\tskipped,\n\t\tmetadata,\n\t});\n}\n\nexport function logToolFailure(\n\ttoolName: string,\n\terrorMessage: string,\n\tmetadata?: Record<string, unknown>,\n): void {\n\tconst payload = {\n\t\ttool: toolName,\n\t\terror: errorMessage,\n\t\tmetadata,\n\t\ttimestamp: new Date().toISOString(),\n\t};\n\tvoid appendToolFailure(JSON.stringify(payload));\n}\n\nexport function recordBackgroundTaskEvent(\n\tevent: Omit<BackgroundTaskTelemetry, \"type\" | \"timestamp\">,\n): void {\n\tconst sanitizedCommand = sanitizeWithStaticMask(event.command);\n\tconst sanitizedFailure = sanitizeOptionalWithStaticMask(event.failureReason);\n\tconst payload: BackgroundTaskTelemetry = {\n\t\t...event,\n\t\tcommand: sanitizedCommand,\n\t\tfailureReason: sanitizedFailure,\n\t\ttype: \"background-task\",\n\t\ttimestamp: new Date().toISOString(),\n\t};\n\trecordBackgroundHistory(payload);\n\tvoid recordTelemetry(payload);\n}\n\nexport function recordApiRequest(\n\tmethod: string,\n\tpath: string,\n\tstatusCode: number,\n\tdurationMs: number,\n\tmetadata?: Record<string, unknown>,\n): void {\n\tvoid recordTelemetry({\n\t\ttype: \"api-request\",\n\t\ttimestamp: new Date().toISOString(),\n\t\tmethod,\n\t\tpath,\n\t\tstatusCode,\n\t\tdurationMs,\n\t\tmetadata,\n\t});\n}\n\n/**\n * Record a business metric for usage tracking.\n */\nexport function recordBusinessMetric(\n\tmetric: BusinessMetricTelemetry[\"metric\"],\n\tvalue: number,\n\tmetadata?: BusinessMetricTelemetry[\"metadata\"],\n): void {\n\tvoid recordTelemetry({\n\t\ttype: \"business-metric\",\n\t\ttimestamp: new Date().toISOString(),\n\t\tmetric,\n\t\tvalue,\n\t\tmetadata,\n\t});\n}\n\n/**\n * Record session start.\n */\nexport function recordSessionStart(\n\tsessionId: string,\n\tmetadata?: Omit<BusinessMetricTelemetry[\"metadata\"], \"sessionId\">,\n): void {\n\trecordBusinessMetric(\"session.count\", 1, { ...metadata, sessionId });\n}\n\n/**\n * Record session duration on end.\n */\nexport function recordSessionDuration(\n\tsessionId: string,\n\tdurationMs: number,\n\tmetadata?: Omit<BusinessMetricTelemetry[\"metadata\"], \"sessionId\">,\n): void {\n\trecordBusinessMetric(\"session.duration\", durationMs, {\n\t\t...metadata,\n\t\tsessionId,\n\t});\n}\n\n/**\n * Record token usage metrics.\n */\nexport function recordTokenUsage(\n\tsessionId: string,\n\ttokens: {\n\t\tinput?: number;\n\t\toutput?: number;\n\t\tcacheRead?: number;\n\t\tcacheWrite?: number;\n\t},\n\tmetadata?: Omit<BusinessMetricTelemetry[\"metadata\"], \"sessionId\">,\n): void {\n\tif (tokens.input !== undefined && tokens.input > 0) {\n\t\trecordBusinessMetric(\"tokens.input\", tokens.input, {\n\t\t\t...metadata,\n\t\t\tsessionId,\n\t\t});\n\t}\n\tif (tokens.output !== undefined && tokens.output > 0) {\n\t\trecordBusinessMetric(\"tokens.output\", tokens.output, {\n\t\t\t...metadata,\n\t\t\tsessionId,\n\t\t});\n\t}\n\tif (tokens.cacheRead !== undefined && tokens.cacheRead > 0) {\n\t\trecordBusinessMetric(\"tokens.cache_read\", tokens.cacheRead, {\n\t\t\t...metadata,\n\t\t\tsessionId,\n\t\t});\n\t}\n\tif (tokens.cacheWrite !== undefined && tokens.cacheWrite > 0) {\n\t\trecordBusinessMetric(\"tokens.cache_write\", tokens.cacheWrite, {\n\t\t\t...metadata,\n\t\t\tsessionId,\n\t\t});\n\t}\n}\n\n/**\n * Record cost in USD.\n */\nexport function recordCost(\n\tsessionId: string,\n\tcostUsd: number,\n\tmetadata?: Omit<BusinessMetricTelemetry[\"metadata\"], \"sessionId\">,\n): void {\n\trecordBusinessMetric(\"cost.usd\", costUsd, { ...metadata, sessionId });\n}\n\n/**\n * Record compaction event.\n */\nexport function recordCompaction(\n\tsessionId: string,\n\tmetadata?: Omit<BusinessMetricTelemetry[\"metadata\"], \"sessionId\">,\n): void {\n\trecordBusinessMetric(\"compaction.triggered\", 1, { ...metadata, sessionId });\n}\n\n/**\n * Record model switch.\n */\nexport function recordModelSwitch(\n\tsessionId: string,\n\tfromModel: string,\n\ttoModel: string,\n\tmetadata?: Omit<BusinessMetricTelemetry[\"metadata\"], \"sessionId\">,\n): void {\n\trecordBusinessMetric(\"model.switch\", 1, {\n\t\t...metadata,\n\t\tsessionId,\n\t\tmodel: toModel,\n\t\tpreviousModel: fromModel,\n\t});\n}\n\n/**\n * Record session migration stats.\n */\nexport function recordSessionMigration(stats: {\n\ttotal: number;\n\tmigrated: number;\n\tskipped: number;\n\tfailures: number;\n\tversion: number;\n}): void {\n\trecordBusinessMetric(\"session.migration\", stats.total, {\n\t\tmigrated: stats.migrated,\n\t\tskipped: stats.skipped,\n\t\tfailures: stats.failures,\n\t\tversion: stats.version,\n\t});\n}\n\n/**\n * Record a sandbox violation event.\n */\nexport function recordSandboxViolation(\n\tevent: SandboxViolationTelemetry[\"event\"],\n\ttool: string,\n\taction: string,\n\treason: string,\n\toptions?: {\n\t\tpath?: string;\n\t\tcommand?: string;\n\t\tsessionId?: string;\n\t\tmetadata?: Record<string, unknown>;\n\t},\n): void {\n\tvoid recordTelemetry({\n\t\ttype: \"sandbox-violation\",\n\t\ttimestamp: new Date().toISOString(),\n\t\tevent,\n\t\ttool,\n\t\taction,\n\t\treason,\n\t\tpath: options?.path,\n\t\tcommand: options?.command\n\t\t\t? sanitizeWithStaticMask(options.command)\n\t\t\t: undefined,\n\t\tmetadata: options?.metadata\n\t\t\t? { ...options.metadata, sessionId: options.sessionId }\n\t\t\t: options?.sessionId\n\t\t\t\t? { sessionId: options.sessionId }\n\t\t\t\t: undefined,\n\t});\n}\n\n// Initialize the wide-events telemetry recorder to break circular dependency\nsetDefaultTelemetryRecorder(recordTelemetry);\n"]}
|
|
1
|
+
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAa,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE/D,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EACN,kBAAkB,EAElB,sBAAsB,GACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,gCAAgC,EAAE,MAAM,kCAAkC,CAAC;AACpF,OAAO,EACN,yBAAyB,EACzB,+BAA+B,GAC/B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAEN,2BAA2B,GAC3B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EACN,8BAA8B,EAC9B,sBAAsB,GACtB,MAAM,4BAA4B,CAAC;AA8JpC,MAAM,aAAa,GAClB,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;AAEnE,MAAM,gBAAgB,GACrB,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;IAClD,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;AAEvD,MAAM,oBAAoB,GACzB,OAAO,CAAC,GAAG,CAAC,0BAA0B;IACtC,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC;AAE3C,MAAM,kBAAkB,GACvB,OAAO,CAAC,GAAG,CAAC,wBAAwB;IACpC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;AAEzC,MAAM,qBAAqB,GAAG,GAAY,EAAE;IAC3C,MAAM,IAAI,GAAG,aAAa,EAAE,WAAW,EAAE,CAAC;IAC1C,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC;IACd,CAAC;IACD,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC;IACb,CAAC;IACD,OAAO,OAAO,CACb,oBAAoB,IAAI,gBAAgB,IAAI,yBAAyB,EAAE,CACvE,CAAC;AACH,CAAC,CAAC;AACF,MAAM,uBAAuB,GAAG,qBAAqB,EAAE,CAAC;AACxD,IAAI,gBAAgB,GAAG,uBAAuB,CAAC;AAC/C,IAAI,iBAAiB,GAAmB,IAAI,CAAC;AAC7C,IAAI,uBAA2C,CAAC;AAEhD,MAAM,iBAAiB,GAAG,GAAW,EAAE;IACtC,MAAM,GAAG,GAAG,kBAAkB,CAAC;IAC/B,IAAI,CAAC,GAAG,EAAE,CAAC;QACV,OAAO,CAAC,CAAC;IACV,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,CAAC;IACV,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,iBAAiB,EAAE,CAAC;AAEzC,MAAM,oBAAoB,GAAG,KAAK,CAAC,aAAa,CAAC;AACjD,MAAM,kBAAkB,GAAG,KAAK,CAAC,gBAAgB,CAAC;AAClD,MAAM,6BAA6B,GAAG,EAAE,CAAC;AACzC,MAAM,qBAAqB,GAA8B,EAAE,CAAC;AAa5D,MAAM,UAAU,kBAAkB;IACjC,IAAI,MAAM,GAAG,UAAU,CAAC;IACxB,MAAM,WAAW,GAAG,uBAAuB,IAAI,YAAY,GAAG,CAAC,CAAC;IAChE,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC;QAC9B,MAAM,GAAG,eAAe,CAAC;IAC1B,CAAC;SAAM,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,GAAG,YAAY,CAAC;IACvB,CAAC;SAAM,IAAI,oBAAoB,EAAE,CAAC;QACjC,MAAM,GAAG,UAAU,CAAC;IACrB,CAAC;SAAM,IAAI,yBAAyB,EAAE,EAAE,CAAC;QACxC,MAAM,GAAG,OAAO,CAAC;IAClB,CAAC;SAAM,IAAI,gBAAgB,IAAI,WAAW,EAAE,CAAC;QAC5C,MAAM,GAAG,MAAM,CAAC;IACjB,CAAC;IACD,MAAM,eAAe,GACpB,iBAAiB,KAAK,IAAI;QACzB,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,iBAAiB;YAClB,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,UAAU,CAAC;IAEhB,OAAO;QACN,OAAO,EAAE,gBAAgB,IAAI,YAAY,GAAG,CAAC;QAC7C,MAAM;QACN,QAAQ,EAAE,oBAAoB;QAC9B,QAAQ,EAAE,gBAAgB,IAAI,oBAAoB;QAClD,UAAU,EAAE,YAAY;QACxB,SAAS,EAAE,aAAa;QACxB,eAAe;QACf,cAAc,EAAE,uBAAuB;KACvC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,2BAA2B,CAC1C,OAAuB,EACvB,MAAe;IAEf,iBAAiB,GAAG,OAAO,CAAC;IAC5B,uBAAuB,GAAG,MAAM,CAAC;IACjC,gBAAgB,GAAG,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,OAAO,CAAC;AACzE,CAAC;AAED,SAAS,6BAA6B,CACrC,KAAqB;IAErB,OAAO,CACN,KAAK,CAAC,IAAI,KAAK,gBAAgB,IAAI,OAAO,IAAI,KAAK,IAAI,QAAQ,IAAI,KAAK,CACxE,CAAC;AACH,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,OAAe;IACzC,MAAM,QAAQ,GAAG,gBAAgB,IAAI,oBAAoB,CAAC;IAC1D,MAAM,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,MAAM,UAAU,CAAC,QAAQ,EAAE,GAAG,OAAO,IAAI,EAAE,OAAO,CAAC,CAAC;AACrD,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,OAAe;IAC/C,MAAM,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,MAAM,UAAU,CAAC,kBAAkB,EAAE,GAAG,OAAO,IAAI,EAAE,OAAO,CAAC,CAAC;AAC/D,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,OAAe;IAC5C,MAAM,QAAQ,GAAG,oBAAoB,CAAC;IACtC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACf,OAAO;IACR,CAAC;IACD,IAAI,CAAC;QACJ,MAAM,KAAK,CAAC,QAAQ,EAAE;YACrB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,OAAO;SACb,CAAC,CAAC;IACJ,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QACjB,qCAAqC;IACtC,CAAC;AACF,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAqB;IACrD,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;QACpC,MAAM,CAAC,eAAe,CAAC,aAAa,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,IAAU,EAAE,EAAE;YAChE,IAAI,CAAC,aAAa,CAAC;gBAClB,wBAAwB,EAAE,KAAK,CAAC,IAAI;gBACpC,6BAA6B,EAAE,KAAK,CAAC,SAAS;aAC9C,CAAC,CAAC;YAEH,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;gBACpB,KAAK,gBAAgB;oBACpB,IAAI,CAAC,aAAa,CAAC;wBAClB,mBAAmB,EAAE,KAAK,CAAC,QAAQ;wBACnC,sBAAsB,EAAE,KAAK,CAAC,OAAO;wBACrC,0BAA0B,EAAE,KAAK,CAAC,UAAU;qBAC5C,CAAC,CAAC;oBACH,IAAI,CAAC,SAAS,CAAC;wBACd,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK;qBAC9D,CAAC,CAAC;oBACH,MAAM;gBACP,KAAK,YAAY;oBAChB,IAAI,CAAC,aAAa,CAAC;wBAClB,uBAAuB,EAAE,KAAK,CAAC,QAAQ;wBACvC,sBAAsB,EAAE,KAAK,CAAC,OAAO;qBACrC,CAAC,CAAC;oBACH,IAAI,CAAC,SAAS,CAAC;wBACd,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK;qBAC9D,CAAC,CAAC;oBACH,MAAM;gBACP,KAAK,cAAc;oBAClB,IAAI,CAAC,aAAa,CAAC;wBAClB,sBAAsB,EAAE,KAAK,CAAC,KAAK;wBACnC,4BAA4B,EAAE,KAAK,CAAC,UAAU;qBAC9C,CAAC,CAAC;oBACH,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC5C,MAAM;gBACP,KAAK,KAAK;oBACT,IAAI,CAAC,aAAa,CAAC;wBAClB,kBAAkB,EAAE,KAAK,CAAC,IAAI;wBAC9B,qBAAqB,EAAE,KAAK,CAAC,OAAO;qBACpC,CAAC,CAAC;oBACH,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC5C,MAAM;gBACP,KAAK,iBAAiB;oBACrB,IAAI,CAAC,aAAa,CAAC;wBAClB,uBAAuB,EAAE,KAAK,CAAC,MAAM;wBACrC,0BAA0B,EAAE,KAAK,CAAC,KAAK;wBACvC,2BAA2B,EAAE,KAAK,CAAC,MAAM;wBACzC,qCAAqC,EAAE,KAAK,CAAC,eAAe;wBAC5D,8BAA8B,EAAE,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC;wBACpD,+BAA+B,EAAE,KAAK,CAAC,SAAS;qBAChD,CAAC,CAAC;oBACH,IAAI,CAAC,SAAS,CACb,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ;wBAC/C,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,aAAa,EAAE;wBAC9D,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,CAC9B,CAAC;oBACF,MAAM;gBACP,KAAK,aAAa;oBACjB,IAAI,CAAC,aAAa,CAAC;wBAClB,aAAa,EAAE,KAAK,CAAC,MAAM;wBAC3B,YAAY,EAAE,KAAK,CAAC,IAAI;wBACxB,kBAAkB,EAAE,KAAK,CAAC,UAAU;wBACpC,yBAAyB,EAAE,KAAK,CAAC,UAAU;qBAC3C,CAAC,CAAC;oBACH,IAAI,CAAC,SAAS,CAAC;wBACd,IAAI,EACH,KAAK,CAAC,UAAU,IAAI,GAAG;4BACtB,CAAC,CAAC,cAAc,CAAC,KAAK;4BACtB,CAAC,CAAC,cAAc,CAAC,EAAE;qBACrB,CAAC,CAAC;oBACH,MAAM;gBACP,KAAK,iBAAiB;oBACrB,IAAI,CAAC,aAAa,CAAC;wBAClB,qBAAqB,EAAE,KAAK,CAAC,MAAM;wBACnC,sBAAsB,EAAE,KAAK,CAAC,KAAK;qBACnC,CAAC,CAAC;oBACH,IAAI,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC;wBAC3B,IAAI,CAAC,YAAY,CAAC,sBAAsB,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;oBACjE,CAAC;oBACD,IAAI,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC;wBAC9B,IAAI,CAAC,YAAY,CAChB,yBAAyB,EACzB,KAAK,CAAC,QAAQ,CAAC,QAAQ,CACvB,CAAC;oBACH,CAAC;oBACD,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC5C,MAAM;gBACP,KAAK,mBAAmB;oBACvB,IAAI,CAAC,aAAa,CAAC;wBAClB,uBAAuB,EAAE,KAAK,CAAC,KAAK;wBACpC,sBAAsB,EAAE,KAAK,CAAC,IAAI;wBAClC,wBAAwB,EAAE,KAAK,CAAC,MAAM;wBACtC,wBAAwB,EAAE,KAAK,CAAC,MAAM;qBACtC,CAAC,CAAC;oBACH,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;wBAChB,IAAI,CAAC,YAAY,CAAC,sBAAsB,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;oBACvD,CAAC;oBACD,IAAI,CAAC,SAAS,CAAC;wBACd,IAAI,EACH,KAAK,CAAC,KAAK,KAAK,SAAS;4BACxB,CAAC,CAAC,cAAc,CAAC,KAAK;4BACtB,CAAC,CAAC,cAAc,CAAC,EAAE;qBACrB,CAAC,CAAC;oBACH,MAAM;gBACP,KAAK,gBAAgB;oBACpB,IAAI,CAAC,aAAa,CAAC;wBAClB,iBAAiB,EAAE,KAAK,CAAC,MAAM;wBAC/B,qBAAqB,EAAE,KAAK,CAAC,UAAU;wBACvC,yBAAyB,EAAE,KAAK,CAAC,SAAS;wBAC1C,qBAAqB,EAAE,MAAM,CAC5B,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAC5C;wBACD,yBAAyB,EAAE,MAAM,CAChC,WAAW,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAC1C;wBACD,gCAAgC,EAAE,MAAM,CACvC,iBAAiB,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CACtD;wBACD,uBAAuB,EAAE,MAAM,CAC9B,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CACtC;wBACD,sBAAsB,EAAE,OAAO,CAC9B,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CACzC;qBACD,CAAC,CAAC;oBACH,IAAI,CAAC,SAAS,CAAC;wBACd,IAAI,EACH,QAAQ,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO;4BAC5C,CAAC,CAAC,cAAc,CAAC,KAAK;4BACtB,CAAC,CAAC,cAAc,CAAC,EAAE;qBACrB,CAAC,CAAC;oBACH,MAAM;gBACP;oBACC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC;YACjD,CAAC;YAED,IAAI,UAAU,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAC3C,IAAI,CAAC,aAAa,CAAC,EAAE,gCAAgC,EAAE,IAAI,EAAE,CAAC,CAAC;YAChE,CAAC;YAED,IAAI,CAAC,GAAG,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACR,4CAA4C;IAC7C,CAAC;AACF,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,KAAqB;IACpD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,KAAK,GAAoB,EAAE,CAAC;IAElC,IAAI,6BAA6B,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED,IAAI,oBAAoB,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,oBAAoB,KAAK,SAAS,EAAE,CAAC;QACxC,yDAAyD;QACzD,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;IAClC,CAAC;SAAM,IAAI,gBAAgB,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,4BAA4B,CACpC,KAA8B;IAE9B,OAAO;QACN,GAAG,KAAK;QACR,aAAa,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,SAAS;QAC3E,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS;KACrE,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAAC,KAA8B;IAC9D,qBAAqB,CAAC,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC,CAAC;IAChE,IAAI,qBAAqB,CAAC,MAAM,GAAG,6BAA6B,EAAE,CAAC;QAClE,qBAAqB,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;AACF,CAAC;AAED,MAAM,UAAU,wBAAwB,CACvC,KAAK,GAAG,EAAE;IAEV,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QAChB,OAAO,EAAE,CAAC;IACX,CAAC;IACD,OAAO,qBAAqB;SAC1B,KAAK,CAAC,CAAC,KAAK,CAAC;SACb,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAAqB;IAC1D,MAAM,oBAAoB,GAAG,sBAAsB,EAAE,CAAC;IACtD,IAAI,oBAAoB,EAAE,CAAC;QAC1B,uBAAuB,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IACD,MAAM,YAAY,GAAG,gCAAgC,CAAC,KAAK,CAAC,CAAC;IAE7D,MAAM,aAAa,GAAG,gBAAgB,IAAI,YAAY,GAAG,CAAC,CAAC;IAC3D,IAAI,CAAC,aAAa,EAAE,CAAC;QACpB,MAAM,YAAY,CAAC;QACnB,OAAO;IACR,CAAC;IAED,IAAI,YAAY,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,YAAY,EAAE,CAAC;QACtD,MAAM,YAAY,CAAC;QACnB,OAAO;IACR,CAAC;IAED,IAAI,CAAC;QACJ,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;IAC5D,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QACjB,wCAAwC;IACzC,CAAC;AACF,CAAC;AAED,MAAM,UAAU,mBAAmB,CAClC,QAAgB,EAChB,OAAgB,EAChB,UAAkB,EAClB,QAAkC;IAElC,KAAK,eAAe,CAAC;QACpB,IAAI,EAAE,gBAAgB;QACtB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,QAAQ;QACR,OAAO;QACP,UAAU;QACV,QAAQ;KACR,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CACrC,QAAgB,EAChB,OAAgB,EAChB,OAAiC;IAEjC,KAAK,eAAe,CAAC;QACpB,IAAI,EAAE,YAAY;QAClB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,QAAQ;QACR,OAAO;QACP,OAAO;KACP,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAChC,KAAa,EACb,UAAkB,EAClB,QAAkC;IAElC,KAAK,eAAe,CAAC;QACpB,IAAI,EAAE,cAAc;QACpB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,KAAK;QACL,UAAU;QACV,QAAQ;KACR,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAC5B,IAAY,EACZ,OAAe,EACf,QAAkC;IAElC,KAAK,eAAe,CAAC;QACpB,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,MAAM;QACb,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,IAAI;QACJ,OAAO;QACP,QAAQ;KACR,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAC7B,QAAgB,EAChB,YAAoB,EACpB,QAAkC;IAElC,MAAM,OAAO,GAAG;QACf,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,YAAY;QACnB,QAAQ;QACR,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACnC,CAAC;IACF,KAAK,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,yBAAyB,CACxC,KAA0D;IAE1D,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/D,MAAM,gBAAgB,GAAG,8BAA8B,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAC7E,MAAM,OAAO,GAA4B;QACxC,GAAG,KAAK;QACR,OAAO,EAAE,gBAAgB;QACzB,aAAa,EAAE,gBAAgB;QAC/B,IAAI,EAAE,iBAAiB;QACvB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACnC,CAAC;IACF,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACjC,KAAK,eAAe,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC/B,MAAc,EACd,IAAY,EACZ,UAAkB,EAClB,UAAkB,EAClB,QAAkC;IAElC,KAAK,eAAe,CAAC;QACpB,IAAI,EAAE,aAAa;QACnB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,MAAM;QACN,IAAI;QACJ,UAAU;QACV,UAAU;QACV,QAAQ;KACR,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CACnC,MAAyC,EACzC,KAAa,EACb,QAA8C;IAE9C,KAAK,eAAe,CAAC;QACpB,IAAI,EAAE,iBAAiB;QACvB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,MAAM;QACN,KAAK;QACL,QAAQ;KACR,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CACjC,SAAiB,EACjB,QAAiE;IAEjE,oBAAoB,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE,GAAG,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;AACtE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACpC,SAAiB,EACjB,UAAkB,EAClB,QAAiE;IAEjE,OAAO,eAAe,CAAC;QACtB,IAAI,EAAE,iBAAiB;QACvB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,MAAM,EAAE,kBAAkB;QAC1B,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE;YACT,GAAG,QAAQ;YACX,SAAS;SACT;KACD,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC/B,SAAiB,EACjB,MAKC,EACD,QAAiE;IAEjE,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;QACpD,oBAAoB,CAAC,cAAc,EAAE,MAAM,CAAC,KAAK,EAAE;YAClD,GAAG,QAAQ;YACX,SAAS;SACT,CAAC,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,oBAAoB,CAAC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE;YACpD,GAAG,QAAQ;YACX,SAAS;SACT,CAAC,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,IAAI,MAAM,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;QAC5D,oBAAoB,CAAC,mBAAmB,EAAE,MAAM,CAAC,SAAS,EAAE;YAC3D,GAAG,QAAQ;YACX,SAAS;SACT,CAAC,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,IAAI,MAAM,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;QAC9D,oBAAoB,CAAC,oBAAoB,EAAE,MAAM,CAAC,UAAU,EAAE;YAC7D,GAAG,QAAQ;YACX,SAAS;SACT,CAAC,CAAC;IACJ,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CACzB,SAAiB,EACjB,OAAe,EACf,QAAiE;IAEjE,oBAAoB,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,GAAG,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;AACvE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC/B,SAAiB,EACjB,QAAiE;IAEjE,oBAAoB,CAAC,sBAAsB,EAAE,CAAC,EAAE,EAAE,GAAG,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;AAC7E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAChC,SAAiB,EACjB,SAAiB,EACjB,OAAe,EACf,QAAiE;IAEjE,oBAAoB,CAAC,cAAc,EAAE,CAAC,EAAE;QACvC,GAAG,QAAQ;QACX,SAAS;QACT,KAAK,EAAE,OAAO;QACd,aAAa,EAAE,SAAS;KACxB,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAMtC;IACA,oBAAoB,CAAC,mBAAmB,EAAE,KAAK,CAAC,KAAK,EAAE;QACtD,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,OAAO,EAAE,KAAK,CAAC,OAAO;KACtB,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACrC,KAAyC,EACzC,IAAY,EACZ,MAAc,EACd,MAAc,EACd,OAKC;IAED,KAAK,eAAe,CAAC;QACpB,IAAI,EAAE,mBAAmB;QACzB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,KAAK;QACL,IAAI;QACJ,MAAM;QACN,MAAM;QACN,IAAI,EAAE,OAAO,EAAE,IAAI;QACnB,OAAO,EAAE,OAAO,EAAE,OAAO;YACxB,CAAC,CAAC,sBAAsB,CAAC,OAAO,CAAC,OAAO,CAAC;YACzC,CAAC,CAAC,SAAS;QACZ,QAAQ,EAAE,OAAO,EAAE,QAAQ;YAC1B,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE;YACvD,CAAC,CAAC,OAAO,EAAE,SAAS;gBACnB,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE;gBAClC,CAAC,CAAC,SAAS;KACb,CAAC,CAAC;AACJ,CAAC;AAED,6EAA6E;AAC7E,2BAA2B,CAAC,eAAe,CAAC,CAAC","sourcesContent":["import { appendFile, mkdir } from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\nimport { type Span, SpanStatusCode } from \"@opentelemetry/api\";\n\nimport { PATHS } from \"./config/constants.js\";\nimport {\n\tgetTelemetryTracer,\n\tinitOpenTelemetry,\n\tisOpenTelemetryEnabled,\n} from \"./opentelemetry.js\";\nimport { mirrorTelemetryToMaestroEventBus } from \"./telemetry/maestro-event-bus.js\";\nimport {\n\thasRemoteMeterDestination,\n\tmirrorCanonicalTurnEventToMeter,\n} from \"./telemetry/meter-service-client.js\";\nimport {\n\ttype CanonicalTurnEvent,\n\tsetDefaultTelemetryRecorder,\n} from \"./telemetry/wide-events.js\";\nimport { resolveEnvPath } from \"./utils/path-expansion.js\";\nimport {\n\tsanitizeOptionalWithStaticMask,\n\tsanitizeWithStaticMask,\n} from \"./utils/secret-redactor.js\";\n\ntype BaseTelemetryEvent = {\n\ttype:\n\t\t| \"tool-execution\"\n\t\t| \"evaluation\"\n\t\t| \"loader-stage\"\n\t\t| \"sse\"\n\t\t| \"background-task\"\n\t\t| \"api-request\"\n\t\t| \"business-metric\"\n\t\t| \"sandbox-violation\";\n\ttimestamp: string;\n};\n\nexport interface ApiRequestTelemetry extends BaseTelemetryEvent {\n\ttype: \"api-request\";\n\tmethod: string;\n\tpath: string;\n\tstatusCode: number;\n\tdurationMs: number;\n\tmetadata?: Record<string, unknown>;\n}\n\nexport interface ToolExecutionTelemetry extends BaseTelemetryEvent {\n\ttype: \"tool-execution\";\n\ttoolName: string;\n\tsuccess: boolean;\n\tdurationMs: number;\n\tmetadata?: Record<string, unknown>;\n}\n\nexport interface EvaluationTelemetry extends BaseTelemetryEvent {\n\ttype: \"evaluation\";\n\tscenario: string;\n\tsuccess: boolean;\n\tdetails?: Record<string, unknown>;\n}\n\nexport interface LoaderStageTelemetry extends BaseTelemetryEvent {\n\ttype: \"loader-stage\";\n\tstage: string;\n\tdurationMs: number;\n\tmetadata?: Record<string, unknown>;\n}\n\nexport interface SseTelemetry extends BaseTelemetryEvent {\n\ttype: \"sse\";\n\tevent: \"skip\";\n\tsent: number;\n\tskipped: number;\n\tmetadata?: Record<string, unknown>;\n}\n\ntype BackgroundTaskStatusTelemetry =\n\t| \"running\"\n\t| \"restarting\"\n\t| \"failed\"\n\t| \"exited\"\n\t| \"stopped\";\n\nexport interface BackgroundTaskTelemetry extends BaseTelemetryEvent {\n\ttype: \"background-task\";\n\tevent: \"started\" | \"restarted\" | \"exited\" | \"failed\" | \"stopped\";\n\ttaskId: string;\n\tstatus: BackgroundTaskStatusTelemetry;\n\tcommand: string;\n\tshellMode: \"shell\" | \"exec\";\n\tcwd?: string;\n\trestartAttempts: number;\n\tlogTruncated: boolean;\n\texitCode?: number | null;\n\tsignal?: string | null;\n\tresourceUsage?: {\n\t\tmaxRssKb?: number;\n\t\tuserMs?: number;\n\t\tsystemMs?: number;\n\t};\n\tfailureReason?: string;\n\tlimitBreach?: {\n\t\tkind: \"memory\" | \"cpu\";\n\t\tlimit: number;\n\t\tactual: number;\n\t};\n}\n\n/**\n * Business metrics for tracking usage patterns.\n * Inspired by Claude Code's telemetry events.\n */\nexport interface BusinessMetricTelemetry extends BaseTelemetryEvent {\n\ttype: \"business-metric\";\n\tmetric:\n\t\t| \"session.count\"\n\t\t| \"session.duration\"\n\t\t| \"session.migration\"\n\t\t| \"lines_of_code.count\"\n\t\t| \"tokens.input\"\n\t\t| \"tokens.output\"\n\t\t| \"tokens.cache_read\"\n\t\t| \"tokens.cache_write\"\n\t\t| \"cost.usd\"\n\t\t| \"compaction.triggered\"\n\t\t| \"model.switch\";\n\tvalue: number;\n\tmetadata?: {\n\t\tsessionId?: string;\n\t\tmodel?: string;\n\t\tprovider?: string;\n\t\tgitBranch?: string;\n\t\tgitCommitSha?: string;\n\t\t[key: string]: unknown;\n\t};\n}\n\n/**\n * Sandbox violation tracking for security auditing.\n */\nexport interface SandboxViolationTelemetry extends BaseTelemetryEvent {\n\ttype: \"sandbox-violation\";\n\tevent: \"blocked\" | \"warned\" | \"allowed\";\n\ttool: string;\n\taction: string;\n\treason: string;\n\tpath?: string;\n\tcommand?: string;\n\tmetadata?: {\n\t\tsessionId?: string;\n\t\tuserId?: string;\n\t\t[key: string]: unknown;\n\t};\n}\n\n/**\n * Canonical Turn Event - Wide event emitted once per agent turn.\n * Re-exported from telemetry/wide-events.ts for type union.\n */\nexport interface CanonicalTurnEventBase {\n\ttype: \"canonical-turn\";\n\ttimestamp: string;\n\tsessionId: string;\n\tturnId: string;\n\tturnNumber: number;\n\t[key: string]: unknown;\n}\n\ntype TelemetryEvent =\n\t| ToolExecutionTelemetry\n\t| EvaluationTelemetry\n\t| LoaderStageTelemetry\n\t| SseTelemetry\n\t| BackgroundTaskTelemetry\n\t| ApiRequestTelemetry\n\t| BusinessMetricTelemetry\n\t| SandboxViolationTelemetry\n\t| CanonicalTurnEventBase\n\t| CanonicalTurnEvent;\n\nconst telemetryFlag =\n\tprocess.env.MAESTRO_TELEMETRY ?? process.env.PLAYWRIGHT_TELEMETRY;\n\nconst telemetryFileEnv =\n\tresolveEnvPath(process.env.MAESTRO_TELEMETRY_FILE) ??\n\tresolveEnvPath(process.env.PLAYWRIGHT_TELEMETRY_FILE);\n\nconst telemetryEndpointEnv =\n\tprocess.env.MAESTRO_TELEMETRY_ENDPOINT ??\n\tprocess.env.PLAYWRIGHT_TELEMETRY_ENDPOINT;\n\nconst telemetrySampleEnv =\n\tprocess.env.MAESTRO_TELEMETRY_SAMPLE ??\n\tprocess.env.PLAYWRIGHT_TELEMETRY_SAMPLE;\n\nconst shouldEnableTelemetry = (): boolean => {\n\tconst flag = telemetryFlag?.toLowerCase();\n\tif (flag === \"0\" || flag === \"false\") {\n\t\treturn false;\n\t}\n\tif (flag === \"1\" || flag === \"true\") {\n\t\treturn true;\n\t}\n\treturn Boolean(\n\t\ttelemetryEndpointEnv || telemetryFileEnv || hasRemoteMeterDestination(),\n\t);\n};\nconst initialTelemetryEnabled = shouldEnableTelemetry();\nlet telemetryEnabled = initialTelemetryEnabled;\nlet telemetryOverride: boolean | null = null;\nlet telemetryOverrideReason: string | undefined;\n\nconst parseSamplingRate = (): number => {\n\tconst raw = telemetrySampleEnv;\n\tif (!raw) {\n\t\treturn 1;\n\t}\n\tconst rate = Number.parseFloat(raw);\n\tif (Number.isNaN(rate)) {\n\t\treturn 1;\n\t}\n\treturn Math.min(Math.max(rate, 0), 1);\n};\n\nconst samplingRate = parseSamplingRate();\n\nconst defaultTelemetryFile = PATHS.TELEMETRY_LOG;\nconst toolFailureLogFile = PATHS.TOOL_FAILURE_LOG;\nconst BACKGROUND_TASK_HISTORY_LIMIT = 50;\nconst backgroundTaskHistory: BackgroundTaskTelemetry[] = [];\n\nexport interface TelemetryStatus {\n\tenabled: boolean;\n\treason: string;\n\tendpoint?: string;\n\tfilePath?: string;\n\tsampleRate: number;\n\tflagValue?: string;\n\truntimeOverride?: \"enabled\" | \"disabled\";\n\toverrideReason?: string;\n}\n\nexport function getTelemetryStatus(): TelemetryStatus {\n\tlet reason = \"disabled\";\n\tconst baseEnabled = initialTelemetryEnabled && samplingRate > 0;\n\tif (!shouldEnableTelemetry()) {\n\t\treason = \"flag disabled\";\n\t} else if (samplingRate === 0) {\n\t\treason = \"sampling=0\";\n\t} else if (telemetryEndpointEnv) {\n\t\treason = \"endpoint\";\n\t} else if (hasRemoteMeterDestination()) {\n\t\treason = \"meter\";\n\t} else if (telemetryFileEnv || baseEnabled) {\n\t\treason = \"file\";\n\t}\n\tconst runtimeOverride =\n\t\ttelemetryOverride === null\n\t\t\t? undefined\n\t\t\t: telemetryOverride\n\t\t\t\t? \"enabled\"\n\t\t\t\t: \"disabled\";\n\n\treturn {\n\t\tenabled: telemetryEnabled && samplingRate > 0,\n\t\treason,\n\t\tendpoint: telemetryEndpointEnv,\n\t\tfilePath: telemetryFileEnv || defaultTelemetryFile,\n\t\tsampleRate: samplingRate,\n\t\tflagValue: telemetryFlag,\n\t\truntimeOverride,\n\t\toverrideReason: telemetryOverrideReason,\n\t};\n}\n\nexport function setTelemetryRuntimeOverride(\n\tenabled: boolean | null,\n\treason?: string,\n): void {\n\ttelemetryOverride = enabled;\n\ttelemetryOverrideReason = reason;\n\ttelemetryEnabled = enabled === null ? initialTelemetryEnabled : enabled;\n}\n\nfunction isCanonicalTurnTelemetryEvent(\n\tevent: TelemetryEvent,\n): event is CanonicalTurnEvent {\n\treturn (\n\t\tevent.type === \"canonical-turn\" && \"model\" in event && \"tokens\" in event\n\t);\n}\n\nasync function writeToFile(payload: string) {\n\tconst filePath = telemetryFileEnv || defaultTelemetryFile;\n\tawait mkdir(dirname(filePath), { recursive: true });\n\tawait appendFile(filePath, `${payload}\\n`, \"utf-8\");\n}\n\nasync function appendToolFailure(payload: string): Promise<void> {\n\tawait mkdir(dirname(toolFailureLogFile), { recursive: true });\n\tawait appendFile(toolFailureLogFile, `${payload}\\n`, \"utf-8\");\n}\n\nasync function postToEndpoint(payload: string) {\n\tconst endpoint = telemetryEndpointEnv;\n\tif (!endpoint) {\n\t\treturn;\n\t}\n\ttry {\n\t\tawait fetch(endpoint, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { \"content-type\": \"application/json\" },\n\t\t\tbody: payload,\n\t\t});\n\t} catch (_error) {\n\t\t// Swallow telemetry transport errors\n\t}\n}\n\nfunction recordOpenTelemetrySpan(event: TelemetryEvent): void {\n\ttry {\n\t\tconst tracer = getTelemetryTracer();\n\t\ttracer.startActiveSpan(`telemetry.${event.type}`, (span: Span) => {\n\t\t\tspan.setAttributes({\n\t\t\t\t\"maestro.telemetry.type\": event.type,\n\t\t\t\t\"maestro.telemetry.timestamp\": event.timestamp,\n\t\t\t});\n\n\t\t\tswitch (event.type) {\n\t\t\t\tcase \"tool-execution\":\n\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\"maestro.tool.name\": event.toolName,\n\t\t\t\t\t\t\"maestro.tool.success\": event.success,\n\t\t\t\t\t\t\"maestro.tool.duration_ms\": event.durationMs,\n\t\t\t\t\t});\n\t\t\t\t\tspan.setStatus({\n\t\t\t\t\t\tcode: event.success ? SpanStatusCode.OK : SpanStatusCode.ERROR,\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"evaluation\":\n\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\"maestro.eval.scenario\": event.scenario,\n\t\t\t\t\t\t\"maestro.eval.success\": event.success,\n\t\t\t\t\t});\n\t\t\t\t\tspan.setStatus({\n\t\t\t\t\t\tcode: event.success ? SpanStatusCode.OK : SpanStatusCode.ERROR,\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"loader-stage\":\n\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\"maestro.loader.stage\": event.stage,\n\t\t\t\t\t\t\"maestro.loader.duration_ms\": event.durationMs,\n\t\t\t\t\t});\n\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.OK });\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"sse\":\n\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\"maestro.sse.sent\": event.sent,\n\t\t\t\t\t\t\"maestro.sse.skipped\": event.skipped,\n\t\t\t\t\t});\n\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.OK });\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"background-task\":\n\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\"maestro.background.id\": event.taskId,\n\t\t\t\t\t\t\"maestro.background.event\": event.event,\n\t\t\t\t\t\t\"maestro.background.status\": event.status,\n\t\t\t\t\t\t\"maestro.background.restart_attempts\": event.restartAttempts,\n\t\t\t\t\t\t\"maestro.background.exit_code\": event.exitCode ?? -1,\n\t\t\t\t\t\t\"maestro.background.shell_mode\": event.shellMode,\n\t\t\t\t\t});\n\t\t\t\t\tspan.setStatus(\n\t\t\t\t\t\tevent.failureReason || event.status === \"failed\"\n\t\t\t\t\t\t\t? { code: SpanStatusCode.ERROR, message: event.failureReason }\n\t\t\t\t\t\t\t: { code: SpanStatusCode.OK },\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"api-request\":\n\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\"http.method\": event.method,\n\t\t\t\t\t\t\"http.route\": event.path,\n\t\t\t\t\t\t\"http.status_code\": event.statusCode,\n\t\t\t\t\t\t\"maestro.api.duration_ms\": event.durationMs,\n\t\t\t\t\t});\n\t\t\t\t\tspan.setStatus({\n\t\t\t\t\t\tcode:\n\t\t\t\t\t\t\tevent.statusCode >= 500\n\t\t\t\t\t\t\t\t? SpanStatusCode.ERROR\n\t\t\t\t\t\t\t\t: SpanStatusCode.OK,\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"business-metric\":\n\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\"maestro.metric.name\": event.metric,\n\t\t\t\t\t\t\"maestro.metric.value\": event.value,\n\t\t\t\t\t});\n\t\t\t\t\tif (event.metadata?.model) {\n\t\t\t\t\t\tspan.setAttribute(\"maestro.metric.model\", event.metadata.model);\n\t\t\t\t\t}\n\t\t\t\t\tif (event.metadata?.provider) {\n\t\t\t\t\t\tspan.setAttribute(\n\t\t\t\t\t\t\t\"maestro.metric.provider\",\n\t\t\t\t\t\t\tevent.metadata.provider,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.OK });\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"sandbox-violation\":\n\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\"maestro.sandbox.event\": event.event,\n\t\t\t\t\t\t\"maestro.sandbox.tool\": event.tool,\n\t\t\t\t\t\t\"maestro.sandbox.action\": event.action,\n\t\t\t\t\t\t\"maestro.sandbox.reason\": event.reason,\n\t\t\t\t\t});\n\t\t\t\t\tif (event.path) {\n\t\t\t\t\t\tspan.setAttribute(\"maestro.sandbox.path\", event.path);\n\t\t\t\t\t}\n\t\t\t\t\tspan.setStatus({\n\t\t\t\t\t\tcode:\n\t\t\t\t\t\t\tevent.event === \"blocked\"\n\t\t\t\t\t\t\t\t? SpanStatusCode.ERROR\n\t\t\t\t\t\t\t\t: SpanStatusCode.OK,\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"canonical-turn\":\n\t\t\t\t\tspan.setAttributes({\n\t\t\t\t\t\t\"maestro.turn.id\": event.turnId,\n\t\t\t\t\t\t\"maestro.turn.number\": event.turnNumber,\n\t\t\t\t\t\t\"maestro.turn.session_id\": event.sessionId,\n\t\t\t\t\t\t\"maestro.turn.status\": String(\n\t\t\t\t\t\t\t\"status\" in event ? event.status : \"unknown\",\n\t\t\t\t\t\t),\n\t\t\t\t\t\t\"maestro.turn.tool_count\": Number(\n\t\t\t\t\t\t\t\"toolCount\" in event ? event.toolCount : 0,\n\t\t\t\t\t\t),\n\t\t\t\t\t\t\"maestro.turn.total_duration_ms\": Number(\n\t\t\t\t\t\t\t\"totalDurationMs\" in event ? event.totalDurationMs : 0,\n\t\t\t\t\t\t),\n\t\t\t\t\t\t\"maestro.turn.cost_usd\": Number(\n\t\t\t\t\t\t\t\"costUsd\" in event ? event.costUsd : 0,\n\t\t\t\t\t\t),\n\t\t\t\t\t\t\"maestro.turn.sampled\": Boolean(\n\t\t\t\t\t\t\t\"sampled\" in event ? event.sampled : true,\n\t\t\t\t\t\t),\n\t\t\t\t\t});\n\t\t\t\t\tspan.setStatus({\n\t\t\t\t\t\tcode:\n\t\t\t\t\t\t\t\"status\" in event && event.status === \"error\"\n\t\t\t\t\t\t\t\t? SpanStatusCode.ERROR\n\t\t\t\t\t\t\t\t: SpanStatusCode.OK,\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tspan.setStatus({ code: SpanStatusCode.UNSET });\n\t\t\t}\n\n\t\t\tif (\"metadata\" in event && event.metadata) {\n\t\t\t\tspan.setAttributes({ \"maestro.telemetry.has_metadata\": true });\n\t\t\t}\n\n\t\t\tspan.end();\n\t\t});\n\t} catch {\n\t\t// Never let tracing failures affect runtime\n\t}\n}\n\nasync function persistTelemetry(event: TelemetryEvent) {\n\tconst payload = JSON.stringify(event);\n\tconst tasks: Promise<void>[] = [];\n\n\tif (isCanonicalTurnTelemetryEvent(event)) {\n\t\ttasks.push(mirrorCanonicalTurnEventToMeter(event).then(() => undefined));\n\t}\n\n\tif (telemetryEndpointEnv) {\n\t\ttasks.push(postToEndpoint(payload));\n\t}\n\n\tif (telemetryEndpointEnv === undefined) {\n\t\t// Default to file storage when no endpoint is configured\n\t\ttasks.push(writeToFile(payload));\n\t} else if (telemetryFileEnv) {\n\t\ttasks.push(writeToFile(payload));\n\t}\n\n\tawait Promise.all(tasks);\n}\n\nfunction cloneBackgroundTaskTelemetry(\n\tevent: BackgroundTaskTelemetry,\n): BackgroundTaskTelemetry {\n\treturn {\n\t\t...event,\n\t\tresourceUsage: event.resourceUsage ? { ...event.resourceUsage } : undefined,\n\t\tlimitBreach: event.limitBreach ? { ...event.limitBreach } : undefined,\n\t};\n}\n\nfunction recordBackgroundHistory(event: BackgroundTaskTelemetry): void {\n\tbackgroundTaskHistory.push(cloneBackgroundTaskTelemetry(event));\n\tif (backgroundTaskHistory.length > BACKGROUND_TASK_HISTORY_LIMIT) {\n\t\tbackgroundTaskHistory.shift();\n\t}\n}\n\nexport function getBackgroundTaskHistory(\n\tlimit = 10,\n): BackgroundTaskTelemetry[] {\n\tif (limit <= 0) {\n\t\treturn [];\n\t}\n\treturn backgroundTaskHistory\n\t\t.slice(-limit)\n\t\t.map((entry) => cloneBackgroundTaskTelemetry(entry));\n}\n\nexport async function recordTelemetry(event: TelemetryEvent): Promise<void> {\n\tconst openTelemetryEnabled = isOpenTelemetryEnabled();\n\tif (openTelemetryEnabled) {\n\t\trecordOpenTelemetrySpan(event);\n\t}\n\tconst eventBusTask = mirrorTelemetryToMaestroEventBus(event);\n\n\tconst legacyEnabled = telemetryEnabled && samplingRate > 0;\n\tif (!legacyEnabled) {\n\t\tawait eventBusTask;\n\t\treturn;\n\t}\n\n\tif (samplingRate < 1 && Math.random() > samplingRate) {\n\t\tawait eventBusTask;\n\t\treturn;\n\t}\n\n\ttry {\n\t\tawait Promise.all([persistTelemetry(event), eventBusTask]);\n\t} catch (_error) {\n\t\t// Ignore telemetry persistence failures\n\t}\n}\n\nexport function recordToolExecution(\n\ttoolName: string,\n\tsuccess: boolean,\n\tdurationMs: number,\n\tmetadata?: Record<string, unknown>,\n): void {\n\tvoid recordTelemetry({\n\t\ttype: \"tool-execution\",\n\t\ttimestamp: new Date().toISOString(),\n\t\ttoolName,\n\t\tsuccess,\n\t\tdurationMs,\n\t\tmetadata,\n\t});\n}\n\nexport function recordEvaluationResult(\n\tscenario: string,\n\tsuccess: boolean,\n\tdetails?: Record<string, unknown>,\n): void {\n\tvoid recordTelemetry({\n\t\ttype: \"evaluation\",\n\t\ttimestamp: new Date().toISOString(),\n\t\tscenario,\n\t\tsuccess,\n\t\tdetails,\n\t});\n}\n\nexport function recordLoaderStage(\n\tstage: string,\n\tdurationMs: number,\n\tmetadata?: Record<string, unknown>,\n): void {\n\tvoid recordTelemetry({\n\t\ttype: \"loader-stage\",\n\t\ttimestamp: new Date().toISOString(),\n\t\tstage,\n\t\tdurationMs,\n\t\tmetadata,\n\t});\n}\n\nexport function recordSseSkip(\n\tsent: number,\n\tskipped: number,\n\tmetadata?: Record<string, unknown>,\n): void {\n\tvoid recordTelemetry({\n\t\ttype: \"sse\",\n\t\tevent: \"skip\",\n\t\ttimestamp: new Date().toISOString(),\n\t\tsent,\n\t\tskipped,\n\t\tmetadata,\n\t});\n}\n\nexport function logToolFailure(\n\ttoolName: string,\n\terrorMessage: string,\n\tmetadata?: Record<string, unknown>,\n): void {\n\tconst payload = {\n\t\ttool: toolName,\n\t\terror: errorMessage,\n\t\tmetadata,\n\t\ttimestamp: new Date().toISOString(),\n\t};\n\tvoid appendToolFailure(JSON.stringify(payload));\n}\n\nexport function recordBackgroundTaskEvent(\n\tevent: Omit<BackgroundTaskTelemetry, \"type\" | \"timestamp\">,\n): void {\n\tconst sanitizedCommand = sanitizeWithStaticMask(event.command);\n\tconst sanitizedFailure = sanitizeOptionalWithStaticMask(event.failureReason);\n\tconst payload: BackgroundTaskTelemetry = {\n\t\t...event,\n\t\tcommand: sanitizedCommand,\n\t\tfailureReason: sanitizedFailure,\n\t\ttype: \"background-task\",\n\t\ttimestamp: new Date().toISOString(),\n\t};\n\trecordBackgroundHistory(payload);\n\tvoid recordTelemetry(payload);\n}\n\nexport function recordApiRequest(\n\tmethod: string,\n\tpath: string,\n\tstatusCode: number,\n\tdurationMs: number,\n\tmetadata?: Record<string, unknown>,\n): void {\n\tvoid recordTelemetry({\n\t\ttype: \"api-request\",\n\t\ttimestamp: new Date().toISOString(),\n\t\tmethod,\n\t\tpath,\n\t\tstatusCode,\n\t\tdurationMs,\n\t\tmetadata,\n\t});\n}\n\n/**\n * Record a business metric for usage tracking.\n */\nexport function recordBusinessMetric(\n\tmetric: BusinessMetricTelemetry[\"metric\"],\n\tvalue: number,\n\tmetadata?: BusinessMetricTelemetry[\"metadata\"],\n): void {\n\tvoid recordTelemetry({\n\t\ttype: \"business-metric\",\n\t\ttimestamp: new Date().toISOString(),\n\t\tmetric,\n\t\tvalue,\n\t\tmetadata,\n\t});\n}\n\n/**\n * Record session start.\n */\nexport function recordSessionStart(\n\tsessionId: string,\n\tmetadata?: Omit<BusinessMetricTelemetry[\"metadata\"], \"sessionId\">,\n): void {\n\trecordBusinessMetric(\"session.count\", 1, { ...metadata, sessionId });\n}\n\n/**\n * Record session duration on end.\n */\nexport function recordSessionDuration(\n\tsessionId: string,\n\tdurationMs: number,\n\tmetadata?: Omit<BusinessMetricTelemetry[\"metadata\"], \"sessionId\">,\n): Promise<void> {\n\treturn recordTelemetry({\n\t\ttype: \"business-metric\",\n\t\ttimestamp: new Date().toISOString(),\n\t\tmetric: \"session.duration\",\n\t\tvalue: durationMs,\n\t\tmetadata: {\n\t\t\t...metadata,\n\t\t\tsessionId,\n\t\t},\n\t});\n}\n\n/**\n * Record token usage metrics.\n */\nexport function recordTokenUsage(\n\tsessionId: string,\n\ttokens: {\n\t\tinput?: number;\n\t\toutput?: number;\n\t\tcacheRead?: number;\n\t\tcacheWrite?: number;\n\t},\n\tmetadata?: Omit<BusinessMetricTelemetry[\"metadata\"], \"sessionId\">,\n): void {\n\tif (tokens.input !== undefined && tokens.input > 0) {\n\t\trecordBusinessMetric(\"tokens.input\", tokens.input, {\n\t\t\t...metadata,\n\t\t\tsessionId,\n\t\t});\n\t}\n\tif (tokens.output !== undefined && tokens.output > 0) {\n\t\trecordBusinessMetric(\"tokens.output\", tokens.output, {\n\t\t\t...metadata,\n\t\t\tsessionId,\n\t\t});\n\t}\n\tif (tokens.cacheRead !== undefined && tokens.cacheRead > 0) {\n\t\trecordBusinessMetric(\"tokens.cache_read\", tokens.cacheRead, {\n\t\t\t...metadata,\n\t\t\tsessionId,\n\t\t});\n\t}\n\tif (tokens.cacheWrite !== undefined && tokens.cacheWrite > 0) {\n\t\trecordBusinessMetric(\"tokens.cache_write\", tokens.cacheWrite, {\n\t\t\t...metadata,\n\t\t\tsessionId,\n\t\t});\n\t}\n}\n\n/**\n * Record cost in USD.\n */\nexport function recordCost(\n\tsessionId: string,\n\tcostUsd: number,\n\tmetadata?: Omit<BusinessMetricTelemetry[\"metadata\"], \"sessionId\">,\n): void {\n\trecordBusinessMetric(\"cost.usd\", costUsd, { ...metadata, sessionId });\n}\n\n/**\n * Record compaction event.\n */\nexport function recordCompaction(\n\tsessionId: string,\n\tmetadata?: Omit<BusinessMetricTelemetry[\"metadata\"], \"sessionId\">,\n): void {\n\trecordBusinessMetric(\"compaction.triggered\", 1, { ...metadata, sessionId });\n}\n\n/**\n * Record model switch.\n */\nexport function recordModelSwitch(\n\tsessionId: string,\n\tfromModel: string,\n\ttoModel: string,\n\tmetadata?: Omit<BusinessMetricTelemetry[\"metadata\"], \"sessionId\">,\n): void {\n\trecordBusinessMetric(\"model.switch\", 1, {\n\t\t...metadata,\n\t\tsessionId,\n\t\tmodel: toModel,\n\t\tpreviousModel: fromModel,\n\t});\n}\n\n/**\n * Record session migration stats.\n */\nexport function recordSessionMigration(stats: {\n\ttotal: number;\n\tmigrated: number;\n\tskipped: number;\n\tfailures: number;\n\tversion: number;\n}): void {\n\trecordBusinessMetric(\"session.migration\", stats.total, {\n\t\tmigrated: stats.migrated,\n\t\tskipped: stats.skipped,\n\t\tfailures: stats.failures,\n\t\tversion: stats.version,\n\t});\n}\n\n/**\n * Record a sandbox violation event.\n */\nexport function recordSandboxViolation(\n\tevent: SandboxViolationTelemetry[\"event\"],\n\ttool: string,\n\taction: string,\n\treason: string,\n\toptions?: {\n\t\tpath?: string;\n\t\tcommand?: string;\n\t\tsessionId?: string;\n\t\tmetadata?: Record<string, unknown>;\n\t},\n): void {\n\tvoid recordTelemetry({\n\t\ttype: \"sandbox-violation\",\n\t\ttimestamp: new Date().toISOString(),\n\t\tevent,\n\t\ttool,\n\t\taction,\n\t\treason,\n\t\tpath: options?.path,\n\t\tcommand: options?.command\n\t\t\t? sanitizeWithStaticMask(options.command)\n\t\t\t: undefined,\n\t\tmetadata: options?.metadata\n\t\t\t? { ...options.metadata, sessionId: options.sessionId }\n\t\t\t: options?.sessionId\n\t\t\t\t? { sessionId: options.sessionId }\n\t\t\t\t: undefined,\n\t});\n}\n\n// Initialize the wide-events telemetry recorder to break circular dependency\nsetDefaultTelemetryRecorder(recordTelemetry);\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function redactTimelineSecrets(value: string): string;
|
|
2
|
+
export declare function compactTimelineSummary(value: unknown): string | undefined;
|
|
3
|
+
export declare function compactTimelineMetadata(values: Record<string, unknown>): Record<string, unknown> | undefined;
|
|
4
|
+
export declare function redactTimelineMetadata(metadata: Record<string, unknown> | undefined): Record<string, unknown> | undefined;
|
|
5
|
+
//# sourceMappingURL=redaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redaction.d.ts","sourceRoot":"","sources":["../../src/timeline/redaction.ts"],"names":[],"mappings":"AA2DA,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAM3D;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAOzE;AAED,wBAAgB,uBAAuB,CACtC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAKrC;AA0CD,wBAAgB,sBAAsB,CACrC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC3C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAYrC"}
|