@darkiceinteractive/mcp-conductor 2.0.0-alpha.1 → 3.0.0-beta.2
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/README.md +35 -5
- package/dist/bin/cli.d.ts +20 -0
- package/dist/bin/cli.d.ts.map +1 -0
- package/dist/bin/cli.js +260 -0
- package/dist/bin/cli.js.map +1 -0
- package/dist/bridge/http-server.d.ts +35 -0
- package/dist/bridge/http-server.d.ts.map +1 -1
- package/dist/bridge/http-server.js +51 -2
- package/dist/bridge/http-server.js.map +1 -1
- package/dist/bridge/index.d.ts +1 -0
- package/dist/bridge/index.d.ts.map +1 -1
- package/dist/bridge/index.js +1 -0
- package/dist/bridge/index.js.map +1 -1
- package/dist/bridge/pool.d.ts +95 -0
- package/dist/bridge/pool.d.ts.map +1 -0
- package/dist/bridge/pool.js +384 -0
- package/dist/bridge/pool.js.map +1 -0
- package/dist/cache/cache.d.ts +64 -0
- package/dist/cache/cache.d.ts.map +1 -0
- package/dist/cache/cache.js +209 -0
- package/dist/cache/cache.js.map +1 -0
- package/dist/cache/delta.d.ts +32 -0
- package/dist/cache/delta.d.ts.map +1 -0
- package/dist/cache/delta.js +131 -0
- package/dist/cache/delta.js.map +1 -0
- package/dist/cache/disk.d.ts +65 -0
- package/dist/cache/disk.d.ts.map +1 -0
- package/dist/cache/disk.js +238 -0
- package/dist/cache/disk.js.map +1 -0
- package/dist/cache/index.d.ts +53 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +12 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/key.d.ts +44 -0
- package/dist/cache/key.d.ts.map +1 -0
- package/dist/cache/key.js +83 -0
- package/dist/cache/key.js.map +1 -0
- package/dist/cache/lru.d.ts +57 -0
- package/dist/cache/lru.d.ts.map +1 -0
- package/dist/cache/lru.js +112 -0
- package/dist/cache/lru.js.map +1 -0
- package/dist/cache/policy.d.ts +34 -0
- package/dist/cache/policy.d.ts.map +1 -0
- package/dist/cache/policy.js +95 -0
- package/dist/cache/policy.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +33 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +135 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/export-servers.d.ts +22 -0
- package/dist/cli/commands/export-servers.d.ts.map +1 -0
- package/dist/cli/commands/export-servers.js +45 -0
- package/dist/cli/commands/export-servers.js.map +1 -0
- package/dist/cli/commands/import-servers.d.ts +57 -0
- package/dist/cli/commands/import-servers.d.ts.map +1 -0
- package/dist/cli/commands/import-servers.js +137 -0
- package/dist/cli/commands/import-servers.js.map +1 -0
- package/dist/cli/commands/routing.d.ts +34 -0
- package/dist/cli/commands/routing.d.ts.map +1 -0
- package/dist/cli/commands/routing.js +60 -0
- package/dist/cli/commands/routing.js.map +1 -0
- package/dist/cli/commands/test-server.d.ts +34 -0
- package/dist/cli/commands/test-server.d.ts.map +1 -0
- package/dist/cli/commands/test-server.js +86 -0
- package/dist/cli/commands/test-server.js.map +1 -0
- package/dist/cli/daemon.d.ts +60 -0
- package/dist/cli/daemon.d.ts.map +1 -0
- package/dist/cli/daemon.js +244 -0
- package/dist/cli/daemon.js.map +1 -0
- package/dist/cli/replay.d.ts +16 -0
- package/dist/cli/replay.d.ts.map +1 -0
- package/dist/cli/replay.js +89 -0
- package/dist/cli/replay.js.map +1 -0
- package/dist/cli/wizard/setup.d.ts +12 -0
- package/dist/cli/wizard/setup.d.ts.map +1 -0
- package/dist/cli/wizard/setup.js +71 -0
- package/dist/cli/wizard/setup.js.map +1 -0
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +4 -1
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/schema.d.ts +34 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/daemon/client.d.ts +99 -0
- package/dist/daemon/client.d.ts.map +1 -0
- package/dist/daemon/client.js +292 -0
- package/dist/daemon/client.js.map +1 -0
- package/dist/daemon/discovery.d.ts +50 -0
- package/dist/daemon/discovery.d.ts.map +1 -0
- package/dist/daemon/discovery.js +104 -0
- package/dist/daemon/discovery.js.map +1 -0
- package/dist/daemon/index.d.ts +16 -0
- package/dist/daemon/index.d.ts.map +1 -0
- package/dist/daemon/index.js +11 -0
- package/dist/daemon/index.js.map +1 -0
- package/dist/daemon/sandbox-api.d.ts +45 -0
- package/dist/daemon/sandbox-api.d.ts.map +1 -0
- package/dist/daemon/sandbox-api.js +74 -0
- package/dist/daemon/sandbox-api.js.map +1 -0
- package/dist/daemon/server.d.ts +65 -0
- package/dist/daemon/server.d.ts.map +1 -0
- package/dist/daemon/server.js +373 -0
- package/dist/daemon/server.js.map +1 -0
- package/dist/daemon/shared-kv.d.ts +81 -0
- package/dist/daemon/shared-kv.d.ts.map +1 -0
- package/dist/daemon/shared-kv.js +215 -0
- package/dist/daemon/shared-kv.js.map +1 -0
- package/dist/daemon/shared-lock.d.ts +71 -0
- package/dist/daemon/shared-lock.d.ts.map +1 -0
- package/dist/daemon/shared-lock.js +119 -0
- package/dist/daemon/shared-lock.js.map +1 -0
- package/dist/hub/mcp-hub.d.ts +23 -0
- package/dist/hub/mcp-hub.d.ts.map +1 -1
- package/dist/hub/mcp-hub.js +34 -1
- package/dist/hub/mcp-hub.js.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/observability/anomaly.d.ts +67 -0
- package/dist/observability/anomaly.d.ts.map +1 -0
- package/dist/observability/anomaly.js +141 -0
- package/dist/observability/anomaly.js.map +1 -0
- package/dist/observability/cost-predictor.d.ts +49 -0
- package/dist/observability/cost-predictor.d.ts.map +1 -0
- package/dist/observability/cost-predictor.js +145 -0
- package/dist/observability/cost-predictor.js.map +1 -0
- package/dist/observability/hot-path.d.ts +49 -0
- package/dist/observability/hot-path.d.ts.map +1 -0
- package/dist/observability/hot-path.js +125 -0
- package/dist/observability/hot-path.js.map +1 -0
- package/dist/observability/index.d.ts +10 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +10 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/replay.d.ts +104 -0
- package/dist/observability/replay.d.ts.map +1 -0
- package/dist/observability/replay.js +239 -0
- package/dist/observability/replay.js.map +1 -0
- package/dist/registry/built-in-recommendations.d.ts +54 -0
- package/dist/registry/built-in-recommendations.d.ts.map +1 -0
- package/dist/registry/built-in-recommendations.js +65 -0
- package/dist/registry/built-in-recommendations.js.map +1 -0
- package/dist/registry/events.d.ts +26 -0
- package/dist/registry/events.d.ts.map +1 -0
- package/dist/registry/events.js +22 -0
- package/dist/registry/events.js.map +1 -0
- package/dist/registry/index.d.ts +159 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +12 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/registry/registry.d.ts +87 -0
- package/dist/registry/registry.d.ts.map +1 -0
- package/dist/registry/registry.js +294 -0
- package/dist/registry/registry.js.map +1 -0
- package/dist/registry/snapshot.d.ts +42 -0
- package/dist/registry/snapshot.d.ts.map +1 -0
- package/dist/registry/snapshot.js +71 -0
- package/dist/registry/snapshot.js.map +1 -0
- package/dist/registry/typegen.d.ts +48 -0
- package/dist/registry/typegen.d.ts.map +1 -0
- package/dist/registry/typegen.js +200 -0
- package/dist/registry/typegen.js.map +1 -0
- package/dist/registry/validator.d.ts +23 -0
- package/dist/registry/validator.d.ts.map +1 -0
- package/dist/registry/validator.js +50 -0
- package/dist/registry/validator.js.map +1 -0
- package/dist/reliability/breaker.d.ts +57 -0
- package/dist/reliability/breaker.d.ts.map +1 -0
- package/dist/reliability/breaker.js +130 -0
- package/dist/reliability/breaker.js.map +1 -0
- package/dist/reliability/errors.d.ts +78 -0
- package/dist/reliability/errors.d.ts.map +1 -0
- package/dist/reliability/errors.js +160 -0
- package/dist/reliability/errors.js.map +1 -0
- package/dist/reliability/gateway.d.ts +88 -0
- package/dist/reliability/gateway.d.ts.map +1 -0
- package/dist/reliability/gateway.js +180 -0
- package/dist/reliability/gateway.js.map +1 -0
- package/dist/reliability/index.d.ts +20 -0
- package/dist/reliability/index.d.ts.map +1 -0
- package/dist/reliability/index.js +16 -0
- package/dist/reliability/index.js.map +1 -0
- package/dist/reliability/profile.d.ts +49 -0
- package/dist/reliability/profile.d.ts.map +1 -0
- package/dist/reliability/profile.js +58 -0
- package/dist/reliability/profile.js.map +1 -0
- package/dist/reliability/retry.d.ts +39 -0
- package/dist/reliability/retry.d.ts.map +1 -0
- package/dist/reliability/retry.js +51 -0
- package/dist/reliability/retry.js.map +1 -0
- package/dist/reliability/timeout.d.ts +34 -0
- package/dist/reliability/timeout.d.ts.map +1 -0
- package/dist/reliability/timeout.js +53 -0
- package/dist/reliability/timeout.js.map +1 -0
- package/dist/runtime/executor.d.ts.map +1 -1
- package/dist/runtime/executor.js +122 -14
- package/dist/runtime/executor.js.map +1 -1
- package/dist/runtime/findtool/embed.d.ts +28 -0
- package/dist/runtime/findtool/embed.d.ts.map +1 -0
- package/dist/runtime/findtool/embed.js +85 -0
- package/dist/runtime/findtool/embed.js.map +1 -0
- package/dist/runtime/findtool/index.d.ts +52 -0
- package/dist/runtime/findtool/index.d.ts.map +1 -0
- package/dist/runtime/findtool/index.js +78 -0
- package/dist/runtime/findtool/index.js.map +1 -0
- package/dist/runtime/findtool/vector-index.d.ts +53 -0
- package/dist/runtime/findtool/vector-index.d.ts.map +1 -0
- package/dist/runtime/findtool/vector-index.js +71 -0
- package/dist/runtime/findtool/vector-index.js.map +1 -0
- package/dist/runtime/helpers/budget.d.ts +27 -0
- package/dist/runtime/helpers/budget.d.ts.map +1 -0
- package/dist/runtime/helpers/budget.js +103 -0
- package/dist/runtime/helpers/budget.js.map +1 -0
- package/dist/runtime/helpers/compact.d.ts +32 -0
- package/dist/runtime/helpers/compact.d.ts.map +1 -0
- package/dist/runtime/helpers/compact.js +93 -0
- package/dist/runtime/helpers/compact.js.map +1 -0
- package/dist/runtime/helpers/delta.d.ts +45 -0
- package/dist/runtime/helpers/delta.d.ts.map +1 -0
- package/dist/runtime/helpers/delta.js +116 -0
- package/dist/runtime/helpers/delta.js.map +1 -0
- package/dist/runtime/helpers/index.d.ts +16 -0
- package/dist/runtime/helpers/index.d.ts.map +1 -0
- package/dist/runtime/helpers/index.js +13 -0
- package/dist/runtime/helpers/index.js.map +1 -0
- package/dist/runtime/helpers/summarize.d.ts +24 -0
- package/dist/runtime/helpers/summarize.d.ts.map +1 -0
- package/dist/runtime/helpers/summarize.js +124 -0
- package/dist/runtime/helpers/summarize.js.map +1 -0
- package/dist/runtime/helpers/worker-preload.d.ts +25 -0
- package/dist/runtime/helpers/worker-preload.d.ts.map +1 -0
- package/dist/runtime/helpers/worker-preload.js +223 -0
- package/dist/runtime/helpers/worker-preload.js.map +1 -0
- package/dist/runtime/index.d.ts +1 -0
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +1 -0
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/pool/index.d.ts +11 -0
- package/dist/runtime/pool/index.d.ts.map +1 -0
- package/dist/runtime/pool/index.js +8 -0
- package/dist/runtime/pool/index.js.map +1 -0
- package/dist/runtime/pool/recycle.d.ts +44 -0
- package/dist/runtime/pool/recycle.d.ts.map +1 -0
- package/dist/runtime/pool/recycle.js +50 -0
- package/dist/runtime/pool/recycle.js.map +1 -0
- package/dist/runtime/pool/worker-pool.d.ts +77 -0
- package/dist/runtime/pool/worker-pool.d.ts.map +1 -0
- package/dist/runtime/pool/worker-pool.js +216 -0
- package/dist/runtime/pool/worker-pool.js.map +1 -0
- package/dist/runtime/pool/worker.d.ts +80 -0
- package/dist/runtime/pool/worker.d.ts.map +1 -0
- package/dist/runtime/pool/worker.js +324 -0
- package/dist/runtime/pool/worker.js.map +1 -0
- package/dist/server/mcp-server.d.ts +3 -0
- package/dist/server/mcp-server.d.ts.map +1 -1
- package/dist/server/mcp-server.js +457 -3
- package/dist/server/mcp-server.js.map +1 -1
- package/dist/server/passthrough-registrar.d.ts +123 -0
- package/dist/server/passthrough-registrar.d.ts.map +1 -0
- package/dist/server/passthrough-registrar.js +199 -0
- package/dist/server/passthrough-registrar.js.map +1 -0
- package/dist/skills/skills-engine.d.ts +9 -1
- package/dist/skills/skills-engine.d.ts.map +1 -1
- package/dist/skills/skills-engine.js +20 -3
- package/dist/skills/skills-engine.js.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/tokenize.d.ts +55 -0
- package/dist/utils/tokenize.d.ts.map +1 -0
- package/dist/utils/tokenize.js +205 -0
- package/dist/utils/tokenize.js.map +1 -0
- package/dist/version.d.ts +3 -3
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +3 -3
- package/dist/version.js.map +1 -1
- package/package.json +13 -3
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mcp.delta — Cross-call diff wrapper
|
|
3
|
+
*
|
|
4
|
+
* Wraps cache.delta from Phase 2 (when available) to return only the
|
|
5
|
+
* changed portions of a tool result relative to the previous call.
|
|
6
|
+
* This file designs the API surface so it works once Phase 2 cache
|
|
7
|
+
* lands; for now it performs a structural diff in-process.
|
|
8
|
+
*
|
|
9
|
+
* @module runtime/helpers/delta
|
|
10
|
+
*/
|
|
11
|
+
export interface DeltaResult<T> {
|
|
12
|
+
/** Whether data changed relative to the previous snapshot */
|
|
13
|
+
changed: boolean;
|
|
14
|
+
/** The delta payload (full object if no previous snapshot) */
|
|
15
|
+
delta: Partial<T> | T;
|
|
16
|
+
/** Keys that changed (for objects) or null for primitives/arrays */
|
|
17
|
+
changedKeys?: string[];
|
|
18
|
+
/** Number of items added (arrays only) */
|
|
19
|
+
added?: number;
|
|
20
|
+
/** Number of items removed (arrays only) */
|
|
21
|
+
removed?: number;
|
|
22
|
+
}
|
|
23
|
+
export interface CacheDeltaBridge {
|
|
24
|
+
delta<T>(server: string, tool: string, args: unknown, current: T): Promise<DeltaResult<T>>;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Register the Phase 2 cache bridge. Called during system initialisation
|
|
28
|
+
* once the cache layer is available.
|
|
29
|
+
*/
|
|
30
|
+
export declare function registerCacheBridge(bridge: CacheDeltaBridge): void;
|
|
31
|
+
/**
|
|
32
|
+
* Compute the delta for a tool result relative to the previous call.
|
|
33
|
+
* Delegates to Phase 2 cache.delta when registered; falls back to
|
|
34
|
+
* in-process structural differ.
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* const d = await delta('github', 'list_issues', { repo: 'foo' }, issues);
|
|
38
|
+
* if (d.changed) console.log('Changed keys:', d.changedKeys);
|
|
39
|
+
*/
|
|
40
|
+
export declare function delta<T>(server: string, tool: string, args: unknown, current: T): Promise<DeltaResult<T>>;
|
|
41
|
+
/**
|
|
42
|
+
* Clear all in-process snapshots (useful in tests).
|
|
43
|
+
*/
|
|
44
|
+
export declare function clearSnapshots(): void;
|
|
45
|
+
//# sourceMappingURL=delta.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delta.d.ts","sourceRoot":"","sources":["../../../src/runtime/helpers/delta.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,6DAA6D;IAC7D,OAAO,EAAE,OAAO,CAAC;IACjB,8DAA8D;IAC9D,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACtB,oEAAoE;IACpE,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAMD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,CAAC,EACL,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,CAAC,GACT,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;CAC5B;AAID;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAElE;AAsDD;;;;;;;;GAQG;AACH,wBAAsB,KAAK,CAAC,CAAC,EAC3B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,CAAC,GACT,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAkDzB;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAErC"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mcp.delta — Cross-call diff wrapper
|
|
3
|
+
*
|
|
4
|
+
* Wraps cache.delta from Phase 2 (when available) to return only the
|
|
5
|
+
* changed portions of a tool result relative to the previous call.
|
|
6
|
+
* This file designs the API surface so it works once Phase 2 cache
|
|
7
|
+
* lands; for now it performs a structural diff in-process.
|
|
8
|
+
*
|
|
9
|
+
* @module runtime/helpers/delta
|
|
10
|
+
*/
|
|
11
|
+
let _cacheBridge = null;
|
|
12
|
+
/**
|
|
13
|
+
* Register the Phase 2 cache bridge. Called during system initialisation
|
|
14
|
+
* once the cache layer is available.
|
|
15
|
+
*/
|
|
16
|
+
export function registerCacheBridge(bridge) {
|
|
17
|
+
_cacheBridge = bridge;
|
|
18
|
+
}
|
|
19
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
20
|
+
// In-process structural differ (fallback when Phase 2 is not present)
|
|
21
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
22
|
+
// In-memory snapshot store keyed by "server::tool::argsHash"
|
|
23
|
+
const _snapshots = new Map();
|
|
24
|
+
function hashArgs(args) {
|
|
25
|
+
try {
|
|
26
|
+
return JSON.stringify(args) ?? 'null';
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return String(args);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function snapshotKey(server, tool, args) {
|
|
33
|
+
return `${server}::${tool}::${hashArgs(args)}`;
|
|
34
|
+
}
|
|
35
|
+
function diffObjects(prev, curr) {
|
|
36
|
+
const delta = {};
|
|
37
|
+
const changedKeys = [];
|
|
38
|
+
const allKeys = new Set([...Object.keys(prev), ...Object.keys(curr)]);
|
|
39
|
+
for (const key of allKeys) {
|
|
40
|
+
const prevVal = JSON.stringify(prev[key]);
|
|
41
|
+
const currVal = JSON.stringify(curr[key]);
|
|
42
|
+
if (prevVal !== currVal) {
|
|
43
|
+
delta[key] = curr[key];
|
|
44
|
+
changedKeys.push(key);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return { delta, changedKeys };
|
|
48
|
+
}
|
|
49
|
+
function diffArrays(prev, curr) {
|
|
50
|
+
const prevLen = prev.length;
|
|
51
|
+
const currLen = curr.length;
|
|
52
|
+
const added = Math.max(0, currLen - prevLen);
|
|
53
|
+
const removed = Math.max(0, prevLen - currLen);
|
|
54
|
+
const changed = JSON.stringify(prev) !== JSON.stringify(curr);
|
|
55
|
+
return { changed, added, removed };
|
|
56
|
+
}
|
|
57
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
58
|
+
// Public API
|
|
59
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
60
|
+
/**
|
|
61
|
+
* Compute the delta for a tool result relative to the previous call.
|
|
62
|
+
* Delegates to Phase 2 cache.delta when registered; falls back to
|
|
63
|
+
* in-process structural differ.
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* const d = await delta('github', 'list_issues', { repo: 'foo' }, issues);
|
|
67
|
+
* if (d.changed) console.log('Changed keys:', d.changedKeys);
|
|
68
|
+
*/
|
|
69
|
+
export async function delta(server, tool, args, current) {
|
|
70
|
+
// Prefer Phase 2 cache bridge if available
|
|
71
|
+
if (_cacheBridge) {
|
|
72
|
+
return _cacheBridge.delta(server, tool, args, current);
|
|
73
|
+
}
|
|
74
|
+
// Fallback: in-process structural differ
|
|
75
|
+
const key = snapshotKey(server, tool, args);
|
|
76
|
+
const previous = _snapshots.get(key);
|
|
77
|
+
_snapshots.set(key, current);
|
|
78
|
+
if (previous === undefined) {
|
|
79
|
+
// No previous snapshot — return full result
|
|
80
|
+
return { changed: true, delta: current };
|
|
81
|
+
}
|
|
82
|
+
// Array diff
|
|
83
|
+
if (Array.isArray(current) && Array.isArray(previous)) {
|
|
84
|
+
const { changed, added, removed } = diffArrays(previous, current);
|
|
85
|
+
return {
|
|
86
|
+
changed,
|
|
87
|
+
delta: changed ? current : [],
|
|
88
|
+
added,
|
|
89
|
+
removed,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
// Object diff
|
|
93
|
+
if (typeof current === 'object' &&
|
|
94
|
+
current !== null &&
|
|
95
|
+
typeof previous === 'object' &&
|
|
96
|
+
previous !== null &&
|
|
97
|
+
!Array.isArray(current)) {
|
|
98
|
+
const { delta: objectDelta, changedKeys } = diffObjects(previous, current);
|
|
99
|
+
const changed = changedKeys.length > 0;
|
|
100
|
+
return {
|
|
101
|
+
changed,
|
|
102
|
+
delta: changed ? objectDelta : {},
|
|
103
|
+
changedKeys,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
// Primitive diff
|
|
107
|
+
const changed = JSON.stringify(previous) !== JSON.stringify(current);
|
|
108
|
+
return { changed, delta: changed ? current : undefined };
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Clear all in-process snapshots (useful in tests).
|
|
112
|
+
*/
|
|
113
|
+
export function clearSnapshots() {
|
|
114
|
+
_snapshots.clear();
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=delta.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delta.js","sourceRoot":"","sources":["../../../src/runtime/helpers/delta.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sandbox helper exports
|
|
3
|
+
*
|
|
4
|
+
* These are the zero-roundtrip helpers injected into the execute_code sandbox
|
|
5
|
+
* via the mcp global. All functions run in-process with no external calls.
|
|
6
|
+
*
|
|
7
|
+
* @module runtime/helpers
|
|
8
|
+
*/
|
|
9
|
+
export { compact } from './compact.js';
|
|
10
|
+
export type { CompactOptions } from './compact.js';
|
|
11
|
+
export { summarize } from './summarize.js';
|
|
12
|
+
export type { SummarizeOptions, SummarizeStyle } from './summarize.js';
|
|
13
|
+
export { delta, clearSnapshots, registerCacheBridge } from './delta.js';
|
|
14
|
+
export type { DeltaResult, CacheDeltaBridge } from './delta.js';
|
|
15
|
+
export { budget, BudgetExceededError, estimateTokens } from './budget.js';
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtime/helpers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEvE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACxE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEhE,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sandbox helper exports
|
|
3
|
+
*
|
|
4
|
+
* These are the zero-roundtrip helpers injected into the execute_code sandbox
|
|
5
|
+
* via the mcp global. All functions run in-process with no external calls.
|
|
6
|
+
*
|
|
7
|
+
* @module runtime/helpers
|
|
8
|
+
*/
|
|
9
|
+
export { compact } from './compact.js';
|
|
10
|
+
export { summarize } from './summarize.js';
|
|
11
|
+
export { delta, clearSnapshots, registerCacheBridge } from './delta.js';
|
|
12
|
+
export { budget, BudgetExceededError, estimateTokens } from './budget.js';
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtime/helpers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAGxE,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mcp.summarize — Heuristic summarization helper
|
|
3
|
+
*
|
|
4
|
+
* Converts arbitrary data into a compact string representation that fits
|
|
5
|
+
* within a token budget. Uses a simple heuristic: 1 token ≈ 4 characters.
|
|
6
|
+
* No LLM calls — fully in-process and zero-roundtrip.
|
|
7
|
+
*
|
|
8
|
+
* @module runtime/helpers/summarize
|
|
9
|
+
*/
|
|
10
|
+
export type SummarizeStyle = 'list' | 'paragraph' | 'json';
|
|
11
|
+
export interface SummarizeOptions {
|
|
12
|
+
/** Target token budget. Output will not exceed this. */
|
|
13
|
+
maxTokens: number;
|
|
14
|
+
/** Output format. Defaults to 'list'. */
|
|
15
|
+
style?: SummarizeStyle;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Summarize arbitrary data into a string that fits within `maxTokens`.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* const summary = summarize(issues, { maxTokens: 200, style: 'list' });
|
|
22
|
+
*/
|
|
23
|
+
export declare function summarize(data: unknown, options: SummarizeOptions): string;
|
|
24
|
+
//# sourceMappingURL=summarize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summarize.d.ts","sourceRoot":"","sources":["../../../src/runtime/helpers/summarize.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;AAE3D,MAAM,WAAW,gBAAgB;IAC/B,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,KAAK,CAAC,EAAE,cAAc,CAAC;CACxB;AAwGD;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAa1E"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mcp.summarize — Heuristic summarization helper
|
|
3
|
+
*
|
|
4
|
+
* Converts arbitrary data into a compact string representation that fits
|
|
5
|
+
* within a token budget. Uses a simple heuristic: 1 token ≈ 4 characters.
|
|
6
|
+
* No LLM calls — fully in-process and zero-roundtrip.
|
|
7
|
+
*
|
|
8
|
+
* @module runtime/helpers/summarize
|
|
9
|
+
*/
|
|
10
|
+
// Characters per token (conservative heuristic)
|
|
11
|
+
const CHARS_PER_TOKEN = 4;
|
|
12
|
+
function tokenBudgetToChars(maxTokens) {
|
|
13
|
+
return maxTokens * CHARS_PER_TOKEN;
|
|
14
|
+
}
|
|
15
|
+
function clip(text, maxChars) {
|
|
16
|
+
if (text.length <= maxChars)
|
|
17
|
+
return text;
|
|
18
|
+
return text.slice(0, Math.max(0, maxChars - 1)) + '…';
|
|
19
|
+
}
|
|
20
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
21
|
+
// Style renderers
|
|
22
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
23
|
+
function renderJson(data, maxChars) {
|
|
24
|
+
try {
|
|
25
|
+
const full = JSON.stringify(data, null, 2);
|
|
26
|
+
return clip(full, maxChars);
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return clip(String(data), maxChars);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function renderList(data, maxChars) {
|
|
33
|
+
const lines = [];
|
|
34
|
+
if (Array.isArray(data)) {
|
|
35
|
+
for (const item of data) {
|
|
36
|
+
if (typeof item === 'object' && item !== null) {
|
|
37
|
+
const pairs = Object.entries(item)
|
|
38
|
+
.slice(0, 4)
|
|
39
|
+
.map(([k, v]) => `${k}=${JSON.stringify(v)}`)
|
|
40
|
+
.join(', ');
|
|
41
|
+
lines.push(`• ${pairs}`);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
lines.push(`• ${String(item)}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
else if (typeof data === 'object' && data !== null) {
|
|
49
|
+
for (const [key, value] of Object.entries(data)) {
|
|
50
|
+
lines.push(`${key}: ${typeof value === 'object' ? JSON.stringify(value) : String(value)}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
lines.push(String(data));
|
|
55
|
+
}
|
|
56
|
+
// Build output within budget, line by line
|
|
57
|
+
const budget = maxChars;
|
|
58
|
+
let result = '';
|
|
59
|
+
for (const line of lines) {
|
|
60
|
+
const candidate = result ? result + '\n' + line : line;
|
|
61
|
+
if (candidate.length > budget) {
|
|
62
|
+
// Try to fit partial line
|
|
63
|
+
const remaining = budget - result.length - 1; // 1 for newline
|
|
64
|
+
if (remaining > 4) {
|
|
65
|
+
result += (result ? '\n' : '') + clip(line, remaining);
|
|
66
|
+
}
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
result = candidate;
|
|
70
|
+
}
|
|
71
|
+
return result || clip(String(data), budget);
|
|
72
|
+
}
|
|
73
|
+
function renderParagraph(data, maxChars) {
|
|
74
|
+
let text;
|
|
75
|
+
if (typeof data === 'string') {
|
|
76
|
+
text = data;
|
|
77
|
+
}
|
|
78
|
+
else if (Array.isArray(data)) {
|
|
79
|
+
// Summarise array as "N items: first, second, ..."
|
|
80
|
+
const count = data.length;
|
|
81
|
+
const previews = data
|
|
82
|
+
.slice(0, 3)
|
|
83
|
+
.map((x) => typeof x === 'object' && x !== null
|
|
84
|
+
? JSON.stringify(x).slice(0, 60)
|
|
85
|
+
: String(x).slice(0, 60))
|
|
86
|
+
.join(', ');
|
|
87
|
+
text = `${count} item${count !== 1 ? 's' : ''}: ${previews}${count > 3 ? '...' : ''}`;
|
|
88
|
+
}
|
|
89
|
+
else if (typeof data === 'object' && data !== null) {
|
|
90
|
+
const keys = Object.keys(data);
|
|
91
|
+
const previews = keys
|
|
92
|
+
.slice(0, 5)
|
|
93
|
+
.map((k) => `${k}: ${JSON.stringify(data[k]).slice(0, 30)}`)
|
|
94
|
+
.join('; ');
|
|
95
|
+
text = `Object with ${keys.length} field${keys.length !== 1 ? 's' : ''}: ${previews}`;
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
text = String(data);
|
|
99
|
+
}
|
|
100
|
+
return clip(text, maxChars);
|
|
101
|
+
}
|
|
102
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
103
|
+
// Public API
|
|
104
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
105
|
+
/**
|
|
106
|
+
* Summarize arbitrary data into a string that fits within `maxTokens`.
|
|
107
|
+
*
|
|
108
|
+
* @example
|
|
109
|
+
* const summary = summarize(issues, { maxTokens: 200, style: 'list' });
|
|
110
|
+
*/
|
|
111
|
+
export function summarize(data, options) {
|
|
112
|
+
const maxChars = tokenBudgetToChars(options.maxTokens);
|
|
113
|
+
const style = options.style ?? 'list';
|
|
114
|
+
switch (style) {
|
|
115
|
+
case 'json':
|
|
116
|
+
return renderJson(data, maxChars);
|
|
117
|
+
case 'paragraph':
|
|
118
|
+
return renderParagraph(data, maxChars);
|
|
119
|
+
case 'list':
|
|
120
|
+
default:
|
|
121
|
+
return renderList(data, maxChars);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=summarize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summarize.js","sourceRoot":"","sources":["../../../src/runtime/helpers/summarize.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Worker preload — inline sandbox helper source
|
|
3
|
+
*
|
|
4
|
+
* Generates the JavaScript source string that is written to a temp file
|
|
5
|
+
* and passed via WorkerOptions.preloadHelpers[] so the Deno worker evaluates
|
|
6
|
+
* it before any user code runs. Injects compact/summarize/delta/budget/findTool
|
|
7
|
+
* onto the mcp global.
|
|
8
|
+
*
|
|
9
|
+
* @module runtime/helpers/worker-preload
|
|
10
|
+
*/
|
|
11
|
+
export interface PreloadOptions {
|
|
12
|
+
/** Registry tools to seed findTool (server/tool/description triples) */
|
|
13
|
+
tools?: Array<{
|
|
14
|
+
server: string;
|
|
15
|
+
tool: string;
|
|
16
|
+
description: string;
|
|
17
|
+
}>;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Build a self-contained JS source string for the Deno worker preload.
|
|
21
|
+
* The string is plain JavaScript — no TypeScript-only syntax — because
|
|
22
|
+
* it runs inside the Deno subprocess at runtime.
|
|
23
|
+
*/
|
|
24
|
+
export declare function buildHelperPreloadSource(options?: PreloadOptions): string;
|
|
25
|
+
//# sourceMappingURL=worker-preload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-preload.d.ts","sourceRoot":"","sources":["../../../src/runtime/helpers/worker-preload.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,cAAc;IAC7B,wEAAwE;IACxE,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtE;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,GAAE,cAAmB,GAAG,MAAM,CAqN7E"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Worker preload — inline sandbox helper source
|
|
3
|
+
*
|
|
4
|
+
* Generates the JavaScript source string that is written to a temp file
|
|
5
|
+
* and passed via WorkerOptions.preloadHelpers[] so the Deno worker evaluates
|
|
6
|
+
* it before any user code runs. Injects compact/summarize/delta/budget/findTool
|
|
7
|
+
* onto the mcp global.
|
|
8
|
+
*
|
|
9
|
+
* @module runtime/helpers/worker-preload
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Build a self-contained JS source string for the Deno worker preload.
|
|
13
|
+
* The string is plain JavaScript — no TypeScript-only syntax — because
|
|
14
|
+
* it runs inside the Deno subprocess at runtime.
|
|
15
|
+
*/
|
|
16
|
+
export function buildHelperPreloadSource(options = {}) {
|
|
17
|
+
const toolsJson = JSON.stringify(options.tools ?? []);
|
|
18
|
+
const compactSrc = `
|
|
19
|
+
(function injectCompact() {
|
|
20
|
+
function buildSelectorTree(fields) {
|
|
21
|
+
var tree = {};
|
|
22
|
+
for (var i = 0; i < fields.length; i++) {
|
|
23
|
+
var parts = fields[i].split('.');
|
|
24
|
+
var node = tree;
|
|
25
|
+
for (var j = 0; j < parts.length; j++) {
|
|
26
|
+
if (j === parts.length - 1) { node[parts[j]] = true; }
|
|
27
|
+
else { if (typeof node[parts[j]] !== 'object') node[parts[j]] = {}; node = node[parts[j]]; }
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return tree;
|
|
31
|
+
}
|
|
32
|
+
function trimValue(value, selector, opts, depth) {
|
|
33
|
+
var maxDepth = opts.maxDepth !== undefined ? opts.maxDepth : Infinity;
|
|
34
|
+
if (depth > maxDepth) return (typeof value === 'object' && value !== null) ? '[truncated]' : value;
|
|
35
|
+
if (typeof value === 'string') {
|
|
36
|
+
var max = opts.maxStringLength;
|
|
37
|
+
return (max !== undefined && value.length > max) ? value.slice(0, max) + '…' : value;
|
|
38
|
+
}
|
|
39
|
+
if (Array.isArray(value)) {
|
|
40
|
+
var arr = opts.maxItems !== undefined ? value.slice(0, opts.maxItems) : value;
|
|
41
|
+
return arr.map(function(item) { return trimValue(item, selector, opts, depth + 1); });
|
|
42
|
+
}
|
|
43
|
+
if (typeof value === 'object' && value !== null) {
|
|
44
|
+
var result = {};
|
|
45
|
+
if (selector && Object.keys(selector).length > 0) {
|
|
46
|
+
var keys = Object.keys(selector);
|
|
47
|
+
for (var k = 0; k < keys.length; k++) {
|
|
48
|
+
var key = keys[k];
|
|
49
|
+
if (Object.prototype.hasOwnProperty.call(value, key)) {
|
|
50
|
+
var cs = selector[key];
|
|
51
|
+
result[key] = trimValue(value[key], cs === true ? null : cs, opts, depth + 1);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
} else {
|
|
55
|
+
var objKeys = Object.keys(value);
|
|
56
|
+
for (var ok = 0; ok < objKeys.length; ok++) result[objKeys[ok]] = trimValue(value[objKeys[ok]], null, opts, depth + 1);
|
|
57
|
+
}
|
|
58
|
+
return result;
|
|
59
|
+
}
|
|
60
|
+
return value;
|
|
61
|
+
}
|
|
62
|
+
globalThis.__mcp_compact = function compact(data, options) {
|
|
63
|
+
options = options || {};
|
|
64
|
+
var selector = (options.fields && options.fields.length > 0) ? buildSelectorTree(options.fields) : null;
|
|
65
|
+
return trimValue(data, selector, options, 0);
|
|
66
|
+
};
|
|
67
|
+
})();
|
|
68
|
+
`;
|
|
69
|
+
const summarizeSrc = `
|
|
70
|
+
(function injectSummarize() {
|
|
71
|
+
var CPT = 4;
|
|
72
|
+
function clip(text, max) { return text.length <= max ? text : text.slice(0, Math.max(0, max - 1)) + '…'; }
|
|
73
|
+
globalThis.__mcp_summarize = function summarize(data, options) {
|
|
74
|
+
var maxChars = options.maxTokens * CPT;
|
|
75
|
+
var style = options.style || 'list';
|
|
76
|
+
if (style === 'json') { try { return clip(JSON.stringify(data, null, 2), maxChars); } catch(e) { return clip(String(data), maxChars); } }
|
|
77
|
+
if (style === 'paragraph') {
|
|
78
|
+
var text;
|
|
79
|
+
if (typeof data === 'string') { text = data; }
|
|
80
|
+
else if (Array.isArray(data)) {
|
|
81
|
+
var prev = data.slice(0,3).map(function(x){return typeof x==='object'?JSON.stringify(x).slice(0,60):String(x).slice(0,60);}).join(', ');
|
|
82
|
+
text = data.length + ' item' + (data.length!==1?'s':'') + ': ' + prev + (data.length>3?'...':'');
|
|
83
|
+
} else if (typeof data === 'object' && data !== null) {
|
|
84
|
+
var kk = Object.keys(data);
|
|
85
|
+
text = 'Object with ' + kk.length + ' field' + (kk.length!==1?'s':'') + ': ' + kk.slice(0,5).map(function(k){return k+': '+JSON.stringify(data[k]).slice(0,30);}).join('; ');
|
|
86
|
+
} else { text = String(data); }
|
|
87
|
+
return clip(text, maxChars);
|
|
88
|
+
}
|
|
89
|
+
var lines = [];
|
|
90
|
+
if (Array.isArray(data)) {
|
|
91
|
+
for (var i = 0; i < data.length; i++) {
|
|
92
|
+
var item = data[i];
|
|
93
|
+
if (typeof item === 'object' && item !== null) {
|
|
94
|
+
lines.push('• ' + Object.entries(item).slice(0,4).map(function(e){return e[0]+'='+JSON.stringify(e[1]);}).join(', '));
|
|
95
|
+
} else { lines.push('• ' + String(item)); }
|
|
96
|
+
}
|
|
97
|
+
} else if (typeof data === 'object' && data !== null) {
|
|
98
|
+
Object.entries(data).forEach(function(e){lines.push(e[0]+': '+(typeof e[1]==='object'?JSON.stringify(e[1]):String(e[1])));});
|
|
99
|
+
} else { lines.push(String(data)); }
|
|
100
|
+
var result = '';
|
|
101
|
+
for (var li = 0; li < lines.length; li++) {
|
|
102
|
+
var candidate = result ? result + '\n' + lines[li] : lines[li];
|
|
103
|
+
if (candidate.length > maxChars) { var rem = maxChars - result.length - 1; if (rem > 4) result += (result?'\n':'')+clip(lines[li],rem); break; }
|
|
104
|
+
result = candidate;
|
|
105
|
+
}
|
|
106
|
+
return result || clip(String(data), maxChars);
|
|
107
|
+
};
|
|
108
|
+
})();
|
|
109
|
+
`;
|
|
110
|
+
const deltaSrc = `
|
|
111
|
+
(function injectDelta() {
|
|
112
|
+
var __snapshots = new Map();
|
|
113
|
+
globalThis.__mcp_delta = async function delta(server, tool, args, current) {
|
|
114
|
+
var key = server + '::' + tool + '::' + JSON.stringify(args);
|
|
115
|
+
var previous = __snapshots.get(key);
|
|
116
|
+
__snapshots.set(key, current);
|
|
117
|
+
if (previous === undefined) return { changed: true, delta: current };
|
|
118
|
+
if (Array.isArray(current) && Array.isArray(previous)) {
|
|
119
|
+
var changed = JSON.stringify(previous) !== JSON.stringify(current);
|
|
120
|
+
return { changed: changed, delta: changed ? current : [], added: Math.max(0,current.length-previous.length), removed: Math.max(0,previous.length-current.length) };
|
|
121
|
+
}
|
|
122
|
+
if (typeof current === 'object' && current !== null && !Array.isArray(current)) {
|
|
123
|
+
var d = {}; var ck = [];
|
|
124
|
+
var allKeys = new Set(Object.keys(previous||{}).concat(Object.keys(current)));
|
|
125
|
+
allKeys.forEach(function(k){ if(JSON.stringify((previous||{})[k])!==JSON.stringify(current[k])){ d[k]=current[k]; ck.push(k); } });
|
|
126
|
+
return { changed: ck.length > 0, delta: ck.length > 0 ? d : {}, changedKeys: ck };
|
|
127
|
+
}
|
|
128
|
+
var prim_changed = JSON.stringify(previous) !== JSON.stringify(current);
|
|
129
|
+
return { changed: prim_changed, delta: prim_changed ? current : undefined };
|
|
130
|
+
};
|
|
131
|
+
})();
|
|
132
|
+
`;
|
|
133
|
+
const budgetSrc = `
|
|
134
|
+
(function injectBudget() {
|
|
135
|
+
var CPT = 4;
|
|
136
|
+
function est(data) { try { return Math.ceil((JSON.stringify(data)||String(data)).length/CPT); } catch(e) { return Math.ceil(String(data).length/CPT); } }
|
|
137
|
+
function BudgetExceededError(estimated, max) {
|
|
138
|
+
this.name = 'BudgetExceededError';
|
|
139
|
+
this.message = 'Result exceeds token budget: '+estimated+' > '+max;
|
|
140
|
+
this.estimatedTokens = estimated;
|
|
141
|
+
this.maxTokens = max;
|
|
142
|
+
}
|
|
143
|
+
BudgetExceededError.prototype = Object.create(Error.prototype);
|
|
144
|
+
function tryTrim(data, maxTokens) {
|
|
145
|
+
if (Array.isArray(data)) {
|
|
146
|
+
var mxList = [100, 50, 20, 10, 5, 1];
|
|
147
|
+
for (var mi = 0; mi < mxList.length; mi++) {
|
|
148
|
+
var t = globalThis.__mcp_compact(data, {maxItems: mxList[mi], maxStringLength: 200});
|
|
149
|
+
if (est(t) <= maxTokens) return t;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
if (typeof data === 'object' && data !== null) {
|
|
153
|
+
var mdList = [5, 3, 2, 1];
|
|
154
|
+
for (var md = 0; md < mdList.length; md++) {
|
|
155
|
+
var td = globalThis.__mcp_compact(data, {maxDepth: mdList[md], maxItems: 20, maxStringLength: 200});
|
|
156
|
+
if (est(td) <= maxTokens) return td;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
var ls = globalThis.__mcp_summarize(data, {maxTokens: maxTokens, style: 'list'});
|
|
160
|
+
if (est(ls) <= maxTokens) return ls;
|
|
161
|
+
var ps = globalThis.__mcp_summarize(data, {maxTokens: maxTokens, style: 'paragraph'});
|
|
162
|
+
if (est(ps) <= maxTokens) return ps;
|
|
163
|
+
var raw = typeof data === 'string' ? data : JSON.stringify(data) || String(data);
|
|
164
|
+
var cl = raw.slice(0, maxTokens * CPT - 1) + '…';
|
|
165
|
+
if (est(cl) <= maxTokens) return cl;
|
|
166
|
+
throw new BudgetExceededError(est(data), maxTokens);
|
|
167
|
+
}
|
|
168
|
+
globalThis.__mcp_budget = async function budget(maxTokens, fn) {
|
|
169
|
+
var result = await fn();
|
|
170
|
+
return est(result) <= maxTokens ? result : tryTrim(result, maxTokens);
|
|
171
|
+
};
|
|
172
|
+
globalThis.BudgetExceededError = BudgetExceededError;
|
|
173
|
+
})();
|
|
174
|
+
`;
|
|
175
|
+
const findToolSrc = `
|
|
176
|
+
(function injectFindTool() {
|
|
177
|
+
var EMBED_DIM = 256;
|
|
178
|
+
function tokenise(text) { return text.toLowerCase().replace(/[^a-z0-9_.-]/g,' ').split(/\\s+/).filter(Boolean); }
|
|
179
|
+
function hashBucket(s) { var h=5381; for(var i=0;i<s.length;i++){h=((h<<5)+h)^s.charCodeAt(i);h=h>>>0;} return h%EMBED_DIM; }
|
|
180
|
+
function embed(text) {
|
|
181
|
+
var vec = new Float32Array(EMBED_DIM);
|
|
182
|
+
var tokens = tokenise(text);
|
|
183
|
+
if (!tokens.length) return vec;
|
|
184
|
+
for (var i=0;i<tokens.length;i++) vec[hashBucket(tokens[i])]+=1;
|
|
185
|
+
for (var j=0;j<tokens.length-1;j++) vec[hashBucket(tokens[j]+'_'+tokens[j+1])]+=0.5;
|
|
186
|
+
var norm=0; for(var k=0;k<EMBED_DIM;k++) norm+=vec[k]*vec[k]; norm=Math.sqrt(norm);
|
|
187
|
+
if(norm>0) for(var n=0;n<EMBED_DIM;n++) vec[n]/=norm;
|
|
188
|
+
return vec;
|
|
189
|
+
}
|
|
190
|
+
function cosine(a,b) { var d=0; for(var i=0;i<a.length;i++) d+=a[i]*b[i]; return d; }
|
|
191
|
+
var __toolEntries = ${toolsJson}.map(function(e){return{server:e.server,tool:e.tool,description:e.description,vector:embed(e.tool+'\\n'+e.description)};});
|
|
192
|
+
globalThis.__mcp_findTool = async function findTool(query, options) {
|
|
193
|
+
options = options || {};
|
|
194
|
+
var qv = embed(query);
|
|
195
|
+
var topK = options.topK || 5;
|
|
196
|
+
var filter = options.serverFilter;
|
|
197
|
+
var candidates = filter ? __toolEntries.filter(function(e){return filter.includes(e.server);}) : __toolEntries;
|
|
198
|
+
var scored = candidates.map(function(e){return{server:e.server,tool:e.tool,description:e.description,score:cosine(qv,e.vector)};});
|
|
199
|
+
scored.sort(function(a,b){return b.score-a.score;});
|
|
200
|
+
return scored.slice(0,topK);
|
|
201
|
+
};
|
|
202
|
+
})();
|
|
203
|
+
`;
|
|
204
|
+
const extendMcpSrc = `
|
|
205
|
+
if (typeof mcp !== 'undefined') {
|
|
206
|
+
Object.defineProperty(mcp, 'compact', { value: globalThis.__mcp_compact, writable: false, configurable: true });
|
|
207
|
+
Object.defineProperty(mcp, 'summarize', { value: globalThis.__mcp_summarize, writable: false, configurable: true });
|
|
208
|
+
Object.defineProperty(mcp, 'delta', { value: globalThis.__mcp_delta, writable: false, configurable: true });
|
|
209
|
+
Object.defineProperty(mcp, 'budget', { value: globalThis.__mcp_budget, writable: false, configurable: true });
|
|
210
|
+
Object.defineProperty(mcp, 'findTool', { value: globalThis.__mcp_findTool, writable: false, configurable: true });
|
|
211
|
+
}
|
|
212
|
+
`;
|
|
213
|
+
return [
|
|
214
|
+
'// Phase 5 Sandbox Helpers — auto-injected into Deno worker via preloadHelpers[]',
|
|
215
|
+
compactSrc,
|
|
216
|
+
summarizeSrc,
|
|
217
|
+
deltaSrc,
|
|
218
|
+
budgetSrc,
|
|
219
|
+
findToolSrc,
|
|
220
|
+
extendMcpSrc,
|
|
221
|
+
].join('\n');
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=worker-preload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-preload.js","sourceRoot":"","sources":["../../../src/runtime/helpers/worker-preload.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,UAA0B,EAAE;IACnE,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAEtD,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkDpB,CAAC;IAEA,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwCtB,CAAC;IAEA,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;CAsBlB,CAAC;IAEA,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyCnB,CAAC;IAEA,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;wBAgBE,SAAS;;;;;;;;;;;;CAYhC,CAAC;IAEA,MAAM,YAAY,GAAG;;;;;;;;CAQtB,CAAC;IAEA,OAAO;QACL,kFAAkF;QAClF,UAAU;QACV,YAAY;QACZ,QAAQ;QACR,SAAS;QACT,WAAW;QACX,YAAY;KACb,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
|
package/dist/runtime/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC"}
|
package/dist/runtime/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC"}
|