@animalabs/agent-framework 0.5.7 → 0.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/agent.d.ts +4 -0
- package/dist/src/agent.d.ts.map +1 -1
- package/dist/src/agent.js +15 -0
- package/dist/src/agent.js.map +1 -1
- package/dist/src/framework.d.ts +243 -0
- package/dist/src/framework.d.ts.map +1 -1
- package/dist/src/framework.js +1378 -114
- package/dist/src/framework.js.map +1 -1
- package/dist/src/gate/event-gate.d.ts +64 -2
- package/dist/src/gate/event-gate.d.ts.map +1 -1
- package/dist/src/gate/event-gate.js +212 -12
- 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 +18 -3
- package/dist/src/gate/types.d.ts.map +1 -1
- package/dist/src/index.d.ts +3 -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/channel-registry.d.ts +60 -2
- package/dist/src/mcpl/channel-registry.d.ts.map +1 -1
- package/dist/src/mcpl/channel-registry.js +114 -9
- 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/push-handler.d.ts.map +1 -1
- package/dist/src/mcpl/push-handler.js +5 -0
- package/dist/src/mcpl/push-handler.js.map +1 -1
- package/dist/src/mcpl/server-connection.d.ts +64 -30
- package/dist/src/mcpl/server-connection.d.ts.map +1 -1
- package/dist/src/mcpl/server-connection.js +247 -210
- 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 +59 -3
- 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 +17 -1
- package/dist/src/module-registry.d.ts.map +1 -1
- package/dist/src/module-registry.js +101 -6
- package/dist/src/module-registry.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/types/agent.d.ts +47 -0
- package/dist/src/types/agent.d.ts.map +1 -1
- package/dist/src/types/framework.d.ts +14 -0
- package/dist/src/types/framework.d.ts.map +1 -1
- package/dist/src/types/module.d.ts +58 -0
- package/dist/src/types/module.d.ts.map +1 -1
- package/dist/src/types/trace.d.ts +42 -0
- package/dist/src/types/trace.d.ts.map +1 -1
- package/dist/test/agent-cache-ttl.test.d.ts +2 -0
- package/dist/test/agent-cache-ttl.test.d.ts.map +1 -0
- package/dist/test/agent-cache-ttl.test.js +25 -0
- package/dist/test/agent-cache-ttl.test.js.map +1 -0
- package/dist/test/channel-registry-routing.test.js +108 -1
- package/dist/test/channel-registry-routing.test.js.map +1 -1
- 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-fork-injection-scoping.test.d.ts +2 -0
- package/dist/test/conversation-fork-injection-scoping.test.d.ts.map +1 -0
- package/dist/test/conversation-fork-injection-scoping.test.js +184 -0
- package/dist/test/conversation-fork-injection-scoping.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/gather-context-timeout.test.d.ts +2 -0
- package/dist/test/gather-context-timeout.test.d.ts.map +1 -0
- package/dist/test/gather-context-timeout.test.js +120 -0
- package/dist/test/gather-context-timeout.test.js.map +1 -0
- package/dist/test/inference-exhaustion-rewind.test.d.ts +2 -0
- package/dist/test/inference-exhaustion-rewind.test.d.ts.map +1 -0
- package/dist/test/inference-exhaustion-rewind.test.js +181 -0
- package/dist/test/inference-exhaustion-rewind.test.js.map +1 -0
- package/dist/test/inference-failure-observability.test.js +4 -0
- package/dist/test/inference-failure-observability.test.js.map +1 -1
- 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-reconnect-events.test.d.ts +2 -0
- package/dist/test/mcpl-reconnect-events.test.d.ts.map +1 -0
- package/dist/test/mcpl-reconnect-events.test.js +119 -0
- package/dist/test/mcpl-reconnect-events.test.js.map +1 -0
- package/dist/test/mcpl-reconnect-reregistration.test.d.ts +2 -0
- package/dist/test/mcpl-reconnect-reregistration.test.d.ts.map +1 -0
- package/dist/test/mcpl-reconnect-reregistration.test.js +181 -0
- package/dist/test/mcpl-reconnect-reregistration.test.js.map +1 -0
- package/dist/test/mcpl-request-timeout.test.d.ts +2 -0
- package/dist/test/mcpl-request-timeout.test.d.ts.map +1 -0
- package/dist/test/mcpl-request-timeout.test.js +123 -0
- package/dist/test/mcpl-request-timeout.test.js.map +1 -0
- package/dist/test/mcpl-runtime-lifecycle.test.d.ts +7 -0
- package/dist/test/mcpl-runtime-lifecycle.test.d.ts.map +1 -0
- package/dist/test/mcpl-runtime-lifecycle.test.js +142 -0
- package/dist/test/mcpl-runtime-lifecycle.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/refusal-rewind.test.d.ts +2 -0
- package/dist/test/refusal-rewind.test.d.ts.map +1 -0
- package/dist/test/refusal-rewind.test.js +108 -0
- package/dist/test/refusal-rewind.test.js.map +1 -0
- package/dist/test/state-scaling-e2e.test.d.ts +22 -0
- package/dist/test/state-scaling-e2e.test.d.ts.map +1 -0
- package/dist/test/state-scaling-e2e.test.js +200 -0
- package/dist/test/state-scaling-e2e.test.js.map +1 -0
- package/dist/test/state-scaling.test.d.ts +12 -0
- package/dist/test/state-scaling.test.d.ts.map +1 -0
- package/dist/test/state-scaling.test.js +243 -0
- package/dist/test/state-scaling.test.js.map +1 -0
- package/dist/test/tool-result-content.test.d.ts +2 -0
- package/dist/test/tool-result-content.test.d.ts.map +1 -0
- package/dist/test/tool-result-content.test.js +37 -0
- package/dist/test/tool-result-content.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 +4 -3
- package/src/agent.ts +16 -0
- package/src/framework.ts +1576 -121
- package/src/gate/event-gate.ts +209 -12
- package/src/gate/gate-script-worker.ts +73 -0
- package/src/gate/gate-script.ts +180 -0
- package/src/gate/types.ts +19 -3
- package/src/index.ts +10 -0
- package/src/mcpl/channel-registry.ts +143 -8
- package/src/mcpl/checkpoint-manager.ts +16 -0
- package/src/mcpl/push-handler.ts +5 -0
- package/src/mcpl/server-connection.ts +262 -227
- package/src/mcpl/transport.ts +307 -0
- package/src/mcpl/types.ts +68 -3
- package/src/module-registry.ts +126 -6
- 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/types/agent.ts +48 -0
- package/src/types/framework.ts +15 -0
- package/src/types/module.ts +65 -0
- package/src/types/trace.ts +51 -0
|
@@ -35,6 +35,21 @@ export interface AgentConfig {
|
|
|
35
35
|
/** Per-agent context compile budget (input tokens). When unset, the
|
|
36
36
|
* ContextManager's built-in default (100k) applies. */
|
|
37
37
|
contextBudgetTokens?: number;
|
|
38
|
+
/**
|
|
39
|
+
* Prompt-cache TTL forwarded to the provider (Anthropic `cache_control.ttl`).
|
|
40
|
+
* '5m' (provider default) or '1h'. When unset, Membrane's default applies.
|
|
41
|
+
*
|
|
42
|
+
* Why you'd set '1h': for persistent agents whose conversational cadence is
|
|
43
|
+
* slower than 5 minutes, the default TTL expires between turns and the full
|
|
44
|
+
* context is re-WRITTEN to cache on nearly every call. Cache writes carry a
|
|
45
|
+
* premium (1.25x base input for 5m, 2x for 1h) while reads cost 0.1x — so a
|
|
46
|
+
* chatty-but-not-rapid agent pays the write premium over and over. With '1h'
|
|
47
|
+
* the write happens once per idle-hour and subsequent turns hit cache reads;
|
|
48
|
+
* in practice cache writes can dominate spend for slow-cadence agents.
|
|
49
|
+
* Keep '5m' (or unset) for high-frequency loops with sub-5-minute cadence,
|
|
50
|
+
* where the cheaper write premium wins.
|
|
51
|
+
*/
|
|
52
|
+
cacheTtl?: '5m' | '1h';
|
|
38
53
|
/**
|
|
39
54
|
* Extended thinking config. When `enabled: true`, the agent runs with
|
|
40
55
|
* Anthropic's native extended thinking; responses include `thinking` blocks
|
|
@@ -53,6 +68,28 @@ export interface AgentConfig {
|
|
|
53
68
|
*/
|
|
54
69
|
display?: 'summarized' | 'omitted';
|
|
55
70
|
};
|
|
71
|
+
/**
|
|
72
|
+
* How to handle a model content-policy refusal (`stop_reason: refusal`).
|
|
73
|
+
* When `autoRewind` is on, a refused turn triggers an automatic rewind: the
|
|
74
|
+
* framework redacts the triggering turn (the tool result or message that
|
|
75
|
+
* tripped the classifier), injects a metadata-only marker in its place (which
|
|
76
|
+
* carries none of the offending content, so it cannot itself re-trip), and
|
|
77
|
+
* re-runs — up to `maxRewinds` times before giving up. This keeps the agent
|
|
78
|
+
* on its own model (no fallback-model substitution) while self-healing around
|
|
79
|
+
* a poison turn. Default: off (a refusal just surfaces a marker + reaction).
|
|
80
|
+
*/
|
|
81
|
+
refusalHandling?: {
|
|
82
|
+
/** Auto-rewind the triggering turn on refusal and retry. Default false. */
|
|
83
|
+
autoRewind?: boolean;
|
|
84
|
+
/** Max consecutive rewinds before giving up a turn. Default 3. */
|
|
85
|
+
maxRewinds?: number;
|
|
86
|
+
/**
|
|
87
|
+
* When the rewound turn is a *human* message (not a machine tool result),
|
|
88
|
+
* announce the withholding on the conversational surface (Discord) rather
|
|
89
|
+
* than dropping it silently. Default true.
|
|
90
|
+
*/
|
|
91
|
+
announceHumanTurns?: boolean;
|
|
92
|
+
};
|
|
56
93
|
}
|
|
57
94
|
/**
|
|
58
95
|
* Result of running inference.
|
|
@@ -135,5 +172,15 @@ export interface InferenceRequest {
|
|
|
135
172
|
reason: string;
|
|
136
173
|
source: string;
|
|
137
174
|
timestamp: number;
|
|
175
|
+
/**
|
|
176
|
+
* The MCPL channel whose message triggered this inference, if any (composite
|
|
177
|
+
* id, e.g. `discord:guild:channel` / `discord:dm:id`). The framework routes
|
|
178
|
+
* the turn's auto-published plain-text speech here so a single TRUNK agent
|
|
179
|
+
* replies in the channel it is answering — not the process-global most-recent-
|
|
180
|
+
* inbound locus, which a concurrent message elsewhere can hijack (item-3
|
|
181
|
+
* redux). Undefined for non-channel wakes (heartbeat, timers, module events),
|
|
182
|
+
* which correctly fall back to the global default channel.
|
|
183
|
+
*/
|
|
184
|
+
channelId?: string;
|
|
138
185
|
}
|
|
139
186
|
//# sourceMappingURL=agent.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/types/agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IAEb,sDAAsD;IACtD,KAAK,EAAE,MAAM,CAAC;IAEd,oBAAoB;IACpB,YAAY,EAAE,MAAM,CAAC;IAErB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,eAAe,CAAC;IAE3B;;;;OAIG;IACH,YAAY,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,CAAC;IAEhC;;;;OAIG;IACH,cAAc,CAAC,EAAE,KAAK,GAAG,MAAM,EAAE,CAAC;IAElC,kCAAkC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,gCAAgC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;0EACsE;IACtE,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;4DACwD;IACxD,mBAAmB,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/types/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -51,6 +51,20 @@ export interface FrameworkConfig {
|
|
|
51
51
|
inferenceRouting?: InferenceRoutingPolicy;
|
|
52
52
|
/** EventGate config. If omitted, all events trigger inference (unchanged default). */
|
|
53
53
|
gate?: GateOptions;
|
|
54
|
+
/**
|
|
55
|
+
* Liveness watchdog: fail hard (and let the supervisor restart) if the main
|
|
56
|
+
* thread wedges — a synchronous infinite loop or microtask flood that would
|
|
57
|
+
* otherwise leave the agent silently deaf. Off unless `enabled` is set.
|
|
58
|
+
*/
|
|
59
|
+
watchdog?: {
|
|
60
|
+
enabled?: boolean;
|
|
61
|
+
/** Kill if no heartbeat for this long (ms). Default 30000. */
|
|
62
|
+
thresholdMs?: number;
|
|
63
|
+
/** 'abort' → SIGABRT (core dump for debugging); 'exit' → SIGKILL. Default 'abort'. */
|
|
64
|
+
action?: 'abort' | 'exit';
|
|
65
|
+
/** Optional path for a JSON wedge report written before the kill. */
|
|
66
|
+
reportPath?: string;
|
|
67
|
+
};
|
|
54
68
|
/**
|
|
55
69
|
* Per-channel conversation routing. When set, incoming MCPL channel
|
|
56
70
|
* messages route to per-channel fork agents spawned from the template
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"framework.d.ts","sourceRoot":"","sources":["../../../src/types/framework.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"framework.d.ts","sourceRoot":"","sources":["../../../src/types/framework.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,6 +27,14 @@ export interface MessageQueryResult {
|
|
|
27
27
|
export interface Module {
|
|
28
28
|
/** Unique name, used for tool namespacing and state storage */
|
|
29
29
|
readonly name: string;
|
|
30
|
+
/**
|
|
31
|
+
* Per-module budget (ms) for gatherContext() before the framework skips this
|
|
32
|
+
* module's injection for the turn (fail-open). Defaults to the registry-wide
|
|
33
|
+
* default (15s) when omitted. Declare a larger budget when gatherContext
|
|
34
|
+
* does real work — e.g. sequential LLM calls with provider backoff — so the
|
|
35
|
+
* injection isn't silently dropped every turn.
|
|
36
|
+
*/
|
|
37
|
+
readonly contextTimeoutMs?: number;
|
|
30
38
|
/**
|
|
31
39
|
* Start the module.
|
|
32
40
|
* Called when the framework starts or when the module is added.
|
|
@@ -80,8 +88,46 @@ export interface ModuleContext {
|
|
|
80
88
|
getState<T>(): T | null;
|
|
81
89
|
/**
|
|
82
90
|
* Set persistent state for this module.
|
|
91
|
+
*
|
|
92
|
+
* This rewrites the module's full state object every call — appropriate for
|
|
93
|
+
* small, bounded state only. For accumulating collections (registries,
|
|
94
|
+
* corpora, histories) use a log state (`registerLogState`/`appendToLog`)
|
|
95
|
+
* instead: a setState of an ever-growing object makes every persisted record
|
|
96
|
+
* proportional to accumulated content, i.e. O(n²) aggregate disk.
|
|
83
97
|
*/
|
|
84
98
|
setState<T>(state: T): void;
|
|
99
|
+
/**
|
|
100
|
+
* Register an auxiliary append-log state for this module, stored as
|
|
101
|
+
* `modules/<module>/<name>`. Idempotent — safe to call on every start().
|
|
102
|
+
* Items are appended with `appendToLog` (one O(item) record per append) and
|
|
103
|
+
* point-edited with `editLogItem`; Chronicle's append_log snapshot cadence
|
|
104
|
+
* handles consolidation. `name` must not be 'state' (reserved for the main
|
|
105
|
+
* snapshot state) and must not contain '/'.
|
|
106
|
+
*/
|
|
107
|
+
registerLogState(name: string, opts?: {
|
|
108
|
+
deltaSnapshotEvery?: number;
|
|
109
|
+
fullSnapshotEvery?: number;
|
|
110
|
+
}): void;
|
|
111
|
+
/**
|
|
112
|
+
* Append one item to a log state registered via registerLogState.
|
|
113
|
+
* Record size is O(item), independent of accumulated log length.
|
|
114
|
+
*/
|
|
115
|
+
appendToLog<T>(name: string, item: T): void;
|
|
116
|
+
/**
|
|
117
|
+
* Overwrite the item at `index` in a log state. Indices are stable —
|
|
118
|
+
* appends assign the next index and nothing is ever removed.
|
|
119
|
+
*/
|
|
120
|
+
editLogItem<T>(name: string, index: number, item: T): void;
|
|
121
|
+
/**
|
|
122
|
+
* Read the full contents of a log state (empty array if never written).
|
|
123
|
+
* Intended for one-shot reconstruction at start(); keep hot-path reads
|
|
124
|
+
* against the in-memory copy.
|
|
125
|
+
*/
|
|
126
|
+
getLog<T>(name: string): T[];
|
|
127
|
+
/**
|
|
128
|
+
* Number of items in a log state (0 if never written).
|
|
129
|
+
*/
|
|
130
|
+
getLogLength(name: string): number;
|
|
85
131
|
/**
|
|
86
132
|
* Process queue for pushing events from external listeners.
|
|
87
133
|
* @deprecated Use pushEvent() instead — it also emits process:received traces.
|
|
@@ -145,6 +191,18 @@ export interface ModuleContext {
|
|
|
145
191
|
* Unregister this module as a speech handler.
|
|
146
192
|
*/
|
|
147
193
|
unregisterSpeechHandler(): void;
|
|
194
|
+
/**
|
|
195
|
+
* Execute a tool call autonomously, without agent mediation.
|
|
196
|
+
*
|
|
197
|
+
* Routes through the framework's normal tool dispatch — MCPL-prefixed names
|
|
198
|
+
* (e.g. `mcpl--discord--unsubscribe_channel`) hit the MCPL subsystem; module
|
|
199
|
+
* names hit the owning module. Unlike pushing a `tool-call` event, this does
|
|
200
|
+
* NOT record tool_use/tool_result into any agent's context — it's a pure
|
|
201
|
+
* side-effecting call whose result is returned to the caller. Used by modules
|
|
202
|
+
* that need to act on their own (e.g. subscription GC unsubscribing a noisy
|
|
203
|
+
* channel) rather than asking the agent to call the tool.
|
|
204
|
+
*/
|
|
205
|
+
callTool(call: ToolCall): Promise<ToolResult>;
|
|
148
206
|
/**
|
|
149
207
|
* Subscribe to the framework's trace event stream for observability.
|
|
150
208
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../src/types/module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EACV,SAAS,EACT,eAAe,EACf,aAAa,EACb,gBAAgB,EACjB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACtF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,+DAA+D;IAC/D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,KAAK,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzC;;;OAGG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtB;;;OAGG;IACH,QAAQ,IAAI,cAAc,EAAE,CAAC;IAE7B;;;OAGG;IACH,cAAc,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAEpD;;;;;;OAMG;IACH,SAAS,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAE5E;;;OAGG;IACH,aAAa,CAAC,CACZ,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,YAAY,EAAE,EACvB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;;;;;;OAMG;IACH,aAAa,CAAC,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;CAChE;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAExB
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../src/types/module.ts"],"names":[],"mappings":"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"}
|
|
@@ -59,6 +59,13 @@ export type TraceEvent = (TraceEventBase & {
|
|
|
59
59
|
type: 'inference:exhausted';
|
|
60
60
|
agentName: string;
|
|
61
61
|
error: string;
|
|
62
|
+
/** Whether membrane classified the failure as retryable (observability). */
|
|
63
|
+
retryable?: boolean;
|
|
64
|
+
/**
|
|
65
|
+
* The membrane error type (e.g. 'invalid_request', 'auth', 'context_length').
|
|
66
|
+
* The poison-history breaker fires only on 'invalid_request'.
|
|
67
|
+
*/
|
|
68
|
+
errorType?: string;
|
|
62
69
|
}) | (TraceEventBase & {
|
|
63
70
|
type: 'inference:tokens';
|
|
64
71
|
agentName: string;
|
|
@@ -233,6 +240,41 @@ export type TraceEvent = (TraceEventBase & {
|
|
|
233
240
|
type: 'mcpl:conversation-disposed';
|
|
234
241
|
agentName: string;
|
|
235
242
|
channelId?: string;
|
|
243
|
+
}) | (TraceEventBase & {
|
|
244
|
+
type: 'mcpl:server-connect-failed';
|
|
245
|
+
serverId: string;
|
|
246
|
+
error: string;
|
|
247
|
+
/** Ordinal of the failed attempt: 0 is the initial connect, N is the Nth background retry. */
|
|
248
|
+
attempt: number;
|
|
249
|
+
/** True when a background reconnect loop will keep retrying. */
|
|
250
|
+
willRetry: boolean;
|
|
251
|
+
}) | (TraceEventBase & {
|
|
252
|
+
type: 'mcpl:server-reconnected';
|
|
253
|
+
serverId: string;
|
|
254
|
+
/** How many attempts the reconnect loop needed (1 = first retry succeeded). */
|
|
255
|
+
attempts: number;
|
|
256
|
+
}) | (TraceEventBase & {
|
|
257
|
+
type: 'mcpl:server-closed';
|
|
258
|
+
serverId: string;
|
|
259
|
+
/** Child process exit code, or null when killed by signal / closed explicitly. */
|
|
260
|
+
code: number | null;
|
|
261
|
+
/** Signal that terminated the child, if any. */
|
|
262
|
+
signal: string | null;
|
|
263
|
+
/** True when a background reconnect loop will revive the connection. */
|
|
264
|
+
willReconnect: boolean;
|
|
265
|
+
}) | (TraceEventBase & {
|
|
266
|
+
type: 'mcpl:server-error';
|
|
267
|
+
serverId: string;
|
|
268
|
+
error: string;
|
|
269
|
+
}) | (TraceEventBase & {
|
|
270
|
+
type: 'mcpl:orphaned-response';
|
|
271
|
+
serverId: string;
|
|
272
|
+
/** The JSON-RPC id of the late response whose pending request already timed out. */
|
|
273
|
+
responseId: string | number;
|
|
274
|
+
/** True when the dropped response carried host-managed `state`. */
|
|
275
|
+
hadState: boolean;
|
|
276
|
+
/** True when the dropped response carried a server-managed `checkpoint`. */
|
|
277
|
+
hadCheckpoint: boolean;
|
|
236
278
|
});
|
|
237
279
|
/**
|
|
238
280
|
* Listener for trace events.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../../../src/types/trace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,UAAU,GAElB,CAAC,cAAc,GAAG;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,YAAY,EAAE,YAAY,CAAA;CAAE,CAAC,GAC3E,CAAC,cAAc,GAAG;IAChB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,YAAY,EAAE,YAAY,CAAC;IAC3B,SAAS,EAAE,qBAAqB,EAAE,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC,GAGF,CAAC,cAAc,GAAG;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,GACnE,CAAC,cAAc,GAAG;IAChB,IAAI,EAAE,qBAAqB,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5F,CAAC,GACF,CAAC,cAAc,GAAG;IAChB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC,GACF,CAAC,cAAc,GAAG;IAChB,IAAI,EAAE,kBAAkB,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,GACF,CAAC,cAAc,GAAG;IAChB,IAAI,EAAE,qBAAqB,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../../../src/types/trace.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-cache-ttl.test.d.ts","sourceRoot":"","sources":["../../test/agent-cache-ttl.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { describe, it } from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import { Agent } from '../src/agent.js';
|
|
4
|
+
/** buildActivationRequest only needs compile(); membrane is never touched. */
|
|
5
|
+
const stubContextManager = {
|
|
6
|
+
compile: async () => ({ messages: [], systemInjections: [] }),
|
|
7
|
+
};
|
|
8
|
+
function createAgent(config) {
|
|
9
|
+
return new Agent({ name: 'tester', model: 'test-model', systemPrompt: 'sys', ...config }, stubContextManager, {});
|
|
10
|
+
}
|
|
11
|
+
describe('Agent cacheTtl forwarding', () => {
|
|
12
|
+
it('forwards cacheTtl on the activation request when configured', async () => {
|
|
13
|
+
const agent = createAgent({ cacheTtl: '1h' });
|
|
14
|
+
const request = await agent.buildActivationRequest([]);
|
|
15
|
+
assert.equal(request.promptCaching, true);
|
|
16
|
+
assert.equal(request.cacheTtl, '1h');
|
|
17
|
+
});
|
|
18
|
+
it('omits cacheTtl entirely when unset, leaving the provider default', async () => {
|
|
19
|
+
const agent = createAgent({});
|
|
20
|
+
const request = await agent.buildActivationRequest([]);
|
|
21
|
+
assert.equal(request.promptCaching, true);
|
|
22
|
+
assert.equal('cacheTtl' in request, false);
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
//# sourceMappingURL=agent-cache-ttl.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-cache-ttl.test.js","sourceRoot":"","sources":["../../test/agent-cache-ttl.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAKxC,8EAA8E;AAC9E,MAAM,kBAAkB,GAAG;IACzB,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,CAAC;CACjC,CAAC;AAE/B,SAAS,WAAW,CAAC,MAA4B;IAC/C,OAAO,IAAI,KAAK,CACd,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,MAAM,EAAE,EACvE,kBAAkB,EAClB,EAAc,CACf,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;QACvD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;QAChF,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;QAC9B,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;QACvD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,UAAU,IAAI,OAAO,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -5,7 +5,7 @@ import { ChannelRegistry } from '../src/mcpl/channel-registry.js';
|
|
|
5
5
|
* Build a registry with a mock server whose publish result is configurable,
|
|
6
6
|
* plus capture arrays for route-failure notifications and emitted traces.
|
|
7
7
|
*/
|
|
8
|
-
function makeRegistry(publishResult) {
|
|
8
|
+
function makeRegistry(publishResult, homeChannelResolver, activeChannelResolver) {
|
|
9
9
|
const failures = [];
|
|
10
10
|
const traces = [];
|
|
11
11
|
const publishCalls = [];
|
|
@@ -20,6 +20,8 @@ function makeRegistry(publishResult) {
|
|
|
20
20
|
};
|
|
21
21
|
const registry = new ChannelRegistry(serverRegistry, {}, () => { }, (e) => { traces.push(e); }, {
|
|
22
22
|
onRouteFailure: (info) => { failures.push(info); },
|
|
23
|
+
homeChannelResolver,
|
|
24
|
+
activeChannelResolver,
|
|
23
25
|
});
|
|
24
26
|
// findChannelEntry is private; reach it the same way the typing test reaches
|
|
25
27
|
// the channels map — a test-only cast, not part of the public surface.
|
|
@@ -63,6 +65,42 @@ test('routeSpeech surfaces a failure when the server reports delivered:false', a
|
|
|
63
65
|
assert.match(failures[0].reason, /delivered:false/);
|
|
64
66
|
assert.ok(traces.some(t => t.type === 'mcpl:speech-route-failed'));
|
|
65
67
|
});
|
|
68
|
+
test('routeSpeech routes a conversation fork to its HOME channel, not the global last-inbound (item 3)', async () => {
|
|
69
|
+
// Two channels are live. chanA registered first; then a message arrives on
|
|
70
|
+
// chanB, flipping the process-global defaultPublishChannel to chanB. A fork
|
|
71
|
+
// bound to chanA must still publish to chanA.
|
|
72
|
+
const homes = { 'conversation-chanA-g1': 'chanA' };
|
|
73
|
+
const { registry, publishCalls } = makeRegistry({ delivered: true }, (agentName) => homes[agentName]);
|
|
74
|
+
registry.handleIncoming('discord', incoming('chanA', 'hi from A'));
|
|
75
|
+
registry.handleIncoming('discord', incoming('chanB', 'hi from B'));
|
|
76
|
+
// Global locus is now chanB.
|
|
77
|
+
assert.equal(registry.getDefaultPublishChannel(), 'chanB');
|
|
78
|
+
const res = await registry.routeSpeech('conversation-chanA-g1', 'reply for A');
|
|
79
|
+
assert.deepEqual(res, { delivered: true, channelId: 'chanA' }, 'fork must route to its home channel, not the global last-inbound');
|
|
80
|
+
assert.equal(publishCalls.at(-1)?.channelId, 'chanA');
|
|
81
|
+
});
|
|
82
|
+
test('routeSpeech falls back to the global locus for the trunk agent (no home)', async () => {
|
|
83
|
+
// The trunk/primary agent has no home entry; it correctly uses the global
|
|
84
|
+
// most-recent-inbound channel.
|
|
85
|
+
const { registry, publishCalls } = makeRegistry({ delivered: true }, () => undefined);
|
|
86
|
+
registry.handleIncoming('discord', incoming('chanA', 'hi from A'));
|
|
87
|
+
registry.handleIncoming('discord', incoming('chanB', 'hi from B'));
|
|
88
|
+
const res = await registry.routeSpeech('trunk', 'heartbeat reply');
|
|
89
|
+
assert.deepEqual(res, { delivered: true, channelId: 'chanB' });
|
|
90
|
+
assert.equal(publishCalls.at(-1)?.channelId, 'chanB');
|
|
91
|
+
});
|
|
92
|
+
test('buildChannelContext advertises the fork home as defaultOutgoing (item 3)', () => {
|
|
93
|
+
const homes = { 'conversation-chanA-g1': 'chanA' };
|
|
94
|
+
const { registry } = makeRegistry({ delivered: true }, (agentName) => homes[agentName]);
|
|
95
|
+
registry.handleIncoming('discord', incoming('chanA', 'hi from A'));
|
|
96
|
+
registry.handleIncoming('discord', incoming('chanB', 'hi from B'));
|
|
97
|
+
// The fork is told chanA (where its speech actually lands)...
|
|
98
|
+
const forkCtx = registry.buildChannelContext('conversation-chanA-g1');
|
|
99
|
+
assert.equal(forkCtx?.defaultOutgoing?.channelId, 'chanA');
|
|
100
|
+
// ...while the trunk agent (no home) is told the global default.
|
|
101
|
+
const trunkCtx = registry.buildChannelContext('trunk');
|
|
102
|
+
assert.equal(trunkCtx?.defaultOutgoing?.channelId, 'chanB');
|
|
103
|
+
});
|
|
66
104
|
test('routeSpeech surfaces a failure when there is no locus at all', async () => {
|
|
67
105
|
const { registry, failures } = makeRegistry({ delivered: true });
|
|
68
106
|
// No handleIncoming → defaultPublishChannel is null.
|
|
@@ -72,4 +110,73 @@ test('routeSpeech surfaces a failure when there is no locus at all', async () =>
|
|
|
72
110
|
assert.equal(failures[0].channelId, null);
|
|
73
111
|
assert.match(failures[0].reason, /no locus/);
|
|
74
112
|
});
|
|
113
|
+
// ── item-3 redux: single TRUNK agents route to the turn's triggering channel ──
|
|
114
|
+
test('routeSpeech routes a TRUNK agent to its ACTIVE triggering channel, not the global last-inbound (item-3 redux)', async () => {
|
|
115
|
+
// The exact live repro: scout (a single trunk agent) is answering channel A
|
|
116
|
+
// when a message arrives on channel B, flipping the process-global
|
|
117
|
+
// defaultPublishChannel to B. The reply must still land in A. Forks (home)
|
|
118
|
+
// don't exist here — connectome-host never spawns them — so the ONLY thing
|
|
119
|
+
// keeping A's answer in A is the active-triggering-channel resolver.
|
|
120
|
+
const active = { scout: 'chanA' };
|
|
121
|
+
const { registry, publishCalls } = makeRegistry({ delivered: true }, () => undefined, // no fork homes (trunk-only, connectome-host mode)
|
|
122
|
+
(agentName) => active[agentName]);
|
|
123
|
+
registry.handleIncoming('discord', incoming('chanA', 'A: sleep && date'));
|
|
124
|
+
registry.handleIncoming('discord', incoming('chanB', 'B: unrelated')); // flips global to chanB
|
|
125
|
+
assert.equal(registry.getDefaultPublishChannel(), 'chanB');
|
|
126
|
+
const res = await registry.routeSpeech('scout', 'the date is ...');
|
|
127
|
+
assert.deepEqual(res, { delivered: true, channelId: 'chanA' }, 'trunk reply must go to the channel that triggered the turn, not the global last-inbound');
|
|
128
|
+
assert.equal(publishCalls.at(-1)?.channelId, 'chanA');
|
|
129
|
+
});
|
|
130
|
+
test('routeSpeech precedence: fork HOME wins over the active triggering channel', async () => {
|
|
131
|
+
// A fork bound to chanA must route home even if its live turn was (somehow)
|
|
132
|
+
// triggered from chanB — home is the strongest signal and must not regress.
|
|
133
|
+
const { registry, publishCalls } = makeRegistry({ delivered: true }, (n) => (n === 'conversation-chanA-g1' ? 'chanA' : undefined), () => 'chanB');
|
|
134
|
+
registry.handleIncoming('discord', incoming('chanA', 'hi'));
|
|
135
|
+
registry.handleIncoming('discord', incoming('chanB', 'hi'));
|
|
136
|
+
const res = await registry.routeSpeech('conversation-chanA-g1', 'reply');
|
|
137
|
+
assert.deepEqual(res, { delivered: true, channelId: 'chanA' });
|
|
138
|
+
assert.equal(publishCalls.at(-1)?.channelId, 'chanA');
|
|
139
|
+
});
|
|
140
|
+
test('buildChannelContext advertises the active triggering channel as defaultOutgoing (item-3 redux)', () => {
|
|
141
|
+
const active = { scout: 'chanA' };
|
|
142
|
+
const { registry } = makeRegistry({ delivered: true }, () => undefined, (n) => active[n]);
|
|
143
|
+
registry.handleIncoming('discord', incoming('chanA', 'hi from A'));
|
|
144
|
+
registry.handleIncoming('discord', incoming('chanB', 'hi from B')); // global → chanB
|
|
145
|
+
// The trunk is TOLD chanA (where its speech will actually land), matching
|
|
146
|
+
// what routeSpeech resolves — not the global chanB.
|
|
147
|
+
const ctx = registry.buildChannelContext('scout');
|
|
148
|
+
assert.equal(ctx?.defaultOutgoing?.channelId, 'chanA');
|
|
149
|
+
});
|
|
150
|
+
test('ensureChannelRegistered opens a DM channel so the reply can route back to it (item-3 redux DM sub-case)', async () => {
|
|
151
|
+
// A Discord DM arrives via push/event (channel closed), so it is never
|
|
152
|
+
// registered and never updates defaultPublishChannel — routeSpeech would drop
|
|
153
|
+
// the reply. Registering it on inbound makes it a publishable locus; the
|
|
154
|
+
// active resolver (the woken turn's DM) then targets it.
|
|
155
|
+
const dm = 'discord:dm:42';
|
|
156
|
+
const active = { scout: dm };
|
|
157
|
+
const { registry, publishCalls, lookup, traces } = makeRegistry({ delivered: true }, () => undefined, (n) => active[n]);
|
|
158
|
+
// No prior handleIncoming for the DM — it only ever came as a push event.
|
|
159
|
+
assert.equal(lookup(dm), undefined);
|
|
160
|
+
assert.equal(registry.getDefaultPublishChannel(), null);
|
|
161
|
+
registry.ensureChannelRegistered('discord', dm, 'DM with Antra');
|
|
162
|
+
const entry = lookup(dm);
|
|
163
|
+
assert.ok(entry, 'the DM channel should be registered');
|
|
164
|
+
assert.equal(entry.serverId, 'discord');
|
|
165
|
+
assert.ok(traces.some((t) => t.type === 'mcpl:channel-lazy-registered'));
|
|
166
|
+
const res = await registry.routeSpeech('scout', 'replying in the DM');
|
|
167
|
+
assert.deepEqual(res, { delivered: true, channelId: dm }, 'the DM reply must route back to the DM channel, not the global locus');
|
|
168
|
+
assert.equal(publishCalls.at(-1)?.channelId, dm);
|
|
169
|
+
});
|
|
170
|
+
test('ensureChannelRegistered is idempotent and re-opens a closed channel', () => {
|
|
171
|
+
const { registry, lookup } = makeRegistry({ delivered: true });
|
|
172
|
+
registry.ensureChannelRegistered('discord', 'discord:guild:7', '#cairn');
|
|
173
|
+
const first = lookup('discord:guild:7');
|
|
174
|
+
assert.ok(first);
|
|
175
|
+
// Force it closed, then re-ensure — should re-open, not duplicate.
|
|
176
|
+
first.open = false;
|
|
177
|
+
registry.ensureChannelRegistered('discord', 'discord:guild:7', '#cairn');
|
|
178
|
+
const second = lookup('discord:guild:7');
|
|
179
|
+
assert.equal(second, first, 'must reuse the same entry');
|
|
180
|
+
assert.equal(second.open, true, 'a previously-closed channel is re-opened');
|
|
181
|
+
});
|
|
75
182
|
//# sourceMappingURL=channel-registry-routing.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel-registry-routing.test.js","sourceRoot":"","sources":["../../test/channel-registry-routing.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAMlE;;;GAGG;AACH,SAAS,YAAY,
|
|
1
|
+
{"version":3,"file":"channel-registry-routing.test.js","sourceRoot":"","sources":["../../test/channel-registry-routing.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAMlE;;;GAGG;AACH,SAAS,YAAY,CACnB,aAAkD,EAClD,mBAA+D,EAC/D,qBAAiE;IAEjE,MAAM,QAAQ,GAAmB,EAAE,CAAC;IACpC,MAAM,MAAM,GAAkD,EAAE,CAAC;IACjE,MAAM,YAAY,GAA2D,EAAE,CAAC;IAEhF,MAAM,UAAU,GAAG;QACjB,mBAAmB,EAAE,KAAK,EAAE,MAAuD,EAAE,EAAE;YACrF,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1B,OAAO,aAAa,CAAC;QACvB,CAAC;KACF,CAAC;IACF,MAAM,cAAc,GAAG;QACrB,SAAS,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,UAAU;KACN,CAAC;IAEnC,MAAM,QAAQ,GAAG,IAAI,eAAe,CAClC,cAAc,EACd,EAAuB,EACvB,GAAG,EAAE,GAAE,CAAC,EACR,CAAC,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC1B;QACE,cAAc,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClD,mBAAmB;QACnB,qBAAqB;KACtB,CACF,CAAC;IAEF,6EAA6E;IAC7E,uEAAuE;IACvE,MAAM,MAAM,GAAG,CAAC,SAAiB,EAAE,EAAE,CAClC,QAEC,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAEjC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;AAC9D,CAAC;AAED,SAAS,QAAQ,CAAC,SAAiB,EAAE,IAAY,EAAE,WAAoB;IACrE,OAAO;QACL,QAAQ,EAAE,CAAC;gBACT,SAAS;gBACT,SAAS,EAAE,IAAI;gBACf,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE;gBACnC,SAAS,EAAE,0BAA0B;gBACrC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC;gBAC1C,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS;aACpD,CAAC;KACH,CAAC;AACJ,CAAC;AAED,IAAI,CAAC,oFAAoF,EAAE,KAAK,IAAI,EAAE;IACpG,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEvE,6EAA6E;IAC7E,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC,CAAC;IAEhD,QAAQ,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC,cAAc,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE7E,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;IACrC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,4DAA4D,CAAC,CAAC;IAC/E,MAAM,CAAC,KAAK,CAAC,KAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACzC,MAAM,CAAC,KAAK,CAAC,KAAM,CAAC,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAChD,MAAM,CAAC,KAAK,CAAE,KAAM,CAAC,UAAU,CAAC,QAAyC,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC;IACjG,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,8BAA8B,CAAC,CAAC,CAAC;IAEvE,iEAAiE;IACjE,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC5D,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CAAC;AACxE,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;IACxF,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1E,QAAQ,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;IAE3D,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;IAEvE,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,8CAA8C,CAAC,CAAC;IACxE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,4BAA4B,CAAC,CAAC;IAC/D,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC5C,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IACpD,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,0BAA0B,CAAC,CAAC,CAAC;AACrE,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,kGAAkG,EAAE,KAAK,IAAI,EAAE;IAClH,2EAA2E;IAC3E,4EAA4E;IAC5E,8CAA8C;IAC9C,MAAM,KAAK,GAA2B,EAAE,uBAAuB,EAAE,OAAO,EAAE,CAAC;IAC3E,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,YAAY,CAC7C,EAAE,SAAS,EAAE,IAAI,EAAE,EACnB,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAChC,CAAC;IAEF,QAAQ,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;IACnE,QAAQ,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;IACnE,6BAA6B;IAC7B,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,wBAAwB,EAAE,EAAE,OAAO,CAAC,CAAC;IAE3D,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,uBAAuB,EAAE,aAAa,CAAC,CAAC;IAC/E,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,EAC3D,kEAAkE,CAAC,CAAC;IACtE,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AACxD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;IAC1F,0EAA0E;IAC1E,+BAA+B;IAC/B,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,YAAY,CAC7C,EAAE,SAAS,EAAE,IAAI,EAAE,EACnB,GAAG,EAAE,CAAC,SAAS,CAChB,CAAC;IAEF,QAAQ,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;IACnE,QAAQ,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;IAEnE,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;IACnE,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;IAC/D,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AACxD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,0EAA0E,EAAE,GAAG,EAAE;IACpF,MAAM,KAAK,GAA2B,EAAE,uBAAuB,EAAE,OAAO,EAAE,CAAC;IAC3E,MAAM,EAAE,QAAQ,EAAE,GAAG,YAAY,CAC/B,EAAE,SAAS,EAAE,IAAI,EAAE,EACnB,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAChC,CAAC;IAEF,QAAQ,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;IACnE,QAAQ,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;IAEnE,8DAA8D;IAC9D,MAAM,OAAO,GAAG,QAAQ,CAAC,mBAAmB,CAAC,uBAAuB,CAAC,CAAC;IACtE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAE3D,iEAAiE;IACjE,MAAM,QAAQ,GAAG,QAAQ,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACvD,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AAC9D,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;IAC9E,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,YAAY,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACjE,qDAAqD;IACrD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IACjE,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACxB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACjC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC1C,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC;AAEH,iFAAiF;AAEjF,IAAI,CAAC,+GAA+G,EAAE,KAAK,IAAI,EAAE;IAC/H,4EAA4E;IAC5E,mEAAmE;IACnE,2EAA2E;IAC3E,2EAA2E;IAC3E,qEAAqE;IACrE,MAAM,MAAM,GAA2B,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAC1D,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,YAAY,CAC7C,EAAE,SAAS,EAAE,IAAI,EAAE,EACnB,GAAG,EAAE,CAAC,SAAS,EAAgB,mDAAmD;IAClF,CAAC,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CACjC,CAAC;IAEF,QAAQ,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAC1E,QAAQ,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,wBAAwB;IAC/F,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,wBAAwB,EAAE,EAAE,OAAO,CAAC,CAAC;IAE3D,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;IACnE,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,EAC3D,yFAAyF,CAAC,CAAC;IAC7F,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AACxD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;IAC3F,4EAA4E;IAC5E,4EAA4E;IAC5E,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,YAAY,CAC7C,EAAE,SAAS,EAAE,IAAI,EAAE,EACnB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,uBAAuB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,EAC5D,GAAG,EAAE,CAAC,OAAO,CACd,CAAC;IACF,QAAQ,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IAC5D,QAAQ,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IAE5D,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,uBAAuB,EAAE,OAAO,CAAC,CAAC;IACzE,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;IAC/D,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AACxD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,gGAAgG,EAAE,GAAG,EAAE;IAC1G,MAAM,MAAM,GAA2B,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAC1D,MAAM,EAAE,QAAQ,EAAE,GAAG,YAAY,CAC/B,EAAE,SAAS,EAAE,IAAI,EAAE,EACnB,GAAG,EAAE,CAAC,SAAS,EACf,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CACjB,CAAC;IACF,QAAQ,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;IACnE,QAAQ,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,iBAAiB;IAErF,0EAA0E;IAC1E,oDAAoD;IACpD,MAAM,GAAG,GAAG,QAAQ,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AACzD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,yGAAyG,EAAE,KAAK,IAAI,EAAE;IACzH,uEAAuE;IACvE,8EAA8E;IAC9E,yEAAyE;IACzE,yDAAyD;IACzD,MAAM,EAAE,GAAG,eAAe,CAAC;IAC3B,MAAM,MAAM,GAA2B,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACrD,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAC7D,EAAE,SAAS,EAAE,IAAI,EAAE,EACnB,GAAG,EAAE,CAAC,SAAS,EACf,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CACjB,CAAC;IAEF,0EAA0E;IAC1E,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;IACpC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,wBAAwB,EAAE,EAAE,IAAI,CAAC,CAAC;IAExD,QAAQ,CAAC,uBAAuB,CAAC,SAAS,EAAE,EAAE,EAAE,eAAe,CAAC,CAAC;IAEjE,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IACzB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,qCAAqC,CAAC,CAAC;IACxD,MAAM,CAAC,KAAK,CAAC,KAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACzC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,8BAA8B,CAAC,CAAC,CAAC;IAEzE,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;IACtE,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,EACtD,sEAAsE,CAAC,CAAC;IAC1E,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;AACnD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,qEAAqE,EAAE,GAAG,EAAE;IAC/E,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,QAAQ,CAAC,uBAAuB,CAAC,SAAS,EAAE,iBAAiB,EAAE,QAAQ,CAAC,CAAC;IACzE,MAAM,KAAK,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACxC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IACjB,mEAAmE;IACnE,KAAM,CAAC,IAAI,GAAG,KAAK,CAAC;IACpB,QAAQ,CAAC,uBAAuB,CAAC,SAAS,EAAE,iBAAiB,EAAE,QAAQ,CAAC,CAAC;IACzE,MAAM,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACzC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,2BAA2B,CAAC,CAAC;IACzD,MAAM,CAAC,KAAK,CAAC,MAAO,CAAC,IAAI,EAAE,IAAI,EAAE,0CAA0C,CAAC,CAAC;AAC/E,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoint-attribution.test.d.ts","sourceRoot":"","sources":["../../test/checkpoint-attribution.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { describe, it } from 'node:test';
|
|
2
|
+
import assert from 'node:assert';
|
|
3
|
+
import { CheckpointManager } from '../src/mcpl/checkpoint-manager.js';
|
|
4
|
+
// Minimal in-memory JsStore covering the slots CheckpointManager touches.
|
|
5
|
+
function fakeStore() {
|
|
6
|
+
const m = new Map();
|
|
7
|
+
return {
|
|
8
|
+
registerState(_opts) { },
|
|
9
|
+
getStateJson(id) { return m.has(id) ? m.get(id) : null; },
|
|
10
|
+
setStateJson(id, v) { m.set(id, v); },
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
describe('CheckpointManager host-managed attribution', () => {
|
|
14
|
+
it('threads the host-managed set even when a server-managed set registers first', () => {
|
|
15
|
+
const cm = new CheckpointManager(fakeStore(), () => { });
|
|
16
|
+
const srv = 'xgate';
|
|
17
|
+
// Mirror x-mcpl's declaration order: x.post (rollback) BEFORE x.feed (host).
|
|
18
|
+
cm.registerFeatureSet(srv, 'x.post', { hostState: false, rollback: true });
|
|
19
|
+
cm.registerFeatureSet(srv, 'x.feed', { hostState: true, rollback: true });
|
|
20
|
+
cm.registerFeatureSet(srv, 'x.dm', { hostState: false, rollback: true });
|
|
21
|
+
// The old blind "first stateful" pick returns x.post (the bug); the fix
|
|
22
|
+
// selects the host-managed set for state threading.
|
|
23
|
+
assert.equal(cm.getStatefulFeatureSet(srv), 'x.post');
|
|
24
|
+
assert.equal(cm.getHostManagedFeatureSet(srv), 'x.feed');
|
|
25
|
+
// A tagged feed checkpoint lands on x.feed and is retrievable for injection.
|
|
26
|
+
cm.recordCheckpoint(srv, 'x.feed', {
|
|
27
|
+
checkpoint: '1', parent: null, featureSet: 'x.feed', data: { sources: ['alice'] },
|
|
28
|
+
});
|
|
29
|
+
assert.deepEqual(cm.getCurrentState(srv, 'x.feed'), { sources: ['alice'] });
|
|
30
|
+
// The server-managed set is not polluted by the feed's state.
|
|
31
|
+
assert.equal(cm.getCurrentState(srv, 'x.post'), undefined);
|
|
32
|
+
});
|
|
33
|
+
it('getHostManagedFeatureSet is null when the server has no host-managed set', () => {
|
|
34
|
+
const cm = new CheckpointManager(fakeStore(), () => { });
|
|
35
|
+
cm.registerFeatureSet('s', 'x.post', { hostState: false, rollback: true });
|
|
36
|
+
assert.equal(cm.getHostManagedFeatureSet('s'), null);
|
|
37
|
+
assert.equal(cm.getStatefulFeatureSet('s'), 'x.post');
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
//# sourceMappingURL=checkpoint-attribution.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkpoint-attribution.test.js","sourceRoot":"","sources":["../../test/checkpoint-attribution.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,0EAA0E;AAC1E,SAAS,SAAS;IAChB,MAAM,CAAC,GAAG,IAAI,GAAG,EAAmB,CAAC;IACrC,OAAO;QACL,aAAa,CAAC,KAAuC,IAAG,CAAC;QACzD,YAAY,CAAC,EAAU,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACjE,YAAY,CAAC,EAAU,EAAE,CAAU,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;KACvD,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,4CAA4C,EAAE,GAAG,EAAE;IAC1D,EAAE,CAAC,6EAA6E,EAAE,GAAG,EAAE;QACrF,MAAM,EAAE,GAAG,IAAI,iBAAiB,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACxD,MAAM,GAAG,GAAG,OAAO,CAAC;QACpB,6EAA6E;QAC7E,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3E,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1E,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAEzE,wEAAwE;QACxE,oDAAoD;QACpD,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;QACtD,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;QAEzD,6EAA6E;QAC7E,EAAE,CAAC,gBAAgB,CAAC,GAAG,EAAE,QAAQ,EAAE;YACjC,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE;SAClF,CAAC,CAAC;QACH,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC5E,8DAA8D;QAC9D,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,GAAG,EAAE;QAClF,MAAM,EAAE,GAAG,IAAI,iBAAiB,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACxD,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3E,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;QACrD,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation-fork-injection-scoping.test.d.ts","sourceRoot":"","sources":["../../test/conversation-fork-injection-scoping.test.ts"],"names":[],"mappings":""}
|