@codemieai/code 0.7.0 → 0.8.0
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/plugins/claude/claude.plugin.js +3 -3
- package/dist/cli/commands/analytics/aggregator.js +1 -1
- package/dist/cli/commands/analytics/aggregator.js.map +1 -1
- package/dist/cli/commands/analytics/cost/cost-enricher.d.ts.map +1 -1
- package/dist/cli/commands/analytics/cost/cost-enricher.js +45 -9
- package/dist/cli/commands/analytics/cost/cost-enricher.js.map +1 -1
- package/dist/cli/commands/analytics/cost/pricing.d.ts +1 -0
- package/dist/cli/commands/analytics/cost/pricing.d.ts.map +1 -1
- package/dist/cli/commands/analytics/cost/pricing.js +66 -0
- package/dist/cli/commands/analytics/cost/pricing.js.map +1 -1
- package/dist/cli/commands/analytics/cost/pricing.json +8 -1
- package/dist/cli/commands/analytics/cost/usage-readers.d.ts +2 -0
- package/dist/cli/commands/analytics/cost/usage-readers.d.ts.map +1 -1
- package/dist/cli/commands/analytics/cost/usage-readers.js +36 -2
- package/dist/cli/commands/analytics/cost/usage-readers.js.map +1 -1
- package/dist/cli/commands/analytics/data-loader.d.ts +2 -3
- package/dist/cli/commands/analytics/data-loader.d.ts.map +1 -1
- package/dist/cli/commands/analytics/index.d.ts.map +1 -1
- package/dist/cli/commands/analytics/index.js +137 -134
- package/dist/cli/commands/analytics/index.js.map +1 -1
- package/dist/cli/commands/analytics/otel-loader.d.ts +97 -0
- package/dist/cli/commands/analytics/otel-loader.d.ts.map +1 -0
- package/dist/cli/commands/analytics/otel-loader.js +504 -0
- package/dist/cli/commands/analytics/otel-loader.js.map +1 -0
- package/dist/cli/commands/analytics/report/client/app.js +56 -25
- package/dist/cli/commands/analytics/report/payload-builder.d.ts.map +1 -1
- package/dist/cli/commands/analytics/report/payload-builder.js +8 -3
- package/dist/cli/commands/analytics/report/payload-builder.js.map +1 -1
- package/dist/cli/commands/analytics/report/session-source-detector.d.ts +29 -0
- package/dist/cli/commands/analytics/report/session-source-detector.d.ts.map +1 -0
- package/dist/cli/commands/analytics/report/session-source-detector.js +64 -0
- package/dist/cli/commands/analytics/report/session-source-detector.js.map +1 -0
- package/dist/cli/commands/analytics/report/template.html +6 -2
- package/dist/cli/commands/analytics/report/types.d.ts +2 -0
- package/dist/cli/commands/analytics/report/types.d.ts.map +1 -1
- package/dist/cli/commands/analytics/sources/otel-source.d.ts +12 -0
- package/dist/cli/commands/analytics/sources/otel-source.d.ts.map +1 -0
- package/dist/cli/commands/analytics/sources/otel-source.js +44 -0
- package/dist/cli/commands/analytics/sources/otel-source.js.map +1 -0
- package/dist/cli/commands/analytics/sources/sessions-source.d.ts +10 -0
- package/dist/cli/commands/analytics/sources/sessions-source.d.ts.map +1 -0
- package/dist/cli/commands/analytics/sources/sessions-source.js +27 -0
- package/dist/cli/commands/analytics/sources/sessions-source.js.map +1 -0
- package/dist/cli/commands/analytics/sources/types.d.ts +38 -0
- package/dist/cli/commands/analytics/sources/types.d.ts.map +1 -0
- package/dist/cli/commands/analytics/sources/types.js +2 -0
- package/dist/cli/commands/analytics/sources/types.js.map +1 -0
- package/dist/cli/commands/analytics/types.d.ts +7 -0
- package/dist/cli/commands/analytics/types.d.ts.map +1 -1
- package/dist/cli/commands/hook.d.ts.map +1 -1
- package/dist/cli/commands/hook.js +33 -0
- package/dist/cli/commands/hook.js.map +1 -1
- package/dist/cli/commands/proxy/connectors/desktop.d.ts +45 -5
- package/dist/cli/commands/proxy/connectors/desktop.d.ts.map +1 -1
- package/dist/cli/commands/proxy/connectors/desktop.js +149 -15
- package/dist/cli/commands/proxy/connectors/desktop.js.map +1 -1
- package/dist/cli/commands/proxy/connectors/managed-mcp-remote.d.ts +20 -0
- package/dist/cli/commands/proxy/connectors/managed-mcp-remote.d.ts.map +1 -0
- package/dist/cli/commands/proxy/connectors/managed-mcp-remote.js +94 -0
- package/dist/cli/commands/proxy/connectors/managed-mcp-remote.js.map +1 -0
- package/dist/cli/commands/proxy/index.d.ts.map +1 -1
- package/dist/cli/commands/proxy/index.js +14 -2
- package/dist/cli/commands/proxy/index.js.map +1 -1
- package/dist/cli/commands/skills/add.d.ts.map +1 -1
- package/dist/cli/commands/skills/add.js +4 -0
- package/dist/cli/commands/skills/add.js.map +1 -1
- package/dist/providers/plugins/sso/proxy/sso.proxy.d.ts +6 -0
- package/dist/providers/plugins/sso/proxy/sso.proxy.d.ts.map +1 -1
- package/dist/providers/plugins/sso/proxy/sso.proxy.js +24 -0
- package/dist/providers/plugins/sso/proxy/sso.proxy.js.map +1 -1
- package/dist/utils/config.d.ts +14 -0
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +41 -6
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/errors.d.ts +3 -0
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +6 -0
- package/dist/utils/errors.js.map +1 -1
- package/package.json +3 -3
- package/scripts/validate-secrets.js +75 -20
|
@@ -802,18 +802,22 @@
|
|
|
802
802
|
var list = fs.slice().sort(function (a, b) { return b.startTime - a.startTime; });
|
|
803
803
|
if (q) {
|
|
804
804
|
var ql = q.toLowerCase();
|
|
805
|
-
list = list.filter(function (s) { return (s.sessionId + ' ' + s.agentName + ' ' + s.project + ' ' + s.branch).toLowerCase().indexOf(ql) >= 0; });
|
|
805
|
+
list = list.filter(function (s) { return (s.sessionId + ' ' + s.agentName + ' ' + s.project + ' ' + s.branch + ' ' + (s.title || '') + ' ' + (s.sessionSource || '')).toLowerCase().indexOf(ql) >= 0; });
|
|
806
806
|
}
|
|
807
807
|
var shown = list.slice(0, 300);
|
|
808
808
|
holder.innerHTML = tableHTML(
|
|
809
|
-
['Date', 'Agent', 'Project', 'Branch', 'Turns', 'Net lines', 'Input', 'Output', 'Cached', 'Cost'],
|
|
809
|
+
['Date', 'Prompt', 'Agent', 'Project', 'Branch', 'Source', 'Turns', 'Net lines', 'Input', 'Output', 'Cached', 'Cost'],
|
|
810
810
|
shown.map(function (s) {
|
|
811
|
+
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>' : '—';
|
|
812
|
+
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>';
|
|
813
|
+
var sourceCell = '<span class="tag tag-sm">' + esc(s.sessionSource || 'Pure chat') + '</span>';
|
|
811
814
|
return [new Date(s.startTime).toISOString().slice(0, 16).replace('T', ' '),
|
|
815
|
+
promptCell,
|
|
812
816
|
'<span class="tag tag-sm" style="text-transform:capitalize">' + esc(s.agentName) + '</span>',
|
|
813
|
-
'<span title="' + esc(s.project) + '">' + esc(shortPath(s.project)) + '</span>',
|
|
817
|
+
'<span title="' + esc(s.project) + '">' + esc(shortPath(s.project)) + '</span>', branchCell, sourceCell,
|
|
814
818
|
fmtNum(s.turns), fmtNum(s.netLines), fmtTokens(tkIn(s)), fmtTokens(tkOut(s)), fmtTokens(tkCached(s)), fmtUSD(s.costUSD)];
|
|
815
819
|
}),
|
|
816
|
-
[false, false, false, false, true, true, true, true, true, true],
|
|
820
|
+
[false, false, false, false, false, false, true, true, true, true, true, true],
|
|
817
821
|
shown.map(function (s) { return 'class="clickable" data-session="' + esc(s.sessionId) + '"'; }));
|
|
818
822
|
if (list.length > 300) holder.appendChild(el('p', 'text-muted', '<span style="font-size:12px">Showing first 300 of ' + list.length + '.</span>'));
|
|
819
823
|
}
|
|
@@ -900,7 +904,7 @@
|
|
|
900
904
|
return Math.floor(ms / 3600000) + 'h ' + Math.round((ms % 3600000) / 60000) + 'm';
|
|
901
905
|
}
|
|
902
906
|
// Side panel content for a selected timeline step.
|
|
903
|
-
function tlDetailEl(d) {
|
|
907
|
+
function tlDetailEl(d, sessionStart) {
|
|
904
908
|
var panel = el('div', '');
|
|
905
909
|
if (!d) {
|
|
906
910
|
panel.appendChild(el('div', 'tl-side-empty', 'Click a timeline step to see details.'));
|
|
@@ -914,10 +918,12 @@
|
|
|
914
918
|
panel.appendChild(nameEl);
|
|
915
919
|
var hasCost = d.costUSD != null;
|
|
916
920
|
var hasTok = d.tokens != null;
|
|
921
|
+
var startOffset = sessionStart != null && d.start != null ? Math.max(0, d.start - sessionStart) : null;
|
|
917
922
|
panel.appendChild(statsEl([
|
|
918
923
|
['Cost', hasCost ? fmtUSD(d.costUSD) : '—', ''],
|
|
919
924
|
['Tokens', hasTok ? fmtTokens(d.tokens.total) : '—', ''],
|
|
920
925
|
['Duration', fmtTimelineDuration(d.durationMs), ''],
|
|
926
|
+
['Started', startOffset != null ? fmtTimelineDuration(startOffset) : '—', 'into session'],
|
|
921
927
|
]));
|
|
922
928
|
if (hasTok) {
|
|
923
929
|
var tok = d.tokens;
|
|
@@ -958,36 +964,45 @@
|
|
|
958
964
|
}
|
|
959
965
|
return panel;
|
|
960
966
|
}
|
|
961
|
-
// Gantt of
|
|
962
|
-
// by wall-clock start time
|
|
963
|
-
//
|
|
967
|
+
// Gantt of top-level dispatches: session span on top, then every agent/skill/command
|
|
968
|
+
// dispatch positioned by wall-clock start time across the activity window, so each bar
|
|
969
|
+
// sits where it actually ran. Short skills and 0ms commands fall back to the CSS
|
|
970
|
+
// min-width (28px) so they stay visible as markers without distorting the time scale.
|
|
964
971
|
function timelineEl(s) {
|
|
965
|
-
var dispatches = (s.dispatches || []).
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
//
|
|
969
|
-
//
|
|
970
|
-
//
|
|
971
|
-
var
|
|
972
|
-
var
|
|
973
|
-
|
|
972
|
+
var dispatches = (s.dispatches || []).slice().sort(function (a, b) { return a.start - b.start; });
|
|
973
|
+
// Window = union of the tracked session span and the dispatch activity span. Resumed or
|
|
974
|
+
// compacted sessions can carry transcript dispatches that fall OUTSIDE the tracked
|
|
975
|
+
// start→end window; scaling to the session window alone would clamp them all to left:0%
|
|
976
|
+
// (single-column pile-up). The union positions every bar correctly and collapses back to
|
|
977
|
+
// exactly the session window for the normal case (dispatches fully inside it).
|
|
978
|
+
var winStart = s.startTime;
|
|
979
|
+
var winEnd = s.startTime + (s.durationMs || 0);
|
|
980
|
+
dispatches.forEach(function (d) {
|
|
981
|
+
if (d.start < winStart) winStart = d.start;
|
|
982
|
+
var end = d.start + (d.durationMs || 0);
|
|
983
|
+
if (end > winEnd) winEnd = end;
|
|
984
|
+
});
|
|
985
|
+
var ganttSpan = Math.max(1, winEnd - winStart);
|
|
974
986
|
|
|
975
987
|
var container = el('div', 'tl-container');
|
|
976
988
|
var gantt = el('div', 'tl-gantt timeline');
|
|
977
989
|
var sidePane = el('div', 'tl-side');
|
|
978
990
|
|
|
979
|
-
var selected = dispatches[0] || null;
|
|
980
|
-
sidePane.appendChild(tlDetailEl(selected));
|
|
991
|
+
var selected = dispatches.filter(function (d) { return d.kind === 'agent'; })[0] || dispatches[0] || null;
|
|
992
|
+
sidePane.appendChild(tlDetailEl(selected, winStart));
|
|
981
993
|
|
|
982
994
|
function selectDispatch(d, barEl) {
|
|
983
995
|
gantt.querySelectorAll('.tl-bar[data-dispatch]').forEach(function(b) {
|
|
984
996
|
b.style.outline = b === barEl ? '2px solid rgba(255,255,255,0.55)' : 'none';
|
|
985
997
|
});
|
|
986
998
|
sidePane.innerHTML = '';
|
|
987
|
-
sidePane.appendChild(tlDetailEl(d));
|
|
999
|
+
sidePane.appendChild(tlDetailEl(d, winStart));
|
|
988
1000
|
}
|
|
989
1001
|
|
|
990
|
-
|
|
1002
|
+
// Session bar spans the full window (the activity envelope). Its label shows the envelope
|
|
1003
|
+
// span — equal to the tracked duration in the normal case, but revealing the true span when
|
|
1004
|
+
// the tracked duration under-counts (e.g. dispatches predating a post-compaction window).
|
|
1005
|
+
gantt.appendChild(tlRow('session', '#259F4C', 0, 100, fmtTimelineDuration(ganttSpan), fmtUSD(s.costUSD), true));
|
|
991
1006
|
|
|
992
1007
|
var occ = {};
|
|
993
1008
|
dispatches.forEach(function (d) {
|
|
@@ -995,8 +1010,8 @@
|
|
|
995
1010
|
var total = dispatches.filter(function (x) { return x.kind === d.kind && x.name === d.name; }).length;
|
|
996
1011
|
occ[key] = (occ[key] || 0) + 1;
|
|
997
1012
|
var label = d.kind + ' · ' + d.name + (total > 1 ? ' #' + occ[key] : '');
|
|
998
|
-
var leftPct = Math.max(0, (d.start -
|
|
999
|
-
var wPct =
|
|
1013
|
+
var leftPct = Math.max(0, (d.start - winStart) / ganttSpan * 100);
|
|
1014
|
+
var wPct = (d.durationMs || 0) / ganttSpan * 100;
|
|
1000
1015
|
if (leftPct + wPct > 100) wPct = Math.max(0, 100 - leftPct);
|
|
1001
1016
|
var barText = d.costUSD != null && wPct >= 8 ? fmtUSD(d.costUSD) : '';
|
|
1002
1017
|
var color = PALETTE[hashStr(key) % PALETTE.length];
|
|
@@ -1036,8 +1051,24 @@
|
|
|
1036
1051
|
var metaBits = [s.agentName, (s.models && s.models[0]) || null, shortPath(s.project), s.branch].filter(Boolean);
|
|
1037
1052
|
htxt.appendChild(el('div', 'modal-meta', metaBits.map(function (b) { return esc(b); }).join(' · ')));
|
|
1038
1053
|
head.appendChild(htxt);
|
|
1054
|
+
var headBtns = el('div'); headBtns.style.cssText = 'display:flex;gap:6px;align-items:center;flex-shrink:0;';
|
|
1055
|
+
var exportBtn = el('button', 'modal-export', '↓ JSON');
|
|
1056
|
+
exportBtn.setAttribute('aria-label', 'Export session as JSON');
|
|
1057
|
+
exportBtn.setAttribute('title', 'Export session details as JSON');
|
|
1058
|
+
exportBtn.addEventListener('click', function () {
|
|
1059
|
+
var json = JSON.stringify(s, null, 2);
|
|
1060
|
+
var blob = new Blob([json], { type: 'application/json' });
|
|
1061
|
+
var url = URL.createObjectURL(blob);
|
|
1062
|
+
var a = document.createElement('a');
|
|
1063
|
+
var date = new Date(s.startTime).toISOString().slice(0, 10);
|
|
1064
|
+
a.href = url; a.download = 'session-' + date + '-' + String(s.sessionId).slice(0, 8) + '.json';
|
|
1065
|
+
document.body.appendChild(a); a.click(); document.body.removeChild(a);
|
|
1066
|
+
URL.revokeObjectURL(url);
|
|
1067
|
+
});
|
|
1068
|
+
headBtns.appendChild(exportBtn);
|
|
1039
1069
|
var close = el('button', 'modal-close', '✕'); close.setAttribute('aria-label', 'Close'); close.addEventListener('click', closeSessionModal);
|
|
1040
|
-
|
|
1070
|
+
headBtns.appendChild(close);
|
|
1071
|
+
head.appendChild(headBtns);
|
|
1041
1072
|
modal.appendChild(head);
|
|
1042
1073
|
|
|
1043
1074
|
var body = el('div', 'modal-body');
|
|
@@ -1102,7 +1133,7 @@
|
|
|
1102
1133
|
// Timeline — Gantt of all top-level agent, skill, and command dispatches.
|
|
1103
1134
|
var hasDispatches = (s.dispatches || []).length > 0;
|
|
1104
1135
|
var hasCostData = (s.dispatches || []).some(function (d) { return d.costUSD != null; });
|
|
1105
|
-
var tlSubtitle = hasDispatches ? (hasCostData ? 'click a step for cost, token & timing details ·
|
|
1136
|
+
var tlSubtitle = hasDispatches ? (hasCostData ? 'click a step for cost, token & timing details · positioned across the session' : 'click a step for timing details · positioned across the session') : '';
|
|
1106
1137
|
var tlCard = card('Timeline', tlSubtitle);
|
|
1107
1138
|
if (hasDispatches) {
|
|
1108
1139
|
tlCard._body.appendChild(timelineEl(s));
|
|
@@ -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,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAiB,MAAM,kBAAkB,CAAC;AAErF,OAAO,KAAK,EAAE,aAAa,EAAmC,MAAM,YAAY,CAAC;
|
|
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,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAiB,MAAM,kBAAkB,CAAC;AAErF,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;CACrB;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,aAAa,EACnB,SAAS,EAAE,gBAAgB,EAC3B,OAAO,EAAE,WAAW,EACpB,GAAG,EAAE,cAAc,GAClB,aAAa,CAwHf"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* `generatedAt` so this stays deterministic and unit-testable.
|
|
5
5
|
*/
|
|
6
6
|
import { emptyUsage } from '../cost/cost-calculator.js';
|
|
7
|
+
import { detectSessionSource } from './session-source-detector.js';
|
|
7
8
|
export function buildPayload(root, costIndex, summary, ctx) {
|
|
8
9
|
const sessions = [];
|
|
9
10
|
const agents = new Set();
|
|
@@ -23,6 +24,9 @@ export function buildPayload(root, costIndex, summary, ctx) {
|
|
|
23
24
|
seen.add(s.sessionId);
|
|
24
25
|
const cost = costIndex.get(s.sessionId);
|
|
25
26
|
agents.add(s.agentName);
|
|
27
|
+
const skillInvocations = s.skillInvocations ?? [];
|
|
28
|
+
const agentInvocations = s.agentInvocations ?? [];
|
|
29
|
+
const commandInvocations = s.commandInvocations ?? [];
|
|
26
30
|
const cov = coverageMap.get(s.agentName) ?? { agentName: s.agentName, total: 0, priced: 0, withLog: 0 };
|
|
27
31
|
cov.total += 1;
|
|
28
32
|
if (cost?.hadLog) {
|
|
@@ -64,9 +68,10 @@ export function buildPayload(root, costIndex, summary, ctx) {
|
|
|
64
68
|
perModelCost: cost?.perModel ?? [],
|
|
65
69
|
...(cost?.costSeries && cost.costSeries.length ? { costSeries: cost.costSeries } : {}),
|
|
66
70
|
...(cost?.dispatches && cost.dispatches.length ? { dispatches: cost.dispatches } : {}),
|
|
67
|
-
skillInvocations
|
|
68
|
-
agentInvocations
|
|
69
|
-
commandInvocations
|
|
71
|
+
skillInvocations,
|
|
72
|
+
agentInvocations,
|
|
73
|
+
commandInvocations,
|
|
74
|
+
sessionSource: detectSessionSource({ skillInvocations, agentInvocations, commandInvocations }),
|
|
70
75
|
});
|
|
71
76
|
}
|
|
72
77
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payload-builder.js","sourceRoot":"","sources":["../../../../../src/cli/commands/analytics/report/payload-builder.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"payload-builder.js","sourceRoot":"","sources":["../../../../../src/cli/commands/analytics/report/payload-builder.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAExD,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAQnE,MAAM,UAAU,YAAY,CAC1B,IAAmB,EACnB,SAA2B,EAC3B,OAAoB,EACpB,GAAmB;IAEnB,MAAM,QAAQ,GAA0B,EAAE,CAAC;IAC3C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,8EAA8E;IAC9E,wEAAwE;IACxE,MAAM,WAAW,GAAG,IAAI,GAAG,EAAyB,CAAC;IACrD,+EAA+E;IAC/E,gFAAgF;IAChF,+EAA+E;IAC/E,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpC,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACtC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAChC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC1B,SAAS;gBACX,CAAC;gBACD,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;gBACtB,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;gBACxC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;gBACxB,MAAM,gBAAgB,GAAG,CAAC,CAAC,gBAAgB,IAAI,EAAE,CAAC;gBAClD,MAAM,gBAAgB,GAAG,CAAC,CAAC,gBAAgB,IAAI,EAAE,CAAC;gBAClD,MAAM,kBAAkB,GAAG,CAAC,CAAC,kBAAkB,IAAI,EAAE,CAAC;gBACtD,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBACxG,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC;gBACf,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC;oBACjB,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;gBACnB,CAAC;gBACD,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC;oBACjB,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;gBAClB,CAAC;gBACD,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;gBAClC,QAAQ,CAAC,IAAI,CAAC;oBACZ,SAAS,EAAE,CAAC,CAAC,SAAS;oBACtB,SAAS,EAAE,CAAC,CAAC,SAAS;oBACtB,QAAQ,EAAE,CAAC,CAAC,QAAQ;oBACpB,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE;oBACpB,OAAO,EAAE,OAAO,CAAC,WAAW;oBAC5B,gFAAgF;oBAChF,iFAAiF;oBACjF,MAAM,EAAE,CAAC,CAAC,aAAa,IAAI,MAAM,CAAC,UAAU;oBAC5C,SAAS,EAAE,CAAC,CAAC,SAAS;oBACtB,UAAU,EAAE,CAAC,CAAC,QAAQ;oBACtB,KAAK,EAAE,CAAC,CAAC,UAAU;oBACnB,OAAO,EAAE,CAAC,CAAC,mBAAmB;oBAC9B,UAAU,EAAE,CAAC,CAAC,eAAe;oBAC7B,YAAY,EAAE,CAAC,CAAC,iBAAiB;oBACjC,aAAa,EAAE,CAAC,CAAC,kBAAkB;oBACnC,QAAQ,EAAE,CAAC,CAAC,eAAe;oBAC3B,YAAY,EAAE,CAAC,CAAC,YAAY,IAAI,CAAC;oBACjC,YAAY,EAAE,CAAC,CAAC,YAAY,IAAI,CAAC;oBACjC,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,CAAC;oBAC/B,cAAc,EAAE,CAAC,CAAC,cAAc;oBAChC,gBAAgB,EAAE,CAAC,CAAC,mBAAmB;oBACvC,gBAAgB,EAAE,CAAC,CAAC,eAAe;oBACnC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;oBACpC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;oBAC7C,KAAK,EAAE,CAAC,CAAC,KAAK;oBACd,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,UAAU,EAAE;oBACpC,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,CAAC;oBAC3B,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,IAAI,CAAC;oBAC7C,YAAY,EAAE,IAAI,EAAE,QAAQ,IAAI,EAAE;oBAClC,GAAG,CAAC,IAAI,EAAE,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACtF,GAAG,CAAC,IAAI,EAAE,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACtF,gBAAgB;oBAChB,gBAAgB;oBAChB,kBAAkB;oBAClB,aAAa,EAAE,mBAAmB,CAAC,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,CAAC;iBAC/F,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,qFAAqF;IACrF,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,UAAU,IAAI,CAAC,CAAC,UAAU,CAAC;QAC3B,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC;QACjB,KAAK,IAAI,CAAC,CAAC,OAAO,CAAC;QACnB,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC;QACvB,cAAc,IAAI,CAAC,CAAC,cAAc,CAAC;QACnC,gBAAgB,IAAI,CAAC,CAAC,gBAAgB,CAAC;QACvC,YAAY,IAAI,CAAC,CAAC,OAAO,CAAC;QAC1B,gBAAgB,IAAI,CAAC,CAAC,gBAAgB,CAAC;QACvC,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;YACvC,cAAc,IAAI,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAe;QACvB,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC;QACnB,aAAa,EAAE,GAAG,CAAC,aAAa;QAChC,MAAM,EAAE;YACN,QAAQ,EAAE,QAAQ,CAAC,MAAM;YACzB,UAAU;YACV,KAAK;YACL,KAAK;YACL,QAAQ;YACR,cAAc;YACd,eAAe,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,gBAAgB,GAAG,cAAc,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YACjG,YAAY;YACZ,gBAAgB;YAChB,cAAc;SACf;QACD,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,QAAQ,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;KACtE,CAAC;IAEF,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session-source classification: labels each session by the SDLC tooling/framework
|
|
3
|
+
* signal found in its skill/agent/command invocation names. Ordered, first-match-wins
|
|
4
|
+
* strategy list — new bundles register by adding an entry here, not by editing a
|
|
5
|
+
* branching if/else chain. Detection is name-based only (skill/agent/command names
|
|
6
|
+
* already captured by the report pipeline); it does not inspect the filesystem.
|
|
7
|
+
*/
|
|
8
|
+
import type { NamedInvocationStats } from '../types.js';
|
|
9
|
+
export interface SessionInvocationNames {
|
|
10
|
+
skillInvocations: NamedInvocationStats[];
|
|
11
|
+
agentInvocations: NamedInvocationStats[];
|
|
12
|
+
commandInvocations: NamedInvocationStats[];
|
|
13
|
+
}
|
|
14
|
+
export interface SessionSourceDetector {
|
|
15
|
+
/** Stable id, e.g. 'sdlc-factory'. */
|
|
16
|
+
name: string;
|
|
17
|
+
/** Display label shown in the report's Source column when this detector matches. */
|
|
18
|
+
label: string;
|
|
19
|
+
/** True if any invocation name (already lowercased) signals this bundle. */
|
|
20
|
+
matches(names: string[]): boolean;
|
|
21
|
+
}
|
|
22
|
+
export declare const PURE_CHAT_LABEL = "Pure chat";
|
|
23
|
+
export declare const SESSION_SOURCE_DETECTORS: SessionSourceDetector[];
|
|
24
|
+
/**
|
|
25
|
+
* Classify a session's tooling/framework source. Detectors are tried in order;
|
|
26
|
+
* the first match wins. Falls back to {@link PURE_CHAT_LABEL} when none match.
|
|
27
|
+
*/
|
|
28
|
+
export declare function detectSessionSource(session: SessionInvocationNames, detectors?: SessionSourceDetector[]): string;
|
|
29
|
+
//# sourceMappingURL=session-source-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-source-detector.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/analytics/report/session-source-detector.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAExD,MAAM,WAAW,sBAAsB;IACrC,gBAAgB,EAAE,oBAAoB,EAAE,CAAC;IACzC,gBAAgB,EAAE,oBAAoB,EAAE,CAAC;IACzC,kBAAkB,EAAE,oBAAoB,EAAE,CAAC;CAC5C;AAED,MAAM,WAAW,qBAAqB;IACpC,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,oFAAoF;IACpF,KAAK,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;CACnC;AAED,eAAO,MAAM,eAAe,cAAc,CAAC;AAwB3C,eAAO,MAAM,wBAAwB,EAAE,qBAAqB,EA0B3D,CAAC;AAEF;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,sBAAsB,EAC/B,SAAS,GAAE,qBAAqB,EAA6B,GAC5D,MAAM,CAQR"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session-source classification: labels each session by the SDLC tooling/framework
|
|
3
|
+
* signal found in its skill/agent/command invocation names. Ordered, first-match-wins
|
|
4
|
+
* strategy list — new bundles register by adding an entry here, not by editing a
|
|
5
|
+
* branching if/else chain. Detection is name-based only (skill/agent/command names
|
|
6
|
+
* already captured by the report pipeline); it does not inspect the filesystem.
|
|
7
|
+
*/
|
|
8
|
+
export const PURE_CHAT_LABEL = 'Pure chat';
|
|
9
|
+
function collectNames(session) {
|
|
10
|
+
return [...session.skillInvocations, ...session.agentInvocations, ...session.commandInvocations].map((n) => n.name.toLowerCase());
|
|
11
|
+
}
|
|
12
|
+
function hasPrefix(names, prefix) {
|
|
13
|
+
return names.some((n) => n.startsWith(prefix));
|
|
14
|
+
}
|
|
15
|
+
function hasExact(names, candidates) {
|
|
16
|
+
return names.some((n) => candidates.includes(n));
|
|
17
|
+
}
|
|
18
|
+
function hasSubstring(names, substrings) {
|
|
19
|
+
return names.some((n) => substrings.some((s) => n.includes(s)));
|
|
20
|
+
}
|
|
21
|
+
// Unnamespaced slash commands from the external sdlc-factory skill bundle — distinct
|
|
22
|
+
// from the namespaced `sdlc-factory:` prefix seen on skill/agent invocations.
|
|
23
|
+
const SDLC_FACTORY_COMMANDS = ['sdlc-light', 'sdlc-task', 'sdlc-autonomous'];
|
|
24
|
+
export const SESSION_SOURCE_DETECTORS = [
|
|
25
|
+
{
|
|
26
|
+
name: 'sdlc-factory',
|
|
27
|
+
label: 'CodeMie AI Factory',
|
|
28
|
+
matches: (names) => hasPrefix(names, 'sdlc-factory:') || hasExact(names, SDLC_FACTORY_COMMANDS),
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
name: 'superpowers',
|
|
32
|
+
label: 'Superpowers',
|
|
33
|
+
matches: (names) => hasPrefix(names, 'superpowers:'),
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
name: 'openspec',
|
|
37
|
+
label: 'OpenSpec',
|
|
38
|
+
matches: (names) => hasSubstring(names, ['openspec', 'open-spec']),
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
name: 'speckit',
|
|
42
|
+
label: 'SpecKit',
|
|
43
|
+
matches: (names) => hasSubstring(names, ['speckit', 'spec-kit']),
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: 'bmad',
|
|
47
|
+
label: 'BMAD',
|
|
48
|
+
matches: (names) => hasSubstring(names, ['bmad']),
|
|
49
|
+
},
|
|
50
|
+
];
|
|
51
|
+
/**
|
|
52
|
+
* Classify a session's tooling/framework source. Detectors are tried in order;
|
|
53
|
+
* the first match wins. Falls back to {@link PURE_CHAT_LABEL} when none match.
|
|
54
|
+
*/
|
|
55
|
+
export function detectSessionSource(session, detectors = SESSION_SOURCE_DETECTORS) {
|
|
56
|
+
const names = collectNames(session);
|
|
57
|
+
for (const detector of detectors) {
|
|
58
|
+
if (detector.matches(names)) {
|
|
59
|
+
return detector.label;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return PURE_CHAT_LABEL;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=session-source-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-source-detector.js","sourceRoot":"","sources":["../../../../../src/cli/commands/analytics/report/session-source-detector.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAmBH,MAAM,CAAC,MAAM,eAAe,GAAG,WAAW,CAAC;AAE3C,SAAS,YAAY,CAAC,OAA+B;IACnD,OAAO,CAAC,GAAG,OAAO,CAAC,gBAAgB,EAAE,GAAG,OAAO,CAAC,gBAAgB,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACzG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CACrB,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,KAAe,EAAE,MAAc;IAChD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,QAAQ,CAAC,KAAe,EAAE,UAAoB;IACrD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,YAAY,CAAC,KAAe,EAAE,UAAoB;IACzD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,qFAAqF;AACrF,8EAA8E;AAC9E,MAAM,qBAAqB,GAAG,CAAC,YAAY,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC;AAE7E,MAAM,CAAC,MAAM,wBAAwB,GAA4B;IAC/D;QACE,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,oBAAoB;QAC3B,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,eAAe,CAAC,IAAI,QAAQ,CAAC,KAAK,EAAE,qBAAqB,CAAC;KAChG;IACD;QACE,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,aAAa;QACpB,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,cAAc,CAAC;KACrD;IACD;QACE,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,UAAU;QACjB,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;KACnE;IACD;QACE,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,SAAS;QAChB,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;KACjE;IACD;QACE,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,MAAM;QACb,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC;KAClD;CACF,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAA+B,EAC/B,YAAqC,wBAAwB;IAE7D,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACpC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,QAAQ,CAAC,KAAK,CAAC;QACxB,CAAC;IACH,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC"}
|
|
@@ -136,13 +136,15 @@
|
|
|
136
136
|
.proj-sessions .table td:first-child { white-space: normal; word-break: break-word; }
|
|
137
137
|
|
|
138
138
|
/* session-detail modal */
|
|
139
|
-
.modal-overlay { position: fixed; inset: 0; background: rgba(0,0,0,0.
|
|
139
|
+
.modal-overlay { position: fixed; inset: 0; background: rgba(0,0,0,0.72); display: flex; align-items: center; justify-content: center; z-index: var(--z-modal, 50); padding: 24px; }
|
|
140
140
|
.modal { background: var(--color-bg-card); border: 1px solid var(--color-border-structural); border-radius: var(--radius-xl, 12px); box-shadow: var(--shadow-lg); width: 100%; max-width: 880px; max-height: 88vh; display: flex; flex-direction: column; overflow: hidden; }
|
|
141
141
|
.modal-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; padding: 16px 20px; border-bottom: 1px solid var(--color-border-structural); }
|
|
142
142
|
.modal-title { font-size: 15px; font-weight: 700; color: var(--color-text-primary); margin: 0 0 3px; }
|
|
143
143
|
.modal-meta { font-size: 12px; color: var(--color-text-muted); text-transform: capitalize; }
|
|
144
144
|
.modal-close { background: transparent; border: 1px solid var(--color-border-structural); color: var(--color-text-muted); border-radius: 8px; height: 30px; width: 30px; cursor: pointer; font-size: 12px; flex-shrink: 0; }
|
|
145
145
|
.modal-close:hover { color: var(--color-text-primary); background: var(--color-bg-tertiary); }
|
|
146
|
+
.modal-export { background: transparent; border: 1px solid var(--color-border-structural); color: var(--color-text-muted); border-radius: 8px; height: 30px; padding: 0 10px; cursor: pointer; font-size: 12px; flex-shrink: 0; white-space: nowrap; font-family: inherit; }
|
|
147
|
+
.modal-export:hover { color: var(--color-primary, #7C5CFC); background: var(--color-bg-tertiary); border-color: var(--color-primary, #7C5CFC); }
|
|
146
148
|
.modal-body { padding: 18px 20px; overflow-y: auto; }
|
|
147
149
|
.modal-body .card { margin-bottom: 14px; }
|
|
148
150
|
/* light, borderless stat grid (replaces the heavy box-in-box KPIs) */
|
|
@@ -180,13 +182,15 @@
|
|
|
180
182
|
.tl-tok-seg { border-radius: 2px; }
|
|
181
183
|
|
|
182
184
|
/* session-detail modal */
|
|
183
|
-
.modal-overlay { position: fixed; inset: 0; background: rgba(0,0,0,0.
|
|
185
|
+
.modal-overlay { position: fixed; inset: 0; background: rgba(0,0,0,0.72); display: flex; align-items: center; justify-content: center; z-index: var(--z-modal, 50); padding: 24px; }
|
|
184
186
|
.modal { background: var(--color-bg-card); border: 1px solid var(--color-border-structural); border-radius: var(--radius-xl, 12px); box-shadow: var(--shadow-lg); width: 100%; max-width: 880px; max-height: 88vh; display: flex; flex-direction: column; overflow: hidden; }
|
|
185
187
|
.modal-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; padding: 16px 20px; border-bottom: 1px solid var(--color-border-structural); }
|
|
186
188
|
.modal-title { font-size: 15px; font-weight: 700; color: var(--color-text-primary); margin: 0 0 3px; }
|
|
187
189
|
.modal-meta { font-size: 12px; color: var(--color-text-muted); text-transform: capitalize; }
|
|
188
190
|
.modal-close { background: transparent; border: 1px solid var(--color-border-structural); color: var(--color-text-muted); border-radius: 8px; height: 30px; width: 30px; cursor: pointer; font-size: 12px; flex-shrink: 0; }
|
|
189
191
|
.modal-close:hover { color: var(--color-text-primary); background: var(--color-bg-tertiary); }
|
|
192
|
+
.modal-export { background: transparent; border: 1px solid var(--color-border-structural); color: var(--color-text-muted); border-radius: 8px; height: 30px; padding: 0 10px; cursor: pointer; font-size: 12px; flex-shrink: 0; white-space: nowrap; font-family: inherit; }
|
|
193
|
+
.modal-export:hover { color: var(--color-primary, #7C5CFC); background: var(--color-bg-tertiary); border-color: var(--color-primary, #7C5CFC); }
|
|
190
194
|
.modal-body { padding: 18px 20px; overflow-y: auto; }
|
|
191
195
|
.modal-body .card { margin-bottom: 14px; }
|
|
192
196
|
/* light, borderless stat grid (replaces the heavy box-in-box KPIs) */
|
|
@@ -32,6 +32,8 @@ export interface ReportSessionRecord {
|
|
|
32
32
|
skillInvocations: NamedInvocationStats[];
|
|
33
33
|
agentInvocations: NamedInvocationStats[];
|
|
34
34
|
commandInvocations: NamedInvocationStats[];
|
|
35
|
+
/** Tooling/framework classified from the invocation names above — see session-source-detector.ts. */
|
|
36
|
+
sessionSource: string;
|
|
35
37
|
tokens: TokenUsage;
|
|
36
38
|
costUSD: number;
|
|
37
39
|
cacheReadCostUSD: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/analytics/report/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC7G,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnE,iFAAiF;AACjF,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,gBAAgB,EAAE,oBAAoB,EAAE,CAAC;IACzC,gBAAgB,EAAE,oBAAoB,EAAE,CAAC;IACzC,kBAAkB,EAAE,oBAAoB,EAAE,CAAC;IAC3C,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,SAAS,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;IAC/B,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE;QACN,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,cAAc,EAAE,MAAM,CAAC;QACvB,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;QACzB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,mBAAmB,EAAE,CAAC;CACjC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/analytics/report/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC7G,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnE,iFAAiF;AACjF,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,gBAAgB,EAAE,oBAAoB,EAAE,CAAC;IACzC,gBAAgB,EAAE,oBAAoB,EAAE,CAAC;IACzC,kBAAkB,EAAE,oBAAoB,EAAE,CAAC;IAC3C,qGAAqG;IACrG,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,SAAS,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;IAC/B,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE;QACN,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,cAAc,EAAE,MAAM,CAAC;QACvB,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;QACzB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,mBAAmB,EAAE,CAAC;CACjC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { AnalyticsSource, SourceLoadOptions, SourceResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* OTEL source: a flattened otel-events.jsonl file. Cost is authoritative (native
|
|
4
|
+
* `cost_usd`), so it is returned up-front and bypasses the cost-enricher.
|
|
5
|
+
*/
|
|
6
|
+
export declare class OtelSource implements AnalyticsSource {
|
|
7
|
+
private readonly file;
|
|
8
|
+
private readonly user?;
|
|
9
|
+
constructor(file: string, user?: string | undefined);
|
|
10
|
+
load(opts: SourceLoadOptions): Promise<SourceResult>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=otel-source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otel-source.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/analytics/sources/otel-source.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEnF;;;GAGG;AACH,qBAAa,UAAW,YAAW,eAAe;IACpC,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAU,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAApC,IAAI,EAAE,MAAM,EAAmB,IAAI,CAAC,EAAE,MAAM,YAAA;IAEnE,IAAI,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC;CAiC3D"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { AnalyticsSourceError } from '../../../../utils/errors.js';
|
|
3
|
+
import { MetricsDataLoader } from '../data-loader.js';
|
|
4
|
+
/**
|
|
5
|
+
* OTEL source: a flattened otel-events.jsonl file. Cost is authoritative (native
|
|
6
|
+
* `cost_usd`), so it is returned up-front and bypasses the cost-enricher.
|
|
7
|
+
*/
|
|
8
|
+
export class OtelSource {
|
|
9
|
+
file;
|
|
10
|
+
user;
|
|
11
|
+
constructor(file, user) {
|
|
12
|
+
this.file = file;
|
|
13
|
+
this.user = user;
|
|
14
|
+
}
|
|
15
|
+
async load(opts) {
|
|
16
|
+
if (!existsSync(this.file)) {
|
|
17
|
+
throw new AnalyticsSourceError(`OTEL file not found: ${this.file}`);
|
|
18
|
+
}
|
|
19
|
+
const { loadOtelSessions } = await import('../otel-loader.js');
|
|
20
|
+
const res = loadOtelSessions({
|
|
21
|
+
file: this.file,
|
|
22
|
+
filter: { user: this.user, since: opts.filter.fromDate, until: opts.filter.toDate },
|
|
23
|
+
});
|
|
24
|
+
// Honor the structural CLI filters OTEL can evaluate from session metadata. `--user` and the
|
|
25
|
+
// time window are already applied inside loadOtelSessions (on api_request user/ts); apply the
|
|
26
|
+
// rest here so they are not silently ignored — and so a report is never mislabeled (e.g.
|
|
27
|
+
// `--project foo` must not produce a "project: foo" report that still contains every project).
|
|
28
|
+
// The structural filter is date-free: re-applying the window would conflict with the
|
|
29
|
+
// api_request-time filter already done. `--session` is matched explicitly because
|
|
30
|
+
// sessionMatchesFilter does not cover session id. The cost index is left intact — entries for
|
|
31
|
+
// dropped sessions are inert (downstream only reads cost for sessions present in rawSessions,
|
|
32
|
+
// and keepSessionIds cannot resurrect a session the aggregator never sees).
|
|
33
|
+
const structural = {
|
|
34
|
+
...(opts.filter.agentName && { agentName: opts.filter.agentName }),
|
|
35
|
+
...(opts.filter.projectPattern && { projectPattern: opts.filter.projectPattern }),
|
|
36
|
+
...(opts.filter.branch && { branch: opts.filter.branch }),
|
|
37
|
+
};
|
|
38
|
+
const loader = new MetricsDataLoader();
|
|
39
|
+
const rawSessions = res.rawSessions.filter((s) => (!opts.filter.sessionId || s.sessionId === opts.filter.sessionId) &&
|
|
40
|
+
loader.sessionMatchesFilter(s, structural));
|
|
41
|
+
return { rawSessions, cost: { index: res.costIndex, summary: res.summary } };
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=otel-source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otel-source.js","sourceRoot":"","sources":["../../../../../src/cli/commands/analytics/sources/otel-source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAItD;;;GAGG;AACH,MAAM,OAAO,UAAU;IACQ;IAA+B;IAA5D,YAA6B,IAAY,EAAmB,IAAa;QAA5C,SAAI,GAAJ,IAAI,CAAQ;QAAmB,SAAI,GAAJ,IAAI,CAAS;IAAG,CAAC;IAE7E,KAAK,CAAC,IAAI,CAAC,IAAuB;QAChC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,oBAAoB,CAAC,wBAAwB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAC/D,MAAM,GAAG,GAAG,gBAAgB,CAAC;YAC3B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;SACpF,CAAC,CAAC;QAEH,6FAA6F;QAC7F,8FAA8F;QAC9F,yFAAyF;QACzF,+FAA+F;QAC/F,qFAAqF;QACrF,kFAAkF;QAClF,8FAA8F;QAC9F,8FAA8F;QAC9F,4EAA4E;QAC5E,MAAM,UAAU,GAAoB;YAClC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YAClE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YACjF,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;SAC1D,CAAC;QACF,MAAM,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAC;QACvC,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC,MAAM,CACxC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;YACjE,MAAM,CAAC,oBAAoB,CAAC,CAAC,EAAE,UAAU,CAAC,CAC7C,CAAC;QAEF,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;IAC/E,CAAC;CACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { AnalyticsSource, SourceLoadOptions, SourceResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Local-session source: ~/.codemie tracked sessions merged with discovered native agent
|
|
4
|
+
* logs (plain `claude` etc.). Cost is omitted here and derived by the cost-enricher only
|
|
5
|
+
* when a report is requested, matching the original analytics behavior.
|
|
6
|
+
*/
|
|
7
|
+
export declare class SessionsSource implements AnalyticsSource {
|
|
8
|
+
load(opts: SourceLoadOptions): Promise<SourceResult>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=sessions-source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessions-source.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/analytics/sources/sessions-source.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEnF;;;;GAIG;AACH,qBAAa,cAAe,YAAW,eAAe;IAC9C,IAAI,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC;CAmB3D"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { MetricsDataLoader } from '../data-loader.js';
|
|
2
|
+
import { logger } from '../../../../utils/logger.js';
|
|
3
|
+
/**
|
|
4
|
+
* Local-session source: ~/.codemie tracked sessions merged with discovered native agent
|
|
5
|
+
* logs (plain `claude` etc.). Cost is omitted here and derived by the cost-enricher only
|
|
6
|
+
* when a report is requested, matching the original analytics behavior.
|
|
7
|
+
*/
|
|
8
|
+
export class SessionsSource {
|
|
9
|
+
async load(opts) {
|
|
10
|
+
const loader = new MetricsDataLoader();
|
|
11
|
+
const rawSessions = loader.loadSessions(opts.filter);
|
|
12
|
+
// Discover native agent logs (not tracked by CodeMie) and merge so analytics reflect
|
|
13
|
+
// ALL usage. Deduped against tracked logs inside the loader.
|
|
14
|
+
if (opts.scanNative !== false) {
|
|
15
|
+
try {
|
|
16
|
+
const { loadNativeSessions } = await import('../native-loader.js');
|
|
17
|
+
const natives = (await loadNativeSessions(opts.filter)).filter((s) => loader.sessionMatchesFilter(s, opts.filter));
|
|
18
|
+
rawSessions.push(...natives);
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
logger.debug('Native session discovery failed (continuing with tracked sessions):', error);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return { rawSessions };
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=sessions-source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessions-source.js","sourceRoot":"","sources":["../../../../../src/cli/commands/analytics/sources/sessions-source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAGrD;;;;GAIG;AACH,MAAM,OAAO,cAAc;IACzB,KAAK,CAAC,IAAI,CAAC,IAAuB;QAChC,MAAM,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAC;QACvC,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAErD,qFAAqF;QACrF,6DAA6D;QAC7D,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACH,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;gBACnE,MAAM,OAAO,GAAG,CAAC,MAAM,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CACnE,MAAM,CAAC,oBAAoB,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAC5C,CAAC;gBACF,WAAW,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;YAC/B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,qEAAqE,EAAE,KAAK,CAAC,CAAC;YAC7F,CAAC;QACH,CAAC;QACD,OAAO,EAAE,WAAW,EAAE,CAAC;IACzB,CAAC;CACF"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Analytics source seam.
|
|
3
|
+
*
|
|
4
|
+
* Every data backend implements {@link AnalyticsSource}: it loads its data and returns the
|
|
5
|
+
* same {@link SourceResult} the aggregate → report pipeline consumes, so the CLI stays
|
|
6
|
+
* agnostic to where the data came from.
|
|
7
|
+
*
|
|
8
|
+
* Today: {@link SessionsSource} (local ~/.codemie + native logs) and OtelSource
|
|
9
|
+
* (flattened otel-events.jsonl). Future remote backends (Prometheus, Loki, Langfuse) become
|
|
10
|
+
* one new `AnalyticsSource` + one thin `analytics <name>` subcommand each, with connection
|
|
11
|
+
* URL + auth resolved from the `.codemie` config/profile (never CLI flags) — e.g.
|
|
12
|
+
* "analyticsSources": { "prod-langfuse": { "type": "langfuse", "url": "…", "authEnv": "LANGFUSE_TOKEN" } }
|
|
13
|
+
* where `authEnv` names the env var holding the token. No connector code exists yet.
|
|
14
|
+
*/
|
|
15
|
+
import type { RawSessionData } from '../data-loader.js';
|
|
16
|
+
import type { AnalyticsFilter } from '../types.js';
|
|
17
|
+
import type { SessionCostIndex, CostSummary } from '../cost/types.js';
|
|
18
|
+
export interface SourceLoadOptions {
|
|
19
|
+
filter: AnalyticsFilter;
|
|
20
|
+
/** Sessions source only: skip native agent-log discovery. Ignored by other sources. */
|
|
21
|
+
scanNative?: boolean;
|
|
22
|
+
}
|
|
23
|
+
export interface SourceResult {
|
|
24
|
+
rawSessions: RawSessionData[];
|
|
25
|
+
/**
|
|
26
|
+
* Authoritative cost, present only when the source carries it in its own data
|
|
27
|
+
* (e.g. OTEL `cost_usd`). Omitted when cost must be derived later from correlated logs
|
|
28
|
+
* (local sessions → cost-enricher); the runner enriches in that case.
|
|
29
|
+
*/
|
|
30
|
+
cost?: {
|
|
31
|
+
index: SessionCostIndex;
|
|
32
|
+
summary: CostSummary;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export interface AnalyticsSource {
|
|
36
|
+
load(opts: SourceLoadOptions): Promise<SourceResult>;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/analytics/sources/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEtE,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,eAAe,CAAC;IACxB,uFAAuF;IACvF,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B;;;;OAIG;IACH,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,gBAAgB,CAAC;QAAC,OAAO,EAAE,WAAW,CAAA;KAAE,CAAC;CAC1D;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CACtD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/cli/commands/analytics/sources/types.ts"],"names":[],"mappings":""}
|
|
@@ -199,4 +199,11 @@ export interface AnalyticsOptions {
|
|
|
199
199
|
/** When false (via --no-scan-native), skip native-log discovery and use tracked sessions only. */
|
|
200
200
|
scanNative?: boolean;
|
|
201
201
|
}
|
|
202
|
+
/** Options for the `analytics otel` subcommand: the shared base plus OTEL-specific flags. */
|
|
203
|
+
export interface OtelCommandOptions extends AnalyticsOptions {
|
|
204
|
+
/** Path to the flattened OTEL events file (required). */
|
|
205
|
+
file: string;
|
|
206
|
+
/** Scope OTEL analytics to one user (matches native user.email or user.id). */
|
|
207
|
+
user?: string;
|
|
208
|
+
}
|
|
202
209
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/analytics/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/analytics/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EACV,aAAa,EACb,UAAU,EACX,MAAM,uCAAuC,CAAC;AAG/C,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,iBAAiB,EAAE,UAAU,CAAC;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iIAAiI;IACjI,KAAK,EAAE,MAAM,CAAC;IACd,oFAAoF;IACpF,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IAGjB,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IAGxB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IAEpB,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IAGxB,MAAM,EAAE,UAAU,EAAE,CAAC;IAGrB,KAAK,EAAE,SAAS,EAAE,CAAC;IAGnB,KAAK,EAAE,oBAAoB,EAAE,CAAC;IAG9B,SAAS,EAAE,aAAa,EAAE,CAAC;IAG3B,OAAO,EAAE,aAAa,EAAE,CAAC;IAGzB,gBAAgB,EAAE,oBAAoB,EAAE,CAAC;IACzC,gBAAgB,EAAE,oBAAoB,EAAE,CAAC;IACzC,kBAAkB,EAAE,oBAAoB,EAAE,CAAC;IAG3C,MAAM,CAAC,EAAE,OAAO,iBAAiB,EAAE,UAAU,CAAC;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAG7B,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IAGxB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,eAAe,EAAE,CAAC;IAG5B,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IAGxB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAG7B,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IAGxB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB,MAAM,CAAC,EAAE,IAAI,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0HAA0H;IAC1H,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACxC,kGAAkG;IAClG,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,6FAA6F;AAC7F,MAAM,WAAW,kBAAmB,SAAQ,gBAAgB;IAC1D,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,+EAA+E;IAC/E,IAAI,CAAC,EAAE,MAAM,CAAC;CACf"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/hook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,KAAK,EAAE,aAAa,EAA4D,MAAM,wBAAwB,CAAC;AAGtH;;;;;;GAMG;AAEH;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD,eAAe,EAAE,cAAc,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,eAAgB,SAAQ,aAAa;IACpD,eAAe,EAAE,YAAY,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD,eAAe,EAAE,cAAc,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,4CAA4C;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wCAAwC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qBAAqB;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;
|
|
1
|
+
{"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/hook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,KAAK,EAAE,aAAa,EAA4D,MAAM,wBAAwB,CAAC;AAGtH;;;;;;GAMG;AAEH;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD,eAAe,EAAE,cAAc,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,eAAgB,SAAQ,aAAa;IACpD,eAAe,EAAE,YAAY,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD,eAAe,EAAE,cAAc,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,4CAA4C;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wCAAwC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qBAAqB;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA2pCD;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBrG;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAkG3C"}
|