@animalabs/agent-framework 0.6.6 → 0.6.8

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 (117) hide show
  1. package/README.md +78 -0
  2. package/dist/src/agent.d.ts +5 -1
  3. package/dist/src/agent.d.ts.map +1 -1
  4. package/dist/src/agent.js +35 -1
  5. package/dist/src/agent.js.map +1 -1
  6. package/dist/src/api/mcp-server.js +0 -0
  7. package/dist/src/api/server.d.ts.map +1 -1
  8. package/dist/src/api/server.js +7 -2
  9. package/dist/src/api/server.js.map +1 -1
  10. package/dist/src/framework.d.ts +91 -3
  11. package/dist/src/framework.d.ts.map +1 -1
  12. package/dist/src/framework.js +988 -82
  13. package/dist/src/framework.js.map +1 -1
  14. package/dist/src/gate/event-gate.d.ts.map +1 -1
  15. package/dist/src/gate/event-gate.js +9 -2
  16. package/dist/src/gate/event-gate.js.map +1 -1
  17. package/dist/src/index.d.ts +4 -0
  18. package/dist/src/index.d.ts.map +1 -1
  19. package/dist/src/index.js +3 -0
  20. package/dist/src/index.js.map +1 -1
  21. package/dist/src/mcpl/channel-registry.d.ts +3 -1
  22. package/dist/src/mcpl/channel-registry.d.ts.map +1 -1
  23. package/dist/src/mcpl/channel-registry.js +29 -15
  24. package/dist/src/mcpl/channel-registry.js.map +1 -1
  25. package/dist/src/mcpl/server-connection.d.ts +36 -3
  26. package/dist/src/mcpl/server-connection.d.ts.map +1 -1
  27. package/dist/src/mcpl/server-connection.js +142 -28
  28. package/dist/src/mcpl/server-connection.js.map +1 -1
  29. package/dist/src/modules/workspace/index.d.ts +12 -1
  30. package/dist/src/modules/workspace/index.d.ts.map +1 -1
  31. package/dist/src/modules/workspace/index.js +661 -2
  32. package/dist/src/modules/workspace/index.js.map +1 -1
  33. package/dist/src/modules/workspace/types.d.ts +4 -0
  34. package/dist/src/modules/workspace/types.d.ts.map +1 -1
  35. package/dist/src/modules/workspace/types.js.map +1 -1
  36. package/dist/src/recovery/discord-awareness-outbox.d.ts +99 -0
  37. package/dist/src/recovery/discord-awareness-outbox.d.ts.map +1 -0
  38. package/dist/src/recovery/discord-awareness-outbox.js +334 -0
  39. package/dist/src/recovery/discord-awareness-outbox.js.map +1 -0
  40. package/dist/src/recovery/offline-branch.d.ts +45 -0
  41. package/dist/src/recovery/offline-branch.d.ts.map +1 -0
  42. package/dist/src/recovery/offline-branch.js +362 -0
  43. package/dist/src/recovery/offline-branch.js.map +1 -0
  44. package/dist/src/recovery/recover-cli.d.ts +3 -0
  45. package/dist/src/recovery/recover-cli.d.ts.map +1 -0
  46. package/dist/src/recovery/recover-cli.js +129 -0
  47. package/dist/src/recovery/recover-cli.js.map +1 -0
  48. package/dist/src/types/agent.d.ts +10 -0
  49. package/dist/src/types/agent.d.ts.map +1 -1
  50. package/dist/src/types/framework.d.ts +14 -0
  51. package/dist/src/types/framework.d.ts.map +1 -1
  52. package/dist/src/types/module.d.ts +31 -0
  53. package/dist/src/types/module.d.ts.map +1 -1
  54. package/dist/src/types/trace.d.ts +2 -0
  55. package/dist/src/types/trace.d.ts.map +1 -1
  56. package/dist/test/agent-runtime-settings.test.js +200 -93
  57. package/dist/test/agent-runtime-settings.test.js.map +1 -1
  58. package/dist/test/busy-agent-scheduler.test.d.ts +2 -0
  59. package/dist/test/busy-agent-scheduler.test.d.ts.map +1 -0
  60. package/dist/test/busy-agent-scheduler.test.js +62 -0
  61. package/dist/test/busy-agent-scheduler.test.js.map +1 -0
  62. package/dist/test/channel-lifecycle-provenance.test.d.ts +2 -0
  63. package/dist/test/channel-lifecycle-provenance.test.d.ts.map +1 -0
  64. package/dist/test/channel-lifecycle-provenance.test.js +47 -0
  65. package/dist/test/channel-lifecycle-provenance.test.js.map +1 -0
  66. package/dist/test/discord-awareness-outbox.test.d.ts +2 -0
  67. package/dist/test/discord-awareness-outbox.test.d.ts.map +1 -0
  68. package/dist/test/discord-awareness-outbox.test.js +248 -0
  69. package/dist/test/discord-awareness-outbox.test.js.map +1 -0
  70. package/dist/test/maintenance-timer.test.js +100 -0
  71. package/dist/test/maintenance-timer.test.js.map +1 -1
  72. package/dist/test/mcpl-awareness-barrier.test.d.ts +2 -0
  73. package/dist/test/mcpl-awareness-barrier.test.d.ts.map +1 -0
  74. package/dist/test/mcpl-awareness-barrier.test.js +618 -0
  75. package/dist/test/mcpl-awareness-barrier.test.js.map +1 -0
  76. package/dist/test/mcpl-reconnect-reregistration.test.js +22 -3
  77. package/dist/test/mcpl-reconnect-reregistration.test.js.map +1 -1
  78. package/dist/test/mcpl-request-timeout.test.js +15 -0
  79. package/dist/test/mcpl-request-timeout.test.js.map +1 -1
  80. package/dist/test/offline-recovery-branch.test.d.ts +2 -0
  81. package/dist/test/offline-recovery-branch.test.d.ts.map +1 -0
  82. package/dist/test/offline-recovery-branch.test.js +226 -0
  83. package/dist/test/offline-recovery-branch.test.js.map +1 -0
  84. package/dist/test/present-while-acting.test.d.ts +3 -2
  85. package/dist/test/present-while-acting.test.d.ts.map +1 -1
  86. package/dist/test/present-while-acting.test.js +31 -3
  87. package/dist/test/present-while-acting.test.js.map +1 -1
  88. package/dist/test/refusal-single-call.test.d.ts +2 -0
  89. package/dist/test/refusal-single-call.test.d.ts.map +1 -0
  90. package/dist/test/refusal-single-call.test.js +177 -0
  91. package/dist/test/refusal-single-call.test.js.map +1 -0
  92. package/dist/test/same-round-think-policy.test.d.ts +2 -0
  93. package/dist/test/same-round-think-policy.test.d.ts.map +1 -0
  94. package/dist/test/same-round-think-policy.test.js +853 -0
  95. package/dist/test/same-round-think-policy.test.js.map +1 -0
  96. package/dist/test/workspace-read-image.test.d.ts +2 -0
  97. package/dist/test/workspace-read-image.test.d.ts.map +1 -0
  98. package/dist/test/workspace-read-image.test.js +518 -0
  99. package/dist/test/workspace-read-image.test.js.map +1 -0
  100. package/dist/tsconfig.tsbuildinfo +1 -1
  101. package/package.json +5 -3
  102. package/src/agent.ts +39 -2
  103. package/src/api/server.ts +8 -2
  104. package/src/framework.ts +1180 -79
  105. package/src/gate/event-gate.ts +15 -3
  106. package/src/index.ts +20 -0
  107. package/src/mcpl/channel-registry.ts +31 -16
  108. package/src/mcpl/server-connection.ts +163 -28
  109. package/src/modules/workspace/index.ts +759 -2
  110. package/src/modules/workspace/types.ts +5 -0
  111. package/src/recovery/discord-awareness-outbox.ts +459 -0
  112. package/src/recovery/offline-branch.ts +510 -0
  113. package/src/recovery/recover-cli.ts +130 -0
  114. package/src/types/agent.ts +14 -0
  115. package/src/types/framework.ts +17 -0
  116. package/src/types/module.ts +33 -0
  117. package/src/types/trace.ts +2 -0
