cawdex 1.35.74 → 1.35.76

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/README.md +5 -5
  2. package/bin/anycode.js +2 -2
  3. package/bin/cawdex.js +408 -408
  4. package/bin/ecc-hooks.cjs +11 -11
  5. package/dist/agents-md.d.ts +31 -0
  6. package/dist/agents-md.js +340 -0
  7. package/dist/agents-md.js.map +1 -0
  8. package/dist/agents.js +1424 -1424
  9. package/dist/api.d.ts +1 -0
  10. package/dist/api.js +19 -14
  11. package/dist/api.js.map +1 -1
  12. package/dist/autonomous-loops.js +287 -287
  13. package/dist/benchmark-repos.d.ts +31 -0
  14. package/dist/benchmark-repos.js +234 -8
  15. package/dist/benchmark-repos.js.map +1 -1
  16. package/dist/command-palette.js +4 -2
  17. package/dist/command-palette.js.map +1 -1
  18. package/dist/compaction.js +8 -8
  19. package/dist/config.js +51 -36
  20. package/dist/config.js.map +1 -1
  21. package/dist/content-engine.js +543 -543
  22. package/dist/context-brief.d.ts +4 -0
  23. package/dist/context-brief.js +230 -0
  24. package/dist/context-brief.js.map +1 -0
  25. package/dist/cost-tracker.d.ts +33 -14
  26. package/dist/cost-tracker.js +81 -19
  27. package/dist/cost-tracker.js.map +1 -1
  28. package/dist/coverage.js +39 -39
  29. package/dist/docs-sync.js +98 -98
  30. package/dist/evaluation.js +452 -452
  31. package/dist/fixed-footer.d.ts +7 -1
  32. package/dist/fixed-footer.js +92 -18
  33. package/dist/fixed-footer.js.map +1 -1
  34. package/dist/git-workflow.js +49 -49
  35. package/dist/index.d.ts +2 -0
  36. package/dist/index.js +197 -65
  37. package/dist/index.js.map +1 -1
  38. package/dist/instant-artifact.d.ts +6 -0
  39. package/dist/instant-artifact.js +397 -0
  40. package/dist/instant-artifact.js.map +1 -0
  41. package/dist/live-queue.js +1 -1
  42. package/dist/live-queue.js.map +1 -1
  43. package/dist/model-aliases.d.ts +37 -0
  44. package/dist/model-aliases.js +203 -0
  45. package/dist/model-aliases.js.map +1 -0
  46. package/dist/orchestration.js +15 -15
  47. package/dist/permissions.d.ts +6 -0
  48. package/dist/permissions.js +53 -0
  49. package/dist/permissions.js.map +1 -1
  50. package/dist/pm2-manager.js +26 -26
  51. package/dist/query.d.ts +0 -1
  52. package/dist/query.js +74 -39
  53. package/dist/query.js.map +1 -1
  54. package/dist/refactor.js +87 -87
  55. package/dist/repo-command.js +7 -1
  56. package/dist/repo-command.js.map +1 -1
  57. package/dist/search-first.js +92 -92
  58. package/dist/skill-create.js +100 -100
  59. package/dist/stitch.js +1 -1
  60. package/dist/system-prompt.d.ts +2 -1
  61. package/dist/system-prompt.js +10 -5
  62. package/dist/system-prompt.js.map +1 -1
  63. package/dist/tools/github-repo-digest.d.ts +1 -1
  64. package/dist/tools/github-repo-digest.js +38 -6
  65. package/dist/tools/github-repo-digest.js.map +1 -1
  66. package/dist/types.d.ts +3 -0
  67. package/dist/types.js.map +1 -1
  68. package/dist/verification.js +55 -55
  69. package/package.json +1 -1
  70. package/resources/__init__.py +1 -1
  71. package/resources/exgentic/cawdex_agent/README.md +114 -114
  72. package/resources/exgentic/cawdex_agent/__init__.py +5 -5
  73. package/resources/exgentic/cawdex_agent/agent.py +605 -605
  74. package/resources/exgentic/cawdex_agent/requirements.txt +2 -2
  75. package/resources/exgentic/cawdex_agent/setup.sh +21 -21
  76. package/resources/exgentic/cawdex_agent/utils.py +1061 -1061
  77. package/resources/hal/cawdex_agent/README.md +24 -24
  78. package/resources/hal/cawdex_agent/__init__.py +1 -1
  79. package/resources/hal/cawdex_agent/main.py +550 -550
  80. package/resources/hal/cawdex_agent/requirements.txt +2 -2
  81. package/resources/kbench/cawdex_agent/README.md +107 -107
  82. package/resources/kbench/cawdex_agent/adapter.manifest.json +19 -19
  83. package/resources/kbench/cawdex_agent/runner.mjs +753 -753
  84. package/resources/open_agent_leaderboard/cawdex-agent-card.md +119 -119
  85. package/resources/terminal_bench/__init__.py +1 -1
  86. package/resources/terminal_bench/cawdex_agent.py +174 -174
  87. package/resources/terminal_bench/setup.sh +121 -121
