@animalabs/agent-framework 0.5.6 → 0.6.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 +20 -4
- package/dist/src/agent.d.ts.map +1 -1
- package/dist/src/agent.js +45 -14
- package/dist/src/agent.js.map +1 -1
- package/dist/src/framework.d.ts +220 -5
- package/dist/src/framework.d.ts.map +1 -1
- package/dist/src/framework.js +1489 -69
- package/dist/src/framework.js.map +1 -1
- package/dist/src/gate/event-gate.d.ts +71 -1
- package/dist/src/gate/event-gate.d.ts.map +1 -1
- package/dist/src/gate/event-gate.js +292 -9
- package/dist/src/gate/event-gate.js.map +1 -1
- package/dist/src/gate/gate-script-worker.d.ts +2 -0
- package/dist/src/gate/gate-script-worker.d.ts.map +1 -0
- package/dist/src/gate/gate-script-worker.js +69 -0
- package/dist/src/gate/gate-script-worker.js.map +1 -0
- package/dist/src/gate/gate-script.d.ts +44 -0
- package/dist/src/gate/gate-script.d.ts.map +1 -0
- package/dist/src/gate/gate-script.js +164 -0
- package/dist/src/gate/gate-script.js.map +1 -0
- package/dist/src/gate/types.d.ts +35 -3
- package/dist/src/gate/types.d.ts.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 +2 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcpl/channel-registry.d.ts +93 -1
- package/dist/src/mcpl/channel-registry.d.ts.map +1 -1
- package/dist/src/mcpl/channel-registry.js +260 -6
- package/dist/src/mcpl/channel-registry.js.map +1 -1
- package/dist/src/mcpl/checkpoint-manager.d.ts +7 -0
- package/dist/src/mcpl/checkpoint-manager.d.ts.map +1 -1
- package/dist/src/mcpl/checkpoint-manager.js +15 -0
- package/dist/src/mcpl/checkpoint-manager.js.map +1 -1
- package/dist/src/mcpl/conversation-router.d.ts +161 -0
- package/dist/src/mcpl/conversation-router.d.ts.map +1 -0
- package/dist/src/mcpl/conversation-router.js +179 -0
- package/dist/src/mcpl/conversation-router.js.map +1 -0
- package/dist/src/mcpl/feature-set-manager.d.ts.map +1 -1
- package/dist/src/mcpl/feature-set-manager.js +10 -1
- package/dist/src/mcpl/feature-set-manager.js.map +1 -1
- package/dist/src/mcpl/index.d.ts +2 -0
- package/dist/src/mcpl/index.d.ts.map +1 -1
- package/dist/src/mcpl/index.js +2 -0
- package/dist/src/mcpl/index.js.map +1 -1
- package/dist/src/mcpl/push-handler.d.ts.map +1 -1
- package/dist/src/mcpl/push-handler.js +1 -0
- package/dist/src/mcpl/push-handler.js.map +1 -1
- package/dist/src/mcpl/server-connection.d.ts +35 -30
- package/dist/src/mcpl/server-connection.d.ts.map +1 -1
- package/dist/src/mcpl/server-connection.js +149 -206
- package/dist/src/mcpl/server-connection.js.map +1 -1
- package/dist/src/mcpl/transport.d.ts +98 -0
- package/dist/src/mcpl/transport.d.ts.map +1 -0
- package/dist/src/mcpl/transport.js +281 -0
- package/dist/src/mcpl/transport.js.map +1 -0
- package/dist/src/mcpl/types.d.ts +42 -2
- package/dist/src/mcpl/types.d.ts.map +1 -1
- package/dist/src/mcpl/types.js.map +1 -1
- package/dist/src/module-registry.d.ts +5 -1
- package/dist/src/module-registry.d.ts.map +1 -1
- package/dist/src/module-registry.js +16 -2
- package/dist/src/module-registry.js.map +1 -1
- package/dist/src/modules/discord/index.d.ts +10 -0
- package/dist/src/modules/discord/index.d.ts.map +1 -1
- package/dist/src/modules/discord/index.js +83 -0
- package/dist/src/modules/discord/index.js.map +1 -1
- package/dist/src/prose-segments.d.ts +18 -0
- package/dist/src/prose-segments.d.ts.map +1 -0
- package/dist/src/prose-segments.js +39 -0
- package/dist/src/prose-segments.js.map +1 -0
- package/dist/src/runtime/liveness-watchdog-worker.d.ts +2 -0
- package/dist/src/runtime/liveness-watchdog-worker.d.ts.map +1 -0
- package/dist/src/runtime/liveness-watchdog-worker.js +57 -0
- package/dist/src/runtime/liveness-watchdog-worker.js.map +1 -0
- package/dist/src/runtime/liveness-watchdog.d.ts +36 -0
- package/dist/src/runtime/liveness-watchdog.d.ts.map +1 -0
- package/dist/src/runtime/liveness-watchdog.js +106 -0
- package/dist/src/runtime/liveness-watchdog.js.map +1 -0
- package/dist/src/tool-result-history.d.ts +17 -0
- package/dist/src/tool-result-history.d.ts.map +1 -0
- package/dist/src/tool-result-history.js +60 -0
- package/dist/src/tool-result-history.js.map +1 -0
- package/dist/src/types/agent.d.ts +21 -0
- package/dist/src/types/agent.d.ts.map +1 -1
- package/dist/src/types/framework.d.ts +22 -0
- package/dist/src/types/framework.d.ts.map +1 -1
- package/dist/src/types/module.d.ts +27 -0
- package/dist/src/types/module.d.ts.map +1 -1
- package/dist/src/types/trace.d.ts +28 -0
- package/dist/src/types/trace.d.ts.map +1 -1
- package/dist/test/channel-registry-routing.test.d.ts +2 -0
- package/dist/test/channel-registry-routing.test.d.ts.map +1 -0
- package/dist/test/channel-registry-routing.test.js +182 -0
- package/dist/test/channel-registry-routing.test.js.map +1 -0
- package/dist/test/checkpoint-attribution.test.d.ts +2 -0
- package/dist/test/checkpoint-attribution.test.d.ts.map +1 -0
- package/dist/test/checkpoint-attribution.test.js +40 -0
- package/dist/test/checkpoint-attribution.test.js.map +1 -0
- package/dist/test/conversation-router.test.d.ts +2 -0
- package/dist/test/conversation-router.test.d.ts.map +1 -0
- package/dist/test/conversation-router.test.js +160 -0
- package/dist/test/conversation-router.test.js.map +1 -0
- package/dist/test/conversation-routing.test.d.ts +7 -0
- package/dist/test/conversation-routing.test.d.ts.map +1 -0
- package/dist/test/conversation-routing.test.js +203 -0
- package/dist/test/conversation-routing.test.js.map +1 -0
- package/dist/test/event-gate-policy-mutation.test.d.ts +2 -0
- package/dist/test/event-gate-policy-mutation.test.d.ts.map +1 -0
- package/dist/test/event-gate-policy-mutation.test.js +137 -0
- package/dist/test/event-gate-policy-mutation.test.js.map +1 -0
- package/dist/test/event-gate-script.test.d.ts +2 -0
- package/dist/test/event-gate-script.test.d.ts.map +1 -0
- package/dist/test/event-gate-script.test.js +95 -0
- package/dist/test/event-gate-script.test.js.map +1 -0
- package/dist/test/event-gate-tags.test.d.ts +2 -0
- package/dist/test/event-gate-tags.test.d.ts.map +1 -0
- package/dist/test/event-gate-tags.test.js +76 -0
- package/dist/test/event-gate-tags.test.js.map +1 -0
- package/dist/test/framework.test.js +73 -1
- package/dist/test/framework.test.js.map +1 -1
- package/dist/test/helpers/mock-membrane.d.ts +41 -0
- package/dist/test/helpers/mock-membrane.d.ts.map +1 -0
- package/dist/test/helpers/mock-membrane.js +161 -0
- package/dist/test/helpers/mock-membrane.js.map +1 -0
- package/dist/test/inference-failure-observability.test.d.ts +2 -0
- package/dist/test/inference-failure-observability.test.d.ts.map +1 -0
- package/dist/test/inference-failure-observability.test.js +75 -0
- package/dist/test/inference-failure-observability.test.js.map +1 -0
- package/dist/test/liveness-watchdog.test.d.ts +2 -0
- package/dist/test/liveness-watchdog.test.d.ts.map +1 -0
- package/dist/test/liveness-watchdog.test.js +78 -0
- package/dist/test/liveness-watchdog.test.js.map +1 -0
- package/dist/test/mcpl-ws-transport.test.d.ts +2 -0
- package/dist/test/mcpl-ws-transport.test.d.ts.map +1 -0
- package/dist/test/mcpl-ws-transport.test.js +155 -0
- package/dist/test/mcpl-ws-transport.test.js.map +1 -0
- package/dist/test/prose-segments.test.d.ts +2 -0
- package/dist/test/prose-segments.test.d.ts.map +1 -0
- package/dist/test/prose-segments.test.js +52 -0
- package/dist/test/prose-segments.test.js.map +1 -0
- package/dist/test/tool-result-history.test.d.ts +7 -0
- package/dist/test/tool-result-history.test.d.ts.map +1 -0
- package/dist/test/tool-result-history.test.js +77 -0
- package/dist/test/tool-result-history.test.js.map +1 -0
- package/dist/test/trunk-channel-routing.test.d.ts +19 -0
- package/dist/test/trunk-channel-routing.test.d.ts.map +1 -0
- package/dist/test/trunk-channel-routing.test.js +175 -0
- package/dist/test/trunk-channel-routing.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/src/agent.ts +53 -18
- package/src/framework.ts +1685 -71
- package/src/gate/event-gate.ts +297 -9
- package/src/gate/gate-script-worker.ts +73 -0
- package/src/gate/gate-script.ts +180 -0
- package/src/gate/types.ts +36 -3
- package/src/index.ts +12 -0
- package/src/mcpl/channel-registry.ts +331 -6
- package/src/mcpl/checkpoint-manager.ts +16 -0
- package/src/mcpl/conversation-router.ts +284 -0
- package/src/mcpl/feature-set-manager.ts +14 -1
- package/src/mcpl/index.ts +12 -0
- package/src/mcpl/push-handler.ts +1 -0
- package/src/mcpl/server-connection.ts +157 -224
- package/src/mcpl/transport.ts +307 -0
- package/src/mcpl/types.ts +49 -2
- package/src/module-registry.ts +25 -2
- package/src/modules/discord/index.ts +93 -0
- package/src/prose-segments.ts +42 -0
- package/src/runtime/liveness-watchdog-worker.ts +66 -0
- package/src/runtime/liveness-watchdog.ts +122 -0
- package/src/tool-result-history.ts +57 -0
- package/src/types/agent.ts +21 -0
- package/src/types/framework.ts +24 -0
- package/src/types/module.ts +29 -0
- package/src/types/trace.ts +36 -0
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ConversationRouter — routes incoming channel messages to per-channel
|
|
3
|
+
* conversation agents ("forks") instead of the primary conversation.
|
|
4
|
+
*
|
|
5
|
+
* The router is a lookup table plus policy — deliberately no LLM in the
|
|
6
|
+
* routing path. The framework consults it from handleMcplChannelIncoming:
|
|
7
|
+
*
|
|
8
|
+
* - A channel with an active binding routes to its bound agent. Whether the
|
|
9
|
+
* message *triggers* inference (vs. just landing in the fork's context) is
|
|
10
|
+
* a separate per-channel-kind rule: in a busy channel everything is case
|
|
11
|
+
* input but only mentions demand a reply.
|
|
12
|
+
* - An unbound channel binds (→ the framework spawns a fork from the
|
|
13
|
+
* template/trunk agent) when the bind rule matches: by default any message
|
|
14
|
+
* in a DM, an explicit bot mention in a channel (`metadata.mentioned`,
|
|
15
|
+
* set server-side by the platform adapters).
|
|
16
|
+
* - Everything else is left unrouted and dropped by the framework — the
|
|
17
|
+
* trunk is a dormant template, not a listener.
|
|
18
|
+
*
|
|
19
|
+
* Bindings expire after an idle TTL. Expiry runs a final closure turn on the
|
|
20
|
+
* fork (see framework wiring) and unbinds; the next qualifying message on
|
|
21
|
+
* that channel spawns a *fresh* fork (generation + 1) from the current
|
|
22
|
+
* trunk, so handbook/template updates propagate between engagements.
|
|
23
|
+
*
|
|
24
|
+
* The binding table is in-memory — bindings are re-established by the next
|
|
25
|
+
* qualifying message after a restart. The generation counters, by contrast,
|
|
26
|
+
* are persisted by the framework (exportGenerations/hydrateGenerations):
|
|
27
|
+
* a restarted host must NOT reuse generation 1's agent name, or it would
|
|
28
|
+
* reopen the previous engagement's Chronicle namespace and re-seed the
|
|
29
|
+
* template context on top of the old history.
|
|
30
|
+
*/
|
|
31
|
+
import type { ContextStrategy } from '@animalabs/context-manager';
|
|
32
|
+
import type { ChannelDescriptor } from './types.js';
|
|
33
|
+
/** When an unbound channel acquires a fork. */
|
|
34
|
+
export type BindRule = 'always' | 'mention' | 'never';
|
|
35
|
+
/** When a message on a bound channel triggers inference (it always lands in
|
|
36
|
+
* the fork's context). */
|
|
37
|
+
export type TriggerRule = 'always' | 'mention';
|
|
38
|
+
/** How a channel is classified for bind/trigger rules. Group DMs are their
|
|
39
|
+
* own kind: the bot was added deliberately (so they bind like DMs) but they
|
|
40
|
+
* host multi-human chatter (so they trigger like channels by default —
|
|
41
|
+
* inferring on every message of a four-human group DM is a firehose). */
|
|
42
|
+
export type ChannelKind = 'dm' | 'groupDm' | 'channel';
|
|
43
|
+
export interface ConversationRouterConfig {
|
|
44
|
+
/** Agent whose context seeds new forks (the "trunk"/warm checkpoint). */
|
|
45
|
+
templateAgent: string;
|
|
46
|
+
/** Bind rules per channel kind.
|
|
47
|
+
* Defaults: dm 'always', groupDm 'always', channel 'mention'. */
|
|
48
|
+
bind?: {
|
|
49
|
+
dm?: BindRule;
|
|
50
|
+
groupDm?: BindRule;
|
|
51
|
+
channel?: BindRule;
|
|
52
|
+
};
|
|
53
|
+
/** Trigger rules per channel kind.
|
|
54
|
+
* Defaults: dm 'always', groupDm 'mention', channel 'mention'. */
|
|
55
|
+
trigger?: {
|
|
56
|
+
dm?: TriggerRule;
|
|
57
|
+
groupDm?: TriggerRule;
|
|
58
|
+
channel?: TriggerRule;
|
|
59
|
+
};
|
|
60
|
+
/** Idle time before a binding expires and the fork is closed. Default 12h. */
|
|
61
|
+
idleTtlMs?: number;
|
|
62
|
+
/** Final system-initiated user message sent to a fork on expiry. */
|
|
63
|
+
closurePrompt?: string;
|
|
64
|
+
/** Prefix for generated fork agent names. Default 'conversation'. */
|
|
65
|
+
agentPrefix?: string;
|
|
66
|
+
/**
|
|
67
|
+
* Fresh compression strategy per fork. Strategy instances are stateful and
|
|
68
|
+
* must not be shared between ContextManagers, so the template agent's own
|
|
69
|
+
* strategy is never reused — without a factory, forks get passthrough.
|
|
70
|
+
*/
|
|
71
|
+
strategyFactory?: () => ContextStrategy;
|
|
72
|
+
}
|
|
73
|
+
export interface ConversationBinding {
|
|
74
|
+
channelId: string;
|
|
75
|
+
agentName: string;
|
|
76
|
+
/** Engagement counter per channel — fresh forks get a new generation. */
|
|
77
|
+
generation: number;
|
|
78
|
+
boundAt: number;
|
|
79
|
+
lastActivity: number;
|
|
80
|
+
}
|
|
81
|
+
/** The facts route() needs about one incoming message, pre-extracted by the
|
|
82
|
+
* framework so the router stays free of event-shape knowledge. */
|
|
83
|
+
export interface IncomingMessageFacts {
|
|
84
|
+
channelId: string;
|
|
85
|
+
/** Personal mention of the bot (metadata.mentioned from the adapter). */
|
|
86
|
+
mentioned: boolean;
|
|
87
|
+
/** Channel classification (see classifyChannel). */
|
|
88
|
+
kind: ChannelKind;
|
|
89
|
+
/** Clock injection for tests; defaults to Date.now(). */
|
|
90
|
+
now?: number;
|
|
91
|
+
}
|
|
92
|
+
export type RoutingDecision =
|
|
93
|
+
/** Channel already has a fork — deliver there. */
|
|
94
|
+
{
|
|
95
|
+
kind: 'existing';
|
|
96
|
+
agentName: string;
|
|
97
|
+
trigger: boolean;
|
|
98
|
+
}
|
|
99
|
+
/** Bind rule matched — framework should spawn this agent, then bind(). */
|
|
100
|
+
| {
|
|
101
|
+
kind: 'spawn';
|
|
102
|
+
agentName: string;
|
|
103
|
+
generation: number;
|
|
104
|
+
trigger: boolean;
|
|
105
|
+
}
|
|
106
|
+
/** No binding and bind rule didn't match — drop. */
|
|
107
|
+
| {
|
|
108
|
+
kind: 'unbound';
|
|
109
|
+
};
|
|
110
|
+
export declare const DEFAULT_CLOSURE_PROMPT: string;
|
|
111
|
+
export declare class ConversationRouter {
|
|
112
|
+
private config;
|
|
113
|
+
/** Active bindings, keyed by channelId. */
|
|
114
|
+
private bindings;
|
|
115
|
+
/** Engagement counter per channel — survives unbind, so a re-bound channel
|
|
116
|
+
* gets a distinct fork agent name. */
|
|
117
|
+
private generations;
|
|
118
|
+
constructor(config: ConversationRouterConfig);
|
|
119
|
+
get templateAgent(): string;
|
|
120
|
+
get closurePrompt(): string;
|
|
121
|
+
get idleTtlMs(): number;
|
|
122
|
+
get strategyFactory(): (() => ContextStrategy) | undefined;
|
|
123
|
+
/**
|
|
124
|
+
* Decide where an incoming message goes. Pure read except for refreshing
|
|
125
|
+
* lastActivity on an existing binding — a 'spawn' decision does NOT create
|
|
126
|
+
* the binding; the framework calls bind() after the fork agent actually
|
|
127
|
+
* exists, so a failed spawn doesn't leave a dangling route.
|
|
128
|
+
*/
|
|
129
|
+
route(facts: IncomingMessageFacts): RoutingDecision;
|
|
130
|
+
/**
|
|
131
|
+
* Record a binding after the framework successfully spawned the fork.
|
|
132
|
+
* Returns the new binding.
|
|
133
|
+
*/
|
|
134
|
+
bind(channelId: string, agentName: string, generation: number, now?: number): ConversationBinding;
|
|
135
|
+
unbind(channelId: string): void;
|
|
136
|
+
getBinding(channelId: string): ConversationBinding | undefined;
|
|
137
|
+
/** Reverse lookup: the channel an agent is bound to, if any. */
|
|
138
|
+
channelForAgent(agentName: string): string | undefined;
|
|
139
|
+
getBindings(): ConversationBinding[];
|
|
140
|
+
/** Bindings whose idle TTL has elapsed. Does not unbind — the framework
|
|
141
|
+
* runs the closure turn first, then calls unbind(). */
|
|
142
|
+
expired(now?: number): ConversationBinding[];
|
|
143
|
+
/**
|
|
144
|
+
* Classify a channel from its descriptor and/or message metadata. Slack
|
|
145
|
+
* marks DMs/group DMs with is_im/is_mpim on the channel descriptor and
|
|
146
|
+
* channel_type on each message; other platforms can adopt either
|
|
147
|
+
* convention.
|
|
148
|
+
*/
|
|
149
|
+
static classifyChannel(descriptor?: ChannelDescriptor, messageMetadata?: Record<string, unknown>): ChannelKind;
|
|
150
|
+
/** Export the per-channel engagement counters for persistence — they must
|
|
151
|
+
* survive restarts, or a re-engaged channel reuses generation 1's name and
|
|
152
|
+
* reopens (and re-seeds) the previous engagement's Chronicle namespace. */
|
|
153
|
+
exportGenerations(): Record<string, number>;
|
|
154
|
+
/** Restore persisted engagement counters (see exportGenerations). */
|
|
155
|
+
hydrateGenerations(generations: Record<string, number>): void;
|
|
156
|
+
private shouldTrigger;
|
|
157
|
+
/** `conversation-slack-C123-g2` — agent names double as Chronicle
|
|
158
|
+
* namespace components, so the channel id is sanitized. */
|
|
159
|
+
private forkAgentName;
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=conversation-router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation-router.d.ts","sourceRoot":"","sources":["../../../src/mcpl/conversation-router.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ConversationRouter — routes incoming channel messages to per-channel
|
|
3
|
+
* conversation agents ("forks") instead of the primary conversation.
|
|
4
|
+
*
|
|
5
|
+
* The router is a lookup table plus policy — deliberately no LLM in the
|
|
6
|
+
* routing path. The framework consults it from handleMcplChannelIncoming:
|
|
7
|
+
*
|
|
8
|
+
* - A channel with an active binding routes to its bound agent. Whether the
|
|
9
|
+
* message *triggers* inference (vs. just landing in the fork's context) is
|
|
10
|
+
* a separate per-channel-kind rule: in a busy channel everything is case
|
|
11
|
+
* input but only mentions demand a reply.
|
|
12
|
+
* - An unbound channel binds (→ the framework spawns a fork from the
|
|
13
|
+
* template/trunk agent) when the bind rule matches: by default any message
|
|
14
|
+
* in a DM, an explicit bot mention in a channel (`metadata.mentioned`,
|
|
15
|
+
* set server-side by the platform adapters).
|
|
16
|
+
* - Everything else is left unrouted and dropped by the framework — the
|
|
17
|
+
* trunk is a dormant template, not a listener.
|
|
18
|
+
*
|
|
19
|
+
* Bindings expire after an idle TTL. Expiry runs a final closure turn on the
|
|
20
|
+
* fork (see framework wiring) and unbinds; the next qualifying message on
|
|
21
|
+
* that channel spawns a *fresh* fork (generation + 1) from the current
|
|
22
|
+
* trunk, so handbook/template updates propagate between engagements.
|
|
23
|
+
*
|
|
24
|
+
* The binding table is in-memory — bindings are re-established by the next
|
|
25
|
+
* qualifying message after a restart. The generation counters, by contrast,
|
|
26
|
+
* are persisted by the framework (exportGenerations/hydrateGenerations):
|
|
27
|
+
* a restarted host must NOT reuse generation 1's agent name, or it would
|
|
28
|
+
* reopen the previous engagement's Chronicle namespace and re-seed the
|
|
29
|
+
* template context on top of the old history.
|
|
30
|
+
*/
|
|
31
|
+
const DEFAULT_IDLE_TTL_MS = 12 * 60 * 60 * 1000;
|
|
32
|
+
export const DEFAULT_CLOSURE_PROMPT = '[system] This engagement is closing due to inactivity. Finalize your ' +
|
|
33
|
+
'work: post any promised results to the channel and record outstanding ' +
|
|
34
|
+
'threads as unresolved. Do not ask follow-up questions.';
|
|
35
|
+
// ============================================================================
|
|
36
|
+
// ConversationRouter
|
|
37
|
+
// ============================================================================
|
|
38
|
+
export class ConversationRouter {
|
|
39
|
+
config;
|
|
40
|
+
/** Active bindings, keyed by channelId. */
|
|
41
|
+
bindings = new Map();
|
|
42
|
+
/** Engagement counter per channel — survives unbind, so a re-bound channel
|
|
43
|
+
* gets a distinct fork agent name. */
|
|
44
|
+
generations = new Map();
|
|
45
|
+
constructor(config) {
|
|
46
|
+
this.config = config;
|
|
47
|
+
}
|
|
48
|
+
get templateAgent() {
|
|
49
|
+
return this.config.templateAgent;
|
|
50
|
+
}
|
|
51
|
+
get closurePrompt() {
|
|
52
|
+
return this.config.closurePrompt ?? DEFAULT_CLOSURE_PROMPT;
|
|
53
|
+
}
|
|
54
|
+
get idleTtlMs() {
|
|
55
|
+
return this.config.idleTtlMs ?? DEFAULT_IDLE_TTL_MS;
|
|
56
|
+
}
|
|
57
|
+
get strategyFactory() {
|
|
58
|
+
return this.config.strategyFactory;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Decide where an incoming message goes. Pure read except for refreshing
|
|
62
|
+
* lastActivity on an existing binding — a 'spawn' decision does NOT create
|
|
63
|
+
* the binding; the framework calls bind() after the fork agent actually
|
|
64
|
+
* exists, so a failed spawn doesn't leave a dangling route.
|
|
65
|
+
*/
|
|
66
|
+
route(facts) {
|
|
67
|
+
const now = facts.now ?? Date.now();
|
|
68
|
+
const existing = this.bindings.get(facts.channelId);
|
|
69
|
+
if (existing) {
|
|
70
|
+
existing.lastActivity = now;
|
|
71
|
+
return {
|
|
72
|
+
kind: 'existing',
|
|
73
|
+
agentName: existing.agentName,
|
|
74
|
+
trigger: this.shouldTrigger(facts),
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
const bindRule = this.config.bind?.[facts.kind]
|
|
78
|
+
?? (facts.kind === 'channel' ? 'mention' : 'always');
|
|
79
|
+
const binds = bindRule === 'always' || (bindRule === 'mention' && facts.mentioned);
|
|
80
|
+
if (!binds) {
|
|
81
|
+
return { kind: 'unbound' };
|
|
82
|
+
}
|
|
83
|
+
const generation = (this.generations.get(facts.channelId) ?? 0) + 1;
|
|
84
|
+
return {
|
|
85
|
+
kind: 'spawn',
|
|
86
|
+
agentName: this.forkAgentName(facts.channelId, generation),
|
|
87
|
+
generation,
|
|
88
|
+
trigger: this.shouldTrigger(facts),
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Record a binding after the framework successfully spawned the fork.
|
|
93
|
+
* Returns the new binding.
|
|
94
|
+
*/
|
|
95
|
+
bind(channelId, agentName, generation, now = Date.now()) {
|
|
96
|
+
this.generations.set(channelId, generation);
|
|
97
|
+
const binding = {
|
|
98
|
+
channelId,
|
|
99
|
+
agentName,
|
|
100
|
+
generation,
|
|
101
|
+
boundAt: now,
|
|
102
|
+
lastActivity: now,
|
|
103
|
+
};
|
|
104
|
+
this.bindings.set(channelId, binding);
|
|
105
|
+
return binding;
|
|
106
|
+
}
|
|
107
|
+
unbind(channelId) {
|
|
108
|
+
this.bindings.delete(channelId);
|
|
109
|
+
}
|
|
110
|
+
getBinding(channelId) {
|
|
111
|
+
return this.bindings.get(channelId);
|
|
112
|
+
}
|
|
113
|
+
/** Reverse lookup: the channel an agent is bound to, if any. */
|
|
114
|
+
channelForAgent(agentName) {
|
|
115
|
+
for (const binding of this.bindings.values()) {
|
|
116
|
+
if (binding.agentName === agentName)
|
|
117
|
+
return binding.channelId;
|
|
118
|
+
}
|
|
119
|
+
return undefined;
|
|
120
|
+
}
|
|
121
|
+
getBindings() {
|
|
122
|
+
return Array.from(this.bindings.values());
|
|
123
|
+
}
|
|
124
|
+
/** Bindings whose idle TTL has elapsed. Does not unbind — the framework
|
|
125
|
+
* runs the closure turn first, then calls unbind(). */
|
|
126
|
+
expired(now = Date.now()) {
|
|
127
|
+
const ttl = this.idleTtlMs;
|
|
128
|
+
return this.getBindings().filter((b) => now - b.lastActivity >= ttl);
|
|
129
|
+
}
|
|
130
|
+
// ==========================================================================
|
|
131
|
+
// Helpers
|
|
132
|
+
// ==========================================================================
|
|
133
|
+
/**
|
|
134
|
+
* Classify a channel from its descriptor and/or message metadata. Slack
|
|
135
|
+
* marks DMs/group DMs with is_im/is_mpim on the channel descriptor and
|
|
136
|
+
* channel_type on each message; other platforms can adopt either
|
|
137
|
+
* convention.
|
|
138
|
+
*/
|
|
139
|
+
static classifyChannel(descriptor, messageMetadata) {
|
|
140
|
+
const meta = descriptor?.metadata;
|
|
141
|
+
if (meta?.is_im === true)
|
|
142
|
+
return 'dm';
|
|
143
|
+
if (meta?.is_mpim === true)
|
|
144
|
+
return 'groupDm';
|
|
145
|
+
const channelType = messageMetadata?.channel_type;
|
|
146
|
+
if (channelType === 'im')
|
|
147
|
+
return 'dm';
|
|
148
|
+
if (channelType === 'mpim')
|
|
149
|
+
return 'groupDm';
|
|
150
|
+
return 'channel';
|
|
151
|
+
}
|
|
152
|
+
/** Export the per-channel engagement counters for persistence — they must
|
|
153
|
+
* survive restarts, or a re-engaged channel reuses generation 1's name and
|
|
154
|
+
* reopens (and re-seeds) the previous engagement's Chronicle namespace. */
|
|
155
|
+
exportGenerations() {
|
|
156
|
+
return Object.fromEntries(this.generations);
|
|
157
|
+
}
|
|
158
|
+
/** Restore persisted engagement counters (see exportGenerations). */
|
|
159
|
+
hydrateGenerations(generations) {
|
|
160
|
+
for (const [channelId, generation] of Object.entries(generations)) {
|
|
161
|
+
if (typeof generation === 'number' && generation > (this.generations.get(channelId) ?? 0)) {
|
|
162
|
+
this.generations.set(channelId, generation);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
shouldTrigger(facts) {
|
|
167
|
+
const rule = this.config.trigger?.[facts.kind]
|
|
168
|
+
?? (facts.kind === 'dm' ? 'always' : 'mention');
|
|
169
|
+
return rule === 'always' || facts.mentioned;
|
|
170
|
+
}
|
|
171
|
+
/** `conversation-slack-C123-g2` — agent names double as Chronicle
|
|
172
|
+
* namespace components, so the channel id is sanitized. */
|
|
173
|
+
forkAgentName(channelId, generation) {
|
|
174
|
+
const prefix = this.config.agentPrefix ?? 'conversation';
|
|
175
|
+
const safe = channelId.replace(/[^A-Za-z0-9_-]+/g, '-');
|
|
176
|
+
return `${prefix}-${safe}-g${generation}`;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=conversation-router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation-router.js","sourceRoot":"","sources":["../../../src/mcpl/conversation-router.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-set-manager.d.ts","sourceRoot":"","sources":["../../../src/mcpl/feature-set-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACzB,MAAM,YAAY,CAAC;AAWpB;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;aAE1B,IAAI,EAAE,MAAM;aACZ,UAAU,EAAE,MAAM;gBADlB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClC,OAAO,EAAE,MAAM;CAKlB;AAgFD;;;;;;GAMG;AACH,qBAAa,iBAAiB;IAC5B,4CAA4C;IAC5C,OAAO,CAAC,OAAO,CAAkC;IAEjD;;;;;;;;;;;;OAYG;IACH,gBAAgB,CACd,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,gBAAgB,EAC9B,MAAM,CAAC,EAAE;QAAE,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GACzE,uBAAuB;
|
|
1
|
+
{"version":3,"file":"feature-set-manager.d.ts","sourceRoot":"","sources":["../../../src/mcpl/feature-set-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACzB,MAAM,YAAY,CAAC;AAWpB;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;aAE1B,IAAI,EAAE,MAAM;aACZ,UAAU,EAAE,MAAM;gBADlB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClC,OAAO,EAAE,MAAM;CAKlB;AAgFD;;;;;;GAMG;AACH,qBAAa,iBAAiB;IAC5B,4CAA4C;IAC5C,OAAO,CAAC,OAAO,CAAkC;IAEjD;;;;;;;;;;;;OAYG;IACH,gBAAgB,CACd,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,gBAAgB,EAC9B,MAAM,CAAC,EAAE;QAAE,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GACzE,uBAAuB;IAwD1B;;;OAGG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIpC;;;OAGG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO;IAQxD;;;;;OAKG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IA4B3D;;;OAGG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,IAAI;IAYrD;;;OAGG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,IAAI;IAYtD;;;;;OAKG;IACH,wBAAwB,CACtB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,wBAAwB,GAC/B,IAAI;IAuBP;;;OAGG;IACH,sBAAsB,CACpB,QAAQ,EAAE,MAAM,GACf,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,GAAG,IAAI;IAQ/C;;;OAGG;IACH,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;CAOlD"}
|
|
@@ -102,7 +102,16 @@ export class FeatureSetManager {
|
|
|
102
102
|
* 4. Feature sets not mentioned in either list default to disabled.
|
|
103
103
|
*/
|
|
104
104
|
initializeServer(serverId, capabilities, config) {
|
|
105
|
-
|
|
105
|
+
// Cross-package compat: agent-framework's McplCapabilities types
|
|
106
|
+
// featureSets as Record<string, FeatureSetDeclaration>, but mcpl-core-ts
|
|
107
|
+
// (used by discord-mcpl and other servers) types it as an array of
|
|
108
|
+
// {name, ...FeatureSetDeclaration}. Both representations arrive over
|
|
109
|
+
// the wire. Normalize to Record here so downstream code (resolvePatterns,
|
|
110
|
+
// validateInbound, etc.) can rely on the keyed shape.
|
|
111
|
+
const featureSetsRaw = capabilities.featureSets ?? {};
|
|
112
|
+
const declared = Array.isArray(featureSetsRaw)
|
|
113
|
+
? Object.fromEntries(featureSetsRaw.map((d) => [d.name, d]))
|
|
114
|
+
: featureSetsRaw;
|
|
106
115
|
const state = {
|
|
107
116
|
declared: { ...declared },
|
|
108
117
|
enabled: new Set(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-set-manager.js","sourceRoot":"","sources":["../../../src/mcpl/feature-set-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH,OAAO,EACL,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AAErB,+EAA+E;AAC/E,cAAc;AACd,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAE1B;IACA;IAFlB,YACkB,IAAY,EACZ,UAAkB,EAClC,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAJC,SAAI,GAAJ,IAAI,CAAQ;QACZ,eAAU,GAAV,UAAU,CAAQ;QAIlC,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAcD,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E;;;;;;;;;;;;;GAaG;AACH,SAAS,aAAa,CAAC,OAAe,EAAE,IAAY;IAClD,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAElC,IAAI,YAAY,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,EAAE,CAAC;QAC7C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YACd,8CAA8C;YAC9C,SAAS;QACX,CAAC;QACD,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;YACvB,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CACtB,QAAkB,EAClB,QAA+C;IAE/C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAE5C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,IAAI,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;gBACjC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;AACtB,CAAC;AAED,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E;;;;;;GAMG;AACH,MAAM,OAAO,iBAAiB;IAC5B,4CAA4C;IACpC,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAC;IAEjD;;;;;;;;;;;;OAYG;IACH,gBAAgB,CACd,QAAgB,EAChB,YAA8B,EAC9B,MAA0E;QAE1E,MAAM,
|
|
1
|
+
{"version":3,"file":"feature-set-manager.js","sourceRoot":"","sources":["../../../src/mcpl/feature-set-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/src/mcpl/index.d.ts
CHANGED
|
@@ -10,5 +10,7 @@ export { PushHandler } from './push-handler.js';
|
|
|
10
10
|
export type { McplPushEvent } from './push-handler.js';
|
|
11
11
|
export { InferenceRouter } from './inference-router.js';
|
|
12
12
|
export { ChannelRegistry } from './channel-registry.js';
|
|
13
|
+
export { ConversationRouter, DEFAULT_CLOSURE_PROMPT } from './conversation-router.js';
|
|
14
|
+
export type { ConversationRouterConfig, ConversationBinding, RoutingDecision, IncomingMessageFacts, BindRule, TriggerRule, ChannelKind, } from './conversation-router.js';
|
|
13
15
|
export { CheckpointManager, applyJsonPatch } from './checkpoint-manager.js';
|
|
14
16
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcpl/index.ts"],"names":[],"mappings":"AACA,YAAY,EAEV,cAAc,EACd,eAAe,EACf,YAAY,EAGZ,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EAGnB,gBAAgB,EAChB,oBAAoB,EACpB,uBAAuB,EAGvB,gBAAgB,EAGhB,aAAa,EACb,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EAGxB,WAAW,EACX,UAAU,EACV,kBAAkB,EAClB,kBAAkB,EAGlB,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EAGnB,eAAe,EACf,eAAe,EAGf,aAAa,EACb,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EAGpB,WAAW,EACX,0BAA0B,EAC1B,wBAAwB,EACxB,0BAA0B,EAC1B,oBAAoB,EAGpB,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,2BAA2B,EAC3B,8BAA8B,EAC9B,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,4BAA4B,EAG5B,sBAAsB,EAGtB,cAAc,EAGd,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGxC,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAGpF,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAGlF,OAAO,EAAE,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG1D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGvD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcpl/index.ts"],"names":[],"mappings":"AACA,YAAY,EAEV,cAAc,EACd,eAAe,EACf,YAAY,EAGZ,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EAGnB,gBAAgB,EAChB,oBAAoB,EACpB,uBAAuB,EAGvB,gBAAgB,EAGhB,aAAa,EACb,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EAGxB,WAAW,EACX,UAAU,EACV,kBAAkB,EAClB,kBAAkB,EAGlB,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EAGnB,eAAe,EACf,eAAe,EAGf,aAAa,EACb,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EAGpB,WAAW,EACX,0BAA0B,EAC1B,wBAAwB,EACxB,0BAA0B,EAC1B,oBAAoB,EAGpB,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,2BAA2B,EAC3B,8BAA8B,EAC9B,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,4BAA4B,EAG5B,sBAAsB,EAGtB,cAAc,EAGd,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGxC,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAGpF,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAGlF,OAAO,EAAE,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG1D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGvD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AACtF,YAAY,EACV,wBAAwB,EACxB,mBAAmB,EACnB,eAAe,EACf,oBAAoB,EACpB,QAAQ,EACR,WAAW,EACX,WAAW,GACZ,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC"}
|
package/dist/src/mcpl/index.js
CHANGED
|
@@ -16,6 +16,8 @@ export { PushHandler } from './push-handler.js';
|
|
|
16
16
|
export { InferenceRouter } from './inference-router.js';
|
|
17
17
|
// Channel registry (channel lifecycle, incoming messages, synthesized tools)
|
|
18
18
|
export { ChannelRegistry } from './channel-registry.js';
|
|
19
|
+
// Per-channel conversation routing (fork-per-channel agents)
|
|
20
|
+
export { ConversationRouter, DEFAULT_CLOSURE_PROMPT } from './conversation-router.js';
|
|
19
21
|
// State management (Section 8, checkpoint trees + JSON Patch)
|
|
20
22
|
export { CheckpointManager, applyJsonPatch } from './checkpoint-manager.js';
|
|
21
23
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcpl/index.ts"],"names":[],"mappings":"AA2FA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,4BAA4B;AAC5B,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAErB,iCAAiC;AACjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAA4B,MAAM,sBAAsB,CAAC;AAEpF,4CAA4C;AAC5C,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAElF,qDAAqD;AACrD,OAAO,EAAE,YAAY,EAAyB,MAAM,oBAAoB,CAAC;AAEzE,8DAA8D;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,0BAA0B;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,0CAA0C;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,6EAA6E;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,8DAA8D;AAC9D,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcpl/index.ts"],"names":[],"mappings":"AA2FA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,4BAA4B;AAC5B,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,EACd,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAErB,iCAAiC;AACjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAA4B,MAAM,sBAAsB,CAAC;AAEpF,4CAA4C;AAC5C,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAElF,qDAAqD;AACrD,OAAO,EAAE,YAAY,EAAyB,MAAM,oBAAoB,CAAC;AAEzE,8DAA8D;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,0BAA0B;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,0CAA0C;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,6EAA6E;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,6DAA6D;AAC7D,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAWtF,8DAA8D;AAC9D,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -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;AAOlE;;;;;;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,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;
|
|
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;AAOlE;;;;;;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,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;CAmER"}
|
|
@@ -130,6 +130,7 @@ export class PushHandler {
|
|
|
130
130
|
eventId: params.eventId,
|
|
131
131
|
eventType: 'mcpl:push-event',
|
|
132
132
|
...(params.origin ?? {}),
|
|
133
|
+
...(params.tags ? { tags: params.tags } : {}),
|
|
133
134
|
};
|
|
134
135
|
triggerInference = this.shouldTriggerInference(textContent, metadata);
|
|
135
136
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push-handler.js","sourceRoot":"","sources":["../../../src/mcpl/push-handler.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"push-handler.js","sourceRoot":"","sources":["../../../src/mcpl/push-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* McplServerConnection — manages a single JSON-RPC 2.0 connection to an MCPL server.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* Connects over a pluggable {@link McplTransport} (a spawned stdio child OR a
|
|
5
|
+
* WebSocket), performs the MCP initialize handshake with MCPL capability
|
|
6
|
+
* negotiation, and provides typed methods for all outbound MCPL messages plus
|
|
7
|
+
* EventEmitter events for inbound messages. The handshake, message routing, and
|
|
8
|
+
* every send path are transport-agnostic — they operate on NDJSON lines, so
|
|
9
|
+
* stdio and WebSocket behave identically above the transport seam.
|
|
7
10
|
*/
|
|
8
|
-
import { type ChildProcess } from 'node:child_process';
|
|
9
|
-
import { type Interface as ReadlineInterface } from 'node:readline';
|
|
10
11
|
import { EventEmitter } from 'node:events';
|
|
11
12
|
import type { McplServerConfig, McplCapabilities, McplHostCapabilities, BeforeInferenceParams, BeforeInferenceResult, AfterInferenceParams, AfterInferenceResult, FeatureSetsUpdateParams, InferenceChunkParams, StateRollbackParams, StateRollbackResult, ChannelsOpenParams, ChannelsOpenResult, ChannelsCloseParams, ChannelsCloseResult, ChannelsListResult, ChannelsPublishParams, ChannelsPublishResult, ChannelsOutgoingChunkParams, ChannelsOutgoingCompleteParams, McpToolDefinition, McpToolCallResult } from './types.js';
|
|
12
13
|
/**
|
|
@@ -30,8 +31,9 @@ export declare class McplServerConnection extends EventEmitter {
|
|
|
30
31
|
readonly id: string;
|
|
31
32
|
/** MCPL capabilities negotiated during the initialize handshake, or null if the server does not support MCPL. */
|
|
32
33
|
capabilities: McplCapabilities | null;
|
|
33
|
-
|
|
34
|
-
|
|
34
|
+
/** The active transport (stdio child or WebSocket). Null for a disconnected
|
|
35
|
+
* stub awaiting its first background reconnect. */
|
|
36
|
+
private transport;
|
|
35
37
|
private nextRequestId;
|
|
36
38
|
private pendingRequests;
|
|
37
39
|
private closed;
|
|
@@ -42,8 +44,6 @@ export declare class McplServerConnection extends EventEmitter {
|
|
|
42
44
|
private reconnectEnabled;
|
|
43
45
|
private reconnectIntervalMs;
|
|
44
46
|
private reconnectTimer;
|
|
45
|
-
/** Swaps the line handler on the current child's stderr pipe. Re-bound on reconnect. */
|
|
46
|
-
private rebindStderr;
|
|
47
47
|
/**
|
|
48
48
|
* Private constructor. Use `McplServerConnection.connect()` instead.
|
|
49
49
|
*/
|
|
@@ -60,19 +60,22 @@ export declare class McplServerConnection extends EventEmitter {
|
|
|
60
60
|
*/
|
|
61
61
|
emit(event: string | symbol, ...args: unknown[]): boolean;
|
|
62
62
|
/**
|
|
63
|
-
*
|
|
64
|
-
* supplied callback. The callback can be swapped at any time via `rebind`
|
|
65
|
-
* (used during reconnect, when we want already-wired pipes to target a new
|
|
66
|
-
* emitter).
|
|
67
|
-
*/
|
|
68
|
-
private static wireStderrForwarding;
|
|
69
|
-
/**
|
|
70
|
-
* Spawn a server process, perform the MCP initialize handshake with MCPL
|
|
63
|
+
* Open the transport, perform the MCP initialize handshake with MCPL
|
|
71
64
|
* capability negotiation, and return a ready-to-use connection.
|
|
72
65
|
*
|
|
73
|
-
*
|
|
66
|
+
* Works over stdio (spawned child) or WebSocket, selected by `config` (see
|
|
67
|
+
* {@link openTransport}). Throws if the transport can't be opened, the server
|
|
68
|
+
* closes/errors before the handshake, or the handshake times out.
|
|
74
69
|
*/
|
|
75
70
|
static connect(config: McplServerConfig, hostCapabilities: McplHostCapabilities): Promise<McplServerConnection>;
|
|
71
|
+
/**
|
|
72
|
+
* Open a fresh transport and run the MCP/MCPL initialize handshake over it,
|
|
73
|
+
* returning the connected transport plus the negotiated capabilities. Shared
|
|
74
|
+
* by {@link connect} and {@link attemptReconnect} so both transports handshake
|
|
75
|
+
* identically. On any failure the transport is closed so a spawned child /
|
|
76
|
+
* open socket never leaks.
|
|
77
|
+
*/
|
|
78
|
+
private static handshake;
|
|
76
79
|
/**
|
|
77
80
|
* Connect with reconnect support.
|
|
78
81
|
* When `config.reconnect` is true and the initial connection fails,
|
|
@@ -86,15 +89,6 @@ export declare class McplServerConnection extends EventEmitter {
|
|
|
86
89
|
* @internal
|
|
87
90
|
*/
|
|
88
91
|
private static createDisconnectedStub;
|
|
89
|
-
/**
|
|
90
|
-
* Extract internals for transfer during reconnection.
|
|
91
|
-
* Strips the source connection — caller takes ownership of the process/readline.
|
|
92
|
-
* @internal Used only by attemptReconnect().
|
|
93
|
-
*/
|
|
94
|
-
extractInternals(): {
|
|
95
|
-
process: ChildProcess;
|
|
96
|
-
readline: ReadlineInterface;
|
|
97
|
-
};
|
|
98
92
|
/** Send `context/beforeInference` and await result. */
|
|
99
93
|
sendBeforeInference(params: BeforeInferenceParams): Promise<BeforeInferenceResult>;
|
|
100
94
|
/**
|
|
@@ -149,7 +143,10 @@ export declare class McplServerConnection extends EventEmitter {
|
|
|
149
143
|
*/
|
|
150
144
|
private scheduleReconnect;
|
|
151
145
|
/**
|
|
152
|
-
* Attempt to reconnect by
|
|
146
|
+
* Attempt to reconnect by opening a fresh transport and performing the
|
|
147
|
+
* handshake, then adopting that transport in place. Unlike the previous
|
|
148
|
+
* approach this builds no throwaway connection instance, so there are no
|
|
149
|
+
* leaked listeners on a dead object.
|
|
153
150
|
*/
|
|
154
151
|
private attemptReconnect;
|
|
155
152
|
/**
|
|
@@ -166,7 +163,13 @@ export declare class McplServerConnection extends EventEmitter {
|
|
|
166
163
|
*/
|
|
167
164
|
private static readonly METHOD_TO_EVENT;
|
|
168
165
|
/**
|
|
169
|
-
*
|
|
166
|
+
* Bind all transport-level handlers (inbound routing, lifecycle, stderr) to a
|
|
167
|
+
* transport. Called from the constructor and again from attemptReconnect when
|
|
168
|
+
* a new transport is adopted.
|
|
169
|
+
*/
|
|
170
|
+
private wireTransport;
|
|
171
|
+
/**
|
|
172
|
+
* Wire up the transport's line stream to route incoming JSON-RPC messages.
|
|
170
173
|
*/
|
|
171
174
|
private setupMessageRouting;
|
|
172
175
|
/**
|
|
@@ -182,7 +185,9 @@ export declare class McplServerConnection extends EventEmitter {
|
|
|
182
185
|
*/
|
|
183
186
|
private sendErrorResponse;
|
|
184
187
|
/**
|
|
185
|
-
* Set up
|
|
188
|
+
* Set up transport error/close handlers. An unexpected transport close
|
|
189
|
+
* (child exit or WebSocket drop) rejects in-flight requests, emits 'close',
|
|
190
|
+
* and — when enabled — schedules a background reconnect.
|
|
186
191
|
*/
|
|
187
192
|
private setupLifecycle;
|
|
188
193
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-connection.d.ts","sourceRoot":"","sources":["../../../src/mcpl/server-connection.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"server-connection.d.ts","sourceRoot":"","sources":["../../../src/mcpl/server-connection.ts"],"names":[],"mappings":"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"}
|