@relayburn/mcp 1.10.0 → 2.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.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,12 @@ All notable changes to `@relayburn/mcp`.
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [2.0.0] - 2026-05-07
8
+
9
+ ### Changed
10
+
11
+ - Drop `@relayburn/{reader, ledger, analyze}` from MCP entirely; `@relayburn/sdk` is now the only `@relayburn/*` package edge.
12
+
7
13
  ## [1.9.0] - 2026-05-03
8
14
 
9
15
  ### Changed
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAIlB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IAGnC,MAAM,EAAE,MAAM,CAAC;CAChB;AAUD,wBAAgB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,oBAAoB,CAYnF"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAGlB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IAGnC,MAAM,EAAE,MAAM,CAAC;CAChB;AAUD,wBAAgB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,oBAAoB,CAYnF"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAcA,0EAA0E;AAC1E,yEAAyE;AACzE,yEAAyE;AACzE,sEAAsE;AACtE,EAAE;AACF,0EAA0E;AAC1E,2EAA2E;AAC3E,8DAA8D;AAC9D,MAAM,UAAU,cAAc,CAAC,OAA8B;IAC3D,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC;IAC1C,MAAM,MAAM,GAAG;QACb,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,OAAO;gBAChB,IAAI,EAAE,CAAC,YAAY,EAAE,cAAc,EAAE,OAAO,CAAC,SAAS,CAAC;aACxD;SACF;KACF,CAAC;IACF,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;AAC5C,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAaA,0EAA0E;AAC1E,yEAAyE;AACzE,yEAAyE;AACzE,sEAAsE;AACtE,EAAE;AACF,0EAA0E;AAC1E,2EAA2E;AAC3E,8DAA8D;AAC9D,MAAM,UAAU,cAAc,CAAC,OAA8B;IAC3D,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC;IAC1C,MAAM,MAAM,GAAG;QACb,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,OAAO;gBAChB,IAAI,EAAE,CAAC,YAAY,EAAE,cAAc,EAAE,OAAO,CAAC,SAAS,CAAC;aACxD;SACF;KACF,CAAC;IACF,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;AAC5C,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@relayburn/mcp",
3
- "version": "1.10.0",
3
+ "version": "2.1.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,10 +19,7 @@
19
19
  "node": ">=22"
20
20
  },
21
21
  "dependencies": {
22
- "@relayburn/reader": "1.10.0",
23
- "@relayburn/sdk": "1.10.0",
24
- "@relayburn/ledger": "1.10.0",
25
- "@relayburn/analyze": "1.10.0"
22
+ "@relayburn/sdk": "1.10.0"
26
23
  },
