agent-recorder 2.0.12 → 2.0.14
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/dist/bundle.js +4 -0
- package/dist/bundle.js.map +1 -1
- package/dist/embed.d.ts +21 -0
- package/dist/embed.d.ts.map +1 -0
- package/dist/embed.js +22 -0
- package/dist/embed.js.map +1 -0
- package/package.json +8 -1
- package/vendor/node_modules/@agent-recorder/cli/analytics/session-analytics.test.js +3 -0
- package/vendor/node_modules/@agent-recorder/cli/analytics/session-analytics.test.js.map +1 -1
- package/vendor/node_modules/@agent-recorder/cli/commands/mcp-server.d.ts +11 -0
- package/vendor/node_modules/@agent-recorder/cli/commands/mcp-server.d.ts.map +1 -0
- package/vendor/node_modules/@agent-recorder/cli/commands/mcp-server.js +442 -0
- package/vendor/node_modules/@agent-recorder/cli/commands/mcp-server.js.map +1 -0
- package/vendor/node_modules/@agent-recorder/cli/commands/sessions.d.ts.map +1 -1
- package/vendor/node_modules/@agent-recorder/cli/commands/sessions.js +8 -5
- package/vendor/node_modules/@agent-recorder/cli/commands/sessions.js.map +1 -1
- package/vendor/node_modules/@agent-recorder/cli/config/claude-paths.d.ts +2 -51
- package/vendor/node_modules/@agent-recorder/cli/config/claude-paths.d.ts.map +1 -1
- package/vendor/node_modules/@agent-recorder/cli/config/claude-paths.js +2 -113
- package/vendor/node_modules/@agent-recorder/cli/config/claude-paths.js.map +1 -1
- package/vendor/node_modules/@agent-recorder/cli/config/claude-paths.test.js +1 -1
- package/vendor/node_modules/@agent-recorder/cli/config/claude-paths.test.js.map +1 -1
- package/vendor/node_modules/@agent-recorder/cli/index.js +10 -0
- package/vendor/node_modules/@agent-recorder/cli/index.js.map +1 -1
- package/vendor/node_modules/@agent-recorder/cli/package.json +1 -1
- package/vendor/node_modules/@agent-recorder/cli/tui/components/EventInspectPanel.d.ts.map +1 -1
- package/vendor/node_modules/@agent-recorder/cli/tui/components/EventInspectPanel.js +1 -1
- package/vendor/node_modules/@agent-recorder/cli/tui/components/EventInspectPanel.js.map +1 -1
- package/vendor/node_modules/@agent-recorder/core/claude-config.d.ts +23 -0
- package/vendor/node_modules/@agent-recorder/core/claude-config.d.ts.map +1 -1
- package/vendor/node_modules/@agent-recorder/core/claude-config.js +50 -0
- package/vendor/node_modules/@agent-recorder/core/claude-config.js.map +1 -1
- package/vendor/node_modules/@agent-recorder/core/config.d.ts +10 -1
- package/vendor/node_modules/@agent-recorder/core/config.d.ts.map +1 -1
- package/vendor/node_modules/@agent-recorder/core/config.js +11 -1
- package/vendor/node_modules/@agent-recorder/core/config.js.map +1 -1
- package/vendor/node_modules/@agent-recorder/core/db/events-complete.test.d.ts +5 -0
- package/vendor/node_modules/@agent-recorder/core/db/events-complete.test.d.ts.map +1 -0
- package/vendor/node_modules/@agent-recorder/core/db/events-complete.test.js +133 -0
- package/vendor/node_modules/@agent-recorder/core/db/events-complete.test.js.map +1 -0
- package/vendor/node_modules/@agent-recorder/core/db/events.d.ts +23 -36
- package/vendor/node_modules/@agent-recorder/core/db/events.d.ts.map +1 -1
- package/vendor/node_modules/@agent-recorder/core/db/events.js +74 -3
- package/vendor/node_modules/@agent-recorder/core/db/events.js.map +1 -1
- package/vendor/node_modules/@agent-recorder/core/db/events.test.js +62 -1
- package/vendor/node_modules/@agent-recorder/core/db/events.test.js.map +1 -1
- package/vendor/node_modules/@agent-recorder/core/db/index.d.ts +2 -1
- package/vendor/node_modules/@agent-recorder/core/db/index.d.ts.map +1 -1
- package/vendor/node_modules/@agent-recorder/core/db/index.js +2 -1
- package/vendor/node_modules/@agent-recorder/core/db/index.js.map +1 -1
- package/vendor/node_modules/@agent-recorder/core/db/sessions.d.ts +2 -5
- package/vendor/node_modules/@agent-recorder/core/db/sessions.d.ts.map +1 -1
- package/vendor/node_modules/@agent-recorder/core/db/sessions.js.map +1 -1
- package/vendor/node_modules/@agent-recorder/core/db/token-metrics.d.ts +33 -0
- package/vendor/node_modules/@agent-recorder/core/db/token-metrics.d.ts.map +1 -0
- package/vendor/node_modules/@agent-recorder/core/db/token-metrics.js +88 -0
- package/vendor/node_modules/@agent-recorder/core/db/token-metrics.js.map +1 -0
- package/vendor/node_modules/@agent-recorder/core/db/token-metrics.test.d.ts +5 -0
- package/vendor/node_modules/@agent-recorder/core/db/token-metrics.test.d.ts.map +1 -0
- package/vendor/node_modules/@agent-recorder/core/db/token-metrics.test.js +167 -0
- package/vendor/node_modules/@agent-recorder/core/db/token-metrics.test.js.map +1 -0
- package/vendor/node_modules/@agent-recorder/core/index.d.ts +1 -1
- package/vendor/node_modules/@agent-recorder/core/index.d.ts.map +1 -1
- package/vendor/node_modules/@agent-recorder/core/index.js +1 -1
- package/vendor/node_modules/@agent-recorder/core/index.js.map +1 -1
- package/vendor/node_modules/@agent-recorder/core/migrations/007_add_correlation_id.sql +11 -0
- package/vendor/node_modules/@agent-recorder/core/migrations/007_add_token_columns.sql +19 -0
- package/vendor/node_modules/@agent-recorder/core/package.json +1 -1
- package/vendor/node_modules/@agent-recorder/core/types/index.d.ts +4 -2
- package/vendor/node_modules/@agent-recorder/core/types/index.d.ts.map +1 -1
- package/vendor/node_modules/@agent-recorder/core/types/index.js +3 -0
- package/vendor/node_modules/@agent-recorder/core/types/index.js.map +1 -1
- package/vendor/node_modules/@agent-recorder/core/utils/index.d.ts +1 -0
- package/vendor/node_modules/@agent-recorder/core/utils/index.d.ts.map +1 -1
- package/vendor/node_modules/@agent-recorder/core/utils/index.js +1 -0
- package/vendor/node_modules/@agent-recorder/core/utils/index.js.map +1 -1
- package/vendor/node_modules/@agent-recorder/core/utils/redact.d.ts.map +1 -1
- package/vendor/node_modules/@agent-recorder/core/utils/redact.js +6 -3
- package/vendor/node_modules/@agent-recorder/core/utils/redact.js.map +1 -1
- package/vendor/node_modules/@agent-recorder/core/utils/redact.test.d.ts +6 -0
- package/vendor/node_modules/@agent-recorder/core/utils/redact.test.d.ts.map +1 -0
- package/vendor/node_modules/@agent-recorder/core/utils/redact.test.js +82 -0
- package/vendor/node_modules/@agent-recorder/core/utils/redact.test.js.map +1 -0
- package/vendor/node_modules/@agent-recorder/core/utils/tokens.d.ts +24 -0
- package/vendor/node_modules/@agent-recorder/core/utils/tokens.d.ts.map +1 -0
- package/vendor/node_modules/@agent-recorder/core/utils/tokens.js +31 -0
- package/vendor/node_modules/@agent-recorder/core/utils/tokens.js.map +1 -0
- package/vendor/node_modules/@agent-recorder/core/utils/tokens.test.d.ts +5 -0
- package/vendor/node_modules/@agent-recorder/core/utils/tokens.test.d.ts.map +1 -0
- package/vendor/node_modules/@agent-recorder/core/utils/tokens.test.js +80 -0
- package/vendor/node_modules/@agent-recorder/core/utils/tokens.test.js.map +1 -0
- package/vendor/node_modules/@agent-recorder/hooks/package.json +1 -1
- package/vendor/node_modules/@agent-recorder/service/daemon-context.d.ts +14 -0
- package/vendor/node_modules/@agent-recorder/service/daemon-context.d.ts.map +1 -0
- package/vendor/node_modules/@agent-recorder/service/daemon-context.js +15 -0
- package/vendor/node_modules/@agent-recorder/service/daemon-context.js.map +1 -0
- package/vendor/node_modules/@agent-recorder/service/index.d.ts +1 -8
- package/vendor/node_modules/@agent-recorder/service/index.d.ts.map +1 -1
- package/vendor/node_modules/@agent-recorder/service/index.js +15 -22
- package/vendor/node_modules/@agent-recorder/service/index.js.map +1 -1
- package/vendor/node_modules/@agent-recorder/service/mcp/proxy.d.ts +27 -0
- package/vendor/node_modules/@agent-recorder/service/mcp/proxy.d.ts.map +1 -1
- package/vendor/node_modules/@agent-recorder/service/mcp/proxy.js +141 -35
- package/vendor/node_modules/@agent-recorder/service/mcp/proxy.js.map +1 -1
- package/vendor/node_modules/@agent-recorder/service/mcp/recorder.d.ts +4 -0
- package/vendor/node_modules/@agent-recorder/service/mcp/recorder.d.ts.map +1 -1
- package/vendor/node_modules/@agent-recorder/service/mcp/recorder.js +56 -14
- package/vendor/node_modules/@agent-recorder/service/mcp/recorder.js.map +1 -1
- package/vendor/node_modules/@agent-recorder/service/mcp/recorder.test.d.ts +5 -0
- package/vendor/node_modules/@agent-recorder/service/mcp/recorder.test.d.ts.map +1 -0
- package/vendor/node_modules/@agent-recorder/service/mcp/recorder.test.js +143 -0
- package/vendor/node_modules/@agent-recorder/service/mcp/recorder.test.js.map +1 -0
- package/vendor/node_modules/@agent-recorder/service/mcp/types.d.ts +5 -31
- package/vendor/node_modules/@agent-recorder/service/mcp/types.d.ts.map +1 -1
- package/vendor/node_modules/@agent-recorder/service/mcp/types.js +3 -1
- package/vendor/node_modules/@agent-recorder/service/mcp/types.js.map +1 -1
- package/vendor/node_modules/@agent-recorder/service/mcp/upstreams-cache.test.d.ts +5 -0
- package/vendor/node_modules/@agent-recorder/service/mcp/upstreams-cache.test.d.ts.map +1 -0
- package/vendor/node_modules/@agent-recorder/service/mcp/upstreams-cache.test.js +66 -0
- package/vendor/node_modules/@agent-recorder/service/mcp/upstreams-cache.test.js.map +1 -0
- package/vendor/node_modules/@agent-recorder/service/package.json +1 -1
- package/vendor/node_modules/@agent-recorder/service/routes/events.d.ts.map +1 -1
- package/vendor/node_modules/@agent-recorder/service/routes/events.js +42 -1
- package/vendor/node_modules/@agent-recorder/service/routes/events.js.map +1 -1
- package/vendor/node_modules/@agent-recorder/service/routes/health.d.ts +6 -1
- package/vendor/node_modules/@agent-recorder/service/routes/health.d.ts.map +1 -1
- package/vendor/node_modules/@agent-recorder/service/routes/health.js +5 -6
- package/vendor/node_modules/@agent-recorder/service/routes/health.js.map +1 -1
- package/vendor/node_modules/@agent-recorder/service/routes/hooks.d.ts +20 -0
- package/vendor/node_modules/@agent-recorder/service/routes/hooks.d.ts.map +1 -1
- package/vendor/node_modules/@agent-recorder/service/routes/hooks.js +403 -49
- package/vendor/node_modules/@agent-recorder/service/routes/hooks.js.map +1 -1
- package/vendor/node_modules/@agent-recorder/service/routes/hooks.test.d.ts +9 -0
- package/vendor/node_modules/@agent-recorder/service/routes/hooks.test.d.ts.map +1 -0
- package/vendor/node_modules/@agent-recorder/service/routes/hooks.test.js +406 -0
- package/vendor/node_modules/@agent-recorder/service/routes/hooks.test.js.map +1 -0
- package/vendor/node_modules/@agent-recorder/service/routes/isToolResponseError.test.d.ts +8 -0
- package/vendor/node_modules/@agent-recorder/service/routes/isToolResponseError.test.d.ts.map +1 -0
- package/vendor/node_modules/@agent-recorder/service/routes/isToolResponseError.test.js +65 -0
- package/vendor/node_modules/@agent-recorder/service/routes/isToolResponseError.test.js.map +1 -0
- package/vendor/node_modules/@agent-recorder/service/routes/sessions.d.ts.map +1 -1
- package/vendor/node_modules/@agent-recorder/service/routes/sessions.js +19 -1
- package/vendor/node_modules/@agent-recorder/service/routes/sessions.js.map +1 -1
- package/vendor/node_modules/@agent-recorder/service/routes/stdio.d.ts.map +1 -1
- package/vendor/node_modules/@agent-recorder/service/routes/stdio.js +20 -1
- package/vendor/node_modules/@agent-recorder/service/routes/stdio.js.map +1 -1
- package/vendor/node_modules/@agent-recorder/service/routes/tokens.d.ts +12 -0
- package/vendor/node_modules/@agent-recorder/service/routes/tokens.d.ts.map +1 -0
- package/vendor/node_modules/@agent-recorder/service/routes/tokens.js +18 -0
- package/vendor/node_modules/@agent-recorder/service/routes/tokens.js.map +1 -0
- package/vendor/node_modules/@agent-recorder/service/routes/tokens.test.d.ts +5 -0
- package/vendor/node_modules/@agent-recorder/service/routes/tokens.test.d.ts.map +1 -0
- package/vendor/node_modules/@agent-recorder/service/routes/tokens.test.js +88 -0
- package/vendor/node_modules/@agent-recorder/service/routes/tokens.test.js.map +1 -0
- package/vendor/node_modules/@agent-recorder/service/server.d.ts +4 -0
- package/vendor/node_modules/@agent-recorder/service/server.d.ts.map +1 -1
- package/vendor/node_modules/@agent-recorder/service/server.js +33 -3
- package/vendor/node_modules/@agent-recorder/service/server.js.map +1 -1
- package/vendor/node_modules/@agent-recorder/stdio-proxy/package.json +1 -1
- package/vendor/node_modules/@agent-recorder/stdio-proxy/types.d.ts +3 -19
- package/vendor/node_modules/@agent-recorder/stdio-proxy/types.d.ts.map +1 -1
- package/vendor/node_modules/@agent-recorder/stdio-proxy/types.js +2 -1
- package/vendor/node_modules/@agent-recorder/stdio-proxy/types.js.map +1 -1
- package/vendor/node_modules/@agent-recorder/{core/types → types}/events.d.ts +9 -0
- package/vendor/node_modules/@agent-recorder/types/events.d.ts.map +1 -0
- package/vendor/node_modules/@agent-recorder/types/events.js +9 -0
- package/vendor/node_modules/@agent-recorder/types/events.js.map +1 -0
- package/vendor/node_modules/@agent-recorder/types/index.d.ts +12 -0
- package/vendor/node_modules/@agent-recorder/types/index.d.ts.map +1 -0
- package/vendor/node_modules/@agent-recorder/types/index.js +9 -0
- package/vendor/node_modules/@agent-recorder/types/index.js.map +1 -0
- package/vendor/node_modules/@agent-recorder/types/jsonrpc.d.ts +35 -0
- package/vendor/node_modules/@agent-recorder/types/jsonrpc.d.ts.map +1 -0
- package/vendor/node_modules/@agent-recorder/types/jsonrpc.js +6 -0
- package/vendor/node_modules/@agent-recorder/types/jsonrpc.js.map +1 -0
- package/vendor/node_modules/@agent-recorder/types/package.json +12 -0
- package/vendor/node_modules/@agent-recorder/{core/types → types}/session.d.ts +6 -0
- package/vendor/node_modules/@agent-recorder/types/session.d.ts.map +1 -0
- package/vendor/node_modules/@agent-recorder/{core/types → types}/session.js.map +1 -1
- package/vendor/node_modules/@agent-recorder/types/storage.d.ts +80 -0
- package/vendor/node_modules/@agent-recorder/types/storage.d.ts.map +1 -0
- package/vendor/node_modules/@agent-recorder/types/storage.js +9 -0
- package/vendor/node_modules/@agent-recorder/types/storage.js.map +1 -0
- package/vendor/node_modules/@agent-recorder/core/types/events.d.ts.map +0 -1
- package/vendor/node_modules/@agent-recorder/core/types/events.js +0 -6
- package/vendor/node_modules/@agent-recorder/core/types/events.js.map +0 -1
- package/vendor/node_modules/@agent-recorder/core/types/session.d.ts.map +0 -1
- /package/vendor/node_modules/@agent-recorder/{core/types → types}/session.js +0 -0
|
@@ -5,25 +5,98 @@
|
|
|
5
5
|
* Supports hub mode: aggregates multiple HTTP providers.
|
|
6
6
|
*/
|
|
7
7
|
import Fastify, {} from "fastify";
|
|
8
|
-
import { readProvidersFile, getDefaultProvidersPath, } from "@agent-recorder/core";
|
|
9
|
-
import { readFileSync } from "node:fs";
|
|
8
|
+
import { readProvidersFile, getDefaultProvidersPath, upsertToolSchemaMetric, estimateTokens, } from "@agent-recorder/core";
|
|
9
|
+
import { readFileSync, watch, existsSync } from "node:fs";
|
|
10
|
+
import { dirname, basename } from "node:path";
|
|
10
11
|
import { isToolsCallRequest, isErrorResponse, } from "./types.js";
|
|
11
12
|
import { recordToolCall } from "./recorder.js";
|
|
12
13
|
/** Default request timeout in milliseconds */
|
|
13
14
|
const DEFAULT_TIMEOUT_MS = 60_000;
|
|
14
15
|
/**
|
|
15
|
-
*
|
|
16
|
-
*
|
|
16
|
+
* Cached upstreams registry.
|
|
17
|
+
* Loads from file once and watches for changes via fs.watch.
|
|
18
|
+
* Avoids readFileSync + JSON.parse on every incoming request.
|
|
17
19
|
*/
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
/** @internal Exported for unit testing only */
|
|
21
|
+
export class UpstreamsCache {
|
|
22
|
+
path;
|
|
23
|
+
registry = {};
|
|
24
|
+
watcher = null;
|
|
25
|
+
fileName;
|
|
26
|
+
reloadTimer = null;
|
|
27
|
+
constructor(path) {
|
|
28
|
+
this.path = path;
|
|
29
|
+
this.fileName = basename(path);
|
|
30
|
+
this.reload();
|
|
31
|
+
this.setupWatcher();
|
|
32
|
+
}
|
|
33
|
+
setupWatcher() {
|
|
34
|
+
// Try watching the file directly first
|
|
35
|
+
if (existsSync(this.path)) {
|
|
36
|
+
try {
|
|
37
|
+
this.watcher = watch(this.path, () => this.scheduleReload());
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// Fall through to parent dir watcher
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// File doesn't exist yet — watch parent directory for creation
|
|
45
|
+
const dir = dirname(this.path);
|
|
46
|
+
try {
|
|
47
|
+
this.watcher = watch(dir, (_, filename) => {
|
|
48
|
+
if (filename === this.fileName) {
|
|
49
|
+
this.scheduleReload();
|
|
50
|
+
// Upgrade to direct file watcher now that the file exists.
|
|
51
|
+
// Note: there is a small TOCTOU window between close() and the
|
|
52
|
+
// new watch() where a file change could be missed. The extra
|
|
53
|
+
// scheduleReload() after the swap mitigates this, but it is not atomic.
|
|
54
|
+
// Acceptable because this is a local config file that changes rarely.
|
|
55
|
+
this.watcher?.close();
|
|
56
|
+
try {
|
|
57
|
+
this.watcher = watch(this.path, () => this.scheduleReload());
|
|
58
|
+
this.scheduleReload();
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// Keep parent dir watcher if upgrade fails — registry may be stale
|
|
62
|
+
// until the next change event triggers a reload from the directory watcher.
|
|
63
|
+
console.warn("[upstreams] Failed to upgrade to file watcher; falling back to directory watcher (registry may be stale)");
|
|
64
|
+
this.watcher = watch(dir, (_, fn) => {
|
|
65
|
+
if (fn === this.fileName)
|
|
66
|
+
this.scheduleReload();
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
// Parent dir doesn't exist — watcher is best-effort
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/** Debounce reload to avoid redundant reads from rapid fs.watch events */
|
|
77
|
+
scheduleReload() {
|
|
78
|
+
if (this.reloadTimer)
|
|
79
|
+
clearTimeout(this.reloadTimer);
|
|
80
|
+
this.reloadTimer = setTimeout(() => this.reload(), 50);
|
|
81
|
+
}
|
|
82
|
+
reload() {
|
|
83
|
+
try {
|
|
84
|
+
const content = readFileSync(this.path, "utf-8");
|
|
85
|
+
this.registry = JSON.parse(content) ?? {};
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
// Keep previous value on error (file missing or invalid JSON)
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
get(key) {
|
|
92
|
+
return this.registry[key];
|
|
23
93
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
94
|
+
close() {
|
|
95
|
+
if (this.reloadTimer)
|
|
96
|
+
clearTimeout(this.reloadTimer);
|
|
97
|
+
this.reloadTimer = null;
|
|
98
|
+
this.watcher?.close();
|
|
99
|
+
this.watcher = null;
|
|
27
100
|
}
|
|
28
101
|
}
|
|
29
102
|
/** Hop-by-hop headers that should not be forwarded */
|
|
@@ -226,6 +299,8 @@ function parseNamespacedTool(name) {
|
|
|
226
299
|
export async function createMcpProxy(options) {
|
|
227
300
|
const { db, config, sessionId, timeoutMs = DEFAULT_TIMEOUT_MS } = options;
|
|
228
301
|
const { downstreamMcpUrl, upstreamsPath, redactKeys, mcpProxyPort, debugProxy, } = config;
|
|
302
|
+
// Initialize upstreams cache (replaces per-request readFileSync)
|
|
303
|
+
const upstreamsCache = new UpstreamsCache(upstreamsPath);
|
|
229
304
|
// Load HTTP providers for hub mode
|
|
230
305
|
const providersPath = getDefaultProvidersPath();
|
|
231
306
|
const httpProviders = loadHttpProviders(providersPath, downstreamMcpUrl);
|
|
@@ -260,6 +335,33 @@ export async function createMcpProxy(options) {
|
|
|
260
335
|
// Hub mode: Handle tools/list by aggregating from all providers
|
|
261
336
|
if (body.method === "tools/list" && httpProviders.length > 0) {
|
|
262
337
|
const response = await aggregateToolsList(httpProviders, body.id, timeoutMs, debugProxy);
|
|
338
|
+
// Record schema token metrics for each tool — fail-open
|
|
339
|
+
if (sessionId && !isErrorResponse(response)) {
|
|
340
|
+
const result = response.result;
|
|
341
|
+
if (result && typeof result === "object" && "tools" in result) {
|
|
342
|
+
const tools = result.tools;
|
|
343
|
+
for (const tool of tools) {
|
|
344
|
+
if (!tool || typeof tool !== "object" || !("name" in tool))
|
|
345
|
+
continue;
|
|
346
|
+
const toolName = tool.name;
|
|
347
|
+
// Tools are namespaced as "<providerId>.<toolName>" by aggregateToolsList above,
|
|
348
|
+
// so splitting on the first dot safely recovers the upstream key.
|
|
349
|
+
const dotIdx = toolName.indexOf(".");
|
|
350
|
+
const upstreamKey = dotIdx > 0 ? toolName.slice(0, dotIdx) : null;
|
|
351
|
+
try {
|
|
352
|
+
upsertToolSchemaMetric(db, {
|
|
353
|
+
sessionId,
|
|
354
|
+
upstreamKey,
|
|
355
|
+
toolName,
|
|
356
|
+
schemaTokens: estimateTokens(tool),
|
|
357
|
+
});
|
|
358
|
+
}
|
|
359
|
+
catch {
|
|
360
|
+
// Fail-open
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
}
|
|
263
365
|
return reply.code(200).send(response);
|
|
264
366
|
}
|
|
265
367
|
// Declare variables for tool call tracking
|
|
@@ -273,7 +375,7 @@ export async function createMcpProxy(options) {
|
|
|
273
375
|
toolInput = params.arguments ?? {};
|
|
274
376
|
}
|
|
275
377
|
// Determine downstream URL based on router/hub mode logic
|
|
276
|
-
let
|
|
378
|
+
let targetUrl = null;
|
|
277
379
|
let finalUpstreamKey = upstreamKeyStr;
|
|
278
380
|
// Hub mode: Parse namespaced tool name for tools/call
|
|
279
381
|
if (isToolCall && toolName && httpProviders.length > 0) {
|
|
@@ -301,6 +403,7 @@ export async function createMcpProxy(options) {
|
|
|
301
403
|
endedAt: new Date().toISOString(),
|
|
302
404
|
redactKeys,
|
|
303
405
|
debugProxy,
|
|
406
|
+
contextBudgetTokens: config.contextBudgetTokens,
|
|
304
407
|
});
|
|
305
408
|
}
|
|
306
409
|
return reply.code(404).send({
|
|
@@ -314,18 +417,17 @@ export async function createMcpProxy(options) {
|
|
|
314
417
|
});
|
|
315
418
|
}
|
|
316
419
|
// Route to provider URL
|
|
317
|
-
|
|
420
|
+
targetUrl = provider.url;
|
|
318
421
|
finalUpstreamKey = parsed.providerId;
|
|
319
422
|
// Rewrite tool name without namespace prefix
|
|
320
423
|
toolName = parsed.toolName;
|
|
321
424
|
body.params.name = parsed.toolName;
|
|
322
425
|
}
|
|
323
426
|
}
|
|
324
|
-
// Router mode: lookup upstream in registry
|
|
427
|
+
// Router mode: lookup upstream in cached registry
|
|
325
428
|
let upstreamHeaders;
|
|
326
|
-
if (!
|
|
327
|
-
const
|
|
328
|
-
const upstream = registry[upstreamKeyStr];
|
|
429
|
+
if (!targetUrl && upstreamKeyStr) {
|
|
430
|
+
const upstream = upstreamsCache.get(upstreamKeyStr);
|
|
329
431
|
if (!upstream) {
|
|
330
432
|
return reply.code(404).send({
|
|
331
433
|
jsonrpc: "2.0",
|
|
@@ -336,15 +438,15 @@ export async function createMcpProxy(options) {
|
|
|
336
438
|
id: null,
|
|
337
439
|
});
|
|
338
440
|
}
|
|
339
|
-
|
|
441
|
+
targetUrl = upstream.url;
|
|
340
442
|
upstreamHeaders = upstream.headers;
|
|
341
443
|
}
|
|
342
444
|
// Legacy mode: use configured downstream URL
|
|
343
|
-
if (!
|
|
344
|
-
|
|
445
|
+
if (!targetUrl && downstreamMcpUrl) {
|
|
446
|
+
targetUrl = downstreamMcpUrl;
|
|
345
447
|
}
|
|
346
448
|
// No downstream configured
|
|
347
|
-
if (!
|
|
449
|
+
if (!targetUrl) {
|
|
348
450
|
return reply.code(503).send({
|
|
349
451
|
jsonrpc: "2.0",
|
|
350
452
|
error: {
|
|
@@ -364,15 +466,15 @@ export async function createMcpProxy(options) {
|
|
|
364
466
|
}
|
|
365
467
|
// Log routing decision if debug enabled
|
|
366
468
|
if (debugProxy) {
|
|
367
|
-
console.log(`[PROXY] Routing ${body.method} to ${
|
|
469
|
+
console.log(`[PROXY] Routing ${body.method} to ${targetUrl} (upstream: ${finalUpstreamKey ?? "legacy"})`);
|
|
368
470
|
}
|
|
369
471
|
// Create abort controller for timeout
|
|
370
472
|
const controller = new AbortController();
|
|
371
473
|
const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
|
|
372
474
|
// Forward request to downstream
|
|
373
|
-
let
|
|
475
|
+
let upstreamResponse;
|
|
374
476
|
try {
|
|
375
|
-
|
|
477
|
+
upstreamResponse = await fetch(targetUrl, {
|
|
376
478
|
method: "POST",
|
|
377
479
|
headers: forwardHeaders,
|
|
378
480
|
body: JSON.stringify(body),
|
|
@@ -399,6 +501,7 @@ export async function createMcpProxy(options) {
|
|
|
399
501
|
endedAt,
|
|
400
502
|
redactKeys,
|
|
401
503
|
debugProxy,
|
|
504
|
+
contextBudgetTokens: config.contextBudgetTokens,
|
|
402
505
|
});
|
|
403
506
|
}
|
|
404
507
|
return reply.code(504).send({
|
|
@@ -415,7 +518,7 @@ export async function createMcpProxy(options) {
|
|
|
415
518
|
const errorMessage = error instanceof Error ? error.message : "Unknown error";
|
|
416
519
|
const errorName = error instanceof Error ? error.name : "Error";
|
|
417
520
|
console.error(`Failed to forward request to downstream: ${errorName}: ${errorMessage}`);
|
|
418
|
-
console.error(` Target URL: ${
|
|
521
|
+
console.error(` Target URL: ${targetUrl}`);
|
|
419
522
|
console.error(` Upstream key: ${finalUpstreamKey ?? "(legacy mode)"}`);
|
|
420
523
|
return reply.code(502).send({
|
|
421
524
|
jsonrpc: "2.0",
|
|
@@ -428,20 +531,20 @@ export async function createMcpProxy(options) {
|
|
|
428
531
|
}
|
|
429
532
|
clearTimeout(timeoutId);
|
|
430
533
|
// Check for HTTP-level errors before parsing response body
|
|
431
|
-
if (!
|
|
432
|
-
const statusCode =
|
|
433
|
-
const statusText =
|
|
534
|
+
if (!upstreamResponse.ok) {
|
|
535
|
+
const statusCode = upstreamResponse.status;
|
|
536
|
+
const statusText = upstreamResponse.statusText;
|
|
434
537
|
// Try to read response body for more details
|
|
435
538
|
let errorBody = "";
|
|
436
539
|
try {
|
|
437
|
-
errorBody = await
|
|
540
|
+
errorBody = await upstreamResponse.text();
|
|
438
541
|
}
|
|
439
542
|
catch {
|
|
440
543
|
// Ignore if we can't read body
|
|
441
544
|
}
|
|
442
545
|
// Log detailed error
|
|
443
546
|
console.error(`Downstream returned HTTP ${statusCode} ${statusText}`);
|
|
444
|
-
console.error(` Target URL: ${
|
|
547
|
+
console.error(` Target URL: ${targetUrl}`);
|
|
445
548
|
console.error(` Upstream key: ${finalUpstreamKey ?? "(legacy mode)"}`);
|
|
446
549
|
if (debugProxy && errorBody) {
|
|
447
550
|
console.error(` Response body: ${errorBody.slice(0, 200)}`);
|
|
@@ -483,6 +586,7 @@ export async function createMcpProxy(options) {
|
|
|
483
586
|
endedAt,
|
|
484
587
|
redactKeys,
|
|
485
588
|
debugProxy,
|
|
589
|
+
contextBudgetTokens: config.contextBudgetTokens,
|
|
486
590
|
});
|
|
487
591
|
}
|
|
488
592
|
return reply.code(502).send({
|
|
@@ -496,14 +600,14 @@ export async function createMcpProxy(options) {
|
|
|
496
600
|
});
|
|
497
601
|
}
|
|
498
602
|
// Check response content type to handle SSE vs JSON
|
|
499
|
-
const contentType =
|
|
603
|
+
const contentType = upstreamResponse.headers.get("content-type") ?? "";
|
|
500
604
|
const isSSE = contentType.includes("text/event-stream");
|
|
501
605
|
// Parse downstream response
|
|
502
606
|
let responseBody;
|
|
503
607
|
try {
|
|
504
608
|
if (isSSE) {
|
|
505
609
|
// Handle SSE response - extract JSON from the stream
|
|
506
|
-
const text = await
|
|
610
|
+
const text = await upstreamResponse.text();
|
|
507
611
|
// SSE format: "event: message\ndata: {...}\n\n"
|
|
508
612
|
// Extract the last complete JSON object from the data lines
|
|
509
613
|
const dataLines = text
|
|
@@ -518,7 +622,7 @@ export async function createMcpProxy(options) {
|
|
|
518
622
|
responseBody = JSON.parse(lastData);
|
|
519
623
|
}
|
|
520
624
|
else {
|
|
521
|
-
responseBody = (await
|
|
625
|
+
responseBody = (await upstreamResponse.json());
|
|
522
626
|
}
|
|
523
627
|
}
|
|
524
628
|
catch (parseError) {
|
|
@@ -556,10 +660,11 @@ export async function createMcpProxy(options) {
|
|
|
556
660
|
endedAt,
|
|
557
661
|
redactKeys,
|
|
558
662
|
debugProxy,
|
|
663
|
+
contextBudgetTokens: config.contextBudgetTokens,
|
|
559
664
|
});
|
|
560
665
|
}
|
|
561
666
|
// Preserve downstream HTTP status code and return response unchanged
|
|
562
|
-
reply.code(
|
|
667
|
+
reply.code(upstreamResponse.status);
|
|
563
668
|
reply.header("Content-Type", "application/json");
|
|
564
669
|
return reply.send(responseBody);
|
|
565
670
|
});
|
|
@@ -568,6 +673,7 @@ export async function createMcpProxy(options) {
|
|
|
568
673
|
console.log(`MCP proxy listening on http://127.0.0.1:${mcpProxyPort}`);
|
|
569
674
|
};
|
|
570
675
|
const close = async () => {
|
|
676
|
+
upstreamsCache.close();
|
|
571
677
|
await app.close();
|
|
572
678
|
};
|
|
573
679
|
return { app, start, close };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../src/mcp/proxy.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../src/mcp/proxy.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,7 +20,11 @@ export interface RecordToolCallOptions {
|
|
|
20
20
|
redactKeys: string[];
|
|
21
21
|
/** Enable debug logging (metadata only, no payloads) */
|
|
22
22
|
debugProxy?: boolean;
|
|
23
|
+
/** Context budget in tokens; warn when session exceeds this */
|
|
24
|
+
contextBudgetTokens?: number;
|
|
23
25
|
}
|
|
26
|
+
/** Reset the warned-sessions set. Exposed for test isolation only. */
|
|
27
|
+
export declare function resetBudgetWarnedSessions(): void;
|
|
24
28
|
/**
|
|
25
29
|
* Record a tool call event to the database.
|
|
26
30
|
* Uses atomic sequence allocation from session_sequences table.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recorder.d.ts","sourceRoot":"","sources":["../../src/mcp/recorder.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,OAAO,
|
|
1
|
+
{"version":3,"file":"recorder.d.ts","sourceRoot":"","sources":["../../src/mcp/recorder.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAOL,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,wDAAwD;IACxD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,+DAA+D;IAC/D,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAYD,sEAAsE;AACtE,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,GAAG,IAAI,CA6G5E"}
|
|
@@ -4,7 +4,20 @@
|
|
|
4
4
|
* Implements fail-open pattern: errors are logged but don't block proxy forwarding.
|
|
5
5
|
*/
|
|
6
6
|
import { randomUUID } from "node:crypto";
|
|
7
|
-
import { allocateSequence, deriveErrorCategory, insertEvent, redactAndTruncate, } from "@agent-recorder/core";
|
|
7
|
+
import { allocateSequence, deriveErrorCategory, insertEvent, redactAndTruncate, getTokenSummary, estimateSerializedTokens, } from "@agent-recorder/core";
|
|
8
|
+
/**
|
|
9
|
+
* Track sessions where a budget warning has already been emitted.
|
|
10
|
+
* Prevents log spam on every tool call after the threshold is crossed.
|
|
11
|
+
* Capped at 10k entries to avoid unbounded memory growth in long-running daemons.
|
|
12
|
+
*/
|
|
13
|
+
const budgetWarnedSessions = new Set();
|
|
14
|
+
// Safety cap: stop tracking new sessions beyond this limit rather than clearing
|
|
15
|
+
// (clearing would cause re-flooding for all previously warned sessions).
|
|
16
|
+
const MAX_BUDGET_WARNED_SESSIONS = 10_000;
|
|
17
|
+
/** Reset the warned-sessions set. Exposed for test isolation only. */
|
|
18
|
+
export function resetBudgetWarnedSessions() {
|
|
19
|
+
budgetWarnedSessions.clear();
|
|
20
|
+
}
|
|
8
21
|
/**
|
|
9
22
|
* Record a tool call event to the database.
|
|
10
23
|
* Uses atomic sequence allocation from session_sequences table.
|
|
@@ -13,22 +26,16 @@ import { allocateSequence, deriveErrorCategory, insertEvent, redactAndTruncate,
|
|
|
13
26
|
* @returns The event ID if successful, null if recording failed
|
|
14
27
|
*/
|
|
15
28
|
export function recordToolCall(options) {
|
|
16
|
-
const { db, sessionId, parentEventId, toolName, mcpMethod, upstreamKey, input, output, status, startedAt, endedAt, redactKeys, debugProxy, } = options;
|
|
29
|
+
const { db, sessionId, parentEventId, toolName, mcpMethod, upstreamKey, input, output, status, startedAt, endedAt, redactKeys, debugProxy, contextBudgetTokens, } = options;
|
|
17
30
|
try {
|
|
18
|
-
// Allocate sequence atomically
|
|
19
31
|
const sequence = allocateSequence(db, sessionId);
|
|
20
|
-
// Redact and truncate input/output
|
|
21
32
|
const inputJson = redactAndTruncate(input, redactKeys);
|
|
22
33
|
const outputJson = redactAndTruncate(output, redactKeys);
|
|
23
|
-
// Derive error category from status and redacted output (no content logging)
|
|
24
34
|
const errorCategory = deriveErrorCategory(status, outputJson);
|
|
25
|
-
//
|
|
35
|
+
// Estimate tokens from already-serialized strings using byte-accurate counting
|
|
36
|
+
const inputTokens = estimateSerializedTokens(inputJson);
|
|
37
|
+
const outputTokens = estimateSerializedTokens(outputJson);
|
|
26
38
|
const eventId = randomUUID();
|
|
27
|
-
// Insert event with proper column mapping:
|
|
28
|
-
// - agentName = "claude-code" (stable identifier for the agent)
|
|
29
|
-
// - toolName = actual tool name from params.name
|
|
30
|
-
// - mcpMethod = "tools/call" (or whatever MCP method was invoked)
|
|
31
|
-
// - upstreamKey = server key from router mode (null for legacy single-upstream)
|
|
32
39
|
insertEvent(db, {
|
|
33
40
|
id: eventId,
|
|
34
41
|
sessionId,
|
|
@@ -47,17 +54,52 @@ export function recordToolCall(options) {
|
|
|
47
54
|
inputJson,
|
|
48
55
|
outputJson,
|
|
49
56
|
errorCategory,
|
|
57
|
+
inputTokens,
|
|
58
|
+
outputTokens,
|
|
50
59
|
});
|
|
51
|
-
//
|
|
60
|
+
// Budget check — fail-open, never throws.
|
|
61
|
+
// Fast-path: single SUM query to check if budget is exceeded before running the
|
|
62
|
+
// full 3-query getTokenSummary (which is only needed when emitting the warning).
|
|
63
|
+
if (contextBudgetTokens && !budgetWarnedSessions.has(sessionId)) {
|
|
64
|
+
try {
|
|
65
|
+
const { callTotal } = db
|
|
66
|
+
.prepare(`SELECT COALESCE(SUM(input_tokens), 0) + COALESCE(SUM(output_tokens), 0) AS callTotal
|
|
67
|
+
FROM events WHERE session_id = ? AND event_type = 'tool_call'`)
|
|
68
|
+
.get(sessionId);
|
|
69
|
+
const { schemaTotal } = db
|
|
70
|
+
.prepare(`SELECT COALESCE(SUM(schema_tokens), 0) AS schemaTotal
|
|
71
|
+
FROM tool_schema_metrics WHERE session_id = ?`)
|
|
72
|
+
.get(sessionId);
|
|
73
|
+
if (callTotal + schemaTotal > contextBudgetTokens) {
|
|
74
|
+
// Budget exceeded — fetch full summary for the warning payload
|
|
75
|
+
const summary = getTokenSummary(db, sessionId, contextBudgetTokens);
|
|
76
|
+
// Cap the set to avoid unbounded memory growth in very long-running daemons.
|
|
77
|
+
// Warn and track only if below the cap; sessions above the cap are
|
|
78
|
+
// silently skipped rather than re-warned on every call.
|
|
79
|
+
if (budgetWarnedSessions.size < MAX_BUDGET_WARNED_SESSIONS) {
|
|
80
|
+
budgetWarnedSessions.add(sessionId);
|
|
81
|
+
console.warn(JSON.stringify({
|
|
82
|
+
type: "context_budget_warning",
|
|
83
|
+
sessionId,
|
|
84
|
+
estimatedTokens: summary.estimatedTotalTokens,
|
|
85
|
+
budgetTokens: contextBudgetTokens,
|
|
86
|
+
percentUsed: summary.percentUsed,
|
|
87
|
+
}));
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
// Fail-open
|
|
93
|
+
}
|
|
94
|
+
}
|
|
52
95
|
if (debugProxy) {
|
|
53
96
|
const durationMs = new Date(endedAt).getTime() - new Date(startedAt).getTime();
|
|
54
97
|
const upstreamInfo = upstreamKey ? ` upstream=${upstreamKey}` : "";
|
|
55
|
-
console.log(`[DEBUG] tool_call: session=${sessionId} seq=${sequence} tool=${toolName}${upstreamInfo} status=${status} duration=${durationMs}ms`);
|
|
98
|
+
console.log(`[DEBUG] tool_call: session=${sessionId} seq=${sequence} tool=${toolName}${upstreamInfo} status=${status} duration=${durationMs}ms tokens=${inputTokens}+${outputTokens}`);
|
|
56
99
|
}
|
|
57
100
|
return eventId;
|
|
58
101
|
}
|
|
59
102
|
catch (error) {
|
|
60
|
-
// Fail-open: log error but don't throw
|
|
61
103
|
console.error("Failed to record tool call:", error);
|
|
62
104
|
return null;
|
|
63
105
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recorder.js","sourceRoot":"","sources":["../../src/mcp/recorder.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,WAAW,EACX,iBAAiB,
|
|
1
|
+
{"version":3,"file":"recorder.js","sourceRoot":"","sources":["../../src/mcp/recorder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recorder.test.d.ts","sourceRoot":"","sources":["../../src/mcp/recorder.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|