@darkiceinteractive/mcp-conductor 1.1.0 → 3.0.0-beta.1
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 +65 -1
- package/dist/bridge/http-server.d.ts.map +1 -1
- package/dist/bridge/http-server.js +192 -7
- 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/bridge/session-registry.d.ts +64 -0
- package/dist/bridge/session-registry.d.ts.map +1 -0
- package/dist/bridge/session-registry.js +124 -0
- package/dist/bridge/session-registry.js.map +1 -0
- package/dist/cache/cache.d.ts +43 -0
- package/dist/cache/cache.d.ts.map +1 -0
- package/dist/cache/cache.js +167 -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 +10 -0
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +14 -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 +97 -0
- package/dist/daemon/client.d.ts.map +1 -0
- package/dist/daemon/client.js +279 -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 +351 -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 +19 -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 +12 -0
- package/dist/runtime/executor.d.ts.map +1 -1
- package/dist/runtime/executor.js +148 -16
- 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 +6 -0
- package/dist/server/mcp-server.d.ts.map +1 -1
- package/dist/server/mcp-server.js +610 -45
- package/dist/server/mcp-server.js.map +1 -1
- package/dist/server/passthrough-registrar.d.ts +73 -0
- package/dist/server/passthrough-registrar.d.ts.map +1 -0
- package/dist/server/passthrough-registrar.js +110 -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 +3 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +3 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +5 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/orphan-watch.d.ts +34 -0
- package/dist/utils/orphan-watch.d.ts.map +1 -0
- package/dist/utils/orphan-watch.js +54 -0
- package/dist/utils/orphan-watch.js.map +1 -0
- package/dist/utils/redact.d.ts +15 -0
- package/dist/utils/redact.d.ts.map +1 -0
- package/dist/utils/redact.js +48 -0
- package/dist/utils/redact.js.map +1 -0
- 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,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mcp.compact — Field selection and data trimming helper
|
|
3
|
+
*
|
|
4
|
+
* Zero-roundtrip sandbox helper. Reduces large data objects to only the
|
|
5
|
+
* fields the caller cares about, truncates arrays, clips strings, and
|
|
6
|
+
* limits nesting depth. All operations are synchronous and in-process.
|
|
7
|
+
*
|
|
8
|
+
* @module runtime/helpers/compact
|
|
9
|
+
*/
|
|
10
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
11
|
+
// Internal helpers
|
|
12
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
13
|
+
/**
|
|
14
|
+
* Parse a dot-path like "labels.name" into a nested selector tree.
|
|
15
|
+
* { labels: { name: true }, id: true }
|
|
16
|
+
*/
|
|
17
|
+
function buildSelectorTree(fields) {
|
|
18
|
+
const tree = {};
|
|
19
|
+
for (const field of fields) {
|
|
20
|
+
const parts = field.split('.');
|
|
21
|
+
let node = tree;
|
|
22
|
+
for (let i = 0; i < parts.length; i++) {
|
|
23
|
+
const part = parts[i] ?? '';
|
|
24
|
+
if (i === parts.length - 1) {
|
|
25
|
+
node[part] = true;
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
if (typeof node[part] !== 'object' || node[part] === null) {
|
|
29
|
+
node[part] = {};
|
|
30
|
+
}
|
|
31
|
+
node = node[part];
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return tree;
|
|
36
|
+
}
|
|
37
|
+
function trimValue(value, selector, opts, depth) {
|
|
38
|
+
const maxDepth = opts.maxDepth ?? Infinity;
|
|
39
|
+
if (depth > maxDepth) {
|
|
40
|
+
return typeof value === 'object' && value !== null ? '[truncated]' : value;
|
|
41
|
+
}
|
|
42
|
+
if (typeof value === 'string') {
|
|
43
|
+
const max = opts.maxStringLength;
|
|
44
|
+
if (max !== undefined && value.length > max) {
|
|
45
|
+
return value.slice(0, max) + '…';
|
|
46
|
+
}
|
|
47
|
+
return value;
|
|
48
|
+
}
|
|
49
|
+
if (Array.isArray(value)) {
|
|
50
|
+
const maxItems = opts.maxItems;
|
|
51
|
+
const arr = maxItems !== undefined ? value.slice(0, maxItems) : value;
|
|
52
|
+
return arr.map((item) => trimValue(item, selector, opts, depth + 1));
|
|
53
|
+
}
|
|
54
|
+
if (typeof value === 'object' && value !== null) {
|
|
55
|
+
const obj = value;
|
|
56
|
+
const result = {};
|
|
57
|
+
if (selector && Object.keys(selector).length > 0) {
|
|
58
|
+
// Only keep selected keys
|
|
59
|
+
for (const key of Object.keys(selector)) {
|
|
60
|
+
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
61
|
+
const childSelector = selector[key];
|
|
62
|
+
const nextSelector = childSelector === true ? null : childSelector;
|
|
63
|
+
result[key] = trimValue(obj[key], nextSelector, opts, depth + 1);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
// No field filter — apply structural limits only
|
|
69
|
+
for (const key of Object.keys(obj)) {
|
|
70
|
+
result[key] = trimValue(obj[key], null, opts, depth + 1);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return result;
|
|
74
|
+
}
|
|
75
|
+
return value;
|
|
76
|
+
}
|
|
77
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
78
|
+
// Public API
|
|
79
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
80
|
+
/**
|
|
81
|
+
* Compact a data value by selecting fields, truncating arrays, clipping
|
|
82
|
+
* strings, and limiting nesting depth.
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* const lean = compact(issues, { fields: ['id', 'title', 'labels.name'], maxItems: 20 });
|
|
86
|
+
*/
|
|
87
|
+
export function compact(data, options = {}) {
|
|
88
|
+
const selector = options.fields && options.fields.length > 0
|
|
89
|
+
? buildSelectorTree(options.fields)
|
|
90
|
+
: null;
|
|
91
|
+
return trimValue(data, selector, options, 0);
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=compact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compact.js","sourceRoot":"","sources":["../../../src/runtime/helpers/compact.ts"],"names":[],"mappings":"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"}
|
|
@@ -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"}
|