@animalabs/agent-framework 0.19.0 → 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -0
- package/dist/src/agent.d.ts +22 -0
- package/dist/src/agent.d.ts.map +1 -1
- package/dist/src/agent.js +128 -10
- package/dist/src/agent.js.map +1 -1
- package/dist/src/api/types.d.ts +1 -1
- package/dist/src/api/types.d.ts.map +1 -1
- package/dist/src/code-execution/py-runner.d.ts +10 -1
- package/dist/src/code-execution/py-runner.d.ts.map +1 -1
- package/dist/src/code-execution/py-runner.js +27 -2
- package/dist/src/code-execution/py-runner.js.map +1 -1
- package/dist/src/code-execution/tool-definition.d.ts +21 -0
- package/dist/src/code-execution/tool-definition.d.ts.map +1 -1
- package/dist/src/code-execution/tool-definition.js +34 -0
- package/dist/src/code-execution/tool-definition.js.map +1 -1
- package/dist/src/framework.d.ts +153 -2
- package/dist/src/framework.d.ts.map +1 -1
- package/dist/src/framework.js +1169 -76
- package/dist/src/framework.js.map +1 -1
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +4 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcpl/capability-grant.d.ts +1 -1
- package/dist/src/mcpl/capability-grant.d.ts.map +1 -1
- package/dist/src/mcpl/capability-grant.js +49 -5
- package/dist/src/mcpl/capability-grant.js.map +1 -1
- package/dist/src/mcpl/channel-registry.d.ts +59 -2
- package/dist/src/mcpl/channel-registry.d.ts.map +1 -1
- package/dist/src/mcpl/channel-registry.js +106 -6
- package/dist/src/mcpl/channel-registry.js.map +1 -1
- package/dist/src/mcpl/index.d.ts +3 -0
- package/dist/src/mcpl/index.d.ts.map +1 -1
- package/dist/src/mcpl/index.js +3 -0
- package/dist/src/mcpl/index.js.map +1 -1
- package/dist/src/mcpl/push-coalescer.d.ts +318 -0
- package/dist/src/mcpl/push-coalescer.d.ts.map +1 -0
- package/dist/src/mcpl/push-coalescer.js +709 -0
- package/dist/src/mcpl/push-coalescer.js.map +1 -0
- package/dist/src/mcpl/push-handler.d.ts +7 -2
- package/dist/src/mcpl/push-handler.d.ts.map +1 -1
- package/dist/src/mcpl/push-handler.js +43 -4
- package/dist/src/mcpl/push-handler.js.map +1 -1
- package/dist/src/mcpl/server-connection.d.ts +18 -0
- package/dist/src/mcpl/server-connection.d.ts.map +1 -1
- package/dist/src/mcpl/server-connection.js +44 -1
- package/dist/src/mcpl/server-connection.js.map +1 -1
- package/dist/src/mcpl/tool-classes.d.ts +71 -0
- package/dist/src/mcpl/tool-classes.d.ts.map +1 -0
- package/dist/src/mcpl/tool-classes.js +170 -0
- package/dist/src/mcpl/tool-classes.js.map +1 -0
- package/dist/src/mcpl/tool-glob.d.ts +16 -0
- package/dist/src/mcpl/tool-glob.d.ts.map +1 -0
- package/dist/src/mcpl/tool-glob.js +41 -0
- package/dist/src/mcpl/tool-glob.js.map +1 -0
- package/dist/src/mcpl/tool-lifecycle.d.ts +253 -0
- package/dist/src/mcpl/tool-lifecycle.d.ts.map +1 -0
- package/dist/src/mcpl/tool-lifecycle.js +592 -0
- package/dist/src/mcpl/tool-lifecycle.js.map +1 -0
- package/dist/src/mcpl/transport.d.ts +12 -0
- package/dist/src/mcpl/transport.d.ts.map +1 -1
- package/dist/src/mcpl/transport.js +33 -1
- package/dist/src/mcpl/transport.js.map +1 -1
- package/dist/src/mcpl/types.d.ts +66 -1
- package/dist/src/mcpl/types.d.ts.map +1 -1
- package/dist/src/mcpl/types.js +6 -0
- package/dist/src/mcpl/types.js.map +1 -1
- package/dist/src/modules/discord/index.js +1 -1
- package/dist/src/modules/discord/index.js.map +1 -1
- package/dist/src/modules/history/index.d.ts +85 -0
- package/dist/src/modules/history/index.d.ts.map +1 -1
- package/dist/src/modules/history/index.js +1019 -24
- package/dist/src/modules/history/index.js.map +1 -1
- package/dist/src/modules/history/semantic.d.ts +202 -0
- package/dist/src/modules/history/semantic.d.ts.map +1 -0
- package/dist/src/modules/history/semantic.js +418 -0
- package/dist/src/modules/history/semantic.js.map +1 -0
- package/dist/src/modules/index.d.ts +2 -1
- package/dist/src/modules/index.d.ts.map +1 -1
- package/dist/src/modules/index.js.map +1 -1
- package/dist/src/tool-result-guard.d.ts +82 -0
- package/dist/src/tool-result-guard.d.ts.map +1 -0
- package/dist/src/tool-result-guard.js +306 -0
- package/dist/src/tool-result-guard.js.map +1 -0
- package/dist/src/types/agent.d.ts +14 -0
- package/dist/src/types/agent.d.ts.map +1 -1
- package/dist/src/types/framework.d.ts +21 -0
- package/dist/src/types/framework.d.ts.map +1 -1
- package/dist/src/types/trace.d.ts +17 -0
- package/dist/src/types/trace.d.ts.map +1 -1
- package/dist/test/channel-registry-routing.test.js +59 -0
- package/dist/test/channel-registry-routing.test.js.map +1 -1
- package/dist/test/code-execution.test.js +139 -0
- package/dist/test/code-execution.test.js.map +1 -1
- package/dist/test/helpers/coalescing-fixture.d.ts +72 -0
- package/dist/test/helpers/coalescing-fixture.d.ts.map +1 -0
- package/dist/test/helpers/coalescing-fixture.js +145 -0
- package/dist/test/helpers/coalescing-fixture.js.map +1 -0
- package/dist/test/helpers/coalescing-kill-child.d.ts +2 -0
- package/dist/test/helpers/coalescing-kill-child.d.ts.map +1 -0
- package/dist/test/helpers/coalescing-kill-child.js +24 -0
- package/dist/test/helpers/coalescing-kill-child.js.map +1 -0
- package/dist/test/history-module-realstore.test.d.ts +2 -0
- package/dist/test/history-module-realstore.test.d.ts.map +1 -0
- package/dist/test/history-module-realstore.test.js +363 -0
- package/dist/test/history-module-realstore.test.js.map +1 -0
- package/dist/test/history-module-semantic.test.d.ts +2 -0
- package/dist/test/history-module-semantic.test.d.ts.map +1 -0
- package/dist/test/history-module-semantic.test.js +213 -0
- package/dist/test/history-module-semantic.test.js.map +1 -0
- package/dist/test/history-module-ux.test.d.ts +2 -0
- package/dist/test/history-module-ux.test.d.ts.map +1 -0
- package/dist/test/history-module-ux.test.js +304 -0
- package/dist/test/history-module-ux.test.js.map +1 -0
- package/dist/test/history-module.test.js +25 -1
- package/dist/test/history-module.test.js.map +1 -1
- package/dist/test/history-semantic-review-findings.test.d.ts +2 -0
- package/dist/test/history-semantic-review-findings.test.d.ts.map +1 -0
- package/dist/test/history-semantic-review-findings.test.js +338 -0
- package/dist/test/history-semantic-review-findings.test.js.map +1 -0
- package/dist/test/history-semantic-sync-converges.test.d.ts +2 -0
- package/dist/test/history-semantic-sync-converges.test.d.ts.map +1 -0
- package/dist/test/history-semantic-sync-converges.test.js +109 -0
- package/dist/test/history-semantic-sync-converges.test.js.map +1 -0
- package/dist/test/mcpl-capability-grant.test.js +3 -1
- package/dist/test/mcpl-capability-grant.test.js.map +1 -1
- package/dist/test/mcpl-child-env.test.d.ts +2 -0
- package/dist/test/mcpl-child-env.test.d.ts.map +1 -0
- package/dist/test/mcpl-child-env.test.js +69 -0
- package/dist/test/mcpl-child-env.test.js.map +1 -0
- package/dist/test/mcpl-coalescing.test.d.ts +2 -0
- package/dist/test/mcpl-coalescing.test.d.ts.map +1 -0
- package/dist/test/mcpl-coalescing.test.js +1050 -0
- package/dist/test/mcpl-coalescing.test.js.map +1 -0
- package/dist/test/mcpl-list-status.test.js +4 -0
- package/dist/test/mcpl-list-status.test.js.map +1 -1
- package/dist/test/mcpl-tool-class-listing.test.d.ts +2 -0
- package/dist/test/mcpl-tool-class-listing.test.d.ts.map +1 -0
- package/dist/test/mcpl-tool-class-listing.test.js +147 -0
- package/dist/test/mcpl-tool-class-listing.test.js.map +1 -0
- package/dist/test/mcpl-tool-classes.test.d.ts +7 -0
- package/dist/test/mcpl-tool-classes.test.d.ts.map +1 -0
- package/dist/test/mcpl-tool-classes.test.js +80 -0
- package/dist/test/mcpl-tool-classes.test.js.map +1 -0
- package/dist/test/mcpl-tool-lifecycle-e2e.test.d.ts +2 -0
- package/dist/test/mcpl-tool-lifecycle-e2e.test.d.ts.map +1 -0
- package/dist/test/mcpl-tool-lifecycle-e2e.test.js +237 -0
- package/dist/test/mcpl-tool-lifecycle-e2e.test.js.map +1 -0
- package/dist/test/mcpl-tool-lifecycle-emitter.test.d.ts +11 -0
- package/dist/test/mcpl-tool-lifecycle-emitter.test.d.ts.map +1 -0
- package/dist/test/mcpl-tool-lifecycle-emitter.test.js +307 -0
- package/dist/test/mcpl-tool-lifecycle-emitter.test.js.map +1 -0
- package/dist/test/mcpl-tool-lifecycle.test.d.ts +11 -0
- package/dist/test/mcpl-tool-lifecycle.test.d.ts.map +1 -0
- package/dist/test/mcpl-tool-lifecycle.test.js +270 -0
- package/dist/test/mcpl-tool-lifecycle.test.js.map +1 -0
- package/dist/test/silent-heartbeat.test.d.ts +2 -0
- package/dist/test/silent-heartbeat.test.d.ts.map +1 -0
- package/dist/test/silent-heartbeat.test.js +154 -0
- package/dist/test/silent-heartbeat.test.js.map +1 -0
- package/dist/test/tool-result-guard.test.d.ts +2 -0
- package/dist/test/tool-result-guard.test.d.ts.map +1 -0
- package/dist/test/tool-result-guard.test.js +1081 -0
- package/dist/test/tool-result-guard.test.js.map +1 -0
- package/dist/test/trunk-channel-routing.test.js +67 -0
- package/dist/test/trunk-channel-routing.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/src/agent.ts +128 -10
- package/src/api/types.ts +2 -0
- package/src/code-execution/py-runner.ts +34 -2
- package/src/code-execution/tool-definition.ts +46 -0
- package/src/framework.ts +1201 -80
- package/src/index.ts +13 -0
- package/src/mcpl/capability-grant.ts +54 -6
- package/src/mcpl/channel-registry.ts +115 -7
- package/src/mcpl/index.ts +29 -0
- package/src/mcpl/push-coalescer.ts +821 -0
- package/src/mcpl/push-handler.ts +40 -4
- package/src/mcpl/server-connection.ts +48 -2
- package/src/mcpl/tool-classes.ts +188 -0
- package/src/mcpl/tool-glob.ts +36 -0
- package/src/mcpl/tool-lifecycle.ts +730 -0
- package/src/mcpl/transport.ts +35 -1
- package/src/mcpl/types.ts +69 -1
- package/src/modules/discord/index.ts +1 -1
- package/src/modules/history/index.ts +1089 -24
- package/src/modules/history/semantic.ts +473 -0
- package/src/modules/index.ts +2 -1
- package/src/tool-result-guard.ts +318 -0
- package/src/types/agent.ts +15 -0
- package/src/types/framework.ts +23 -0
- package/src/types/trace.ts +17 -0
|
@@ -0,0 +1,592 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool lifecycle (MCPL RFC-007): `tools/lifecycle` notifications about the
|
|
3
|
+
* agent's tool calls, and the `tools/observe` filter a server sets on them.
|
|
4
|
+
*
|
|
5
|
+
* Authority is the grant plus host narrowing; a server's filter is interest
|
|
6
|
+
* and only ever narrows. Per call and connection the host decides, in order
|
|
7
|
+
* (RFC-007 §6.4):
|
|
8
|
+
*
|
|
9
|
+
* 1. reported at all? grant `toolLifecycle.observe` + its narrowing
|
|
10
|
+
* 2. reported to this server? filter: first matching rule and its `report`
|
|
11
|
+
* (no filter → yes)
|
|
12
|
+
* 3. arguments requested? that rule's `input` (no filter → NO)
|
|
13
|
+
* 4. arguments allowed? grant `toolLifecycle.inputs` + its narrowing,
|
|
14
|
+
* and never for `comms` or unclassed tools
|
|
15
|
+
* 5. which fields, how large? the rule's field selection, then the bound
|
|
16
|
+
*
|
|
17
|
+
* Tool RESULTS are never carried — no field for them exists here.
|
|
18
|
+
*
|
|
19
|
+
* Delivery is best-effort like `inference/lifecycle` (SPEC §10.5): one
|
|
20
|
+
* terminal is attempted per opened call, to exactly the connections the
|
|
21
|
+
* opening went to, unless their grant or narrowing no longer covers the call
|
|
22
|
+
* (RFC-007 §4.5). A filter change never suppresses a terminal (§6.5).
|
|
23
|
+
*/
|
|
24
|
+
import { CapabilityGrant } from './capability-grant.js';
|
|
25
|
+
import { globMatch } from './tool-glob.js';
|
|
26
|
+
import { DEFAULT_INPUT_CLASSES, isToolClass } from './tool-classes.js';
|
|
27
|
+
export const TOOL_LIFECYCLE_OBSERVE = 'toolLifecycle.observe';
|
|
28
|
+
export const TOOL_LIFECYCLE_INPUTS = 'toolLifecycle.inputs';
|
|
29
|
+
export const DEFAULT_MAX_INPUT_BYTES = 16 * 1024;
|
|
30
|
+
/** Accepted sizes for a `tools/observe` request (RFC-007 §6.6 asks hosts to
|
|
31
|
+
* accept at least 64 rules, 64 paths per rule, 256-character strings). */
|
|
32
|
+
export const TOOL_OBSERVE_LIMITS = {
|
|
33
|
+
rules: 256,
|
|
34
|
+
pathsPerRule: 256,
|
|
35
|
+
stringLength: 256,
|
|
36
|
+
};
|
|
37
|
+
const MATCH_KEYS = new Set(['tool', 'serverTool', 'serverId', 'conversationId', 'class']);
|
|
38
|
+
const RULE_KEYS = new Set(['match', 'report', 'input']);
|
|
39
|
+
function isPlainObject(value) {
|
|
40
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Validate `tools/observe` params. `rules` absent or null clears the filter
|
|
44
|
+
* (`{ok, rules: null}`); `[]` is a valid filter that reports nothing. Unknown
|
|
45
|
+
* members are REJECTED, not ignored: ignoring an unknown `match` member would
|
|
46
|
+
* make a rule match more than its author wrote.
|
|
47
|
+
*/
|
|
48
|
+
export function parseToolObserveParams(params) {
|
|
49
|
+
if (params === undefined || params === null)
|
|
50
|
+
return { ok: true, rules: null };
|
|
51
|
+
if (!isPlainObject(params))
|
|
52
|
+
return { ok: false, message: 'tools/observe params must be an object' };
|
|
53
|
+
// Unknown members are rejected here too (MCP's own `_meta` excepted): a
|
|
54
|
+
// misspelled `rules` must not read as "no rules" and silently clear a
|
|
55
|
+
// restrictive filter.
|
|
56
|
+
for (const key of Object.keys(params)) {
|
|
57
|
+
if (key !== 'rules' && key !== '_meta') {
|
|
58
|
+
return { ok: false, message: `tools/observe: unknown params member "${key}"` };
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
const raw = params.rules;
|
|
62
|
+
if (raw === undefined || raw === null)
|
|
63
|
+
return { ok: true, rules: null };
|
|
64
|
+
if (!Array.isArray(raw))
|
|
65
|
+
return { ok: false, message: 'tools/observe: rules must be an array or null' };
|
|
66
|
+
if (raw.length > TOOL_OBSERVE_LIMITS.rules) {
|
|
67
|
+
return { ok: false, message: `tools/observe: more than ${TOOL_OBSERVE_LIMITS.rules} rules`, data: { limit: 'rules' } };
|
|
68
|
+
}
|
|
69
|
+
const rules = [];
|
|
70
|
+
for (let i = 0; i < raw.length; i++) {
|
|
71
|
+
const at = `rules[${i}]`;
|
|
72
|
+
const rule = raw[i];
|
|
73
|
+
if (!isPlainObject(rule))
|
|
74
|
+
return { ok: false, message: `tools/observe: ${at} must be an object` };
|
|
75
|
+
for (const key of Object.keys(rule)) {
|
|
76
|
+
if (!RULE_KEYS.has(key))
|
|
77
|
+
return { ok: false, message: `tools/observe: ${at} has unknown member "${key}"` };
|
|
78
|
+
}
|
|
79
|
+
if (!isPlainObject(rule.match))
|
|
80
|
+
return { ok: false, message: `tools/observe: ${at}.match must be an object` };
|
|
81
|
+
const match = {};
|
|
82
|
+
for (const [key, value] of Object.entries(rule.match)) {
|
|
83
|
+
if (!MATCH_KEYS.has(key)) {
|
|
84
|
+
return { ok: false, message: `tools/observe: ${at}.match has unknown member "${key}"` };
|
|
85
|
+
}
|
|
86
|
+
if (key === 'class') {
|
|
87
|
+
if (!isToolClass(value))
|
|
88
|
+
return { ok: false, message: `tools/observe: ${at}.match.class is not a ToolClass` };
|
|
89
|
+
match.class = value;
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
if (typeof value !== 'string')
|
|
93
|
+
return { ok: false, message: `tools/observe: ${at}.match.${key} must be a string` };
|
|
94
|
+
if (value.length > TOOL_OBSERVE_LIMITS.stringLength) {
|
|
95
|
+
return { ok: false, message: `tools/observe: ${at}.match.${key} is too long`, data: { limit: 'stringLength' } };
|
|
96
|
+
}
|
|
97
|
+
match[key] = value;
|
|
98
|
+
}
|
|
99
|
+
if (rule.report !== undefined && typeof rule.report !== 'boolean') {
|
|
100
|
+
return { ok: false, message: `tools/observe: ${at}.report must be a boolean` };
|
|
101
|
+
}
|
|
102
|
+
let input = false;
|
|
103
|
+
if (rule.input !== undefined) {
|
|
104
|
+
if (typeof rule.input === 'boolean') {
|
|
105
|
+
input = rule.input;
|
|
106
|
+
}
|
|
107
|
+
else if (Array.isArray(rule.input)) {
|
|
108
|
+
if (rule.input.length > TOOL_OBSERVE_LIMITS.pathsPerRule) {
|
|
109
|
+
return { ok: false, message: `tools/observe: ${at}.input has too many paths`, data: { limit: 'pathsPerRule' } };
|
|
110
|
+
}
|
|
111
|
+
const paths = [];
|
|
112
|
+
for (const path of rule.input) {
|
|
113
|
+
if (typeof path !== 'string' || path.length === 0) {
|
|
114
|
+
return { ok: false, message: `tools/observe: ${at}.input must hold non-empty strings` };
|
|
115
|
+
}
|
|
116
|
+
if (path.length > TOOL_OBSERVE_LIMITS.stringLength) {
|
|
117
|
+
return { ok: false, message: `tools/observe: ${at}.input path is too long`, data: { limit: 'stringLength' } };
|
|
118
|
+
}
|
|
119
|
+
paths.push(path);
|
|
120
|
+
}
|
|
121
|
+
input = paths;
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
return { ok: false, message: `tools/observe: ${at}.input must be a boolean or an array of field paths` };
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
rules.push({ match, report: rule.report !== false, input });
|
|
128
|
+
}
|
|
129
|
+
return { ok: true, rules };
|
|
130
|
+
}
|
|
131
|
+
function anyGlob(patterns, subject) {
|
|
132
|
+
for (const p of patterns)
|
|
133
|
+
if (globMatch(p, subject))
|
|
134
|
+
return true;
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
const isStringArray = (v) => Array.isArray(v) && v.every((x) => typeof x === 'string');
|
|
138
|
+
/**
|
|
139
|
+
* Every stated key must hold. An unclassed tool never satisfies `classes`.
|
|
140
|
+
* Policy comes from operator config (JSON recipes), so a key of the wrong
|
|
141
|
+
* shape admits NOTHING rather than being read as absent — fail closed.
|
|
142
|
+
*/
|
|
143
|
+
function narrowingAdmits(n, call) {
|
|
144
|
+
if (n.tools !== undefined && (!isStringArray(n.tools) || !anyGlob(n.tools, call.tool)))
|
|
145
|
+
return false;
|
|
146
|
+
if (n.classes !== undefined) {
|
|
147
|
+
const classes = n.classes === 'default' ? DEFAULT_INPUT_CLASSES : n.classes;
|
|
148
|
+
if (!Array.isArray(classes) || !call.class.some((c) => classes.includes(c)))
|
|
149
|
+
return false;
|
|
150
|
+
}
|
|
151
|
+
if (n.conversations !== undefined
|
|
152
|
+
&& (!isStringArray(n.conversations) || !anyGlob(n.conversations, call.conversationId))) {
|
|
153
|
+
return false;
|
|
154
|
+
}
|
|
155
|
+
return true;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* `observe` narrowing: absent means no narrowing (the grant is enough). A
|
|
159
|
+
* value that is not a narrowing object (`false`, `null`, a string) admits
|
|
160
|
+
* nothing: a setting that looks like "off" must never read as "everything".
|
|
161
|
+
*/
|
|
162
|
+
export function observeAdmits(config, call) {
|
|
163
|
+
const n = config?.observe;
|
|
164
|
+
if (n === undefined)
|
|
165
|
+
return true;
|
|
166
|
+
if (!isPlainObject(n))
|
|
167
|
+
return false;
|
|
168
|
+
return narrowingAdmits(n, call);
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Does `inputs` narrowing say this call has no tool/class term at all? Such
|
|
172
|
+
* an entry is unconditional and therefore treated as narrowed to NO tools
|
|
173
|
+
* (RFC-007 §4.3 — the widest form is not producible by omission).
|
|
174
|
+
*/
|
|
175
|
+
export function inputsNarrowingIsUnconditional(n) {
|
|
176
|
+
if (!isPlainObject(n))
|
|
177
|
+
return true;
|
|
178
|
+
const hasTools = Array.isArray(n.tools) && n.tools.length > 0;
|
|
179
|
+
const hasClasses = n.classes === 'default' || (Array.isArray(n.classes) && n.classes.length > 0);
|
|
180
|
+
return !hasTools && !hasClasses;
|
|
181
|
+
}
|
|
182
|
+
/** Class exclusions that no narrowing overrides (RFC-007 §4.3, §5.4). */
|
|
183
|
+
export function inputsExcludedByClass(call) {
|
|
184
|
+
return call.class.length === 0 || call.class.includes('comms');
|
|
185
|
+
}
|
|
186
|
+
export function inputsAdmit(config, call) {
|
|
187
|
+
const n = config?.inputs;
|
|
188
|
+
if (inputsNarrowingIsUnconditional(n))
|
|
189
|
+
return false;
|
|
190
|
+
if (inputsExcludedByClass(call))
|
|
191
|
+
return false;
|
|
192
|
+
return narrowingAdmits(n, call);
|
|
193
|
+
}
|
|
194
|
+
export function ruleMatches(match, call) {
|
|
195
|
+
if (match.tool !== undefined && !globMatch(match.tool, call.tool))
|
|
196
|
+
return false;
|
|
197
|
+
if (match.serverTool !== undefined && (call.serverTool === undefined || !globMatch(match.serverTool, call.serverTool))) {
|
|
198
|
+
return false;
|
|
199
|
+
}
|
|
200
|
+
if (match.serverId !== undefined && (call.serverId === undefined || !globMatch(match.serverId, call.serverId))) {
|
|
201
|
+
return false;
|
|
202
|
+
}
|
|
203
|
+
if (match.conversationId !== undefined && !globMatch(match.conversationId, call.conversationId))
|
|
204
|
+
return false;
|
|
205
|
+
if (match.class !== undefined && !call.class.includes(match.class))
|
|
206
|
+
return false;
|
|
207
|
+
return true;
|
|
208
|
+
}
|
|
209
|
+
// ============================================================================
|
|
210
|
+
// Arguments: field selection and bounding (RFC-007 §5.2, §6.3)
|
|
211
|
+
// ============================================================================
|
|
212
|
+
const hasOwn = (o, k) => Object.prototype.hasOwnProperty.call(o, k);
|
|
213
|
+
function cloneJson(value) {
|
|
214
|
+
return JSON.parse(JSON.stringify(value));
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Select field paths from an arguments object. `.` descends into nested
|
|
218
|
+
* objects; a path ending on an object or array selects it whole; a path that
|
|
219
|
+
* passes through a non-object or names a missing member selects nothing.
|
|
220
|
+
* Selected members keep their place in the structure. Only OWN properties
|
|
221
|
+
* are read and the output is built from null-prototype objects, so a path
|
|
222
|
+
* like `__proto__.x` can neither read nor write a prototype.
|
|
223
|
+
*/
|
|
224
|
+
export function selectFields(input, paths) {
|
|
225
|
+
const out = Object.create(null);
|
|
226
|
+
for (const path of paths) {
|
|
227
|
+
const segs = path.split('.');
|
|
228
|
+
let src = input;
|
|
229
|
+
let found = true;
|
|
230
|
+
for (const seg of segs) {
|
|
231
|
+
if (!isPlainObject(src) || !hasOwn(src, seg)) {
|
|
232
|
+
found = false;
|
|
233
|
+
break;
|
|
234
|
+
}
|
|
235
|
+
src = src[seg];
|
|
236
|
+
}
|
|
237
|
+
if (!found || src === undefined)
|
|
238
|
+
continue;
|
|
239
|
+
let dst = out;
|
|
240
|
+
for (let i = 0; i < segs.length - 1; i++) {
|
|
241
|
+
const seg = segs[i];
|
|
242
|
+
const next = hasOwn(dst, seg) ? dst[seg] : undefined;
|
|
243
|
+
if (!isPlainObject(next)) {
|
|
244
|
+
const fresh = Object.create(null);
|
|
245
|
+
dst[seg] = fresh;
|
|
246
|
+
dst = fresh;
|
|
247
|
+
}
|
|
248
|
+
else {
|
|
249
|
+
dst = next;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
dst[segs[segs.length - 1]] = cloneJson(src);
|
|
253
|
+
}
|
|
254
|
+
// Round-trip to ordinary objects: the wire form is JSON either way, and
|
|
255
|
+
// callers comparing with deepEqual expect Object prototypes.
|
|
256
|
+
return JSON.parse(JSON.stringify(out));
|
|
257
|
+
}
|
|
258
|
+
const byteLength = (value) => Buffer.byteLength(JSON.stringify(value), 'utf8');
|
|
259
|
+
/** Walk an object tree and collect every string leaf with its holder. */
|
|
260
|
+
function collectStrings(root) {
|
|
261
|
+
const out = [];
|
|
262
|
+
const visit = (node) => {
|
|
263
|
+
if (Array.isArray(node)) {
|
|
264
|
+
node.forEach((v, i) => {
|
|
265
|
+
if (typeof v === 'string')
|
|
266
|
+
out.push({ holder: node, key: i, length: v.length });
|
|
267
|
+
else
|
|
268
|
+
visit(v);
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
else if (isPlainObject(node)) {
|
|
272
|
+
for (const [k, v] of Object.entries(node)) {
|
|
273
|
+
if (typeof v === 'string')
|
|
274
|
+
out.push({ holder: node, key: k, length: v.length });
|
|
275
|
+
else
|
|
276
|
+
visit(v);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
};
|
|
280
|
+
visit(root);
|
|
281
|
+
return out;
|
|
282
|
+
}
|
|
283
|
+
/** Cut a string to a prefix of at most `length` code units without leaving
|
|
284
|
+
* half a surrogate pair at the end. */
|
|
285
|
+
function prefixOf(s, length) {
|
|
286
|
+
let cut = s.slice(0, Math.max(0, length));
|
|
287
|
+
const last = cut.charCodeAt(cut.length - 1);
|
|
288
|
+
if (last >= 0xd800 && last <= 0xdbff)
|
|
289
|
+
cut = cut.slice(0, -1);
|
|
290
|
+
return cut;
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Bound `value` to `maxBytes` of serialized JSON (RFC-007 §5.2): first by
|
|
294
|
+
* replacing the longest strings with prefixes of themselves, then by removing
|
|
295
|
+
* the largest members. The result is always a JSON object. Returns null when
|
|
296
|
+
* nothing meaningful fits — the caller withholds instead.
|
|
297
|
+
*/
|
|
298
|
+
export function boundInput(value, maxBytes) {
|
|
299
|
+
if (byteLength(value) <= maxBytes)
|
|
300
|
+
return { value, altered: false };
|
|
301
|
+
const clone = cloneJson(value);
|
|
302
|
+
const MIN_STRING = 32;
|
|
303
|
+
for (let guard = 0; guard < 256; guard++) {
|
|
304
|
+
const over = byteLength(clone) - maxBytes;
|
|
305
|
+
if (over <= 0)
|
|
306
|
+
return { value: clone, altered: true };
|
|
307
|
+
const strings = collectStrings(clone).filter((s) => s.length > MIN_STRING);
|
|
308
|
+
if (strings.length === 0)
|
|
309
|
+
break;
|
|
310
|
+
strings.sort((a, b) => b.length - a.length);
|
|
311
|
+
const longest = strings[0];
|
|
312
|
+
const current = longest.holder[longest.key];
|
|
313
|
+
const target = Math.max(MIN_STRING, Math.min(Math.floor(current.length / 2), current.length - over));
|
|
314
|
+
longest.holder[longest.key] = prefixOf(current, target);
|
|
315
|
+
}
|
|
316
|
+
// Still over: remove top-level members, largest first, in ONE pass (sizes
|
|
317
|
+
// measured once; a running estimate decides when to stop). A member that
|
|
318
|
+
// is itself a huge nested structure goes whole — what remains must be
|
|
319
|
+
// meaningful, or the caller withholds.
|
|
320
|
+
let total = byteLength(clone);
|
|
321
|
+
const members = Object.keys(clone)
|
|
322
|
+
.map((key) => ({ key, size: byteLength(key) + 1 + byteLength(clone[key]) + 1 }))
|
|
323
|
+
.sort((a, b) => b.size - a.size);
|
|
324
|
+
for (const { key, size } of members) {
|
|
325
|
+
if (total <= maxBytes)
|
|
326
|
+
break;
|
|
327
|
+
delete clone[key];
|
|
328
|
+
total -= size;
|
|
329
|
+
}
|
|
330
|
+
return byteLength(clone) <= maxBytes && Object.keys(clone).length > 0 ? { value: clone, altered: true } : null;
|
|
331
|
+
}
|
|
332
|
+
function baseParams(call, phase) {
|
|
333
|
+
return {
|
|
334
|
+
toolCallId: call.toolCallId,
|
|
335
|
+
inferenceId: call.inferenceId,
|
|
336
|
+
conversationId: call.conversationId,
|
|
337
|
+
tool: call.tool,
|
|
338
|
+
class: [...call.class],
|
|
339
|
+
...(call.serverId !== undefined ? { serverId: call.serverId, serverTool: call.serverTool } : {}),
|
|
340
|
+
phase,
|
|
341
|
+
};
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* The opening notification (`pending` or `started`) this connection should
|
|
345
|
+
* receive for `call`, or null when it receives nothing. Steps 1–5 of
|
|
346
|
+
* RFC-007 §6.4.
|
|
347
|
+
*/
|
|
348
|
+
export function openingFor(observer, config, call, phase) {
|
|
349
|
+
const grant = CapabilityGrant.of(observer);
|
|
350
|
+
if (!grant.has(TOOL_LIFECYCLE_OBSERVE))
|
|
351
|
+
return null;
|
|
352
|
+
// A connection's own tools: it already sees the call as tools/call (§7.1).
|
|
353
|
+
if (call.serverId !== undefined && call.serverId === observer.id)
|
|
354
|
+
return null;
|
|
355
|
+
if (!observeAdmits(config, call))
|
|
356
|
+
return null;
|
|
357
|
+
const filter = observer.toolObserveFilter ?? null;
|
|
358
|
+
let requested = false; // no filter → metadata only (§5.1)
|
|
359
|
+
if (filter) {
|
|
360
|
+
const rule = filter.find((r) => ruleMatches(r.match, call));
|
|
361
|
+
if (!rule || !rule.report)
|
|
362
|
+
return null;
|
|
363
|
+
requested = rule.input;
|
|
364
|
+
}
|
|
365
|
+
const params = baseParams(call, phase);
|
|
366
|
+
if (phase !== 'started' || requested === false)
|
|
367
|
+
return params;
|
|
368
|
+
// Arguments were requested. Without the inputs grant the server learns
|
|
369
|
+
// nothing more (no inputWithheld — §5.1).
|
|
370
|
+
if (!grant.has(TOOL_LIFECYCLE_INPUTS))
|
|
371
|
+
return params;
|
|
372
|
+
if (!inputsAdmit(config, call)) {
|
|
373
|
+
params.inputWithheld = true;
|
|
374
|
+
return params;
|
|
375
|
+
}
|
|
376
|
+
const args = isPlainObject(call.input) ? call.input : {};
|
|
377
|
+
const selected = requested === true ? cloneJson(args) : selectFields(args, requested);
|
|
378
|
+
const bounded = boundInput(selected, config?.maxInputBytes ?? DEFAULT_MAX_INPUT_BYTES);
|
|
379
|
+
if (!bounded) {
|
|
380
|
+
params.inputWithheld = true;
|
|
381
|
+
return params;
|
|
382
|
+
}
|
|
383
|
+
params.input = bounded.value;
|
|
384
|
+
if (bounded.altered)
|
|
385
|
+
params.inputAltered = true;
|
|
386
|
+
return params;
|
|
387
|
+
}
|
|
388
|
+
/** Does this connection still get the terminal for a call it was opened to? */
|
|
389
|
+
export function terminalStillAllowed(observer, config, call) {
|
|
390
|
+
return CapabilityGrant.of(observer).has(TOOL_LIFECYCLE_OBSERVE) && observeAdmits(config, call);
|
|
391
|
+
}
|
|
392
|
+
/**
|
|
393
|
+
* Provider identifiers trusted as unique (RFC-007 §3 rev 3: reuse the
|
|
394
|
+
* model's id only where the provider guarantees it). Anthropic `tool_use`
|
|
395
|
+
* ids are random and at least this long; everything else — per-response
|
|
396
|
+
* counters like `call_0`, other providers' formats — is minted over.
|
|
397
|
+
*/
|
|
398
|
+
const PROVIDER_UNIQUE_ID = /^toolu_[A-Za-z0-9]{20,}$/;
|
|
399
|
+
const RECENT_ID_WINDOW = 8192;
|
|
400
|
+
const callKey = (agentName, callId) => `${agentName}\u0000${callId}`;
|
|
401
|
+
export class ToolLifecycleEmitter {
|
|
402
|
+
host;
|
|
403
|
+
now;
|
|
404
|
+
/** Opened calls awaiting their terminal, keyed by (agent, model call id). */
|
|
405
|
+
calls = new Map();
|
|
406
|
+
recentIds = new Set();
|
|
407
|
+
recentOrder = [];
|
|
408
|
+
mintSeq = 0;
|
|
409
|
+
constructor(host, now = Date.now) {
|
|
410
|
+
this.host = host;
|
|
411
|
+
this.now = now;
|
|
412
|
+
}
|
|
413
|
+
/** Nothing observes: skip all work on the hot path. */
|
|
414
|
+
anyObserver() {
|
|
415
|
+
for (const o of this.host.observers()) {
|
|
416
|
+
if (CapabilityGrant.of(o).has(TOOL_LIFECYCLE_OBSERVE))
|
|
417
|
+
return true;
|
|
418
|
+
}
|
|
419
|
+
return false;
|
|
420
|
+
}
|
|
421
|
+
/**
|
|
422
|
+
* A host-unique id for a call (RFC-007 §3): the model's own only where the
|
|
423
|
+
* provider guarantees it unique and it was not reported recently; minted
|
|
424
|
+
* otherwise. Minted ids carry a per-process counter, so they never repeat.
|
|
425
|
+
*/
|
|
426
|
+
hostCallId(modelCallId) {
|
|
427
|
+
let id = modelCallId;
|
|
428
|
+
if (!PROVIDER_UNIQUE_ID.test(id) || this.recentIds.has(id)) {
|
|
429
|
+
id = `${modelCallId}~h${(++this.mintSeq).toString(36)}`;
|
|
430
|
+
}
|
|
431
|
+
this.recentIds.add(id);
|
|
432
|
+
this.recentOrder.push(id);
|
|
433
|
+
if (this.recentOrder.length > RECENT_ID_WINDOW) {
|
|
434
|
+
this.recentIds.delete(this.recentOrder.shift());
|
|
435
|
+
}
|
|
436
|
+
return id;
|
|
437
|
+
}
|
|
438
|
+
/**
|
|
439
|
+
* A model-issued call is about to be dispatched. Recorded, keyed by
|
|
440
|
+
* (agent, model call id) — never matched through the trace stream, so two
|
|
441
|
+
* agents' identical short ids cannot cross — but nothing is sent yet: the
|
|
442
|
+
* host may still refuse it (refuse()) before it executes.
|
|
443
|
+
*/
|
|
444
|
+
register(agentName, inferenceId, call) {
|
|
445
|
+
if (!this.anyObserver())
|
|
446
|
+
return;
|
|
447
|
+
const described = this.host.describe(call.name);
|
|
448
|
+
this.calls.set(callKey(agentName, call.id), {
|
|
449
|
+
agentName,
|
|
450
|
+
modelCallId: call.id,
|
|
451
|
+
call: {
|
|
452
|
+
toolCallId: this.hostCallId(call.id),
|
|
453
|
+
inferenceId,
|
|
454
|
+
conversationId: agentName,
|
|
455
|
+
tool: call.name,
|
|
456
|
+
class: described.class,
|
|
457
|
+
...(described.serverId !== undefined
|
|
458
|
+
? { serverId: described.serverId, serverTool: described.serverTool }
|
|
459
|
+
: {}),
|
|
460
|
+
input: call.input,
|
|
461
|
+
},
|
|
462
|
+
openedTo: new Map(),
|
|
463
|
+
opened: false,
|
|
464
|
+
// Taken before dispatch, so durationMs includes work a synchronous
|
|
465
|
+
// tool does inside dispatch (its `started` is sent only after).
|
|
466
|
+
startedAt: this.now(),
|
|
467
|
+
failed: false,
|
|
468
|
+
});
|
|
469
|
+
}
|
|
470
|
+
/**
|
|
471
|
+
* The host refused the call before executing it — its provider is gone,
|
|
472
|
+
* host tool policy denies it, a conversation-bound agent reached outside
|
|
473
|
+
* its channel. Called from the refusal site itself, synchronously within
|
|
474
|
+
* dispatch, so the call is forgotten before open() would send anything:
|
|
475
|
+
* a refused call produces no events (RFC-007 §3).
|
|
476
|
+
*/
|
|
477
|
+
refuse(agentName, callId) {
|
|
478
|
+
const key = callKey(agentName, callId);
|
|
479
|
+
const tracked = this.calls.get(key);
|
|
480
|
+
if (tracked && !tracked.opened)
|
|
481
|
+
this.calls.delete(key);
|
|
482
|
+
}
|
|
483
|
+
/**
|
|
484
|
+
* Dispatch returned and the call was not refused: execution has begun.
|
|
485
|
+
* Send `started` to every connection that should see it. Refusal sites
|
|
486
|
+
* run synchronously inside dispatch, before this.
|
|
487
|
+
*/
|
|
488
|
+
open(agentName, callId) {
|
|
489
|
+
const key = callKey(agentName, callId);
|
|
490
|
+
const tracked = this.calls.get(key);
|
|
491
|
+
if (!tracked || tracked.opened)
|
|
492
|
+
return;
|
|
493
|
+
tracked.opened = true;
|
|
494
|
+
for (const observer of this.host.observers()) {
|
|
495
|
+
let params;
|
|
496
|
+
try {
|
|
497
|
+
params = openingFor(observer, this.host.configFor(observer.id), tracked.call, 'started');
|
|
498
|
+
}
|
|
499
|
+
catch (err) {
|
|
500
|
+
console.error(`[mcpl] ${observer.id}: tools/lifecycle decision failed: ${err.message}`);
|
|
501
|
+
continue;
|
|
502
|
+
}
|
|
503
|
+
if (!params)
|
|
504
|
+
continue;
|
|
505
|
+
try {
|
|
506
|
+
observer.sendToolLifecycle(params);
|
|
507
|
+
tracked.openedTo.set(observer.id, observer.transportEpoch ?? 0);
|
|
508
|
+
}
|
|
509
|
+
catch {
|
|
510
|
+
/* best-effort */
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
// Nobody received an opening, so nobody is owed a terminal.
|
|
514
|
+
if (tracked.openedTo.size === 0)
|
|
515
|
+
this.calls.delete(key);
|
|
516
|
+
}
|
|
517
|
+
/**
|
|
518
|
+
* The host could not obtain a result for this call (its dispatch threw,
|
|
519
|
+
* the provider's transport failed, the request timed out). Its terminal
|
|
520
|
+
* will be `failed`. An error RESULT returned by the tool is not this: it
|
|
521
|
+
* is `completed` with `isError` (RFC-007 §3).
|
|
522
|
+
*/
|
|
523
|
+
markDispatchFailure(agentName, callId) {
|
|
524
|
+
const tracked = this.calls.get(callKey(agentName, callId));
|
|
525
|
+
if (tracked)
|
|
526
|
+
tracked.failed = true;
|
|
527
|
+
}
|
|
528
|
+
terminate(tracked, phase, isError) {
|
|
529
|
+
this.calls.delete(callKey(tracked.agentName, tracked.modelCallId));
|
|
530
|
+
const durationMs = Math.max(0, this.now() - tracked.startedAt);
|
|
531
|
+
for (const observer of this.host.observers()) {
|
|
532
|
+
const epoch = tracked.openedTo.get(observer.id);
|
|
533
|
+
// Only the transport epoch the opening went to: a reconnected observer
|
|
534
|
+
// never receives a terminal for an opening it did not see (§7.3).
|
|
535
|
+
if (epoch === undefined || epoch !== (observer.transportEpoch ?? 0))
|
|
536
|
+
continue;
|
|
537
|
+
if (!terminalStillAllowed(observer, this.host.configFor(observer.id), tracked.call))
|
|
538
|
+
continue;
|
|
539
|
+
const params = baseParams(tracked.call, phase);
|
|
540
|
+
if (phase === 'completed')
|
|
541
|
+
params.isError = !!isError;
|
|
542
|
+
params.durationMs = durationMs;
|
|
543
|
+
try {
|
|
544
|
+
observer.sendToolLifecycle(params);
|
|
545
|
+
}
|
|
546
|
+
catch {
|
|
547
|
+
/* best-effort */
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
/** A tool result reached the host: the call's terminal. */
|
|
552
|
+
onResult(agentName, callId, result) {
|
|
553
|
+
if (this.calls.size === 0)
|
|
554
|
+
return;
|
|
555
|
+
const tracked = this.calls.get(callKey(agentName, callId));
|
|
556
|
+
if (!tracked)
|
|
557
|
+
return;
|
|
558
|
+
if (!tracked.opened) {
|
|
559
|
+
// Never opened (a path that bypassed open()): nothing was sent.
|
|
560
|
+
this.calls.delete(callKey(agentName, callId));
|
|
561
|
+
return;
|
|
562
|
+
}
|
|
563
|
+
if (tracked.failed)
|
|
564
|
+
this.terminate(tracked, 'failed');
|
|
565
|
+
else
|
|
566
|
+
this.terminate(tracked, 'completed', result?.isError === true || result?.success === false);
|
|
567
|
+
}
|
|
568
|
+
/**
|
|
569
|
+
* A stream ended: its calls still open were cancelled before a result.
|
|
570
|
+
* Scoped to the inference ids that stream minted, so a successor stream
|
|
571
|
+
* for the same agent (a budget restart overlapping this one's teardown)
|
|
572
|
+
* keeps its live calls. A result arriving later finds nothing.
|
|
573
|
+
*/
|
|
574
|
+
abortOpen(agentName, inferenceIds) {
|
|
575
|
+
if (this.calls.size === 0)
|
|
576
|
+
return;
|
|
577
|
+
const ids = new Set(inferenceIds);
|
|
578
|
+
for (const tracked of [...this.calls.values()]) {
|
|
579
|
+
if (tracked.agentName === agentName && ids.has(tracked.call.inferenceId)) {
|
|
580
|
+
if (tracked.opened)
|
|
581
|
+
this.terminate(tracked, 'aborted');
|
|
582
|
+
else
|
|
583
|
+
this.calls.delete(callKey(tracked.agentName, tracked.modelCallId));
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
/** For tests and diagnostics. */
|
|
588
|
+
get openCount() {
|
|
589
|
+
return this.calls.size;
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
//# sourceMappingURL=tool-lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-lifecycle.js","sourceRoot":"","sources":["../../../src/mcpl/tool-lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -55,6 +55,18 @@ export declare abstract class McplTransport extends EventEmitter {
|
|
|
55
55
|
/** Close the transport and release resources. Resolves once fully closed. */
|
|
56
56
|
abstract close(): Promise<void>;
|
|
57
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* Host variables a stdio child gets by default: just enough for an ordinary
|
|
60
|
+
* process to run (find binaries, a home dir, temp dir, locale, TLS roots,
|
|
61
|
+
* a display for GUI helpers). Everything else in the host env — notably API
|
|
62
|
+
* keys and bot tokens — is NOT passed on; a server that needs a variable must
|
|
63
|
+
* declare it in its `env` (recipes can `${VAR}`-substitute from .env), or set
|
|
64
|
+
* `inheritEnv: true` to get the whole host env as before.
|
|
65
|
+
*/
|
|
66
|
+
export declare const CHILD_ENV_ALLOWLIST: string[];
|
|
67
|
+
/** Environment for a stdio child: allowlisted host vars (+ LC_*), then the
|
|
68
|
+
* server's declared `env` on top. `inheritEnv: true` restores full inheritance. */
|
|
69
|
+
export declare function buildChildEnv(config: Pick<McplServerConfig, 'env' | 'inheritEnv'>, hostEnv?: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
|
|
58
70
|
export declare class StdioTransport extends McplTransport {
|
|
59
71
|
private readonly child;
|
|
60
72
|
private readonly rl;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../src/mcpl/transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD;4EAC4E;AAC5E,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;GAYG;AACH,8BAAsB,aAAc,SAAQ,YAAY;IACtD,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,WAAW,CAAC;IAE9C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,YAAY,CAAgB;IAEpC,SAAS;IAgBT,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,wEAAwE;IACxE,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKtC,0EAA0E;IAC1E,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKxC,iCAAiC;IACjC,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,kBAAkB,GAAG,IAAI;IAMpD,oDAAoD;IACpD,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAEtC,6EAA6E;IAC7E,QAAQ,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAChC;AAMD,qBAAa,cAAe,SAAQ,aAAa;IAI7C,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,EAAE;IAJrB,QAAQ,CAAC,IAAI,EAAG,OAAO,CAAU;IAEjC,OAAO;IAuBP;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,gBAAgB,GAAG,cAAc;IActD,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAc7B;AASD,qBAAa,kBAAmB,SAAQ,aAAa;IAG/B,OAAO,CAAC,QAAQ,CAAC,EAAE;IAFvC,QAAQ,CAAC,IAAI,EAAG,WAAW,CAAU;IAErC,OAAO;IAmBP;;;;OAIG;WACU,IAAI,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA8DxE,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAMvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAgB7B;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAoBjG;AAMD;qCACqC;AACrC,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAItE;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC,CAKpF"}
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../src/mcpl/transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD;4EAC4E;AAC5E,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;GAYG;AACH,8BAAsB,aAAc,SAAQ,YAAY;IACtD,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,WAAW,CAAC;IAE9C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,YAAY,CAAgB;IAEpC,SAAS;IAgBT,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,wEAAwE;IACxE,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKtC,0EAA0E;IAC1E,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKxC,iCAAiC;IACjC,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,kBAAkB,GAAG,IAAI;IAMpD,oDAAoD;IACpD,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAEtC,6EAA6E;IAC7E,QAAQ,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAChC;AAMD;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,UAS/B,CAAC;AAEF;oFACoF;AACpF,wBAAgB,aAAa,CAC3B,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,KAAK,GAAG,YAAY,CAAC,EACpD,OAAO,GAAE,MAAM,CAAC,UAAwB,GACvC,MAAM,CAAC,UAAU,CAQnB;AAED,qBAAa,cAAe,SAAQ,aAAa;IAI7C,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,EAAE;IAJrB,QAAQ,CAAC,IAAI,EAAG,OAAO,CAAU;IAEjC,OAAO;IAuBP;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,gBAAgB,GAAG,cAAc;IActD,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAc7B;AASD,qBAAa,kBAAmB,SAAQ,aAAa;IAG/B,OAAO,CAAC,QAAQ,CAAC,EAAE;IAFvC,QAAQ,CAAC,IAAI,EAAG,WAAW,CAAU;IAErC,OAAO;IAmBP;;;;OAIG;WACU,IAAI,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA8DxE,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAMvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAgB7B;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAoBjG;AAMD;qCACqC;AACrC,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAItE;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC,CAKpF"}
|