somtum 2.3.0 → 3.1.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.
Files changed (99) hide show
  1. package/README.md +101 -852
  2. package/dist/agents/claude_code.d.ts +3 -0
  3. package/dist/agents/claude_code.d.ts.map +1 -0
  4. package/dist/agents/claude_code.js +112 -0
  5. package/dist/agents/claude_code.js.map +1 -0
  6. package/dist/agents/codex.d.ts +3 -0
  7. package/dist/agents/codex.d.ts.map +1 -0
  8. package/dist/agents/codex.js +173 -0
  9. package/dist/agents/codex.js.map +1 -0
  10. package/dist/agents/index.d.ts +7 -0
  11. package/dist/agents/index.d.ts.map +1 -0
  12. package/dist/agents/index.js +24 -0
  13. package/dist/agents/index.js.map +1 -0
  14. package/dist/agents/shared.d.ts +3 -0
  15. package/dist/agents/shared.d.ts.map +1 -0
  16. package/dist/agents/shared.js +18 -0
  17. package/dist/agents/shared.js.map +1 -0
  18. package/dist/agents/types.d.ts +11 -0
  19. package/dist/agents/types.d.ts.map +1 -0
  20. package/dist/agents/types.js +2 -0
  21. package/dist/agents/types.js.map +1 -0
  22. package/dist/cli/doctor.d.ts.map +1 -1
  23. package/dist/cli/doctor.js +65 -78
  24. package/dist/cli/doctor.js.map +1 -1
  25. package/dist/cli/hook.d.ts.map +1 -1
  26. package/dist/cli/hook.js +1 -4
  27. package/dist/cli/hook.js.map +1 -1
  28. package/dist/cli/index.js +14 -7
  29. package/dist/cli/index.js.map +1 -1
  30. package/dist/cli/init.d.ts +19 -0
  31. package/dist/cli/init.d.ts.map +1 -1
  32. package/dist/cli/init.js +68 -36
  33. package/dist/cli/init.js.map +1 -1
  34. package/dist/cli/init_codex.d.ts +12 -0
  35. package/dist/cli/init_codex.d.ts.map +1 -0
  36. package/dist/cli/init_codex.js +53 -0
  37. package/dist/cli/init_codex.js.map +1 -0
  38. package/dist/cli/serve.d.ts.map +1 -1
  39. package/dist/cli/serve.js +2 -0
  40. package/dist/cli/serve.js.map +1 -1
  41. package/dist/cli/stats.d.ts +4 -0
  42. package/dist/cli/stats.d.ts.map +1 -1
  43. package/dist/cli/stats.js +71 -43
  44. package/dist/cli/stats.js.map +1 -1
  45. package/dist/cli/ui.d.ts +1 -1
  46. package/dist/cli/ui.d.ts.map +1 -1
  47. package/dist/cli/ui.js +1 -1
  48. package/dist/cli/ui.js.map +1 -1
  49. package/dist/core/extractor.d.ts +1 -0
  50. package/dist/core/extractor.d.ts.map +1 -1
  51. package/dist/core/extractor.js +93 -52
  52. package/dist/core/extractor.js.map +1 -1
  53. package/dist/core/ledger.d.ts +28 -0
  54. package/dist/core/ledger.d.ts.map +1 -0
  55. package/dist/core/ledger.js +43 -0
  56. package/dist/core/ledger.js.map +1 -0
  57. package/dist/core/llm_backend.d.ts +7 -0
  58. package/dist/core/llm_backend.d.ts.map +1 -0
  59. package/dist/core/llm_backend.js +44 -0
  60. package/dist/core/llm_backend.js.map +1 -0
  61. package/dist/core/memory_files.d.ts.map +1 -1
  62. package/dist/core/memory_files.js +2 -3
  63. package/dist/core/memory_files.js.map +1 -1
  64. package/dist/core/retriever/bm25.d.ts +1 -1
  65. package/dist/core/retriever/bm25.d.ts.map +1 -1
  66. package/dist/core/retriever/bm25.js +11 -1
  67. package/dist/core/retriever/bm25.js.map +1 -1
  68. package/dist/core/schema.d.ts +19 -4
  69. package/dist/core/schema.d.ts.map +1 -1
  70. package/dist/core/schema.js +10 -1
  71. package/dist/core/schema.js.map +1 -1
  72. package/dist/core/session_progress.d.ts +10 -0
  73. package/dist/core/session_progress.d.ts.map +1 -0
  74. package/dist/core/session_progress.js +39 -0
  75. package/dist/core/session_progress.js.map +1 -0
  76. package/dist/core/transcript.d.ts.map +1 -1
  77. package/dist/core/transcript.js +2 -108
  78. package/dist/core/transcript.js.map +1 -1
  79. package/dist/dashboard/index.html +1 -1
  80. package/dist/db/migrations/006_token_ledger.sql +33 -0
  81. package/dist/hooks/post_session.d.ts +6 -5
  82. package/dist/hooks/post_session.d.ts.map +1 -1
  83. package/dist/hooks/post_session.js +107 -57
  84. package/dist/hooks/post_session.js.map +1 -1
  85. package/dist/hooks/pre_prompt.d.ts.map +1 -1
  86. package/dist/hooks/pre_prompt.js +14 -1
  87. package/dist/hooks/pre_prompt.js.map +1 -1
  88. package/dist/hooks/pre_read.d.ts +16 -2
  89. package/dist/hooks/pre_read.d.ts.map +1 -1
  90. package/dist/hooks/pre_read.js +81 -26
  91. package/dist/hooks/pre_read.js.map +1 -1
  92. package/dist/index.d.ts +1 -1
  93. package/dist/index.d.ts.map +1 -1
  94. package/dist/index.js +1 -1
  95. package/dist/index.js.map +1 -1
  96. package/dist/mcp/tools.d.ts.map +1 -1
  97. package/dist/mcp/tools.js +2 -0
  98. package/dist/mcp/tools.js.map +1 -1
  99. package/package.json +9 -3
