@sentropic/agent-stats 0.1.0 → 0.2.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sentropic/agent-stats",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "CLI for agent-stats — analyze Claude Code and Codex CLI sessions.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -24,7 +24,7 @@
24
24
  "access": "public"
25
25
  },
26
26
  "dependencies": {
27
- "@sentropic/agent-stats-core": "0.1.0",
27
+ "@sentropic/agent-stats-core": "0.2.0",
28
28
  "commander": "^14.0.3"
29
29
  },
30
30
  "repository": {
package/dist/cli.d.ts DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * agent-stats CLI entry.
4
- * Subcommands: stats | report. The rest (anomalies, clean, analyze, web,
5
- * bench) will follow in WP5-WP8.
6
- */
7
- export {};
8
- //# sourceMappingURL=cli.d.ts.map
package/dist/cli.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;GAIG"}
package/dist/cli.js DELETED
@@ -1,150 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * agent-stats CLI entry.
4
- * Subcommands: stats | report. The rest (anomalies, clean, analyze, web,
5
- * bench) will follow in WP5-WP8.
6
- */
7
- import { writeFile } from 'node:fs/promises';
8
- import { Command } from 'commander';
9
- import { VERSION } from '@sentropic/agent-stats-core';
10
- import { runStats } from './commands/stats.js';
11
- import { runReport } from './commands/report.js';
12
- import { runClean } from './commands/clean.js';
13
- import { runAnomalies } from './commands/anomalies.js';
14
- import { runWeb } from './commands/web.js';
15
- import { runAnalyze } from './commands/analyze.js';
16
- async function main(argv) {
17
- const program = new Command();
18
- program
19
- .name('agent-stats')
20
- .description('Analyze Claude Code and Codex CLI sessions.')
21
- .version(VERSION);
22
- program
23
- .command('stats')
24
- .description('Compute weekly aggregations and output JSON or a compact table.')
25
- .option('--since <iso>', 'Lower bound (ISO 8601)')
26
- .option('--until <iso>', 'Upper bound (ISO 8601)')
27
- .option('--tool <name>', 'Restrict to one tool: claude | codex')
28
- .option('--project <cwd>', 'Filter by project cwd (exact or prefix with trailing /)')
29
- .option('--format <fmt>', 'Output format: json | table', 'json')
30
- .option('--out <file>', 'Write to file instead of stdout')
31
- .action(async (opts) => {
32
- const result = await runStats({
33
- since: opts.since,
34
- until: opts.until,
35
- tool: opts.tool,
36
- project: opts.project,
37
- format: opts.format,
38
- });
39
- if (opts.out)
40
- await writeFile(opts.out, result.output);
41
- else
42
- process.stdout.write(`${result.output}\n`);
43
- });
44
- program
45
- .command('analyze')
46
- .description('LLM analysis of top sessions via @sentropic/llm-mesh.')
47
- .option('--since <iso>', 'Lower bound (ISO 8601)')
48
- .option('--until <iso>', 'Upper bound (ISO 8601)')
49
- .option('--tool <name>', 'Restrict to one tool: claude | codex')
50
- .option('--project <cwd>', 'Filter by project cwd')
51
- .option('--model <id>', 'LLM model (default mistral-small-4)', 'mistral-small-4')
52
- .option('--limit <n>', 'Number of top sessions to analyze', (v) => parseInt(v, 10), 10)
53
- .option('--out <file>', 'Write to file instead of stdout')
54
- .action(async (opts) => {
55
- const result = await runAnalyze({
56
- since: opts.since,
57
- until: opts.until,
58
- tool: opts.tool,
59
- project: opts.project,
60
- model: opts.model,
61
- limit: opts.limit,
62
- });
63
- if (opts.out)
64
- await writeFile(opts.out, result.output);
65
- else
66
- process.stdout.write(`${result.output}\n`);
67
- });
68
- program
69
- .command('web')
70
- .description('Launch the local SvelteKit dashboard on http://127.0.0.1:<port>.')
71
- .option('--port <n>', 'Listen port (default 4173)', (v) => parseInt(v, 10), 4173)
72
- .option('--web-dir <dir>', 'Override the static build directory')
73
- .action(async (opts) => {
74
- const server = await runWeb({ port: opts.port, webDir: opts.webDir });
75
- // Keep the process alive until Ctrl-C.
76
- process.on('SIGINT', () => {
77
- void server.close().then(() => process.exit(0));
78
- });
79
- });
80
- program
81
- .command('anomalies')
82
- .description('Heuristic anomaly detection (compactions, loops, error rate, zombie).')
83
- .option('--since <iso>', 'Lower bound (ISO 8601)')
84
- .option('--until <iso>', 'Upper bound (ISO 8601)')
85
- .option('--tool <name>', 'Restrict to one tool: claude | codex')
86
- .option('--project <cwd>', 'Filter by project cwd (exact or prefix with trailing /)')
87
- .option('--format <fmt>', 'Output format: json | table', 'json')
88
- .option('--out <file>', 'Write to file instead of stdout')
89
- .action(async (opts) => {
90
- const result = await runAnomalies({
91
- since: opts.since,
92
- until: opts.until,
93
- tool: opts.tool,
94
- project: opts.project,
95
- format: opts.format,
96
- });
97
- if (opts.out)
98
- await writeFile(opts.out, result.output);
99
- else
100
- process.stdout.write(`${result.output}\n`);
101
- });
102
- program
103
- .command('clean')
104
- .description('Redact secrets in session jsonl files (via secretlint).')
105
- .requiredOption('--input <path>', 'File or directory to clean')
106
- .option('--mode <mode>', 'archive | inplace | llm-input', 'archive')
107
- .option('--out <dir>', 'Output directory (archive | llm-input)')
108
- .option('--max-tool-result-bytes <n>', 'Truncate strings larger than N bytes (llm-input mode)', (v) => parseInt(v, 10), 2048)
109
- .action(async (opts) => {
110
- const result = await runClean({
111
- input: opts.input,
112
- mode: opts.mode,
113
- out: opts.out,
114
- maxToolResultBytes: opts.maxToolResultBytes,
115
- });
116
- process.stdout.write(`${result.output}\n`);
117
- });
118
- program
119
- .command('report')
120
- .description('Generate a Markdown weekly report.')
121
- .option('--since <iso>', 'Lower bound (ISO 8601)')
122
- .option('--until <iso>', 'Upper bound (ISO 8601)')
123
- .option('--tool <name>', 'Restrict to one tool: claude | codex')
124
- .option('--project <cwd>', 'Filter by project cwd (exact or prefix with trailing /)')
125
- .option('--top <n>', 'Top-N projects / models per week', (v) => parseInt(v, 10), 10)
126
- .option('--out <file>', 'Write to file instead of stdout')
127
- .action(async (opts) => {
128
- const result = await runReport({
129
- since: opts.since,
130
- until: opts.until,
131
- tool: opts.tool,
132
- project: opts.project,
133
- top: opts.top,
134
- });
135
- if (opts.out)
136
- await writeFile(opts.out, result.output);
137
- else
138
- process.stdout.write(result.output);
139
- });
140
- await program.parseAsync(argv);
141
- return 0;
142
- }
143
- main(process.argv)
144
- .then((code) => process.exit(code))
145
- .catch((err) => {
146
- const msg = err instanceof Error ? err.message : String(err);
147
- console.error(`agent-stats: ${msg}`);
148
- process.exit(1);
149
- });
150
- //# sourceMappingURL=cli.js.map
package/dist/cli.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1,26 +0,0 @@
1
- /**
2
- * `agent-stats analyze` — qualitative LLM analysis of session aggregates.
3
- *
4
- * Requires a `@sentropic/llm-mesh` factory: the CLI dynamically imports
5
- * it and bails out with a friendly message if it isn't installed. This
6
- * keeps the rest of the CLI usable without llm-mesh as a hard dep.
7
- */
8
- import { type AnalysisVerdict, type LlmMeshLike } from '@sentropic/agent-stats-core';
9
- export interface AnalyzeCommandOptions {
10
- since?: string;
11
- until?: string;
12
- tool?: 'claude' | 'codex';
13
- project?: string;
14
- model?: string;
15
- limit?: number;
16
- /** Inject a mesh in tests; otherwise loaded dynamically. */
17
- mesh?: LlmMeshLike;
18
- claudeProjectsDir?: string;
19
- codexDbPath?: string;
20
- }
21
- export interface AnalyzeResult {
22
- verdicts: AnalysisVerdict[];
23
- output: string;
24
- }
25
- export declare function runAnalyze(opts?: AnalyzeCommandOptions): Promise<AnalyzeResult>;
26
- //# sourceMappingURL=analyze.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../src/commands/analyze.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAIL,KAAK,eAAe,EAEpB,KAAK,WAAW,EACjB,MAAM,6BAA6B,CAAC;AAErC,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;CAChB;AAkCD,wBAAsB,UAAU,CAAC,IAAI,GAAE,qBAA0B,GAAG,OAAO,CAAC,aAAa,CAAC,CA8BzF"}
@@ -1,74 +0,0 @@
1
- /**
2
- * `agent-stats analyze` — qualitative LLM analysis of session aggregates.
3
- *
4
- * Requires a `@sentropic/llm-mesh` factory: the CLI dynamically imports
5
- * it and bails out with a friendly message if it isn't installed. This
6
- * keeps the rest of the CLI usable without llm-mesh as a hard dep.
7
- */
8
- import { aggregateSessions, analyzeWithLlm, collect, } from '@sentropic/agent-stats-core';
9
- function parseDate(value, label) {
10
- if (!value)
11
- return undefined;
12
- const d = new Date(value);
13
- if (Number.isNaN(d.getTime())) {
14
- throw new Error(`Invalid --${label} value: ${value} (expected ISO 8601)`);
15
- }
16
- return d;
17
- }
18
- /**
19
- * Best-effort dynamic loader for `@sentropic/llm-mesh`. Returns undefined
20
- * if the package isn't installed in the current workspace.
21
- */
22
- async function loadMeshFromEnv() {
23
- try {
24
- // Dynamic import via an indirected specifier so TypeScript does not
25
- // try to resolve `@sentropic/llm-mesh` at type-check time (the dep is
26
- // optional). Wrappers can always inject their own mesh via `opts.mesh`.
27
- const meshPkg = '@sentropic/llm-mesh';
28
- const mod = (await import(/* @vite-ignore */ meshPkg));
29
- if (typeof mod.createLlmMesh !== 'function')
30
- return undefined;
31
- // Default mesh wiring is left to the caller — we have no provider config
32
- // here. Users with their own llm-mesh config should import the lib in a
33
- // small wrapper script and pass the resulting mesh via runAnalyze({mesh}).
34
- return undefined;
35
- }
36
- catch {
37
- return undefined;
38
- }
39
- }
40
- export async function runAnalyze(opts = {}) {
41
- const collectOpts = {};
42
- const since = parseDate(opts.since, 'since');
43
- const until = parseDate(opts.until, 'until');
44
- if (since !== undefined)
45
- collectOpts.since = since;
46
- if (until !== undefined)
47
- collectOpts.until = until;
48
- if (opts.project !== undefined)
49
- collectOpts.projectCwd = opts.project;
50
- if (opts.claudeProjectsDir !== undefined)
51
- collectOpts.claudeProjectsDir = opts.claudeProjectsDir;
52
- if (opts.codexDbPath !== undefined)
53
- collectOpts.codexDbPath = opts.codexDbPath;
54
- if (opts.tool) {
55
- collectOpts.sources = { claude: opts.tool === 'claude', codex: opts.tool === 'codex' };
56
- }
57
- const mesh = opts.mesh ?? (await loadMeshFromEnv());
58
- if (!mesh) {
59
- throw new Error('@sentropic/llm-mesh is not available. Install it as a dependency or wrap the lib programmatically (runAnalyze accepts { mesh }).');
60
- }
61
- const model = opts.model ?? 'mistral-small-4';
62
- const sessions = await aggregateSessions(collect(collectOpts));
63
- const limit = opts.limit ?? 10;
64
- const top = [...sessions]
65
- .sort((a, b) => b.toolCalls + b.compactions * 2 - (a.toolCalls + a.compactions * 2))
66
- .slice(0, limit);
67
- const verdicts = [];
68
- for (const s of top) {
69
- const v = await analyzeWithLlm(s, { mesh, model });
70
- verdicts.push(v);
71
- }
72
- return { verdicts, output: JSON.stringify(verdicts, null, 2) };
73
- }
74
- //# sourceMappingURL=analyze.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../src/commands/analyze.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,OAAO,GAIR,MAAM,6BAA6B,CAAC;AAoBrC,SAAS,SAAS,CAAC,KAAyB,EAAE,KAAa;IACzD,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,aAAa,KAAK,WAAW,KAAK,sBAAsB,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,eAAe;IAC5B,IAAI,CAAC;QACH,oEAAoE;QACpE,sEAAsE;QACtE,wEAAwE;QACxE,MAAM,OAAO,GAAW,qBAAqB,CAAC;QAC9C,MAAM,GAAG,GAAG,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAEpD,CAAC;QACF,IAAI,OAAO,GAAG,CAAC,aAAa,KAAK,UAAU;YAAE,OAAO,SAAS,CAAC;QAC9D,yEAAyE;QACzE,wEAAwE;QACxE,2EAA2E;QAC3E,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAA8B,EAAE;IAC/D,MAAM,WAAW,GAAmB,EAAE,CAAC;IACvC,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC7C,IAAI,KAAK,KAAK,SAAS;QAAE,WAAW,CAAC,KAAK,GAAG,KAAK,CAAC;IACnD,IAAI,KAAK,KAAK,SAAS;QAAE,WAAW,CAAC,KAAK,GAAG,KAAK,CAAC;IACnD,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;QAAE,WAAW,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC;IACtE,IAAI,IAAI,CAAC,iBAAiB,KAAK,SAAS;QAAE,WAAW,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;IACjG,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;QAAE,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;IAC/E,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,WAAW,CAAC,OAAO,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;IACzF,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,eAAe,EAAE,CAAC,CAAC;IACpD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CACb,kIAAkI,CACnI,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,iBAAiB,CAAC;IAC9C,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;IAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;IAC/B,MAAM,GAAG,GAAG,CAAC,GAAG,QAAQ,CAAC;SACtB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;SACnF,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACnB,MAAM,QAAQ,GAAsB,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;QACpB,MAAM,CAAC,GAAG,MAAM,cAAc,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACnD,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;AACjE,CAAC"}
@@ -1,20 +0,0 @@
1
- /**
2
- * `agent-stats anomalies` — run heuristic anomaly detection over a date
3
- * range. Outputs either JSON (default) or a compact table.
4
- */
5
- import { type Anomaly } from '@sentropic/agent-stats-core';
6
- export interface AnomaliesCommandOptions {
7
- since?: string;
8
- until?: string;
9
- tool?: 'claude' | 'codex';
10
- project?: string;
11
- format?: 'json' | 'table';
12
- claudeProjectsDir?: string;
13
- codexDbPath?: string;
14
- }
15
- export interface AnomaliesResult {
16
- output: string;
17
- anomalies: Anomaly[];
18
- }
19
- export declare function runAnomalies(opts?: AnomaliesCommandOptions): Promise<AnomaliesResult>;
20
- //# sourceMappingURL=anomalies.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"anomalies.d.ts","sourceRoot":"","sources":["../../src/commands/anomalies.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAGL,KAAK,OAAO,EAGb,MAAM,6BAA6B,CAAC;AAErC,MAAM,WAAW,uBAAuB;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,EAAE,CAAC;CACtB;AAgCD,wBAAsB,YAAY,CAAC,IAAI,GAAE,uBAA4B,GAAG,OAAO,CAAC,eAAe,CAAC,CA0B/F"}
@@ -1,70 +0,0 @@
1
- /**
2
- * `agent-stats anomalies` — run heuristic anomaly detection over a date
3
- * range. Outputs either JSON (default) or a compact table.
4
- */
5
- import { collect, detectAnomalies, } from '@sentropic/agent-stats-core';
6
- function parseDate(value, label) {
7
- if (!value)
8
- return undefined;
9
- const d = new Date(value);
10
- if (Number.isNaN(d.getTime())) {
11
- throw new Error(`Invalid --${label} value: ${value} (expected ISO 8601)`);
12
- }
13
- return d;
14
- }
15
- function renderTable(items) {
16
- if (items.length === 0)
17
- return '(no anomalies)';
18
- const headers = ['type', 'sev', 'tool', 'project', 'session', 'evidence'];
19
- const lines = [headers];
20
- for (const a of items) {
21
- lines.push([
22
- a.type,
23
- a.severity,
24
- a.tool,
25
- a.projectCwd,
26
- a.sessionId.slice(0, 8),
27
- JSON.stringify(a.evidence),
28
- ]);
29
- }
30
- const widths = headers.map((_, i) => Math.max(...lines.map((l) => (l[i] ?? '').length)));
31
- const fmt = (l) => l.map((c, i) => c.padEnd(widths[i] ?? 0)).join(' ');
32
- const out = [fmt(headers), widths.map((w) => '-'.repeat(w)).join(' ')];
33
- for (let i = 1; i < lines.length; i++)
34
- out.push(fmt(lines[i] ?? []));
35
- return out.join('\n');
36
- }
37
- export async function runAnomalies(opts = {}) {
38
- const collectOpts = {};
39
- const since = parseDate(opts.since, 'since');
40
- const until = parseDate(opts.until, 'until');
41
- if (since !== undefined)
42
- collectOpts.since = since;
43
- if (until !== undefined)
44
- collectOpts.until = until;
45
- if (opts.project !== undefined)
46
- collectOpts.projectCwd = opts.project;
47
- if (opts.claudeProjectsDir !== undefined)
48
- collectOpts.claudeProjectsDir = opts.claudeProjectsDir;
49
- if (opts.codexDbPath !== undefined)
50
- collectOpts.codexDbPath = opts.codexDbPath;
51
- if (opts.tool) {
52
- collectOpts.sources = {
53
- claude: opts.tool === 'claude',
54
- codex: opts.tool === 'codex',
55
- };
56
- }
57
- const anomalies = await detectAnomalies(collect(collectOpts));
58
- // Sort: severity (high → low), then type, then session id
59
- const sevRank = { high: 3, medium: 2, low: 1 };
60
- anomalies.sort((a, b) => {
61
- const sv = sevRank[b.severity] - sevRank[a.severity];
62
- if (sv !== 0)
63
- return sv;
64
- return a.type.localeCompare(b.type) || a.sessionId.localeCompare(b.sessionId);
65
- });
66
- const format = opts.format ?? 'json';
67
- const output = format === 'table' ? renderTable(anomalies) : JSON.stringify(anomalies, null, 2);
68
- return { output, anomalies };
69
- }
70
- //# sourceMappingURL=anomalies.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"anomalies.js","sourceRoot":"","sources":["../../src/commands/anomalies.ts"],"names":[],"mappings":"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"}
@@ -1,28 +0,0 @@
1
- /**
2
- * `agent-stats clean` — redact secrets in session jsonl files.
3
- *
4
- * Operates on a single file (`--input` is a file) or recursively on a
5
- * directory (`--input` is a dir). Mirrors the directory structure under
6
- * `--out` in `archive` and `llm-input` modes; rewrites in place (with a
7
- * `.bak`) in `inplace` mode.
8
- */
9
- import { type CleanMode, type CleanStats } from '@sentropic/agent-stats-core';
10
- export interface CleanCommandOptions {
11
- input: string;
12
- mode?: CleanMode;
13
- out?: string;
14
- maxToolResultBytes?: number;
15
- }
16
- export interface CleanCommandResult {
17
- output: string;
18
- totals: {
19
- files: number;
20
- secretsFound: number;
21
- truncations: number;
22
- bytesIn: number;
23
- bytesOut: number;
24
- };
25
- perFile: CleanStats[];
26
- }
27
- export declare function runClean(opts: CleanCommandOptions): Promise<CleanCommandResult>;
28
- //# sourceMappingURL=clean.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clean.d.ts","sourceRoot":"","sources":["../../src/commands/clean.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,EAAa,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEzF,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAkBD,wBAAsB,QAAQ,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA2CrF"}
@@ -1,70 +0,0 @@
1
- /**
2
- * `agent-stats clean` — redact secrets in session jsonl files.
3
- *
4
- * Operates on a single file (`--input` is a file) or recursively on a
5
- * directory (`--input` is a dir). Mirrors the directory structure under
6
- * `--out` in `archive` and `llm-input` modes; rewrites in place (with a
7
- * `.bak`) in `inplace` mode.
8
- */
9
- import { readdir, stat } from 'node:fs/promises';
10
- import path from 'node:path';
11
- import { cleanFile } from '@sentropic/agent-stats-core';
12
- async function listJsonlFiles(input) {
13
- const s = await stat(input);
14
- if (s.isFile())
15
- return [input];
16
- const out = [];
17
- const walk = async (dir) => {
18
- const entries = await readdir(dir, { withFileTypes: true });
19
- for (const e of entries) {
20
- const p = path.join(dir, e.name);
21
- if (e.isDirectory())
22
- await walk(p);
23
- else if (e.isFile() && e.name.endsWith('.jsonl'))
24
- out.push(p);
25
- }
26
- };
27
- await walk(input);
28
- return out;
29
- }
30
- export async function runClean(opts) {
31
- const mode = opts.mode ?? 'archive';
32
- if ((mode === 'archive' || mode === 'llm-input') && !opts.out) {
33
- throw new Error(`--out is required for --mode ${mode}`);
34
- }
35
- const files = await listJsonlFiles(opts.input);
36
- const inputStat = await stat(opts.input);
37
- const baseDir = inputStat.isDirectory() ? opts.input : path.dirname(opts.input);
38
- const perFile = [];
39
- const totals = { files: 0, secretsFound: 0, truncations: 0, bytesIn: 0, bytesOut: 0 };
40
- for (const file of files) {
41
- let outputPath;
42
- if (mode !== 'inplace') {
43
- const rel = path.relative(baseDir, file);
44
- outputPath = path.join(opts.out, rel);
45
- }
46
- const r = await cleanFile({
47
- filePath: file,
48
- mode,
49
- ...(outputPath ? { outputPath } : {}),
50
- ...(opts.maxToolResultBytes !== undefined
51
- ? { maxToolResultBytes: opts.maxToolResultBytes }
52
- : {}),
53
- });
54
- perFile.push(r);
55
- totals.files += 1;
56
- totals.secretsFound += r.secretsFound;
57
- totals.truncations += r.truncations;
58
- totals.bytesIn += r.bytesIn;
59
- totals.bytesOut += r.bytesOut;
60
- }
61
- const output = [
62
- `agent-stats clean — mode=${mode}`,
63
- `Files processed: ${totals.files}`,
64
- `Secrets found: ${totals.secretsFound}`,
65
- `Truncations: ${totals.truncations}`,
66
- `Bytes in → out: ${totals.bytesIn.toLocaleString()} → ${totals.bytesOut.toLocaleString()}`,
67
- ].join('\n');
68
- return { output, totals, perFile };
69
- }
70
- //# sourceMappingURL=clean.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clean.js","sourceRoot":"","sources":["../../src/commands/clean.ts"],"names":[],"mappings":"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"}
@@ -1,21 +0,0 @@
1
- /**
2
- * `agent-stats report` — render a Markdown weekly report from the
3
- * aggregations. Highlights top projects, top models, cache efficiency,
4
- * and (when present) rate-limit pressure.
5
- */
6
- import { type WeeklyAggregation } from '@sentropic/agent-stats-core';
7
- export interface ReportCommandOptions {
8
- since?: string;
9
- until?: string;
10
- tool?: 'claude' | 'codex';
11
- project?: string;
12
- top?: number;
13
- claudeProjectsDir?: string;
14
- codexDbPath?: string;
15
- }
16
- export interface ReportResult {
17
- output: string;
18
- rows: WeeklyAggregation[];
19
- }
20
- export declare function runReport(opts?: ReportCommandOptions): Promise<ReportResult>;
21
- //# sourceMappingURL=report.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/commands/report.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAML,KAAK,iBAAiB,EACvB,MAAM,6BAA6B,CAAC;AAErC,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,iBAAiB,EAAE,CAAC;CAC3B;AAwJD,wBAAsB,SAAS,CAAC,IAAI,GAAE,oBAAyB,GAAG,OAAO,CAAC,YAAY,CAAC,CAkCtF"}
@@ -1,175 +0,0 @@
1
- /**
2
- * `agent-stats report` — render a Markdown weekly report from the
3
- * aggregations. Highlights top projects, top models, cache efficiency,
4
- * and (when present) rate-limit pressure.
5
- */
6
- import { aggregateWeekly, cacheEfficiency, collect, totalInputTokens, } from '@sentropic/agent-stats-core';
7
- function parseDate(value, label) {
8
- if (!value)
9
- return undefined;
10
- const d = new Date(value);
11
- if (Number.isNaN(d.getTime())) {
12
- throw new Error(`Invalid --${label} value: ${value} (expected ISO 8601)`);
13
- }
14
- return d;
15
- }
16
- function fmt(n) {
17
- if (n >= 1e9)
18
- return `${(n / 1e9).toFixed(2)}G`;
19
- if (n >= 1e6)
20
- return `${(n / 1e6).toFixed(2)}M`;
21
- if (n >= 1e3)
22
- return `${(n / 1e3).toFixed(1)}k`;
23
- return n.toString();
24
- }
25
- function groupBy(items, key) {
26
- const m = new Map();
27
- for (const x of items) {
28
- const k = key(x);
29
- let arr = m.get(k);
30
- if (!arr) {
31
- arr = [];
32
- m.set(k, arr);
33
- }
34
- arr.push(x);
35
- }
36
- return m;
37
- }
38
- function renderWeek(weekStart, rows, top) {
39
- // Aggregate across the week
40
- const totals = rows.reduce((acc, r) => {
41
- acc.sessions += r.sessions;
42
- acc.turns += r.turns;
43
- acc.compactions += r.compactions;
44
- acc.toolCalls += r.toolCalls;
45
- acc.totalUsage.newInputTokens += r.totalUsage.newInputTokens;
46
- acc.totalUsage.cachedInputTokens += r.totalUsage.cachedInputTokens;
47
- acc.totalUsage.cacheWriteTokens += r.totalUsage.cacheWriteTokens;
48
- acc.totalUsage.outputTokens += r.totalUsage.outputTokens;
49
- acc.totalUsage.reasoningTokens += r.totalUsage.reasoningTokens;
50
- acc.codexCredits += r.estimatedCost.codexCredits;
51
- acc.claudeUsdCents += r.estimatedCost.claudeUsdCents;
52
- return acc;
53
- }, {
54
- sessions: 0,
55
- turns: 0,
56
- compactions: 0,
57
- toolCalls: 0,
58
- totalUsage: {
59
- newInputTokens: 0,
60
- cachedInputTokens: 0,
61
- cacheWriteTokens: 0,
62
- outputTokens: 0,
63
- reasoningTokens: 0,
64
- },
65
- codexCredits: 0,
66
- claudeUsdCents: 0,
67
- });
68
- const cacheRatio = cacheEfficiency(totals.totalUsage);
69
- const totalIn = totalInputTokens(totals.totalUsage);
70
- const lines = [];
71
- lines.push(`## Week ${weekStart}`, '');
72
- lines.push('### Totals');
73
- lines.push('');
74
- lines.push(`- Sessions: ${totals.sessions}`);
75
- lines.push(`- Turns: ${totals.turns}`);
76
- lines.push(`- Tool calls: ${totals.toolCalls}`);
77
- lines.push(`- Compactions: ${totals.compactions}`);
78
- lines.push(`- Input tokens (total): ${fmt(totalIn)} (cache hit ${(cacheRatio * 100).toFixed(1)}%)`);
79
- lines.push(`- Output tokens: ${fmt(totals.totalUsage.outputTokens)} (reasoning ${fmt(totals.totalUsage.reasoningTokens)})`);
80
- const costParts = [];
81
- if (totals.codexCredits > 0)
82
- costParts.push(`${totals.codexCredits.toFixed(0)} Codex credits`);
83
- if (totals.claudeUsdCents > 0)
84
- costParts.push(`$${(totals.claudeUsdCents / 100).toFixed(2)} Claude USD`);
85
- lines.push(`- Estimated cost: ${costParts.length ? costParts.join(' + ') : '-'}`);
86
- lines.push('');
87
- // Top projects
88
- const byProject = groupBy(rows, (r) => r.projectCwd);
89
- const projectAgg = [...byProject.entries()]
90
- .map(([cwd, list]) => ({
91
- cwd,
92
- tokens: list.reduce((s, r) => s + totalInputTokens(r.totalUsage) + r.totalUsage.outputTokens, 0),
93
- sessions: list.reduce((s, r) => s + r.sessions, 0),
94
- turns: list.reduce((s, r) => s + r.turns, 0),
95
- }))
96
- .sort((a, b) => b.tokens - a.tokens)
97
- .slice(0, top);
98
- lines.push('### Top projects');
99
- lines.push('');
100
- lines.push('| project | sessions | turns | tokens |');
101
- lines.push('|---|---:|---:|---:|');
102
- for (const p of projectAgg) {
103
- lines.push(`| \`${p.cwd}\` | ${p.sessions} | ${p.turns} | ${fmt(p.tokens)} |`);
104
- }
105
- lines.push('');
106
- // Top models
107
- const byModel = groupBy(rows, (r) => `${r.tool}/${r.model}`);
108
- const modelAgg = [...byModel.entries()]
109
- .map(([key, list]) => ({
110
- key,
111
- tool: list[0]?.tool ?? 'codex',
112
- model: list[0]?.model ?? 'unknown',
113
- sessions: list.reduce((s, r) => s + r.sessions, 0),
114
- turns: list.reduce((s, r) => s + r.turns, 0),
115
- tokens: list.reduce((s, r) => s + totalInputTokens(r.totalUsage) + r.totalUsage.outputTokens, 0),
116
- codex: list.reduce((s, r) => s + r.estimatedCost.codexCredits, 0),
117
- claudeUsdCents: list.reduce((s, r) => s + r.estimatedCost.claudeUsdCents, 0),
118
- }))
119
- .sort((a, b) => b.tokens - a.tokens)
120
- .slice(0, top);
121
- lines.push('### Top models');
122
- lines.push('');
123
- lines.push('| tool | model | sessions | turns | tokens | cost |');
124
- lines.push('|---|---|---:|---:|---:|---:|');
125
- for (const m of modelAgg) {
126
- const cost = m.codex > 0
127
- ? `${m.codex.toFixed(0)} cr`
128
- : m.claudeUsdCents > 0
129
- ? `$${(m.claudeUsdCents / 100).toFixed(2)}`
130
- : '-';
131
- lines.push(`| ${m.tool} | ${m.model} | ${m.sessions} | ${m.turns} | ${fmt(m.tokens)} | ${cost} |`);
132
- }
133
- lines.push('');
134
- return lines.join('\n');
135
- }
136
- export async function runReport(opts = {}) {
137
- const collectOpts = {};
138
- const since = parseDate(opts.since, 'since');
139
- const until = parseDate(opts.until, 'until');
140
- if (since !== undefined)
141
- collectOpts.since = since;
142
- if (until !== undefined)
143
- collectOpts.until = until;
144
- if (opts.project !== undefined)
145
- collectOpts.projectCwd = opts.project;
146
- if (opts.claudeProjectsDir !== undefined)
147
- collectOpts.claudeProjectsDir = opts.claudeProjectsDir;
148
- if (opts.codexDbPath !== undefined)
149
- collectOpts.codexDbPath = opts.codexDbPath;
150
- if (opts.tool) {
151
- collectOpts.sources = {
152
- claude: opts.tool === 'claude',
153
- codex: opts.tool === 'codex',
154
- };
155
- }
156
- const top = opts.top ?? 10;
157
- const rows = await aggregateWeekly(collect(collectOpts));
158
- const byWeek = groupBy(rows, (r) => r.weekStart);
159
- const weeks = [...byWeek.keys()].sort();
160
- const periodLine = weeks.length
161
- ? `Period: ${weeks[0]} → ${weeks[weeks.length - 1]} (${weeks.length} week${weeks.length === 1 ? '' : 's'})`
162
- : 'Period: no data';
163
- const head = ['# agent-stats — weekly report', '', periodLine];
164
- const body = weeks.map((w) => renderWeek(w, byWeek.get(w) ?? [], top));
165
- return {
166
- output: [...head, '', ...body]
167
- .filter((s) => s !== undefined)
168
- .join('\n')
169
- .trimEnd() + '\n',
170
- rows,
171
- };
172
- // Note: costString is currently referenced only for future use in renderWeek;
173
- // exposed indirectly to avoid dead-code elimination in some bundlers.
174
- }
175
- //# sourceMappingURL=report.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/commands/report.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,eAAe,EACf,eAAe,EACf,OAAO,EACP,gBAAgB,GAGjB,MAAM,6BAA6B,CAAC;AAiBrC,SAAS,SAAS,CAAC,KAAyB,EAAE,KAAa;IACzD,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,aAAa,KAAK,WAAW,KAAK,sBAAsB,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,GAAG,CAAC,CAAS;IACpB,IAAI,CAAC,IAAI,GAAG;QAAE,OAAO,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAChD,IAAI,CAAC,IAAI,GAAG;QAAE,OAAO,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAChD,IAAI,CAAC,IAAI,GAAG;QAAE,OAAO,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAChD,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;AACtB,CAAC;AAED,SAAS,OAAO,CAAsB,KAAU,EAAE,GAAgB;IAChE,MAAM,CAAC,GAAG,IAAI,GAAG,EAAU,CAAC;IAC5B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACjB,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,GAAG,GAAG,EAAE,CAAC;YACT,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAChB,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACd,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,UAAU,CAAC,SAAiB,EAAE,IAAyB,EAAE,GAAW;IAC3E,4BAA4B;IAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CACxB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QACT,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC;QAC3B,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC;QACrB,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC,WAAW,CAAC;QACjC,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,CAAC;QAC7B,GAAG,CAAC,UAAU,CAAC,cAAc,IAAI,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC;QAC7D,GAAG,CAAC,UAAU,CAAC,iBAAiB,IAAI,CAAC,CAAC,UAAU,CAAC,iBAAiB,CAAC;QACnE,GAAG,CAAC,UAAU,CAAC,gBAAgB,IAAI,CAAC,CAAC,UAAU,CAAC,gBAAgB,CAAC;QACjE,GAAG,CAAC,UAAU,CAAC,YAAY,IAAI,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC;QACzD,GAAG,CAAC,UAAU,CAAC,eAAe,IAAI,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC;QAC/D,GAAG,CAAC,YAAY,IAAI,CAAC,CAAC,aAAa,CAAC,YAAY,CAAC;QACjD,GAAG,CAAC,cAAc,IAAI,CAAC,CAAC,aAAa,CAAC,cAAc,CAAC;QACrD,OAAO,GAAG,CAAC;IACb,CAAC,EACD;QACE,QAAQ,EAAE,CAAC;QACX,KAAK,EAAE,CAAC;QACR,WAAW,EAAE,CAAC;QACd,SAAS,EAAE,CAAC;QACZ,UAAU,EAAE;YACV,cAAc,EAAE,CAAC;YACjB,iBAAiB,EAAE,CAAC;YACpB,gBAAgB,EAAE,CAAC;YACnB,YAAY,EAAE,CAAC;YACf,eAAe,EAAE,CAAC;SACnB;QACD,YAAY,EAAE,CAAC;QACf,cAAc,EAAE,CAAC;KAClB,CACF,CAAC;IACF,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAEpD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,WAAW,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC7C,KAAK,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,CAAC,iBAAiB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IAChD,KAAK,CAAC,IAAI,CAAC,kBAAkB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IACnD,KAAK,CAAC,IAAI,CACR,2BAA2B,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CACzF,CAAC;IACF,KAAK,CAAC,IAAI,CACR,oBAAoB,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,gBAAgB,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,GAAG,CACjH,CAAC;IACF,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,IAAI,MAAM,CAAC,YAAY,GAAG,CAAC;QAAE,SAAS,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAC/F,IAAI,MAAM,CAAC,cAAc,GAAG,CAAC;QAC3B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;IAC5E,KAAK,CAAC,IAAI,CAAC,qBAAqB,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAClF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,eAAe;IACf,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IACrD,MAAM,UAAU,GAAG,CAAC,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;SACxC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACrB,GAAG;QACH,MAAM,EAAE,IAAI,CAAC,MAAM,CACjB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,YAAY,EACxE,CAAC,CACF;QACD,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QAClD,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;KAC7C,CAAC,CAAC;SACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;SACnC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAEjB,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC/B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IACtD,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACnC,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,QAAQ,MAAM,CAAC,CAAC,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjF,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,aAAa;IACb,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;SACpC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACrB,GAAG;QACH,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,OAAO;QAC9B,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,SAAS;QAClC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QAClD,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAC5C,MAAM,EAAE,IAAI,CAAC,MAAM,CACjB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,YAAY,EACxE,CAAC,CACF;QACD,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,CAAC;QACjE,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC,CAAC;KAC7E,CAAC,CAAC;SACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;SACnC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAEjB,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC7B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;IAClE,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAC5C,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,IAAI,GACR,CAAC,CAAC,KAAK,GAAG,CAAC;YACT,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;YAC5B,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC;gBACpB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBAC3C,CAAC,CAAC,GAAG,CAAC;QACZ,KAAK,CAAC,IAAI,CACR,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,QAAQ,MAAM,CAAC,CAAC,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CACvF,CAAC;IACJ,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAA6B,EAAE;IAC7D,MAAM,WAAW,GAAmB,EAAE,CAAC;IACvC,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC7C,IAAI,KAAK,KAAK,SAAS;QAAE,WAAW,CAAC,KAAK,GAAG,KAAK,CAAC;IACnD,IAAI,KAAK,KAAK,SAAS;QAAE,WAAW,CAAC,KAAK,GAAG,KAAK,CAAC;IACnD,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;QAAE,WAAW,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC;IACtE,IAAI,IAAI,CAAC,iBAAiB,KAAK,SAAS;QAAE,WAAW,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;IACjG,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;QAAE,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;IAC/E,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,WAAW,CAAC,OAAO,GAAG;YACpB,MAAM,EAAE,IAAI,CAAC,IAAI,KAAK,QAAQ;YAC9B,KAAK,EAAE,IAAI,CAAC,IAAI,KAAK,OAAO;SAC7B,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;IAC3B,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACxC,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM;QAC7B,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,MAAM,QAAQ,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG;QAC3G,CAAC,CAAC,iBAAiB,CAAC;IACtB,MAAM,IAAI,GAAG,CAAC,+BAA+B,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;IAC/D,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IACvE,OAAO;QACL,MAAM,EACJ,CAAC,GAAG,IAAI,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;aACnB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC;aAC9B,IAAI,CAAC,IAAI,CAAC;aACV,OAAO,EAAE,GAAG,IAAI;QACrB,IAAI;KACL,CAAC;IACF,8EAA8E;IAC9E,sEAAsE;AACxE,CAAC"}
@@ -1,21 +0,0 @@
1
- /**
2
- * `agent-stats stats` — emit weekly aggregations as JSON or as a compact
3
- * ASCII table.
4
- */
5
- import { type WeeklyAggregation } from '@sentropic/agent-stats-core';
6
- export interface StatsCommandOptions {
7
- since?: string;
8
- until?: string;
9
- tool?: 'claude' | 'codex';
10
- project?: string;
11
- format?: 'json' | 'table';
12
- /** Override default scan dirs (used by tests). */
13
- claudeProjectsDir?: string;
14
- codexDbPath?: string;
15
- }
16
- export interface StatsResult {
17
- output: string;
18
- rows: WeeklyAggregation[];
19
- }
20
- export declare function runStats(opts?: StatsCommandOptions): Promise<StatsResult>;
21
- //# sourceMappingURL=stats.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,6BAA6B,CAAC;AAErC,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1B,kDAAkD;IAClD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,iBAAiB,EAAE,CAAC;CAC3B;AAuDD,wBAAsB,QAAQ,CAAC,IAAI,GAAE,mBAAwB,GAAG,OAAO,CAAC,WAAW,CAAC,CAmBnF"}
@@ -1,83 +0,0 @@
1
- /**
2
- * `agent-stats stats` — emit weekly aggregations as JSON or as a compact
3
- * ASCII table.
4
- */
5
- import { aggregateWeekly, collect, } from '@sentropic/agent-stats-core';
6
- function parseDate(value, label) {
7
- if (!value)
8
- return undefined;
9
- const d = new Date(value);
10
- if (Number.isNaN(d.getTime())) {
11
- throw new Error(`Invalid --${label} value: ${value} (expected ISO 8601)`);
12
- }
13
- return d;
14
- }
15
- function renderTable(rows) {
16
- if (rows.length === 0)
17
- return '(no data)';
18
- const headers = [
19
- 'week',
20
- 'tool',
21
- 'project',
22
- 'model',
23
- 'sess',
24
- 'turns',
25
- 'in',
26
- 'cached',
27
- 'out',
28
- 'cost',
29
- ];
30
- const lines = [headers];
31
- for (const r of rows) {
32
- const cost = r.estimatedCost.codexCredits > 0
33
- ? `${r.estimatedCost.codexCredits.toFixed(1)} cr`
34
- : r.estimatedCost.claudeUsdCents > 0
35
- ? `$${(r.estimatedCost.claudeUsdCents / 100).toFixed(2)}`
36
- : '-';
37
- lines.push([
38
- r.weekStart,
39
- r.tool,
40
- r.projectCwd,
41
- r.model,
42
- String(r.sessions),
43
- String(r.turns),
44
- String(r.totalUsage.newInputTokens),
45
- String(r.totalUsage.cachedInputTokens),
46
- String(r.totalUsage.outputTokens),
47
- cost,
48
- ]);
49
- }
50
- // compute column widths
51
- const widths = headers.map((_, i) => Math.max(...lines.map((l) => (l[i] ?? '').length)));
52
- const fmt = (l) => l.map((c, i) => (i === 2 ? c.padEnd(widths[i] ?? 0) : c.padStart(widths[i] ?? 0))).join(' ');
53
- const out = [fmt(lines[0] ?? []), widths.map((w) => '-'.repeat(w)).join(' ')];
54
- for (let i = 1; i < lines.length; i++)
55
- out.push(fmt(lines[i] ?? []));
56
- return out.join('\n');
57
- }
58
- export async function runStats(opts = {}) {
59
- const collectOpts = {};
60
- const since = parseDate(opts.since, 'since');
61
- const until = parseDate(opts.until, 'until');
62
- if (since !== undefined)
63
- collectOpts.since = since;
64
- if (until !== undefined)
65
- collectOpts.until = until;
66
- if (opts.project !== undefined)
67
- collectOpts.projectCwd = opts.project;
68
- if (opts.claudeProjectsDir !== undefined)
69
- collectOpts.claudeProjectsDir = opts.claudeProjectsDir;
70
- if (opts.codexDbPath !== undefined)
71
- collectOpts.codexDbPath = opts.codexDbPath;
72
- if (opts.tool) {
73
- collectOpts.sources = {
74
- claude: opts.tool === 'claude',
75
- codex: opts.tool === 'codex',
76
- };
77
- }
78
- const rows = await aggregateWeekly(collect(collectOpts));
79
- const format = opts.format ?? 'json';
80
- const output = format === 'table' ? renderTable(rows) : JSON.stringify(rows, null, 2);
81
- return { output, rows };
82
- }
83
- //# sourceMappingURL=stats.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":"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"}
@@ -1,26 +0,0 @@
1
- /**
2
- * `agent-stats web` — start a tiny local HTTP server that serves the
3
- * static SvelteKit build (from `@sentropic/agent-stats-web`) and exposes
4
- * `/api/stats` + `/api/anomalies` JSON endpoints backed by `runStats` /
5
- * `runAnomalies`.
6
- *
7
- * Only depends on `node:http`, `node:fs/promises` and `node:path` — no
8
- * extra HTTP framework.
9
- */
10
- export interface WebCommandOptions {
11
- port?: number;
12
- /** Override the static build dir; defaults to ../web/build relative to the CLI dist. */
13
- webDir?: string;
14
- /** Override the Claude projects dir (for tests and isolated runs). */
15
- claudeProjectsDir?: string;
16
- /** Override the Codex sqlite index path. */
17
- codexDbPath?: string;
18
- }
19
- export interface StartedWebServer {
20
- port: number;
21
- url: string;
22
- close(): Promise<void>;
23
- }
24
- export declare function startWebServer(opts?: WebCommandOptions): Promise<StartedWebServer>;
25
- export declare function runWeb(opts?: WebCommandOptions): Promise<StartedWebServer>;
26
- //# sourceMappingURL=web.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../src/commands/web.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAUH,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wFAAwF;IACxF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA6GD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,wBAAsB,cAAc,CAAC,IAAI,GAAE,iBAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA8B5F;AAED,wBAAsB,MAAM,CAAC,IAAI,GAAE,iBAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAIpF"}
@@ -1,150 +0,0 @@
1
- /**
2
- * `agent-stats web` — start a tiny local HTTP server that serves the
3
- * static SvelteKit build (from `@sentropic/agent-stats-web`) and exposes
4
- * `/api/stats` + `/api/anomalies` JSON endpoints backed by `runStats` /
5
- * `runAnomalies`.
6
- *
7
- * Only depends on `node:http`, `node:fs/promises` and `node:path` — no
8
- * extra HTTP framework.
9
- */
10
- import { createServer } from 'node:http';
11
- import { readFile, stat } from 'node:fs/promises';
12
- import path from 'node:path';
13
- import { fileURLToPath } from 'node:url';
14
- import { runStats } from './stats.js';
15
- import { runAnomalies } from './anomalies.js';
16
- const MIME_TYPES = {
17
- '.html': 'text/html; charset=utf-8',
18
- '.js': 'application/javascript; charset=utf-8',
19
- '.mjs': 'application/javascript; charset=utf-8',
20
- '.css': 'text/css; charset=utf-8',
21
- '.json': 'application/json; charset=utf-8',
22
- '.svg': 'image/svg+xml',
23
- '.png': 'image/png',
24
- '.jpg': 'image/jpeg',
25
- '.ico': 'image/x-icon',
26
- '.woff2': 'font/woff2',
27
- '.txt': 'text/plain; charset=utf-8',
28
- };
29
- function resolveDefaultWebDir() {
30
- // packages/cli/dist/commands/web.js → packages/web/build
31
- const here = path.dirname(fileURLToPath(import.meta.url));
32
- return path.resolve(here, '..', '..', '..', 'web', 'build');
33
- }
34
- function sendJson(res, status, body) {
35
- res.statusCode = status;
36
- res.setHeader('content-type', 'application/json; charset=utf-8');
37
- res.setHeader('cache-control', 'no-store');
38
- res.end(JSON.stringify(body));
39
- }
40
- function sendText(res, status, body) {
41
- res.statusCode = status;
42
- res.setHeader('content-type', 'text/plain; charset=utf-8');
43
- res.end(body);
44
- }
45
- async function serveStaticFile(res, webDir, urlPath) {
46
- // Strip query string and normalize.
47
- let p = urlPath.split('?', 1)[0] ?? '/';
48
- if (p === '/')
49
- p = '/index.html';
50
- // Prevent path traversal.
51
- const resolved = path.normalize(path.join(webDir, p));
52
- if (!resolved.startsWith(webDir)) {
53
- sendText(res, 403, 'Forbidden');
54
- return;
55
- }
56
- try {
57
- const s = await stat(resolved);
58
- if (s.isDirectory()) {
59
- return serveStaticFile(res, webDir, `${urlPath.replace(/\/$/, '')}/index.html`);
60
- }
61
- const content = await readFile(resolved);
62
- const ext = path.extname(resolved).toLowerCase();
63
- res.statusCode = 200;
64
- res.setHeader('content-type', MIME_TYPES[ext] ?? 'application/octet-stream');
65
- res.end(content);
66
- }
67
- catch {
68
- // Fallback to SPA index.html for client-side routes.
69
- try {
70
- const fallback = path.join(webDir, 'index.html');
71
- const content = await readFile(fallback);
72
- res.statusCode = 200;
73
- res.setHeader('content-type', MIME_TYPES['.html']);
74
- res.end(content);
75
- }
76
- catch {
77
- sendText(res, 404, 'Not Found');
78
- }
79
- }
80
- }
81
- function makeHandleApi(defaults) {
82
- return async (req, res) => {
83
- const url = new URL(req.url ?? '/', 'http://localhost');
84
- const since = url.searchParams.get('since') ?? undefined;
85
- const until = url.searchParams.get('until') ?? undefined;
86
- const tool = (url.searchParams.get('tool') ?? undefined);
87
- const project = url.searchParams.get('project') ?? undefined;
88
- const common = {
89
- ...(since ? { since } : {}),
90
- ...(until ? { until } : {}),
91
- ...(tool ? { tool } : {}),
92
- ...(project ? { project } : {}),
93
- ...(defaults.claudeProjectsDir ? { claudeProjectsDir: defaults.claudeProjectsDir } : {}),
94
- ...(defaults.codexDbPath ? { codexDbPath: defaults.codexDbPath } : {}),
95
- };
96
- try {
97
- if (url.pathname === '/api/stats') {
98
- const r = await runStats(common);
99
- sendJson(res, 200, r.rows);
100
- return;
101
- }
102
- if (url.pathname === '/api/anomalies') {
103
- const r = await runAnomalies(common);
104
- sendJson(res, 200, r.anomalies);
105
- return;
106
- }
107
- sendJson(res, 404, { error: 'unknown api route' });
108
- }
109
- catch (e) {
110
- sendJson(res, 500, { error: e instanceof Error ? e.message : String(e) });
111
- }
112
- };
113
- }
114
- export async function startWebServer(opts = {}) {
115
- const port = opts.port ?? 4173;
116
- const webDir = opts.webDir ?? resolveDefaultWebDir();
117
- const handleApi = makeHandleApi({
118
- ...(opts.claudeProjectsDir ? { claudeProjectsDir: opts.claudeProjectsDir } : {}),
119
- ...(opts.codexDbPath ? { codexDbPath: opts.codexDbPath } : {}),
120
- });
121
- const server = createServer((req, res) => {
122
- const url = req.url ?? '/';
123
- if (url.startsWith('/api/')) {
124
- void handleApi(req, res);
125
- return;
126
- }
127
- void serveStaticFile(res, webDir, url);
128
- });
129
- await new Promise((resolve, reject) => {
130
- const onError = (err) => reject(err);
131
- server.once('error', onError);
132
- server.listen(port, '127.0.0.1', () => {
133
- server.off('error', onError);
134
- resolve();
135
- });
136
- });
137
- const addr = server.address();
138
- const actualPort = typeof addr === 'object' && addr !== null ? addr.port : port;
139
- return {
140
- port: actualPort,
141
- url: `http://127.0.0.1:${actualPort}/`,
142
- close: () => new Promise((r) => server.close(() => r())),
143
- };
144
- }
145
- export async function runWeb(opts = {}) {
146
- const s = await startWebServer(opts);
147
- process.stdout.write(`agent-stats web running at ${s.url}\nPress Ctrl-C to stop.\n`);
148
- return s;
149
- }
150
- //# sourceMappingURL=web.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/commands/web.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts DELETED
@@ -1,13 +0,0 @@
1
- /**
2
- * @sentropic/agent-stats — CLI library entry.
3
- * The binary lives in ./cli.ts. WP4 wires the `stats` and `report`
4
- * subcommands; WP5+ will add the rest.
5
- */
6
- export { VERSION } from '@sentropic/agent-stats-core';
7
- export { runStats, type StatsCommandOptions, type StatsResult } from './commands/stats.js';
8
- export { runReport, type ReportCommandOptions, type ReportResult } from './commands/report.js';
9
- export { runClean, type CleanCommandOptions, type CleanCommandResult } from './commands/clean.js';
10
- export { runAnomalies, type AnomaliesCommandOptions, type AnomaliesResult, } from './commands/anomalies.js';
11
- export { runWeb, startWebServer, type WebCommandOptions, type StartedWebServer, } from './commands/web.js';
12
- export { runAnalyze, type AnalyzeCommandOptions, type AnalyzeResult } from './commands/analyze.js';
13
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,KAAK,mBAAmB,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC3F,OAAO,EAAE,SAAS,EAAE,KAAK,oBAAoB,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC/F,OAAO,EAAE,QAAQ,EAAE,KAAK,mBAAmB,EAAE,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAClG,OAAO,EACL,YAAY,EACZ,KAAK,uBAAuB,EAC5B,KAAK,eAAe,GACrB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,MAAM,EACN,cAAc,EACd,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,GACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,KAAK,qBAAqB,EAAE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC"}
package/dist/index.js DELETED
@@ -1,13 +0,0 @@
1
- /**
2
- * @sentropic/agent-stats — CLI library entry.
3
- * The binary lives in ./cli.ts. WP4 wires the `stats` and `report`
4
- * subcommands; WP5+ will add the rest.
5
- */
6
- export { VERSION } from '@sentropic/agent-stats-core';
7
- export { runStats } from './commands/stats.js';
8
- export { runReport } from './commands/report.js';
9
- export { runClean } from './commands/clean.js';
10
- export { runAnomalies, } from './commands/anomalies.js';
11
- export { runWeb, startWebServer, } from './commands/web.js';
12
- export { runAnalyze } from './commands/analyze.js';
13
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,QAAQ,EAA8C,MAAM,qBAAqB,CAAC;AAC3F,OAAO,EAAE,SAAS,EAAgD,MAAM,sBAAsB,CAAC;AAC/F,OAAO,EAAE,QAAQ,EAAqD,MAAM,qBAAqB,CAAC;AAClG,OAAO,EACL,YAAY,GAGb,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,MAAM,EACN,cAAc,GAGf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAkD,MAAM,uBAAuB,CAAC"}