@animalabs/agent-framework 0.6.7 → 0.6.10
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 +5 -34
- package/dist/src/agent.d.ts.map +1 -1
- package/dist/src/agent.js +62 -137
- package/dist/src/agent.js.map +1 -1
- package/dist/src/framework.d.ts +14 -56
- package/dist/src/framework.d.ts.map +1 -1
- package/dist/src/framework.js +192 -1742
- package/dist/src/framework.js.map +1 -1
- package/dist/src/modules/workspace/index.d.ts +10 -0
- package/dist/src/modules/workspace/index.d.ts.map +1 -1
- package/dist/src/modules/workspace/index.js +48 -2
- package/dist/src/modules/workspace/index.js.map +1 -1
- package/dist/src/modules/workspace/types.d.ts +2 -0
- package/dist/src/modules/workspace/types.d.ts.map +1 -1
- package/dist/src/modules/workspace/types.js.map +1 -1
- package/dist/src/modules/workspace/watcher.d.ts +17 -0
- package/dist/src/modules/workspace/watcher.d.ts.map +1 -1
- package/dist/src/modules/workspace/watcher.js +143 -7
- package/dist/src/modules/workspace/watcher.js.map +1 -1
- package/dist/src/types/agent.d.ts +15 -12
- package/dist/src/types/agent.d.ts.map +1 -1
- package/dist/test/helpers/mock-membrane.js +1 -1
- package/dist/test/helpers/mock-membrane.js.map +1 -1
- package/dist/test/mcpl-awareness-barrier.test.js +1 -228
- package/dist/test/mcpl-awareness-barrier.test.js.map +1 -1
- package/dist/test/refusal-single-call.test.d.ts +2 -0
- package/dist/test/refusal-single-call.test.d.ts.map +1 -0
- package/dist/test/refusal-single-call.test.js +177 -0
- package/dist/test/refusal-single-call.test.js.map +1 -0
- package/dist/test/trunk-channel-routing.test.js +5 -1
- package/dist/test/trunk-channel-routing.test.js.map +1 -1
- package/dist/test/workspace-watcher.test.js +161 -9
- package/dist/test/workspace-watcher.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -4
- package/src/agent.ts +67 -226
- package/src/framework.ts +226 -2394
- package/src/modules/workspace/index.ts +47 -2
- package/src/modules/workspace/types.ts +2 -0
- package/src/modules/workspace/watcher.ts +160 -7
- package/src/types/agent.ts +17 -12
- package/dist/src/canonical-json.d.ts +0 -2
- package/dist/src/canonical-json.d.ts.map +0 -1
- package/dist/src/canonical-json.js +0 -23
- package/dist/src/canonical-json.js.map +0 -1
- package/dist/test/primary-summary-refusal-fallback-integration.test.d.ts +0 -2
- package/dist/test/primary-summary-refusal-fallback-integration.test.d.ts.map +0 -1
- package/dist/test/primary-summary-refusal-fallback-integration.test.js +0 -1955
- package/dist/test/primary-summary-refusal-fallback-integration.test.js.map +0 -1
- package/dist/test/primary-summary-refusal-fallback.test.d.ts +0 -2
- package/dist/test/primary-summary-refusal-fallback.test.d.ts.map +0 -1
- package/dist/test/primary-summary-refusal-fallback.test.js +0 -753
- package/dist/test/primary-summary-refusal-fallback.test.js.map +0 -1
- package/src/canonical-json.ts +0 -22
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
* downstream wake policies can key on creation vs. modification vs. deletion.
|
|
6
6
|
*/
|
|
7
7
|
import { watch } from 'chokidar';
|
|
8
|
-
import { mkdirSync } from 'node:fs';
|
|
8
|
+
import { mkdirSync, statSync } from 'node:fs';
|
|
9
|
+
import { basename } from 'node:path';
|
|
9
10
|
/**
|
|
10
11
|
* Manages filesystem watching for a single mount.
|
|
11
12
|
* Handles debouncing, ignore patterns, and write suppression.
|
|
@@ -16,8 +17,13 @@ export class MountWatcher {
|
|
|
16
17
|
// create -> modify collapses to 'created' (single batch); delete always wins.
|
|
17
18
|
pendingChanges = new Map();
|
|
18
19
|
debounceTimer = null;
|
|
20
|
+
rootPollTimer = null;
|
|
19
21
|
suppressedPaths = new Set();
|
|
20
22
|
suppressionTimers = new Map();
|
|
23
|
+
rootIdentity = null;
|
|
24
|
+
detached = false;
|
|
25
|
+
attaching = false;
|
|
26
|
+
stopped = true;
|
|
21
27
|
debounceMs;
|
|
22
28
|
config;
|
|
23
29
|
onChangeCallback;
|
|
@@ -32,8 +38,13 @@ export class MountWatcher {
|
|
|
32
38
|
* Start watching the filesystem.
|
|
33
39
|
*/
|
|
34
40
|
start() {
|
|
35
|
-
if (this.watcher)
|
|
41
|
+
if (this.watcher || this.rootPollTimer)
|
|
36
42
|
return;
|
|
43
|
+
this.stopped = false;
|
|
44
|
+
this.attach();
|
|
45
|
+
this.startRootPolling();
|
|
46
|
+
}
|
|
47
|
+
attach() {
|
|
37
48
|
// Read-write mounts: ensure the path exists before chokidar attaches.
|
|
38
49
|
// chokidar 4's fs.watch-based backend silently fails to fire events when
|
|
39
50
|
// the watched path OR any of its parent directories don't exist at
|
|
@@ -75,19 +86,37 @@ export class MountWatcher {
|
|
|
75
86
|
this.watcher.on('add', handleEvent('created'));
|
|
76
87
|
this.watcher.on('change', handleEvent('modified'));
|
|
77
88
|
this.watcher.on('unlink', handleEvent('deleted'));
|
|
89
|
+
this.watcher.on('unlinkDir', (dirPath) => {
|
|
90
|
+
if (this.isRootPath(dirPath)) {
|
|
91
|
+
this.detached = true;
|
|
92
|
+
}
|
|
93
|
+
});
|
|
78
94
|
if (this.lifecycle.onReady) {
|
|
79
95
|
this.watcher.once('ready', this.lifecycle.onReady);
|
|
80
96
|
}
|
|
81
|
-
|
|
82
|
-
this.
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
97
|
+
this.watcher.on('error', (err) => {
|
|
98
|
+
this.reportError(err);
|
|
99
|
+
});
|
|
100
|
+
this.watcher.on('raw', (event, rawPath, _details) => {
|
|
101
|
+
if (event !== 'rename')
|
|
102
|
+
return;
|
|
103
|
+
// A rename on the watched root's path/basename is the one signal that
|
|
104
|
+
// survives inode reuse on Linux, where unlinkDir/error never fire.
|
|
105
|
+
if (this.isRootPath(rawPath) || basename(rawPath) === basename(this.config.path)) {
|
|
106
|
+
void this.checkRootLiveness({ force: true });
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
this.captureRootIdentity();
|
|
86
110
|
}
|
|
87
111
|
/**
|
|
88
112
|
* Stop watching.
|
|
89
113
|
*/
|
|
90
114
|
async stop() {
|
|
115
|
+
this.stopped = true;
|
|
116
|
+
if (this.rootPollTimer) {
|
|
117
|
+
clearInterval(this.rootPollTimer);
|
|
118
|
+
this.rootPollTimer = null;
|
|
119
|
+
}
|
|
91
120
|
if (this.debounceTimer) {
|
|
92
121
|
clearTimeout(this.debounceTimer);
|
|
93
122
|
this.debounceTimer = null;
|
|
@@ -102,6 +131,9 @@ export class MountWatcher {
|
|
|
102
131
|
await this.watcher.close();
|
|
103
132
|
this.watcher = null;
|
|
104
133
|
}
|
|
134
|
+
this.rootIdentity = null;
|
|
135
|
+
this.detached = false;
|
|
136
|
+
this.attaching = false;
|
|
105
137
|
}
|
|
106
138
|
/**
|
|
107
139
|
* Suppress watcher events for a path temporarily.
|
|
@@ -174,6 +206,101 @@ export class MountWatcher {
|
|
|
174
206
|
}
|
|
175
207
|
}, this.debounceMs);
|
|
176
208
|
}
|
|
209
|
+
startRootPolling() {
|
|
210
|
+
const pollMs = this.config.watchRootPollMs ?? 2000;
|
|
211
|
+
this.rootPollTimer = setInterval(() => {
|
|
212
|
+
void this.checkRootLiveness();
|
|
213
|
+
}, pollMs);
|
|
214
|
+
this.rootPollTimer.unref();
|
|
215
|
+
}
|
|
216
|
+
async checkRootLiveness(opts = {}) {
|
|
217
|
+
if (this.stopped || this.attaching)
|
|
218
|
+
return;
|
|
219
|
+
let current;
|
|
220
|
+
try {
|
|
221
|
+
current = this.readRootIdentity();
|
|
222
|
+
}
|
|
223
|
+
catch (err) {
|
|
224
|
+
if (this.isErrno(err, 'ENOENT')) {
|
|
225
|
+
this.detached = true;
|
|
226
|
+
if (this.config.mode === 'read-write') {
|
|
227
|
+
await this.reattach();
|
|
228
|
+
}
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
this.reportError(err);
|
|
232
|
+
if (opts.force) {
|
|
233
|
+
this.detached = true;
|
|
234
|
+
await this.reattach();
|
|
235
|
+
}
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
if (!this.rootIdentity && !this.detached) {
|
|
239
|
+
await this.reattach();
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
if (!opts.force && !this.detached && this.rootIdentity
|
|
243
|
+
&& this.sameIdentity(current, this.rootIdentity)) {
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
await this.reattach();
|
|
247
|
+
}
|
|
248
|
+
async reattach() {
|
|
249
|
+
if (this.attaching || this.stopped)
|
|
250
|
+
return;
|
|
251
|
+
this.attaching = true;
|
|
252
|
+
try {
|
|
253
|
+
const oldWatcher = this.watcher;
|
|
254
|
+
this.watcher = null;
|
|
255
|
+
if (oldWatcher) {
|
|
256
|
+
await oldWatcher.close();
|
|
257
|
+
}
|
|
258
|
+
if (this.stopped)
|
|
259
|
+
return;
|
|
260
|
+
this.attach();
|
|
261
|
+
if (!this.detached && this.rootIdentity) {
|
|
262
|
+
this.lifecycle.onReattach?.();
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
catch (err) {
|
|
266
|
+
this.reportError(err);
|
|
267
|
+
}
|
|
268
|
+
finally {
|
|
269
|
+
this.attaching = false;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
captureRootIdentity() {
|
|
273
|
+
try {
|
|
274
|
+
this.rootIdentity = this.readRootIdentity();
|
|
275
|
+
this.detached = false;
|
|
276
|
+
}
|
|
277
|
+
catch (err) {
|
|
278
|
+
if (this.isErrno(err, 'ENOENT')) {
|
|
279
|
+
this.rootIdentity = null;
|
|
280
|
+
this.detached = true;
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
this.rootIdentity = null;
|
|
284
|
+
this.detached = false;
|
|
285
|
+
this.reportError(err);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
readRootIdentity() {
|
|
289
|
+
const stat = statSync(this.config.path);
|
|
290
|
+
return { dev: stat.dev, ino: stat.ino, birthtimeMs: stat.birthtimeMs };
|
|
291
|
+
}
|
|
292
|
+
sameIdentity(a, b) {
|
|
293
|
+
// birthtimeMs is only a secondary tripwire: sub-millisecond replacements
|
|
294
|
+
// can reuse both the inode and timestamp, so raw rename remains essential.
|
|
295
|
+
return a.dev === b.dev && a.ino === b.ino && a.birthtimeMs === b.birthtimeMs;
|
|
296
|
+
}
|
|
297
|
+
isErrno(err, code) {
|
|
298
|
+
return typeof err === 'object' && err !== null && 'code' in err
|
|
299
|
+
&& err.code === code;
|
|
300
|
+
}
|
|
301
|
+
reportError(err) {
|
|
302
|
+
this.lifecycle.onError?.(err instanceof Error ? err : new Error(String(err)));
|
|
303
|
+
}
|
|
177
304
|
toRelative(absolutePath) {
|
|
178
305
|
const base = this.config.path.endsWith('/')
|
|
179
306
|
? this.config.path
|
|
@@ -183,5 +310,14 @@ export class MountWatcher {
|
|
|
183
310
|
}
|
|
184
311
|
return null;
|
|
185
312
|
}
|
|
313
|
+
isRootPath(absolutePath) {
|
|
314
|
+
const root = this.config.path.endsWith('/')
|
|
315
|
+
? this.config.path.slice(0, -1)
|
|
316
|
+
: this.config.path;
|
|
317
|
+
const candidate = absolutePath.endsWith('/')
|
|
318
|
+
? absolutePath.slice(0, -1)
|
|
319
|
+
: absolutePath;
|
|
320
|
+
return candidate === root;
|
|
321
|
+
}
|
|
186
322
|
}
|
|
187
323
|
//# sourceMappingURL=watcher.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../../../src/modules/workspace/watcher.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,EAAkB,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../../../src/modules/workspace/watcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -52,6 +52,21 @@ export interface AgentConfig {
|
|
|
52
52
|
* where the cheaper write premium wins.
|
|
53
53
|
*/
|
|
54
54
|
cacheTtl?: '5m' | '1h';
|
|
55
|
+
/**
|
|
56
|
+
* Whether to emit prompt-cache markers (cache_control) on requests.
|
|
57
|
+
* Default true (Anthropic API). Set false for transports that reject
|
|
58
|
+
* cache_control — e.g. Bedrock legacy Claude models, which fail with
|
|
59
|
+
* "your request did not allow prompt caching".
|
|
60
|
+
*/
|
|
61
|
+
promptCaching?: boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Prefill-formatter support: a synthetic user message appended after the
|
|
64
|
+
* conversation (e.g. chapterx's `<cmd>cat untitled.txt</cmd>` CLI-sim
|
|
65
|
+
* scaffold). Forwarded verbatim to membrane's prefill formatters; ignored
|
|
66
|
+
* by native formatting. Part of reproducing a prefill-era bot's exact
|
|
67
|
+
* prompting structure when migrating it into a resident.
|
|
68
|
+
*/
|
|
69
|
+
prefillUserMessage?: string;
|
|
55
70
|
/** Provider-specific request parameters (for example Responses reasoning
|
|
56
71
|
* and server-side compaction settings). */
|
|
57
72
|
providerParams?: Record<string, unknown>;
|
|
@@ -99,18 +114,6 @@ export interface AgentConfig {
|
|
|
99
114
|
* than dropping it silently. Default true.
|
|
100
115
|
*/
|
|
101
116
|
announceHumanTurns?: boolean;
|
|
102
|
-
/**
|
|
103
|
-
* Primary-lane autobiographical summary refusal fallback. Disabled by
|
|
104
|
-
* default: when enabled, the framework may compare the refused primary
|
|
105
|
-
* request against the latest compatible healthy request on the same branch
|
|
106
|
-
* generation, expand newly admitted summary pairs back to exact raw
|
|
107
|
-
* source, and issue at most one retry.
|
|
108
|
-
*/
|
|
109
|
-
primarySummaryFallback?: {
|
|
110
|
-
enabled?: boolean;
|
|
111
|
-
maxNewSummaries?: number;
|
|
112
|
-
requestBudgetTokens?: number;
|
|
113
|
-
};
|
|
114
117
|
};
|
|
115
118
|
}
|
|
116
119
|
/** The intentionally small set of agent settings that may change in-process. */
|
|
@@ -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,MAAM,MAAM,wBAAwB,GAAG,QAAQ,GAAG,SAAS,CAAC;AAC5D,MAAM,MAAM,8BAA8B,GACtC,kBAAkB,GAClB,QAAQ,GACR,uBAAuB,CAAC;AAE5B;;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;IAE7B;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAEvB;+CAC2C;IAC3C,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC;;;OAGG;IACH,wBAAwB,CAAC,EAAE,wBAAwB,CAAC;IACpD;;;;;OAKG;IACH,QAAQ,CAAC,EAAE;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,yEAAyE;QACzE,IAAI,CAAC,EAAE,SAAS,GAAG,UAAU,CAAC;QAC9B;;;;WAIG;QACH,OAAO,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;KACpC,CAAC;IACF;;;;;;;;;OASG;IACH,eAAe,CAAC,EAAE;QAChB,2EAA2E;QAC3E,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,kEAAkE;QAClE,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB;;;;WAIG;QACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/types/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -68,7 +68,7 @@ export class MockYieldingStream {
|
|
|
68
68
|
if (response.usage) {
|
|
69
69
|
this.events.push({ type: 'usage', usage: response.usage });
|
|
70
70
|
}
|
|
71
|
-
if (response.
|
|
71
|
+
if (response.toolCalls.length > 0) {
|
|
72
72
|
this._isWaitingForTools = true;
|
|
73
73
|
this._pendingToolCallIds = response.toolCalls.map((c) => c.id);
|
|
74
74
|
this.events.push({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-membrane.js","sourceRoot":"","sources":["../../../test/helpers/mock-membrane.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"mock-membrane.js","sourceRoot":"","sources":["../../../test/helpers/mock-membrane.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,10 +6,9 @@ import { join } from 'node:path';
|
|
|
6
6
|
import { AgentFramework } from '../src/framework.js';
|
|
7
7
|
import { McplServerConnection } from '../src/mcpl/server-connection.js';
|
|
8
8
|
import { DiscordAwarenessOutbox } from '../src/recovery/discord-awareness-outbox.js';
|
|
9
|
-
import { MockMembrane
|
|
9
|
+
import { MockMembrane } from './helpers/mock-membrane.js';
|
|
10
10
|
const FIXTURE = fileURLToPath(new URL('./fixtures/awareness-barrier-mcpl-server.mjs', import.meta.url));
|
|
11
11
|
const TEST_ROOT = join(process.cwd(), '.test-tmp');
|
|
12
|
-
const FALLBACK_STATE_ID = 'framework/primary-summary-fallback';
|
|
13
12
|
function records(path) {
|
|
14
13
|
try {
|
|
15
14
|
return readFileSync(path, 'utf8')
|
|
@@ -108,131 +107,6 @@ function twoServerFrameworkConfig(dir, order, dataMethod, runtime = false) {
|
|
|
108
107
|
},
|
|
109
108
|
};
|
|
110
109
|
}
|
|
111
|
-
function identity(id) {
|
|
112
|
-
return {
|
|
113
|
-
id,
|
|
114
|
-
contentHash: `content-${id}`,
|
|
115
|
-
carrierHash: `carrier-${id}`,
|
|
116
|
-
sourceLeafHash: `leaf-${id}`,
|
|
117
|
-
};
|
|
118
|
-
}
|
|
119
|
-
function projection(branchId, generation, ids) {
|
|
120
|
-
return {
|
|
121
|
-
namespace: 'default',
|
|
122
|
-
branch: { id: branchId, name: 'main', generation },
|
|
123
|
-
selectedSummaries: ids.map((id, index) => ({
|
|
124
|
-
identity: identity(id),
|
|
125
|
-
level: 1,
|
|
126
|
-
orderedSourceIds: [`src-${id}-1`, `src-${id}-2`],
|
|
127
|
-
renderedAs: 'summary_pair',
|
|
128
|
-
pairRange: { start: index * 2, end: index * 2 + 1 },
|
|
129
|
-
})),
|
|
130
|
-
};
|
|
131
|
-
}
|
|
132
|
-
function request(system, text) {
|
|
133
|
-
return {
|
|
134
|
-
system,
|
|
135
|
-
messages: [{ participant: 'user', content: [{ type: 'text', text }] }],
|
|
136
|
-
config: { model: 'test-model', maxTokens: 256 },
|
|
137
|
-
assistantParticipant: 'assistant',
|
|
138
|
-
promptCaching: true,
|
|
139
|
-
cacheTtl: '1h',
|
|
140
|
-
};
|
|
141
|
-
}
|
|
142
|
-
function artifacts(systemTag, summaryIds, branchId = 'branch-a', generation = 1) {
|
|
143
|
-
return {
|
|
144
|
-
compileResult: {
|
|
145
|
-
messages: [
|
|
146
|
-
{ participant: 'Context Manager', content: [{ type: 'text', text: 'What do you remember from earlier?' }] },
|
|
147
|
-
{ participant: 'assistant', content: [{ type: 'text', text: `summary ${summaryIds.join(',')}` }] },
|
|
148
|
-
{ participant: 'user', content: [{ type: 'text', text: 'latest input' }] },
|
|
149
|
-
],
|
|
150
|
-
systemInjections: [],
|
|
151
|
-
primarySummaryProjection: projection(branchId, generation, summaryIds),
|
|
152
|
-
},
|
|
153
|
-
contract: {
|
|
154
|
-
systemHash: `system-${systemTag}`,
|
|
155
|
-
modelConfigHash: `model-${systemTag}`,
|
|
156
|
-
toolContractHash: `tools-${systemTag}`,
|
|
157
|
-
},
|
|
158
|
-
};
|
|
159
|
-
}
|
|
160
|
-
function branchInfo(id = 'branch-a', generation = 1) {
|
|
161
|
-
return {
|
|
162
|
-
id,
|
|
163
|
-
name: 'main',
|
|
164
|
-
head: 1,
|
|
165
|
-
generation,
|
|
166
|
-
created: new Date('2026-07-17T00:00:00.000Z'),
|
|
167
|
-
};
|
|
168
|
-
}
|
|
169
|
-
function refusalResponse(content = []) {
|
|
170
|
-
return {
|
|
171
|
-
...createMockResponse(content, 'refusal'),
|
|
172
|
-
content,
|
|
173
|
-
stopReason: 'refusal',
|
|
174
|
-
rawAssistantText: '',
|
|
175
|
-
toolCalls: [],
|
|
176
|
-
usage: { inputTokens: 40, outputTokens: 0 },
|
|
177
|
-
details: {
|
|
178
|
-
usage: { inputTokens: 40, outputTokens: 0 },
|
|
179
|
-
stop: { reason: 'refusal', wasTruncated: false },
|
|
180
|
-
},
|
|
181
|
-
raw: {
|
|
182
|
-
response: {
|
|
183
|
-
stop_details: { category: 'reasoning_extraction' },
|
|
184
|
-
},
|
|
185
|
-
},
|
|
186
|
-
};
|
|
187
|
-
}
|
|
188
|
-
function outputResponse(text = 'Recovered') {
|
|
189
|
-
return createMockResponse([{ type: 'text', text }]);
|
|
190
|
-
}
|
|
191
|
-
class HookedCompleteStream {
|
|
192
|
-
response;
|
|
193
|
-
beforeYield;
|
|
194
|
-
isWaitingForTools = false;
|
|
195
|
-
pendingToolCallIds = [];
|
|
196
|
-
toolDepth = 0;
|
|
197
|
-
constructor(response, beforeYield) {
|
|
198
|
-
this.response = response;
|
|
199
|
-
this.beforeYield = beforeYield;
|
|
200
|
-
}
|
|
201
|
-
provideToolResults() {
|
|
202
|
-
throw new Error('HookedCompleteStream does not support tool rounds');
|
|
203
|
-
}
|
|
204
|
-
cancel() { }
|
|
205
|
-
async *[Symbol.asyncIterator]() {
|
|
206
|
-
await this.beforeYield?.();
|
|
207
|
-
yield { type: 'complete', response: this.response };
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
class ScriptedMembrane {
|
|
211
|
-
responsesByCall;
|
|
212
|
-
calls = [];
|
|
213
|
-
constructor(responsesByCall) {
|
|
214
|
-
this.responsesByCall = responsesByCall;
|
|
215
|
-
}
|
|
216
|
-
complete() {
|
|
217
|
-
throw new Error('complete() should not be used by the primary streaming fallback path');
|
|
218
|
-
}
|
|
219
|
-
streamYielding(request) {
|
|
220
|
-
this.calls.push(structuredClone(request));
|
|
221
|
-
const next = this.responsesByCall.shift();
|
|
222
|
-
if (!next)
|
|
223
|
-
return new MockYieldingStream([createMockResponse([{ type: 'text', text: 'default' }])]);
|
|
224
|
-
return Array.isArray(next) ? new MockYieldingStream(next) : next;
|
|
225
|
-
}
|
|
226
|
-
asMembrane() {
|
|
227
|
-
return this;
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
async function persistHealthyBaseline(framework, agent, baselineRequest, baselineArtifacts) {
|
|
231
|
-
const build = framework.buildPrimarySummaryRequestRecord.bind(framework);
|
|
232
|
-
const persist = framework.persistPrimarySummaryRequestRecord.bind(framework);
|
|
233
|
-
const record = build(agent, 'baseline-request', 'primary', baselineRequest, baselineArtifacts, branchInfo(baselineArtifacts.compileResult.primarySummaryProjection.branch.id, baselineArtifacts.compileResult.primarySummaryProjection.branch.generation), 'end_turn', true, 0, 30, 'success');
|
|
234
|
-
await persist(record);
|
|
235
|
-
}
|
|
236
110
|
const DATA_METHODS = [
|
|
237
111
|
'push/event',
|
|
238
112
|
'inference/request',
|
|
@@ -298,107 +172,6 @@ for (const order of ['heartbeat-first', 'discord-first']) {
|
|
|
298
172
|
}
|
|
299
173
|
});
|
|
300
174
|
}
|
|
301
|
-
test('runtime awareness barrier blocks internally queued fallback retries until the newest release', async () => {
|
|
302
|
-
mkdirSync(TEST_ROOT, { recursive: true });
|
|
303
|
-
const dir = mkdtempSync(join(TEST_ROOT, 'awareness-fallback-retry-'));
|
|
304
|
-
const storePath = join(dir, 'store');
|
|
305
|
-
const outboxPath = join(dir, 'awareness.json');
|
|
306
|
-
const statusPath = join(dir, 'status.jsonl');
|
|
307
|
-
const releasePath = join(dir, 'release');
|
|
308
|
-
const listChangePath = join(dir, 'list-change');
|
|
309
|
-
const outbox = new DiscordAwarenessOutbox(outboxPath);
|
|
310
|
-
const membrane = new ScriptedMembrane([
|
|
311
|
-
new HookedCompleteStream(refusalResponse(), async () => {
|
|
312
|
-
const batch = outbox.prepare({
|
|
313
|
-
agentName: 'assistant',
|
|
314
|
-
sourceBranch: 'source',
|
|
315
|
-
targetBranch: 'main',
|
|
316
|
-
activationPolicy: 'explicit',
|
|
317
|
-
refs: [{ serverId: 'discord', channelId: 'discord:guild:runtime', messageId: 'runtime-fallback-barrier' }],
|
|
318
|
-
});
|
|
319
|
-
assert.ok(batch);
|
|
320
|
-
outbox.activate(batch.id);
|
|
321
|
-
writeFileSync(listChangePath, 'change');
|
|
322
|
-
await waitFor('first runtime reaction call', () => records(statusPath).some((record) => record.event === 'reaction-call' && record.ordinal === 1));
|
|
323
|
-
}),
|
|
324
|
-
[outputResponse('Recovered after awareness barrier')],
|
|
325
|
-
]);
|
|
326
|
-
let framework;
|
|
327
|
-
try {
|
|
328
|
-
framework = await AgentFramework.create({
|
|
329
|
-
storePath,
|
|
330
|
-
discordAwarenessOutboxPath: outboxPath,
|
|
331
|
-
discordAwarenessDeadlineMs: 1_000,
|
|
332
|
-
membrane: membrane.asMembrane(),
|
|
333
|
-
agents: [{
|
|
334
|
-
name: 'assistant',
|
|
335
|
-
model: 'test-model',
|
|
336
|
-
systemPrompt: 'system',
|
|
337
|
-
refusalHandling: {
|
|
338
|
-
primarySummaryFallback: { enabled: true, maxNewSummaries: 4, requestBudgetTokens: 4096 },
|
|
339
|
-
},
|
|
340
|
-
}],
|
|
341
|
-
modules: [],
|
|
342
|
-
mcplServers: [{
|
|
343
|
-
id: 'discord',
|
|
344
|
-
command: process.execPath,
|
|
345
|
-
args: [FIXTURE],
|
|
346
|
-
requestTimeoutMs: 0,
|
|
347
|
-
env: {
|
|
348
|
-
STATUS_PATH: statusPath,
|
|
349
|
-
LEDGER_PATH: outboxPath,
|
|
350
|
-
RELEASE_PATH: releasePath,
|
|
351
|
-
LIST_CHANGE_PATH: listChangePath,
|
|
352
|
-
DATA_METHOD: 'host/command',
|
|
353
|
-
},
|
|
354
|
-
enabledFeatureSets: ['chat'],
|
|
355
|
-
}],
|
|
356
|
-
});
|
|
357
|
-
const agent = framework.getAgent('assistant');
|
|
358
|
-
const baselineRequest = request('system', 'baseline');
|
|
359
|
-
const baselineArtifacts = artifacts('shared', ['L1-1']);
|
|
360
|
-
await persistHealthyBaseline(framework, agent, baselineRequest, baselineArtifacts);
|
|
361
|
-
const currentRequest = request('system', 'latest input');
|
|
362
|
-
const currentArtifacts = artifacts('shared', ['L1-1', 'L1-2']);
|
|
363
|
-
const retryRequest = request('system', 'expanded raw source');
|
|
364
|
-
agent.prepareActivationRequest = async () => ({ request: currentRequest, artifacts: currentArtifacts });
|
|
365
|
-
agent.buildPrimarySummaryRawExpansionRequest = () => ({ request: retryRequest, artifacts: currentArtifacts });
|
|
366
|
-
agent.getCurrentBranchGeneration =
|
|
367
|
-
() => branchInfo();
|
|
368
|
-
framework.pendingRequests.push({
|
|
369
|
-
agentName: 'assistant',
|
|
370
|
-
reason: 'test',
|
|
371
|
-
source: 'test',
|
|
372
|
-
timestamp: Date.now(),
|
|
373
|
-
});
|
|
374
|
-
let drained = false;
|
|
375
|
-
const draining = framework.runUntilIdle().then(() => { drained = true; });
|
|
376
|
-
await waitFor('primary provider call', () => membrane.calls.length === 1);
|
|
377
|
-
await waitFor('fallback intent while barrier is unresolved', () => {
|
|
378
|
-
const raw = framework.getStore().getStateJson(FALLBACK_STATE_ID);
|
|
379
|
-
return (raw?.requests ?? []).some((record) => record.dispatchKind === 'primary'
|
|
380
|
-
&& record.requestId !== 'baseline-request'
|
|
381
|
-
&& record.fallbackStatus === 'pending');
|
|
382
|
-
});
|
|
383
|
-
assert.equal(membrane.calls.length, 1, 'queued fallback retry must not dispatch under an unresolved barrier');
|
|
384
|
-
assert.equal(records(statusPath).some((record) => record.event === 'registration-response'), true, 'registration control plane stays live during the barrier');
|
|
385
|
-
assert.equal(records(statusPath).some((record) => record.event === 'reaction-call'), true, 'awareness reaction tooling stays live during the barrier');
|
|
386
|
-
assert.equal(drained, false, 'runUntilIdle remains blocked behind the unresolved retry barrier');
|
|
387
|
-
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
388
|
-
assert.equal(membrane.calls.length, 1, 'the unresolved awareness barrier must keep the retry blocked without a third-party dispatch');
|
|
389
|
-
writeFileSync(releasePath, 'release');
|
|
390
|
-
await waitFor('single fallback retry dispatch after release', () => membrane.calls.length === 2);
|
|
391
|
-
await draining;
|
|
392
|
-
const fallbackDispatches = membrane.calls.filter((call) => call.messages[0]?.content[0]?.type === 'text'
|
|
393
|
-
&& call.messages[0]?.content[0]?.text === 'expanded raw source');
|
|
394
|
-
assert.equal(fallbackDispatches.length, 1, 'the awareness barrier may release exactly one fallback retry dispatch');
|
|
395
|
-
assert.equal(records(statusPath).filter((record) => record.event === 'reaction-call').length, 1, 'barrier control traffic should not spin into a hot loop');
|
|
396
|
-
}
|
|
397
|
-
finally {
|
|
398
|
-
await framework?.stop();
|
|
399
|
-
rmSync(dir, { recursive: true, force: true });
|
|
400
|
-
}
|
|
401
|
-
});
|
|
402
175
|
test('mandatory awareness deadline survives requestTimeoutMs: 0 and durably releases startup', async () => {
|
|
403
176
|
mkdirSync(TEST_ROOT, { recursive: true });
|
|
404
177
|
const dir = mkdtempSync(join(TEST_ROOT, 'awareness-timeout-'));
|