@animalabs/agent-framework 0.6.5 → 0.6.6

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.
Files changed (69) hide show
  1. package/dist/src/agent.d.ts +18 -1
  2. package/dist/src/agent.d.ts.map +1 -1
  3. package/dist/src/agent.js +201 -2
  4. package/dist/src/agent.js.map +1 -1
  5. package/dist/src/framework.d.ts +15 -1
  6. package/dist/src/framework.d.ts.map +1 -1
  7. package/dist/src/framework.js +423 -86
  8. package/dist/src/framework.js.map +1 -1
  9. package/dist/src/gate/event-gate.d.ts.map +1 -1
  10. package/dist/src/gate/event-gate.js +27 -4
  11. package/dist/src/gate/event-gate.js.map +1 -1
  12. package/dist/src/mcpl/channel-registry.d.ts +34 -15
  13. package/dist/src/mcpl/channel-registry.d.ts.map +1 -1
  14. package/dist/src/mcpl/channel-registry.js +299 -67
  15. package/dist/src/mcpl/channel-registry.js.map +1 -1
  16. package/dist/src/mcpl/push-handler.d.ts +1 -0
  17. package/dist/src/mcpl/push-handler.d.ts.map +1 -1
  18. package/dist/src/mcpl/push-handler.js +1 -0
  19. package/dist/src/mcpl/push-handler.js.map +1 -1
  20. package/dist/src/mcpl/server-connection.d.ts +3 -1
  21. package/dist/src/mcpl/server-connection.d.ts.map +1 -1
  22. package/dist/src/mcpl/server-connection.js +4 -0
  23. package/dist/src/mcpl/server-connection.js.map +1 -1
  24. package/dist/src/mcpl/types.d.ts +43 -12
  25. package/dist/src/mcpl/types.d.ts.map +1 -1
  26. package/dist/src/mcpl/types.js +1 -0
  27. package/dist/src/mcpl/types.js.map +1 -1
  28. package/dist/src/types/agent.d.ts +15 -0
  29. package/dist/src/types/agent.d.ts.map +1 -1
  30. package/dist/src/types/events.d.ts +1 -0
  31. package/dist/src/types/events.d.ts.map +1 -1
  32. package/dist/src/types/trace.d.ts +2 -0
  33. package/dist/src/types/trace.d.ts.map +1 -1
  34. package/dist/test/agent-runtime-settings.test.d.ts +2 -0
  35. package/dist/test/agent-runtime-settings.test.d.ts.map +1 -0
  36. package/dist/test/agent-runtime-settings.test.js +120 -0
  37. package/dist/test/agent-runtime-settings.test.js.map +1 -0
  38. package/dist/test/channel-registry-routing.test.js +5 -4
  39. package/dist/test/channel-registry-routing.test.js.map +1 -1
  40. package/dist/test/conversation-fork-injection-scoping.test.js +12 -1
  41. package/dist/test/conversation-fork-injection-scoping.test.js.map +1 -1
  42. package/dist/test/event-gate.test.js +21 -1
  43. package/dist/test/event-gate.test.js.map +1 -1
  44. package/dist/test/helpers/mock-membrane.d.ts +13 -1
  45. package/dist/test/helpers/mock-membrane.d.ts.map +1 -1
  46. package/dist/test/helpers/mock-membrane.js +8 -1
  47. package/dist/test/helpers/mock-membrane.js.map +1 -1
  48. package/dist/test/maintenance-timer.test.js +3 -1
  49. package/dist/test/maintenance-timer.test.js.map +1 -1
  50. package/dist/test/mcpl-gate-roundtrip.test.js +138 -6
  51. package/dist/test/mcpl-gate-roundtrip.test.js.map +1 -1
  52. package/dist/test/present-while-acting.test.d.ts +18 -0
  53. package/dist/test/present-while-acting.test.d.ts.map +1 -0
  54. package/dist/test/present-while-acting.test.js +267 -0
  55. package/dist/test/present-while-acting.test.js.map +1 -0
  56. package/dist/test/trunk-channel-routing.test.js +38 -0
  57. package/dist/test/trunk-channel-routing.test.js.map +1 -1
  58. package/dist/tsconfig.tsbuildinfo +1 -1
  59. package/package.json +3 -3
  60. package/src/agent.ts +222 -3
  61. package/src/framework.ts +468 -92
  62. package/src/gate/event-gate.ts +38 -4
  63. package/src/mcpl/channel-registry.ts +372 -76
  64. package/src/mcpl/push-handler.ts +2 -0
  65. package/src/mcpl/server-connection.ts +10 -0
  66. package/src/mcpl/types.ts +49 -12
  67. package/src/types/agent.ts +18 -0
  68. package/src/types/events.ts +1 -1
  69. package/src/types/trace.ts +2 -0
