@codemieai/code 0.15.2 → 0.15.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents/core/AgentCLI.d.ts.map +1 -1
- package/dist/agents/core/AgentCLI.js +9 -0
- package/dist/agents/core/AgentCLI.js.map +1 -1
- package/dist/agents/core/BaseAgentAdapter.d.ts.map +1 -1
- package/dist/agents/core/BaseAgentAdapter.js +34 -9
- package/dist/agents/core/BaseAgentAdapter.js.map +1 -1
- package/dist/agents/plugins/claude/claude.models.d.ts +58 -0
- package/dist/agents/plugins/claude/claude.models.d.ts.map +1 -1
- package/dist/agents/plugins/claude/claude.models.js +196 -10
- package/dist/agents/plugins/claude/claude.models.js.map +1 -1
- package/dist/agents/plugins/claude/claude.plugin.d.ts +1 -1
- package/dist/agents/plugins/claude/claude.plugin.d.ts.map +1 -1
- package/dist/agents/plugins/claude/claude.plugin.js +149 -47
- 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 +4 -0
- package/dist/agents/plugins/claude/claude.session.js.map +1 -1
- package/dist/agents/plugins/claude/plugin/statusline.bundle.mjs +729 -0
- package/dist/agents/plugins/claude/statusline-installer.d.ts +1 -1
- package/dist/agents/plugins/claude/statusline-installer.d.ts.map +1 -1
- package/dist/agents/plugins/claude/statusline-installer.js +41 -3
- package/dist/agents/plugins/claude/statusline-installer.js.map +1 -1
- package/dist/agents/plugins/codex/codex-models.d.ts.map +1 -1
- package/dist/agents/plugins/codex/codex-models.js +109 -8
- package/dist/agents/plugins/codex/codex-models.js.map +1 -1
- package/dist/agents/plugins/codex/codex.correlation.d.ts +39 -0
- package/dist/agents/plugins/codex/codex.correlation.d.ts.map +1 -0
- package/dist/agents/plugins/codex/codex.correlation.js +150 -0
- package/dist/agents/plugins/codex/codex.correlation.js.map +1 -0
- package/dist/agents/plugins/codex/codex.plugin.d.ts.map +1 -1
- package/dist/agents/plugins/codex/codex.plugin.js +8 -40
- package/dist/agents/plugins/codex/codex.plugin.js.map +1 -1
- package/dist/agents/plugins/kimi/kimi.env-model.d.ts +27 -0
- package/dist/agents/plugins/kimi/kimi.env-model.d.ts.map +1 -0
- package/dist/agents/plugins/kimi/kimi.env-model.js +52 -0
- package/dist/agents/plugins/kimi/kimi.env-model.js.map +1 -0
- package/dist/agents/plugins/kimi/kimi.session.d.ts +6 -0
- package/dist/agents/plugins/kimi/kimi.session.d.ts.map +1 -1
- package/dist/agents/plugins/kimi/kimi.session.js +24 -2
- package/dist/agents/plugins/kimi/kimi.session.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 +4 -5
- 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/cost-enricher.d.ts +19 -2
- package/dist/cli/commands/analytics/cost/cost-enricher.d.ts.map +1 -1
- package/dist/cli/commands/analytics/cost/cost-enricher.js +171 -14
- package/dist/cli/commands/analytics/cost/cost-enricher.js.map +1 -1
- package/dist/cli/commands/analytics/cost/local-models.d.ts +15 -0
- package/dist/cli/commands/analytics/cost/local-models.d.ts.map +1 -0
- package/dist/cli/commands/analytics/cost/local-models.js +21 -0
- package/dist/cli/commands/analytics/cost/local-models.js.map +1 -0
- package/dist/cli/commands/analytics/cost/types.d.ts +60 -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 +25 -2
- package/dist/cli/commands/analytics/cost/usage-readers.d.ts.map +1 -1
- package/dist/cli/commands/analytics/cost/usage-readers.js +61 -3
- package/dist/cli/commands/analytics/cost/usage-readers.js.map +1 -1
- package/dist/cli/commands/analytics/formatter.d.ts +11 -0
- package/dist/cli/commands/analytics/formatter.d.ts.map +1 -1
- package/dist/cli/commands/analytics/formatter.js +28 -0
- package/dist/cli/commands/analytics/formatter.js.map +1 -1
- package/dist/cli/commands/analytics/index.d.ts.map +1 -1
- package/dist/cli/commands/analytics/index.js +70 -73
- package/dist/cli/commands/analytics/index.js.map +1 -1
- package/dist/cli/commands/analytics/otel-loader.d.ts.map +1 -1
- package/dist/cli/commands/analytics/otel-loader.js +60 -14
- package/dist/cli/commands/analytics/otel-loader.js.map +1 -1
- package/dist/cli/commands/analytics/otel-pricing.d.ts +38 -0
- package/dist/cli/commands/analytics/otel-pricing.d.ts.map +1 -0
- package/dist/cli/commands/analytics/otel-pricing.js +33 -0
- package/dist/cli/commands/analytics/otel-pricing.js.map +1 -0
- package/dist/cli/commands/analytics/report/client/app.js +279 -18
- package/dist/cli/commands/analytics/report/output-target.d.ts +22 -0
- package/dist/cli/commands/analytics/report/output-target.d.ts.map +1 -0
- package/dist/cli/commands/analytics/report/output-target.js +56 -0
- package/dist/cli/commands/analytics/report/output-target.js.map +1 -0
- package/dist/cli/commands/analytics/report/payload-builder.d.ts.map +1 -1
- package/dist/cli/commands/analytics/report/payload-builder.js +6 -0
- package/dist/cli/commands/analytics/report/payload-builder.js.map +1 -1
- package/dist/cli/commands/analytics/report/report-generator.d.ts +1 -1
- package/dist/cli/commands/analytics/report/report-generator.js +1 -1
- package/dist/cli/commands/analytics/report/session-report.d.ts +1 -3
- package/dist/cli/commands/analytics/report/session-report.d.ts.map +1 -1
- package/dist/cli/commands/analytics/report/session-report.js +1 -3
- package/dist/cli/commands/analytics/report/session-report.js.map +1 -1
- package/dist/cli/commands/analytics/report/template.html +6 -6
- package/dist/cli/commands/analytics/report/types.d.ts +17 -1
- package/dist/cli/commands/analytics/report/types.d.ts.map +1 -1
- package/dist/cli/commands/analytics/sources/sessions-source.d.ts.map +1 -1
- package/dist/cli/commands/analytics/sources/sessions-source.js +9 -11
- package/dist/cli/commands/analytics/sources/sessions-source.js.map +1 -1
- package/dist/cli/commands/analytics/sources/types.d.ts +0 -2
- package/dist/cli/commands/analytics/sources/types.d.ts.map +1 -1
- package/dist/cli/commands/analytics/types.d.ts +8 -8
- package/dist/cli/commands/analytics/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/models.d.ts.map +1 -1
- package/dist/cli/commands/models.js +16 -3
- package/dist/cli/commands/models.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 +2 -3
- package/dist/cli/commands/proxy/connectors/desktop.d.ts.map +1 -1
- package/dist/cli/commands/proxy/connectors/desktop.js +9 -25
- 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 +23 -0
- package/dist/cli/commands/proxy/connectors/tenant-catalog.d.ts.map +1 -0
- package/dist/cli/commands/proxy/connectors/tenant-catalog.js +136 -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 +21 -3
- package/dist/cli/commands/proxy/connectors/vscode-models.d.ts.map +1 -1
- package/dist/cli/commands/proxy/connectors/vscode-models.js +86 -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 +67 -39
- package/dist/cli/commands/proxy/connectors/vscode.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/providers/core/codemie-auth-helpers.d.ts.map +1 -1
- package/dist/providers/core/codemie-auth-helpers.js +6 -1
- package/dist/providers/core/codemie-auth-helpers.js.map +1 -1
- package/dist/providers/core/default-agent-hooks.d.ts.map +1 -1
- package/dist/providers/core/default-agent-hooks.js +9 -0
- package/dist/providers/core/default-agent-hooks.js.map +1 -1
- package/dist/providers/plugins/bedrock/bedrock.template.d.ts.map +1 -1
- package/dist/providers/plugins/bedrock/bedrock.template.js +5 -31
- package/dist/providers/plugins/bedrock/bedrock.template.js.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/background-request-normalizer.plugin.d.ts +44 -0
- package/dist/providers/plugins/sso/proxy/plugins/background-request-normalizer.plugin.d.ts.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/background-request-normalizer.plugin.js +106 -0
- package/dist/providers/plugins/sso/proxy/plugins/background-request-normalizer.plugin.js.map +1 -0
- 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/plugins/index.d.ts +3 -1
- package/dist/providers/plugins/sso/proxy/plugins/index.d.ts.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/index.js +5 -1
- package/dist/providers/plugins/sso/proxy/plugins/index.js.map +1 -1
- package/dist/providers/plugins/sso/proxy/plugins/routing-header-injector.plugin.d.ts +67 -0
- package/dist/providers/plugins/sso/proxy/plugins/routing-header-injector.plugin.d.ts.map +1 -0
- package/dist/providers/plugins/sso/proxy/plugins/routing-header-injector.plugin.js +203 -0
- package/dist/providers/plugins/sso/proxy/plugins/routing-header-injector.plugin.js.map +1 -0
- 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/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 +2 -1
- package/dist/providers/plugins/sso/session/processors/metrics/metrics-sync-processor.js.map +1 -1
- package/dist/providers/plugins/sso/sso.http-client.d.ts +95 -0
- package/dist/providers/plugins/sso/sso.http-client.d.ts.map +1 -1
- package/dist/providers/plugins/sso/sso.http-client.js +79 -0
- package/dist/providers/plugins/sso/sso.http-client.js.map +1 -1
- package/dist/providers/plugins/sso/sso.models.d.ts +7 -0
- package/dist/providers/plugins/sso/sso.models.d.ts.map +1 -1
- package/dist/providers/plugins/sso/sso.models.js +22 -14
- package/dist/providers/plugins/sso/sso.models.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/bedrock-pricing.mjs +111 -0
- package/dist/utils/cli-updater.d.ts.map +1 -1
- package/dist/utils/cli-updater.js +32 -7
- 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/credential-crypto.d.ts +51 -0
- package/dist/utils/credential-crypto.d.ts.map +1 -0
- package/dist/utils/credential-crypto.js +96 -0
- package/dist/utils/credential-crypto.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/model-normalizer.d.ts +6 -0
- package/dist/utils/model-normalizer.d.ts.map +1 -1
- package/dist/utils/model-normalizer.js +37 -19
- package/dist/utils/model-normalizer.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/price-resolution.d.ts +42 -0
- package/dist/utils/price-resolution.d.ts.map +1 -0
- package/dist/utils/price-resolution.js +112 -0
- package/dist/utils/price-resolution.js.map +1 -0
- package/dist/utils/pricing.d.ts +65 -6
- package/dist/utils/pricing.d.ts.map +1 -1
- package/dist/utils/pricing.js +91 -117
- package/dist/utils/pricing.js.map +1 -1
- package/dist/utils/pricing.json +201 -20
- 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/routing-headers.mjs +104 -0
- package/dist/utils/security.d.ts +0 -32
- package/dist/utils/security.d.ts.map +1 -1
- package/dist/utils/security.js +20 -102
- package/dist/utils/security.js.map +1 -1
- package/package.json +5 -2
- package/scripts/bundle-statusline.mjs +37 -0
- package/scripts/copy-plugins.js +19 -2
- package/src/utils/tips.json +9 -9
- package/dist/agents/plugins/claude/plugin/__tests__/statusline.test.ts +0 -323
- package/dist/agents/plugins/claude/plugin/statusline.mjs +0 -282
- package/dist/cli/commands/analytics/exporter.d.ts +0 -20
- package/dist/cli/commands/analytics/exporter.d.ts.map +0 -1
- package/dist/cli/commands/analytics/exporter.js +0 -91
- package/dist/cli/commands/analytics/exporter.js.map +0 -1
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
return '$' + Math.round(n).toLocaleString('en-US');
|
|
42
42
|
}
|
|
43
43
|
function fmtExactUSD(n) {
|
|
44
|
-
return Number.isFinite(n) ? '$' + n.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits:
|
|
44
|
+
return Number.isFinite(n) ? '$' + n.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 }) : '—';
|
|
45
45
|
}
|
|
46
46
|
function costSourceLabel(s) {
|
|
47
47
|
return s.costSource === 'authoritative' ? 'reported by source' : s.costSource === 'native-estimate' ? 'API-equivalent estimate' : 'source not recorded';
|
|
@@ -61,8 +61,8 @@
|
|
|
61
61
|
}
|
|
62
62
|
function esc(s) { return String(s == null ? '' : s).replace(/[&<>"]/g, function (c) { return { '&': '&', '<': '<', '>': '>', '"': '"' }[c]; }); }
|
|
63
63
|
function shortPath(p) { var parts = String(p || '').split('/'); return parts[parts.length - 1] || p; }
|
|
64
|
-
// Human-readable session label:
|
|
65
|
-
function sessTitle(s) {
|
|
64
|
+
// Human-readable session label: AI-generated name when available, else cleaned first-prompt title, else short id.
|
|
65
|
+
function sessTitle(s) { var t = (s && s.title && s.title.trim()) ? s.title.trim() : ''; if (t && t.charAt(0) === '/') { var m = t.match(/^\/\S+\s+([\s\S]+)/); if (m) t = m[1].trim(); } return t || ('#' + String((s && s.sessionId) || '').slice(0, 8)); }
|
|
66
66
|
function truncStr(s, n) { s = String(s == null ? '' : s); return s.length > n ? s.slice(0, n - 1) + '…' : s; }
|
|
67
67
|
// First n whitespace-delimited words (the "starting message" preview), '…' when truncated.
|
|
68
68
|
function firstWords(s, n) { s = String(s == null ? '' : s).trim(); var w = s.split(/\s+/); return w.length > n ? w.slice(0, n).join(' ') + '…' : s; }
|
|
@@ -802,6 +802,22 @@
|
|
|
802
802
|
host.appendChild(changeCard);
|
|
803
803
|
};
|
|
804
804
|
|
|
805
|
+
/**
|
|
806
|
+
* Builds the cost-banner text (spec section B: "The HTML report and the terminal summary
|
|
807
|
+
* show both lists"). Pure string builder kept separate from VIEWS.cost's DOM assembly so it
|
|
808
|
+
* can be executed directly in a test (see report-views.test.ts CR-014).
|
|
809
|
+
*/
|
|
810
|
+
function costBannerMessage(meta) {
|
|
811
|
+
var priced = meta.totals.pricedSessions, totalSessions = meta.totals.sessions;
|
|
812
|
+
var msg = 'Priced ' + priced + ' of ' + totalSessions + ' sessions with recoverable token usage. '
|
|
813
|
+
+ 'The rest have no readable native log — coding agents rotate/delete old transcripts, so historical '
|
|
814
|
+
+ 'token data is incomplete (this does not affect the cost of the sessions that are priced). See Coverage by agent below.';
|
|
815
|
+
if (meta.unpricedModels && meta.unpricedModels.length) msg += ' Unpriced models: ' + meta.unpricedModels.join(', ') + '.';
|
|
816
|
+
if (meta.estimatedModels && meta.estimatedModels.length) msg += ' Estimated models: ' + meta.estimatedModels.join(', ') + '.';
|
|
817
|
+
if (meta.localModels && meta.localModels.length) msg += ' Local models (free): ' + meta.localModels.join(', ') + '.';
|
|
818
|
+
return msg;
|
|
819
|
+
}
|
|
820
|
+
|
|
805
821
|
VIEWS.cost = function (host, fs) {
|
|
806
822
|
host.appendChild(el('h2', 'view-title', 'Cost'));
|
|
807
823
|
var allEstimated = fs.length && fs.every(function (s) { return s.costSource === 'native-estimate'; });
|
|
@@ -815,11 +831,7 @@
|
|
|
815
831
|
var priced = DATA.meta.totals.pricedSessions, totalSessions = DATA.meta.totals.sessions;
|
|
816
832
|
|
|
817
833
|
var banner = el('div', 'alert ' + (priced < totalSessions ? 'alert-warning' : 'alert-info'));
|
|
818
|
-
|
|
819
|
-
+ 'The rest have no readable native log — coding agents rotate/delete old transcripts, so historical '
|
|
820
|
-
+ 'token data is incomplete (this does not affect the cost of the sessions that are priced). See Coverage by agent below.';
|
|
821
|
-
if (DATA.meta.unpricedModels && DATA.meta.unpricedModels.length) msg += ' Unpriced models: ' + DATA.meta.unpricedModels.join(', ') + '.';
|
|
822
|
-
banner.textContent = msg; // textContent is safe — do not pre-escape (would double-escape)
|
|
834
|
+
banner.textContent = costBannerMessage(DATA.meta); // textContent is safe — do not pre-escape (would double-escape)
|
|
823
835
|
host.appendChild(banner);
|
|
824
836
|
|
|
825
837
|
var grid = el('div', 'kpi-grid'); grid.style.gridTemplateColumns = 'repeat(3,1fr)';
|
|
@@ -829,6 +841,144 @@
|
|
|
829
841
|
});
|
|
830
842
|
host.appendChild(grid);
|
|
831
843
|
|
|
844
|
+
// Routing KPI section — only shown when at least one session has routing. routingCostKnown
|
|
845
|
+
// is set (true OR false) whenever a session had at least one routed turn — see
|
|
846
|
+
// cost-enricher.ts's `routedTurns > 0` guard — so `!= null` alone identifies "was routed",
|
|
847
|
+
// independent of whether a classifier cost was actually incurred (heuristic-only Switchyard
|
|
848
|
+
// decisions report zero classifier cost but are still routing). routingCostKnown === false
|
|
849
|
+
// just means no classifier ran for one of the session's routed turns — not a measurement
|
|
850
|
+
// gap — so it is never surfaced as "unmeasured" here.
|
|
851
|
+
var routedSessions = fs.filter(function (s) { return s.classifierCostUSD != null || s.routingCostKnown != null; });
|
|
852
|
+
if (routedSessions.length > 0) {
|
|
853
|
+
host.appendChild(el('h3', 'section-title', 'Routing'));
|
|
854
|
+
var rsGrid = el('div', 'kpi-grid'); rsGrid.style.gridTemplateColumns = 'repeat(2,1fr)';
|
|
855
|
+
var measuredSessions = routedSessions.filter(function (s) { return s.classifierCostUSD != null && s.classifierCostUSD > 0; });
|
|
856
|
+
var totalClassifierCost = sum(measuredSessions, function (s) { return s.classifierCostUSD || 0; });
|
|
857
|
+
[
|
|
858
|
+
['Sessions with routing', fmtNum(routedSessions.length) + ' / ' + fmtNum(fs.length)],
|
|
859
|
+
['Classifier routing cost', fmtUSD(totalClassifierCost)]
|
|
860
|
+
].forEach(function (k) {
|
|
861
|
+
var c = el('div', 'kpi'); c.innerHTML = '<div class="kpi-label">' + k[0] + '</div><div class="kpi-value">' + k[1] + '</div>'; rsGrid.appendChild(c);
|
|
862
|
+
});
|
|
863
|
+
host.appendChild(rsGrid);
|
|
864
|
+
|
|
865
|
+
// Flatten every routed turn (routingFamily set) across sessions in view. estimatedMaxCostUSD/
|
|
866
|
+
// potentialSavingsUSD are computed at report time (cost-enricher.ts) by repricing the
|
|
867
|
+
// turn's own usage at the backend's counterfactualModel rate (from
|
|
868
|
+
// x-codemie-routing-counterfactual-model). Absent (not zero) on a turn whose backend didn't
|
|
869
|
+
// report a counterfactual, or whose counterfactual model has no rate-card entry — so
|
|
870
|
+
// savings for those stay unknown rather than wrong.
|
|
871
|
+
var routedTurns = [];
|
|
872
|
+
fs.forEach(function (s) { (s.modelTimeline || []).forEach(function (p) { if (p.routingFamily != null) routedTurns.push(p); }); });
|
|
873
|
+
|
|
874
|
+
if (routedTurns.length > 0) {
|
|
875
|
+
var knownSavingsTurns = routedTurns.filter(function (p) { return p.estimatedMaxCostUSD != null; });
|
|
876
|
+
var unknownSavingsCount = routedTurns.length - knownSavingsTurns.length;
|
|
877
|
+
var actualRoutedCost = sum(routedTurns, function (p) { return p.costUSD || 0; });
|
|
878
|
+
var estimatedNoRoutingCost = sum(knownSavingsTurns, function (p) { return p.estimatedMaxCostUSD; });
|
|
879
|
+
var potentialSavings = sum(knownSavingsTurns, function (p) { return p.potentialSavingsUSD || 0; });
|
|
880
|
+
var savingsNote = unknownSavingsCount ? (fmtNum(unknownSavingsCount) + ' turn' + (unknownSavingsCount === 1 ? '' : 's') + ' not estimable') : (fmtNum(knownSavingsTurns.length) + ' turns estimated');
|
|
881
|
+
|
|
882
|
+
var svGrid = el('div', 'kpi-grid'); svGrid.style.gridTemplateColumns = 'repeat(3,1fr)';
|
|
883
|
+
[
|
|
884
|
+
['Actual routed cost', fmtUSD(actualRoutedCost), fmtNum(routedTurns.length) + ' routed turns'],
|
|
885
|
+
['Est. cost without routing', knownSavingsTurns.length ? fmtUSD(estimatedNoRoutingCost) : '—', savingsNote],
|
|
886
|
+
['Estimated savings', knownSavingsTurns.length ? fmtUSD(potentialSavings) : '—', 'self-computed, not reported by proxy']
|
|
887
|
+
].forEach(function (k) {
|
|
888
|
+
var c = el('div', 'kpi'); c.appendChild(el('div', 'kpi-label', k[0])); c.appendChild(el('div', 'kpi-value', k[1])); if (k[2]) c.appendChild(el('div', 'kpi-sub', k[2])); svGrid.appendChild(c);
|
|
889
|
+
});
|
|
890
|
+
host.appendChild(svGrid);
|
|
891
|
+
|
|
892
|
+
// Canonical tier vocabulary first (routing-headers.mjs), then any unrecognized value.
|
|
893
|
+
var TIER_ORDER = ['simple', 'middle', 'complex', 'reasoning'];
|
|
894
|
+
var TIER_COLORS = { simple: '#259F4C', middle: '#2297F6', complex: '#F5A534', reasoning: '#C084FC' };
|
|
895
|
+
function tierKey(p) { return p.routingTier || 'other'; }
|
|
896
|
+
// requestedAlias: the exact literal model/router alias active for this specific turn
|
|
897
|
+
// (cost-enricher.ts resolves it from Claude Code's own model-identity markers, correct
|
|
898
|
+
// turn-by-turn even across an in-session /model switch). Falls back to the header's
|
|
899
|
+
// coarser capable-tier ceiling (requestedModel) when this agent's log has no such marker.
|
|
900
|
+
function routerLabel(p) { return p.requestedAlias || p.requestedModel || 'unknown'; }
|
|
901
|
+
function tierLabel(t) { t = String(t || 'other'); return t.charAt(0).toUpperCase() + t.slice(1); }
|
|
902
|
+
function tierSort(a, b) {
|
|
903
|
+
var ia = TIER_ORDER.indexOf(a), ib = TIER_ORDER.indexOf(b);
|
|
904
|
+
if (ia === -1 && ib === -1) return a.localeCompare(b);
|
|
905
|
+
if (ia === -1) return 1;
|
|
906
|
+
if (ib === -1) return -1;
|
|
907
|
+
return ia - ib;
|
|
908
|
+
}
|
|
909
|
+
|
|
910
|
+
var routingRow = el('div', 'grid-2 mb16');
|
|
911
|
+
var routersCard = card('Routers', 'router/tier alias actually addressed, by request count');
|
|
912
|
+
var byRouter = groupBy(routedTurns, routerLabel);
|
|
913
|
+
var routerLabels = Array.from(byRouter.keys());
|
|
914
|
+
makeChart(canvasIn(routersCard._body), {
|
|
915
|
+
type: 'doughnut',
|
|
916
|
+
data: { labels: routerLabels, datasets: [{ data: routerLabels.map(function (k) { return byRouter.get(k).length; }), backgroundColor: routerLabels.map(function (_, i) { return PALETTE[i % PALETTE.length]; }), borderWidth: 0 }] },
|
|
917
|
+
options: { cutout: '60%', plugins: { legend: { position: 'bottom', labels: { boxWidth: 10, padding: 10 } }, tooltip: { callbacks: { label: function (c) { return c.label + ': ' + fmtNum(c.parsed) + ' requests'; } } } } }
|
|
918
|
+
});
|
|
919
|
+
routingRow.appendChild(routersCard);
|
|
920
|
+
|
|
921
|
+
var activityCard = card('Routing Activity', 'routed requests per day, stacked by tier');
|
|
922
|
+
// Cross-session day-bucketing needs a real epoch; per-session turn ordinals (used when
|
|
923
|
+
// a session's own timestamps are unavailable) don't align across sessions.
|
|
924
|
+
var timedRoutedTurns = routedTurns.filter(function (p) { return p.t > 1e11; });
|
|
925
|
+
if (timedRoutedTurns.length > 0) {
|
|
926
|
+
var byDay = new Map();
|
|
927
|
+
timedRoutedTurns.forEach(function (p) {
|
|
928
|
+
var k = dayKey(p.t), tier = tierKey(p);
|
|
929
|
+
if (!byDay.has(k)) byDay.set(k, {});
|
|
930
|
+
var o = byDay.get(k); o[tier] = (o[tier] || 0) + 1;
|
|
931
|
+
});
|
|
932
|
+
var actDays = Array.from(byDay.keys()).sort();
|
|
933
|
+
var actTiers = Array.from(new Set(timedRoutedTurns.map(tierKey))).sort(tierSort);
|
|
934
|
+
var actDatasets = actTiers.map(function (tier, i) {
|
|
935
|
+
return { label: tierLabel(tier), data: actDays.map(function (d) { return (byDay.get(d) || {})[tier] || 0; }), backgroundColor: TIER_COLORS[tier] || PALETTE[i % PALETTE.length] };
|
|
936
|
+
});
|
|
937
|
+
makeChart(canvasIn(activityCard._body), {
|
|
938
|
+
type: 'bar', data: { labels: actDays, datasets: actDatasets },
|
|
939
|
+
options: { plugins: { legend: { position: 'bottom', labels: { boxWidth: 10, padding: 10 } }, tooltip: { callbacks: { label: function (c) { return ' ' + c.dataset.label + ': ' + fmtNum(c.parsed.y); } } } }, scales: { x: { stacked: true, grid: { display: false }, ticks: { maxTicksLimit: 8 } }, y: { stacked: true, grid: { color: GRID }, ticks: { callback: function (v) { return fmtNum(v); } } } } }
|
|
940
|
+
});
|
|
941
|
+
} else { activityCard._body.appendChild(el('div', 'empty', 'No timestamped routed turns in view.')); }
|
|
942
|
+
routingRow.appendChild(activityCard);
|
|
943
|
+
host.appendChild(routingRow);
|
|
944
|
+
|
|
945
|
+
var pathsCard = card('Routing Paths', 'requested alias → routed model, with request volume and cost');
|
|
946
|
+
function pathKey(p) { return routerLabel(p) + '::' + (p.routedModel || p.model || '—') + '::' + tierKey(p); }
|
|
947
|
+
var byPath = groupBy(routedTurns, pathKey);
|
|
948
|
+
var pathRows = Array.from(byPath.values()).map(function (turns) {
|
|
949
|
+
var first = turns[0];
|
|
950
|
+
var known = turns.filter(function (p) { return p.estimatedMaxCostUSD != null; });
|
|
951
|
+
return {
|
|
952
|
+
router: routerLabel(first),
|
|
953
|
+
routedModel: first.routedModel || first.model || '—',
|
|
954
|
+
tier: tierLabel(tierKey(first)),
|
|
955
|
+
count: turns.length,
|
|
956
|
+
actual: sum(turns, function (p) { return p.costUSD || 0; }),
|
|
957
|
+
estMax: known.length ? sum(known, function (p) { return p.estimatedMaxCostUSD; }) : null,
|
|
958
|
+
savings: known.length ? sum(known, function (p) { return p.potentialSavingsUSD || 0; }) : null,
|
|
959
|
+
unknown: turns.length - known.length
|
|
960
|
+
};
|
|
961
|
+
}).sort(function (a, b) { return b.count - a.count; });
|
|
962
|
+
pathsCard._body.style.paddingTop = '0';
|
|
963
|
+
pathsCard._body.innerHTML = '<div class="table-wrapper">' + tableHTML(
|
|
964
|
+
['Router', 'Routed model', 'Tier', 'Requests', 'Actual cost', 'Est. cost (no routing)', 'Savings'],
|
|
965
|
+
pathRows.map(function (r) {
|
|
966
|
+
return [
|
|
967
|
+
'<span class="tag tag-sm">' + esc(r.router) + '</span>',
|
|
968
|
+
esc(r.routedModel),
|
|
969
|
+
esc(r.tier),
|
|
970
|
+
fmtNum(r.count),
|
|
971
|
+
fmtUSD(r.actual),
|
|
972
|
+
r.estMax == null ? '—' + (r.unknown ? ' (' + fmtNum(r.unknown) + ' unknown)' : '') : fmtUSD(r.estMax),
|
|
973
|
+
r.savings == null ? '—' : fmtUSD(r.savings)
|
|
974
|
+
];
|
|
975
|
+
}),
|
|
976
|
+
[false, false, false, true, true, true, true]
|
|
977
|
+
) + '</div>';
|
|
978
|
+
host.appendChild(pathsCard);
|
|
979
|
+
}
|
|
980
|
+
}
|
|
981
|
+
|
|
832
982
|
// per-agent coverage — answers "which tools' metrics are included?"
|
|
833
983
|
var cov = DATA.meta.coverage || [];
|
|
834
984
|
if (cov.length) {
|
|
@@ -875,14 +1025,15 @@
|
|
|
875
1025
|
var top = fs.slice().sort(function (a, b) { return b.costUSD - a.costUSD; }).slice(0, 10);
|
|
876
1026
|
topCard._body.style.paddingTop = '0';
|
|
877
1027
|
topCard._body.innerHTML = '<div class="table-wrapper">' + tableHTML(
|
|
878
|
-
['Session', 'Agent', 'Project', 'Input', 'Output', 'Cached', 'Total', 'Cost'],
|
|
1028
|
+
['Session', 'Name', 'Agent', 'Project', 'Input', 'Output', 'Cached', 'Total', 'Cost'],
|
|
879
1029
|
top.map(function (s) {
|
|
880
1030
|
return [esc(s.sessionId.slice(0, 8)),
|
|
1031
|
+
esc(sessTitle(s)),
|
|
881
1032
|
'<span class="tag tag-sm"' + (AGENT_LABELS[s.agentName] ? '' : ' style="text-transform:capitalize"') + '>' + esc(labelFor(s.agentName)) + '</span>',
|
|
882
1033
|
'<span title="' + esc(s.project) + '">' + esc(shortPath(s.project)) + '</span>',
|
|
883
1034
|
fmtTokens(tkIn(s)), fmtTokens(tkOut(s)), fmtTokens(tkCached(s)), fmtTokens(s.tokens ? s.tokens.total : 0), fmtUSD(s.costUSD)];
|
|
884
1035
|
}),
|
|
885
|
-
[false, false, false, true, true, true, true, true]) + '</div>';
|
|
1036
|
+
[false, false, false, false, true, true, true, true, true]) + '</div>';
|
|
886
1037
|
host.appendChild(topCard);
|
|
887
1038
|
};
|
|
888
1039
|
|
|
@@ -909,18 +1060,19 @@
|
|
|
909
1060
|
}
|
|
910
1061
|
var shown = list.slice(0, 300);
|
|
911
1062
|
holder.innerHTML = tableHTML(
|
|
912
|
-
['Date', 'Prompt', 'Agent', 'Project', 'Branch', 'Source', 'Turns', 'Net lines', 'Input', 'Output', 'Cached', 'Cost'],
|
|
1063
|
+
['Date', 'Name / Prompt', 'Agent', 'Project', 'Branch', 'Source', 'Turns', 'Routed %', 'Net lines', 'Input', 'Output', 'Cached', 'Cost'],
|
|
913
1064
|
shown.map(function (s) {
|
|
914
1065
|
var branchCell = s.branch ? '<span title="' + esc(s.branch) + '" style="max-width:90px;display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle">' + esc(s.branch) + '</span>' : '—';
|
|
915
|
-
var
|
|
1066
|
+
var sessionLabel = s.title || '';
|
|
1067
|
+
var promptCell = '<span title="' + esc(sessionLabel) + '" style="max-width:280px;display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle;color:var(--color-text-muted);font-size:12px">' + esc(truncStr(sessionLabel || '—', 80)) + '</span>';
|
|
916
1068
|
var sourceCell = '<span class="tag tag-sm">' + esc(s.sessionSource || 'Pure chat') + '</span>';
|
|
917
1069
|
return [new Date(s.startTime).toISOString().slice(0, 16).replace('T', ' '),
|
|
918
1070
|
promptCell,
|
|
919
1071
|
'<span class="tag tag-sm"' + (AGENT_LABELS[s.agentName] ? '' : ' style="text-transform:capitalize"') + '>' + esc(labelFor(s.agentName)) + '</span>',
|
|
920
1072
|
'<span title="' + esc(s.project) + '">' + esc(shortPath(s.project)) + '</span>', branchCell, sourceCell,
|
|
921
|
-
fmtNum(s.turns), fmtNum(s.netLines), fmtTokens(tkIn(s)), fmtTokens(tkOut(s)), fmtTokens(tkCached(s)), fmtUSD(s.costUSD)];
|
|
1073
|
+
fmtNum(s.turns), s.routedTurnsPct != null ? s.routedTurnsPct + '%' : '—', fmtNum(s.netLines), fmtTokens(tkIn(s)), fmtTokens(tkOut(s)), fmtTokens(tkCached(s)), fmtUSD(s.costUSD)];
|
|
922
1074
|
}),
|
|
923
|
-
[false, false, false, false, false, false, true, true, true, true, true, true],
|
|
1075
|
+
[false, false, false, false, false, false, true, true, true, true, true, true, true],
|
|
924
1076
|
shown.map(function (s) { return 'class="clickable" data-session="' + esc(s.sessionId) + '"'; }));
|
|
925
1077
|
if (list.length > 300) holder.appendChild(el('p', 'text-muted', '<span style="font-size:12px">Showing first 300 of ' + list.length + '.</span>'));
|
|
926
1078
|
}
|
|
@@ -1269,7 +1421,7 @@
|
|
|
1269
1421
|
}
|
|
1270
1422
|
/**
|
|
1271
1423
|
* Rebuild a single-session ReportPayload matching what
|
|
1272
|
-
* `codemie analytics --
|
|
1424
|
+
* `codemie analytics --export json --session <id>` writes:
|
|
1273
1425
|
* { meta, sessions: [record] }, with meta.totals/coverage scoped to this one session
|
|
1274
1426
|
* and userEmail / periodStart / periodEnd populated. Mirrors buildPayload()'s meta
|
|
1275
1427
|
* assembly (see report/payload-builder.ts) so the exported file is drop-in comparable.
|
|
@@ -1278,8 +1430,12 @@
|
|
|
1278
1430
|
var perModel = s.perModelCost || [];
|
|
1279
1431
|
var priced = perModel.length > 0;
|
|
1280
1432
|
var unpricedModels = [];
|
|
1433
|
+
var estimatedModels = [];
|
|
1434
|
+
var localModels = [];
|
|
1281
1435
|
perModel.forEach(function (m) {
|
|
1282
1436
|
if (m.unpriced && unpricedModels.indexOf(m.model) === -1) unpricedModels.push(m.model);
|
|
1437
|
+
if (m.estimated && estimatedModels.indexOf(m.model) === -1) estimatedModels.push(m.model);
|
|
1438
|
+
if (m.local && localModels.indexOf(m.model) === -1) localModels.push(m.model);
|
|
1283
1439
|
});
|
|
1284
1440
|
var meta = {
|
|
1285
1441
|
generatedAt: new Date().toISOString(),
|
|
@@ -1300,6 +1456,8 @@
|
|
|
1300
1456
|
pricedSessions: priced ? 1 : 0
|
|
1301
1457
|
},
|
|
1302
1458
|
unpricedModels: unpricedModels,
|
|
1459
|
+
estimatedModels: estimatedModels,
|
|
1460
|
+
localModels: localModels,
|
|
1303
1461
|
coverage: [{ agentName: s.agentName, total: 1, priced: priced ? 1 : 0, withLog: s.hadLog ? 1 : 0 }]
|
|
1304
1462
|
};
|
|
1305
1463
|
// Same conditional-spread semantics as buildPayload: omit rather than emit null.
|
|
@@ -1393,6 +1551,12 @@
|
|
|
1393
1551
|
['Duration', fmtTimelineDuration(s.durationMs || 0), fmtNum(s.durationMs) + ' ms'],
|
|
1394
1552
|
['Started', '<span class="mval-sm">' + esc(fmtWhen(s.startTime)) + '</span>', '']
|
|
1395
1553
|
];
|
|
1554
|
+
// routingCostKnown === false with no classifierCostUSD just means no classifier ran for
|
|
1555
|
+
// one of this session's routed turns (e.g. a heuristic-only decision) — not a measurement
|
|
1556
|
+
// gap, so it gets no row of its own here.
|
|
1557
|
+
if (s.classifierCostUSD != null) {
|
|
1558
|
+
costRows.push(['Routing (classifier)', s.classifierCostUSD > 0 ? fmtUSD(s.classifierCostUSD) : '—', 'included in cost']);
|
|
1559
|
+
}
|
|
1396
1560
|
if (s.premiumRequests !== undefined) {
|
|
1397
1561
|
costRows.push(['Premium requests', fmtNum(s.premiumRequests), 'provider billing unit']);
|
|
1398
1562
|
}
|
|
@@ -1403,11 +1567,12 @@
|
|
|
1403
1567
|
} else if (s.usagePartial) {
|
|
1404
1568
|
costCard._body.appendChild(el('div', 'text-muted', '<span style="font-size:12px">Partial usage — output tokens only; this session recorded no full rollup, so cost is understated.</span>'));
|
|
1405
1569
|
}
|
|
1406
|
-
var
|
|
1570
|
+
var tokRows = [
|
|
1407
1571
|
['Input', fmtTokens(t.input), ''], ['Output', fmtTokens(t.output), ''],
|
|
1408
1572
|
['Cache read', fmtTokens(t.cacheRead), ''], ['Cache create', fmtTokens(t.cacheCreation), ''],
|
|
1409
1573
|
['Total', fmtTokens(t.total), '']
|
|
1410
|
-
]
|
|
1574
|
+
];
|
|
1575
|
+
var tokCard = card('Token usage'); tokCard._body.appendChild(statsEl(tokRows));
|
|
1411
1576
|
var actCard = card('Activity'); actCard._body.appendChild(statsEl([
|
|
1412
1577
|
['Turns / API', fmtNum(s.turns), ''],
|
|
1413
1578
|
['Tool calls', fmtNum(s.toolCallsTotal), (s.toolCallsTotal ? Math.round((s.toolCallsSuccess / s.toolCallsTotal) * 100) + '% ok' : '')],
|
|
@@ -1471,7 +1636,103 @@
|
|
|
1471
1636
|
}
|
|
1472
1637
|
body.appendChild(growth);
|
|
1473
1638
|
|
|
1474
|
-
//
|
|
1639
|
+
// Model routing tier chart — bar height = tier level; everything else the turn carries
|
|
1640
|
+
// (requested/routed/classifier model, router type/score, decision cause, escalation) shows
|
|
1641
|
+
// in the tooltip only, since none of it is dense enough per turn to warrant its own series.
|
|
1642
|
+
var timeline = s.modelTimeline || [];
|
|
1643
|
+
var tlHasRouting = timeline.some(function (p) { return p.routingTier != null; });
|
|
1644
|
+
if (timeline.length >= 2 && tlHasRouting && window.Chart) {
|
|
1645
|
+
var tierCounts = timeline.reduce(function (acc, p) {
|
|
1646
|
+
if (p.routingTier === 'simple' || p.routingTier === 'middle' || p.routingTier === 'complex' || p.routingTier === 'reasoning') {
|
|
1647
|
+
acc.total++;
|
|
1648
|
+
if (p.routingTier === 'simple' || p.routingTier === 'middle') acc.simpleOrMiddle++;
|
|
1649
|
+
}
|
|
1650
|
+
return acc;
|
|
1651
|
+
}, { total: 0, simpleOrMiddle: 0 });
|
|
1652
|
+
var tierSubtitle = '';
|
|
1653
|
+
if (tierCounts.total > 0) {
|
|
1654
|
+
var simplePct = Math.round((tierCounts.simpleOrMiddle / tierCounts.total) * 100);
|
|
1655
|
+
tierSubtitle = simplePct + '% simple/middle · ' + (100 - simplePct) + '% complex/reasoning';
|
|
1656
|
+
}
|
|
1657
|
+
var tlCard = card('Routing', tierSubtitle);
|
|
1658
|
+
|
|
1659
|
+
var TIER_LEVELS = {
|
|
1660
|
+
'simple': 1,
|
|
1661
|
+
'middle': 2,
|
|
1662
|
+
'complex': 3,
|
|
1663
|
+
'reasoning': 4
|
|
1664
|
+
};
|
|
1665
|
+
var TIER_LABELS = {
|
|
1666
|
+
1: 'simple',
|
|
1667
|
+
2: 'middle',
|
|
1668
|
+
3: 'complex',
|
|
1669
|
+
4: 'reasoning'
|
|
1670
|
+
};
|
|
1671
|
+
function tierLevel(p) { return TIER_LEVELS[p.routingTier] || 0; }
|
|
1672
|
+
function tierName(p) { return p.routingTier || 'unknown'; }
|
|
1673
|
+
|
|
1674
|
+
var useEpoch = timeline[0].t > 1e12;
|
|
1675
|
+
var t0tl = timeline[0].t;
|
|
1676
|
+
var tlLabels = timeline.map(function (p, i) { return useEpoch ? fmtDuration(Math.max(0, p.t - t0tl)) : ('turn ' + (i + 1)); });
|
|
1677
|
+
var tlCv = canvasIn(tlCard._body, 180);
|
|
1678
|
+
var tierData = timeline.map(function (p) { return tierLevel(p); });
|
|
1679
|
+
// Color each bar by routingFamily:routingSource — whatever values the backend reports,
|
|
1680
|
+
// without enumerating them here: same hash-into-PALETTE scheme used for dispatch
|
|
1681
|
+
// kind/name above. Composite key so two families' same-named source (e.g. both reporting
|
|
1682
|
+
// 'judge') don't collide onto one color.
|
|
1683
|
+
function routingSourceColor(p) { return PALETTE[hashStr((p.routingFamily || 'unknown') + ':' + (p.routingSource || 'unknown')) % PALETTE.length]; }
|
|
1684
|
+
var tierColors = timeline.map(routingSourceColor);
|
|
1685
|
+
|
|
1686
|
+
makeModalChart(tlCv, {
|
|
1687
|
+
type: 'bar',
|
|
1688
|
+
data: { labels: tlLabels, datasets: [{
|
|
1689
|
+
data: tierData,
|
|
1690
|
+
backgroundColor: tierColors,
|
|
1691
|
+
borderRadius: 2,
|
|
1692
|
+
barPercentage: 0.72,
|
|
1693
|
+
categoryPercentage: 1.0,
|
|
1694
|
+
}] },
|
|
1695
|
+
options: {
|
|
1696
|
+
plugins: {
|
|
1697
|
+
legend: { display: false },
|
|
1698
|
+
tooltip: {
|
|
1699
|
+
callbacks: {
|
|
1700
|
+
title: function () { return ''; },
|
|
1701
|
+
label: function (item) {
|
|
1702
|
+
var p = timeline[item.dataIndex];
|
|
1703
|
+
var lines = [p.model, 'tier: ' + tierName(p)];
|
|
1704
|
+
if (p.requestedModel) lines.push('requested: ' + p.requestedModel);
|
|
1705
|
+
if (p.routedModel) lines.push('routed to: ' + p.routedModel);
|
|
1706
|
+
if (p.classifierModel) lines.push('classifier: ' + p.classifierModel);
|
|
1707
|
+
if (p.routerType) lines.push('router type: ' + p.routerType);
|
|
1708
|
+
if (p.routingSource) lines.push('source: ' + p.routingSource);
|
|
1709
|
+
if (p.decisionSource) lines.push('cause: ' + p.decisionSource);
|
|
1710
|
+
if (p.routingFamily) lines.push('family: ' + p.routingFamily);
|
|
1711
|
+
if (p.counterfactualModel) lines.push('counterfactual: ' + p.counterfactualModel);
|
|
1712
|
+
if (p.potentialSavingsUSD != null) lines.push('savings: ' + fmtUSD(p.potentialSavingsUSD));
|
|
1713
|
+
return lines;
|
|
1714
|
+
}
|
|
1715
|
+
}
|
|
1716
|
+
}
|
|
1717
|
+
},
|
|
1718
|
+
scales: {
|
|
1719
|
+
x: { grid: { display: false }, ticks: { maxTicksLimit: 12 } },
|
|
1720
|
+
y: {
|
|
1721
|
+
min: 0, max: 4,
|
|
1722
|
+
ticks: {
|
|
1723
|
+
stepSize: 1,
|
|
1724
|
+
callback: function (v) { return TIER_LABELS[v] || ''; }
|
|
1725
|
+
},
|
|
1726
|
+
grid: { color: GRID }
|
|
1727
|
+
}
|
|
1728
|
+
}
|
|
1729
|
+
}
|
|
1730
|
+
});
|
|
1731
|
+
|
|
1732
|
+
body.appendChild(tlCard);
|
|
1733
|
+
}
|
|
1734
|
+
|
|
1735
|
+
// Timeline — Gantt of all top-level agent, skill, and command dispatches.
|
|
1475
1736
|
var hasDispatches = (s.dispatches || []).length > 0;
|
|
1476
1737
|
var tlSubtitle = hasDispatches ? 'select any step for ancestry, total and orchestration usage, and timing evidence' : '';
|
|
1477
1738
|
var tlCard = card('Timeline', tlSubtitle);
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolves where analytics report files go for the `-o, --output <path>` flag.
|
|
3
|
+
* Pure path computation only — the caller is responsible for creating directories
|
|
4
|
+
* and actually writing the files. See docs/superpowers/tasks/2026-09-26-unify-analytics-cost-command/spec.md, section A.
|
|
5
|
+
*/
|
|
6
|
+
export type ExportFormat = 'html' | 'json' | 'both';
|
|
7
|
+
export interface OutputTargets {
|
|
8
|
+
html?: string;
|
|
9
|
+
json?: string;
|
|
10
|
+
isDefault: boolean;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Computes the html/json target paths for `--export <format> -o <output>`.
|
|
14
|
+
*
|
|
15
|
+
* - No `output`: default names in `cwd` (`getDefaultReportPath`/`getDefaultReportJsonPath`), `isDefault: true`.
|
|
16
|
+
* - Directory target (`output` ends with a path separator, or names an existing directory):
|
|
17
|
+
* each requested format goes inside it under its default name.
|
|
18
|
+
* - File target (anything else): `html`/`json` use the path as given; `both` strips a trailing
|
|
19
|
+
* `.html`/`.json` and writes `<base>.html` + `<base>.report.json`.
|
|
20
|
+
*/
|
|
21
|
+
export declare function resolveOutputTargets(format: ExportFormat, output: string | undefined, cwd: string, userEmail?: string): OutputTargets;
|
|
22
|
+
//# sourceMappingURL=output-target.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output-target.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/analytics/report/output-target.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAEpD,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;CACpB;AAWD;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,GAAG,EAAE,MAAM,EACX,SAAS,CAAC,EAAE,MAAM,GACjB,aAAa,CAkCf"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolves where analytics report files go for the `-o, --output <path>` flag.
|
|
3
|
+
* Pure path computation only — the caller is responsible for creating directories
|
|
4
|
+
* and actually writing the files. See docs/superpowers/tasks/2026-09-26-unify-analytics-cost-command/spec.md, section A.
|
|
5
|
+
*/
|
|
6
|
+
import { statSync } from 'node:fs';
|
|
7
|
+
import { resolve, sep } from 'node:path';
|
|
8
|
+
import { getDefaultReportJsonPath, getDefaultReportPath } from './report-generator.js';
|
|
9
|
+
/** True when `path` exists and is a directory. A missing path is treated as "not a directory". */
|
|
10
|
+
function isExistingDirectory(path) {
|
|
11
|
+
try {
|
|
12
|
+
return statSync(path).isDirectory();
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Computes the html/json target paths for `--export <format> -o <output>`.
|
|
20
|
+
*
|
|
21
|
+
* - No `output`: default names in `cwd` (`getDefaultReportPath`/`getDefaultReportJsonPath`), `isDefault: true`.
|
|
22
|
+
* - Directory target (`output` ends with a path separator, or names an existing directory):
|
|
23
|
+
* each requested format goes inside it under its default name.
|
|
24
|
+
* - File target (anything else): `html`/`json` use the path as given; `both` strips a trailing
|
|
25
|
+
* `.html`/`.json` and writes `<base>.html` + `<base>.report.json`.
|
|
26
|
+
*/
|
|
27
|
+
export function resolveOutputTargets(format, output, cwd, userEmail) {
|
|
28
|
+
const wantsHtml = format === 'html' || format === 'both';
|
|
29
|
+
const wantsJson = format === 'json' || format === 'both';
|
|
30
|
+
if (output === undefined) {
|
|
31
|
+
return {
|
|
32
|
+
...(wantsHtml && { html: getDefaultReportPath(cwd, userEmail) }),
|
|
33
|
+
...(wantsJson && { json: getDefaultReportJsonPath(cwd, userEmail) }),
|
|
34
|
+
isDefault: true,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
const resolvedPath = resolve(cwd, output);
|
|
38
|
+
const isDirectoryTarget = output.endsWith(sep) || output.endsWith('/') || isExistingDirectory(resolvedPath);
|
|
39
|
+
if (isDirectoryTarget) {
|
|
40
|
+
return {
|
|
41
|
+
...(wantsHtml && { html: getDefaultReportPath(resolvedPath, userEmail) }),
|
|
42
|
+
...(wantsJson && { json: getDefaultReportJsonPath(resolvedPath, userEmail) }),
|
|
43
|
+
isDefault: false,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
if (format === 'both') {
|
|
47
|
+
const base = resolvedPath.replace(/\.(html|json)$/i, '');
|
|
48
|
+
return { html: `${base}.html`, json: `${base}.report.json`, isDefault: false };
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
...(wantsHtml && { html: resolvedPath }),
|
|
52
|
+
...(wantsJson && { json: resolvedPath }),
|
|
53
|
+
isDefault: false,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=output-target.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output-target.js","sourceRoot":"","sources":["../../../../../src/cli/commands/analytics/report/output-target.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAUvF,kGAAkG;AAClG,SAAS,mBAAmB,CAAC,IAAY;IACvC,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAoB,EACpB,MAA0B,EAC1B,GAAW,EACX,SAAkB;IAElB,MAAM,SAAS,GAAG,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,MAAM,CAAC;IACzD,MAAM,SAAS,GAAG,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,MAAM,CAAC;IAEzD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO;YACL,GAAG,CAAC,SAAS,IAAI,EAAE,IAAI,EAAE,oBAAoB,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,CAAC;YAChE,GAAG,CAAC,SAAS,IAAI,EAAE,IAAI,EAAE,wBAAwB,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,CAAC;YACpE,SAAS,EAAE,IAAI;SAChB,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC1C,MAAM,iBAAiB,GACrB,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,mBAAmB,CAAC,YAAY,CAAC,CAAC;IAEpF,IAAI,iBAAiB,EAAE,CAAC;QACtB,OAAO;YACL,GAAG,CAAC,SAAS,IAAI,EAAE,IAAI,EAAE,oBAAoB,CAAC,YAAY,EAAE,SAAS,CAAC,EAAE,CAAC;YACzE,GAAG,CAAC,SAAS,IAAI,EAAE,IAAI,EAAE,wBAAwB,CAAC,YAAY,EAAE,SAAS,CAAC,EAAE,CAAC;YAC7E,SAAS,EAAE,KAAK;SACjB,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;QACzD,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,cAAc,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IACjF,CAAC;IAED,OAAO;QACL,GAAG,CAAC,SAAS,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;QACxC,GAAG,CAAC,SAAS,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;QACxC,SAAS,EAAE,KAAK;KACjB,CAAC;AACJ,CAAC"}
|
|
@@ -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,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,
|
|
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,CA6Kf"}
|
|
@@ -146,6 +146,10 @@ export function buildPayload(root, costIndex, summary, ctx) {
|
|
|
146
146
|
...(cost?.costSeries && cost.costSeries.length ? { costSeries: cost.costSeries } : {}),
|
|
147
147
|
...(dispatches.length ? { dispatches } : {}),
|
|
148
148
|
...projectSnapshot(cost),
|
|
149
|
+
...(cost?.modelTimeline && cost.modelTimeline.length ? { modelTimeline: cost.modelTimeline } : {}),
|
|
150
|
+
...(cost?.classifierCostUSD != null ? { classifierCostUSD: cost.classifierCostUSD } : {}),
|
|
151
|
+
...(cost?.routingCostKnown != null ? { routingCostKnown: cost.routingCostKnown } : {}),
|
|
152
|
+
...(cost?.routedTurnsPct != null ? { routedTurnsPct: cost.routedTurnsPct } : {}),
|
|
149
153
|
skillInvocations,
|
|
150
154
|
agentInvocations,
|
|
151
155
|
commandInvocations,
|
|
@@ -197,6 +201,8 @@ export function buildPayload(root, costIndex, summary, ctx) {
|
|
|
197
201
|
pricedSessions,
|
|
198
202
|
},
|
|
199
203
|
unpricedModels: summary.unpricedModels,
|
|
204
|
+
estimatedModels: summary.estimatedModels,
|
|
205
|
+
localModels: summary.localModels ?? [],
|
|
200
206
|
coverage: [...coverageMap.values()].sort((a, b) => b.total - a.total),
|
|
201
207
|
...(ctx.userEmail !== undefined && { userEmail: ctx.userEmail }),
|
|
202
208
|
...(ctx.periodStart !== undefined
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payload-builder.js","sourceRoot":"","sources":["../../../../../src/cli/commands/analytics/report/payload-builder.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"payload-builder.js","sourceRoot":"","sources":["../../../../../src/cli/commands/analytics/report/payload-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -41,7 +41,7 @@ export interface ReportWriteResult {
|
|
|
41
41
|
* Writes a report via `write(path)`. If the preferred location is unwritable
|
|
42
42
|
* (drive root, read-only volume) AND `allowFallback` is true, retries the same
|
|
43
43
|
* filename under the user's home dir, then the OS temp dir, and reports where it
|
|
44
|
-
* landed. With `allowFallback` false (an explicit
|
|
44
|
+
* landed. With `allowFallback` false (an explicit `-o, --output`) or for any
|
|
45
45
|
* non-permission error, the original error propagates unchanged.
|
|
46
46
|
*/
|
|
47
47
|
export declare function writeReportWithFallback(write: (path: string) => void, preferredPath: string, allowFallback: boolean): ReportWriteResult;
|
|
@@ -76,7 +76,7 @@ export function isUnwritableLocationError(err) {
|
|
|
76
76
|
* Writes a report via `write(path)`. If the preferred location is unwritable
|
|
77
77
|
* (drive root, read-only volume) AND `allowFallback` is true, retries the same
|
|
78
78
|
* filename under the user's home dir, then the OS temp dir, and reports where it
|
|
79
|
-
* landed. With `allowFallback` false (an explicit
|
|
79
|
+
* landed. With `allowFallback` false (an explicit `-o, --output`) or for any
|
|
80
80
|
* non-permission error, the original error propagates unchanged.
|
|
81
81
|
*/
|
|
82
82
|
export function writeReportWithFallback(write, preferredPath, allowFallback) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Programmatic, side-effect-free session-scoped analytics report generator.
|
|
3
|
-
* Composes the same building blocks the `analytics --
|
|
3
|
+
* Composes the same building blocks the `analytics --export json`
|
|
4
4
|
* CLI path uses, but prints nothing and never calls process.exit — safe to invoke
|
|
5
5
|
* from agent session finalization. Failures propagate to the caller (who logs them).
|
|
6
6
|
*/
|
|
@@ -9,8 +9,6 @@ export interface SessionReportOptions {
|
|
|
9
9
|
sessionId: string;
|
|
10
10
|
/** Absolute or cwd-relative output path for the JSON report. Defaults to `docs/codemie/analytics/codemie-analytics-[email-]<sessionId>.json` relative to cwd. */
|
|
11
11
|
outputPath?: string;
|
|
12
|
-
/** Include native agent-log discovery (default true). */
|
|
13
|
-
scanNative?: boolean;
|
|
14
12
|
/** User email to embed in report metadata and default filename. */
|
|
15
13
|
userEmail?: string;
|
|
16
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-report.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/analytics/report/session-report.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,MAAM,WAAW,oBAAoB;IACnC,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,iKAAiK;IACjK,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,
|
|
1
|
+
{"version":3,"file":"session-report.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/analytics/report/session-report.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,MAAM,WAAW,oBAAoB;IACnC,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,iKAAiK;IACjK,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,oEAAoE;IACpE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA0CvG"}
|