@relayburn/mcp 0.29.0 → 0.30.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/CHANGELOG.md CHANGED
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.30.0] - 2026-04-27
11
+
12
+ ### Changed
13
+
14
+ - **`burn__sessionCost` and `burn__currentBlock` query the analytics archive on the hot path** ([#97](https://github.com/AgentWorkforce/burn/issues/97)). Both tool handlers now default to `queryTurnsFromArchive` (a single SQL query against `archive.sqlite`) instead of folding the entire JSONL ledger on every MCP call. Tool responses are equivalent to the pre-migration implementation within float-rounding tolerance for cost. Each call also runs an incremental `buildArchive()` first so turns appended to the JSONL ledger by hooks mid-session show up in the next tool response — the build is cursor-driven and a no-op when nothing has changed since the last call. If the archive cannot be opened or the query throws, both handlers transparently fall back to `queryAll` and emit a one-line note via the new `onLog` dependency hook (the CLI server wires this to stderr) so persistent breakage is visible without ever refusing to serve.
15
+
10
16
  ## [0.18.0] - 2026-04-26
11
17
 
12
18
  ### Fixed
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=archive-backed.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive-backed.test.d.ts","sourceRoot":"","sources":["../../src/tools/archive-backed.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,220 @@
1
+ import { strict as assert } from 'node:assert';
2
+ import { mkdtemp, rm, writeFile } from 'node:fs/promises';
3
+ import { tmpdir } from 'node:os';
4
+ import * as path from 'node:path';
5
+ import { after, before, beforeEach, describe, it } from 'node:test';
6
+ import { __resetIndexCacheForTesting, appendTurns, archivePath, buildArchive, } from '@relayburn/ledger';
7
+ import { createCurrentBlockTool } from './current-block.js';
8
+ import { createSessionCostTool } from './session-cost.js';
9
+ // Verifies the archive-backed default `queryTurns` path that issue #97 wires
10
+ // onto both MCP tool handlers — including the transparent fallback to
11
+ // `queryAll` when the archive cannot be opened or queried.
12
+ function fakeTurn(overrides = {}) {
13
+ return {
14
+ v: 1,
15
+ source: 'claude-code',
16
+ sessionId: 's-cost',
17
+ messageId: 'm-1',
18
+ turnIndex: 0,
19
+ ts: '2026-04-24T10:00:00.000Z',
20
+ model: 'claude-sonnet-4-5',
21
+ usage: {
22
+ input: 1_000_000,
23
+ output: 0,
24
+ reasoning: 0,
25
+ cacheRead: 0,
26
+ cacheCreate5m: 0,
27
+ cacheCreate1h: 0,
28
+ },
29
+ toolCalls: [],
30
+ project: '/tmp/project',
31
+ ...overrides,
32
+ };
33
+ }
34
+ const PRICING_LOADER = async () => ({
35
+ 'claude-sonnet-4-5': {
36
+ input: 3,
37
+ output: 15,
38
+ cacheRead: 0.3,
39
+ cacheWrite: 3.75,
40
+ reasoningMode: 'same_as_output',
41
+ },
42
+ });
43
+ describe('MCP tool handlers backed by archive (issue #97)', () => {
44
+ let tmpDir;
45
+ const originalHome = process.env['RELAYBURN_HOME'];
46
+ before(async () => {
47
+ tmpDir = await mkdtemp(path.join(tmpdir(), 'relayburn-mcp-archive-'));
48
+ });
49
+ beforeEach(async () => {
50
+ await rm(tmpDir, { recursive: true, force: true });
51
+ tmpDir = await mkdtemp(path.join(tmpdir(), 'relayburn-mcp-archive-'));
52
+ process.env['RELAYBURN_HOME'] = tmpDir;
53
+ __resetIndexCacheForTesting();
54
+ });
55
+ after(async () => {
56
+ if (originalHome !== undefined) {
57
+ process.env['RELAYBURN_HOME'] = originalHome;
58
+ }
59
+ else {
60
+ delete process.env['RELAYBURN_HOME'];
61
+ }
62
+ await rm(tmpDir, { recursive: true, force: true });
63
+ });
64
+ describe('burn__sessionCost', () => {
65
+ it('returns the same total whether the data is read from archive or ledger', async () => {
66
+ // Same fixture, identical pricing — archive-backed query should be
67
+ // bit-equivalent to the ledger-walk implementation it replaces.
68
+ await appendTurns([
69
+ fakeTurn(),
70
+ fakeTurn({
71
+ messageId: 'm-2',
72
+ turnIndex: 1,
73
+ usage: {
74
+ input: 0,
75
+ output: 1_000_000,
76
+ reasoning: 0,
77
+ cacheRead: 0,
78
+ cacheCreate5m: 0,
79
+ cacheCreate1h: 0,
80
+ },
81
+ }),
82
+ ]);
83
+ await buildArchive();
84
+ const tool = createSessionCostTool({
85
+ defaultSessionId: 's-cost',
86
+ loadPricing: PRICING_LOADER,
87
+ });
88
+ const result = (await tool.handler({}));
89
+ assert.equal(result.sessionId, 's-cost');
90
+ assert.equal(result.turnCount, 2);
91
+ assert.equal(result.totalTokens, 2_000_000);
92
+ // 1M input @ $3/M + 1M output @ $15/M = $18.
93
+ assert.equal(result.totalUSD, 18);
94
+ assert.deepEqual(result.models, ['claude-sonnet-4-5']);
95
+ });
96
+ it('reflects ledger turns appended after the initial archive build', async () => {
97
+ // Hooks append to the JSONL ledger throughout a session but the archive
98
+ // is only built on demand. The default queryTurns lambda runs an
99
+ // incremental buildArchive before each query so a tool call after a
100
+ // hook fires reflects the new turns (Devin review on #97).
101
+ await appendTurns([fakeTurn()]);
102
+ await buildArchive();
103
+ // Simulate a hook firing mid-session: a new turn is appended after the
104
+ // initial build but no explicit rebuild has been triggered.
105
+ await appendTurns([
106
+ fakeTurn({
107
+ messageId: 'm-2',
108
+ turnIndex: 1,
109
+ ts: '2026-04-24T10:05:00.000Z',
110
+ usage: {
111
+ input: 0,
112
+ output: 1_000_000,
113
+ reasoning: 0,
114
+ cacheRead: 0,
115
+ cacheCreate5m: 0,
116
+ cacheCreate1h: 0,
117
+ },
118
+ }),
119
+ ]);
120
+ const tool = createSessionCostTool({
121
+ defaultSessionId: 's-cost',
122
+ loadPricing: PRICING_LOADER,
123
+ });
124
+ const result = (await tool.handler({}));
125
+ assert.equal(result.turnCount, 2);
126
+ assert.equal(result.totalTokens, 2_000_000);
127
+ // 1M input @ $3/M + 1M output @ $15/M = $18.
128
+ assert.equal(result.totalUSD, 18);
129
+ });
130
+ it('falls back to queryAll and logs when the archive cannot be opened', async () => {
131
+ await appendTurns([fakeTurn()]);
132
+ // Don't build the archive. Then corrupt the archive file so
133
+ // openArchive() throws once it tries to read the SQLite header. The
134
+ // tool should swallow the error, route to queryAll, and still return
135
+ // the same numbers.
136
+ await writeFile(archivePath(), 'this is not a sqlite database', 'utf8');
137
+ const logs = [];
138
+ const tool = createSessionCostTool({
139
+ defaultSessionId: 's-cost',
140
+ loadPricing: PRICING_LOADER,
141
+ onLog: (m) => logs.push(m),
142
+ });
143
+ const result = (await tool.handler({}));
144
+ assert.equal(result.turnCount, 1);
145
+ assert.equal(result.totalTokens, 1_000_000);
146
+ // 1M input @ $3/M = $3.
147
+ assert.equal(result.totalUSD, 3);
148
+ assert.ok(logs.some((m) => /sessionCost: archive query failed/.test(m)), `expected an archive-fallback log line, got: ${JSON.stringify(logs)}`);
149
+ });
150
+ });
151
+ describe('burn__currentBlock', () => {
152
+ it('reads ledger-derived burn rate from the materialized archive on the hot path', async () => {
153
+ // 60k input tokens, treated as having accrued in the 2h elapsed of a
154
+ // 5h window starting at 10:00. This mirrors the existing unit test for
155
+ // the same calculation but exercises the real archive-backed code
156
+ // path instead of an injected `queryTurns`.
157
+ await appendTurns([
158
+ fakeTurn({
159
+ sessionId: 's-block',
160
+ messageId: 'mb-1',
161
+ ts: '2026-04-24T10:30:00.000Z',
162
+ usage: {
163
+ input: 60_000,
164
+ output: 0,
165
+ reasoning: 0,
166
+ cacheRead: 0,
167
+ cacheCreate5m: 0,
168
+ cacheCreate1h: 0,
169
+ },
170
+ }),
171
+ ]);
172
+ await buildArchive();
173
+ const NOW = new Date('2026-04-24T12:00:00.000Z');
174
+ const RESET_AT = '2026-04-24T15:00:00.000Z';
175
+ const tool = createCurrentBlockTool({
176
+ now: () => NOW,
177
+ loadOauthToken: async () => 'tok',
178
+ fetchUsage: async () => ({ five_hour: { percent_used: 20, reset_at: RESET_AT } }),
179
+ });
180
+ const result = (await tool.handler({}));
181
+ assert.equal(result.percentUsed, 20);
182
+ // 60k tokens / 120 minutes = 500 tok/min.
183
+ assert.equal(result.burnRateTokensPerMin, 500);
184
+ assert.equal(result.projectedBlockTotal, 150_000);
185
+ });
186
+ it('falls back to queryAll and logs when the archive query throws', async () => {
187
+ await appendTurns([
188
+ fakeTurn({
189
+ sessionId: 's-block',
190
+ messageId: 'mb-1',
191
+ ts: '2026-04-24T10:30:00.000Z',
192
+ usage: {
193
+ input: 60_000,
194
+ output: 0,
195
+ reasoning: 0,
196
+ cacheRead: 0,
197
+ cacheCreate5m: 0,
198
+ cacheCreate1h: 0,
199
+ },
200
+ }),
201
+ ]);
202
+ // Corrupt archive file → openArchive throws; tool should fall through
203
+ // to queryAll and still produce the same forecast.
204
+ await writeFile(archivePath(), 'not a sqlite db', 'utf8');
205
+ const NOW = new Date('2026-04-24T12:00:00.000Z');
206
+ const RESET_AT = '2026-04-24T15:00:00.000Z';
207
+ const logs = [];
208
+ const tool = createCurrentBlockTool({
209
+ now: () => NOW,
210
+ loadOauthToken: async () => 'tok',
211
+ fetchUsage: async () => ({ five_hour: { percent_used: 20, reset_at: RESET_AT } }),
212
+ onLog: (m) => logs.push(m),
213
+ });
214
+ const result = (await tool.handler({}));
215
+ assert.equal(result.burnRateTokensPerMin, 500);
216
+ assert.ok(logs.some((m) => /currentBlock: archive query failed/.test(m)), `expected an archive-fallback log line, got: ${JSON.stringify(logs)}`);
217
+ });
218
+ });
219
+ });
220
+ //# sourceMappingURL=archive-backed.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive-backed.test.js","sourceRoot":"","sources":["../../src/tools/archive-backed.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAEpE,OAAO,EACL,2BAA2B,EAC3B,WAAW,EACX,WAAW,EACX,YAAY,GACb,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,sBAAsB,EAA2B,MAAM,oBAAoB,CAAC;AACrF,OAAO,EAAE,qBAAqB,EAA0B,MAAM,mBAAmB,CAAC;AAElF,6EAA6E;AAC7E,sEAAsE;AACtE,2DAA2D;AAE3D,SAAS,QAAQ,CAAC,YAAiC,EAAE;IACnD,OAAO;QACL,CAAC,EAAE,CAAC;QACJ,MAAM,EAAE,aAAa;QACrB,SAAS,EAAE,QAAQ;QACnB,SAAS,EAAE,KAAK;QAChB,SAAS,EAAE,CAAC;QACZ,EAAE,EAAE,0BAA0B;QAC9B,KAAK,EAAE,mBAAmB;QAC1B,KAAK,EAAE;YACL,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,CAAC;YACT,SAAS,EAAE,CAAC;YACZ,SAAS,EAAE,CAAC;YACZ,aAAa,EAAE,CAAC;YAChB,aAAa,EAAE,CAAC;SACjB;QACD,SAAS,EAAE,EAAE;QACb,OAAO,EAAE,cAAc;QACvB,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,MAAM,cAAc,GAAG,KAAK,IAAI,EAAE,CAAC,CAAC;IAClC,mBAAmB,EAAE;QACnB,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,EAAE;QACV,SAAS,EAAE,GAAG;QACd,UAAU,EAAE,IAAI;QAChB,aAAa,EAAE,gBAAyB;KACzC;CACF,CAAC,CAAC;AAEH,QAAQ,CAAC,iDAAiD,EAAE,GAAG,EAAE;IAC/D,IAAI,MAAc,CAAC;IACnB,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAEnD,MAAM,CAAC,KAAK,IAAI,EAAE;QAChB,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,wBAAwB,CAAC,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,wBAAwB,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC;QACvC,2BAA2B,EAAE,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,KAAK,IAAI,EAAE;QACf,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,YAAY,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QACvC,CAAC;QACD,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;YACtF,mEAAmE;YACnE,gEAAgE;YAChE,MAAM,WAAW,CAAC;gBAChB,QAAQ,EAAE;gBACV,QAAQ,CAAC;oBACP,SAAS,EAAE,KAAK;oBAChB,SAAS,EAAE,CAAC;oBACZ,KAAK,EAAE;wBACL,KAAK,EAAE,CAAC;wBACR,MAAM,EAAE,SAAS;wBACjB,SAAS,EAAE,CAAC;wBACZ,SAAS,EAAE,CAAC;wBACZ,aAAa,EAAE,CAAC;wBAChB,aAAa,EAAE,CAAC;qBACjB;iBACF,CAAC;aACH,CAAC,CAAC;YACH,MAAM,YAAY,EAAE,CAAC;YAErB,MAAM,IAAI,GAAG,qBAAqB,CAAC;gBACjC,gBAAgB,EAAE,QAAQ;gBAC1B,WAAW,EAAE,cAAc;aAC5B,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAsB,CAAC;YAC7D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YACzC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YAClC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YAC5C,6CAA6C;YAC7C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAClC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;YAC9E,wEAAwE;YACxE,iEAAiE;YACjE,oEAAoE;YACpE,2DAA2D;YAC3D,MAAM,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YAChC,MAAM,YAAY,EAAE,CAAC;YAErB,uEAAuE;YACvE,4DAA4D;YAC5D,MAAM,WAAW,CAAC;gBAChB,QAAQ,CAAC;oBACP,SAAS,EAAE,KAAK;oBAChB,SAAS,EAAE,CAAC;oBACZ,EAAE,EAAE,0BAA0B;oBAC9B,KAAK,EAAE;wBACL,KAAK,EAAE,CAAC;wBACR,MAAM,EAAE,SAAS;wBACjB,SAAS,EAAE,CAAC;wBACZ,SAAS,EAAE,CAAC;wBACZ,aAAa,EAAE,CAAC;wBAChB,aAAa,EAAE,CAAC;qBACjB;iBACF,CAAC;aACH,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,qBAAqB,CAAC;gBACjC,gBAAgB,EAAE,QAAQ;gBAC1B,WAAW,EAAE,cAAc;aAC5B,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAsB,CAAC;YAC7D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YAClC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YAC5C,6CAA6C;YAC7C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;YACjF,MAAM,WAAW,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YAChC,4DAA4D;YAC5D,oEAAoE;YACpE,qEAAqE;YACrE,oBAAoB;YACpB,MAAM,SAAS,CAAC,WAAW,EAAE,EAAE,+BAA+B,EAAE,MAAM,CAAC,CAAC;YAExE,MAAM,IAAI,GAAa,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,qBAAqB,CAAC;gBACjC,gBAAgB,EAAE,QAAQ;gBAC1B,WAAW,EAAE,cAAc;gBAC3B,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;aAC3B,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAsB,CAAC;YAC7D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YAClC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YAC5C,wBAAwB;YACxB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YACjC,MAAM,CAAC,EAAE,CACP,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mCAAmC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAC7D,+CAA+C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CACtE,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,EAAE,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;YAC5F,qEAAqE;YACrE,uEAAuE;YACvE,kEAAkE;YAClE,4CAA4C;YAC5C,MAAM,WAAW,CAAC;gBAChB,QAAQ,CAAC;oBACP,SAAS,EAAE,SAAS;oBACpB,SAAS,EAAE,MAAM;oBACjB,EAAE,EAAE,0BAA0B;oBAC9B,KAAK,EAAE;wBACL,KAAK,EAAE,MAAM;wBACb,MAAM,EAAE,CAAC;wBACT,SAAS,EAAE,CAAC;wBACZ,SAAS,EAAE,CAAC;wBACZ,aAAa,EAAE,CAAC;wBAChB,aAAa,EAAE,CAAC;qBACjB;iBACF,CAAC;aACH,CAAC,CAAC;YACH,MAAM,YAAY,EAAE,CAAC;YAErB,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACjD,MAAM,QAAQ,GAAG,0BAA0B,CAAC;YAE5C,MAAM,IAAI,GAAG,sBAAsB,CAAC;gBAClC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG;gBACd,cAAc,EAAE,KAAK,IAAI,EAAE,CAAC,KAAK;gBACjC,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC;aAClF,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAuB,CAAC;YAC9D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;YACrC,0CAA0C;YAC1C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;YAC/C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;YAC7E,MAAM,WAAW,CAAC;gBAChB,QAAQ,CAAC;oBACP,SAAS,EAAE,SAAS;oBACpB,SAAS,EAAE,MAAM;oBACjB,EAAE,EAAE,0BAA0B;oBAC9B,KAAK,EAAE;wBACL,KAAK,EAAE,MAAM;wBACb,MAAM,EAAE,CAAC;wBACT,SAAS,EAAE,CAAC;wBACZ,SAAS,EAAE,CAAC;wBACZ,aAAa,EAAE,CAAC;wBAChB,aAAa,EAAE,CAAC;qBACjB;iBACF,CAAC;aACH,CAAC,CAAC;YACH,sEAAsE;YACtE,mDAAmD;YACnD,MAAM,SAAS,CAAC,WAAW,EAAE,EAAE,iBAAiB,EAAE,MAAM,CAAC,CAAC;YAE1D,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACjD,MAAM,QAAQ,GAAG,0BAA0B,CAAC;YAE5C,MAAM,IAAI,GAAa,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,sBAAsB,CAAC;gBAClC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG;gBACd,cAAc,EAAE,KAAK,IAAI,EAAE,CAAC,KAAK;gBACjC,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC;gBACjF,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;aAC3B,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAuB,CAAC;YAC9D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;YAC/C,MAAM,CAAC,EAAE,CACP,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,oCAAoC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAC9D,+CAA+C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CACtE,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -21,6 +21,12 @@ export interface CurrentBlockDeps {
21
21
  fetchUsage?: (token: string) => Promise<UsageResponse>;
22
22
  queryTurns?: (windowStartMs: number) => Promise<EnrichedTurn[]>;
23
23
  now?: () => Date;
24
+ /**
25
+ * Called when the default archive-backed `queryTurns` falls through to the
26
+ * ledger-walking `queryAll` because the archive open / query threw. Defaults
27
+ * to no-op; the CLI server wires this to stderr so failures are visible.
28
+ */
29
+ onLog?: (msg: string) => void;
24
30
  }
25
31
  export declare function createCurrentBlockTool(deps?: CurrentBlockDeps): ToolDefinition;
26
32
  export declare function loadOauthToken(): Promise<string | null>;
@@ -1 +1 @@
1
- {"version":3,"file":"current-block.d.ts","sourceRoot":"","sources":["../../src/tools/current-block.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAMlD,UAAU,WAAW;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,aAAa;IACrB,SAAS,CAAC,EAAE,WAAW,CAAC;CACzB;AAED,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,CAAC;AAEpF,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC9C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;IACvD,UAAU,CAAC,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAChE,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,wBAAgB,sBAAsB,CAAC,IAAI,GAAE,gBAAqB,GAAG,cAAc,CAqElF;AAoED,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAY7D"}
1
+ {"version":3,"file":"current-block.d.ts","sourceRoot":"","sources":["../../src/tools/current-block.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAMlD,UAAU,WAAW;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,aAAa;IACrB,SAAS,CAAC,EAAE,WAAW,CAAC;CACzB;AAED,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,CAAC;AAEpF,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC9C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;IACvD,UAAU,CAAC,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAChE,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB;;;;OAIG;IACH,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/B;AAED,wBAAgB,sBAAsB,CAAC,IAAI,GAAE,gBAAqB,GAAG,cAAc,CAsFlF;AAoED,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAY7D"}
@@ -2,15 +2,33 @@ import { spawn } from 'node:child_process';
2
2
  import { readFile } from 'node:fs/promises';
3
3
  import { homedir } from 'node:os';
4
4
  import * as path from 'node:path';
5
- import { queryAll } from '@relayburn/ledger';
5
+ import { buildArchive, queryAll, queryTurnsFromArchive } from '@relayburn/ledger';
6
6
  const USAGE_ENDPOINT = 'https://api.anthropic.com/api/oauth/usage';
7
7
  const ANTHROPIC_OAUTH_BETA = 'oauth-2025-04-20';
8
8
  const SESSION_DURATION_MS = 5 * 60 * 60 * 1000;
9
9
  export function createCurrentBlockTool(deps = {}) {
10
10
  const loadToken = deps.loadOauthToken ?? loadOauthToken;
11
11
  const fetchUsage = deps.fetchUsage ?? fetchUsageFromApi;
12
+ const log = deps.onLog ?? (() => { });
12
13
  const queryTurns = deps.queryTurns ??
13
- (async (start) => queryAll({ since: new Date(start).toISOString(), source: 'claude-code' }));
14
+ (async (start) => {
15
+ const since = new Date(start).toISOString();
16
+ // Hooks append new turns to the JSONL ledger throughout the session,
17
+ // but the archive is only materialized when something explicitly calls
18
+ // `buildArchive`. Run an incremental build before each query so the
19
+ // tool reflects fresh data (Devin review on #97). The build is
20
+ // idempotent + cursor-driven, so it's a no-op when nothing has changed
21
+ // since the last call.
22
+ try {
23
+ await buildArchive();
24
+ return await queryTurnsFromArchive({ since, source: 'claude-code' });
25
+ }
26
+ catch (err) {
27
+ const msg = err instanceof Error ? err.message : String(err);
28
+ log(`currentBlock: archive query failed, falling back to ledger walk: ${msg}`);
29
+ return queryAll({ since, source: 'claude-code' });
30
+ }
31
+ });
14
32
  const now = deps.now ?? (() => new Date());
15
33
  return {
16
34
  name: 'burn__currentBlock',
@@ -1 +1 @@
1
- {"version":3,"file":"current-block.js","sourceRoot":"","sources":["../../src/tools/current-block.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"current-block.js","sourceRoot":"","sources":["../../src/tools/current-block.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,13 @@ export interface SessionCostDeps {
16
16
  defaultSessionId: string | undefined;
17
17
  queryTurns?: (sessionId: string) => Promise<EnrichedTurn[]>;
18
18
  loadPricing?: () => Promise<PricingTable>;
19
+ /**
20
+ * Called when the default archive-backed `queryTurns` falls through to the
21
+ * ledger-walking `queryAll` because the archive open / query threw. Defaults
22
+ * to no-op so the MCP server stays quiet on the happy path; the CLI server
23
+ * wires this to stderr so failures are visible in the MCP host's log.
24
+ */
25
+ onLog?: (msg: string) => void;
19
26
  }
20
27
  export declare function createSessionCostTool(deps: SessionCostDeps): ToolDefinition;
21
28
  //# sourceMappingURL=session-cost.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-cost.d.ts","sourceRoot":"","sources":["../../src/tools/session-cost.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5D,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC;CAC3C;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,eAAe,GAAG,cAAc,CAyE3E"}
1
+ {"version":3,"file":"session-cost.d.ts","sourceRoot":"","sources":["../../src/tools/session-cost.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5D,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC;IAC1C;;;;;OAKG;IACH,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/B;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,eAAe,GAAG,cAAc,CA2F3E"}
@@ -1,7 +1,25 @@
1
1
  import { costForTurn, loadPricing, sumCosts } from '@relayburn/analyze';
2
- import { queryAll } from '@relayburn/ledger';
2
+ import { buildArchive, queryAll, queryTurnsFromArchive } from '@relayburn/ledger';
3
3
  export function createSessionCostTool(deps) {
4
- const queryTurns = deps.queryTurns ?? ((id) => queryAll({ sessionId: id }));
4
+ const log = deps.onLog ?? (() => { });
5
+ const queryTurns = deps.queryTurns ??
6
+ (async (id) => {
7
+ // Hooks append new turns to the JSONL ledger throughout the session,
8
+ // but the archive is only materialized when something explicitly calls
9
+ // `buildArchive`. Run an incremental build before each query so the
10
+ // tool reflects fresh data (Devin review on #97). The build is
11
+ // idempotent + cursor-driven, so it's a no-op when nothing has changed
12
+ // since the last call.
13
+ try {
14
+ await buildArchive();
15
+ return await queryTurnsFromArchive({ sessionId: id });
16
+ }
17
+ catch (err) {
18
+ const msg = err instanceof Error ? err.message : String(err);
19
+ log(`sessionCost: archive query failed, falling back to ledger walk: ${msg}`);
20
+ return queryAll({ sessionId: id });
21
+ }
22
+ });
5
23
  const pricingLoader = deps.loadPricing ?? loadPricing;
6
24
  return {
7
25
  name: 'burn__sessionCost',
@@ -1 +1 @@
1
- {"version":3,"file":"session-cost.js","sourceRoot":"","sources":["../../src/tools/session-cost.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-cost.js","sourceRoot":"","sources":["../../src/tools/session-cost.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@relayburn/mcp",
3
- "version": "0.29.0",
3
+ "version": "0.30.0",
4
4
  "description": "MCP (Model Context Protocol) server exposing read-only relayburn ledger queries for in-session self-query",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -19,9 +19,9 @@
19
19
  "node": ">=22"
20
20
  },
21
21
  "dependencies": {
22
- "@relayburn/reader": "0.29.0",
23
- "@relayburn/analyze": "0.29.0",
24
- "@relayburn/ledger": "0.29.0"
22
+ "@relayburn/reader": "0.30.0",
23
+ "@relayburn/analyze": "0.30.0",
24
+ "@relayburn/ledger": "0.30.0"
25
25
  },
26
26
  "repository": {
27
27
  "type": "git",