@codemieai/code 0.15.1 → 0.15.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +75 -0
- package/bin/codemie.js +52 -0
- package/dist/agents/core/AgentCLI.d.ts.map +1 -1
- package/dist/agents/core/AgentCLI.js +6 -0
- package/dist/agents/core/AgentCLI.js.map +1 -1
- package/dist/agents/core/BaseAgentAdapter.d.ts +25 -0
- package/dist/agents/core/BaseAgentAdapter.d.ts.map +1 -1
- package/dist/agents/core/BaseAgentAdapter.js +137 -127
- package/dist/agents/core/BaseAgentAdapter.js.map +1 -1
- package/dist/agents/core/session/BaseProcessor.d.ts +10 -0
- package/dist/agents/core/session/BaseProcessor.d.ts.map +1 -1
- package/dist/agents/core/session/BaseProcessor.js +11 -1
- package/dist/agents/core/session/BaseProcessor.js.map +1 -1
- package/dist/agents/core/session/BaseSessionAdapter.d.ts +4 -0
- package/dist/agents/core/session/BaseSessionAdapter.d.ts.map +1 -1
- package/dist/agents/core/types.d.ts +11 -5
- package/dist/agents/core/types.d.ts.map +1 -1
- package/dist/agents/plugins/claude/claude.models.d.ts.map +1 -1
- package/dist/agents/plugins/claude/claude.models.js +12 -11
- package/dist/agents/plugins/claude/claude.models.js.map +1 -1
- package/dist/agents/plugins/claude/claude.plugin.d.ts +3 -3
- package/dist/agents/plugins/claude/claude.plugin.d.ts.map +1 -1
- package/dist/agents/plugins/claude/claude.plugin.js +14 -13
- package/dist/agents/plugins/claude/claude.plugin.js.map +1 -1
- package/dist/agents/plugins/claude/claude.session.d.ts +17 -1
- package/dist/agents/plugins/claude/claude.session.d.ts.map +1 -1
- package/dist/agents/plugins/claude/claude.session.js +31 -1
- package/dist/agents/plugins/claude/claude.session.js.map +1 -1
- package/dist/agents/plugins/claude/plugin/.claude-plugin/plugin.json +1 -1
- package/dist/agents/plugins/claude/plugin/hooks/hooks.json +7 -7
- package/dist/agents/plugins/codex/codex.plugin.d.ts.map +1 -1
- package/dist/agents/plugins/codex/codex.plugin.js +7 -6
- package/dist/agents/plugins/codex/codex.plugin.js.map +1 -1
- package/dist/agents/plugins/copilot-cli/copilot-cli.plugin.d.ts.map +1 -1
- package/dist/agents/plugins/copilot-cli/copilot-cli.plugin.js +5 -2
- package/dist/agents/plugins/copilot-cli/copilot-cli.plugin.js.map +1 -1
- package/dist/agents/plugins/gemini/extension/gemini-extension.json +1 -1
- package/dist/agents/plugins/gemini/extension/hooks/hooks.json +7 -7
- package/dist/agents/plugins/gemini/gemini.plugin.d.ts.map +1 -1
- package/dist/agents/plugins/gemini/gemini.plugin.js +7 -6
- package/dist/agents/plugins/gemini/gemini.plugin.js.map +1 -1
- package/dist/agents/plugins/kimi/kimi.hook-config-injector.d.ts.map +1 -1
- package/dist/agents/plugins/kimi/kimi.hook-config-injector.js +26 -5
- package/dist/agents/plugins/kimi/kimi.hook-config-injector.js.map +1 -1
- package/dist/agents/plugins/kimi/kimi.plugin.d.ts.map +1 -1
- package/dist/agents/plugins/kimi/kimi.plugin.js +5 -2
- package/dist/agents/plugins/kimi/kimi.plugin.js.map +1 -1
- package/dist/agents/plugins/opencode/opencode-dynamic-models.d.ts.map +1 -1
- package/dist/agents/plugins/opencode/opencode-dynamic-models.js +3 -4
- package/dist/agents/plugins/opencode/opencode-dynamic-models.js.map +1 -1
- package/dist/agents/plugins/pi/pi.models.d.ts.map +1 -1
- package/dist/agents/plugins/pi/pi.models.js +3 -3
- package/dist/agents/plugins/pi/pi.models.js.map +1 -1
- package/dist/bin/proxy-daemon.js +8 -1
- package/dist/bin/proxy-daemon.js.map +1 -1
- package/dist/cli/commands/analytics/cost/claude-dispatch-allocation.d.ts +6 -0
- package/dist/cli/commands/analytics/cost/claude-dispatch-allocation.d.ts.map +1 -0
- package/dist/cli/commands/analytics/cost/claude-dispatch-allocation.js +115 -0
- package/dist/cli/commands/analytics/cost/claude-dispatch-allocation.js.map +1 -0
- package/dist/cli/commands/analytics/cost/claude-lifecycle.d.ts +6 -0
- package/dist/cli/commands/analytics/cost/claude-lifecycle.d.ts.map +1 -0
- package/dist/cli/commands/analytics/cost/claude-lifecycle.js +107 -0
- package/dist/cli/commands/analytics/cost/claude-lifecycle.js.map +1 -0
- package/dist/cli/commands/analytics/cost/claude-native.d.ts +54 -0
- package/dist/cli/commands/analytics/cost/claude-native.d.ts.map +1 -0
- package/dist/cli/commands/analytics/cost/claude-native.js +14 -0
- package/dist/cli/commands/analytics/cost/claude-native.js.map +1 -0
- package/dist/cli/commands/analytics/cost/claude-ownership.d.ts +23 -0
- package/dist/cli/commands/analytics/cost/claude-ownership.d.ts.map +1 -0
- package/dist/cli/commands/analytics/cost/claude-ownership.js +99 -0
- package/dist/cli/commands/analytics/cost/claude-ownership.js.map +1 -0
- package/dist/cli/commands/analytics/cost/claude-trace.d.ts +28 -0
- package/dist/cli/commands/analytics/cost/claude-trace.d.ts.map +1 -0
- package/dist/cli/commands/analytics/cost/claude-trace.js +120 -0
- package/dist/cli/commands/analytics/cost/claude-trace.js.map +1 -0
- package/dist/cli/commands/analytics/cost/cost-enricher.d.ts +1 -1
- package/dist/cli/commands/analytics/cost/cost-enricher.d.ts.map +1 -1
- package/dist/cli/commands/analytics/cost/cost-enricher.js +34 -43
- package/dist/cli/commands/analytics/cost/cost-enricher.js.map +1 -1
- package/dist/cli/commands/analytics/cost/dispatch-allocation.d.ts +18 -0
- package/dist/cli/commands/analytics/cost/dispatch-allocation.d.ts.map +1 -0
- package/dist/cli/commands/analytics/cost/dispatch-allocation.js +53 -0
- package/dist/cli/commands/analytics/cost/dispatch-allocation.js.map +1 -0
- package/dist/cli/commands/analytics/cost/dispatch-extractor.d.ts +8 -13
- package/dist/cli/commands/analytics/cost/dispatch-extractor.d.ts.map +1 -1
- package/dist/cli/commands/analytics/cost/dispatch-extractor.js +131 -69
- package/dist/cli/commands/analytics/cost/dispatch-extractor.js.map +1 -1
- package/dist/cli/commands/analytics/cost/types.d.ts +39 -0
- package/dist/cli/commands/analytics/cost/types.d.ts.map +1 -1
- package/dist/cli/commands/analytics/cost/types.js.map +1 -1
- package/dist/cli/commands/analytics/cost/usage-readers.d.ts +2 -0
- package/dist/cli/commands/analytics/cost/usage-readers.d.ts.map +1 -1
- package/dist/cli/commands/analytics/cost/usage-readers.js +14 -3
- package/dist/cli/commands/analytics/cost/usage-readers.js.map +1 -1
- package/dist/cli/commands/analytics/data-loader.d.ts +13 -0
- package/dist/cli/commands/analytics/data-loader.d.ts.map +1 -1
- package/dist/cli/commands/analytics/data-loader.js +6 -0
- package/dist/cli/commands/analytics/data-loader.js.map +1 -1
- package/dist/cli/commands/analytics/native-loader.d.ts +1 -1
- package/dist/cli/commands/analytics/native-loader.d.ts.map +1 -1
- package/dist/cli/commands/analytics/native-loader.js +25 -3
- package/dist/cli/commands/analytics/native-loader.js.map +1 -1
- package/dist/cli/commands/analytics/otel-loader.d.ts.map +1 -1
- package/dist/cli/commands/analytics/otel-loader.js +5 -0
- package/dist/cli/commands/analytics/otel-loader.js.map +1 -1
- package/dist/cli/commands/analytics/report/client/app.js +302 -125
- package/dist/cli/commands/analytics/report/payload-builder.d.ts.map +1 -1
- package/dist/cli/commands/analytics/report/payload-builder.js +64 -13
- package/dist/cli/commands/analytics/report/payload-builder.js.map +1 -1
- package/dist/cli/commands/analytics/report/template.html +50 -2
- package/dist/cli/commands/analytics/report/types.d.ts +16 -0
- package/dist/cli/commands/analytics/report/types.d.ts.map +1 -1
- package/dist/cli/commands/assistants/constants.d.ts +4 -0
- package/dist/cli/commands/assistants/constants.d.ts.map +1 -1
- package/dist/cli/commands/assistants/constants.js +4 -0
- package/dist/cli/commands/assistants/constants.js.map +1 -1
- package/dist/cli/commands/assistants/setup/data.d.ts +1 -0
- package/dist/cli/commands/assistants/setup/data.d.ts.map +1 -1
- package/dist/cli/commands/assistants/setup/data.js +55 -10
- package/dist/cli/commands/assistants/setup/data.js.map +1 -1
- package/dist/cli/commands/assistants/setup/helpers.d.ts +1 -1
- package/dist/cli/commands/assistants/setup/helpers.d.ts.map +1 -1
- package/dist/cli/commands/assistants/setup/helpers.js +2 -5
- package/dist/cli/commands/assistants/setup/helpers.js.map +1 -1
- package/dist/cli/commands/assistants/setup/index.d.ts +12 -0
- package/dist/cli/commands/assistants/setup/index.d.ts.map +1 -1
- package/dist/cli/commands/assistants/setup/index.js +148 -20
- package/dist/cli/commands/assistants/setup/index.js.map +1 -1
- package/dist/cli/commands/doctor/checks/AgentsCheck.d.ts +6 -0
- package/dist/cli/commands/doctor/checks/AgentsCheck.d.ts.map +1 -1
- package/dist/cli/commands/doctor/checks/AgentsCheck.js +37 -33
- package/dist/cli/commands/doctor/checks/AgentsCheck.js.map +1 -1
- package/dist/cli/commands/doctor/index.d.ts.map +1 -1
- package/dist/cli/commands/doctor/index.js +11 -0
- package/dist/cli/commands/doctor/index.js.map +1 -1
- package/dist/cli/commands/hook.d.ts.map +1 -1
- package/dist/cli/commands/hook.js +72 -12
- package/dist/cli/commands/hook.js.map +1 -1
- package/dist/cli/commands/install.d.ts.map +1 -1
- package/dist/cli/commands/install.js +5 -9
- package/dist/cli/commands/install.js.map +1 -1
- package/dist/cli/commands/mcp/index.d.ts.map +1 -1
- package/dist/cli/commands/mcp/index.js +68 -17
- package/dist/cli/commands/mcp/index.js.map +1 -1
- package/dist/cli/commands/profile/display.d.ts +5 -1
- package/dist/cli/commands/profile/display.d.ts.map +1 -1
- package/dist/cli/commands/profile/display.js +5 -1
- package/dist/cli/commands/profile/display.js.map +1 -1
- package/dist/cli/commands/profile/index.d.ts.map +1 -1
- package/dist/cli/commands/profile/index.js +7 -4
- package/dist/cli/commands/profile/index.js.map +1 -1
- package/dist/cli/commands/proxy/connect-orchestrator.d.ts.map +1 -1
- package/dist/cli/commands/proxy/connect-orchestrator.js +3 -4
- package/dist/cli/commands/proxy/connect-orchestrator.js.map +1 -1
- package/dist/cli/commands/proxy/connectors/desktop.d.ts +15 -12
- package/dist/cli/commands/proxy/connectors/desktop.d.ts.map +1 -1
- package/dist/cli/commands/proxy/connectors/desktop.js +36 -38
- package/dist/cli/commands/proxy/connectors/desktop.js.map +1 -1
- package/dist/cli/commands/proxy/connectors/model-name-resolver.d.ts +19 -0
- package/dist/cli/commands/proxy/connectors/model-name-resolver.d.ts.map +1 -0
- package/dist/cli/commands/proxy/connectors/model-name-resolver.js +126 -0
- package/dist/cli/commands/proxy/connectors/model-name-resolver.js.map +1 -0
- package/dist/cli/commands/proxy/connectors/tenant-catalog.d.ts +11 -0
- package/dist/cli/commands/proxy/connectors/tenant-catalog.d.ts.map +1 -0
- package/dist/cli/commands/proxy/connectors/tenant-catalog.js +108 -0
- package/dist/cli/commands/proxy/connectors/tenant-catalog.js.map +1 -0
- package/dist/cli/commands/proxy/connectors/vscode-claude-code.d.ts.map +1 -1
- package/dist/cli/commands/proxy/connectors/vscode-claude-code.js +49 -19
- package/dist/cli/commands/proxy/connectors/vscode-claude-code.js.map +1 -1
- package/dist/cli/commands/proxy/connectors/vscode-models.d.ts +3 -3
- package/dist/cli/commands/proxy/connectors/vscode-models.d.ts.map +1 -1
- package/dist/cli/commands/proxy/connectors/vscode-models.js +28 -28
- package/dist/cli/commands/proxy/connectors/vscode-models.js.map +1 -1
- package/dist/cli/commands/proxy/connectors/vscode.d.ts +3 -2
- package/dist/cli/commands/proxy/connectors/vscode.d.ts.map +1 -1
- package/dist/cli/commands/proxy/connectors/vscode.js +78 -39
- package/dist/cli/commands/proxy/connectors/vscode.js.map +1 -1
- package/dist/cli/commands/setup.d.ts.map +1 -1
- package/dist/cli/commands/setup.js +72 -24
- package/dist/cli/commands/setup.js.map +1 -1
- package/dist/cli/commands/shared/headless.d.ts +69 -0
- package/dist/cli/commands/shared/headless.d.ts.map +1 -0
- package/dist/cli/commands/shared/headless.js +83 -0
- package/dist/cli/commands/shared/headless.js.map +1 -0
- package/dist/cli/commands/shared/helpers.d.ts +21 -0
- package/dist/cli/commands/shared/helpers.d.ts.map +1 -1
- package/dist/cli/commands/shared/helpers.js +73 -1
- package/dist/cli/commands/shared/helpers.js.map +1 -1
- package/dist/cli/commands/shared/identifier-resolution.d.ts +23 -0
- package/dist/cli/commands/shared/identifier-resolution.d.ts.map +1 -0
- package/dist/cli/commands/shared/identifier-resolution.js +55 -0
- package/dist/cli/commands/shared/identifier-resolution.js.map +1 -0
- package/dist/cli/commands/skills/setup/data.d.ts +3 -2
- package/dist/cli/commands/skills/setup/data.d.ts.map +1 -1
- package/dist/cli/commands/skills/setup/data.js +75 -13
- package/dist/cli/commands/skills/setup/data.js.map +1 -1
- package/dist/cli/commands/skills/setup/helpers.d.ts +1 -1
- package/dist/cli/commands/skills/setup/helpers.d.ts.map +1 -1
- package/dist/cli/commands/skills/setup/helpers.js +2 -5
- package/dist/cli/commands/skills/setup/helpers.js.map +1 -1
- package/dist/cli/commands/skills/setup/index.d.ts +17 -1
- package/dist/cli/commands/skills/setup/index.d.ts.map +1 -1
- package/dist/cli/commands/skills/setup/index.js +190 -19
- package/dist/cli/commands/skills/setup/index.js.map +1 -1
- package/dist/cli/commands/tips.d.ts +10 -0
- package/dist/cli/commands/tips.d.ts.map +1 -0
- package/dist/cli/commands/tips.js +142 -0
- package/dist/cli/commands/tips.js.map +1 -0
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +12 -10
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/commands/whatsnew.d.ts +6 -0
- package/dist/cli/commands/whatsnew.d.ts.map +1 -0
- package/dist/cli/commands/whatsnew.js +37 -0
- package/dist/cli/commands/whatsnew.js.map +1 -0
- package/dist/cli/first-time.d.ts.map +1 -1
- package/dist/cli/first-time.js +4 -0
- package/dist/cli/first-time.js.map +1 -1
- package/dist/cli/index.js +4 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/providers/core/types.d.ts +15 -0
- package/dist/providers/core/types.d.ts.map +1 -1
- package/dist/providers/core/types.js.map +1 -1
- package/dist/providers/integration/setup-ui.d.ts +5 -3
- package/dist/providers/integration/setup-ui.d.ts.map +1 -1
- package/dist/providers/integration/setup-ui.js +6 -4
- package/dist/providers/integration/setup-ui.js.map +1 -1
- package/dist/providers/plugins/ollama/ollama.library.d.ts +37 -0
- package/dist/providers/plugins/ollama/ollama.library.d.ts.map +1 -0
- package/dist/providers/plugins/ollama/ollama.library.js +105 -0
- package/dist/providers/plugins/ollama/ollama.library.js.map +1 -0
- package/dist/providers/plugins/ollama/ollama.models.d.ts +3 -1
- package/dist/providers/plugins/ollama/ollama.models.d.ts.map +1 -1
- package/dist/providers/plugins/ollama/ollama.models.js +5 -39
- package/dist/providers/plugins/ollama/ollama.models.js.map +1 -1
- package/dist/providers/plugins/ollama/ollama.setup-steps.d.ts.map +1 -1
- package/dist/providers/plugins/ollama/ollama.setup-steps.js +196 -6
- package/dist/providers/plugins/ollama/ollama.setup-steps.js.map +1 -1
- package/dist/providers/plugins/ollama/ollama.template.d.ts.map +1 -1
- package/dist/providers/plugins/ollama/ollama.template.js +12 -32
- package/dist/providers/plugins/ollama/ollama.template.js.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/claude-model-resolver.d.ts +41 -0
- package/dist/providers/plugins/sso/proxy/plugins/claude-model-resolver.d.ts.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/claude-model-resolver.js +115 -0
- package/dist/providers/plugins/sso/proxy/plugins/claude-model-resolver.js.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/claude-request-normalizer.plugin.d.ts.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/claude-request-normalizer.plugin.js +101 -7
- package/dist/providers/plugins/sso/proxy/plugins/claude-request-normalizer.plugin.js.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/header-injection.plugin.d.ts +4 -0
- package/dist/providers/plugins/sso/proxy/plugins/header-injection.plugin.d.ts.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/header-injection.plugin.js +28 -3
- package/dist/providers/plugins/sso/proxy/plugins/header-injection.plugin.js.map +1 -1
- package/dist/providers/plugins/sso/proxy/proxy-types.d.ts +5 -0
- package/dist/providers/plugins/sso/proxy/proxy-types.d.ts.map +1 -1
- package/dist/providers/plugins/sso/proxy/sso.proxy.d.ts.map +1 -1
- package/dist/providers/plugins/sso/proxy/sso.proxy.js +1 -0
- package/dist/providers/plugins/sso/proxy/sso.proxy.js.map +1 -1
- package/dist/providers/plugins/sso/session/BaseProcessor.d.ts +4 -0
- package/dist/providers/plugins/sso/session/BaseProcessor.d.ts.map +1 -1
- package/dist/providers/plugins/sso/session/SessionSyncer.d.ts +12 -0
- package/dist/providers/plugins/sso/session/SessionSyncer.d.ts.map +1 -1
- package/dist/providers/plugins/sso/session/SessionSyncer.js +89 -0
- package/dist/providers/plugins/sso/session/SessionSyncer.js.map +1 -1
- package/dist/providers/plugins/sso/session/processors/conversations/syncProcessor.d.ts.map +1 -1
- package/dist/providers/plugins/sso/session/processors/conversations/syncProcessor.js +75 -41
- package/dist/providers/plugins/sso/session/processors/conversations/syncProcessor.js.map +1 -1
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-aggregator.d.ts.map +1 -1
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-aggregator.js +11 -2
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-aggregator.js.map +1 -1
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-sync-processor.d.ts.map +1 -1
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-sync-processor.js +25 -5
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-sync-processor.js.map +1 -1
- package/dist/telemetry/clients/claude-desktop/claude-desktop.discovery.d.ts +1 -0
- package/dist/telemetry/clients/claude-desktop/claude-desktop.discovery.d.ts.map +1 -1
- package/dist/telemetry/clients/claude-desktop/claude-desktop.discovery.js +30 -6
- package/dist/telemetry/clients/claude-desktop/claude-desktop.discovery.js.map +1 -1
- package/dist/telemetry/clients/claude-desktop/claude-desktop.parser.d.ts.map +1 -1
- package/dist/telemetry/clients/claude-desktop/claude-desktop.parser.js +33 -3
- package/dist/telemetry/clients/claude-desktop/claude-desktop.parser.js.map +1 -1
- package/dist/telemetry/runtime/DesktopRepositoryResolver.d.ts +58 -0
- package/dist/telemetry/runtime/DesktopRepositoryResolver.d.ts.map +1 -0
- package/dist/telemetry/runtime/DesktopRepositoryResolver.js +370 -0
- package/dist/telemetry/runtime/DesktopRepositoryResolver.js.map +1 -0
- package/dist/telemetry/runtime/DesktopTelemetryRuntime.d.ts +1 -0
- package/dist/telemetry/runtime/DesktopTelemetryRuntime.d.ts.map +1 -1
- package/dist/telemetry/runtime/DesktopTelemetryRuntime.js +89 -6
- package/dist/telemetry/runtime/DesktopTelemetryRuntime.js.map +1 -1
- package/dist/telemetry/runtime/types.d.ts +2 -0
- package/dist/telemetry/runtime/types.d.ts.map +1 -1
- package/dist/utils/auth.d.ts +13 -2
- package/dist/utils/auth.d.ts.map +1 -1
- package/dist/utils/auth.js +7 -3
- package/dist/utils/auth.js.map +1 -1
- package/dist/utils/cli-updater.d.ts.map +1 -1
- package/dist/utils/cli-updater.js +2 -8
- package/dist/utils/cli-updater.js.map +1 -1
- package/dist/utils/config.d.ts +21 -0
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +69 -7
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/env.d.ts +12 -0
- package/dist/utils/env.d.ts.map +1 -0
- package/dist/utils/env.js +18 -0
- package/dist/utils/env.js.map +1 -0
- package/dist/utils/errors.d.ts +14 -0
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +25 -0
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/hook-command.d.ts +6 -0
- package/dist/utils/hook-command.d.ts.map +1 -1
- package/dist/utils/hook-command.js +40 -1
- package/dist/utils/hook-command.js.map +1 -1
- package/dist/utils/paths.d.ts +2 -2
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +11 -9
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/pricing.json +14 -6
- package/dist/utils/processes.d.ts +12 -0
- package/dist/utils/processes.d.ts.map +1 -1
- package/dist/utils/processes.js +15 -0
- package/dist/utils/processes.js.map +1 -1
- package/dist/utils/tips.d.ts +103 -0
- package/dist/utils/tips.d.ts.map +1 -0
- package/dist/utils/tips.js +221 -0
- package/dist/utils/tips.js.map +1 -0
- package/dist/utils/version-warnings.d.ts +41 -0
- package/dist/utils/version-warnings.d.ts.map +1 -0
- package/dist/utils/version-warnings.js +93 -0
- package/dist/utils/version-warnings.js.map +1 -0
- package/dist/utils/whatsnew.d.ts +83 -0
- package/dist/utils/whatsnew.d.ts.map +1 -0
- package/dist/utils/whatsnew.js +200 -0
- package/dist/utils/whatsnew.js.map +1 -0
- package/package.json +4 -1
- package/scripts/release.sh +6 -0
- package/src/utils/tips.json +806 -0
|
@@ -40,6 +40,12 @@
|
|
|
40
40
|
if (n < 100) return '$' + n.toFixed(2);
|
|
41
41
|
return '$' + Math.round(n).toLocaleString('en-US');
|
|
42
42
|
}
|
|
43
|
+
function fmtExactUSD(n) {
|
|
44
|
+
return Number.isFinite(n) ? '$' + n.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 8 }) : '—';
|
|
45
|
+
}
|
|
46
|
+
function costSourceLabel(s) {
|
|
47
|
+
return s.costSource === 'authoritative' ? 'reported by source' : s.costSource === 'native-estimate' ? 'API-equivalent estimate' : 'source not recorded';
|
|
48
|
+
}
|
|
43
49
|
function fmtDuration(ms) {
|
|
44
50
|
var h = ms / 3600000;
|
|
45
51
|
if (h >= 48) return Math.round(h / 24) + 'd';
|
|
@@ -798,7 +804,12 @@
|
|
|
798
804
|
|
|
799
805
|
VIEWS.cost = function (host, fs) {
|
|
800
806
|
host.appendChild(el('h2', 'view-title', 'Cost'));
|
|
801
|
-
|
|
807
|
+
var allEstimated = fs.length && fs.every(function (s) { return s.costSource === 'native-estimate'; });
|
|
808
|
+
var allReported = fs.length && fs.every(function (s) { return s.costSource === 'authoritative'; });
|
|
809
|
+
var costDescription = allEstimated ? 'API-equivalent estimates from token usage and standard model rates.'
|
|
810
|
+
: allReported ? 'Cost amounts reported by the telemetry source.'
|
|
811
|
+
: 'Available session costs, including API-equivalent estimates and source-reported amounts. Each session identifies its cost source when recorded.';
|
|
812
|
+
host.appendChild(el('p', 'view-sub', esc(costDescription)));
|
|
802
813
|
|
|
803
814
|
var total = sum(fs, function (s) { return s.costUSD; });
|
|
804
815
|
var priced = DATA.meta.totals.pricedSessions, totalSessions = DATA.meta.totals.sessions;
|
|
@@ -920,6 +931,7 @@
|
|
|
920
931
|
// ---- session-detail modal ----------------------------------------------
|
|
921
932
|
var modalCharts = []; // owned by the modal; NOT in the global charts[] (decoupled from destroyCharts()).
|
|
922
933
|
var modalEsc = null;
|
|
934
|
+
var modalReturnFocus = null;
|
|
923
935
|
function makeModalChart(canvas, config) {
|
|
924
936
|
if (!window.Chart) return null;
|
|
925
937
|
var c = new Chart(canvas, config);
|
|
@@ -931,6 +943,8 @@
|
|
|
931
943
|
modalCharts = [];
|
|
932
944
|
if (modalEsc) { document.removeEventListener('keydown', modalEsc); modalEsc = null; }
|
|
933
945
|
var ov = document.getElementById('session-modal'); if (ov && ov.parentNode) ov.parentNode.removeChild(ov);
|
|
946
|
+
if (modalReturnFocus && modalReturnFocus.isConnected && typeof modalReturnFocus.focus === 'function') modalReturnFocus.focus();
|
|
947
|
+
modalReturnFocus = null;
|
|
934
948
|
}
|
|
935
949
|
var MODAL_MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
|
|
936
950
|
function fmtWhen(ms) { var d = new Date(ms); return MODAL_MONTHS[d.getMonth()] + ' ' + d.getDate() + ', ' + String(d.getHours()).padStart(2, '0') + ':' + String(d.getMinutes()).padStart(2, '0'); }
|
|
@@ -952,17 +966,16 @@
|
|
|
952
966
|
// source) so counts/chips stay consistent with it; falls back to the tracked named-invocation
|
|
953
967
|
// counts when this session has no dispatch data (e.g. older/tracked-only sessions).
|
|
954
968
|
function dispatchCounts(s, kind) {
|
|
969
|
+
var fallback = kind === 'agent' ? (s.agentInvocations || []) : kind === 'skill' ? (s.skillInvocations || []) : (s.commandInvocations || []);
|
|
970
|
+
if (!s.dispatchesComplete && fallback.length) return fallback;
|
|
955
971
|
var disp = (s.dispatches || []).filter(function (d) { return d.kind === kind; });
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
return Object.keys(m).map(function (n) { return { name: n, totalCalls: m[n] }; });
|
|
960
|
-
}
|
|
961
|
-
return kind === 'agent' ? (s.agentInvocations || []) : kind === 'skill' ? (s.skillInvocations || []) : (s.commandInvocations || []);
|
|
972
|
+
var counts = new Map();
|
|
973
|
+
disp.forEach(function (d) { counts.set(d.name, (counts.get(d.name) || 0) + 1); });
|
|
974
|
+
return Array.from(counts, function (entry) { return { name: entry[0], totalCalls: entry[1] }; });
|
|
962
975
|
}
|
|
963
976
|
function chipsEl(title, list) { // list: NamedInvocationStats[]
|
|
964
977
|
var sec = el('div', 'dispatch-col');
|
|
965
|
-
sec.appendChild(el('h4', null, esc(title) + ' (' + (list
|
|
978
|
+
sec.appendChild(el('h4', null, esc(title) + ' (' + fmtNum(sumCalls(list)) + ')'));
|
|
966
979
|
if (!list || !list.length) { sec.appendChild(el('div', 'text-muted', '<span style="font-size:12px">none</span>')); return sec; }
|
|
967
980
|
var wrap = el('div', 'modal-chips');
|
|
968
981
|
list.slice().sort(function (a, b) { return b.totalCalls - a.totalCalls; }).forEach(function (n) {
|
|
@@ -972,18 +985,21 @@
|
|
|
972
985
|
}
|
|
973
986
|
// One timeline row: label + track with a positioned bar + a right-aligned duration. All text esc()'d.
|
|
974
987
|
function tlRow(label, color, leftPct, wPct, durText, barText, strong) {
|
|
975
|
-
var row = el('div', 'tl-row');
|
|
976
|
-
|
|
977
|
-
var
|
|
978
|
-
|
|
979
|
-
|
|
988
|
+
var row = el(strong ? 'div' : 'button', 'tl-row');
|
|
989
|
+
if (!strong) row.type = 'button';
|
|
990
|
+
var labelEl = el('span', 'tl-label' + (strong ? ' tl-label-strong' : ''), esc(label));
|
|
991
|
+
labelEl.title = label;
|
|
992
|
+
row.appendChild(labelEl);
|
|
993
|
+
var track = el('span', 'tl-track');
|
|
994
|
+
var bar = el('span', 'tl-bar');
|
|
995
|
+
bar.style.left = 'calc(min(' + leftPct + '%, 100% - 4px))'; bar.style.width = wPct + '%'; bar.style.background = color;
|
|
980
996
|
if (barText) {
|
|
981
997
|
bar.classList.add('tl-bar-has-text');
|
|
982
998
|
bar.innerHTML = '<span class="tl-bar-text">' + esc(barText) + '</span>';
|
|
983
999
|
}
|
|
984
1000
|
bar.title = label + ' · ' + durText; // .title property = safe (not parsed as HTML)
|
|
985
1001
|
track.appendChild(bar); row.appendChild(track);
|
|
986
|
-
row.appendChild(el('
|
|
1002
|
+
row.appendChild(el('span', 'tl-dur', esc(durText)));
|
|
987
1003
|
return row;
|
|
988
1004
|
}
|
|
989
1005
|
// Precise wall-clock timing for short timeline steps. The general report formatter rounds
|
|
@@ -992,135 +1008,264 @@
|
|
|
992
1008
|
ms = Math.max(0, ms || 0);
|
|
993
1009
|
if (ms < 1000) return Math.round(ms) + 'ms';
|
|
994
1010
|
if (ms < 60000) return (Math.round(ms / 100) / 10) + 's';
|
|
995
|
-
|
|
996
|
-
return Math.floor(
|
|
1011
|
+
var seconds = Math.round(ms / 1000);
|
|
1012
|
+
if (seconds < 3600) return Math.floor(seconds / 60) + 'm ' + seconds % 60 + 's';
|
|
1013
|
+
return Math.floor(seconds / 3600) + 'h ' + Math.floor(seconds % 3600 / 60) + 'm ' + seconds % 60 + 's';
|
|
1014
|
+
}
|
|
1015
|
+
function traceElapsed(d) {
|
|
1016
|
+
if (Number.isFinite(d.elapsedMs)) return Math.max(0, d.elapsedMs);
|
|
1017
|
+
if (Number.isFinite(d.completedAt) && Number.isFinite(d.start)) return Math.max(0, d.completedAt - d.start);
|
|
1018
|
+
if (Number.isFinite(d.observedEnd) && Number.isFinite(d.start)) return Math.max(0, d.observedEnd - d.start);
|
|
1019
|
+
// An asynchronous acknowledgement is not a completion time.
|
|
1020
|
+
if (d.status === 'incomplete' || d.status === 'unknown') return 0;
|
|
1021
|
+
return Math.max(0, Number.isFinite(d.durationMs) ? d.durationMs : 0);
|
|
1022
|
+
}
|
|
1023
|
+
function traceStatus(d) {
|
|
1024
|
+
return { completed: 'Completed', failed: 'Failed', incomplete: 'Incomplete', unknown: 'Unknown' }[d.status] || 'Not recorded';
|
|
997
1025
|
}
|
|
998
|
-
|
|
999
|
-
|
|
1026
|
+
function exactWhen(ms) {
|
|
1027
|
+
var date = new Date(ms);
|
|
1028
|
+
return Number.isFinite(ms) && Number.isFinite(date.getTime()) ? date.toISOString().replace('T', ' ').replace('Z', ' UTC') : 'Not recorded';
|
|
1029
|
+
}
|
|
1030
|
+
function traceEntries(s) {
|
|
1031
|
+
var byId = new Map(), byAgent = new Map(), duplicateIds = new Set(), duplicateAgents = new Set();
|
|
1032
|
+
var counts = new Map(), occurrences = new Map();
|
|
1033
|
+
var entries = (s.dispatches || []).map(function (d, i) {
|
|
1034
|
+
var entry = { d: d, key: d.id != null ? String(d.id) : 'legacy:' + i, parent: null, children: [], level: 0, issue: '' };
|
|
1035
|
+
if (d.id != null) {
|
|
1036
|
+
if (byId.has(String(d.id))) { duplicateIds.add(String(d.id)); entry.key += ':duplicate:' + i; }
|
|
1037
|
+
else byId.set(String(d.id), entry);
|
|
1038
|
+
}
|
|
1039
|
+
if (d.kind === 'agent' && d.agentId) {
|
|
1040
|
+
if (byAgent.has(d.agentId)) duplicateAgents.add(d.agentId);
|
|
1041
|
+
else byAgent.set(d.agentId, entry);
|
|
1042
|
+
}
|
|
1043
|
+
var nameKey = d.kind + ':' + d.name;
|
|
1044
|
+
counts.set(nameKey, (counts.get(nameKey) || 0) + 1);
|
|
1045
|
+
return entry;
|
|
1046
|
+
}).sort(function (a, b) { return (a.d.start || 0) - (b.d.start || 0); });
|
|
1047
|
+
entries.forEach(function (entry) {
|
|
1048
|
+
var d = entry.d, nameKey = d.kind + ':' + d.name;
|
|
1049
|
+
occurrences.set(nameKey, (occurrences.get(nameKey) || 0) + 1);
|
|
1050
|
+
entry.label = d.kind + ' · ' + d.name + (counts.get(nameKey) > 1 ? ' #' + occurrences.get(nameKey) : '');
|
|
1051
|
+
if (duplicateIds.has(String(d.id))) entry.issue = 'Repeated invocation ID';
|
|
1052
|
+
else if (d.relationshipStatus === 'cycle') entry.issue = 'Ancestry cycle';
|
|
1053
|
+
else if (d.relationshipStatus === 'conflict') entry.issue = 'Conflicting parent evidence';
|
|
1054
|
+
else if (d.relationshipStatus === 'missing') entry.issue = 'Parent not resolved';
|
|
1055
|
+
if (entry.issue) return;
|
|
1056
|
+
if (d.parentId != null) {
|
|
1057
|
+
entry.parent = !duplicateIds.has(String(d.parentId)) && byId.get(String(d.parentId)) || null;
|
|
1058
|
+
if (!entry.parent) entry.issue = 'Parent not found';
|
|
1059
|
+
} else if (d.ownerAgentId && d.ownerAgentId !== s.sessionId && d.ownerAgentId !== 'root') {
|
|
1060
|
+
entry.parent = !duplicateAgents.has(d.ownerAgentId) && byAgent.get(d.ownerAgentId) || null;
|
|
1061
|
+
if (!entry.parent) entry.issue = 'Owner not found';
|
|
1062
|
+
} else if (d.depth > 1) entry.issue = 'Parent not recorded';
|
|
1063
|
+
});
|
|
1064
|
+
entries.forEach(function (entry) {
|
|
1065
|
+
var path = [], positions = new Map(), current = entry;
|
|
1066
|
+
while (current) {
|
|
1067
|
+
if (positions.has(current)) {
|
|
1068
|
+
path.slice(positions.get(current)).forEach(function (cyclic) { cyclic.issue = 'Ancestry cycle'; cyclic.parent = null; });
|
|
1069
|
+
break;
|
|
1070
|
+
}
|
|
1071
|
+
positions.set(current, path.length); path.push(current); current = current.parent;
|
|
1072
|
+
}
|
|
1073
|
+
});
|
|
1074
|
+
entries.forEach(function (entry) { if (entry.parent) entry.parent.children.push(entry); });
|
|
1075
|
+
var ordered = [], visited = new Set();
|
|
1076
|
+
function appendTree(rootEntry, unresolved) {
|
|
1077
|
+
var pending = [{ entry: rootEntry, level: 0 }];
|
|
1078
|
+
while (pending.length) {
|
|
1079
|
+
var next = pending.pop(), entry = next.entry;
|
|
1080
|
+
if (visited.has(entry)) continue;
|
|
1081
|
+
visited.add(entry); entry.level = next.level; entry.unresolved = unresolved; ordered.push(entry);
|
|
1082
|
+
for (var i = entry.children.length - 1; i >= 0; i--) pending.push({ entry: entry.children[i], level: next.level + 1 });
|
|
1083
|
+
}
|
|
1084
|
+
}
|
|
1085
|
+
entries.filter(function (entry) { return !entry.parent && !entry.issue; }).forEach(function (entry) { appendTree(entry, false); });
|
|
1086
|
+
entries.filter(function (entry) { return !entry.parent && entry.issue; }).forEach(function (entry) { appendTree(entry, true); });
|
|
1087
|
+
entries.forEach(function (entry) { if (!visited.has(entry)) appendTree(entry, true); });
|
|
1088
|
+
return ordered;
|
|
1089
|
+
}
|
|
1090
|
+
// Every link selects an invocation entry, never a potentially repeated display name.
|
|
1091
|
+
function tlDetailEl(entry, s, sessionStart, select) {
|
|
1000
1092
|
var panel = el('div', '');
|
|
1001
|
-
if (!
|
|
1002
|
-
panel.appendChild(el('div', 'tl-side-empty', '
|
|
1093
|
+
if (!entry) {
|
|
1094
|
+
panel.appendChild(el('div', 'tl-side-empty', 'Select a timeline step to see details.'));
|
|
1003
1095
|
return panel;
|
|
1004
1096
|
}
|
|
1097
|
+
var d = entry.d;
|
|
1005
1098
|
var color = PALETTE[hashStr(d.kind + ':' + d.name) % PALETTE.length];
|
|
1006
1099
|
var nameEl = el('div', 'tl-side-name');
|
|
1007
1100
|
var dot = el('span', 'tl-side-dot'); dot.style.background = color;
|
|
1008
|
-
nameEl.appendChild(dot);
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1101
|
+
nameEl.appendChild(dot); nameEl.appendChild(document.createTextNode(entry.label)); panel.appendChild(nameEl);
|
|
1102
|
+
var statusLine = el('div', 'tl-status', esc(traceStatus(d)));
|
|
1103
|
+
if (entry.issue) statusLine.appendChild(document.createTextNode(' · ' + entry.issue));
|
|
1104
|
+
panel.appendChild(statusLine);
|
|
1105
|
+
if (Number.isFinite(d.depth)) panel.appendChild(el('p', 'tl-note', 'Recorded nesting level: ' + esc(d.depth) + '.'));
|
|
1106
|
+
if (d.id != null) {
|
|
1107
|
+
var identity = el('div', 'tl-identity');
|
|
1108
|
+
identity.appendChild(el('span', 'modal-mono', esc(d.id)));
|
|
1109
|
+
identity.appendChild(copyButton(function () { return String(d.id); }, 'Copy step ID'));
|
|
1110
|
+
panel.appendChild(identity);
|
|
1111
|
+
}
|
|
1112
|
+
if (entry.parent) {
|
|
1113
|
+
var parentButton = el('button', 'tl-link', '↑ Parent: ' + esc(entry.parent.label)); parentButton.type = 'button';
|
|
1114
|
+
parentButton.addEventListener('click', function () { select(entry.parent, true); }); panel.appendChild(parentButton);
|
|
1115
|
+
} else if (entry.issue) panel.appendChild(el('p', 'tl-note tl-warning', 'This step remains separate because its parent relationship is unresolved.'));
|
|
1116
|
+
else if (d.ownerAgentId === s.sessionId || d.ownerAgentId === 'root' || d.relationshipStatus === 'root') panel.appendChild(el('p', 'tl-note', 'Owned by the session root.'));
|
|
1117
|
+
else if (d.relationshipStatus == null) panel.appendChild(el('p', 'tl-note', 'Parent relationship was not recorded.'));
|
|
1118
|
+
var estimated = d.attributionStatus === 'estimated';
|
|
1119
|
+
var hasOwn = d.attributionScope === 'own' || d.inclusiveTokens != null;
|
|
1120
|
+
var hasInclusive = d.inclusiveTokens != null || d.inclusiveCostUSD != null;
|
|
1121
|
+
var hasDescendants = hasInclusive && entry.children.length > 0;
|
|
1122
|
+
var totalCost = d.inclusiveCostUSD != null ? d.inclusiveCostUSD : d.costUSD;
|
|
1123
|
+
var totalTokens = d.inclusiveTokens || d.tokens;
|
|
1124
|
+
var incomplete = d.status === 'incomplete' || d.status === 'unknown';
|
|
1014
1125
|
panel.appendChild(statsEl([
|
|
1015
|
-
['Cost',
|
|
1016
|
-
['Tokens',
|
|
1017
|
-
['
|
|
1018
|
-
['Started',
|
|
1126
|
+
[estimated ? 'Estimated cost' : hasInclusive ? 'Total cost' : 'Cost', totalCost != null ? fmtExactUSD(totalCost) : '—', costSourceLabel(s)],
|
|
1127
|
+
[estimated ? 'Estimated tokens' : hasInclusive ? 'Total tokens' : 'Tokens', totalTokens ? fmtNum(totalTokens.total) : '—', ''],
|
|
1128
|
+
[incomplete ? 'Observed elapsed' : 'Elapsed', d.status === 'unknown' && !d.observedEnd ? 'Unknown' : fmtTimelineDuration(traceElapsed(d)), d.status === 'unknown' && !d.observedEnd ? '' : fmtNum(traceElapsed(d)) + ' ms'],
|
|
1129
|
+
['Started', Number.isFinite(d.start) ? fmtTimelineDuration(Math.max(0, d.start - sessionStart)) : '—', 'into session']
|
|
1019
1130
|
]));
|
|
1020
|
-
if (
|
|
1021
|
-
var
|
|
1022
|
-
|
|
1131
|
+
if (hasDescendants) {
|
|
1132
|
+
var orchestration = el('div', 'tl-side-section');
|
|
1133
|
+
orchestration.appendChild(el('div', 'tl-side-label', 'Parent orchestration only'));
|
|
1134
|
+
orchestration.appendChild(statsEl([
|
|
1135
|
+
['Orchestration cost', d.costUSD != null ? fmtExactUSD(d.costUSD) : '—', ''],
|
|
1136
|
+
['Orchestration tokens', d.tokens ? fmtNum(d.tokens.total) : '—', '']
|
|
1137
|
+
]));
|
|
1138
|
+
orchestration.appendChild(el('p', 'tl-note', 'The total above includes this parent and every descendant. Orchestration is the parent agent\'s direct model usage only. Child totals overlap the parent total; do not add them together.'));
|
|
1139
|
+
panel.appendChild(orchestration);
|
|
1140
|
+
}
|
|
1141
|
+
if (estimated) panel.appendChild(el('p', 'tl-note', 'Estimated from this owner’s activity during the step. Overlapping skill or command estimates are not additional session cost.'));
|
|
1142
|
+
else if (d.attributionStatus === 'ambiguous') panel.appendChild(el('p', 'tl-note tl-warning', 'Usage cannot be assigned confidently while the relationship is unresolved.'));
|
|
1143
|
+
else if (d.attributionStatus === 'unavailable') panel.appendChild(el('p', 'tl-note', 'Usage attribution is unavailable for this step.'));
|
|
1144
|
+
if (incomplete) panel.appendChild(el('p', 'tl-note tl-warning', 'Completion was not recorded. The bar shows only activity observed in this snapshot.'));
|
|
1145
|
+
if (entry.outside) panel.appendChild(el('p', 'tl-note tl-warning', 'Some timing evidence is outside the captured session bounds. The bar is clipped to those bounds.'));
|
|
1146
|
+
var timing = el('div', 'tl-side-section');
|
|
1147
|
+
timing.appendChild(el('div', 'tl-side-label', 'Timing evidence'));
|
|
1148
|
+
var timingRows = [['Started', d.start]];
|
|
1149
|
+
if (d.acknowledgedAt != null) timingRows.push(['Acknowledged', d.acknowledgedAt]);
|
|
1150
|
+
if (d.observedEnd != null) timingRows.push(['Last observed activity', d.observedEnd]);
|
|
1151
|
+
if (d.completedAt != null) timingRows.push(['Completion recorded', d.completedAt]);
|
|
1152
|
+
timingRows.forEach(function (item) { timing.appendChild(el('div', 'tl-evidence', '<span>' + esc(item[0]) + '</span><time>' + esc(exactWhen(item[1])) + '</time>')); });
|
|
1153
|
+
if (d.acknowledgedAt != null && Number.isFinite(d.start)) timing.appendChild(el('p', 'tl-note', 'Acknowledgement delay: ' + esc(fmtTimelineDuration(Math.max(0, d.acknowledgedAt - d.start))) + '.'));
|
|
1154
|
+
panel.appendChild(timing);
|
|
1155
|
+
if (d.tokens) {
|
|
1156
|
+
var tok = d.tokens, total = Math.max(tok.total, 1);
|
|
1023
1157
|
var barEl = el('div', 'tl-tok-bar');
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
{ val: tok.output, color: '#F5A534' },
|
|
1027
|
-
{ val: tok.cacheRead, color: '#259F4C' },
|
|
1028
|
-
{ val: tok.cacheCreation, color: '#3B82F6' },
|
|
1029
|
-
].filter(function(s) { return s.val > 0; });
|
|
1030
|
-
segs.forEach(function(s) {
|
|
1031
|
-
var seg = el('div', 'tl-tok-seg');
|
|
1032
|
-
seg.style.flex = String(s.val / total * 100);
|
|
1033
|
-
seg.style.background = s.color;
|
|
1034
|
-
barEl.appendChild(seg);
|
|
1158
|
+
[{ val: tok.input, color: '#7C5CFC' }, { val: tok.output, color: '#F5A534' }, { val: tok.cacheRead, color: '#259F4C' }, { val: tok.cacheCreation, color: '#3B82F6' }].filter(function (item) { return item.val > 0; }).forEach(function (item) {
|
|
1159
|
+
var segment = el('div', 'tl-tok-seg'); segment.style.flex = String(item.val / total * 100); segment.style.background = item.color; barEl.appendChild(segment);
|
|
1035
1160
|
});
|
|
1036
1161
|
var tokSec = el('div', 'tl-side-section');
|
|
1037
|
-
tokSec.appendChild(el('div', 'tl-side-label', 'Token breakdown'));
|
|
1038
|
-
tokSec.appendChild(
|
|
1039
|
-
tokSec.appendChild(statsEl([
|
|
1040
|
-
['Input', fmtTokens(tok.input), ''],
|
|
1041
|
-
['Output', fmtTokens(tok.output), ''],
|
|
1042
|
-
['Cache read', fmtTokens(tok.cacheRead), ''],
|
|
1043
|
-
['Cache write', fmtTokens(tok.cacheCreation), ''],
|
|
1044
|
-
]));
|
|
1162
|
+
tokSec.appendChild(el('div', 'tl-side-label', hasDescendants ? 'Orchestration token breakdown' : hasOwn ? 'Direct token breakdown' : 'Token breakdown')); tokSec.appendChild(barEl);
|
|
1163
|
+
tokSec.appendChild(statsEl([['Input', fmtNum(tok.input), ''], ['Output', fmtNum(tok.output), ''], ['Cache read', fmtNum(tok.cacheRead), ''], ['Cache write', fmtNum(tok.cacheCreation), '']]));
|
|
1045
1164
|
panel.appendChild(tokSec);
|
|
1046
1165
|
}
|
|
1047
1166
|
if (d.tools && d.tools.length) {
|
|
1048
|
-
var toolSec = el('div', 'tl-side-section');
|
|
1049
|
-
toolSec.appendChild(el('div', 'tl-side-label', 'Tools called'));
|
|
1167
|
+
var toolSec = el('div', 'tl-side-section'); toolSec.appendChild(el('div', 'tl-side-label', 'Tools called'));
|
|
1050
1168
|
var chips = el('div', 'modal-chips');
|
|
1051
|
-
d.tools.forEach(function(
|
|
1052
|
-
|
|
1169
|
+
d.tools.forEach(function (tool) { chips.appendChild(el('span', 'chip', esc(tool.name) + '<b>×' + fmtNum(tool.calls) + '</b>')); });
|
|
1170
|
+
toolSec.appendChild(chips); panel.appendChild(toolSec);
|
|
1171
|
+
}
|
|
1172
|
+
if (entry.children.length) {
|
|
1173
|
+
var children = el('div', 'tl-side-section'); children.appendChild(el('div', 'tl-side-label', 'Child steps (' + entry.children.length + ')'));
|
|
1174
|
+
entry.children.forEach(function (child) {
|
|
1175
|
+
var button = el('button', 'tl-link', '↳ ' + esc(child.label)); button.type = 'button';
|
|
1176
|
+
button.addEventListener('click', function () { select(child, true); }); children.appendChild(button);
|
|
1053
1177
|
});
|
|
1054
|
-
|
|
1055
|
-
panel.appendChild(toolSec);
|
|
1178
|
+
panel.appendChild(children);
|
|
1056
1179
|
}
|
|
1057
1180
|
return panel;
|
|
1058
1181
|
}
|
|
1059
|
-
// Gantt of top-level dispatches: session span on top, then every agent/skill/command
|
|
1060
|
-
// dispatch positioned by wall-clock start time across the activity window, so each bar
|
|
1061
|
-
// sits where it actually ran. Short skills and 0ms commands fall back to the CSS
|
|
1062
|
-
// min-width (28px) so they stay visible as markers without distorting the time scale.
|
|
1063
1182
|
function timelineEl(s) {
|
|
1064
|
-
var
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
if (d.start < winStart) winStart = d.start;
|
|
1074
|
-
var end = d.start + (d.durationMs || 0);
|
|
1075
|
-
if (end > winEnd) winEnd = end;
|
|
1183
|
+
var entries = traceEntries(s);
|
|
1184
|
+
var collapsed = new Set();
|
|
1185
|
+
var capturedBounds = Number.isFinite(s.observedStart) && Number.isFinite(s.observedEnd) && s.observedEnd >= s.observedStart;
|
|
1186
|
+
var firstTimed = entries.find(function (entry) { return Number.isFinite(entry.d.start); });
|
|
1187
|
+
var winStart = capturedBounds ? s.observedStart : (Number.isFinite(s.startTime) ? s.startTime : firstTimed ? firstTimed.d.start : 0);
|
|
1188
|
+
var winEnd = capturedBounds ? s.observedEnd : winStart + Math.max(0, s.durationMs || 0);
|
|
1189
|
+
if (!capturedBounds) entries.forEach(function (entry) {
|
|
1190
|
+
if (!Number.isFinite(entry.d.start)) return;
|
|
1191
|
+
winStart = Math.min(winStart, entry.d.start); winEnd = Math.max(winEnd, entry.d.start + traceElapsed(entry.d));
|
|
1076
1192
|
});
|
|
1077
|
-
var
|
|
1078
|
-
|
|
1193
|
+
var span = Math.max(1, winEnd - winStart);
|
|
1194
|
+
var wrap = el('div', 'tl-wrap');
|
|
1195
|
+
var summary = entries.length + ' steps · ' + sumCalls(dispatchCounts(s, 'agent')) + ' agents · ' + sumCalls(dispatchCounts(s, 'skill')) + ' skills · ' + sumCalls(dispatchCounts(s, 'command')) + ' commands';
|
|
1196
|
+
wrap.appendChild(el('p', 'tl-note tl-summary', esc(summary)));
|
|
1197
|
+
wrap.appendChild(el('p', 'tl-note', (capturedBounds ? 'Captured activity: ' : 'Activity window: ') + esc(exactWhen(winStart)) + ' to ' + esc(exactWhen(winEnd)) + '.'));
|
|
1198
|
+
if (!s.dispatchesComplete) wrap.appendChild(el('p', 'tl-note', 'This older source may contain only part of the timeline; invocation totals use the available session summaries.'));
|
|
1079
1199
|
var container = el('div', 'tl-container');
|
|
1080
|
-
var gantt = el('div', 'tl-gantt timeline');
|
|
1081
|
-
var sidePane = el('div', 'tl-side');
|
|
1082
|
-
|
|
1083
|
-
var
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1200
|
+
var gantt = el('div', 'tl-gantt timeline'); gantt.setAttribute('aria-label', 'Session timeline');
|
|
1201
|
+
var sidePane = el('div', 'tl-side'); sidePane.setAttribute('role', 'region'); sidePane.setAttribute('aria-label', 'Selected step details'); sidePane.setAttribute('aria-live', 'polite');
|
|
1202
|
+
var selected = entries.filter(function (entry) { return entry.d.kind === 'agent'; })[0] || entries[0] || null;
|
|
1203
|
+
var rowByEntry = new Map();
|
|
1204
|
+
function rowLabel(entry) {
|
|
1205
|
+
var disclosure = entry.children.length ? (collapsed.has(entry) ? '▸ ' : '▾ ') : (entry.level ? '↳ ' : '');
|
|
1206
|
+
return disclosure + entry.label + (entry.issue ? ' · unresolved' : '');
|
|
1207
|
+
}
|
|
1208
|
+
function refreshTreeVisibility() {
|
|
1209
|
+
entries.forEach(function (entry) {
|
|
1210
|
+
var ancestor = entry.parent, hidden = false;
|
|
1211
|
+
while (ancestor) {
|
|
1212
|
+
if (collapsed.has(ancestor)) { hidden = true; break; }
|
|
1213
|
+
ancestor = ancestor.parent;
|
|
1214
|
+
}
|
|
1215
|
+
var row = rowByEntry.get(entry);
|
|
1216
|
+
if (!row) return;
|
|
1217
|
+
row.hidden = hidden;
|
|
1218
|
+
var labelEl = row.querySelector('.tl-label');
|
|
1219
|
+
labelEl.textContent = rowLabel(entry);
|
|
1220
|
+
labelEl.title = entry.label;
|
|
1221
|
+
if (entry.children.length) row.setAttribute('aria-expanded', collapsed.has(entry) ? 'false' : 'true');
|
|
1089
1222
|
});
|
|
1090
|
-
sidePane.innerHTML = '';
|
|
1091
|
-
sidePane.appendChild(tlDetailEl(d, winStart));
|
|
1092
1223
|
}
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
var
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
var
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
if (bar) {
|
|
1113
|
-
bar.setAttribute('data-dispatch', key);
|
|
1114
|
-
if (d === selected) bar.style.outline = '2px solid rgba(255,255,255,0.55)';
|
|
1224
|
+
function selectDispatch(entry, focus) {
|
|
1225
|
+
if (focus) {
|
|
1226
|
+
var ancestor = entry.parent;
|
|
1227
|
+
while (ancestor) { collapsed.delete(ancestor); ancestor = ancestor.parent; }
|
|
1228
|
+
refreshTreeVisibility();
|
|
1229
|
+
}
|
|
1230
|
+
selected = entry;
|
|
1231
|
+
rowByEntry.forEach(function (row, candidate) { row.classList.toggle('tl-selected', candidate === entry); row.setAttribute('aria-pressed', candidate === entry ? 'true' : 'false'); });
|
|
1232
|
+
sidePane.innerHTML = ''; sidePane.appendChild(tlDetailEl(entry, s, winStart, selectDispatch));
|
|
1233
|
+
var row = rowByEntry.get(entry);
|
|
1234
|
+
if (focus && row) { row.focus({ preventScroll: true }); row.scrollIntoView({ block: 'nearest' }); }
|
|
1235
|
+
}
|
|
1236
|
+
gantt.appendChild(tlRow('session', '#259F4C', 0, 100, fmtTimelineDuration(Math.max(0, winEnd - winStart)), fmtUSD(s.costUSD), true));
|
|
1237
|
+
var unresolvedHeading = false;
|
|
1238
|
+
entries.forEach(function (entry) {
|
|
1239
|
+
var d = entry.d, duration = traceElapsed(d);
|
|
1240
|
+
if (entry.unresolved && !unresolvedHeading) {
|
|
1241
|
+
unresolvedHeading = true;
|
|
1242
|
+
gantt.appendChild(el('div', 'tl-group-label', 'Unresolved relationships (' + entries.filter(function (item) { return item.unresolved; }).length + ')'));
|
|
1115
1243
|
}
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1244
|
+
var start = Number.isFinite(d.start) ? d.start : winStart;
|
|
1245
|
+
entry.outside = start < winStart || start + duration > winEnd;
|
|
1246
|
+
var left = Math.max(0, Math.min(100, (start - winStart) / span * 100));
|
|
1247
|
+
var width = Math.max(0, (Math.min(winEnd, start + duration) - Math.max(winStart, start)) / span * 100);
|
|
1248
|
+
var label = rowLabel(entry);
|
|
1249
|
+
var durationText = d.status === 'unknown' && !d.observedEnd ? 'Unknown' : (d.status === 'incomplete' ? '≥ ' : '') + fmtTimelineDuration(duration);
|
|
1250
|
+
var displayedCost = d.kind === 'agent' && d.inclusiveCostUSD != null ? d.inclusiveCostUSD : d.costUSD;
|
|
1251
|
+
var row = tlRow(label, PALETTE[hashStr(d.kind + ':' + d.name) % PALETTE.length], left, width, durationText, displayedCost != null && width >= 10 ? fmtUSD(displayedCost) : '', false);
|
|
1252
|
+
row.setAttribute('data-dispatch', entry.key);
|
|
1253
|
+
row.setAttribute('aria-label', entry.label + ', level ' + (entry.level + 1) + ', ' + traceStatus(d) + (entry.children.length ? ', expandable' : '') + (entry.issue ? ', ' + entry.issue : ''));
|
|
1254
|
+
row.querySelector('.tl-label').style.paddingLeft = Math.min(72, entry.level * 12) + 'px';
|
|
1255
|
+
if (entry.unresolved) row.classList.add('tl-unresolved');
|
|
1256
|
+
row.addEventListener('click', function () {
|
|
1257
|
+
selectDispatch(entry, false);
|
|
1258
|
+
if (entry.children.length) {
|
|
1259
|
+
if (collapsed.has(entry)) collapsed.delete(entry); else collapsed.add(entry);
|
|
1260
|
+
refreshTreeVisibility();
|
|
1261
|
+
}
|
|
1262
|
+
});
|
|
1263
|
+
rowByEntry.set(entry, row); gantt.appendChild(row);
|
|
1119
1264
|
});
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
container.appendChild(sidePane);
|
|
1123
|
-
return
|
|
1265
|
+
refreshTreeVisibility();
|
|
1266
|
+
selectDispatch(selected, false);
|
|
1267
|
+
container.appendChild(gantt); container.appendChild(sidePane); wrap.appendChild(container);
|
|
1268
|
+
return wrap;
|
|
1124
1269
|
}
|
|
1125
1270
|
/**
|
|
1126
1271
|
* Rebuild a single-session ReportPayload matching what
|
|
@@ -1159,6 +1304,7 @@
|
|
|
1159
1304
|
};
|
|
1160
1305
|
// Same conditional-spread semantics as buildPayload: omit rather than emit null.
|
|
1161
1306
|
if (DATA.meta && DATA.meta.userEmail !== undefined) meta.userEmail = DATA.meta.userEmail;
|
|
1307
|
+
if (s.capturedAt !== undefined) meta.capturedAt = s.capturedAt;
|
|
1162
1308
|
if (Number.isFinite(s.startTime) && s.startTime > 0) {
|
|
1163
1309
|
meta.periodStart = new Date(s.startTime).toISOString();
|
|
1164
1310
|
meta.periodEnd = new Date(s.startTime + Math.max(Number.isFinite(s.durationMs) ? s.durationMs : 0, 0)).toISOString();
|
|
@@ -1169,8 +1315,10 @@
|
|
|
1169
1315
|
function openSessionModal(s, onBack) {
|
|
1170
1316
|
if (!s) return;
|
|
1171
1317
|
closeSessionModal();
|
|
1318
|
+
modalReturnFocus = document.activeElement;
|
|
1172
1319
|
var ov = el('div', 'modal-overlay'); ov.id = 'session-modal';
|
|
1173
|
-
var modal = el('div', 'modal');
|
|
1320
|
+
var modal = el('div', 'modal timeline-modal');
|
|
1321
|
+
modal.setAttribute('role', 'dialog'); modal.setAttribute('aria-modal', 'true'); modal.setAttribute('aria-label', 'Session details');
|
|
1174
1322
|
|
|
1175
1323
|
// header — every interpolation through esc(); title is arbitrary user text (XSS vector).
|
|
1176
1324
|
var head = el('div', 'modal-head');
|
|
@@ -1240,15 +1388,16 @@
|
|
|
1240
1388
|
// which bills in premium requests rather than tokens, and whose older CLI versions
|
|
1241
1389
|
// recorded no telemetry at all). Appended so other agents' cards are unchanged.
|
|
1242
1390
|
var costRows = [
|
|
1243
|
-
['Cost', s.usageUnavailableReason ? '—' :
|
|
1391
|
+
['Cost', s.usageUnavailableReason ? '—' : fmtExactUSD(s.costUSD), s.usageUnavailableReason ? 'not measurable' : costSourceLabel(s)],
|
|
1244
1392
|
['Cache-read', s.cacheReadCostUSD ? fmtUSD(s.cacheReadCostUSD) : '—', ''],
|
|
1245
|
-
['Duration',
|
|
1393
|
+
['Duration', fmtTimelineDuration(s.durationMs || 0), fmtNum(s.durationMs) + ' ms'],
|
|
1246
1394
|
['Started', '<span class="mval-sm">' + esc(fmtWhen(s.startTime)) + '</span>', '']
|
|
1247
1395
|
];
|
|
1248
1396
|
if (s.premiumRequests !== undefined) {
|
|
1249
1397
|
costRows.push(['Premium requests', fmtNum(s.premiumRequests), 'provider billing unit']);
|
|
1250
1398
|
}
|
|
1251
1399
|
var costCard = card('Cost & Time'); costCard._body.appendChild(statsEl(costRows));
|
|
1400
|
+
if (s.capturedAt !== undefined) costCard._body.appendChild(el('p', 'tl-note', 'Captured ' + esc(exactWhen(s.capturedAt)) + '.'));
|
|
1252
1401
|
if (s.usageUnavailableReason) {
|
|
1253
1402
|
costCard._body.appendChild(el('div', 'text-muted', '<span style="font-size:12px">' + esc(s.usageUnavailableReason) + '</span>'));
|
|
1254
1403
|
} else if (s.usagePartial) {
|
|
@@ -1269,6 +1418,26 @@
|
|
|
1269
1418
|
grid3.appendChild(costCard); grid3.appendChild(tokCard); grid3.appendChild(actCard);
|
|
1270
1419
|
body.appendChild(grid3);
|
|
1271
1420
|
|
|
1421
|
+
if (s.rootOwnTokens && s.unlinkedTokens) {
|
|
1422
|
+
var allocation = card('Usage allocation', 'each response belongs to one row; parent totals overlap child rows');
|
|
1423
|
+
var linkedTokens = Math.max(0, (t.total || 0) - s.rootOwnTokens.total - s.unlinkedTokens.total);
|
|
1424
|
+
var linkedCost = s.rootOwnCostUSD != null && s.unlinkedCostUSD != null ? Math.max(0, s.costUSD - s.rootOwnCostUSD - s.unlinkedCostUSD) : null;
|
|
1425
|
+
allocation._body.appendChild(el('div', 'tl-allocation', tableHTML(['Owner', 'Tokens', 'Cost'], [
|
|
1426
|
+
['Session root', fmtNum(s.rootOwnTokens.total), fmtExactUSD(s.rootOwnCostUSD)],
|
|
1427
|
+
['Linked agents · own usage across all levels', fmtNum(linkedTokens), fmtExactUSD(linkedCost)],
|
|
1428
|
+
['Unlinked usage', fmtNum(s.unlinkedTokens.total), fmtExactUSD(s.unlinkedCostUSD)],
|
|
1429
|
+
['Session total', fmtNum(t.total), fmtExactUSD(s.costUSD)]
|
|
1430
|
+
], [false, true, true])));
|
|
1431
|
+
allocation._body.appendChild(el('p', 'tl-note', 'A parent agent’s total includes all descendants. Adding parent and child totals would count their usage again.'));
|
|
1432
|
+
if (s.unlinkedAgentIds && s.unlinkedAgentIds.length) {
|
|
1433
|
+
var unlinked = el('details', 'tl-unlinked-agents');
|
|
1434
|
+
unlinked.appendChild(el('summary', '', 'Unlinked agents (' + fmtNum(s.unlinkedAgentIds.length) + ')'));
|
|
1435
|
+
var list = el('ul', ''); s.unlinkedAgentIds.forEach(function (id) { list.appendChild(el('li', 'modal-mono', esc(id))); });
|
|
1436
|
+
unlinked.appendChild(list); allocation._body.appendChild(unlinked);
|
|
1437
|
+
}
|
|
1438
|
+
body.appendChild(allocation);
|
|
1439
|
+
}
|
|
1440
|
+
|
|
1272
1441
|
// Code changes
|
|
1273
1442
|
var ccCard = card('Code changes'); ccCard._body.appendChild(statsEl([
|
|
1274
1443
|
['Files changed', fmtNum(s.filesChanged || 0), 'written or edited'],
|
|
@@ -1279,7 +1448,7 @@
|
|
|
1279
1448
|
body.appendChild(ccCard);
|
|
1280
1449
|
|
|
1281
1450
|
// Token & cost growth chart (backfilled per-turn series; honest fallback when absent)
|
|
1282
|
-
var growth = card('Token & cost growth', 'cumulative
|
|
1451
|
+
var growth = card('Token & cost growth', 'cumulative cost and token usage across the session');
|
|
1283
1452
|
var series = s.costSeries || [];
|
|
1284
1453
|
if (series.length >= 2 && window.Chart) {
|
|
1285
1454
|
var useTs = series[0].t > 1e12; // epoch ms vs turn ordinal
|
|
@@ -1289,7 +1458,7 @@
|
|
|
1289
1458
|
makeModalChart(cv, {
|
|
1290
1459
|
type: 'line',
|
|
1291
1460
|
data: { labels: labels, datasets: [
|
|
1292
|
-
{ label: 'Cost ($)', data: series.map(function (p) { return
|
|
1461
|
+
{ label: 'Cost ($)', data: series.map(function (p) { return p.cost; }), borderColor: '#7C5CFC', backgroundColor: 'rgba(124,92,252,0.12)', fill: true, yAxisID: 'y', tension: 0.25, pointRadius: 0 },
|
|
1293
1462
|
{ label: 'Tokens', data: series.map(function (p) { return p.tokens; }), borderColor: '#F5A534', backgroundColor: 'transparent', fill: false, yAxisID: 'y1', tension: 0.25, pointRadius: 0 }
|
|
1294
1463
|
] },
|
|
1295
1464
|
options: { interaction: { mode: 'index', intersect: false }, plugins: { legend: { display: true } },
|
|
@@ -1302,10 +1471,9 @@
|
|
|
1302
1471
|
}
|
|
1303
1472
|
body.appendChild(growth);
|
|
1304
1473
|
|
|
1305
|
-
// Timeline —
|
|
1474
|
+
// Timeline — every recorded invocation with exact parent/owner links when available.
|
|
1306
1475
|
var hasDispatches = (s.dispatches || []).length > 0;
|
|
1307
|
-
var
|
|
1308
|
-
var tlSubtitle = hasDispatches ? (hasCostData ? 'click a step for cost, token & timing details · positioned across the session' : 'click a step for timing details · positioned across the session') : '';
|
|
1476
|
+
var tlSubtitle = hasDispatches ? 'select any step for ancestry, total and orchestration usage, and timing evidence' : '';
|
|
1309
1477
|
var tlCard = card('Timeline', tlSubtitle);
|
|
1310
1478
|
if (hasDispatches) {
|
|
1311
1479
|
tlCard._body.appendChild(timelineEl(s));
|
|
@@ -1320,9 +1488,18 @@
|
|
|
1320
1488
|
modal.appendChild(body);
|
|
1321
1489
|
ov.appendChild(modal);
|
|
1322
1490
|
ov.addEventListener('click', function (ev) { if (ev.target === ov) closeSessionModal(); });
|
|
1323
|
-
modalEsc = function (ev) {
|
|
1491
|
+
modalEsc = function (ev) {
|
|
1492
|
+
if (ev.key === 'Escape') { closeSessionModal(); return; }
|
|
1493
|
+
if (ev.key !== 'Tab') return;
|
|
1494
|
+
var focusable = Array.from(modal.querySelectorAll('button:not([disabled]), a[href], input, select, textarea, summary, [tabindex="0"]')).filter(function (node) { return node.offsetParent !== null; });
|
|
1495
|
+
if (!focusable.length) return;
|
|
1496
|
+
var first = focusable[0], last = focusable[focusable.length - 1];
|
|
1497
|
+
if (ev.shiftKey && (document.activeElement === first || !modal.contains(document.activeElement))) { ev.preventDefault(); last.focus(); }
|
|
1498
|
+
else if (!ev.shiftKey && (document.activeElement === last || !modal.contains(document.activeElement))) { ev.preventDefault(); first.focus(); }
|
|
1499
|
+
};
|
|
1324
1500
|
document.addEventListener('keydown', modalEsc);
|
|
1325
1501
|
document.body.appendChild(ov);
|
|
1502
|
+
close.focus();
|
|
1326
1503
|
}
|
|
1327
1504
|
|
|
1328
1505
|
// ---- project-sessions modal --------------------------------------------
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payload-builder.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/analytics/report/payload-builder.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"payload-builder.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/analytics/report/payload-builder.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAwB,MAAM,aAAa,CAAC;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAyD,MAAM,kBAAkB,CAAC;AAE7H,OAAO,KAAK,EAAE,aAAa,EAAmC,MAAM,YAAY,CAAC;AAGjF,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA6CD,wBAAgB,YAAY,CAC1B,IAAI,EAAE,aAAa,EACnB,SAAS,EAAE,gBAAgB,EAC3B,OAAO,EAAE,WAAW,EACpB,GAAG,EAAE,cAAc,GAClB,aAAa,CAuKf"}
|