@@ -0,0 +1,4 @@
1
+ export interface ContextBriefOptions {
2
+ maxFiles?: number;
3
+ }
4
+ export declare function buildContextBrief(cwd?: string, options?: ContextBriefOptions): string;
@@ -0,0 +1,230 @@
1
+ import { execFileSync } from 'node:child_process';
2
+ import { existsSync, readFileSync, readdirSync, statSync } from 'node:fs';
3
+ import { basename, join, relative, resolve } from 'node:path';
4
+ import { globSync } from 'glob';
5
+ const IGNORE_GLOBS = [
6
+ '**/.git/**',
7
+ '**/node_modules/**',
8
+ '**/.venv/**',
9
+ '**/venv/**',
10
+ '**/__pycache__/**',
11
+ '**/.pytest_cache/**',
12
+ '**/dist/**',
13
+ '**/build/**',
14
+ '**/coverage/**',
15
+ '**/target/**',
16
+ '**/.next/**',
17
+ '**/out/**',
18
+ ];
19
+ const MANIFEST_NAMES = new Set([
20
+ 'package.json',
21
+ 'package-lock.json',
22
+ 'pnpm-lock.yaml',
23
+ 'yarn.lock',
24
+ 'bun.lock',
25
+ 'bun.lockb',
26
+ 'pyproject.toml',
27
+ 'uv.lock',
28
+ 'requirements.txt',
29
+ 'Pipfile',
30
+ 'Pipfile.lock',
31
+ 'Cargo.toml',
32
+ 'Cargo.lock',
33
+ 'go.mod',
34
+ 'go.sum',
35
+ 'Makefile',
36
+ 'Dockerfile',
37
+ 'docker-compose.yml',
38
+ 'docker-compose.yaml',
39
+ 'compose.yml',
40
+ 'compose.yaml',
41
+ 'pom.xml',
42
+ 'mvnw',
43
+ 'mvnw.cmd',
44
+ 'build.gradle',
45
+ 'build.gradle.kts',
46
+ 'settings.gradle',
47
+ 'settings.gradle.kts',
48
+ 'gradlew',
49
+ 'gradlew.bat',
50
+ 'deno.json',
51
+ ]);
52
+ export function buildContextBrief(cwd = process.cwd(), options = {}) {
53
+ const root = resolve(cwd);
54
+ if (!existsSync(root))
55
+ return `context brief: path does not exist: ${root}`;
56
+ if (!statSync(root).isDirectory())
57
+ return `context brief: path is not a directory: ${root}`;
58
+ const maxFiles = clamp(options.maxFiles ?? 300, 50, 1000);
59
+ const allFiles = globSync('**/*', {
60
+ cwd: root,
61
+ nodir: true,
62
+ dot: true,
63
+ maxDepth: 4,
64
+ ignore: IGNORE_GLOBS,
65
+ }).map(normalizePath).sort((a, b) => a.localeCompare(b));
66
+ const files = allFiles.slice(0, maxFiles);
67
+ const manifests = files.filter((file) => MANIFEST_NAMES.has(basename(file)));
68
+ const scripts = readPackageScripts(root);
69
+ const verifiers = inferVerifierCommands(manifests, scripts);
70
+ const rootEntries = listRootEntries(root);
71
+ const languages = summarizeExtensions(files);
72
+ return [
73
+ '# Context Brief',
74
+ `Root: ${root}`,
75
+ `Files scanned: ${files.length}${allFiles.length > files.length ? ` of ${allFiles.length}` : ''}`,
76
+ '',
77
+ '## Git',
78
+ gitSummary(root),
79
+ '',
80
+ '## Root Entries',
81
+ formatList(rootEntries, 24),
82
+ '',
83
+ '## Manifests',
84
+ formatList(manifests, 30),
85
+ '',
86
+ '## Language Footprint',
87
+ formatList(languages, 16),
88
+ '',
89
+ '## Package Scripts',
90
+ formatList(scripts.map((script) => `${script.name}: ${script.command}`), 24),
91
+ '',
92
+ '## Likely Verification Commands',
93
+ formatList(verifiers, 12),
94
+ '',
95
+ '## Suggested First Moves',
96
+ '1. Read the relevant manifest and task/instruction file before editing.',
97
+ '2. Run the narrowest likely verifier before a broad test/build command when feasible.',
98
+ '3. Treat dirty git entries as user work unless this task explicitly owns them.',
99
+ ].join('\n');
100
+ }
101
+ function listRootEntries(root) {
102
+ try {
103
+ return readdirSync(root, { withFileTypes: true })
104
+ .filter((entry) => !['.git', 'node_modules', 'dist', 'build', 'coverage'].includes(entry.name))
105
+ .sort((a, b) => a.name.localeCompare(b.name))
106
+ .slice(0, 40)
107
+ .map((entry) => entry.isDirectory() ? `${entry.name}/` : entry.name);
108
+ }
109
+ catch {
110
+ return [];
111
+ }
112
+ }
113
+ function readPackageScripts(root) {
114
+ const path = join(root, 'package.json');
115
+ if (!existsSync(path))
116
+ return [];
117
+ try {
118
+ const parsed = JSON.parse(readFileSync(path, 'utf-8'));
119
+ return Object.entries(parsed.scripts ?? {})
120
+ .filter((entry) => typeof entry[1] === 'string')
121
+ .map(([name, command]) => ({ name, command }))
122
+ .slice(0, 30);
123
+ }
124
+ catch {
125
+ return [];
126
+ }
127
+ }
128
+ function inferVerifierCommands(manifests, scripts) {
129
+ const names = new Set(manifests.map((file) => basename(file)));
130
+ const commands = [];
131
+ const add = (command) => {
132
+ if (!commands.includes(command))
133
+ commands.push(command);
134
+ };
135
+ const scriptNames = new Set(scripts.map((script) => script.name));
136
+ const packageManager = detectPackageManager(names);
137
+ if (names.has('package.json')) {
138
+ for (const name of ['test', 'typecheck', 'lint', 'build']) {
139
+ if (scriptNames.has(name))
140
+ add(`${packageManager} run ${name}`);
141
+ }
142
+ }
143
+ if (names.has('pyproject.toml') || names.has('pytest.ini') || Array.from(names).some((name) => /^requirements/.test(name))) {
144
+ add(names.has('uv.lock') ? 'uv run pytest' : 'python -m pytest');
145
+ }
146
+ if (names.has('Cargo.toml'))
147
+ add('cargo test');
148
+ if (names.has('go.mod'))
149
+ add('go test ./...');
150
+ if (names.has('pom.xml'))
151
+ add(names.has('mvnw') ? './mvnw test' : 'mvn test');
152
+ if (Array.from(names).some((name) => /^build\.gradle/.test(name))) {
153
+ add(names.has('gradlew') ? './gradlew test' : 'gradle test');
154
+ }
155
+ return commands;
156
+ }
157
+ function detectPackageManager(names) {
158
+ if (names.has('pnpm-lock.yaml'))
159
+ return 'pnpm';
160
+ if (names.has('yarn.lock'))
161
+ return 'yarn';
162
+ if (names.has('bun.lock') || names.has('bun.lockb'))
163
+ return 'bun';
164
+ return 'npm';
165
+ }
166
+ function summarizeExtensions(files) {
167
+ const counts = new Map();
168
+ for (const file of files) {
169
+ const base = basename(file);
170
+ const idx = base.lastIndexOf('.');
171
+ const ext = idx > 0 ? base.slice(idx).toLowerCase() : '(no ext)';
172
+ counts.set(ext, (counts.get(ext) ?? 0) + 1);
173
+ }
174
+ return Array.from(counts.entries())
175
+ .sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0]))
176
+ .slice(0, 16)
177
+ .map(([ext, count]) => `${ext}: ${count}`);
178
+ }
179
+ function gitSummary(root) {
180
+ try {
181
+ const inside = execFileSync('git', ['rev-parse', '--is-inside-work-tree'], {
182
+ cwd: root,
183
+ encoding: 'utf-8',
184
+ stdio: ['ignore', 'pipe', 'ignore'],
185
+ timeout: 3000,
186
+ }).trim();
187
+ if (inside !== 'true')
188
+ return 'Not a git worktree.';
189
+ const branch = execFileSync('git', ['branch', '--show-current'], {
190
+ cwd: root,
191
+ encoding: 'utf-8',
192
+ stdio: ['ignore', 'pipe', 'ignore'],
193
+ timeout: 3000,
194
+ }).trim() || '(detached)';
195
+ const top = execFileSync('git', ['rev-parse', '--show-toplevel'], {
196
+ cwd: root,
197
+ encoding: 'utf-8',
198
+ stdio: ['ignore', 'pipe', 'ignore'],
199
+ timeout: 3000,
200
+ }).trim();
201
+ const status = execFileSync('git', ['status', '--short'], {
202
+ cwd: root,
203
+ encoding: 'utf-8',
204
+ stdio: ['ignore', 'pipe', 'ignore'],
205
+ timeout: 3000,
206
+ maxBuffer: 128 * 1024,
207
+ }).trim();
208
+ const count = status ? status.split(/\r?\n/).length : 0;
209
+ const location = relative(root, top) || '.';
210
+ return `branch: ${branch}\nworktree: ${location}\ndirty entries: ${count}`;
211
+ }
212
+ catch {
213
+ return 'Git state unavailable.';
214
+ }
215
+ }
216
+ function formatList(items, limit) {
217
+ if (items.length === 0)
218
+ return '(none found)';
219
+ const shown = items.slice(0, limit).map((item) => `- ${item}`);
220
+ if (items.length > limit)
221
+ shown.push(`- ... ${items.length - limit} more`);
222
+ return shown.join('\n');
223
+ }
224
+ function normalizePath(value) {
225
+ return value.replace(/\\/g, '/');
226
+ }
227
+ function clamp(value, min, max) {
228
+ return Math.max(min, Math.min(max, Math.floor(value)));
229
+ }
230
+ //# sourceMappingURL=context-brief.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-brief.js","sourceRoot":"","sources":["../src/context-brief.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,15 @@
1
+ declare function getUsageFile(): string;
1
2
  export interface UsageEntry {
2
3
  timestamp: string;
3
4
  sessionId: string;
5
+ provider?: string;
4
6
  model: string;
5
7
  promptTokens: number;
6
8
  completionTokens: number;
7
9
  totalTokens: number;
8
10
  estimatedCost: number;
11
+ firstTokenMs?: number;
12
+ durationMs?: number;
9
13
  }
