@codemieai/code 0.15.3 → 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.
Files changed (173) hide show
  1. package/dist/agents/core/AgentCLI.d.ts.map +1 -1
  2. package/dist/agents/core/AgentCLI.js +9 -0
  3. package/dist/agents/core/AgentCLI.js.map +1 -1
  4. package/dist/agents/core/BaseAgentAdapter.d.ts.map +1 -1
  5. package/dist/agents/core/BaseAgentAdapter.js +34 -9
  6. package/dist/agents/core/BaseAgentAdapter.js.map +1 -1
  7. package/dist/agents/plugins/claude/claude.models.d.ts +58 -0
  8. package/dist/agents/plugins/claude/claude.models.d.ts.map +1 -1
  9. package/dist/agents/plugins/claude/claude.models.js +196 -10
  10. package/dist/agents/plugins/claude/claude.models.js.map +1 -1
  11. package/dist/agents/plugins/claude/claude.plugin.d.ts.map +1 -1
  12. package/dist/agents/plugins/claude/claude.plugin.js +147 -45
  13. package/dist/agents/plugins/claude/claude.plugin.js.map +1 -1
  14. package/dist/agents/plugins/claude/plugin/statusline.bundle.mjs +729 -0
  15. package/dist/agents/plugins/claude/statusline-installer.d.ts +1 -1
  16. package/dist/agents/plugins/claude/statusline-installer.d.ts.map +1 -1
  17. package/dist/agents/plugins/claude/statusline-installer.js +41 -3
  18. package/dist/agents/plugins/claude/statusline-installer.js.map +1 -1
  19. package/dist/agents/plugins/codex/codex-models.d.ts.map +1 -1
  20. package/dist/agents/plugins/codex/codex-models.js +109 -8
  21. package/dist/agents/plugins/codex/codex-models.js.map +1 -1
  22. package/dist/agents/plugins/codex/codex.correlation.d.ts +39 -0
  23. package/dist/agents/plugins/codex/codex.correlation.d.ts.map +1 -0
  24. package/dist/agents/plugins/codex/codex.correlation.js +150 -0
  25. package/dist/agents/plugins/codex/codex.correlation.js.map +1 -0
  26. package/dist/agents/plugins/codex/codex.plugin.d.ts.map +1 -1
  27. package/dist/agents/plugins/codex/codex.plugin.js +8 -40
  28. package/dist/agents/plugins/codex/codex.plugin.js.map +1 -1
  29. package/dist/agents/plugins/kimi/kimi.env-model.d.ts +27 -0
  30. package/dist/agents/plugins/kimi/kimi.env-model.d.ts.map +1 -0
  31. package/dist/agents/plugins/kimi/kimi.env-model.js +52 -0
  32. package/dist/agents/plugins/kimi/kimi.env-model.js.map +1 -0
  33. package/dist/agents/plugins/kimi/kimi.session.d.ts +6 -0
  34. package/dist/agents/plugins/kimi/kimi.session.d.ts.map +1 -1
  35. package/dist/agents/plugins/kimi/kimi.session.js +24 -2
  36. package/dist/agents/plugins/kimi/kimi.session.js.map +1 -1
  37. package/dist/agents/plugins/opencode/opencode-dynamic-models.js +1 -1
  38. package/dist/agents/plugins/opencode/opencode-dynamic-models.js.map +1 -1
  39. package/dist/cli/commands/analytics/cost/cost-enricher.d.ts +19 -2
  40. package/dist/cli/commands/analytics/cost/cost-enricher.d.ts.map +1 -1
  41. package/dist/cli/commands/analytics/cost/cost-enricher.js +171 -14
  42. package/dist/cli/commands/analytics/cost/cost-enricher.js.map +1 -1
  43. package/dist/cli/commands/analytics/cost/local-models.d.ts +15 -0
  44. package/dist/cli/commands/analytics/cost/local-models.d.ts.map +1 -0
  45. package/dist/cli/commands/analytics/cost/local-models.js +21 -0
  46. package/dist/cli/commands/analytics/cost/local-models.js.map +1 -0
  47. package/dist/cli/commands/analytics/cost/types.d.ts +60 -0
  48. package/dist/cli/commands/analytics/cost/types.d.ts.map +1 -1
  49. package/dist/cli/commands/analytics/cost/types.js.map +1 -1
  50. package/dist/cli/commands/analytics/cost/usage-readers.d.ts +25 -2
  51. package/dist/cli/commands/analytics/cost/usage-readers.d.ts.map +1 -1
  52. package/dist/cli/commands/analytics/cost/usage-readers.js +61 -3
  53. package/dist/cli/commands/analytics/cost/usage-readers.js.map +1 -1
  54. package/dist/cli/commands/analytics/formatter.d.ts +11 -0
  55. package/dist/cli/commands/analytics/formatter.d.ts.map +1 -1
  56. package/dist/cli/commands/analytics/formatter.js +28 -0
  57. package/dist/cli/commands/analytics/formatter.js.map +1 -1
  58. package/dist/cli/commands/analytics/index.d.ts.map +1 -1
  59. package/dist/cli/commands/analytics/index.js +70 -73
  60. package/dist/cli/commands/analytics/index.js.map +1 -1
  61. package/dist/cli/commands/analytics/otel-loader.d.ts.map +1 -1
  62. package/dist/cli/commands/analytics/otel-loader.js +60 -14
  63. package/dist/cli/commands/analytics/otel-loader.js.map +1 -1
  64. package/dist/cli/commands/analytics/otel-pricing.d.ts +38 -0
  65. package/dist/cli/commands/analytics/otel-pricing.d.ts.map +1 -0
  66. package/dist/cli/commands/analytics/otel-pricing.js +33 -0
  67. package/dist/cli/commands/analytics/otel-pricing.js.map +1 -0
  68. package/dist/cli/commands/analytics/report/client/app.js +279 -18
  69. package/dist/cli/commands/analytics/report/output-target.d.ts +22 -0
  70. package/dist/cli/commands/analytics/report/output-target.d.ts.map +1 -0
  71. package/dist/cli/commands/analytics/report/output-target.js +56 -0
  72. package/dist/cli/commands/analytics/report/output-target.js.map +1 -0
  73. package/dist/cli/commands/analytics/report/payload-builder.d.ts.map +1 -1
  74. package/dist/cli/commands/analytics/report/payload-builder.js +6 -0
  75. package/dist/cli/commands/analytics/report/payload-builder.js.map +1 -1
  76. package/dist/cli/commands/analytics/report/report-generator.d.ts +1 -1
  77. package/dist/cli/commands/analytics/report/report-generator.js +1 -1
  78. package/dist/cli/commands/analytics/report/session-report.d.ts +1 -3
  79. package/dist/cli/commands/analytics/report/session-report.d.ts.map +1 -1
  80. package/dist/cli/commands/analytics/report/session-report.js +1 -3
  81. package/dist/cli/commands/analytics/report/session-report.js.map +1 -1
  82. package/dist/cli/commands/analytics/report/template.html +6 -6
  83. package/dist/cli/commands/analytics/report/types.d.ts +17 -1
  84. package/dist/cli/commands/analytics/report/types.d.ts.map +1 -1
  85. package/dist/cli/commands/analytics/sources/sessions-source.d.ts.map +1 -1
  86. package/dist/cli/commands/analytics/sources/sessions-source.js +9 -11
  87. package/dist/cli/commands/analytics/sources/sessions-source.js.map +1 -1
  88. package/dist/cli/commands/analytics/sources/types.d.ts +0 -2
  89. package/dist/cli/commands/analytics/sources/types.d.ts.map +1 -1
  90. package/dist/cli/commands/analytics/types.d.ts +8 -8
  91. package/dist/cli/commands/analytics/types.d.ts.map +1 -1
  92. package/dist/cli/commands/models.d.ts.map +1 -1
  93. package/dist/cli/commands/models.js +16 -3
  94. package/dist/cli/commands/models.js.map +1 -1
  95. package/dist/cli/commands/proxy/connect-orchestrator.js +1 -1
  96. package/dist/cli/commands/proxy/connect-orchestrator.js.map +1 -1
  97. package/dist/cli/commands/proxy/connectors/tenant-catalog.d.ts +16 -4
  98. package/dist/cli/commands/proxy/connectors/tenant-catalog.d.ts.map +1 -1
  99. package/dist/cli/commands/proxy/connectors/tenant-catalog.js +42 -14
  100. package/dist/cli/commands/proxy/connectors/tenant-catalog.js.map +1 -1
  101. package/dist/cli/commands/proxy/connectors/vscode-models.d.ts +18 -0
  102. package/dist/cli/commands/proxy/connectors/vscode-models.d.ts.map +1 -1
  103. package/dist/cli/commands/proxy/connectors/vscode-models.js +58 -0
  104. package/dist/cli/commands/proxy/connectors/vscode-models.js.map +1 -1
  105. package/dist/cli/commands/proxy/connectors/vscode.d.ts +2 -2
  106. package/dist/cli/commands/proxy/connectors/vscode.d.ts.map +1 -1
  107. package/dist/cli/commands/proxy/connectors/vscode.js +27 -38
  108. package/dist/cli/commands/proxy/connectors/vscode.js.map +1 -1
  109. package/dist/providers/core/codemie-auth-helpers.d.ts.map +1 -1
  110. package/dist/providers/core/codemie-auth-helpers.js +6 -1
  111. package/dist/providers/core/codemie-auth-helpers.js.map +1 -1
  112. package/dist/providers/core/default-agent-hooks.d.ts.map +1 -1
  113. package/dist/providers/core/default-agent-hooks.js +9 -0
  114. package/dist/providers/core/default-agent-hooks.js.map +1 -1
  115. package/dist/providers/plugins/bedrock/bedrock.template.d.ts.map +1 -1
  116. package/dist/providers/plugins/bedrock/bedrock.template.js +5 -31
  117. package/dist/providers/plugins/bedrock/bedrock.template.js.map +1 -1
  118. package/dist/providers/plugins/sso/proxy/plugins/background-request-normalizer.plugin.d.ts +44 -0
  119. package/dist/providers/plugins/sso/proxy/plugins/background-request-normalizer.plugin.d.ts.map +1 -0
  120. package/dist/providers/plugins/sso/proxy/plugins/background-request-normalizer.plugin.js +106 -0
  121. package/dist/providers/plugins/sso/proxy/plugins/background-request-normalizer.plugin.js.map +1 -0
  122. package/dist/providers/plugins/sso/proxy/plugins/index.d.ts +3 -1
  123. package/dist/providers/plugins/sso/proxy/plugins/index.d.ts.map +1 -1
  124. package/dist/providers/plugins/sso/proxy/plugins/index.js +5 -1
  125. package/dist/providers/plugins/sso/proxy/plugins/index.js.map +1 -1
  126. package/dist/providers/plugins/sso/proxy/plugins/routing-header-injector.plugin.d.ts +67 -0
  127. package/dist/providers/plugins/sso/proxy/plugins/routing-header-injector.plugin.d.ts.map +1 -0
  128. package/dist/providers/plugins/sso/proxy/plugins/routing-header-injector.plugin.js +203 -0
  129. package/dist/providers/plugins/sso/proxy/plugins/routing-header-injector.plugin.js.map +1 -0
  130. package/dist/providers/plugins/sso/sso.http-client.d.ts +95 -0
  131. package/dist/providers/plugins/sso/sso.http-client.d.ts.map +1 -1
  132. package/dist/providers/plugins/sso/sso.http-client.js +79 -0
  133. package/dist/providers/plugins/sso/sso.http-client.js.map +1 -1
  134. package/dist/providers/plugins/sso/sso.models.d.ts +7 -0
  135. package/dist/providers/plugins/sso/sso.models.d.ts.map +1 -1
  136. package/dist/providers/plugins/sso/sso.models.js +22 -14
  137. package/dist/providers/plugins/sso/sso.models.js.map +1 -1
  138. package/dist/utils/bedrock-pricing.mjs +111 -0
  139. package/dist/utils/cli-updater.d.ts.map +1 -1
  140. package/dist/utils/cli-updater.js +32 -7
  141. package/dist/utils/cli-updater.js.map +1 -1
  142. package/dist/utils/credential-crypto.d.ts +51 -0
  143. package/dist/utils/credential-crypto.d.ts.map +1 -0
  144. package/dist/utils/credential-crypto.js +96 -0
  145. package/dist/utils/credential-crypto.js.map +1 -0
  146. package/dist/utils/model-normalizer.d.ts +6 -0
  147. package/dist/utils/model-normalizer.d.ts.map +1 -1
  148. package/dist/utils/model-normalizer.js +37 -19
  149. package/dist/utils/model-normalizer.js.map +1 -1
  150. package/dist/utils/price-resolution.d.ts +42 -0
  151. package/dist/utils/price-resolution.d.ts.map +1 -0
  152. package/dist/utils/price-resolution.js +112 -0
  153. package/dist/utils/price-resolution.js.map +1 -0
  154. package/dist/utils/pricing.d.ts +65 -6
  155. package/dist/utils/pricing.d.ts.map +1 -1
  156. package/dist/utils/pricing.js +91 -117
  157. package/dist/utils/pricing.js.map +1 -1
  158. package/dist/utils/pricing.json +201 -20
  159. package/dist/utils/routing-headers.mjs +104 -0
  160. package/dist/utils/security.d.ts +0 -32
  161. package/dist/utils/security.d.ts.map +1 -1
  162. package/dist/utils/security.js +20 -102
  163. package/dist/utils/security.js.map +1 -1
  164. package/package.json +4 -2
  165. package/scripts/bundle-statusline.mjs +37 -0
  166. package/scripts/copy-plugins.js +19 -2
  167. package/src/utils/tips.json +9 -9
  168. package/dist/agents/plugins/claude/plugin/__tests__/statusline.test.ts +0 -323
  169. package/dist/agents/plugins/claude/plugin/statusline.mjs +0 -282
  170. package/dist/cli/commands/analytics/exporter.d.ts +0 -20
  171. package/dist/cli/commands/analytics/exporter.d.ts.map +0 -1
  172. package/dist/cli/commands/analytics/exporter.js +0 -91
  173. 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: 8 }) : '—';
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 { '&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;' }[c]; }); }
63
63
  function shortPath(p) { var parts = String(p || '').split('/'); return parts[parts.length - 1] || p; }
64
- // Human-readable session label: the cleaned first-prompt title, falling back to a short id.
65
- function sessTitle(s) { return (s && s.title && s.title.trim()) ? s.title.trim() : ('#' + String((s && s.sessionId) || '').slice(0, 8)); }
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
- var msg = 'Priced ' + priced + ' of ' + totalSessions + ' sessions with recoverable token usage. '
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 promptCell = '<span title="' + esc(s.title || '') + '" 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(s.title || '—', 80)) + '</span>';
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 --report --report-format json --session <id>` writes:
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 tokCard = card('Token usage'); tokCard._body.appendChild(statsEl([
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
- // Timeline — every recorded invocation with exact parent/owner links when available.
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,CAuKf"}
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 `--report-output`) or for any
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 `--report-output`) or for any
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 --report --report-format json`
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,yDAAyD;IACzD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,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,CA4CvG"}
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"}