@animalabs/agent-framework 0.8.0 → 0.10.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/dist/src/agent.d.ts +11 -1
- package/dist/src/agent.d.ts.map +1 -1
- package/dist/src/agent.js +33 -3
- package/dist/src/agent.js.map +1 -1
- package/dist/src/framework.d.ts +184 -18
- package/dist/src/framework.d.ts.map +1 -1
- package/dist/src/framework.js +1323 -246
- package/dist/src/framework.js.map +1 -1
- package/dist/src/gate/event-gate.d.ts +73 -7
- package/dist/src/gate/event-gate.d.ts.map +1 -1
- package/dist/src/gate/event-gate.js +399 -22
- package/dist/src/gate/event-gate.js.map +1 -1
- package/dist/src/gate/types.d.ts +56 -0
- package/dist/src/gate/types.d.ts.map +1 -1
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcpl/capability-grant.d.ts +115 -0
- package/dist/src/mcpl/capability-grant.d.ts.map +1 -0
- package/dist/src/mcpl/capability-grant.js +291 -0
- package/dist/src/mcpl/capability-grant.js.map +1 -0
- package/dist/src/mcpl/capability-mask.d.ts +51 -0
- package/dist/src/mcpl/capability-mask.d.ts.map +1 -0
- package/dist/src/mcpl/capability-mask.js +190 -0
- package/dist/src/mcpl/capability-mask.js.map +1 -0
- package/dist/src/mcpl/channel-registry.d.ts +3 -1
- package/dist/src/mcpl/channel-registry.d.ts.map +1 -1
- package/dist/src/mcpl/channel-registry.js +163 -36
- package/dist/src/mcpl/channel-registry.js.map +1 -1
- package/dist/src/mcpl/checkpoint-manager.d.ts +8 -3
- package/dist/src/mcpl/checkpoint-manager.d.ts.map +1 -1
- package/dist/src/mcpl/checkpoint-manager.js +28 -8
- package/dist/src/mcpl/checkpoint-manager.js.map +1 -1
- package/dist/src/mcpl/errors.d.ts +6 -0
- package/dist/src/mcpl/errors.d.ts.map +1 -1
- package/dist/src/mcpl/errors.js +6 -0
- package/dist/src/mcpl/errors.js.map +1 -1
- package/dist/src/mcpl/feature-set-manager.d.ts +10 -1
- package/dist/src/mcpl/feature-set-manager.d.ts.map +1 -1
- package/dist/src/mcpl/feature-set-manager.js +45 -4
- package/dist/src/mcpl/feature-set-manager.js.map +1 -1
- package/dist/src/mcpl/hook-orchestrator.d.ts +10 -14
- package/dist/src/mcpl/hook-orchestrator.d.ts.map +1 -1
- package/dist/src/mcpl/hook-orchestrator.js +58 -67
- package/dist/src/mcpl/hook-orchestrator.js.map +1 -1
- package/dist/src/mcpl/index.d.ts +1 -1
- package/dist/src/mcpl/index.d.ts.map +1 -1
- package/dist/src/mcpl/index.js.map +1 -1
- package/dist/src/mcpl/prose-grammar.d.ts +11 -0
- package/dist/src/mcpl/prose-grammar.d.ts.map +1 -1
- package/dist/src/mcpl/prose-grammar.js +21 -0
- package/dist/src/mcpl/prose-grammar.js.map +1 -1
- package/dist/src/mcpl/prose-stream-router.d.ts +11 -2
- package/dist/src/mcpl/prose-stream-router.d.ts.map +1 -1
- package/dist/src/mcpl/prose-stream-router.js +73 -13
- package/dist/src/mcpl/prose-stream-router.js.map +1 -1
- package/dist/src/mcpl/push-handler.d.ts.map +1 -1
- package/dist/src/mcpl/push-handler.js +20 -2
- package/dist/src/mcpl/push-handler.js.map +1 -1
- package/dist/src/mcpl/server-connection.d.ts +93 -9
- package/dist/src/mcpl/server-connection.d.ts.map +1 -1
- package/dist/src/mcpl/server-connection.js +231 -32
- package/dist/src/mcpl/server-connection.js.map +1 -1
- package/dist/src/mcpl/server-registry.d.ts.map +1 -1
- package/dist/src/mcpl/server-registry.js +4 -3
- package/dist/src/mcpl/server-registry.js.map +1 -1
- package/dist/src/mcpl/tags.d.ts +24 -0
- package/dist/src/mcpl/tags.d.ts.map +1 -0
- package/dist/src/mcpl/tags.js +52 -0
- package/dist/src/mcpl/tags.js.map +1 -0
- package/dist/src/mcpl/transport.d.ts.map +1 -1
- package/dist/src/mcpl/transport.js +10 -0
- package/dist/src/mcpl/transport.js.map +1 -1
- package/dist/src/mcpl/types.d.ts +159 -64
- package/dist/src/mcpl/types.d.ts.map +1 -1
- package/dist/src/mcpl/types.js +16 -2
- package/dist/src/mcpl/types.js.map +1 -1
- package/dist/src/modules/workspace/index.d.ts +23 -0
- package/dist/src/modules/workspace/index.d.ts.map +1 -1
- package/dist/src/modules/workspace/index.js +48 -0
- package/dist/src/modules/workspace/index.js.map +1 -1
- package/dist/src/modules/workspace/sync.d.ts +11 -2
- package/dist/src/modules/workspace/sync.d.ts.map +1 -1
- package/dist/src/modules/workspace/sync.js +18 -8
- package/dist/src/modules/workspace/sync.js.map +1 -1
- package/dist/src/refusal-reactions.d.ts +27 -0
- package/dist/src/refusal-reactions.d.ts.map +1 -0
- package/dist/src/refusal-reactions.js +35 -0
- package/dist/src/refusal-reactions.js.map +1 -0
- package/dist/src/tool-result-history.d.ts +20 -0
- package/dist/src/tool-result-history.d.ts.map +1 -1
- package/dist/src/tool-result-history.js +26 -5
- package/dist/src/tool-result-history.js.map +1 -1
- package/dist/src/types/agent.d.ts +39 -1
- package/dist/src/types/agent.d.ts.map +1 -1
- package/dist/src/types/framework.d.ts +16 -0
- package/dist/src/types/framework.d.ts.map +1 -1
- package/dist/src/types/trace.d.ts +24 -0
- package/dist/src/types/trace.d.ts.map +1 -1
- package/dist/test/channel-registry-routing.test.js +38 -10
- package/dist/test/channel-registry-routing.test.js.map +1 -1
- package/dist/test/channel-registry-typing.test.js +10 -1
- package/dist/test/channel-registry-typing.test.js.map +1 -1
- package/dist/test/checkpoint-attribution.test.js +168 -8
- package/dist/test/checkpoint-attribution.test.js.map +1 -1
- package/dist/test/conversation-fork-injection-scoping.test.js +8 -3
- package/dist/test/conversation-fork-injection-scoping.test.js.map +1 -1
- package/dist/test/event-gate-passthrough.test.d.ts +15 -0
- package/dist/test/event-gate-passthrough.test.d.ts.map +1 -0
- package/dist/test/event-gate-passthrough.test.js +289 -0
- package/dist/test/event-gate-passthrough.test.js.map +1 -0
- package/dist/test/event-gate-selfwake.test.d.ts +15 -0
- package/dist/test/event-gate-selfwake.test.d.ts.map +1 -0
- package/dist/test/event-gate-selfwake.test.js +125 -0
- package/dist/test/event-gate-selfwake.test.js.map +1 -0
- package/dist/test/explicit-prose-routing.test.js +137 -7
- package/dist/test/explicit-prose-routing.test.js.map +1 -1
- package/dist/test/fixtures/awareness-barrier-mcpl-server.mjs +276 -0
- package/dist/test/fixtures/flaky-mcpl-server.mjs +41 -0
- package/dist/test/machine-close-provenance.test.js +6 -0
- package/dist/test/machine-close-provenance.test.js.map +1 -1
- package/dist/test/mcpl-awareness-barrier.test.js +10 -0
- package/dist/test/mcpl-awareness-barrier.test.js.map +1 -1
- package/dist/test/mcpl-capability-grant.test.d.ts +10 -0
- package/dist/test/mcpl-capability-grant.test.d.ts.map +1 -0
- package/dist/test/mcpl-capability-grant.test.js +109 -0
- package/dist/test/mcpl-capability-grant.test.js.map +1 -0
- package/dist/test/mcpl-capability-scoping.test.d.ts +2 -0
- package/dist/test/mcpl-capability-scoping.test.d.ts.map +1 -0
- package/dist/test/mcpl-capability-scoping.test.js +266 -0
- package/dist/test/mcpl-capability-scoping.test.js.map +1 -0
- package/dist/test/mcpl-gate-roundtrip.test.js +13 -0
- package/dist/test/mcpl-gate-roundtrip.test.js.map +1 -1
- package/dist/test/mcpl-list-status.test.d.ts +2 -0
- package/dist/test/mcpl-list-status.test.d.ts.map +1 -0
- package/dist/test/mcpl-list-status.test.js +78 -0
- package/dist/test/mcpl-list-status.test.js.map +1 -0
- package/dist/test/mcpl-manifest-changed.test.d.ts +2 -0
- package/dist/test/mcpl-manifest-changed.test.d.ts.map +1 -0
- package/dist/test/mcpl-manifest-changed.test.js +177 -0
- package/dist/test/mcpl-manifest-changed.test.js.map +1 -0
- package/dist/test/mcpl-reconnect-events.test.js +27 -2
- package/dist/test/mcpl-reconnect-events.test.js.map +1 -1
- package/dist/test/mcpl-reconnect-reregistration.test.js +53 -17
- package/dist/test/mcpl-reconnect-reregistration.test.js.map +1 -1
- package/dist/test/mcpl-request-timeout.test.js +1 -1
- package/dist/test/mcpl-request-timeout.test.js.map +1 -1
- package/dist/test/physical-window-restart.test.d.ts +14 -0
- package/dist/test/physical-window-restart.test.d.ts.map +1 -0
- package/dist/test/physical-window-restart.test.js +222 -0
- package/dist/test/physical-window-restart.test.js.map +1 -0
- package/dist/test/present-while-acting.test.js +199 -1
- package/dist/test/present-while-acting.test.js.map +1 -1
- package/dist/test/prose-stream-router.test.js +43 -0
- package/dist/test/prose-stream-router.test.js.map +1 -1
- package/dist/test/refusal-reaction-baseline.test.d.ts +2 -0
- package/dist/test/refusal-reaction-baseline.test.d.ts.map +1 -0
- package/dist/test/refusal-reaction-baseline.test.js +74 -0
- package/dist/test/refusal-reaction-baseline.test.js.map +1 -0
- package/dist/test/state-scaling-e2e.test.js +7 -1
- package/dist/test/state-scaling-e2e.test.js.map +1 -1
- package/dist/test/state-scaling.test.js +9 -1
- package/dist/test/state-scaling.test.js.map +1 -1
- package/dist/test/tool-result-spill.test.d.ts +13 -0
- package/dist/test/tool-result-spill.test.d.ts.map +1 -0
- package/dist/test/tool-result-spill.test.js +472 -0
- package/dist/test/tool-result-spill.test.js.map +1 -0
- package/dist/test/trunk-channel-routing.test.js +45 -0
- package/dist/test/trunk-channel-routing.test.js.map +1 -1
- package/dist/test/xml-round-persist.test.d.ts +19 -0
- package/dist/test/xml-round-persist.test.d.ts.map +1 -0
- package/dist/test/xml-round-persist.test.js +235 -0
- package/dist/test/xml-round-persist.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -4
- package/src/agent.ts +38 -4
- package/src/framework.ts +1488 -272
- package/src/gate/event-gate.ts +427 -24
- package/src/gate/types.ts +58 -0
- package/src/index.ts +1 -0
- package/src/mcpl/capability-grant.ts +319 -0
- package/src/mcpl/capability-mask.ts +228 -0
- package/src/mcpl/channel-registry.ts +167 -39
- package/src/mcpl/checkpoint-manager.ts +28 -8
- package/src/mcpl/errors.ts +7 -0
- package/src/mcpl/feature-set-manager.ts +50 -5
- package/src/mcpl/hook-orchestrator.ts +64 -86
- package/src/mcpl/index.ts +0 -2
- package/src/mcpl/prose-grammar.ts +21 -0
- package/src/mcpl/prose-stream-router.ts +65 -14
- package/src/mcpl/push-handler.ts +18 -2
- package/src/mcpl/server-connection.ts +262 -34
- package/src/mcpl/server-registry.ts +4 -3
- package/src/mcpl/tags.ts +50 -0
- package/src/mcpl/transport.ts +11 -0
- package/src/mcpl/types.ts +176 -78
- package/src/modules/workspace/index.ts +48 -0
- package/src/modules/workspace/sync.ts +30 -7
- package/src/refusal-reactions.ts +37 -0
- package/src/tool-result-history.ts +27 -5
- package/src/types/agent.ts +40 -1
- package/src/types/framework.ts +17 -0
- package/src/types/trace.ts +22 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prose-grammar.d.ts","sourceRoot":"","sources":["../../../src/mcpl/prose-grammar.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,uEAAuE;AACvE,eAAO,MAAM,iBAAiB,QAAU,CAAC;AAEzC,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAc1D"}
|
|
1
|
+
{"version":3,"file":"prose-grammar.d.ts","sourceRoot":"","sources":["../../../src/mcpl/prose-grammar.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,uEAAuE;AACvE,eAAO,MAAM,iBAAiB,QAAU,CAAC;AAEzC,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAc1D;AAED;4CAC4C;AAC5C,eAAO,MAAM,wBAAwB,QAAiB,CAAC;AAEvD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAQhE"}
|
|
@@ -30,4 +30,25 @@ export function parseProsePrefix(text) {
|
|
|
30
30
|
}
|
|
31
31
|
return { kind: 'target', target, continueTurn, body };
|
|
32
32
|
}
|
|
33
|
+
/** A real hybrid routing line: exact triple-arrow plus an optional whitespace
|
|
34
|
+
* run and a non-whitespace target token. */
|
|
35
|
+
export const HYBRID_PROSE_PREFIX_LINE = /^>>>[ \t]*\S/;
|
|
36
|
+
/**
|
|
37
|
+
* Hybrid/locus-preserving routing grammar.
|
|
38
|
+
*
|
|
39
|
+
* `>>>#cafe body` and `>>> #cafe body` route this envelope explicitly while
|
|
40
|
+
* unprefixed prose remains ordinary frozen-locus speech. The authored source
|
|
41
|
+
* is never rewritten; callers consume this view only for publication.
|
|
42
|
+
*/
|
|
43
|
+
export function parseHybridProsePrefix(text) {
|
|
44
|
+
const m = /^>>>[ \t]*(\S+)([ \t]+!)?[ \t]*\n?/.exec(text);
|
|
45
|
+
if (!m)
|
|
46
|
+
return { kind: 'none', continueTurn: false, body: text };
|
|
47
|
+
const target = m[1];
|
|
48
|
+
const continueTurn = m[2] !== undefined;
|
|
49
|
+
const body = text.slice(m[0].length);
|
|
50
|
+
if (target === 'skip_reply')
|
|
51
|
+
return { kind: 'private', continueTurn, body };
|
|
52
|
+
return { kind: 'target', target, continueTurn, body };
|
|
53
|
+
}
|
|
33
54
|
//# sourceMappingURL=prose-grammar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prose-grammar.js","sourceRoot":"","sources":["../../../src/mcpl/prose-grammar.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AASH,uEAAuE;AACvE,MAAM,CAAC,MAAM,iBAAiB,GAAG,OAAO,CAAC;AAEzC,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,MAAM,CAAC,GAAG,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnD,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACjE,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;IACrB,MAAM,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC;IACxC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACrC,uEAAuE;IACvE,6EAA6E;IAC7E,4EAA4E;IAC5E,4DAA4D;IAC5D,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;QAC5B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IACjD,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AACxD,CAAC"}
|
|
1
|
+
{"version":3,"file":"prose-grammar.js","sourceRoot":"","sources":["../../../src/mcpl/prose-grammar.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AASH,uEAAuE;AACvE,MAAM,CAAC,MAAM,iBAAiB,GAAG,OAAO,CAAC;AAEzC,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,MAAM,CAAC,GAAG,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnD,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACjE,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;IACrB,MAAM,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC;IACxC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACrC,uEAAuE;IACvE,6EAA6E;IAC7E,4EAA4E;IAC5E,4DAA4D;IAC5D,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;QAC5B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IACjD,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AACxD,CAAC;AAED;4CAC4C;AAC5C,MAAM,CAAC,MAAM,wBAAwB,GAAG,cAAc,CAAC;AAEvD;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAY;IACjD,MAAM,CAAC,GAAG,oCAAoC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1D,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACjE,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;IACrB,MAAM,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC;IACxC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,MAAM,KAAK,YAAY;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IAC5E,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AACxD,CAAC"}
|
|
@@ -37,8 +37,8 @@ export declare class ProseStreamRouter {
|
|
|
37
37
|
private sawBang;
|
|
38
38
|
private accumulated;
|
|
39
39
|
constructor(opts: {
|
|
40
|
-
/**
|
|
41
|
-
mode: 'explicit' | 'locus';
|
|
40
|
+
/** explicit parses `>>`; hybrid parses `>>>` while retaining locus fallback. */
|
|
41
|
+
mode: 'explicit' | 'hybrid' | 'locus';
|
|
42
42
|
/** Initial destination: the frozen turn locus (locus mode) or null. */
|
|
43
43
|
initialTarget: string | null;
|
|
44
44
|
/** Resolve a `>>spec` to a channelId, or null (unresolved/ambiguous). */
|
|
@@ -46,6 +46,15 @@ export declare class ProseStreamRouter {
|
|
|
46
46
|
});
|
|
47
47
|
/** Per-channel full text emitted so far (for outgoing/complete). */
|
|
48
48
|
byChannel(): ReadonlyMap<string, string>;
|
|
49
|
+
/**
|
|
50
|
+
* Drop everything routed so far and return to the constructed state.
|
|
51
|
+
*
|
|
52
|
+
* For a membrane refusal retry (RetryingEvent): the abandoned attempt's
|
|
53
|
+
* prose must not survive into the new one, and `accumulated` feeds
|
|
54
|
+
* outgoing/complete — leaving it would finalize text the model never
|
|
55
|
+
* actually said in the attempt that stands.
|
|
56
|
+
*/
|
|
57
|
+
reset(): void;
|
|
49
58
|
feed(delta: string): RoutedDelta[];
|
|
50
59
|
/** End of stream: flush any held line-start text (it can no longer become a
|
|
51
60
|
* complete prefix; an unterminated `>>tok` at EOF is routing metadata with
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prose-stream-router.d.ts","sourceRoot":"","sources":["../../../src/mcpl/prose-stream-router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAID,qBAAa,iBAAiB;IAS1B,OAAO,CAAC,IAAI;IARd,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,IAAI,CAAM;IAClB,OAAO,CAAC,KAAK,CAAM;IACnB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAA6B;gBAGtC,IAAI,EAAE;QACZ,
|
|
1
|
+
{"version":3,"file":"prose-stream-router.d.ts","sourceRoot":"","sources":["../../../src/mcpl/prose-stream-router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAID,qBAAa,iBAAiB;IAS1B,OAAO,CAAC,IAAI;IARd,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,IAAI,CAAM;IAClB,OAAO,CAAC,KAAK,CAAM;IACnB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAA6B;gBAGtC,IAAI,EAAE;QACZ,gFAAgF;QAChF,IAAI,EAAE,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC;QACtC,uEAAuE;QACvE,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,yEAAyE;QACzE,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;KAC1C;IAMH,oEAAoE;IACpE,SAAS,IAAI,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC;IAIxC;;;;;;;OAOG;IACH,KAAK,IAAI,IAAI;IASb,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE;IAMlC;;gFAE4E;IAC5E,MAAM,IAAI,WAAW,EAAE;IAcvB,OAAO,CAAC,IAAI;IAwFZ,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,IAAI;CAKb"}
|
|
@@ -42,6 +42,22 @@ export class ProseStreamRouter {
|
|
|
42
42
|
byChannel() {
|
|
43
43
|
return this.accumulated;
|
|
44
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* Drop everything routed so far and return to the constructed state.
|
|
47
|
+
*
|
|
48
|
+
* For a membrane refusal retry (RetryingEvent): the abandoned attempt's
|
|
49
|
+
* prose must not survive into the new one, and `accumulated` feeds
|
|
50
|
+
* outgoing/complete — leaving it would finalize text the model never
|
|
51
|
+
* actually said in the attempt that stands.
|
|
52
|
+
*/
|
|
53
|
+
reset() {
|
|
54
|
+
this.target = this.opts.initialTarget;
|
|
55
|
+
this.state = this.opts.mode === 'locus' ? 'body' : 'line-start';
|
|
56
|
+
this.held = '';
|
|
57
|
+
this.token = '';
|
|
58
|
+
this.sawBang = false;
|
|
59
|
+
this.accumulated = new Map();
|
|
60
|
+
}
|
|
45
61
|
feed(delta) {
|
|
46
62
|
const out = [];
|
|
47
63
|
for (const ch of delta)
|
|
@@ -53,8 +69,14 @@ export class ProseStreamRouter {
|
|
|
53
69
|
* no body — dropped, matching delivery which would deliver empty body). */
|
|
54
70
|
finish() {
|
|
55
71
|
const out = [];
|
|
56
|
-
if (this.state === '
|
|
57
|
-
this.emit(this.held, out);
|
|
72
|
+
if (this.state === 'hybrid-indent')
|
|
73
|
+
this.emit(this.held, out);
|
|
74
|
+
if (this.state === 'maybe-prefix') {
|
|
75
|
+
const full = this.opts.mode === 'hybrid' ? '>>>' : '>>';
|
|
76
|
+
const arrows = this.opts.mode === 'hybrid' ? this.held.trimStart() : this.held;
|
|
77
|
+
if (arrows !== full)
|
|
78
|
+
this.emit(this.held, out);
|
|
79
|
+
}
|
|
58
80
|
// prefix-token / after-token at EOF: prefix without body — nothing to emit.
|
|
59
81
|
this.held = '';
|
|
60
82
|
this.state = 'line-start';
|
|
@@ -63,7 +85,7 @@ export class ProseStreamRouter {
|
|
|
63
85
|
step(ch, out) {
|
|
64
86
|
switch (this.state) {
|
|
65
87
|
case 'body':
|
|
66
|
-
if (ch === '\n' && this.opts.mode
|
|
88
|
+
if (ch === '\n' && this.opts.mode !== 'locus') {
|
|
67
89
|
this.emit('\n', out);
|
|
68
90
|
this.state = 'line-start';
|
|
69
91
|
}
|
|
@@ -72,6 +94,11 @@ export class ProseStreamRouter {
|
|
|
72
94
|
}
|
|
73
95
|
return;
|
|
74
96
|
case 'line-start':
|
|
97
|
+
if (this.opts.mode === 'hybrid' && (ch === ' ' || ch === '\t')) {
|
|
98
|
+
this.state = 'hybrid-indent';
|
|
99
|
+
this.held = ch;
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
75
102
|
if (ch === '>') {
|
|
76
103
|
this.state = 'maybe-prefix';
|
|
77
104
|
this.held = '>';
|
|
@@ -80,32 +107,65 @@ export class ProseStreamRouter {
|
|
|
80
107
|
this.state = 'body';
|
|
81
108
|
this.step(ch, out);
|
|
82
109
|
return;
|
|
83
|
-
case '
|
|
84
|
-
if (
|
|
85
|
-
this.held
|
|
110
|
+
case 'hybrid-indent':
|
|
111
|
+
if (ch === ' ' || ch === '\t') {
|
|
112
|
+
this.held += ch;
|
|
86
113
|
return;
|
|
87
114
|
}
|
|
88
|
-
if (
|
|
115
|
+
if (ch === '>') {
|
|
116
|
+
this.held += ch;
|
|
117
|
+
this.state = 'maybe-prefix';
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
this.emit(this.held, out);
|
|
121
|
+
this.held = '';
|
|
122
|
+
this.state = 'body';
|
|
123
|
+
this.step(ch, out);
|
|
124
|
+
return;
|
|
125
|
+
case 'maybe-prefix': {
|
|
126
|
+
const prefix = this.opts.mode === 'hybrid' ? '>>>' : '>>';
|
|
127
|
+
const arrows = this.opts.mode === 'hybrid' ? this.held.trimStart() : this.held;
|
|
128
|
+
if (ch === '>' && arrows.length < prefix.length) {
|
|
129
|
+
this.held += '>';
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
if (arrows === prefix) {
|
|
133
|
+
if (this.opts.mode === 'hybrid' && (ch === ' ' || ch === '\t')) {
|
|
134
|
+
this.held = '';
|
|
135
|
+
this.state = 'prefix-gap';
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
89
138
|
if (ch === '\n' || ch === ' ' || ch === '\t') {
|
|
90
|
-
|
|
91
|
-
|
|
139
|
+
if (this.opts.mode === 'explicit')
|
|
140
|
+
this.emit(this.held, out);
|
|
92
141
|
this.held = '';
|
|
93
|
-
this.state = 'body';
|
|
94
|
-
|
|
142
|
+
this.state = ch === '\n' ? 'line-start' : 'body';
|
|
143
|
+
if (ch !== '\n')
|
|
144
|
+
this.step(ch, out);
|
|
95
145
|
return;
|
|
96
146
|
}
|
|
97
|
-
// real prefix begins
|
|
98
147
|
this.state = 'prefix-token';
|
|
99
148
|
this.token = ch;
|
|
100
149
|
this.held = '';
|
|
101
150
|
return;
|
|
102
151
|
}
|
|
103
|
-
// held === '>' and ch !== '>': plain body starting with '>'
|
|
104
152
|
this.emit(this.held, out);
|
|
105
153
|
this.held = '';
|
|
106
154
|
this.state = 'body';
|
|
107
155
|
this.step(ch, out);
|
|
108
156
|
return;
|
|
157
|
+
}
|
|
158
|
+
case 'prefix-gap':
|
|
159
|
+
if (ch === ' ' || ch === '\t')
|
|
160
|
+
return;
|
|
161
|
+
if (ch === '\n') {
|
|
162
|
+
this.target = null;
|
|
163
|
+
this.state = 'line-start';
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
this.state = 'prefix-token';
|
|
167
|
+
this.token = ch;
|
|
168
|
+
return;
|
|
109
169
|
case 'prefix-token':
|
|
110
170
|
if (ch === ' ' || ch === '\t') {
|
|
111
171
|
this.applyTarget();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prose-stream-router.js","sourceRoot":"","sources":["../../../src/mcpl/prose-stream-router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AASH,MAAM,OAAO,iBAAiB;IASlB;IARF,MAAM,CAAgB;IACtB,KAAK,GAAU,YAAY,CAAC;IAC5B,IAAI,GAAG,EAAE,CAAC,CAAM,+CAA+C;IAC/D,KAAK,GAAG,EAAE,CAAC,CAAK,qCAAqC;IACrD,OAAO,GAAG,KAAK,CAAC;IAChB,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEhD,YACU,IAOP;QAPO,SAAI,GAAJ,IAAI,CAOX;QAED,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;QACjC,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;YAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;IACjD,CAAC;IAED,oEAAoE;IACpE,SAAS;QACP,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,IAAI,CAAC,KAAa;QAChB,MAAM,GAAG,GAAkB,EAAE,CAAC;QAC9B,KAAK,MAAM,EAAE,IAAI,KAAK;YAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAC3C,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IAED;;gFAE4E;IAC5E,MAAM;QACJ,MAAM,GAAG,GAAkB,EAAE,CAAC;QAC9B,IAAI,IAAI,CAAC,KAAK,KAAK,
|
|
1
|
+
{"version":3,"file":"prose-stream-router.js","sourceRoot":"","sources":["../../../src/mcpl/prose-stream-router.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push-handler.d.ts","sourceRoot":"","sources":["../../../src/mcpl/push-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,KAAK,EAEV,eAAe,EACf,eAAe,EAChB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"push-handler.d.ts","sourceRoot":"","sources":["../../../src/mcpl/push-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,KAAK,EAEV,eAAe,EACf,eAAe,EAChB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAQlE;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,iBAAiB,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAgFD,qEAAqE;AACrE,UAAU,SAAS;IACjB,OAAO,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;IACvC,YAAY,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CACpE;AAMD,qBAAa,WAAW;IACtB,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,WAAW,CAAiC;IACpD,OAAO,CAAC,WAAW,CAA4D;IAC/E,OAAO,CAAC,sBAAsB,CAAC,CAAkE;IACjG,OAAO,CAAC,KAAK,CAAsB;gBAGjC,iBAAiB,EAAE,iBAAiB,EACpC,WAAW,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,EAC3C,WAAW,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,KAAK,IAAI,EACtE,sBAAsB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO;IAQ1F;;;;;;;;;;OAUG;IACH,eAAe,CACb,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,eAAe,EACvB,SAAS,CAAC,EAAE,SAAS,GACpB,IAAI;CAuFR"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* Spec reference: Section 9 (Push Events).
|
|
8
8
|
*/
|
|
9
9
|
import { McplFeatureSetError } from './feature-set-manager.js';
|
|
10
|
+
import { expandCoreTags } from './tags.js';
|
|
10
11
|
// ============================================================================
|
|
11
12
|
// Content conversion: McplContentBlock → membrane ContentBlock
|
|
12
13
|
// ============================================================================
|
|
@@ -99,7 +100,19 @@ export class PushHandler {
|
|
|
99
100
|
* 7. Respond with accepted + inferenceId
|
|
100
101
|
*/
|
|
101
102
|
handlePushEvent(serverId, params, responder) {
|
|
102
|
-
//
|
|
103
|
+
// §16.3: expand the normative chat:* core closure once, at entry, so
|
|
104
|
+
// every downstream consumer (wake matching, metadata, the queued event)
|
|
105
|
+
// sees the closed set. Producer `implies` edges are NOT consumed —
|
|
106
|
+
// advisory pending acceptance (§16.4). Tags were admitted before this
|
|
107
|
+
// point and grant nothing (§16.6).
|
|
108
|
+
if (params.tags)
|
|
109
|
+
params.tags = expandCoreTags(params.tags);
|
|
110
|
+
// 1. Validate feature set. §6.6: rejection is diagnostics, not
|
|
111
|
+
// authorization, and MUST be a JSON-RPC error object — not a result
|
|
112
|
+
// carrying a failure flag. (The old `{accepted:false, reason}` result
|
|
113
|
+
// was AUDIT-001's finding: the error factories existed and were never
|
|
114
|
+
// invoked.) Falls back to the result shape only for a legacy responder
|
|
115
|
+
// with no error path.
|
|
103
116
|
try {
|
|
104
117
|
this.featureSetManager.validateInbound(serverId, params.featureSet);
|
|
105
118
|
}
|
|
@@ -110,7 +123,12 @@ export class PushHandler {
|
|
|
110
123
|
// Loud rejection — a rejected push event is an agent that silently
|
|
111
124
|
// never hears the message. (2026-07-09 diagnosability pass.)
|
|
112
125
|
console.error(`[push-event-rejected] server=${serverId} eventId=${params.eventId} reason=${reason}`);
|
|
113
|
-
|
|
126
|
+
if (err instanceof McplFeatureSetError && responder?.respondError) {
|
|
127
|
+
responder.respondError(err.code, reason, { featureSet: err.featureSet });
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
responder?.respond({ accepted: false, reason });
|
|
131
|
+
}
|
|
114
132
|
return;
|
|
115
133
|
}
|
|
116
134
|
// 2. Deduplicate by eventId
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push-handler.js","sourceRoot":"","sources":["../../../src/mcpl/push-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAUH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"push-handler.js","sourceRoot":"","sources":["../../../src/mcpl/push-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
* stdio and WebSocket behave identically above the transport seam.
|
|
10
10
|
*/
|
|
11
11
|
import { EventEmitter } from 'node:events';
|
|
12
|
-
import
|
|
12
|
+
import { CapabilityGrant } from './capability-grant.js';
|
|
13
|
+
import type { McplServerConfig, McplCapabilities, McplHostCapabilities, BeforeInferenceParams, BeforeInferenceResult, FeatureSetsUpdateParams, FeatureSetsUpdateResult, InferenceChunkParams, InferenceLifecycleParams, StateRollbackParams, StateRollbackResult, ChannelsOpenParams, ChannelsOpenResult, ChannelsCloseParams, ChannelsCloseResult, ChannelsAcknowledgeParams, ChannelsAcknowledgeResult, ChannelsListResult, ChannelsPublishParams, ChannelsPublishResult, ChannelsOutgoingChunkParams, ChannelsOutgoingCompleteParams, McpToolDefinition, McpToolCallResult } from './types.js';
|
|
13
14
|
/**
|
|
14
15
|
* McplServerConnection manages a single JSON-RPC 2.0 connection to an
|
|
15
16
|
* MCPL server over stdio. Use the static `connect()` factory to create
|
|
@@ -22,7 +23,6 @@ import type { McplServerConfig, McplCapabilities, McplHostCapabilities, BeforeIn
|
|
|
22
23
|
* - `'channels-register'` — Server sent `channels/register`
|
|
23
24
|
* - `'channels-changed'` — Server sent `channels/changed`
|
|
24
25
|
* - `'channels-incoming'` — Server sent `channels/incoming`
|
|
25
|
-
* - `'feature-sets-changed'` — Server sent `featureSets/changed`
|
|
26
26
|
* - `'error'` — Connection-level error
|
|
27
27
|
* - `'close'` — Connection closed
|
|
28
28
|
* - `'connect-failed'` — Initial connect failed; background retry scheduled
|
|
@@ -32,8 +32,57 @@ import type { McplServerConfig, McplCapabilities, McplHostCapabilities, BeforeIn
|
|
|
32
32
|
export declare class McplServerConnection extends EventEmitter {
|
|
33
33
|
/** Unique server identifier from config. */
|
|
34
34
|
readonly id: string;
|
|
35
|
-
/** MCPL capabilities negotiated during the initialize handshake
|
|
35
|
+
/** MCPL capabilities negotiated during the initialize handshake — after
|
|
36
|
+
* host-side capability scoping (enabledCapabilities/disabledCapabilities)
|
|
37
|
+
* — or null if the server does not support MCPL. */
|
|
36
38
|
capabilities: McplCapabilities | null;
|
|
39
|
+
/** Dotted paths of advertised capabilities the host config masked at the
|
|
40
|
+
* last handshake (empty when no scoping is configured). Inbound methods
|
|
41
|
+
* gated by a masked capability are rejected in setupMessageRouting. */
|
|
42
|
+
droppedCapabilities: ReadonlySet<string>;
|
|
43
|
+
/** OUTER standard MCP capabilities.tools was present at handshake (§5.1 —
|
|
44
|
+
* the sole source of the `tools` capability path). */
|
|
45
|
+
mcpToolsAdvertised: boolean;
|
|
46
|
+
/** Host-owned per-server authority for host/command (config
|
|
47
|
+
* allowHostCommands, default false). No capability path exists and the
|
|
48
|
+
* grant cannot confer it — server params never decide admin authority. */
|
|
49
|
+
allowHostCommands: boolean;
|
|
50
|
+
/**
|
|
51
|
+
* The effective capability grant (§5.4) — the sole authorization
|
|
52
|
+
* allowlist for this connection. Starts EMPTY: until the initial policy
|
|
53
|
+
* exchange completes (§5.3) nothing is granted and every privileged
|
|
54
|
+
* inbound method is rejected. The framework computes the grant from the
|
|
55
|
+
* masked advertisement and activates it via establishGrant() only after
|
|
56
|
+
* the featureSets/update Request is answered (expansion activates on
|
|
57
|
+
* receipt, §6.7); revocations re-call establishGrant() BEFORE the
|
|
58
|
+
* corresponding Request is sent (reduction applies first, §6.7).
|
|
59
|
+
*/
|
|
60
|
+
grant: CapabilityGrant;
|
|
61
|
+
/** True once the §5.3 initial policy Request has been answered. */
|
|
62
|
+
policyEstablished: boolean;
|
|
63
|
+
/**
|
|
64
|
+
* §17 manifest tracking (host side of RFC-003): what this host actually
|
|
65
|
+
* fetched and acted on — never the server's announcement log (§17.10:
|
|
66
|
+
* those are different facts). Read by the legibility surface.
|
|
67
|
+
*/
|
|
68
|
+
manifestState: {
|
|
69
|
+
/** revision of the last VALIDATED fetched manifest (server-authored,
|
|
70
|
+
* untrusted, equality-only) — null until a §17.4 fetch succeeds. */
|
|
71
|
+
lastValidatedRevision: string | null;
|
|
72
|
+
lastFetchedAt: number | null;
|
|
73
|
+
/** epoch ms of the last §6.7 receipt that activated a grant change. */
|
|
74
|
+
lastNegotiatedAt: number | null;
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Activate (or replace) the effective grant. Ordering is the caller's
|
|
78
|
+
* contract per §6.7: call BEFORE sending a reducing featureSets/update,
|
|
79
|
+
* AFTER the receipt for an expanding one.
|
|
80
|
+
*/
|
|
81
|
+
establishGrant(grant: CapabilityGrant): void;
|
|
82
|
+
/** A §5.3 grant belongs to one initialized transport epoch. Reconnecting
|
|
83
|
+
* performs a fresh initialize handshake, so authority from the dead epoch
|
|
84
|
+
* must be revoked before the replacement transport is exposed. */
|
|
85
|
+
private resetPolicyForTransportBoundary;
|
|
37
86
|
/** The active transport (stdio child or WebSocket). Null for a disconnected
|
|
38
87
|
* stub awaiting its first background reconnect. */
|
|
39
88
|
private transport;
|
|
@@ -92,6 +141,9 @@ export declare class McplServerConnection extends EventEmitter {
|
|
|
92
141
|
* new data-plane gate before the fresh transport is exposed.
|
|
93
142
|
*/
|
|
94
143
|
emit(event: string | symbol, ...args: unknown[]): boolean;
|
|
144
|
+
/** Event-name form of METHOD_TO_REQUIRED_CAPABILITY, for admission-time
|
|
145
|
+
* enforcement in emit(). */
|
|
146
|
+
private static readonly EVENT_TO_REQUIRED_CAPABILITY;
|
|
95
147
|
private static isControlPlaneEvent;
|
|
96
148
|
private static isLifecycleEvent;
|
|
97
149
|
/**
|
|
@@ -126,16 +178,30 @@ export declare class McplServerConnection extends EventEmitter {
|
|
|
126
178
|
private static createDisconnectedStub;
|
|
127
179
|
/** Send `context/beforeInference` and await result. */
|
|
128
180
|
sendBeforeInference(params: BeforeInferenceParams): Promise<BeforeInferenceResult>;
|
|
181
|
+
/** Send `featureSets/update` as a Notification. §6.7: valid ONLY for
|
|
182
|
+
* purely descriptive metadata that does not alter the grant. Any grant
|
|
183
|
+
* change — including the §5.3 initial policy — MUST use the Request form
|
|
184
|
+
* below. */
|
|
185
|
+
sendFeatureSetsUpdate(params: FeatureSetsUpdateParams): void;
|
|
129
186
|
/**
|
|
130
|
-
* Send `
|
|
131
|
-
*
|
|
132
|
-
*
|
|
187
|
+
* Send `featureSets/update` as a Request (§5.3, §6.7) and await the
|
|
188
|
+
* degradation receipt. A short timeout, distinct from tool-call timeouts:
|
|
189
|
+
* a pre-0.5 server treats the Request as a notification and never
|
|
190
|
+
* answers, and per §6.7 an unanswered expansion simply does not activate
|
|
191
|
+
* — the caller leaves the grant empty and the connection MCP-only.
|
|
133
192
|
*/
|
|
134
|
-
|
|
135
|
-
/** Send `featureSets/update` notification. */
|
|
136
|
-
sendFeatureSetsUpdate(params: FeatureSetsUpdateParams): void;
|
|
193
|
+
sendFeatureSetsUpdateRequest(params: FeatureSetsUpdateParams, timeoutMs?: number): Promise<FeatureSetsUpdateResult>;
|
|
137
194
|
/** Send `inference/chunk` notification. */
|
|
138
195
|
sendInferenceChunk(params: InferenceChunkParams): void;
|
|
196
|
+
/** Send `inference/lifecycle` notification (§10.5). Best-effort. */
|
|
197
|
+
sendInferenceLifecycle(params: InferenceLifecycleParams): void;
|
|
198
|
+
/**
|
|
199
|
+
* Fetch the server's complete current manifest (§17.4) — the
|
|
200
|
+
* experimental.mcpl object in the same shape initialize carries, never a
|
|
201
|
+
* delta. The fetched CONTENT is authoritative for every decision; the
|
|
202
|
+
* revision is only the cheap path (§17.1).
|
|
203
|
+
*/
|
|
204
|
+
sendManifestRequest(timeoutMs?: number): Promise<McplCapabilities | null>;
|
|
139
205
|
/** Send `state/rollback` request and await result. */
|
|
140
206
|
sendStateRollback(params: StateRollbackParams): Promise<StateRollbackResult>;
|
|
141
207
|
/** Send `channels/open` request and await result. */
|
|
@@ -226,6 +292,24 @@ export declare class McplServerConnection extends EventEmitter {
|
|
|
226
292
|
* Map from JSON-RPC method name to the EventEmitter event name.
|
|
227
293
|
*/
|
|
228
294
|
private static readonly METHOD_TO_EVENT;
|
|
295
|
+
/**
|
|
296
|
+
* Inbound (server-initiated) method → required capability path, per SPEC
|
|
297
|
+
* §14.1's table plus the non-channel privileged methods. **Positive-grant
|
|
298
|
+
* enforcement** (§5.4): the method is admitted only when the effective
|
|
299
|
+
* grant contains the named path — absence is denial, and before the
|
|
300
|
+
* initial policy exchange completes the grant is empty, so everything
|
|
301
|
+
* privileged is rejected (§5.3).
|
|
302
|
+
*
|
|
303
|
+
* This replaces the earlier `droppedCapabilities` deny-list check, which
|
|
304
|
+
* could only deny what had been advertised-then-masked: a server that
|
|
305
|
+
* never advertised a capability at all was never denied. (Adjudicated in
|
|
306
|
+
* review of PR #75; the mask itself is retained as the config-policy
|
|
307
|
+
* layer feeding the grant.)
|
|
308
|
+
*
|
|
309
|
+
* Channel methods key on their specific sub-capabilities, not the bare
|
|
310
|
+
* `channels` parent — a bare parent grants nothing (§5.4).
|
|
311
|
+
*/
|
|
312
|
+
private static readonly METHOD_TO_REQUIRED_CAPABILITY;
|
|
229
313
|
/**
|
|
230
314
|
* Bind all transport-level handlers (inbound routing, lifecycle, stderr) to a
|
|
231
315
|
* transport. Called from the constructor and again from attemptReconnect when
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-connection.d.ts","sourceRoot":"","sources":["../../../src/mcpl/server-connection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,EAGpB,qBAAqB,EACrB,qBAAqB,EACrB,
|
|
1
|
+
{"version":3,"file":"server-connection.d.ts","sourceRoot":"","sources":["../../../src/mcpl/server-connection.ts"],"names":[],"mappings":"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"}
|