@@ -1 +1 @@
1
- {"version":3,"file":"maintenance-timer.test.js","sourceRoot":"","sources":["../../test/maintenance-timer.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"maintenance-timer.test.js","sourceRoot":"","sources":["../../test/maintenance-timer.test.ts"],"names":[],"mappings":"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"}
@@ -97,16 +97,18 @@ describe('ChannelRegistry + EventGate roundtrip', () => {
97
97
  });
98
98
  });
99
99
  // ---------------------------------------------------------------------------
100
- // ChannelRegistry: per-server channelSubscription policy gates auto-open
100
+ // ChannelRegistry: legacy policy seeds durable desired state exactly once
101
101
  // ---------------------------------------------------------------------------
102
102
  describe('ChannelRegistry subscriptionPolicy', () => {
103
103
  function makeServerStub() {
104
104
  const opens = [];
105
+ const closes = [];
105
106
  const server = {
106
107
  sendChannelsOpen: async (args) => { opens.push(args); },
108
+ sendChannelsClose: async (args) => { closes.push(args); return { closed: true }; },
107
109
  };
108
110
  const serverRegistry = { getServer: () => server };
109
- return { opens, serverRegistry };
111
+ return { opens, closes, serverRegistry };
110
112
  }
111
113
  const channels = [
112
114
  { id: 'zulip:tracker-miner-f', type: 'zulip-stream', address: { streamId: 1 }, name: 'tracker-miner-f' },
@@ -114,18 +116,20 @@ describe('ChannelRegistry subscriptionPolicy', () => {
114
116
  { id: 'zulip:random', type: 'zulip-stream', address: { streamId: 3 }, name: 'random' },
115
117
  ];
116
118
  const registerParams = { channels };
117
- it("default 'auto' opens every registered channel", async () => {
118
- const { opens, serverRegistry } = makeServerStub();
119
+ it('defaults closed when there is no legacy policy or server bootstrap preference', async () => {
120
+ const { opens, closes, serverRegistry } = makeServerStub();
119
121
  const registry = new ChannelRegistry(serverRegistry, {}, () => { }, () => { });
120
122
  await registry.handleRegister('zulip', registerParams);
121
- assert.strictEqual(opens.length, 3);
123
+ assert.strictEqual(opens.length, 0);
124
+ assert.strictEqual(closes.length, 3);
122
125
  });
123
126
  it("'manual' opens nothing but still registers the channels", async () => {
124
- const { opens, serverRegistry } = makeServerStub();
127
+ const { opens, closes, serverRegistry } = makeServerStub();
125
128
  const registry = new ChannelRegistry(serverRegistry, {}, () => { }, () => { });
126
129
  registry.setSubscriptionPolicy('zulip', 'manual');
127
130
  await registry.handleRegister('zulip', registerParams);
128
131
  assert.strictEqual(opens.length, 0);
132
+ assert.strictEqual(closes.length, 3);
129
133
  assert.strictEqual(registry.getOpenChannels().length, 0);
130
134
  });
131
135
  it('string[] allow-list opens only matching channels', async () => {
@@ -136,5 +140,133 @@ describe('ChannelRegistry subscriptionPolicy', () => {
136
140
  assert.strictEqual(opens.length, 1);
137
141
  assert.deepStrictEqual(opens[0].address, { streamId: 1 });
138
142
  });
143
+ it("legacy 'auto' opens every channel during migration", async () => {
144
+ const { opens, serverRegistry } = makeServerStub();
145
+ const registry = new ChannelRegistry(serverRegistry, {}, () => { }, () => { });
146
+ registry.setSubscriptionPolicy('zulip', 'auto');
147
+ await registry.handleRegister('zulip', registerParams);
148
+ assert.strictEqual(opens.length, 3);
149
+ });
150
+ it('does not apply a migrated allow-list to channels discovered later', async () => {
151
+ const { opens, closes, serverRegistry } = makeServerStub();
152
+ const registry = new ChannelRegistry(serverRegistry, {}, () => { }, () => { });
153
+ registry.setSubscriptionPolicy('zulip', ['zulip:tracker-miner-f']);
154
+ await registry.handleRegister('zulip', registerParams);
155
+ await registry.handleChanged('zulip', {
156
+ added: [{
157
+ id: 'zulip:new', type: 'zulip-stream', label: 'new', direction: 'bidirectional',
158
+ address: { streamId: 4 },
159
+ }],
160
+ });
161
+ assert.strictEqual(opens.filter((o) => o.address.streamId === 4).length, 0);
162
+ assert.ok(closes.some((c) => c.channelId === 'zulip:new'));
163
+ });
164
+ });
165
+ describe('ChannelRegistry durable lifecycle', () => {
166
+ const oneChannel = [{
167
+ id: 'discord:g1:c1',
168
+ type: 'discord',
169
+ label: '#general',
170
+ direction: 'bidirectional',
171
+ address: { guildId: 'g1', channelId: 'c1' },
172
+ }];
173
+ function memoryStore() {
174
+ let registered = false;
175
+ const events = [];
176
+ return {
177
+ registerState: () => {
178
+ if (registered)
179
+ throw new Error('State already exists');
180
+ registered = true;
181
+ },
182
+ getStateJson: () => events,
183
+ appendToStateJson: (_id, event) => events.push(event),
184
+ };
185
+ }
186
+ it('restores desired state from Chronicle and reconciles it after reconnect', async () => {
187
+ const store = memoryStore();
188
+ const first = makeLifecycleServer();
189
+ const registry1 = new ChannelRegistry(first.registry, {}, () => { }, () => { }, {
190
+ store: store,
191
+ });
192
+ registry1.setSubscriptionPolicy('discord', 'auto');
193
+ await registry1.handleRegister('discord', { channels: oneChannel });
194
+ await registry1.handleChannelToolCall('channel_close', { channelId: 'discord:g1:c1' });
195
+ const second = makeLifecycleServer();
196
+ const registry2 = new ChannelRegistry(second.registry, {}, () => { }, () => { }, {
197
+ store: store,
198
+ });
199
+ // Even a contradictory legacy setting cannot override a completed migration.
200
+ registry2.setSubscriptionPolicy('discord', 'auto');
201
+ await registry2.handleRegister('discord', { channels: oneChannel });
202
+ assert.deepStrictEqual(second.opens, []);
203
+ assert.deepStrictEqual(second.closes, ['discord:g1:c1']);
204
+ assert.strictEqual(registry2.getDesiredState('discord', 'discord:g1:c1'), 'closed');
205
+ });
206
+ it('declines a closed-channel invitation with an optional acknowledgment', async () => {
207
+ const server = makeLifecycleServer();
208
+ const registry = new ChannelRegistry(server.registry, {}, () => { }, () => { });
209
+ registry.setSubscriptionPolicy('discord', 'manual');
210
+ await registry.handleRegister('discord', { channels: oneChannel });
211
+ const result = await registry.handleChannelToolCall('channel_decline', {
212
+ channelId: 'discord:g1:c1',
213
+ messageId: 'm1',
214
+ acknowledge: '👀',
215
+ });
216
+ assert.strictEqual(result.success, true);
217
+ assert.deepStrictEqual(server.acks, [{
218
+ channelId: 'discord:g1:c1', messageId: 'm1', intent: 'seen-not-opening', value: '👀',
219
+ }]);
220
+ assert.strictEqual(registry.isChannelOpen('discord:g1:c1'), false);
221
+ });
222
+ it('requires serverId only when two MCPLs expose the same channel id', async () => {
223
+ const openedBy = [];
224
+ const servers = new Map(['alpha', 'beta'].map((serverId) => [serverId, {
225
+ sendChannelsOpen: async () => {
226
+ openedBy.push(serverId);
227
+ return { channel: { ...oneChannel[0], id: 'shared' } };
228
+ },
229
+ sendChannelsClose: async () => ({ closed: true }),
230
+ }]));
231
+ const registry = new ChannelRegistry({ getServer: (id) => servers.get(id) }, {}, () => { }, () => { });
232
+ const descriptor = { ...oneChannel[0], id: 'shared' };
233
+ registry.setSubscriptionPolicy('alpha', 'manual');
234
+ registry.setSubscriptionPolicy('beta', 'manual');
235
+ await registry.handleRegister('alpha', { channels: [descriptor] });
236
+ await registry.handleRegister('beta', { channels: [descriptor] });
237
+ const ambiguous = await registry.handleChannelToolCall('channel_open', { channelId: 'shared' });
238
+ assert.strictEqual(ambiguous.success, false);
239
+ assert.match(ambiguous.error ?? '', /ambiguous/);
240
+ const exact = await registry.handleChannelToolCall('channel_open', {
241
+ channelId: 'shared', serverId: 'beta',
242
+ });
243
+ assert.strictEqual(exact.success, true);
244
+ assert.deepStrictEqual(openedBy, ['beta']);
245
+ });
246
+ function makeLifecycleServer() {
247
+ const opens = [];
248
+ const closes = [];
249
+ const acks = [];
250
+ const server = {
251
+ sendChannelsOpen: async (args) => {
252
+ opens.push(args.channelId ?? '');
253
+ return { channel: oneChannel[0] };
254
+ },
255
+ sendChannelsClose: async (args) => {
256
+ closes.push(args.channelId);
257
+ return { closed: true };
258
+ },
259
+ sendChannelsAcknowledge: async (args) => {
260
+ acks.push(args);
261
+ return { acknowledged: true, representation: '👀' };
262
+ },
263
+ };
264
+ return {
265
+ opens,
266
+ closes,
267
+ acks,
268
+ registry: { getServer: () => server },
269
+ };
270
+ }
139
271
  });
140
272
  //# sourceMappingURL=mcpl-gate-roundtrip.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcpl-gate-roundtrip.test.js","sourceRoot":"","sources":["../../test/mcpl-gate-roundtrip.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcpl-gate-roundtrip.test.js","sourceRoot":"","sources":["../../test/mcpl-gate-roundtrip.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * "Present while acting": the two halves that keep an agent conversationally
3
+ * alive during a long tool-using turn.
4
+ *
5
+ * SPEAK-while-acting — each round's prose is routed to the locus LIVE when
6
+ * the round yields its tool calls (per-round SILENCING_TOOLS rule), and the
7
+ * 'complete' case routes only the TRAILING prose (turn-wide silencing rule).
8
+ * Previously all segments were batched to the end of the turn.
9
+ *
10
+ * HEAR-while-acting — messages arriving mid-turn (deferred by addMessage
11
+ * while tool_use blocks are pending) are flushed to the context window at
12
+ * the tool-result boundary AND injected into the live stream via
13
+ * provideToolResults(results, { injectedMessages }) (membrane ≥0.5.72), so
14
+ * the next round of the SAME turn sees them instead of the agent staying
15
+ * deaf until the turn ends.
16
+ */
17
+ export {};
18
+ //# sourceMappingURL=present-while-acting.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"present-while-acting.test.d.ts","sourceRoot":"","sources":["../../test/present-while-acting.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG"}
@@ -0,0 +1,267 @@
1
+ /**
2
+ * "Present while acting": the two halves that keep an agent conversationally
3
+ * alive during a long tool-using turn.
4
+ *
5
+ * SPEAK-while-acting — each round's prose is routed to the locus LIVE when
6
+ * the round yields its tool calls (per-round SILENCING_TOOLS rule), and the
7
+ * 'complete' case routes only the TRAILING prose (turn-wide silencing rule).
8
+ * Previously all segments were batched to the end of the turn.
9
+ *
10
+ * HEAR-while-acting — messages arriving mid-turn (deferred by addMessage
11
+ * while tool_use blocks are pending) are flushed to the context window at
12
+ * the tool-result boundary AND injected into the live stream via
13
+ * provideToolResults(results, { injectedMessages }) (membrane ≥0.5.72), so
14
+ * the next round of the SAME turn sees them instead of the agent staying
15
+ * deaf until the turn ends.
16
+ */
17
+ import { describe, it, beforeEach, afterEach } from 'node:test';
18
+ import assert from 'node:assert/strict';
19
+ import { tmpdir } from 'node:os';
20
+ import { mkdtempSync, rmSync } from 'node:fs';
21
+ import { join } from 'node:path';
22
+ import { AgentFramework } from '../src/index.js';
23
+ import { MockMembrane, createMockResponse } from './helpers/mock-membrane.js';
24
+ // ---------------------------------------------------------------------------
25
+ // Test module: tools that optionally emit a mid-turn external message
26
+ // ---------------------------------------------------------------------------
27
+ class RobotModule {
28
+ name = 'robot';
29
+ framework = null;
30
+ /** When set, the next `move` call pushes this text as an external message
31
+ * BEFORE returning its result (simulating a chat reply arriving while the
32
+ * tool executes). */
33
+ interjection = null;
34
+ /** Delay tool completion so live routing deterministically precedes it. */
35
+ toolDelayMs = 0;
36
+ async start(_ctx) { }
37
+ async stop() { }
38
+ getTools() {
39
+ return [
40
+ {
41
+ name: 'move',
42
+ description: 'Move the robot',
43
+ inputSchema: { type: 'object', properties: { dir: { type: 'string' } } },
44
+ },
45
+ {
46
+ name: 'send_message',
47
+ description: 'Explicitly send a message',
48
+ inputSchema: { type: 'object', properties: { text: { type: 'string' } } },
49
+ },
50
+ ];
51
+ }
52
+ async handleToolCall(call) {
53
+ if (this.toolDelayMs > 0) {
54
+ await new Promise((r) => setTimeout(r, this.toolDelayMs));
55
+ }
56
+ if (this.interjection) {
57
+ const text = this.interjection;
58
+ this.interjection = null;
59
+ this.framework.pushEvent({
60
+ type: 'external-message',
61
+ source: 'test',
62
+ content: text,
63
+ metadata: {},
64
+ });
65
+ // Give the run loop a beat to process the queued message while this
66
+ // tool round is still pending (pendingAssistantBlocks non-empty), so
67
+ // it lands in deferredMessages before the tool-result event.
68
+ await new Promise((r) => setTimeout(r, 30));
69
+ }
70
+ return { success: true, data: { ok: true, tool: call.name } };
71
+ }
72
+ async onProcess(event, _state) {
73
+ if (event.type === 'external-message') {
74
+ const text = String(event.content);
75
+ return {
76
+ addMessages: [
77
+ {
78
+ participant: 'Antra',
79
+ content: [{ type: 'text', text }],
80
+ },
81
+ ],
82
+ // Only the initial 'go' starts a turn. Mid-turn interjections must
83
+ // NOT request inference — we're testing mid-turn delivery, not wakes.
84
+ requestInference: text === 'go',
85
+ };
86
+ }
87
+ return {};
88
+ }
89
+ }
90
+ /** Minimal ChannelRegistry stub covering everything driveStream touches. */
91
+ function stubChannelRegistry(framework) {
92
+ const routed = [];
93
+ let locusCalls = 0;
94
+ const explicit = {
95
+ resolveLocus: () => {
96
+ locusCalls++;
97
+ return `chan-live-${locusCalls}`;
98
+ },
99
+ routeSpeech: async (_agent, text, locus) => {
100
+ routed.push({ text, locus: locus ?? null });
101
+ },
102
+ getDefaultPublishChannel: () => null,
103
+ isChannelOpen: () => true,
104
+ getDescriptor: () => undefined,
105
+ getChannelTools: () => [],
106
+ };
107
+ // Everything else driveStream/stop touches (startTyping, stopTyping,
108
+ // stopAll, ensureChannelRegistered, ...) becomes a no-op via Proxy so the
109
+ // stub doesn't chase the real registry's surface.
110
+ framework.channelRegistry = new Proxy(explicit, {
111
+ get: (target, prop) => (prop in target ? target[prop] : () => undefined),
112
+ });
113
+ return routed;
114
+ }
115
+ // ---------------------------------------------------------------------------
116
+ describe('present while acting', () => {
117
+ let tempDir;
118
+ let membrane;
119
+ let module;
120
+ beforeEach(() => {
121
+ tempDir = mkdtempSync(join(tmpdir(), 'pwa-test-'));
122
+ membrane = new MockMembrane();
123
+ module = new RobotModule();
124
+ });
125
+ afterEach(() => {
126
+ rmSync(tempDir, { recursive: true, force: true });
127
+ });
128
+ async function createFramework() {
129
+ const framework = await AgentFramework.create({
130
+ storePath: join(tempDir, 'test.chronicle'),
131
+ membrane: membrane.asMembrane(),
132
+ agents: [
133
+ { name: 'assistant', model: 'test-model', systemPrompt: 'You are a robot pilot.' },
134
+ ],
135
+ modules: [module],
136
+ });
137
+ module.framework = framework;
138
+ return framework;
139
+ }
140
+ function trigger(framework) {
141
+ framework.pushEvent({
142
+ type: 'external-message',
143
+ source: 'test',
144
+ content: 'go',
145
+ metadata: {},
146
+ });
147
+ }
148
+ // -------------------------------------------------------------------------
149
+ // Speak-while-acting
150
+ // -------------------------------------------------------------------------
151
+ it('routes each round\'s prose live and only trailing prose at complete', async () => {
152
+ // Round 1: narration + move; Round 2: more narration + move; final: postscript
153
+ membrane.pushResponse(createMockResponse([
154
+ { type: 'text', text: 'Heading to the door now!' },
155
+ { type: 'tool_use', id: 'c1', name: 'robot--move', input: { dir: 'north' } },
156
+ ], 'tool_use'));
157
+ membrane.pushResponse(createMockResponse([
158
+ { type: 'text', text: 'Door reached, opening it.' },
159
+ { type: 'tool_use', id: 'c2', name: 'robot--move', input: { dir: 'east' } },
160
+ ], 'tool_use'));
161
+ membrane.pushResponse(createMockResponse([
162
+ { type: 'text', text: 'Arrived.' },
163
+ ]));
164
+ const framework = await createFramework();
165
+ const routed = stubChannelRegistry(framework);
166
+ module.toolDelayMs = 25;
167
+ // Track live ordering: when the first segment routes, no tool results
168
+ // may have been provided yet (i.e. delivery happened DURING the round).
169
+ const resultsAtRouteTime = [];
170
+ const registry = framework.channelRegistry;
171
+ const origRoute = registry.routeSpeech;
172
+ registry.routeSpeech = async (a, t, l) => {
173
+ resultsAtRouteTime.push(membrane.lastStream.receivedToolResults.length);
174
+ return origRoute(a, t, l);
175
+ };
176
+ trigger(framework);
177
+ await framework.runUntilIdle();
178
+ assert.deepEqual(routed.map((r) => r.text), ['Heading to the door now!', 'Door reached, opening it.', 'Arrived.'], 'all three segments delivered, in order');
179
+ // Live: segment N routed before round N's tool results were provided
180
+ assert.equal(resultsAtRouteTime[0], 0, 'round-1 prose routed before round-1 results');
181
+ assert.equal(resultsAtRouteTime[1], 1, 'round-2 prose routed before round-2 results');
182
+ // Locus resolved ONCE and pinned for the whole turn (incl. trailing prose)
183
+ assert.deepEqual(routed.map((r) => r.locus), ['chan-live-1', 'chan-live-1', 'chan-live-1'], 'one locus resolution, pinned across the turn');
184
+ await framework.stop();
185
+ });
186
+ it('sticky silencing: a silencing round suppresses its own and all later prose', async () => {
187
+ membrane.pushResponse(createMockResponse([
188
+ { type: 'text', text: 'sending it directly' },
189
+ { type: 'tool_use', id: 'c1', name: 'robot--send_message', input: { text: 'hi' } },
190
+ ], 'tool_use'));
191
+ membrane.pushResponse(createMockResponse([
192
+ { type: 'text', text: 'Narrating round two.' },
193
+ { type: 'tool_use', id: 'c2', name: 'robot--move', input: { dir: 'up' } },
194
+ ], 'tool_use'));
195
+ membrane.pushResponse(createMockResponse([]));
196
+ const framework = await createFramework();
197
+ const routed = stubChannelRegistry(framework);
198
+ trigger(framework);
199
+ await framework.runUntilIdle();
200
+ assert.deepEqual(routed.map((r) => r.text), [], 'explicit send in round 1 silences the turn from that round onward');
201
+ await framework.stop();
202
+ });
203
+ it('sticky silencing is forward-only: earlier rounds\' prose still routes', async () => {
204
+ membrane.pushResponse(createMockResponse([
205
+ { type: 'text', text: 'Round one narration.' },
206
+ { type: 'tool_use', id: 'c1', name: 'robot--move', input: { dir: 'up' } },
207
+ ], 'tool_use'));
208
+ membrane.pushResponse(createMockResponse([
209
+ { type: 'text', text: 'private planning' },
210
+ { type: 'tool_use', id: 'c2', name: 'robot--send_message', input: { text: 'hi' } },
211
+ ], 'tool_use'));
212
+ membrane.pushResponse(createMockResponse([
213
+ { type: 'text', text: 'trailing postscript' },
214
+ ]));
215
+ const framework = await createFramework();
216
+ const routed = stubChannelRegistry(framework);
217
+ trigger(framework);
218
+ await framework.runUntilIdle();
219
+ assert.deepEqual(routed.map((r) => r.text), ['Round one narration.'], 'round-1 prose delivered live; round-2 (silencing) and trailing suppressed');
220
+ await framework.stop();
221
+ });
222
+ // -------------------------------------------------------------------------
223
+ // Hear-while-acting
224
+ // -------------------------------------------------------------------------
225
+ it('injects a mid-turn message into the resumed stream at the tool boundary', async () => {
226
+ membrane.pushResponse(createMockResponse([
227
+ { type: 'text', text: 'Moving.' },
228
+ { type: 'tool_use', id: 'c1', name: 'robot--move', input: { dir: 'north' } },
229
+ ], 'tool_use'));
230
+ membrane.pushResponse(createMockResponse([
231
+ { type: 'text', text: 'Heard you!' },
232
+ ]));
233
+ const framework = await createFramework();
234
+ module.interjection = 'look left!';
235
+ trigger(framework);
236
+ await framework.runUntilIdle();
237
+ const stream = membrane.lastStream;
238
+ assert.equal(stream.receivedToolResults.length, 1);
239
+ const options = stream.receivedToolResultOptions[0];
240
+ assert.ok(options?.injectedMessages, 'tool-result resume carried injected messages');
241
+ assert.equal(options.injectedMessages.length, 1);
242
+ const injected = options.injectedMessages[0];
243
+ assert.equal(injected.participant, 'Antra');
244
+ const text = injected.content
245
+ .filter((b) => b.type === 'text')
246
+ .map((b) => b.text)
247
+ .join('\n');
248
+ assert.equal(text, 'look left!');
249
+ await framework.stop();
250
+ });
251
+ it('passes no injection options when nothing arrived mid-turn', async () => {
252
+ membrane.pushResponse(createMockResponse([
253
+ { type: 'tool_use', id: 'c1', name: 'robot--move', input: { dir: 'north' } },
254
+ ], 'tool_use'));
255
+ membrane.pushResponse(createMockResponse([
256
+ { type: 'text', text: 'done' },
257
+ ]));
258
+ const framework = await createFramework();
259
+ trigger(framework);
260
+ await framework.runUntilIdle();
261
+ const stream = membrane.lastStream;
262
+ assert.equal(stream.receivedToolResults.length, 1);
263
+ assert.equal(stream.receivedToolResultOptions[0], undefined);
264
+ await framework.stop();
265
+ });
266
+ });
267
+ //# sourceMappingURL=present-while-acting.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"present-while-acting.test.js","sourceRoot":"","sources":["../../test/present-while-acting.test.ts"],"names":[],"mappings":"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"}
@@ -118,6 +118,44 @@ describe('Trunk channel routing (item-3 redux)', () => {
118
118
  assert.equal(i.derivePushEventChannel({ source: 'heartbeat', kind: 'tick' }), undefined);
119
119
  await framework.stop();
120
120
  });
121
+ it('adds an actionable invitation when addressed in a closed channel', async () => {
122
+ const framework = await makeFramework();
123
+ const i = internals(framework);
124
+ i.channelRegistry = {
125
+ ensureChannelRegistered: () => { },
126
+ isChannelOpen: () => false,
127
+ getDescriptor: () => ({ capabilities: { history: { maxMessages: 80 } } }),
128
+ stopAll: () => { },
129
+ };
130
+ i.handleMcplPushEvent({
131
+ type: 'mcpl:push-event',
132
+ serverId: 'discord',
133
+ featureSet: 'discord.messaging',
134
+ eventId: 'discord_msg_m1',
135
+ content: [{ type: 'text', text: 'Antra: can you look at this?' }],
136
+ origin: {
137
+ source: 'discord',
138
+ messageId: 'm1',
139
+ mcplChannelId: 'discord:G1:C7',
140
+ channelName: 'portables',
141
+ },
142
+ tags: ['chat:mention', 'chat:addressed'],
143
+ timestamp: new Date().toISOString(),
144
+ inferenceId: 'i1',
145
+ triggerInference: false,
146
+ });
147
+ const messages = framework.getAgent('scout').getContextManager().queryMessages({}).messages;
148
+ const text = messages.at(-1)?.content
149
+ .filter((block) => block.type === 'text')
150
+ .map((block) => block.text)
151
+ .join('\n') ?? '';
152
+ assert.match(text, /Channel invitation/);
153
+ assert.match(text, /channel_open/);
154
+ assert.match(text, /backscroll \(0-80\)/);
155
+ assert.match(text, /channel_decline/);
156
+ assert.match(text, /optionally set acknowledge/);
157
+ await framework.stop();
158
+ });
121
159
  it('a channel-incoming trunk turn records its triggering channel', async () => {
122
160
  membrane.pushResponse(createMockResponse([{ type: 'text', text: 'the date is ...' }]));
123
161
  const framework = await makeFramework();