10
14
  export interface UsageData {
11
15
  entries: UsageEntry[];
@@ -24,26 +28,41 @@ export declare function getModelCost(model: string): {
24
28
  output: number;
25
29
  };
26
30
  export declare function estimateCost(model: string, promptTokens: number, completionTokens: number): number;
27
- export declare function trackUsage(sessionId: string, model: string, promptTokens: number, completionTokens: number): {
31
+ export declare function trackUsage(sessionId: string, model: string, promptTokens: number, completionTokens: number, metadata?: {
32
+ provider?: string;
33
+ firstTokenMs?: number | null;
34
+ durationMs?: number | null;
35
+ }): {
28
36
  cost: number;
29
37
  warning?: string;
38
+ entry: UsageEntry;
30
39
  };
31
- export declare function getUsageSummary(): {
32
- today: {
33
- tokens: number;
34
- cost: number;
35
- calls: number;
36
- };
37
- month: {
38
- tokens: number;
39
- cost: number;
40
- calls: number;
41
- };
40
+ export interface UsagePeriodSummary {
41
+ tokens: number;
42
+ promptTokens: number;
43
+ completionTokens: number;
44
+ cost: number;
45
+ calls: number;
46
+ averageFirstTokenMs: number | null;
47
+ averageDurationMs: number | null;
48
+ }
49
+ export interface UsageSummary {
50
+ today: UsagePeriodSummary;
51
+ month: UsagePeriodSummary;
42
52
  allTime: {
43
53
  tokens: number;
44
54
  cost: number;
45
55
  };
56
+ session: UsagePeriodSummary;
57
+ last: UsageEntry | null;
46
58
  budget: UsageData['budget'];
47
- };
59
+ }
60
+ export declare function getUsageSummary(sessionId?: string): UsageSummary;
48
61
  export declare function setBudget(daily: number, monthly: number, threshold?: number): void;
49
- export declare function printUsageSummary(): void;
62
+ export declare function printUsageSummary(sessionId?: string): void;
63
+ declare function summarizeEntries(entries: UsageEntry[]): UsagePeriodSummary;
64
+ export declare const _internal: {
65
+ getUsageFile: typeof getUsageFile;
66
+ summarizeEntries: typeof summarizeEntries;
67
+ };
68
+ export {};
@@ -7,7 +7,9 @@ import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'node:fs';
7
7
  import { join } from 'node:path';
8
8
  import chalk from 'chalk';
9
9
  import { getConfigDir } from './config.js';
10
- const USAGE_FILE = join(getConfigDir(), 'usage.json');
10
+ function getUsageFile() {
11
+ return join(getConfigDir(), 'usage.json');
12
+ }
11
13
  // Cost per 1M tokens (input/output) for common models via OpenRouter
12
14
  const MODEL_COSTS = {
13
15
  // OpenRouter free tier/router
@@ -34,7 +36,8 @@ const MODEL_COSTS = {
34
36
  _default: { input: 1.0, output: 3.0 },
35
37
  };
36
38
  function loadUsage() {
37
- if (!existsSync(USAGE_FILE)) {
39
+ const usageFile = getUsageFile();
40
+ if (!existsSync(usageFile)) {
38
41
  return {
39
42
  entries: [],
40
43
  budget: { dailyLimit: 0, monthlyLimit: 0, alertThreshold: 0.8 },
@@ -42,7 +45,7 @@ function loadUsage() {
42
45
  };
43
46
  }
44
47
  try {
45
- return JSON.parse(readFileSync(USAGE_FILE, 'utf-8'));
48
+ return JSON.parse(readFileSync(usageFile, 'utf-8'));
46
49
  }
47
50
  catch {
48
51
  return {
@@ -54,7 +57,7 @@ function loadUsage() {
54
57
  }
55
58
  function saveUsage(data) {
56
59
  mkdirSync(getConfigDir(), { recursive: true });
57
- writeFileSync(USAGE_FILE, JSON.stringify(data, null, 2), 'utf-8');
60
+ writeFileSync(getUsageFile(), JSON.stringify(data, null, 2), 'utf-8');
58
61
  }
59
62
  export function getModelCost(model) {
60
63
  if (model === 'openrouter/free' || model.endsWith(':free'))
@@ -72,17 +75,20 @@ export function estimateCost(model, promptTokens, completionTokens) {
72
75
  const costs = getModelCost(model);
73
76
  return (promptTokens * costs.input + completionTokens * costs.output) / 1_000_000;
74
77
  }
75
- export function trackUsage(sessionId, model, promptTokens, completionTokens) {
78
+ export function trackUsage(sessionId, model, promptTokens, completionTokens, metadata = {}) {
76
79
  const data = loadUsage();
77
80
  const cost = estimateCost(model, promptTokens, completionTokens);
78
81
  const entry = {
79
82
  timestamp: new Date().toISOString(),
80
83
  sessionId,
84
+ provider: metadata.provider,
81
85
  model,
82
86
  promptTokens,
83
87
  completionTokens,
84
88
  totalTokens: promptTokens + completionTokens,
85
89
  estimatedCost: cost,
90
+ firstTokenMs: finiteOptional(metadata.firstTokenMs),
91
+ durationMs: finiteOptional(metadata.durationMs),
86
92
  };
87
93
  data.entries.push(entry);
88
94
  data.totals.allTimeTokens += entry.totalTokens;
@@ -112,26 +118,24 @@ export function trackUsage(sessionId, model, promptTokens, completionTokens) {
112
118
  todayCost >= data.budget.dailyLimit * data.budget.alertThreshold) {
113
119
  warning = `Approaching daily limit: $${todayCost.toFixed(4)} / $${data.budget.dailyLimit}`;
114
120
  }
115
- return { cost, warning };
121
+ return { cost, warning, entry };
116
122
  }
117
- export function getUsageSummary() {
123
+ export function getUsageSummary(sessionId) {
118
124
  const data = loadUsage();
119
125
  const today = new Date().toISOString().slice(0, 10);
120
126
  const month = new Date().toISOString().slice(0, 7);
121
127
  const todayEntries = data.entries.filter((e) => e.timestamp.startsWith(today));
122
128
  const monthEntries = data.entries.filter((e) => e.timestamp.startsWith(month));
129
+ const sessionEntries = sessionId
130
+ ? data.entries.filter((e) => e.sessionId === sessionId)
131
+ : [];
132
+ const last = sessionEntries.at(-1) ?? data.entries.at(-1) ?? null;
123
133
  return {
124
- today: {
125
- tokens: todayEntries.reduce((s, e) => s + e.totalTokens, 0),
126
- cost: todayEntries.reduce((s, e) => s + e.estimatedCost, 0),
127
- calls: todayEntries.length,
128
- },
129
- month: {
130
- tokens: monthEntries.reduce((s, e) => s + e.totalTokens, 0),
131
- cost: monthEntries.reduce((s, e) => s + e.estimatedCost, 0),
132
- calls: monthEntries.length,
133
- },
134
+ today: summarizeEntries(todayEntries),
135
+ month: summarizeEntries(monthEntries),
134
136
  allTime: { tokens: data.totals.allTimeTokens, cost: data.totals.allTimeCost },
137
+ session: summarizeEntries(sessionEntries),
138
+ last,
135
139
  budget: data.budget,
136
140
  };
137
141
  }
@@ -140,15 +144,73 @@ export function setBudget(daily, monthly, threshold = 0.8) {
140
144
  data.budget = { dailyLimit: daily, monthlyLimit: monthly, alertThreshold: threshold };
141
145
  saveUsage(data);
142
146
  }
143
- export function printUsageSummary() {
144
- const s = getUsageSummary();
147
+ export function printUsageSummary(sessionId) {
148
+ const s = getUsageSummary(sessionId);
145
149
  console.log(chalk.cyan('\n Usage Summary'));
150
+ if (sessionId) {
151
+ console.log(chalk.dim(` Session: ${s.session.tokens.toLocaleString()} tokens | $${s.session.cost.toFixed(4)} | ${s.session.calls} calls${formatLatencySummary(s.session)}`));
152
+ }
146
153
  console.log(chalk.dim(` Today: ${s.today.tokens.toLocaleString()} tokens | $${s.today.cost.toFixed(4)} | ${s.today.calls} calls`));
147
154
  console.log(chalk.dim(` Month: ${s.month.tokens.toLocaleString()} tokens | $${s.month.cost.toFixed(4)} | ${s.month.calls} calls`));
148
155
  console.log(chalk.dim(` All-time: ${s.allTime.tokens.toLocaleString()} tokens | $${s.allTime.cost.toFixed(4)}`));
156
+ if (s.last) {
157
+ const provider = s.last.provider ? `${s.last.provider} | ` : '';
158
+ console.log(chalk.dim(` Last: ${provider}${s.last.model} | ${s.last.totalTokens.toLocaleString()} tokens | $${s.last.estimatedCost.toFixed(4)}` +
159
+ `${formatLastLatency(s.last)}`));
160
+ }
149
161
  if (s.budget.dailyLimit > 0) {
150
162
  console.log(chalk.dim(` Budget: $${s.budget.dailyLimit}/day, $${s.budget.monthlyLimit}/month`));
151
163
  }
152
164
  console.log();
153
165
  }
166
+ function summarizeEntries(entries) {
167
+ const firstTokenValues = entries
168
+ .map((e) => e.firstTokenMs)
169
+ .filter((n) => typeof n === 'number' && Number.isFinite(n));
170
+ const durationValues = entries
171
+ .map((e) => e.durationMs)
172
+ .filter((n) => typeof n === 'number' && Number.isFinite(n));
173
+ return {
174
+ tokens: entries.reduce((s, e) => s + e.totalTokens, 0),
175
+ promptTokens: entries.reduce((s, e) => s + e.promptTokens, 0),
176
+ completionTokens: entries.reduce((s, e) => s + e.completionTokens, 0),
177
+ cost: entries.reduce((s, e) => s + e.estimatedCost, 0),
178
+ calls: entries.length,
179
+ averageFirstTokenMs: average(firstTokenValues),
180
+ averageDurationMs: average(durationValues),
181
+ };
182
+ }
183
+ function average(values) {
184
+ if (values.length === 0)
185
+ return null;
186
+ return values.reduce((sum, value) => sum + value, 0) / values.length;
187
+ }
188
+ function finiteOptional(value) {
189
+ return typeof value === 'number' && Number.isFinite(value) && value >= 0
190
+ ? Math.round(value)
191
+ : undefined;
192
+ }
193
+ function formatLatencySummary(summary) {
194
+ const bits = [];
195
+ if (summary.averageFirstTokenMs !== null)
196
+ bits.push(`avg first ${formatMs(summary.averageFirstTokenMs)}`);
197
+ if (summary.averageDurationMs !== null)
198
+ bits.push(`avg turn ${formatMs(summary.averageDurationMs)}`);
199
+ return bits.length ? ` | ${bits.join(', ')}` : '';
200
+ }
201
+ function formatLastLatency(entry) {
202
+ const bits = [];
203
+ if (typeof entry.firstTokenMs === 'number')
204
+ bits.push(`first ${formatMs(entry.firstTokenMs)}`);
205
+ if (typeof entry.durationMs === 'number')
206
+ bits.push(`turn ${formatMs(entry.durationMs)}`);
207
+ return bits.length ? ` | ${bits.join(', ')}` : '';
208
+ }
209
+ function formatMs(ms) {
210
+ return ms >= 1000 ? `${(ms / 1000).toFixed(1)}s` : `${Math.round(ms)}ms`;
211
+ }
212
+ export const _internal = {
213
+ getUsageFile,
214
+ summarizeEntries,
215
+ };
154
216
  //# sourceMappingURL=cost-tracker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cost-tracker.js","sourceRoot":"","sources":["../src/cost-tracker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cost-tracker.js","sourceRoot":"","sources":["../src/cost-tracker.ts"],"names":[],"mappings":"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"}
package/dist/coverage.js CHANGED
@@ -73,45 +73,45 @@ function getCoverageCommand(framework) {
73
73
  export function buildCoveragePrompt(cwd) {
74
74
  const framework = detectTestFramework(cwd);
75
75
  const coverageCmd = getCoverageCommand(framework);
76
- return `Analyze test coverage for this project and suggest improvements.
77
-
78
- ## Current Working Directory
79
- \`\`\`
80
- ${cwd}
81
- \`\`\`
82
-
83
- ## Detected Test Framework
84
- ${framework !== 'unknown' ? chalk.green(framework) : chalk.yellow('unknown (manually specify)')}
85
-
86
- ## Instructions
87
- 1. Run the coverage command: \`${coverageCmd}\`
88
- 2. Parse the coverage report and extract:
89
- - Total lines of code
90
- - Lines covered
91
- - Coverage percentage
92
- - List of uncovered or poorly-covered files
93
- 3. Analyze the results:
94
- - Identify the top 3-5 uncovered functions or code paths
95
- - Prioritize by impact (critical paths first)
96
- 4. Suggest specific tests to write:
97
- - For each uncovered area, describe what test cases would improve coverage
98
- - Focus on edge cases and error handling
99
- 5. Set a target of 80% coverage minimum
100
-
101
- ## Expected Output Format
102
- Provide:
103
- 1. Current coverage summary (percentage and line counts)
104
- 2. List of uncovered files
105
- 3. For each top uncovered function:
106
- - Function name and location
107
- - What it does
108
- - Suggested test cases to cover it
109
- 4. Estimated effort to reach 80% coverage
110
- 5. Commands to run the suggested tests
111
-
112
- ## Notes
113
- - If coverage is already ≥80%, suggest areas for improvement beyond line coverage
114
- - Consider mutation testing or branch coverage for deeper insights
76
+ return `Analyze test coverage for this project and suggest improvements.
77
+
78
+ ## Current Working Directory
79
+ \`\`\`
80
+ ${cwd}
81
+ \`\`\`
82
+
83
+ ## Detected Test Framework
84
+ ${framework !== 'unknown' ? chalk.green(framework) : chalk.yellow('unknown (manually specify)')}
85
+
86
+ ## Instructions
87
+ 1. Run the coverage command: \`${coverageCmd}\`
88
+ 2. Parse the coverage report and extract:
89
+ - Total lines of code
90
+ - Lines covered
91
+ - Coverage percentage
92
+ - List of uncovered or poorly-covered files
93
+ 3. Analyze the results:
94
+ - Identify the top 3-5 uncovered functions or code paths
95
+ - Prioritize by impact (critical paths first)
96
+ 4. Suggest specific tests to write:
97
+ - For each uncovered area, describe what test cases would improve coverage
98
+ - Focus on edge cases and error handling
99
+ 5. Set a target of 80% coverage minimum
100
+
101
+ ## Expected Output Format
102
+ Provide:
103
+ 1. Current coverage summary (percentage and line counts)
104
+ 2. List of uncovered files
105
+ 3. For each top uncovered function:
106
+ - Function name and location
107
+ - What it does
108
+ - Suggested test cases to cover it
109
+ 4. Estimated effort to reach 80% coverage
110
+ 5. Commands to run the suggested tests
111
+
112
+ ## Notes
113
+ - If coverage is already ≥80%, suggest areas for improvement beyond line coverage
114
+ - Consider mutation testing or branch coverage for deeper insights
115
115
  - Ensure all new tests have clear assertions`;
116
116
  }
117
117
  /**