@@ -0,0 +1,248 @@
1
+ import { test } from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { mkdtempSync, readFileSync, rmSync } from 'node:fs';
4
+ import { join } from 'node:path';
5
+ import { tmpdir } from 'node:os';
6
+ import { DiscordAwarenessOutbox, extractDiscordAwarenessRefs, } from '../src/recovery/discord-awareness-outbox.js';
7
+ import { AgentFramework } from '../src/framework.js';
8
+ test('extractDiscordAwarenessRefs keeps only direct Discord addressing metadata', () => {
9
+ const refs = extractDiscordAwarenessRefs([
10
+ { metadata: { serverId: 'discord', channelId: 'discord:g1:c1', messageId: 'm1' } },
11
+ { metadata: { serverId: 'portal', channelId: 'portal:thread-1', messageId: 'p1' } },
12
+ { metadata: { serverId: 'discord', channelId: 'discord:g1:c1', messageId: 'm1' } },
13
+ { metadata: { serverId: 'discord', channelId: 'discord:g1:c1' } },
14
+ ]);
15
+ assert.deepEqual(refs, [
16
+ { serverId: 'discord', channelId: 'discord:g1:c1', messageId: 'm1' },
17
+ ]);
18
+ });
19
+ test('ledger survives restart and reverses completed markers on source branch', () => {
20
+ const dir = mkdtempSync(join(tmpdir(), 'discord-awareness-outbox-'));
21
+ const path = join(dir, 'outbox.json');
22
+ try {
23
+ const first = new DiscordAwarenessOutbox(path);
24
+ const batch = first.prepare({
25
+ agentName: 'cairn',
26
+ sourceBranch: 'main',
27
+ targetBranch: 'recovery/cairn/1',
28
+ refs: [
29
+ { serverId: 'discord', channelId: 'discord:g1:c1', messageId: 'm1' },
30
+ { serverId: 'discord', channelId: 'discord:g1:c1', messageId: 'm2' },
31
+ ],
32
+ });
33
+ assert.ok(batch);
34
+ assert.equal(first.pending('discord').length, 0, 'prepared work is not delivered early');
35
+ // Simulate the host restarting after Chronicle switched branches but
36
+ // before the recovery process activated its batch.
37
+ const reopened = new DiscordAwarenessOutbox(path);
38
+ assert.equal(reopened.activatePreparedForBranch('some-other-branch'), 0);
39
+ assert.equal(reopened.activatePreparedForBranch('recovery/cairn/1'), 1);
40
+ assert.deepEqual(reopened.pending('discord').map((operation) => operation.ref.messageId), ['m1', 'm2']);
41
+ reopened.recordSuccess(batch.id, batch.refs[0], 'add');
42
+ assert.deepEqual(reopened.pending('discord').map((op) => op.ref.messageId), ['m2']);
43
+ reopened.recordSuccess(batch.id, batch.refs[1], 'add');
44
+ assert.equal(reopened.pending('discord').length, 0);
45
+ // Completed work remains durable and switching back queues removals.
46
+ reopened.reconcileForBranch('main');
47
+ const removals = reopened.pending('discord');
48
+ assert.deepEqual(removals.map((op) => op.action), ['remove', 'remove']);
49
+ for (const operation of removals) {
50
+ reopened.recordSuccess(operation.batchId, operation.ref, operation.action);
51
+ }
52
+ assert.equal(reopened.pending('discord').length, 0);
53
+ assert.equal(reopened.batches().length, 1);
54
+ assert.ok(reopened.batches()[0].refs.every((ref) => !ref.markerPresent));
55
+ const stored = JSON.parse(readFileSync(path, 'utf8'));
56
+ assert.equal(stored.version, 2);
57
+ assert.equal(stored.batches.length, 1);
58
+ }
59
+ finally {
60
+ rmSync(dir, { recursive: true, force: true });
61
+ }
62
+ });
63
+ test('explicit batches are not activated merely because their target branch is current', () => {
64
+ const dir = mkdtempSync(join(tmpdir(), 'discord-awareness-explicit-'));
65
+ const path = join(dir, 'outbox.json');
66
+ try {
67
+ const outbox = new DiscordAwarenessOutbox(path);
68
+ const batch = outbox.prepare({
69
+ agentName: 'cairn',
70
+ sourceBranch: 'main',
71
+ targetBranch: 'recovery/cairn/suppressed',
72
+ activationPolicy: 'explicit',
73
+ refs: [
74
+ { serverId: 'discord', channelId: 'discord:g1:c1', messageId: 'm1' },
75
+ ],
76
+ });
77
+ assert.equal(outbox.activatePreparedForBranch('recovery/cairn/suppressed'), 0);
78
+ assert.equal(outbox.pending('discord').length, 0);
79
+ outbox.activate(batch.id);
80
+ assert.equal(outbox.pending('discord').length, 1);
81
+ }
82
+ finally {
83
+ rmSync(dir, { recursive: true, force: true });
84
+ }
85
+ });
86
+ test('framework resumes an interrupted suppression before activating its markers', async () => {
87
+ const dir = mkdtempSync(join(tmpdir(), 'discord-awareness-resume-'));
88
+ const path = join(dir, 'outbox.json');
89
+ try {
90
+ const outbox = new DiscordAwarenessOutbox(path);
91
+ const batch = outbox.prepare({
92
+ agentName: 'cairn',
93
+ sourceBranch: 'main',
94
+ targetBranch: 'recovery/cairn/suppressed',
95
+ activationPolicy: 'explicit',
96
+ suppressionIntervals: [
97
+ { fromId: 'i1', toId: 'i2' },
98
+ { fromId: 'i3', toId: 'i3' },
99
+ ],
100
+ refs: [
101
+ { serverId: 'discord', channelId: 'discord:g1:c1', messageId: 'm1' },
102
+ ],
103
+ });
104
+ const present = new Set(['i1', 'i2']); // i3 interval committed before crash.
105
+ const removals = [];
106
+ const cm = {
107
+ getMessage: (id) => present.has(id) ? { id } : null,
108
+ removeMessage: (id) => { present.delete(id); removals.push(id); },
109
+ removeMessages: (from, to) => {
110
+ present.delete(from);
111
+ present.delete(to);
112
+ removals.push(`${from}..${to}`);
113
+ },
114
+ };
115
+ const framework = Object.create(AgentFramework.prototype);
116
+ framework.discordAwarenessOutbox = outbox;
117
+ framework.store = {
118
+ currentBranch: () => ({ name: 'recovery/cairn/suppressed' }),
119
+ listBranches: () => [],
120
+ };
121
+ framework.agents = new Map([['cairn', { getContextManager: () => cm }]]);
122
+ await framework.resumePreparedDiscordSuppressions();
123
+ assert.deepEqual(removals, ['i1..i2']);
124
+ assert.equal(outbox.batches().find((candidate) => candidate.id === batch.id)?.status, 'active');
125
+ assert.deepEqual(outbox.pending('discord').map((operation) => operation.ref.messageId), ['m1']);
126
+ }
127
+ finally {
128
+ rmSync(dir, { recursive: true, force: true });
129
+ }
130
+ });
131
+ test('framework drain records failures per ref and continues past permanent failures', async () => {
132
+ const dir = mkdtempSync(join(tmpdir(), 'discord-awareness-drain-'));
133
+ const path = join(dir, 'outbox.json');
134
+ try {
135
+ const outbox = new DiscordAwarenessOutbox(path);
136
+ const batch = outbox.prepare({
137
+ agentName: 'cairn',
138
+ sourceBranch: 'main',
139
+ targetBranch: 'recovery/cairn/2',
140
+ refs: [
141
+ { serverId: 'discord', channelId: 'discord:g1:c1', messageId: 'm1' },
142
+ { serverId: 'discord', channelId: 'discord:g1:c1', messageId: 'm2' },
143
+ { serverId: 'discord', channelId: 'discord:g1:c1', messageId: 'm3' },
144
+ { serverId: 'discord', channelId: 'discord:g1:c1', messageId: 'm4' },
145
+ ],
146
+ });
147
+ outbox.activate(batch.id);
148
+ const calls = [];
149
+ let retryableFailure = true;
150
+ const connection = {
151
+ isConnected: true,
152
+ sendToolsCallWithDeadline: async (name, args) => {
153
+ calls.push({ name, args });
154
+ if (args.messageId === 'm2') {
155
+ return { isError: true, content: [{ type: 'text', text: 'Unknown Message' }] };
156
+ }
157
+ if (args.messageId === 'm3' && retryableFailure)
158
+ throw new Error('Discord unavailable');
159
+ return { content: [{ type: 'text', text: 'Reaction added' }] };
160
+ },
161
+ };
162
+ const framework = Object.create(AgentFramework.prototype);
163
+ framework.discordAwarenessOutbox = outbox;
164
+ framework.discordAwarenessDrains = new Map();
165
+ framework.mcplServerRegistry = { getServer: () => connection };
166
+ const originalError = console.error;
167
+ console.error = () => { };
168
+ try {
169
+ await framework.drainDiscordAwarenessOutbox('discord');
170
+ }
171
+ finally {
172
+ console.error = originalError;
173
+ }
174
+ assert.deepEqual(calls[0], {
175
+ name: 'add_reaction',
176
+ args: { channelId: 'c1', messageId: 'm1', emoji: '💤' },
177
+ });
178
+ assert.deepEqual(outbox.pending('discord').map((operation) => operation.ref.messageId), ['m3']);
179
+ assert.deepEqual(calls.map((call) => call.args.messageId), ['m1', 'm2', 'm3', 'm4']);
180
+ const entries = outbox.batches()[0].refs;
181
+ assert.equal(entries.find((entry) => entry.messageId === 'm2')?.deliveryStatus, 'permanent-failure');
182
+ assert.equal(entries.find((entry) => entry.messageId === 'm3')?.deliveryStatus, 'pending');
183
+ assert.equal(entries.find((entry) => entry.messageId === 'm4')?.deliveryStatus, 'applied');
184
+ retryableFailure = false;
185
+ await framework.drainDiscordAwarenessOutbox('discord');
186
+ assert.equal(outbox.pending('discord').length, 0);
187
+ outbox.reconcileForBranch('main');
188
+ calls.length = 0;
189
+ await framework.drainDiscordAwarenessOutbox('discord');
190
+ assert.deepEqual(calls.map((call) => [call.name, call.args.messageId]), [
191
+ ['remove_reaction', 'm1'],
192
+ ['remove_reaction', 'm3'],
193
+ ['remove_reaction', 'm4'],
194
+ ]);
195
+ assert.ok(outbox.batches()[0].refs.every((entry) => !entry.markerPresent));
196
+ }
197
+ finally {
198
+ rmSync(dir, { recursive: true, force: true });
199
+ }
200
+ });
201
+ test('message-granular undo prepares markers before switching branches', async () => {
202
+ const dir = mkdtempSync(join(tmpdir(), 'discord-awareness-undo-'));
203
+ const path = join(dir, 'outbox.json');
204
+ try {
205
+ const messages = [
206
+ { id: 'i0', metadata: { serverId: 'discord', channelId: 'discord:g1:c1', messageId: 'm0' } },
207
+ { id: 'i1', metadata: { serverId: 'discord', channelId: 'discord:g1:c1', messageId: 'm1' } },
208
+ { id: 'i2', metadata: { serverId: 'discord', channelId: 'discord:g1:c1', messageId: 'm2' } },
209
+ ];
210
+ const calls = [];
211
+ let currentBranch = 'main';
212
+ const contextManager = {
213
+ getAllMessages: () => messages,
214
+ branchAt: (_id, name) => { calls.push(`branch:${name}`); return name; },
215
+ switchBranch: async (name) => { calls.push(`switch:${name}`); currentBranch = name; },
216
+ };
217
+ const framework = Object.create(AgentFramework.prototype);
218
+ framework.agents = new Map([['cairn', {
219
+ state: { status: 'idle' },
220
+ getContextManager: () => contextManager,
221
+ }]]);
222
+ framework.store = {
223
+ currentBranch: () => ({ name: currentBranch }),
224
+ listBranches: () => [
225
+ { id: 'b-main', name: 'main' },
226
+ { id: 'b-undo', name: currentBranch, parentId: 'b-main' },
227
+ ],
228
+ };
229
+ framework.discordAwarenessOutbox = new DiscordAwarenessOutbox(path);
230
+ framework.discordAwarenessEmoji = '🫥';
231
+ framework.discordAwarenessDrains = new Map();
232
+ framework.mcplServerRegistry = null;
233
+ framework.moduleRegistry = { getModule: () => null };
234
+ framework.lastVisiblePreview = async () => null;
235
+ const result = await framework.handleHostCommand('discord', {
236
+ command: 'undo', agentName: 'cairn', messages: 2,
237
+ });
238
+ assert.equal(result.ok, true);
239
+ assert.deepEqual(result.removedRefs.map((ref) => ref.messageId), ['m1', 'm2']);
240
+ assert.deepEqual(calls.map((call) => call.split('/')[0]), ['branch:undo-msgs', 'switch:undo-msgs']);
241
+ assert.deepEqual(framework.discordAwarenessOutbox.pending('discord').map((operation) => operation.ref.messageId), ['m1', 'm2']);
242
+ assert.ok(framework.discordAwarenessOutbox.pending('discord').every((operation) => operation.emoji === '🫥'));
243
+ }
244
+ finally {
245
+ rmSync(dir, { recursive: true, force: true });
246
+ }
247
+ });
248
+ //# sourceMappingURL=discord-awareness-outbox.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discord-awareness-outbox.test.js","sourceRoot":"","sources":["../../test/discord-awareness-outbox.test.ts"],"names":[],"mappings":"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"}
@@ -8,11 +8,36 @@ class QueuedStrategy {
8
8
  name = 'queued-test';
9
9
  ticks = 0;
10
10
  toolCounts = [];
11
+ thinkDescriptions = [];
11
12
  checkReadiness() {
12
13
  return { ready: this.ticks >= 2, description: 'test maintenance queued' };
13
14
  }
14
15
  async tick(ctx) {
15
16
  this.toolCounts.push(ctx.tools?.length ?? 0);
17
+ const think = ctx.tools?.find((tool) => tool.name === 'think');
18
+ if (think)
19
+ this.thinkDescriptions.push(think.description);
20
+ this.ticks++;
21
+ }
22
+ select(_store, _log, _budget) {
23
+ return [];
24
+ }
25
+ }
26
+ class ProviderBoundMaintenanceStrategy {
27
+ name = 'provider-bound-maintenance-test';
28
+ ticks = 0;
29
+ checkReadiness() {
30
+ return { ready: this.ticks >= 1, description: 'provider-bound maintenance queued' };
31
+ }
32
+ async tick(ctx) {
33
+ await ctx.membrane?.complete({
34
+ model: 'test-model',
35
+ messages: [{
36
+ role: 'user',
37
+ content: [{ type: 'text', text: 'maintenance request' }],
38
+ }],
39
+ tools: ctx.tools,
40
+ });
16
41
  this.ticks++;
17
42
  }
18
43
  select(_store, _log, _budget) {
@@ -54,6 +79,24 @@ const membrane = {
54
79
  throw new Error('not expected');
55
80
  },
56
81
  };
82
+ class CapturingMembrane {
83
+ calls = [];
84
+ async complete(request) {
85
+ this.calls.push(request);
86
+ return {
87
+ content: [],
88
+ stopReason: 'end_turn',
89
+ rawAssistantText: '',
90
+ toolCalls: [],
91
+ toolResults: [],
92
+ usage: { inputTokens: 1, outputTokens: 1 },
93
+ details: { raw: {} },
94
+ };
95
+ }
96
+ asMembrane() {
97
+ return this;
98
+ }
99
+ }
57
100
  async function waitFor(predicate, timeoutMs = 1000) {
58
101
  const deadline = Date.now() + timeoutMs;
59
102
  while (!predicate()) {
@@ -124,6 +167,63 @@ describe('queued context maintenance timer', () => {
124
167
  rmSync(dir, { recursive: true, force: true });
125
168
  }
126
169
  });
170
+ it('passes a policy-correct dynamic think definition into the provider-bound maintenance request', async () => {
171
+ const cases = [
172
+ {
173
+ label: 'private',
174
+ sameRoundThinkTextPolicy: 'private',
175
+ expected: /withheld from channel routing/,
176
+ },
177
+ {
178
+ label: 'compatibility-public',
179
+ expected: /may still be routed publicly as your speech/,
180
+ },
181
+ ];
182
+ for (const testCase of cases) {
183
+ const dir = mkdtempSync(join(tmpdir(), `af-maintenance-think-${testCase.label}-`));
184
+ const strategy = new ProviderBoundMaintenanceStrategy();
185
+ const capture = new CapturingMembrane();
186
+ const framework = await AgentFramework.create({
187
+ storePath: join(dir, 'store'),
188
+ membrane: capture.asMembrane(),
189
+ agents: [{
190
+ name: 'agent',
191
+ model: 'test-model',
192
+ systemPrompt: 'test',
193
+ strategy,
194
+ ...(testCase.sameRoundThinkTextPolicy !== undefined
195
+ ? { sameRoundThinkTextPolicy: testCase.sameRoundThinkTextPolicy }
196
+ : {}),
197
+ allowedTools: 'all',
198
+ }],
199
+ modules: [],
200
+ syncIntervalMs: 0,
201
+ maintenanceIntervalMs: 10,
202
+ });
203
+ framework.channelRegistry = {
204
+ getChannelTools: () => [
205
+ {
206
+ name: 'think',
207
+ description: 'static channel think',
208
+ inputSchema: { type: 'object', properties: { content: { type: 'string' } }, required: [] },
209
+ },
210
+ ],
211
+ stopAll: () => { },
212
+ };
213
+ try {
214
+ framework.start();
215
+ await waitFor(() => capture.calls.length === 1);
216
+ const think = capture.calls[0].tools?.find((tool) => tool.name === 'think');
217
+ assert.ok(think, 'think tool should be present on the maintenance request');
218
+ assert.match(think.description, testCase.expected);
219
+ assert.notEqual(think.description, 'static channel think');
220
+ }
221
+ finally {
222
+ await framework.stop();
223
+ rmSync(dir, { recursive: true, force: true });
224
+ }
225
+ }
226
+ });
127
227
  it('routes a maintenance failure through the ops-alert pipeline', async () => {
128
228
  const dir = mkdtempSync(join(tmpdir(), 'af-maintenance-alert-'));
129
229
  const framework = await AgentFramework.create({
@@ -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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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=mcpl-awareness-barrier.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcpl-awareness-barrier.test.d.ts","sourceRoot":"","sources":["../../test/mcpl-awareness-barrier.test.ts"],"names":[],"mappings":""}