27
24
  "repository": {
28
25
  "type": "git",
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=archive-backed.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"archive-backed.test.d.ts","sourceRoot":"","sources":["../../src/tools/archive-backed.test.ts"],"names":[],"mappings":""}
@@ -1,139 +0,0 @@
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 { createSessionCostTool } from './session-cost.js';
8
- // Verifies the archive-backed default `queryTurns` path that issue #97 wires
9
- // onto MCP tool handlers — including the transparent fallback to `queryAll`
10
- // when the archive cannot be opened or queried.
11
- function fakeTurn(overrides = {}) {
12
- return {
13
- v: 1,
14
- source: 'claude-code',
15
- sessionId: 's-cost',
16
- messageId: 'm-1',
17
- turnIndex: 0,
18
- ts: '2026-04-24T10:00:00.000Z',
19
- model: 'claude-sonnet-4-5',
20
- usage: {
21
- input: 1_000_000,
22
- output: 0,
23
- reasoning: 0,
24
- cacheRead: 0,
25
- cacheCreate5m: 0,
26
- cacheCreate1h: 0,
27
- },
28
- toolCalls: [],
29
- project: '/tmp/project',
30
- ...overrides,
31
- };
32
- }
33
- describe('MCP tool handlers backed by archive (issue #97)', () => {
34
- let tmpDir;
35
- const originalHome = process.env['RELAYBURN_HOME'];
36
- before(async () => {
37
- tmpDir = await mkdtemp(path.join(tmpdir(), 'relayburn-mcp-archive-'));
38
- });
39
- beforeEach(async () => {
40
- await rm(tmpDir, { recursive: true, force: true });
41
- tmpDir = await mkdtemp(path.join(tmpdir(), 'relayburn-mcp-archive-'));
42
- process.env['RELAYBURN_HOME'] = tmpDir;
43
- __resetIndexCacheForTesting();
44
- });
45
- after(async () => {
46
- if (originalHome !== undefined) {
47
- process.env['RELAYBURN_HOME'] = originalHome;
48
- }
49
- else {
50
- delete process.env['RELAYBURN_HOME'];
51
- }
52
- await rm(tmpDir, { recursive: true, force: true });
53
- });
54
- describe('burn__sessionCost', () => {
55
- it('returns the same total whether the data is read from archive or ledger', async () => {
56
- // Same fixture, identical pricing — archive-backed query should be
57
- // bit-equivalent to the ledger-walk implementation it replaces.
58
- await appendTurns([
59
- fakeTurn(),
60
- fakeTurn({
61
- messageId: 'm-2',
62
- turnIndex: 1,
63
- usage: {
64
- input: 0,
65
- output: 1_000_000,
66
- reasoning: 0,
67
- cacheRead: 0,
68
- cacheCreate5m: 0,
69
- cacheCreate1h: 0,
70
- },
71
- }),
72
- ]);
73
- await buildArchive();
74
- const tool = createSessionCostTool({
75
- defaultSessionId: 's-cost',
76
- });
77
- const result = (await tool.handler({}));
78
- assert.equal(result.sessionId, 's-cost');
79
- assert.equal(result.turnCount, 2);
80
- assert.equal(result.totalTokens, 2_000_000);
81
- // 1M input @ $3/M + 1M output @ $15/M = $18.
82
- assert.equal(result.totalUSD, 18);
83
- assert.deepEqual(result.models, ['claude-sonnet-4-5']);
84
- });
85
- it('reflects ledger turns appended after the initial archive build', async () => {
86
- // Hooks append to the JSONL ledger throughout a session but the archive
87
- // is only built on demand. The default queryTurns lambda runs an
88
- // incremental buildArchive before each query so a tool call after a
89
- // hook fires reflects the new turns (Devin review on #97).
90
- await appendTurns([fakeTurn()]);
91
- await buildArchive();
92
- // Simulate a hook firing mid-session: a new turn is appended after the
93
- // initial build but no explicit rebuild has been triggered.
94
- await appendTurns([
95
- fakeTurn({
96
- messageId: 'm-2',
97
- turnIndex: 1,
98
- ts: '2026-04-24T10:05:00.000Z',
99
- usage: {
100
- input: 0,
101
- output: 1_000_000,
102
- reasoning: 0,
103
- cacheRead: 0,
104
- cacheCreate5m: 0,
105
- cacheCreate1h: 0,
106
- },
107
- }),
108
- ]);
109
- const tool = createSessionCostTool({
110
- defaultSessionId: 's-cost',
111
- });
112
- const result = (await tool.handler({}));
113
- assert.equal(result.turnCount, 2);
114
- assert.equal(result.totalTokens, 2_000_000);
115
- // 1M input @ $3/M + 1M output @ $15/M = $18.
116
- assert.equal(result.totalUSD, 18);
117
- });
118
- it('falls back to queryAll and logs when the archive cannot be opened', async () => {
119
- await appendTurns([fakeTurn()]);
120
- // Don't build the archive. Then corrupt the archive file so
121
- // openArchive() throws once it tries to read the SQLite header. The
122
- // tool should swallow the error, route to queryAll, and still return
123
- // the same numbers.
124
- await writeFile(archivePath(), 'this is not a sqlite database', 'utf8');
125
- const logs = [];
126
- const tool = createSessionCostTool({
127
- defaultSessionId: 's-cost',
128
- onLog: (m) => logs.push(m),
129
- });
130
- const result = (await tool.handler({}));
131
- assert.equal(result.turnCount, 1);
132
- assert.equal(result.totalTokens, 1_000_000);
133
- // 1M input @ $3/M = $3.
134
- assert.equal(result.totalUSD, 3);
135
- assert.ok(logs.some((m) => /archive query failed/.test(m)), `expected an archive-fallback log line, got: ${JSON.stringify(logs)}`);
136
- });
137
- });
138
- });
139
- //# sourceMappingURL=archive-backed.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"archive-backed.test.js","sourceRoot":"","sources":["../../src/tools/archive-backed.test.ts"],"names":[],"mappings":"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"}