@animalabs/agent-framework 0.6.10 → 0.7.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 +2 -0
- package/dist/src/agent.d.ts.map +1 -1
- package/dist/src/agent.js +3 -0
- package/dist/src/agent.js.map +1 -1
- package/dist/src/code-execution/index.d.ts +14 -0
- package/dist/src/code-execution/index.d.ts.map +1 -0
- package/dist/src/code-execution/index.js +13 -0
- package/dist/src/code-execution/index.js.map +1 -0
- package/dist/src/code-execution/py-runner.d.ts +91 -0
- package/dist/src/code-execution/py-runner.d.ts.map +1 -0
- package/dist/src/code-execution/py-runner.js +364 -0
- package/dist/src/code-execution/py-runner.js.map +1 -0
- package/dist/src/code-execution/runtime-py.d.ts +32 -0
- package/dist/src/code-execution/runtime-py.d.ts.map +1 -0
- package/dist/src/code-execution/runtime-py.js +265 -0
- package/dist/src/code-execution/runtime-py.js.map +1 -0
- package/dist/src/code-execution/tool-definition.d.ts +16 -0
- package/dist/src/code-execution/tool-definition.d.ts.map +1 -0
- package/dist/src/code-execution/tool-definition.js +45 -0
- package/dist/src/code-execution/tool-definition.js.map +1 -0
- package/dist/src/framework.d.ts +157 -15
- package/dist/src/framework.d.ts.map +1 -1
- package/dist/src/framework.js +1068 -104
- package/dist/src/framework.js.map +1 -1
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +4 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcpl/channel-registry.d.ts +99 -7
- package/dist/src/mcpl/channel-registry.d.ts.map +1 -1
- package/dist/src/mcpl/channel-registry.js +374 -49
- package/dist/src/mcpl/channel-registry.js.map +1 -1
- package/dist/src/mcpl/prose-grammar.d.ts +24 -0
- package/dist/src/mcpl/prose-grammar.d.ts.map +1 -0
- package/dist/src/mcpl/prose-grammar.js +33 -0
- package/dist/src/mcpl/prose-grammar.js.map +1 -0
- package/dist/src/mcpl/prose-stream-router.d.ts +58 -0
- package/dist/src/mcpl/prose-stream-router.d.ts.map +1 -0
- package/dist/src/mcpl/prose-stream-router.js +168 -0
- package/dist/src/mcpl/prose-stream-router.js.map +1 -0
- package/dist/src/modules/workspace/index.d.ts.map +1 -1
- package/dist/src/modules/workspace/index.js +13 -4
- package/dist/src/modules/workspace/index.js.map +1 -1
- package/dist/src/types/agent.d.ts +17 -0
- package/dist/src/types/agent.d.ts.map +1 -1
- package/dist/src/types/framework.d.ts +33 -0
- package/dist/src/types/framework.d.ts.map +1 -1
- package/dist/src/types/trace.d.ts +32 -0
- package/dist/src/types/trace.d.ts.map +1 -1
- package/dist/test/channel-registry-routing.test.js +186 -10
- package/dist/test/channel-registry-routing.test.js.map +1 -1
- package/dist/test/code-execution.test.d.ts +11 -0
- package/dist/test/code-execution.test.d.ts.map +1 -0
- package/dist/test/code-execution.test.js +412 -0
- package/dist/test/code-execution.test.js.map +1 -0
- package/dist/test/explicit-prose-routing.test.d.ts +11 -0
- package/dist/test/explicit-prose-routing.test.d.ts.map +1 -0
- package/dist/test/explicit-prose-routing.test.js +247 -0
- package/dist/test/explicit-prose-routing.test.js.map +1 -0
- package/dist/test/present-while-acting.test.js +85 -8
- package/dist/test/present-while-acting.test.js.map +1 -1
- package/dist/test/prose-stream-router.test.d.ts +2 -0
- package/dist/test/prose-stream-router.test.d.ts.map +1 -0
- package/dist/test/prose-stream-router.test.js +87 -0
- package/dist/test/prose-stream-router.test.js.map +1 -0
- package/dist/test/trunk-channel-routing.test.js +2 -2
- package/dist/test/trunk-channel-routing.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -4
- package/src/agent.ts +3 -0
- package/src/code-execution/index.ts +19 -0
- package/src/code-execution/py-runner.ts +433 -0
- package/src/code-execution/runtime-py.ts +265 -0
- package/src/code-execution/tool-definition.ts +52 -0
- package/src/framework.ts +1160 -107
- package/src/index.ts +17 -0
- package/src/mcpl/channel-registry.ts +454 -54
- package/src/mcpl/prose-grammar.ts +40 -0
- package/src/mcpl/prose-stream-router.ts +161 -0
- package/src/modules/workspace/index.ts +13 -4
- package/src/types/agent.ts +18 -0
- package/src/types/framework.ts +35 -0
- package/src/types/trace.ts +47 -1
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Explicit prose routing (docs/explicit-prose-routing.md).
|
|
3
|
+
*
|
|
4
|
+
* The model names every destination in-band (`>>` prefixes); unprefixed prose
|
|
5
|
+
* is NEVER delivered — it bounces to a clipboard for a prefixed resend. The
|
|
6
|
+
* laria regression (2026-07-24): a DM reply generated while the host-inferred
|
|
7
|
+
* locus pointed at a guild channel was misdelivered there. In explicit mode
|
|
8
|
+
* that class is structurally impossible: the worst case is a bounce.
|
|
9
|
+
*/
|
|
10
|
+
import { describe, it, beforeEach, afterEach } from 'node:test';
|
|
11
|
+
import assert from 'node:assert/strict';
|
|
12
|
+
import { tmpdir } from 'node:os';
|
|
13
|
+
import { mkdtempSync, rmSync } from 'node:fs';
|
|
14
|
+
import { join } from 'node:path';
|
|
15
|
+
import { AgentFramework } from '../src/index.js';
|
|
16
|
+
import { MockMembrane, createMockResponse } from './helpers/mock-membrane.js';
|
|
17
|
+
class ToolboxModule {
|
|
18
|
+
name = 'robot';
|
|
19
|
+
framework = null;
|
|
20
|
+
async start(_ctx) { }
|
|
21
|
+
async stop() { }
|
|
22
|
+
getTools() {
|
|
23
|
+
return [{
|
|
24
|
+
name: 'move',
|
|
25
|
+
description: 'Move the robot',
|
|
26
|
+
inputSchema: { type: 'object', properties: { dir: { type: 'string' } } },
|
|
27
|
+
}];
|
|
28
|
+
}
|
|
29
|
+
async handleToolCall(_call) {
|
|
30
|
+
return { success: true, data: { ok: true } };
|
|
31
|
+
}
|
|
32
|
+
async onProcess(event, _state) {
|
|
33
|
+
if (event.type === 'external-message') {
|
|
34
|
+
const text = String(event.content);
|
|
35
|
+
return {
|
|
36
|
+
addMessages: [{ participant: 'Antra', content: [{ type: 'text', text }] }],
|
|
37
|
+
requestInference: text === 'go',
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
return {};
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/** Registry stub: two known channels (#alpha guild, laria's DM) + capture. */
|
|
44
|
+
function stubRegistry(framework) {
|
|
45
|
+
const routed = [];
|
|
46
|
+
const known = {
|
|
47
|
+
'#alpha': { channelId: 'chan-alpha', label: '#alpha' },
|
|
48
|
+
'alpha': { channelId: 'chan-alpha', label: '#alpha' },
|
|
49
|
+
'chan-alpha': { channelId: 'chan-alpha', label: '#alpha' },
|
|
50
|
+
'@laria': { channelId: 'discord:dm:99', label: 'DM: laria' },
|
|
51
|
+
'discord:dm:99': { channelId: 'discord:dm:99', label: 'DM: laria' },
|
|
52
|
+
};
|
|
53
|
+
const explicit = {
|
|
54
|
+
resolveProseTarget: (spec) => known[spec] ?? { error: `no channel matches "${spec}"` },
|
|
55
|
+
routeSpeech: async (_agent, text, locus) => {
|
|
56
|
+
routed.push({ text, locus: locus ?? null });
|
|
57
|
+
return { delivered: true, channelId: locus ?? '' };
|
|
58
|
+
},
|
|
59
|
+
resolveLocus: () => 'should-never-be-used',
|
|
60
|
+
getDefaultPublishChannel: () => null,
|
|
61
|
+
isChannelOpen: () => true,
|
|
62
|
+
getDescriptor: () => undefined,
|
|
63
|
+
getChannelTools: () => [],
|
|
64
|
+
};
|
|
65
|
+
framework.channelRegistry = new Proxy(explicit, {
|
|
66
|
+
get: (target, prop) => (prop in target ? target[prop] : () => undefined),
|
|
67
|
+
});
|
|
68
|
+
return routed;
|
|
69
|
+
}
|
|
70
|
+
describe('explicit prose routing', () => {
|
|
71
|
+
let tempDir;
|
|
72
|
+
let membrane;
|
|
73
|
+
let module;
|
|
74
|
+
beforeEach(() => {
|
|
75
|
+
tempDir = mkdtempSync(join(tmpdir(), 'epr-test-'));
|
|
76
|
+
membrane = new MockMembrane();
|
|
77
|
+
module = new ToolboxModule();
|
|
78
|
+
});
|
|
79
|
+
afterEach(() => {
|
|
80
|
+
rmSync(tempDir, { recursive: true, force: true });
|
|
81
|
+
});
|
|
82
|
+
async function createFramework() {
|
|
83
|
+
const framework = await AgentFramework.create({
|
|
84
|
+
storePath: join(tempDir, 'test.chronicle'),
|
|
85
|
+
membrane: membrane.asMembrane(),
|
|
86
|
+
agents: [{
|
|
87
|
+
name: 'assistant',
|
|
88
|
+
model: 'test-model',
|
|
89
|
+
systemPrompt: 'You are a test agent.',
|
|
90
|
+
proseRouting: 'explicit',
|
|
91
|
+
}],
|
|
92
|
+
modules: [module],
|
|
93
|
+
});
|
|
94
|
+
module.framework = framework;
|
|
95
|
+
return framework;
|
|
96
|
+
}
|
|
97
|
+
function trigger(framework) {
|
|
98
|
+
framework.pushEvent({
|
|
99
|
+
type: 'external-message',
|
|
100
|
+
source: 'test',
|
|
101
|
+
content: 'go',
|
|
102
|
+
metadata: {},
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
/** Feed a response for the Nth turn (1-based) the moment it starts —
|
|
106
|
+
* MockMembrane hands ALL remaining responses to the first stream, so
|
|
107
|
+
* later turns must receive theirs at inference:started time. */
|
|
108
|
+
function feedTurn(framework, turn, blocks, stop) {
|
|
109
|
+
let count = 0;
|
|
110
|
+
const off = framework.onTrace((e) => {
|
|
111
|
+
if (e.type !== 'inference:started')
|
|
112
|
+
return;
|
|
113
|
+
count++;
|
|
114
|
+
if (count === turn) {
|
|
115
|
+
membrane.pushResponse(createMockResponse(blocks, stop));
|
|
116
|
+
off();
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
it('unprefixed prose NEVER delivers — bounces to clipboard, then a prefixed {{unsent}} resend delivers verbatim (laria regression)', async () => {
|
|
121
|
+
const original = 'laria.\n\nYes, I remember. Two words through the keyhole.';
|
|
122
|
+
membrane.pushResponse(createMockResponse([{ type: 'text', text: original }]));
|
|
123
|
+
const framework = await createFramework();
|
|
124
|
+
const routed = stubRegistry(framework);
|
|
125
|
+
const bounceNotices = [];
|
|
126
|
+
framework.onTrace((e) => {
|
|
127
|
+
const ev = e;
|
|
128
|
+
if (ev.type === 'message:added' && ev.source === 'prose-bounce')
|
|
129
|
+
bounceNotices.push(1);
|
|
130
|
+
});
|
|
131
|
+
// Turn 2 = the bounce-wake: model resends with a destination.
|
|
132
|
+
feedTurn(framework, 2, [{ type: 'text', text: '>>@laria {{unsent}}' }]);
|
|
133
|
+
trigger(framework);
|
|
134
|
+
await framework.runUntilIdle();
|
|
135
|
+
assert.equal(bounceNotices.length, 1, 'exactly one bounce notice');
|
|
136
|
+
assert.equal(routed.length, 1, 'only the prefixed resend delivered');
|
|
137
|
+
assert.equal(routed[0].locus, 'discord:dm:99', 'delivered to the DM the model named');
|
|
138
|
+
assert.equal(routed[0].text, original, 'clipboard substitution is verbatim');
|
|
139
|
+
await framework.stop();
|
|
140
|
+
});
|
|
141
|
+
it('resolves label prefixes and applies the sticky turn target to later unprefixed segments', async () => {
|
|
142
|
+
membrane.pushResponse(createMockResponse([
|
|
143
|
+
{ type: 'text', text: '>>#alpha first segment' },
|
|
144
|
+
{ type: 'tool_use', id: 'c1', name: 'robot--move', input: { dir: 'north' } },
|
|
145
|
+
], 'tool_use'));
|
|
146
|
+
membrane.pushResponse(createMockResponse([
|
|
147
|
+
{ type: 'text', text: 'second segment, no prefix' },
|
|
148
|
+
]));
|
|
149
|
+
const framework = await createFramework();
|
|
150
|
+
const routed = stubRegistry(framework);
|
|
151
|
+
trigger(framework);
|
|
152
|
+
await framework.runUntilIdle();
|
|
153
|
+
assert.deepEqual(routed, [
|
|
154
|
+
{ text: 'first segment', locus: 'chan-alpha' },
|
|
155
|
+
{ text: 'second segment, no prefix', locus: 'chan-alpha' },
|
|
156
|
+
], 'prefix stripped on wire; sticky target carries the second segment');
|
|
157
|
+
await framework.stop();
|
|
158
|
+
});
|
|
159
|
+
it('>>skip_reply keeps the text in context — nothing delivered, no bounce', async () => {
|
|
160
|
+
membrane.pushResponse(createMockResponse([
|
|
161
|
+
{ type: 'text', text: '>>skip_reply\nWorking through the plan here.' },
|
|
162
|
+
]));
|
|
163
|
+
const framework = await createFramework();
|
|
164
|
+
const routed = stubRegistry(framework);
|
|
165
|
+
const bounceNotices = [];
|
|
166
|
+
framework.onTrace((e) => {
|
|
167
|
+
const ev = e;
|
|
168
|
+
if (ev.type === 'message:added' && ev.source === 'prose-bounce')
|
|
169
|
+
bounceNotices.push(1);
|
|
170
|
+
});
|
|
171
|
+
trigger(framework);
|
|
172
|
+
await framework.runUntilIdle();
|
|
173
|
+
assert.equal(routed.length, 0, 'skip_reply text is never delivered');
|
|
174
|
+
assert.equal(bounceNotices.length, 0, 'skip_reply text never bounces');
|
|
175
|
+
await framework.stop();
|
|
176
|
+
});
|
|
177
|
+
it("' !' continuation starts another turn immediately after prose ends the current one", async () => {
|
|
178
|
+
membrane.pushResponse(createMockResponse([
|
|
179
|
+
{ type: 'text', text: '>>#alpha ! step one done, continuing' },
|
|
180
|
+
]));
|
|
181
|
+
const framework = await createFramework();
|
|
182
|
+
const routed = stubRegistry(framework);
|
|
183
|
+
feedTurn(framework, 2, [{ type: 'text', text: '>>#alpha step two done' }]);
|
|
184
|
+
trigger(framework);
|
|
185
|
+
await framework.runUntilIdle();
|
|
186
|
+
assert.equal(membrane.calls.length, 2, 'a second inference ran without any external event');
|
|
187
|
+
assert.deepEqual(routed.map((r) => r.text), ['step one done, continuing', 'step two done']);
|
|
188
|
+
assert.deepEqual(routed.map((r) => r.locus), ['chan-alpha', 'chan-alpha']);
|
|
189
|
+
await framework.stop();
|
|
190
|
+
});
|
|
191
|
+
it('appends the mode primer exactly once across turns', async () => {
|
|
192
|
+
membrane.pushResponse(createMockResponse([
|
|
193
|
+
{ type: 'text', text: '>>#alpha hello' },
|
|
194
|
+
]));
|
|
195
|
+
const framework = await createFramework();
|
|
196
|
+
stubRegistry(framework);
|
|
197
|
+
const primers = [];
|
|
198
|
+
framework.onTrace((e) => {
|
|
199
|
+
const ev = e;
|
|
200
|
+
if (ev.type === 'message:added' && ev.source === 'prose-routing-primer')
|
|
201
|
+
primers.push(1);
|
|
202
|
+
});
|
|
203
|
+
trigger(framework);
|
|
204
|
+
await framework.runUntilIdle();
|
|
205
|
+
assert.equal(primers.length, 1, 'primer on first explicit turn');
|
|
206
|
+
membrane.pushResponse(createMockResponse([
|
|
207
|
+
{ type: 'text', text: '>>#alpha again' },
|
|
208
|
+
]));
|
|
209
|
+
trigger(framework);
|
|
210
|
+
await framework.runUntilIdle();
|
|
211
|
+
assert.equal(primers.length, 1, 'no re-priming on later turns');
|
|
212
|
+
await framework.stop();
|
|
213
|
+
});
|
|
214
|
+
it('prose_help tool returns the routing reference on demand', async () => {
|
|
215
|
+
membrane.pushResponse(createMockResponse([
|
|
216
|
+
{ type: 'tool_use', id: 'c1', name: 'prose_help', input: {} },
|
|
217
|
+
], 'tool_use'));
|
|
218
|
+
membrane.pushResponse(createMockResponse([
|
|
219
|
+
{ type: 'text', text: '>>#alpha got it' },
|
|
220
|
+
]));
|
|
221
|
+
const framework = await createFramework();
|
|
222
|
+
const routed = stubRegistry(framework);
|
|
223
|
+
trigger(framework);
|
|
224
|
+
await framework.runUntilIdle();
|
|
225
|
+
const stream = membrane.lastStream;
|
|
226
|
+
assert.equal(stream.receivedToolResults.length, 1);
|
|
227
|
+
const result = JSON.stringify(stream.receivedToolResults[0]);
|
|
228
|
+
assert.ok(result.includes('destination'), 'help text served as tool result');
|
|
229
|
+
assert.deepEqual(routed, [{ text: 'got it', locus: 'chan-alpha' }]);
|
|
230
|
+
await framework.stop();
|
|
231
|
+
});
|
|
232
|
+
it('multi-envelope prose: each >> line routes independently (Tilde scenario)', async () => {
|
|
233
|
+
membrane.pushResponse(createMockResponse([
|
|
234
|
+
{ type: 'text', text: '>>#alpha part one for the channel\n>>@laria part two, just for you\nwith a second line\n>> quoted arrow stays in body' },
|
|
235
|
+
]));
|
|
236
|
+
const framework = await createFramework();
|
|
237
|
+
const routed = stubRegistry(framework);
|
|
238
|
+
trigger(framework);
|
|
239
|
+
await framework.runUntilIdle();
|
|
240
|
+
assert.deepEqual(routed, [
|
|
241
|
+
{ text: 'part one for the channel', locus: 'chan-alpha' },
|
|
242
|
+
{ text: 'part two, just for you\nwith a second line\n>> quoted arrow stays in body', locus: 'discord:dm:99' },
|
|
243
|
+
], 'two envelopes, two destinations; quoted arrow not split');
|
|
244
|
+
await framework.stop();
|
|
245
|
+
});
|
|
246
|
+
});
|
|
247
|
+
//# sourceMappingURL=explicit-prose-routing.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"explicit-prose-routing.test.js","sourceRoot":"","sources":["../../test/explicit-prose-routing.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,6 +34,9 @@ class RobotModule {
|
|
|
34
34
|
interjection = null;
|
|
35
35
|
/** Optional routing locus attached to the interjected message. */
|
|
36
36
|
interjectionChannelId = null;
|
|
37
|
+
/** Full metadata override for the interjected message (wins over
|
|
38
|
+
* interjectionChannelId when set) — e.g. reaction tags. */
|
|
39
|
+
interjectionMetadata = null;
|
|
37
40
|
/** Delay tool completion so live routing deterministically precedes it. */
|
|
38
41
|
toolDelayMs = 0;
|
|
39
42
|
async start(_ctx) { }
|
|
@@ -63,9 +66,10 @@ class RobotModule {
|
|
|
63
66
|
type: 'external-message',
|
|
64
67
|
source: 'test',
|
|
65
68
|
content: text,
|
|
66
|
-
metadata: this.
|
|
67
|
-
|
|
68
|
-
|
|
69
|
+
metadata: this.interjectionMetadata
|
|
70
|
+
?? (this.interjectionChannelId
|
|
71
|
+
? { channelId: this.interjectionChannelId }
|
|
72
|
+
: {}),
|
|
69
73
|
});
|
|
70
74
|
// Give the run loop a beat to process the queued message while this
|
|
71
75
|
// tool round is still pending (pendingAssistantBlocks non-empty), so
|
|
@@ -226,10 +230,14 @@ describe('present while acting', () => {
|
|
|
226
230
|
assert.deepEqual(routed.map((r) => r.text), ['Round one narration.'], 'round-1 prose delivered live; round-2 (silencing) and trailing suppressed');
|
|
227
231
|
await framework.stop();
|
|
228
232
|
});
|
|
229
|
-
it('new injected channel input resets send suppression
|
|
230
|
-
//
|
|
231
|
-
//
|
|
232
|
-
//
|
|
233
|
+
it('new injected channel input resets send suppression but the turn locus stays frozen', async () => {
|
|
234
|
+
// While handling one channel, the agent explicitly sends that response; a
|
|
235
|
+
// message from another channel arrives during the send, and the terminal
|
|
236
|
+
// prose answers the new message. The suppression is cleared (the prose IS
|
|
237
|
+
// delivered) — but it lands in the TURN's frozen locus, not the injected
|
|
238
|
+
// message's channel: ambient input must never capture the agent's voice
|
|
239
|
+
// mid-turn (2026-07-21 Cairn lounge misroute). A cross-channel reply
|
|
240
|
+
// needs an explicit send.
|
|
233
241
|
membrane.pushResponse(createMockResponse([
|
|
234
242
|
{ type: 'tool_use', id: 'c1', name: 'robot--send_message', input: { text: 'reply to room4' } },
|
|
235
243
|
], 'tool_use'));
|
|
@@ -243,10 +251,79 @@ describe('present while acting', () => {
|
|
|
243
251
|
trigger(framework);
|
|
244
252
|
await framework.runUntilIdle();
|
|
245
253
|
assert.deepEqual(routed, [
|
|
246
|
-
{ text: 'Yes, I want to try the VR space.', locus: '
|
|
254
|
+
{ text: 'Yes, I want to try the VR space.', locus: 'chan-live-1' },
|
|
247
255
|
]);
|
|
248
256
|
await framework.stop();
|
|
249
257
|
});
|
|
258
|
+
it('reactions and system markers injected mid-turn do not clear send suppression', async () => {
|
|
259
|
+
// A reaction (`chat:reaction` tag) or a `system: true` marker is not
|
|
260
|
+
// conversational input: prose following an explicit send stays suppressed,
|
|
261
|
+
// so a stray reaction can't make the agent double-post a "sent it"
|
|
262
|
+
// postscript — and (with the frozen locus) can't move routing either.
|
|
263
|
+
membrane.pushResponse(createMockResponse([
|
|
264
|
+
{ type: 'tool_use', id: 'c1', name: 'robot--send_message', input: { text: 'reply to room4' } },
|
|
265
|
+
], 'tool_use'));
|
|
266
|
+
membrane.pushResponse(createMockResponse([
|
|
267
|
+
{ type: 'text', text: 'Sent it.' },
|
|
268
|
+
]));
|
|
269
|
+
const framework = await createFramework();
|
|
270
|
+
const routed = stubChannelRegistry(framework);
|
|
271
|
+
module.interjection = '[reaction] @someone reacted 👍';
|
|
272
|
+
module.interjectionChannelId = null;
|
|
273
|
+
module.interjectionMetadata = { channelId: '999888777', tags: ['chat:reaction'] };
|
|
274
|
+
trigger(framework);
|
|
275
|
+
await framework.runUntilIdle();
|
|
276
|
+
assert.deepEqual(routed, [], 'post-send prose stayed suppressed after a reaction');
|
|
277
|
+
await framework.stop();
|
|
278
|
+
});
|
|
279
|
+
it('text-only turns route to the turn-frozen locus, not a live re-resolution', async () => {
|
|
280
|
+
// The text-only dispatch runs after the agent is idle; a live resolution
|
|
281
|
+
// there can read the NEXT turn's trigger state or a post-restart cleared
|
|
282
|
+
// one (2026-07-22 Sol DM misroute). The stub increments its locus per
|
|
283
|
+
// resolveLocus() call: the turn-start freeze consumes chan-live-1, so a
|
|
284
|
+
// live re-resolution at dispatch would return chan-live-2. The frozen
|
|
285
|
+
// path must deliver to chan-live-1.
|
|
286
|
+
membrane.pushResponse(createMockResponse([
|
|
287
|
+
{ type: 'text', text: 'A quiet reply with no tools.' },
|
|
288
|
+
]));
|
|
289
|
+
const framework = await createFramework();
|
|
290
|
+
const routed = stubChannelRegistry(framework);
|
|
291
|
+
trigger(framework);
|
|
292
|
+
await framework.runUntilIdle();
|
|
293
|
+
assert.deepEqual(routed, [
|
|
294
|
+
{ text: 'A quiet reply with no tools.', locus: 'chan-live-1' },
|
|
295
|
+
]);
|
|
296
|
+
await framework.stop();
|
|
297
|
+
});
|
|
298
|
+
it('announces the outbound locus in the window only when it changes', async () => {
|
|
299
|
+
// Turn 1 (locus chan-live-1, e2e): one durable [routing] notice — the
|
|
300
|
+
// boot baseline. Then the announce-on-change logic directly (MockMembrane
|
|
301
|
+
// supports one turn per test): same locus → silence (steady state must
|
|
302
|
+
// not chatter — KV); new locus → exactly one more notice.
|
|
303
|
+
membrane.pushResponse(createMockResponse([{ type: 'text', text: 'one' }]));
|
|
304
|
+
const framework = await createFramework();
|
|
305
|
+
stubChannelRegistry(framework);
|
|
306
|
+
const notices = [];
|
|
307
|
+
framework.onTrace((event) => {
|
|
308
|
+
const e = event;
|
|
309
|
+
if (e.type === 'message:added' && e.source === 'routing-notice') {
|
|
310
|
+
notices.push(e.source);
|
|
311
|
+
}
|
|
312
|
+
});
|
|
313
|
+
trigger(framework);
|
|
314
|
+
await framework.runUntilIdle();
|
|
315
|
+
assert.equal(notices.length, 1, 'first turn announced the boot-baseline locus');
|
|
316
|
+
const announce = framework.announceLocusIfChanged.bind(framework);
|
|
317
|
+
announce('assistant', 'chan-live-1');
|
|
318
|
+
assert.equal(notices.length, 1, 'unchanged locus announced nothing');
|
|
319
|
+
announce('assistant', 'chan-B');
|
|
320
|
+
assert.equal(notices.length, 2, 'changed locus announced exactly once');
|
|
321
|
+
announce('assistant', 'chan-B');
|
|
322
|
+
assert.equal(notices.length, 2, 'steady state on the new locus stays silent');
|
|
323
|
+
announce('assistant', null);
|
|
324
|
+
assert.equal(notices.length, 3, 'losing the locus is announced too');
|
|
325
|
+
await framework.stop();
|
|
326
|
+
});
|
|
250
327
|
// -------------------------------------------------------------------------
|
|
251
328
|
// Hear-while-acting
|
|
252
329
|
// -------------------------------------------------------------------------
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"present-while-acting.test.js","sourceRoot":"","sources":["../../test/present-while-acting.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"present-while-acting.test.js","sourceRoot":"","sources":["../../test/present-while-acting.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prose-stream-router.test.d.ts","sourceRoot":"","sources":["../../test/prose-stream-router.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
// ProseStreamRouter: streamed routing must agree with the delivery path's
|
|
2
|
+
// grammar (prose-grammar.parseProsePrefix + the envelope splitter) regardless
|
|
3
|
+
// of how the token stream is chopped. The last test is the property that
|
|
4
|
+
// matters most: char-by-char feeding ≡ one-shot feeding.
|
|
5
|
+
import { test } from 'node:test';
|
|
6
|
+
import assert from 'node:assert/strict';
|
|
7
|
+
import { ProseStreamRouter } from '../src/mcpl/prose-stream-router.js';
|
|
8
|
+
const RESOLVE = {
|
|
9
|
+
'#general': 'discord:g:100',
|
|
10
|
+
'#ops': 'discord:g:200',
|
|
11
|
+
'@sol': 'discord:dm:300',
|
|
12
|
+
};
|
|
13
|
+
function explicit() {
|
|
14
|
+
return new ProseStreamRouter({
|
|
15
|
+
mode: 'explicit',
|
|
16
|
+
initialTarget: null,
|
|
17
|
+
resolve: (spec) => RESOLVE[spec] ?? null,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
function run(r, text, chunk = text.length) {
|
|
21
|
+
const out = [];
|
|
22
|
+
for (let i = 0; i < text.length; i += chunk)
|
|
23
|
+
out.push(...r.feed(text.slice(i, i + chunk)));
|
|
24
|
+
out.push(...r.finish());
|
|
25
|
+
return out;
|
|
26
|
+
}
|
|
27
|
+
function textFor(deltas, ch) {
|
|
28
|
+
return deltas.filter((d) => d.channelId === ch).map((d) => d.delta).join('');
|
|
29
|
+
}
|
|
30
|
+
test('locus mode: pure passthrough, >> lines are plain text', () => {
|
|
31
|
+
const r = new ProseStreamRouter({ mode: 'locus', initialTarget: 'discord:g:100', resolve: () => null });
|
|
32
|
+
const out = run(r, 'hello\n>>#ops not a prefix here\nbye');
|
|
33
|
+
assert.equal(textFor(out, 'discord:g:100'), 'hello\n>>#ops not a prefix here\nbye');
|
|
34
|
+
});
|
|
35
|
+
test('explicit: unprefixed leading text is suppressed (delivery would bounce it)', () => {
|
|
36
|
+
const out = run(explicit(), 'no destination yet\n>>#general now routed');
|
|
37
|
+
assert.equal(textFor(out, 'discord:g:100'), 'now routed');
|
|
38
|
+
assert.equal(out.every((d) => !d.delta.includes('no destination')), true);
|
|
39
|
+
});
|
|
40
|
+
test('explicit: multi-envelope switching, prefixes swallowed', () => {
|
|
41
|
+
const out = run(explicit(), '>>#general hello there\nstill general\n>>#ops aside for ops\n>>@sol dm line');
|
|
42
|
+
assert.equal(textFor(out, 'discord:g:100'), 'hello there\nstill general\n');
|
|
43
|
+
assert.equal(textFor(out, 'discord:g:200'), 'aside for ops\n');
|
|
44
|
+
assert.equal(textFor(out, 'discord:dm:300'), 'dm line');
|
|
45
|
+
});
|
|
46
|
+
test('quoted `>> arrow` and lone `>` stay body text', () => {
|
|
47
|
+
const out = run(explicit(), '>>#general look:\n>> quoted arrow\n> markdown quote\ndone');
|
|
48
|
+
assert.equal(textFor(out, 'discord:g:100'), 'look:\n>> quoted arrow\n> markdown quote\ndone');
|
|
49
|
+
});
|
|
50
|
+
test('skip_reply suppresses; later envelope resumes', () => {
|
|
51
|
+
const out = run(explicit(), '>>skip_reply private thought\n>>#ops public line');
|
|
52
|
+
assert.equal(out.every((d) => !d.delta.includes('private')), true);
|
|
53
|
+
assert.equal(textFor(out, 'discord:g:200'), 'public line');
|
|
54
|
+
});
|
|
55
|
+
test('unresolvable target suppresses that envelope only', () => {
|
|
56
|
+
const out = run(explicit(), '>>#nonexistent to nowhere\n>>#general to somewhere');
|
|
57
|
+
assert.equal(out.every((d) => !d.delta.includes('nowhere')), true);
|
|
58
|
+
assert.equal(textFor(out, 'discord:g:100'), 'to somewhere');
|
|
59
|
+
});
|
|
60
|
+
test('` !` continuation modifier is swallowed; `!` as body survives', () => {
|
|
61
|
+
const out = run(explicit(), '>>#general ! next turn continues\n>>#ops !bang body');
|
|
62
|
+
assert.equal(textFor(out, 'discord:g:100'), 'next turn continues\n');
|
|
63
|
+
// grammar: `([ \t]+!)?` — the first ! after whitespace is the modifier,
|
|
64
|
+
// remainder is body (matches parseProsePrefix on ">>#ops !bang body").
|
|
65
|
+
assert.equal(textFor(out, 'discord:g:200'), 'bang body');
|
|
66
|
+
});
|
|
67
|
+
test('prefix on its own line routes the following lines', () => {
|
|
68
|
+
const out = run(explicit(), '>>#general\nbody on next line\nand more');
|
|
69
|
+
assert.equal(textFor(out, 'discord:g:100'), 'body on next line\nand more');
|
|
70
|
+
});
|
|
71
|
+
test('byChannel accumulates exactly the emitted text', () => {
|
|
72
|
+
const r = explicit();
|
|
73
|
+
run(r, '>>#general one\n>>#ops two');
|
|
74
|
+
assert.equal(r.byChannel().get('discord:g:100'), 'one\n');
|
|
75
|
+
assert.equal(r.byChannel().get('discord:g:200'), 'two');
|
|
76
|
+
});
|
|
77
|
+
test('PROPERTY: char-by-char ≡ one-shot, across every chunk size', () => {
|
|
78
|
+
const text = 'lead-in ignored\n>>#general alpha\nbeta > gamma\n>> not a prefix\n>>#ops ! delta\n>>skip_reply hidden\n>>#general {{unsent}} tail';
|
|
79
|
+
const oneShot = run(explicit(), text);
|
|
80
|
+
for (const size of [1, 2, 3, 5, 7, 11]) {
|
|
81
|
+
const chunked = run(explicit(), text, size);
|
|
82
|
+
for (const ch of Object.values(RESOLVE)) {
|
|
83
|
+
assert.equal(textFor(chunked, ch), textFor(oneShot, ch));
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
//# sourceMappingURL=prose-stream-router.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prose-stream-router.test.js","sourceRoot":"","sources":["../../test/prose-stream-router.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -98,7 +98,7 @@ describe('Trunk channel routing (item-3 redux)', () => {
|
|
|
98
98
|
guildId: null,
|
|
99
99
|
isDM: true,
|
|
100
100
|
});
|
|
101
|
-
assert.deepEqual(got, { channelId: 'discord:dm:42'
|
|
101
|
+
assert.deepEqual(got, { channelId: 'discord:dm:42' });
|
|
102
102
|
await framework.stop();
|
|
103
103
|
});
|
|
104
104
|
it('derivePushEventChannel reconstructs a non-open guild channel composite', async () => {
|
|
@@ -108,7 +108,7 @@ describe('Trunk channel routing (item-3 redux)', () => {
|
|
|
108
108
|
channelId: 'C7',
|
|
109
109
|
guildId: 'G1',
|
|
110
110
|
});
|
|
111
|
-
assert.deepEqual(got, { channelId: 'discord:G1:C7'
|
|
111
|
+
assert.deepEqual(got, { channelId: 'discord:G1:C7' });
|
|
112
112
|
await framework.stop();
|
|
113
113
|
});
|
|
114
114
|
it('derivePushEventChannel returns undefined for a channel-less push (heartbeat)', async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trunk-channel-routing.test.js","sourceRoot":"","sources":["../../test/trunk-channel-routing.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"trunk-channel-routing.test.js","sourceRoot":"","sources":["../../test/trunk-channel-routing.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAE9E,oFAAoF;AACpF,SAAS,SAAS,CAAC,SAAyB;IAC1C,OAAO,SAQN,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,SAAiB,EAAE,IAAY;IACtD,OAAO;QACL,IAAI,EAAE,uBAAuB;QAC7B,QAAQ,EAAE,SAAS;QACnB,SAAS;QACT,SAAS,EAAE,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;QACrD,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE;QACnC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QACjC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,QAAQ,EAAE,EAAE;QACZ,gBAAgB,EAAE,IAAI;KACI,CAAC;AAC/B,CAAC;AAED;8EAC8E;AAC9E,SAAS,WAAW,CAAC,YAAoB,EAAE,IAAY;IACrD,OAAO;QACL,IAAI,EAAE,iBAAiB;QACvB,QAAQ,EAAE,SAAS;QACnB,UAAU,EAAE,mBAAmB;QAC/B,OAAO,EAAE,eAAe,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;QAC7D,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QACjC,MAAM,EAAE;YACN,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,YAAY;YACvB,OAAO,EAAE,IAAI;YACb,WAAW,EAAE,SAAS;YACtB,IAAI,EAAE,IAAI;SACX;QACD,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,WAAW,EAAE,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;QACzD,gBAAgB,EAAE,IAAI;KACI,CAAC;AAC/B,CAAC;AAED,QAAQ,CAAC,sCAAsC,EAAE,GAAG,EAAE;IACpD,IAAI,OAAe,CAAC;IACpB,IAAI,QAAsB,CAAC;IAE3B,UAAU,CAAC,GAAG,EAAE;QACd,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,qBAAqB,CAAC,CAAC,CAAC;QAC7D,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,KAAK,UAAU,aAAa;QAC1B,oEAAoE;QACpE,OAAO,cAAc,CAAC,MAAM,CAAC;YAC3B,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC;YAC1C,QAAQ,EAAE,QAAQ,CAAC,UAAU,EAAE;YAC/B,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,CAAC;YAChF,OAAO,EAAE,EAAE;SACZ,CAAC,CAAC;IACL,CAAC;IAED,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;QAC/E,MAAM,SAAS,GAAG,MAAM,aAAa,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,sBAAsB,CAAC;YACtD,MAAM,EAAE,SAAS;YACjB,aAAa,EAAE,gBAAgB;YAC/B,WAAW,EAAE,eAAe;YAC5B,SAAS,EAAE,KAAK;SACjB,CAAC,CAAC;QACH,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC;QAC/E,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iFAAiF,EAAE,KAAK,IAAI,EAAE;QAC/F,MAAM,SAAS,GAAG,MAAM,aAAa,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,sBAAsB,CAAC;YACtD,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,IAAI;YACf,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;QACH,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;QACtD,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;QACtF,MAAM,SAAS,GAAG,MAAM,aAAa,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,sBAAsB,CAAC;YACtD,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,IAAI;YACf,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QACH,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;QACtD,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;QAC5F,MAAM,SAAS,GAAG,MAAM,aAAa,EAAE,CAAC;QACxC,MAAM,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;QAC/B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,sBAAsB,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC;QAC7D,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,sBAAsB,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;QACzF,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;QAChF,MAAM,SAAS,GAAG,MAAM,aAAa,EAAE,CAAC;QACxC,MAAM,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;QAC/B,CAAC,CAAC,eAAe,GAAG;YAClB,uBAAuB,EAAE,GAAG,EAAE,GAAE,CAAC;YACjC,aAAa,EAAE,GAAG,EAAE,CAAC,KAAK;YAC1B,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;YACzE,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC;SAClB,CAAC;QAEF,CAAC,CAAC,mBAAmB,CAAC;YACpB,IAAI,EAAE,iBAAiB;YACvB,QAAQ,EAAE,SAAS;YACnB,UAAU,EAAE,mBAAmB;YAC/B,OAAO,EAAE,gBAAgB;YACzB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,8BAA8B,EAAE,CAAC;YACjE,MAAM,EAAE;gBACN,MAAM,EAAE,SAAS;gBACjB,SAAS,EAAE,IAAI;gBACf,aAAa,EAAE,eAAe;gBAC9B,WAAW,EAAE,WAAW;aACzB;YACD,IAAI,EAAE,CAAC,cAAc,EAAE,gBAAgB,CAAC;YACxC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,WAAW,EAAE,IAAI;YACjB,gBAAgB,EAAE,KAAK;SACxB,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAE,CAAC,iBAAiB,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC;QAC7F,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO;aAClC,MAAM,CAAC,CAAC,KAAK,EAA2C,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC;aACjF,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;aAC1B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACpB,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QACnC,wEAAwE;QACxE,oEAAoE;QACpE,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QACjC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,kCAAkC,CAAC,CAAC;QACvD,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,4BAA4B,CAAC,CAAC;QACjD,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,8BAA8B,CAAC,CAAC;QACnD,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC5E,QAAQ,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAC;QACvF,MAAM,SAAS,GAAG,MAAM,aAAa,EAAE,CAAC;QAExC,SAAS,CAAC,SAAS,CAAC,eAAe,CAAC,qBAAqB,EAAE,kBAAkB,CAAC,CAAC,CAAC;QAChF,MAAM,SAAS,CAAC,YAAY,EAAE,CAAC;QAE/B,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,oCAAoC,CAAC,CAAC;QAC7E,MAAM,CAAC,KAAK,CACV,SAAS,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC,EACvD,qBAAqB,EACrB,0DAA0D,CAC3D,CAAC;QACF,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sFAAsF,EAAE,KAAK,IAAI,EAAE;QACpG,QAAQ,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC;QACpF,MAAM,SAAS,GAAG,MAAM,aAAa,EAAE,CAAC;QAExC,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAC1D,MAAM,SAAS,CAAC,YAAY,EAAE,CAAC;QAE/B,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,kCAAkC,CAAC,CAAC;QAC3E,MAAM,CAAC,KAAK,CACV,SAAS,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC,EACvD,eAAe,EACf,iEAAiE,CAClE,CAAC;QACF,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACjF,MAAM,SAAS,GAAG,MAAM,aAAa,EAAE,CAAC;QACxC,MAAM,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;QAE/B,8EAA8E;QAC9E,2EAA2E;QAC3E,QAAQ,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7E,SAAS,CAAC,SAAS,CAAC,eAAe,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC,CAAC;QACrE,MAAM,SAAS,CAAC,YAAY,EAAE,CAAC;QAC/B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,qBAAqB,CAAC,CAAC;QAE1E,6EAA6E;QAC7E,yEAAyE;QACzE,QAAQ,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9E,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC;QACtD,MAAM,SAAS,CAAC,YAAY,EAAE,CAAC;QAC/B,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,4BAA4B,CAAC,CAAC;QACrE,MAAM,CAAC,KAAK,CACV,CAAC,CAAC,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC,EACpC,eAAe,EACf,4DAA4D,CAC7D,CAAC;QACF,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kFAAkF,EAAE,KAAK,IAAI,EAAE;QAChG,QAAQ,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5E,MAAM,SAAS,GAAG,MAAM,aAAa,EAAE,CAAC;QACxC,MAAM,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;QAE/B,4EAA4E;QAC5E,4EAA4E;QAC5E,0EAA0E;QAC1E,oCAAoC;QACpC,CAAC,CAAC,qBAAqB,CAAC,GAAG,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;QAC5D,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAE,CAAC;QAC3C,MAAO,SAEL,CAAC,gBAAgB,CAAC,KAAK,EAAE;YACzB,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SAChF,CAAC,CAAC;QACH,MAAM,SAAS,CAAC,YAAY,EAAE,CAAC;QAE/B,MAAM,CAAC,KAAK,CACV,CAAC,CAAC,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC,EACpC,KAAK,EACL,2DAA2D,CAC5D,CAAC;QACF,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|