@@ -1,3 +1,4 @@
1
+ import { type LedgerSummary } from '../core/ledger.js';
1
2
  export interface StatsSnapshot {
2
3
  project_id: string;
3
4
  memories: number;
@@ -11,6 +12,7 @@ export interface StatsSnapshot {
11
12
  strategy: string;
12
13
  call_count: number;
13
14
  }>;
15
+ ledger: LedgerSummary;
14
16
  tokens_saved_estimated: number;
15
17
  tokens_spent_estimated: number;
16
18
  net_estimated: number;
@@ -20,9 +22,11 @@ export declare function collectStats(opts?: {
20
22
  cwd?: string;
21
23
  dbPath?: string;
22
24
  projectId?: string;
25
+ since?: number;
23
26
  }): StatsSnapshot;
24
27
  export declare function statsCommand(options?: {
25
28
  json?: boolean;
26
29
  cwd?: string;
30
+ since?: string;
27
31
  }): number;
28
32
  //# sourceMappingURL=stats.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/cli/stats.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,qBAAqB,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvE,sBAAsB,EAAE,MAAM,CAAC;IAC/B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1C;AAED,wBAAgB,YAAY,CAC1B,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/D,aAAa,CAqCf;AAkCD,wBAAgB,YAAY,CAAC,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,MAAM,CAqBnF"}
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/cli/stats.ts"],"names":[],"mappings":"AAMA,OAAO,EAAe,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAKpE,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,qBAAqB,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAEvE,MAAM,EAAE,aAAa,CAAC;IAEtB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1C;AAED,wBAAgB,YAAY,CAC1B,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/E,aAAa,CAuCf;AAiFD,wBAAgB,YAAY,CAC1B,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAC7D,MAAM,CA2BR"}
package/dist/cli/stats.js CHANGED
@@ -4,8 +4,10 @@ import { openDb } from '../core/db.js';
4
4
  import { MemoryStore } from '../core/store.js';
5
5
  import { PromptCache } from '../core/cache.js';
6
6
  import { RetrievalStatsStore } from '../core/retrieval_stats.js';
7
+ import { TokenLedger } from '../core/ledger.js';
7
8
  import { resolveProjectId } from '../core/project_id.js';
8
- import { projectDir, globalDbPath, GLOBAL_PROJECT_ID } from '../config.js';
9
+ import { pickBackend } from '../core/llm_backend.js';
10
+ import { loadConfig, projectDir, globalDbPath, GLOBAL_PROJECT_ID } from '../config.js';
9
11
  export function collectStats(opts = {}) {
10
12
  const cwd = opts.cwd ?? process.cwd();
11
13
  const projectId = opts.projectId ?? resolveProjectId(cwd);
@@ -24,6 +26,7 @@ export function collectStats(opts = {}) {
24
26
  const globalMemories = globalDb
25
27
  ? new MemoryStore(globalDb).countByProject(GLOBAL_PROJECT_ID)
26
28
  : 0;
29
+ const ledgerOpts = opts.since !== undefined ? { since: opts.since } : {};
27
30
  return {
28
31
  project_id: projectId,
29
32
  memories: store.countByProject(projectId),
@@ -34,6 +37,7 @@ export function collectStats(opts = {}) {
34
37
  cache_misses: cacheHits.miss_count,
35
38
  cache_hit_rate: cacheHits.hit_rate,
36
39
  retrieval_by_strategy: retrievalBreakdown,
40
+ ledger: new TokenLedger(db).summary(projectId, ledgerOpts),
37
41
  tokens_saved_estimated: saved,
38
42
  tokens_spent_estimated: spent,
39
43
  net_estimated: saved - spent,
@@ -45,58 +49,82 @@ export function collectStats(opts = {}) {
45
49
  globalDb?.close();
46
50
  }
47
51
  }
48
- function printHuman(s) {
52
+ const n = (v) => v.toLocaleString('en-US');
53
+ const row = (label, count, tokens, note = '') => ` ${label.padEnd(18)} ${count.padStart(10)} ${tokens.padStart(14)}${note ? ` ${note}` : ''}`;
54
+ function printHuman(s, sinceLabel) {
49
55
  console.log(`project ${s.project_id}`);
50
- console.log(`memories ${s.memories}`);
51
- if (s.global_memories > 0)
52
- console.log(`global ${s.global_memories}`);
53
- for (const [k, n] of Object.entries(s.by_kind)) {
54
- if (n > 0)
55
- console.log(` ${k.padEnd(15)} ${n}`);
56
+ console.log(`memories ${s.memories}${s.global_memories > 0 ? ` (global: ${s.global_memories})` : ''}`);
57
+ for (const [k, c] of Object.entries(s.by_kind)) {
58
+ if (c > 0)
59
+ console.log(` ${k.padEnd(15)} ${c}`);
56
60
  }
57
- console.log(`cache entries ${s.cache_entries}`);
58
- console.log(`cache hits ${s.cache_hits}`);
59
- console.log(`cache misses ${s.cache_misses}`);
60
- const hitRate = s.cache_hit_rate !== null ? `${(s.cache_hit_rate * 100).toFixed(1)}%` : 'n/a';
61
- console.log(`cache hit rate ${hitRate}`);
62
- if (s.retrieval_by_strategy.length > 0) {
63
- console.log(`retrieval calls by strategy:`);
64
- for (const r of s.retrieval_by_strategy) {
65
- console.log(` ${r.strategy.padEnd(12)} ${r.call_count}`);
66
- }
61
+ const l = s.ledger;
62
+ console.log('');
63
+ console.log(`Somtum's own token use, metered (${sinceLabel})`);
64
+ const skipped = l.extraction_skipped.events > 0 ? `${l.extraction_skipped.events} skipped` : '';
65
+ console.log(row('extraction', `${l.extraction.events} calls`, `${n(l.extraction.tokens)} tok`, skipped));
66
+ if (l.file_summary.events > 0) {
67
+ console.log(row('file summaries', `${l.file_summary.events} calls`, `${n(l.file_summary.tokens)} tok`));
67
68
  }
68
- console.log(`tokens saved ${s.tokens_saved_estimated} (estimated)`);
69
- console.log(`tokens spent ${s.tokens_spent_estimated} (estimated)`);
70
- console.log(`net ${s.net_estimated} (estimated)`);
71
- const br = s.breakeven_ratio_estimated;
72
- if (br !== null) {
73
- const warn = br < 1.5 ? ' — below 1.5x, check `somtum doctor`' : '';
74
- console.log(`breakeven ${br}x (estimated)${warn}`);
69
+ console.log(row('injected context', `${l.injection.events} prompts`, `${n(l.injection.tokens)} tok`, "added to your agent's input"));
70
+ console.log(row('total', '', `${n(l.overhead_tokens)} tok`));
71
+ const g = l.file_gate;
72
+ if (g.denied.events > 0) {
73
+ console.log('');
74
+ console.log(`File gating, metered (${sinceLabel})`);
75
+ console.log(row('full reads avoided', `${g.denied.events}`, `${n(g.denied.tokens)} tok`));
76
+ console.log(row('summaries shown', `${g.summary.events}`, `-${n(g.summary.tokens)} tok`));
77
+ console.log(row('read anyway', `${g.reread.events}`, `-${n(g.reread.tokens)} tok`));
78
+ const verdict = g.net_tokens >= 0 ? 'saved' : 'lost — consider turning file gating off';
79
+ console.log(row('net', '', `${g.net_tokens >= 0 ? '' : '-'}${n(Math.abs(g.net_tokens))} tok`, verdict));
75
80
  }
76
- else {
77
- console.log(`breakeven n/a (no extraction cost recorded yet)`);
81
+ if (s.cache_entries > 0 || s.cache_hits > 0) {
82
+ console.log('');
83
+ const hitRate = s.cache_hit_rate !== null ? `${(s.cache_hit_rate * 100).toFixed(1)}%` : 'n/a';
84
+ console.log(`prompt cache ${s.cache_entries} entries · ${s.cache_hits} hits · ${s.cache_misses} misses · ${hitRate} hit rate`);
78
85
  }
86
+ if (s.retrieval_by_strategy.length > 0) {
87
+ console.log(`retrieval ${s.retrieval_by_strategy.map((r) => `${r.strategy} ${r.call_count}`).join(' · ')}`);
88
+ }
89
+ console.log('');
90
+ console.log(`estimate ~${n(s.tokens_saved_estimated)} tokens of context replaced by memories`);
91
+ console.log(' (a heuristic, not a measurement: see https://riz007.github.io/somtum/guide/costs)');
92
+ }
93
+ function parseSince(raw) {
94
+ if (!raw)
95
+ return { label: 'all time' };
96
+ const m = /^(\d+)d$/.exec(raw.trim());
97
+ if (!m)
98
+ throw new Error(`--since expects a number of days like 7d, got "${raw}"`);
99
+ const days = Number(m[1]);
100
+ return { since: Date.now() - days * 24 * 60 * 60 * 1000, label: `last ${days} days` };
79
101
  }
80
102
  export function statsCommand(options = {}) {
81
- const snap = collectStats({ cwd: options.cwd ?? process.cwd() });
103
+ const cwd = options.cwd ?? process.cwd();
104
+ let window;
105
+ try {
106
+ window = parseSince(options.since);
107
+ }
108
+ catch (err) {
109
+ console.error(`somtum: ${err.message}`);
110
+ return 1;
111
+ }
112
+ const snap = collectStats(window.since !== undefined ? { cwd, since: window.since } : { cwd });
82
113
  if (options.json) {
83
114
  console.log(JSON.stringify(snap, null, 2));
115
+ return 0;
84
116
  }
85
- else {
86
- printHuman(snap);
87
- if (snap.memories === 0) {
88
- console.log('');
89
- const hasKey = Boolean(process.env['ANTHROPIC_API_KEY']?.trim());
90
- if (!hasKey) {
91
- console.log('hint: ANTHROPIC_API_KEY is not set. The SessionEnd hook cannot extract');
92
- console.log(' observations without it. Add it to your shell profile, then re-run');
93
- console.log(' a Claude session. Check full setup with: somtum doctor');
94
- }
95
- else {
96
- console.log('hint: No memories captured yet. After your next Claude session ends,');
97
- console.log(' the SessionEnd hook will extract observations automatically.');
98
- console.log(' Run `somtum doctor` to verify the hook is installed correctly.');
99
- }
117
+ printHuman(snap, window.label);
118
+ if (snap.memories === 0) {
119
+ console.log('');
120
+ if (!pickBackend(loadConfig({ cwd }))) {
121
+ console.log('hint: no extraction backend is available, so sessions cannot be captured.');
122
+ console.log(' Install the claude or codex CLI, or set ANTHROPIC_API_KEY in your shell');
123
+ console.log(' profile. Check the full setup with: somtum doctor');
124
+ }
125
+ else {
126
+ console.log('hint: no memories yet. They are extracted when a session ends or compacts.');
127
+ console.log(' Run `somtum doctor` if a session has ended and this is still empty.');
100
128
  }
101
129
  }
102
130
  return 0;
@@ -1 +1 @@
1
- {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/cli/stats.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/cli/stats.ts"],"names":[],"mappings":"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"}
package/dist/cli/ui.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- export declare const SOMTUM_LOGO = "\n \u001B[32m\u001B[1m_____ \u001B[31m____ \u001B[33m__ \u001B[32m__________ \u001B[31m__ \u001B[33m___\n \u001B[32m/ ___/ \u001B[31m/ __ \\\u001B[33m/ |/ \u001B[32m/_ __/ / / \u001B[31m/ |/ \u001B[33m/\n \u001B[32m\\__ \\ \u001B[31m/ / / /\u001B[33m /|_/ / \u001B[32m/ / / / / \u001B[31m/ /|_/ / \u001B[33m\n \u001B[32m___/ / \u001B[31m/_/ / \u001B[33m/ / / \u001B[32m/ / / /_/ / \u001B[31m/ / / \u001B[33m\n\u001B[32m/____/ \u001B[31m\\____/ \u001B[33m/_/ /_/ \u001B[32m/_/ \\____/ \u001B[31m/_/ /_/ \u001B[0m\n \n \u001B[1m\u001B[32mLocal-first memory for Claude Code\u001B[0m\n";
1
+ export declare const SOMTUM_LOGO = "\n \u001B[32m\u001B[1m_____ \u001B[31m____ \u001B[33m__ \u001B[32m__________ \u001B[31m__ \u001B[33m___\n \u001B[32m/ ___/ \u001B[31m/ __ \\\u001B[33m/ |/ \u001B[32m/_ __/ / / \u001B[31m/ |/ \u001B[33m/\n \u001B[32m\\__ \\ \u001B[31m/ / / /\u001B[33m /|_/ / \u001B[32m/ / / / / \u001B[31m/ /|_/ / \u001B[33m\n \u001B[32m___/ / \u001B[31m/_/ / \u001B[33m/ / / \u001B[32m/ / / /_/ / \u001B[31m/ / / \u001B[33m\n\u001B[32m/____/ \u001B[31m\\____/ \u001B[33m/_/ /_/ \u001B[32m/_/ \\____/ \u001B[31m/_/ /_/ \u001B[0m\n \n \u001B[1m\u001B[32mLocal-first memory for coding agents\u001B[0m\n";
2
2
  export declare function printLogo(): void;
3
3
  //# sourceMappingURL=ui.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/cli/ui.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,WAAW,0oBAQvB,CAAC;AAEF,wBAAgB,SAAS,IAAI,IAAI,CAKhC"}
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/cli/ui.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,WAAW,4oBAQvB,CAAC;AAEF,wBAAgB,SAAS,IAAI,IAAI,CAKhC"}
package/dist/cli/ui.js CHANGED
@@ -10,7 +10,7 @@ export const SOMTUM_LOGO = `
10
10
  ${GREEN}___/ / ${RED}/_/ / ${YELLOW}/ / / ${GREEN}/ / / /_/ / ${RED}/ / / ${YELLOW}
11
11
  ${GREEN}/____/ ${RED}\\____/ ${YELLOW}/_/ /_/ ${GREEN}/_/ \\____/ ${RED}/_/ /_/ ${RESET}
12
12
 
13
- ${BOLD}${GREEN}Local-first memory for Claude Code${RESET}
13
+ ${BOLD}${GREEN}Local-first memory for coding agents${RESET}
14
14
  `;
15
15
  export function printLogo() {
16
16
  // Only print if we're in a TTY to avoid messing up pipes/logs
@@ -1 +1 @@
1
- {"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/cli/ui.ts"],"names":[],"mappings":"AAAA,MAAM,KAAK,GAAG,SAAS,CAAC;AACxB,MAAM,IAAI,GAAG,SAAS,CAAC;AACvB,MAAM,KAAK,GAAG,UAAU,CAAC;AACzB,MAAM,GAAG,GAAG,UAAU,CAAC;AACvB,MAAM,MAAM,GAAG,UAAU,CAAC;AAE1B,MAAM,CAAC,MAAM,WAAW,GAAG;KACtB,KAAK,GAAG,IAAI,SAAS,GAAG,SAAS,MAAM,OAAO,KAAK,eAAe,GAAG,OAAO,MAAM;IACnF,KAAK,UAAU,GAAG,UAAU,MAAM,UAAU,KAAK,eAAe,GAAG,UAAU,MAAM;IACnF,KAAK,WAAW,GAAG,UAAU,MAAM,WAAW,KAAK,aAAa,GAAG,YAAY,MAAM;GACtF,KAAK,UAAU,GAAG,SAAS,MAAM,UAAU,KAAK,eAAe,GAAG,WAAW,MAAM;EACpF,KAAK,UAAU,GAAG,WAAW,MAAM,YAAY,KAAK,gBAAgB,GAAG,cAAc,KAAK;;KAEvF,IAAI,GAAG,KAAK,qCAAqC,KAAK;CAC1D,CAAC;AAEF,MAAM,UAAU,SAAS;IACvB,8DAA8D;IAC9D,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/cli/ui.ts"],"names":[],"mappings":"AAAA,MAAM,KAAK,GAAG,SAAS,CAAC;AACxB,MAAM,IAAI,GAAG,SAAS,CAAC;AACvB,MAAM,KAAK,GAAG,UAAU,CAAC;AACzB,MAAM,GAAG,GAAG,UAAU,CAAC;AACvB,MAAM,MAAM,GAAG,UAAU,CAAC;AAE1B,MAAM,CAAC,MAAM,WAAW,GAAG;KACtB,KAAK,GAAG,IAAI,SAAS,GAAG,SAAS,MAAM,OAAO,KAAK,eAAe,GAAG,OAAO,MAAM;IACnF,KAAK,UAAU,GAAG,UAAU,MAAM,UAAU,KAAK,eAAe,GAAG,UAAU,MAAM;IACnF,KAAK,WAAW,GAAG,UAAU,MAAM,WAAW,KAAK,aAAa,GAAG,YAAY,MAAM;GACtF,KAAK,UAAU,GAAG,SAAS,MAAM,UAAU,KAAK,eAAe,GAAG,WAAW,MAAM;EACpF,KAAK,UAAU,GAAG,WAAW,MAAM,YAAY,KAAK,gBAAgB,GAAG,cAAc,KAAK;;KAEvF,IAAI,GAAG,KAAK,uCAAuC,KAAK;CAC5D,CAAC;AAEF,MAAM,UAAU,SAAS;IACvB,8DAA8D;IAC9D,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC"}
@@ -12,6 +12,7 @@ export interface LlmCaller {
12
12
  }>;
13
13
  }
14
14
  export declare function claudeCodeCaller(): LlmCaller;
15
+ export declare function codexCliCaller(codexModel?: string): LlmCaller;
15
16
  export declare function anthropicCaller(client: Anthropic): LlmCaller;
16
17
  export interface ExtractOptions {
17
18
  model: string;
@@ -1 +1 @@
1
- {"version":3,"file":"extractor.d.ts","sourceRoot":"","sources":["../../src/core/extractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAGL,KAAK,oBAAoB,EAE1B,MAAM,aAAa,CAAC;AAKrB,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE;QACb,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;KACd,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC1E;AAED,wBAAgB,gBAAgB,IAAI,SAAS,CAiE5C;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,CAiB5D;AAyDD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,oBAAoB,EAAE,CAAC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,OAAO,CAC3B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,iBAAiB,CAAC,CA2D5B;AAMD,wBAAgB,mBAAmB,CACjC,gBAAgB,EAAE,MAAM,EACxB,WAAW,EAAE,oBAAoB,EACjC,iBAAiB,EAAE,MAAM,GACxB,MAAM,CAKR"}
1
+ {"version":3,"file":"extractor.d.ts","sourceRoot":"","sources":["../../src/core/extractor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAGL,KAAK,oBAAoB,EAE1B,MAAM,aAAa,CAAC;AAKrB,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE;QACb,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;KACd,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC1E;AAsDD,wBAAgB,gBAAgB,IAAI,SAAS,CAyB5C;AAKD,wBAAgB,cAAc,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAW7D;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,CAiB5D;AAwED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,oBAAoB,EAAE,CAAC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,OAAO,CAC3B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,iBAAiB,CAAC,CA8D5B;AAMD,wBAAgB,mBAAmB,CACjC,gBAAgB,EAAE,MAAM,EACxB,WAAW,EAAE,oBAAoB,EACjC,iBAAiB,EAAE,MAAM,GACxB,MAAM,CAKR"}
@@ -1,58 +1,84 @@
1
+ import { tmpdir } from 'node:os';
1
2
  import { ExtractorResponseSchema, ObservationKind, } from './schema.js';
2
3
  import { countTokens } from './tokens.js';
4
+ // Runs an agent CLI in one-shot mode and resolves with its stdout.
5
+ // SOMTUM_IN_HOOK tells nested somtum hooks (fired when the child agent's own
6
+ // session ends) to exit immediately; without it, post_session → agent CLI →
7
+ // post_session → ... deadlocks.
8
+ async function runCli({ command, args, input, cwd }) {
9
+ const { spawn } = await import('node:child_process');
10
+ const TIMEOUT_MS = 60_000;
11
+ return new Promise((resolve, reject) => {
12
+ const child = spawn(command, args, {
13
+ cwd,
14
+ stdio: ['pipe', 'pipe', 'pipe'],
15
+ env: { ...process.env, SOMTUM_IN_HOOK: '1' },
16
+ });
17
+ const stdoutChunks = [];
18
+ const stderrChunks = [];
19
+ child.stdout.on('data', (chunk) => stdoutChunks.push(chunk));
20
+ child.stderr.on('data', (chunk) => stderrChunks.push(chunk));
21
+ const timer = setTimeout(() => {
22
+ child.kill();
23
+ reject(new Error(`${command} CLI timed out after ${TIMEOUT_MS / 1000}s`));
24
+ }, TIMEOUT_MS);
25
+ child.on('error', (err) => {
26
+ clearTimeout(timer);
27
+ reject(err.code === 'ENOENT' ? new Error(`${command} CLI not found on PATH`) : err);
28
+ });
29
+ child.on('close', (code) => {
30
+ clearTimeout(timer);
31
+ if (code !== 0) {
32
+ const errText = Buffer.concat(stderrChunks).toString('utf8').trim();
33
+ reject(new Error(`${command} exited ${code}: ${errText || '(no stderr)'}`));
34
+ return;
35
+ }
36
+ resolve(Buffer.concat(stdoutChunks).toString('utf8').trim());
37
+ });
38
+ child.stdin.write(input, 'utf8');
39
+ child.stdin.end();
40
+ });
41
+ }
3
42
  export function claudeCodeCaller() {
4
43
  return {
5
44
  async complete({ model, system, user }) {
6
- const { spawn } = await import('node:child_process');
7
- // Combine system + user since the claude CLI doesn't expose a --system flag.
8
- // Claude handles <system>…</system> XML delimiters correctly.
9
- const fullPrompt = `<system>\n${system}\n</system>\n\n${user}`;
10
- return new Promise((resolve, reject) => {
11
- // SOMTUM_IN_HOOK tells any nested somtum hook invocations (triggered when
12
- // the child claude process fires SessionEnd after completing) to exit
13
- // immediately. Without this, the child's SessionEnd hook would call
14
- // somtum hook post_session → claude -p → ... causing a deadlock.
15
- // Pass the extraction model through — otherwise the CLI falls back to
16
- // the user's default model (often Opus), making extraction ~10× pricier.
17
- const args = ['-p', '--output-format', 'text'];
18
- if (model && model.trim().length > 0)
19
- args.push('--model', model);
20
- const child = spawn('claude', args, {
21
- stdio: ['pipe', 'pipe', 'pipe'],
22
- env: { ...process.env, SOMTUM_IN_HOOK: '1' },
23
- });
24
- const stdoutChunks = [];
25
- const stderrChunks = [];
26
- child.stdout.on('data', (chunk) => stdoutChunks.push(chunk));
27
- child.stderr.on('data', (chunk) => stderrChunks.push(chunk));
28
- const timer = setTimeout(() => {
29
- child.kill();
30
- reject(new Error('claude CLI timed out after 60s'));
31
- }, 60_000);
32
- child.on('error', (err) => {
33
- clearTimeout(timer);
34
- reject(err.code === 'ENOENT'
35
- ? new Error('Neither ANTHROPIC_API_KEY nor the claude CLI is available. ' +
36
- 'Set ANTHROPIC_API_KEY in your shell profile or install Claude Code.')
37
- : err);
38
- });
39
- child.on('close', (code) => {
40
- clearTimeout(timer);
41
- if (code !== 0) {
42
- const errText = Buffer.concat(stderrChunks).toString('utf8').trim();
43
- reject(new Error(`claude exited ${code}: ${errText || '(no stderr)'}`));
44
- return;
45
- }
46
- const text = Buffer.concat(stdoutChunks).toString('utf8').trim();
47
- resolve({
48
- text,
49
- inputTokens: countTokens(system + user),
50
- outputTokens: countTokens(text),
51
- });
52
- });
53
- child.stdin.write(fullPrompt, 'utf8');
54
- child.stdin.end();
55
- });
45
+ // Pass the extraction model through — otherwise the CLI falls back to
46
+ // the user's default model (often Opus), making extraction ~10× pricier.
47
+ // The remaining flags strip Claude Code's own system prompt, tool schemas,
48
+ // MCP servers and CLAUDE.md: ~37k tokens of overhead on every call otherwise.
49
+ const args = [
50
+ '-p',
51
+ '--output-format',
52
+ 'text',
53
+ '--system-prompt',
54
+ system,
55
+ '--tools',
56
+ '',
57
+ '--strict-mcp-config',
58
+ '--setting-sources',
59
+ '',
60
+ '--no-session-persistence',
61
+ ];
62
+ if (model && model.trim().length > 0)
63
+ args.push('--model', model);
64
+ const text = await runCli({ command: 'claude', args, input: user });
65
+ return { text, inputTokens: countTokens(system + user), outputTokens: countTokens(text) };
66
+ },
67
+ };
68
+ }
69
+ // `codex exec` has no system-prompt flag, so the instructions travel inline.
70
+ // It runs from the OS temp dir so the project's AGENTS.md is not loaded, and
71
+ // uses its own model setting: extraction.model names a Claude model.
72
+ export function codexCliCaller(codexModel) {
73
+ return {
74
+ async complete({ system, user }) {
75
+ const args = ['exec', '--ephemeral', '--skip-git-repo-check', '--sandbox', 'read-only'];
76
+ if (codexModel && codexModel.trim().length > 0)
77
+ args.push('--model', codexModel);
78
+ args.push('-');
79
+ const input = `<instructions>\n${system}\n</instructions>\n\n${user}`;
80
+ const text = await runCli({ command: 'codex', args, input, cwd: tmpdir() });
81
+ return { text, inputTokens: countTokens(input), outputTokens: countTokens(text) };
56
82
  },
57
83
  };
58
84
  }
@@ -96,7 +122,7 @@ const JSON_SCHEMA_HINT = {
96
122
  };
97
123
  const SYSTEM_PROMPT = `You are Somtum's session extractor.
98
124
 
99
- Read the provided Claude Code session transcript and return durable observations:
125
+ Read the provided coding-agent session transcript and return durable observations:
100
126
 
101
127
  EXTRACT:
102
128
  - Decisions with rationale ("we use pnpm because X")
@@ -127,6 +153,20 @@ function extractJsonBlob(text) {
127
153
  return fence[1].trim();
128
154
  return trimmed;
129
155
  }
156
+ // Without delimiters and a closing instruction, a transcript that ends
157
+ // mid-task gets continued: the model role-plays the agent and emits tool calls
158
+ // instead of JSON. Stating the cap also stops it writing observations we drop.
159
+ function transcriptPrompt(transcript, maxObservations) {
160
+ return [
161
+ '<transcript>',
162
+ transcript,
163
+ '</transcript>',
164
+ '',
165
+ 'The transcript above is a finished session to analyze, not a conversation to continue.',
166
+ 'Do not act as the assistant in it.',
167
+ `Return only the JSON object described in the system prompt, with at most ${maxObservations} observations: the most durable ones.`,
168
+ ].join('\n');
169
+ }
130
170
  export async function extract(transcript, caller, options) {
131
171
  let attempt = 0;
132
172
  let lastError;
@@ -137,7 +177,7 @@ export async function extract(transcript, caller, options) {
137
177
  // On retry: send only the bad output + error, not the full transcript again.
138
178
  // Re-sending the transcript would double the token cost of every retry.
139
179
  const userPrompt = attempt === 0
140
- ? `Transcript:\n\n${transcript}`
180
+ ? transcriptPrompt(transcript, options.maxObservations)
141
181
  : `Your previous response failed schema validation.\n\nError: ${lastError}\n\nYour previous output:\n${lastRawOutput}\n\nReturn valid JSON only, matching the schema in the system prompt.`;
142
182
  const { text, inputTokens, outputTokens } = await caller.complete({
143
183
  model: options.model,
@@ -154,6 +194,7 @@ export async function extract(transcript, caller, options) {
154
194
  }
155
195
  catch (err) {
156
196
  lastError = `JSON.parse failed: ${err.message}`;
197
+ console.warn(`[somtum] extraction attempt ${attempt + 1} returned non-JSON: ${text.slice(0, 120)}`);
157
198
  attempt += 1;
158
199
  continue;
159
200
  }
@@ -1 +1 @@
1
- {"version":3,"file":"extractor.js","sourceRoot":"","sources":["../../src/core/extractor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"extractor.js","sourceRoot":"","sources":["../../src/core/extractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { DB } from './db.js';
2
+ export type LedgerEvent = 'extraction' | 'extraction_skipped' | 'file_summary' | 'injection' | 'file_gate_denied' | 'file_gate_summary' | 'file_gate_reread';
3
+ export interface LedgerCount {
4
+ events: number;
5
+ tokens: number;
6
+ }
7
+ export interface LedgerSummary {
8
+ extraction: LedgerCount;
9
+ extraction_skipped: LedgerCount;
10
+ file_summary: LedgerCount;
11
+ injection: LedgerCount;
12
+ file_gate: {
13
+ denied: LedgerCount;
14
+ summary: LedgerCount;
15
+ reread: LedgerCount;
16
+ net_tokens: number;
17
+ };
18
+ overhead_tokens: number;
19
+ }
20
+ export declare class TokenLedger {
21
+ private readonly db;
22
+ constructor(db: DB);
23
+ record(projectId: string, event: LedgerEvent, tokens: number, sessionId?: string | null, now?: number): void;
24
+ summary(projectId: string, opts?: {
25
+ since?: number;
26
+ }): LedgerSummary;
27
+ }
28
+ //# sourceMappingURL=ledger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ledger.d.ts","sourceRoot":"","sources":["../../src/core/ledger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAElC,MAAM,MAAM,WAAW,GACnB,YAAY,GACZ,oBAAoB,GACpB,cAAc,GACd,WAAW,GACX,kBAAkB,GAClB,mBAAmB,GACnB,kBAAkB,CAAC;AAEvB,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,WAAW,CAAC;IACxB,kBAAkB,EAAE,WAAW,CAAC;IAChC,YAAY,EAAE,WAAW,CAAC;IAC1B,SAAS,EAAE,WAAW,CAAC;IACvB,SAAS,EAAE;QACT,MAAM,EAAE,WAAW,CAAC;QACpB,OAAO,EAAE,WAAW,CAAC;QACrB,MAAM,EAAE,WAAW,CAAC;QAEpB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IAEF,eAAe,EAAE,MAAM,CAAC;CACzB;AAID,qBAAa,WAAW;IACV,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,EAAE;IAEnC,MAAM,CACJ,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,MAAM,GAAG,IAAW,EAC/B,GAAG,SAAa,GACf,IAAI;IASP,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,aAAa;CAkCzE"}
@@ -0,0 +1,43 @@
1
+ const EMPTY = { events: 0, tokens: 0 };
2
+ export class TokenLedger {
3
+ db;
4
+ constructor(db) {
5
+ this.db = db;
6
+ }
7
+ record(projectId, event, tokens, sessionId = null, now = Date.now()) {
8
+ this.db
9
+ .prepare(`INSERT INTO token_ledger (project_id, session_id, event, tokens, created_at)
10
+ VALUES (?, ?, ?, ?, ?)`)
11
+ .run(projectId, sessionId, event, Math.max(0, Math.round(tokens)), now);
12
+ }
13
+ summary(projectId, opts = {}) {
14
+ const rows = this.db
15
+ .prepare(`SELECT event, COUNT(*) AS events, COALESCE(SUM(tokens), 0) AS tokens
16
+ FROM token_ledger
17
+ WHERE project_id = ? AND created_at >= ?
18
+ GROUP BY event`)
19
+ .all(projectId, opts.since ?? 0);
20
+ const by = new Map(rows.map((r) => [r.event, { events: r.events, tokens: r.tokens }]));
21
+ const get = (e) => by.get(e) ?? EMPTY;
22
+ const denied = get('file_gate_denied');
23
+ const summary = get('file_gate_summary');
24
+ const reread = get('file_gate_reread');
25
+ const extraction = get('extraction');
26
+ const fileSummary = get('file_summary');
27
+ const injection = get('injection');
28
+ return {
29
+ extraction,
30
+ extraction_skipped: get('extraction_skipped'),
31
+ file_summary: fileSummary,
32
+ injection,
33
+ file_gate: {
34
+ denied,
35
+ summary,
36
+ reread,
37
+ net_tokens: denied.tokens - summary.tokens - reread.tokens,
38
+ },
39
+ overhead_tokens: extraction.tokens + fileSummary.tokens + injection.tokens,
40
+ };
41
+ }
42
+ }
43
+ //# sourceMappingURL=ledger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ledger.js","sourceRoot":"","sources":["../../src/core/ledger.ts"],"names":[],"mappings":"AAgCA,MAAM,KAAK,GAAgB,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AAEpD,MAAM,OAAO,WAAW;IACO;IAA7B,YAA6B,EAAM;QAAN,OAAE,GAAF,EAAE,CAAI;IAAG,CAAC;IAEvC,MAAM,CACJ,SAAiB,EACjB,KAAkB,EAClB,MAAc,EACd,YAA2B,IAAI,EAC/B,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;QAEhB,IAAI,CAAC,EAAE;aACJ,OAAO,CACN;gCACwB,CACzB;aACA,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,CAAC,SAAiB,EAAE,OAA2B,EAAE;QACtD,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE;aACjB,OAAO,CACN;;;wBAGgB,CACjB;aACA,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,CAA6D,CAAC;QAE/F,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;QACvF,MAAM,GAAG,GAAG,CAAC,CAAc,EAAe,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC;QAEhE,MAAM,MAAM,GAAG,GAAG,CAAC,kBAAkB,CAAC,CAAC;QACvC,MAAM,OAAO,GAAG,GAAG,CAAC,mBAAmB,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,GAAG,CAAC,kBAAkB,CAAC,CAAC;QACvC,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC;QACrC,MAAM,WAAW,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC;QACxC,MAAM,SAAS,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC;QAEnC,OAAO;YACL,UAAU;YACV,kBAAkB,EAAE,GAAG,CAAC,oBAAoB,CAAC;YAC7C,YAAY,EAAE,WAAW;YACzB,SAAS;YACT,SAAS,EAAE;gBACT,MAAM;gBACN,OAAO;gBACP,MAAM;gBACN,UAAU,EAAE,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;aAC3D;YACD,eAAe,EAAE,UAAU,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM;SAC3E,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ import { type LlmCaller } from './extractor.js';
2
+ import type { Config } from './schema.js';
3
+ export type Backend = 'anthropic' | 'claude-cli' | 'codex-cli';
4
+ export declare function pickBackend(config: Config, env?: NodeJS.ProcessEnv, has?: (bin: string) => boolean): Backend | null;
5
+ export declare function callerFor(backend: Backend, config: Config): LlmCaller;
6
+ export declare const NO_BACKEND_MESSAGE: string;
7
+ //# sourceMappingURL=llm_backend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm_backend.d.ts","sourceRoot":"","sources":["../../src/core/llm_backend.ts"],"names":[],"mappings":"AAEA,OAAO,EAAqD,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACnG,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,MAAM,OAAO,GAAG,WAAW,GAAG,YAAY,GAAG,WAAW,CAAC;AAiB/D,wBAAgB,WAAW,CACzB,MAAM,EAAE,MAAM,EACd,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,GAAG,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAgB,GACrC,OAAO,GAAG,IAAI,CAOhB;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,CAWrE;AAED,eAAO,MAAM,kBAAkB,QAEQ,CAAC"}