@nifrajs/coding-agent 3.3.0 → 4.0.0

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 (88) hide show
  1. package/README.md +11 -4
  2. package/SECURITY.md +2 -1
  3. package/dist/approvals.d.ts +14 -2
  4. package/dist/approvals.d.ts.map +1 -1
  5. package/dist/approvals.js +51 -43
  6. package/dist/approvals.js.map +1 -1
  7. package/dist/cli.d.ts +1 -0
  8. package/dist/cli.d.ts.map +1 -1
  9. package/dist/cli.js +11 -2
  10. package/dist/cli.js.map +1 -1
  11. package/dist/context.js +29 -1
  12. package/dist/context.js.map +1 -1
  13. package/dist/diff.js +38 -2
  14. package/dist/diff.js.map +1 -1
  15. package/dist/handoffs.d.ts.map +1 -1
  16. package/dist/handoffs.js +12 -4
  17. package/dist/handoffs.js.map +1 -1
  18. package/dist/host.d.ts.map +1 -1
  19. package/dist/host.js +146 -23
  20. package/dist/host.js.map +1 -1
  21. package/dist/index.d.ts +2 -2
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +1 -1
  24. package/dist/index.js.map +1 -1
  25. package/dist/isolated.js +37 -2
  26. package/dist/isolated.js.map +1 -1
  27. package/dist/native.d.ts +12 -0
  28. package/dist/native.d.ts.map +1 -1
  29. package/dist/native.js +165 -40
  30. package/dist/native.js.map +1 -1
  31. package/dist/orchestration/compile.d.ts +7 -0
  32. package/dist/orchestration/compile.d.ts.map +1 -1
  33. package/dist/orchestration/compile.js +16 -2
  34. package/dist/orchestration/compile.js.map +1 -1
  35. package/dist/orchestration/evidence-store.d.ts.map +1 -1
  36. package/dist/orchestration/evidence-store.js +9 -4
  37. package/dist/orchestration/evidence-store.js.map +1 -1
  38. package/dist/orchestration/host.d.ts +10 -0
  39. package/dist/orchestration/host.d.ts.map +1 -1
  40. package/dist/orchestration/host.js +9 -0
  41. package/dist/orchestration/host.js.map +1 -1
  42. package/dist/replay.d.ts +4 -0
  43. package/dist/replay.d.ts.map +1 -1
  44. package/dist/replay.js +189 -24
  45. package/dist/replay.js.map +1 -1
  46. package/dist/rpc.d.ts +10 -0
  47. package/dist/rpc.d.ts.map +1 -1
  48. package/dist/rpc.js +209 -29
  49. package/dist/rpc.js.map +1 -1
  50. package/dist/session-migration.d.ts.map +1 -1
  51. package/dist/session-migration.js +3 -2
  52. package/dist/session-migration.js.map +1 -1
  53. package/dist/sessions.d.ts +20 -2
  54. package/dist/sessions.d.ts.map +1 -1
  55. package/dist/sessions.js +269 -60
  56. package/dist/sessions.js.map +1 -1
  57. package/dist/subagents.d.ts +30 -0
  58. package/dist/subagents.d.ts.map +1 -1
  59. package/dist/subagents.js +118 -15
  60. package/dist/subagents.js.map +1 -1
  61. package/dist/verification.d.ts +28 -1
  62. package/dist/verification.d.ts.map +1 -1
  63. package/dist/verification.js +119 -3
  64. package/dist/verification.js.map +1 -1
  65. package/dist/workflows.d.ts +1 -0
  66. package/dist/workflows.d.ts.map +1 -1
  67. package/dist/workflows.js +55 -23
  68. package/dist/workflows.js.map +1 -1
  69. package/package.json +9 -5
  70. package/src/approvals.ts +62 -45
  71. package/src/cli.ts +11 -2
  72. package/src/context.ts +32 -1
  73. package/src/diff.ts +40 -2
  74. package/src/handoffs.ts +20 -8
  75. package/src/host.ts +146 -23
  76. package/src/index.ts +7 -0
  77. package/src/isolated.ts +39 -2
  78. package/src/native.ts +213 -39
  79. package/src/orchestration/compile.ts +28 -2
  80. package/src/orchestration/evidence-store.ts +9 -3
  81. package/src/orchestration/host.ts +17 -0
  82. package/src/replay.ts +206 -25
  83. package/src/rpc.ts +262 -33
  84. package/src/session-migration.ts +3 -2
  85. package/src/sessions.ts +288 -57
  86. package/src/subagents.ts +147 -17
  87. package/src/verification.ts +146 -3
  88. package/src/workflows.ts +47 -27
@@ -11,13 +11,18 @@ export interface SessionStore {
11
11
  append(sessionId: string, type: string, payload?: unknown, options?: {
12
12
  readonly pinned?: boolean;
13
13
  }): Promise<SessionLogEntry>;
14
- read(sessionId: string): Promise<readonly SessionLogEntry[]>;
14
+ /** Read at most `limit` retained entries from the tail of the session log. */
15
+ read(sessionId: string, limit?: number): Promise<readonly SessionLogEntry[]>;
15
16
  checkpoint(sessionId: string, payload: unknown): Promise<void>;
16
17
  fork(sessionId: string, targetSessionId?: string): Promise<string>;
17
18
  }
18
19
  export interface FileSessionStoreOptions {
19
20
  readonly root: string;
20
21
  readonly maxEntryBytes?: number;
22
+ /** Maximum retained JSONL entries per session. Defaults to 4,096. */
23
+ readonly maxEntries?: number;
24
+ /** Maximum retained JSONL bytes per session. Defaults to 8 MiB. */
25
+ readonly maxBytes?: number;
21
26
  }
22
27
  /**
23
28
  * Small append-only JSONL store. It stores redacted, bounded event evidence rather than raw model
@@ -26,16 +31,23 @@ export interface FileSessionStoreOptions {
26
31
  export declare class FileSessionStore implements SessionStore {
27
32
  private readonly root;
28
33
  private readonly maxEntryBytes;
34
+ private readonly maxEntries;
35
+ private readonly maxBytes;
29
36
  private readonly sequences;
37
+ private readonly locks;
30
38
  constructor(options: FileSessionStoreOptions);
31
39
  append(sessionId: string, type: string, payload?: unknown, options?: {
32
40
  readonly pinned?: boolean;
33
41
  }): Promise<SessionLogEntry>;
34
- read(sessionId: string): Promise<readonly SessionLogEntry[]>;
42
+ read(sessionId: string, limit?: number): Promise<readonly SessionLogEntry[]>;
35
43
  checkpoint(sessionId: string, payload: unknown): Promise<void>;
36
44
  fork(sessionId: string, targetSessionId?: string): Promise<string>;
37
45
  private pathFor;
38
46
  private nextSequence;
47
+ private compactIfNeeded;
48
+ private readTailText;
49
+ private readUnlocked;
50
+ private withSessionLock;
39
51
  }
40
52
  export interface ContextRecord {
41
53
  readonly kind: string;
@@ -71,4 +83,10 @@ export declare class ContextWindow {
71
83
  append(record: ContextRecord): CompactionReport | undefined;
72
84
  compact(reason?: CompactionReport["reason"]): CompactionReport;
73
85
  }
86
+ /**
87
+ * The file name stem for a session id. On Windows a `:` in a file name addresses an NTFS alternate
88
+ * data stream, so it is written as `%3A` there, and an id that starts with a reserved device name has
89
+ * its first character percent-encoded. `%` is outside the id grammar, so no two ids collide.
90
+ */
91
+ export declare function sessionFileStem(sessionId: string, platform?: NodeJS.Platform): string;
74
92
  //# sourceMappingURL=sessions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../src/sessions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../src/sessions.ts"],"names":[],"mappings":"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"}
package/dist/sessions.js CHANGED
@@ -1,5 +1,18 @@
1
- import { appendFile, mkdir, readFile, rename, writeFile } from "node:fs/promises";
1
+ import { constants as FS_CONSTANTS } from "node:fs";
2
+ import { lstat, mkdir, open, rename, unlink, writeFile } from "node:fs/promises";
2
3
  import { dirname, join } from "node:path";
4
+ const DEFAULT_MAX_SESSION_ENTRIES = 4_096;
5
+ const DEFAULT_MAX_SESSION_BYTES = 8 * 1024 * 1024;
6
+ const MAX_SESSION_ENTRIES = 100_000;
7
+ const MAX_SESSION_BYTES = 128 * 1024 * 1024;
8
+ // `node:constants` does not expose the POSIX-only named export on Windows in Bun.
9
+ // Read it from the platform-safe `node:fs` constants object and fall back to zero;
10
+ // the Windows open path uses its lstat/open/lstat guard instead of this flag.
11
+ const O_APPEND = FS_CONSTANTS.O_APPEND;
12
+ const O_CREAT = FS_CONSTANTS.O_CREAT;
13
+ const O_RDONLY = FS_CONSTANTS.O_RDONLY;
14
+ const O_WRONLY = FS_CONSTANTS.O_WRONLY;
15
+ const O_NOFOLLOW = FS_CONSTANTS.O_NOFOLLOW ?? 0;
3
16
  /**
4
17
  * Small append-only JSONL store. It stores redacted, bounded event evidence rather than raw model
5
18
  * transcripts, so session recovery is useful without turning the agent into a memory sink.
@@ -7,95 +20,213 @@ import { dirname, join } from "node:path";
7
20
  export class FileSessionStore {
8
21
  root;
9
22
  maxEntryBytes;
23
+ maxEntries;
24
+ maxBytes;
10
25
  sequences = new Map();
26
+ locks = new Map();
11
27
  constructor(options) {
12
28
  this.root = options.root;
13
29
  this.maxEntryBytes = options.maxEntryBytes ?? 256 * 1024;
14
30
  if (!Number.isSafeInteger(this.maxEntryBytes) || this.maxEntryBytes < 1024)
15
31
  throw new RangeError("session store: maxEntryBytes must be at least 1024");
32
+ this.maxEntries = options.maxEntries ?? DEFAULT_MAX_SESSION_ENTRIES;
33
+ if (!Number.isSafeInteger(this.maxEntries) ||
34
+ this.maxEntries < 1 ||
35
+ this.maxEntries > MAX_SESSION_ENTRIES)
36
+ throw new RangeError(`session store: maxEntries must be between 1 and ${MAX_SESSION_ENTRIES}`);
37
+ this.maxBytes = options.maxBytes ?? DEFAULT_MAX_SESSION_BYTES;
38
+ if (!Number.isSafeInteger(this.maxBytes) ||
39
+ this.maxBytes < this.maxEntryBytes + 1 ||
40
+ this.maxBytes > MAX_SESSION_BYTES)
41
+ throw new RangeError(`session store: maxBytes must be between maxEntryBytes+1 and ${MAX_SESSION_BYTES}`);
16
42
  }
17
43
  async append(sessionId, type, payload, options = {}) {
18
44
  validateToken(sessionId, "sessionId");
19
45
  if (!/^[a-z][a-z0-9._:-]{0,63}$/.test(type))
20
46
  throw new TypeError("session store: invalid event type");
21
- await mkdir(this.root, { recursive: true });
22
- const nextSeq = await this.nextSequence(sessionId);
23
- const entry = Object.freeze({
24
- version: 1,
25
- sessionId,
26
- seq: nextSeq,
27
- at: Date.now(),
28
- type,
29
- ...(payload === undefined
30
- ? {}
31
- : { payload: boundValue(redactValue(payload), this.maxEntryBytes) }),
32
- ...(options.pinned === true ? { pinned: true } : {}),
47
+ return this.withSessionLock(sessionId, async () => {
48
+ await mkdir(this.root, { recursive: true });
49
+ const nextSeq = await this.nextSequence(sessionId);
50
+ const entry = Object.freeze({
51
+ version: 1,
52
+ sessionId,
53
+ seq: nextSeq,
54
+ at: Date.now(),
55
+ type,
56
+ ...(payload === undefined
57
+ ? {}
58
+ : { payload: boundValue(redactValue(payload), this.maxEntryBytes) }),
59
+ ...(options.pinned === true ? { pinned: true } : {}),
60
+ });
61
+ const line = JSON.stringify(entry);
62
+ if (Buffer.byteLength(line, "utf8") > this.maxEntryBytes)
63
+ throw new RangeError("session store: event exceeds maxEntryBytes");
64
+ const path = this.pathFor(sessionId);
65
+ const file = await openSessionFile(path, O_APPEND | O_CREAT | O_WRONLY, 0o600);
66
+ try {
67
+ await file.writeFile(`${line}\n`, "utf8");
68
+ }
69
+ finally {
70
+ await file.close();
71
+ }
72
+ this.sequences.set(sessionId, nextSeq);
73
+ await this.compactIfNeeded(sessionId);
74
+ return entry;
33
75
  });
34
- const line = JSON.stringify(entry);
35
- if (Buffer.byteLength(line, "utf8") > this.maxEntryBytes)
36
- throw new RangeError("session store: event exceeds maxEntryBytes");
37
- await appendFile(this.pathFor(sessionId), `${line}\n`, "utf8");
38
- this.sequences.set(sessionId, nextSeq);
39
- return entry;
40
- }
41
- async read(sessionId) {
76
+ }
77
+ async read(sessionId, limit = this.maxEntries) {
42
78
  validateToken(sessionId, "sessionId");
43
- try {
44
- const text = await readFile(this.pathFor(sessionId), "utf8");
45
- const entries = [];
46
- for (const line of text.split("\n")) {
47
- if (line.trim().length === 0)
48
- continue;
49
- const value = JSON.parse(line);
50
- if (isSessionLogEntry(value, sessionId))
51
- entries.push(Object.freeze(value));
52
- }
53
- const last = entries.at(-1)?.seq;
54
- if (last !== undefined)
55
- this.sequences.set(sessionId, last);
56
- return Object.freeze(entries);
57
- }
58
- catch (error) {
59
- if (isNotFound(error))
60
- return Object.freeze([]);
61
- throw error;
62
- }
79
+ if (!Number.isSafeInteger(limit) || limit < 1)
80
+ throw new RangeError("session store: read limit must be a positive safe integer");
81
+ const boundedLimit = Math.min(limit, this.maxEntries);
82
+ return this.withSessionLock(sessionId, () => this.readUnlocked(sessionId, boundedLimit));
63
83
  }
64
84
  async checkpoint(sessionId, payload) {
65
85
  validateToken(sessionId, "sessionId");
66
- const target = join(this.root, `${sessionId}.checkpoint.json`);
67
- const temporary = `${target}.${process.pid}.${Date.now()}.tmp`;
68
- await mkdir(dirname(target), { recursive: true });
69
- const content = JSON.stringify({
70
- version: 1,
71
- sessionId,
72
- at: Date.now(),
73
- payload: boundValue(redactValue(payload), this.maxEntryBytes),
86
+ await this.withSessionLock(sessionId, async () => {
87
+ const target = join(this.root, `${sessionFileStem(sessionId)}.checkpoint.json`);
88
+ const temporary = `${target}.${process.pid}.${crypto.randomUUID()}.tmp`;
89
+ await mkdir(dirname(target), { recursive: true });
90
+ const content = JSON.stringify({
91
+ version: 1,
92
+ sessionId,
93
+ at: Date.now(),
94
+ payload: boundValue(redactValue(payload), this.maxEntryBytes),
95
+ });
96
+ // Exclusive creation prevents a local peer from planting a symlink at the temporary path.
97
+ await writeFile(temporary, content, { encoding: "utf8", flag: "wx", mode: 0o600 });
98
+ try {
99
+ await rename(temporary, target);
100
+ }
101
+ catch (error) {
102
+ await unlink(temporary).catch(() => { });
103
+ throw error;
104
+ }
74
105
  });
75
- await writeFile(temporary, content, "utf8");
76
- await rename(temporary, target);
77
106
  }
78
107
  async fork(sessionId, targetSessionId = `${sessionId}:fork:${Date.now().toString(36)}`) {
79
108
  validateToken(sessionId, "sessionId");
80
109
  validateToken(targetSessionId, "targetSessionId");
81
- const entries = await this.read(sessionId);
82
- await mkdir(this.root, { recursive: true });
83
- const target = this.pathFor(targetSessionId);
84
- const lines = entries.map((entry, index) => JSON.stringify({ ...entry, sessionId: targetSessionId, seq: index }));
85
- await writeFile(target, lines.length === 0 ? "" : `${lines.join("\n")}\n`, "utf8");
86
- this.sequences.set(targetSessionId, Math.max(0, lines.length - 1));
87
- return targetSessionId;
110
+ return this.withSessionLock(sessionId, async () => {
111
+ const entries = await this.readUnlocked(sessionId, this.maxEntries);
112
+ await mkdir(this.root, { recursive: true });
113
+ const target = this.pathFor(targetSessionId);
114
+ const lines = entries.map((entry, index) => JSON.stringify({ ...entry, sessionId: targetSessionId, seq: index }));
115
+ // A caller must never be able to overwrite an existing session by choosing its id. The
116
+ // exclusive create also refuses a pre-planted symlink at the destination.
117
+ await writeFile(target, lines.length === 0 ? "" : `${lines.join("\n")}\n`, {
118
+ encoding: "utf8",
119
+ flag: "wx",
120
+ mode: 0o600,
121
+ });
122
+ this.sequences.set(targetSessionId, Math.max(0, lines.length - 1));
123
+ return targetSessionId;
124
+ });
88
125
  }
89
126
  pathFor(sessionId) {
90
- return join(this.root, `${sessionId}.jsonl`);
127
+ return join(this.root, `${sessionFileStem(sessionId)}.jsonl`);
91
128
  }
92
129
  async nextSequence(sessionId) {
93
130
  const cached = this.sequences.get(sessionId);
94
131
  if (cached !== undefined)
95
132
  return cached + 1;
96
- const entries = await this.read(sessionId);
133
+ const entries = await this.readUnlocked(sessionId, 1);
97
134
  return (entries.at(-1)?.seq ?? -1) + 1;
98
135
  }
136
+ async compactIfNeeded(sessionId) {
137
+ const path = this.pathFor(sessionId);
138
+ const file = await openSessionFile(path, O_RDONLY);
139
+ let size;
140
+ try {
141
+ size = (await file.stat()).size;
142
+ }
143
+ finally {
144
+ await file.close();
145
+ }
146
+ if (size <= this.maxBytes) {
147
+ const recent = parseSessionEntries(await this.readTailText(path, this.maxEntries + 1, this.maxBytes), sessionId);
148
+ if (recent.length <= this.maxEntries)
149
+ return;
150
+ }
151
+ // The tail read is bounded by the retention cap plus one maximum-sized line. This keeps
152
+ // compaction memory bounded even if a pre-existing log is already oversized.
153
+ const recent = parseSessionEntries(await this.readTailText(path, this.maxEntries + 1, this.maxBytes + this.maxEntryBytes), sessionId);
154
+ const retained = retainEntries(recent, this.maxEntries, this.maxBytes);
155
+ if (retained.length === 0)
156
+ return;
157
+ const content = `${retained.map((entry) => JSON.stringify(entry)).join("\n")}\n`;
158
+ if (Buffer.byteLength(content, "utf8") >= size && size <= this.maxBytes)
159
+ return;
160
+ const temporary = `${path}.${process.pid}.${crypto.randomUUID()}.tmp`;
161
+ await writeFile(temporary, content, { encoding: "utf8", flag: "wx", mode: 0o600 });
162
+ try {
163
+ await rename(temporary, path);
164
+ }
165
+ catch (error) {
166
+ await unlink(temporary).catch(() => { });
167
+ throw error;
168
+ }
169
+ this.sequences.set(sessionId, retained.at(-1).seq);
170
+ }
171
+ async readTailText(path, minimumLines, maxBytes) {
172
+ const file = await openSessionFile(path, O_RDONLY);
173
+ try {
174
+ const size = (await file.stat()).size;
175
+ let end = size;
176
+ let remaining = Math.min(size, maxBytes);
177
+ const chunks = [];
178
+ const chunkBytes = 64 * 1024;
179
+ while (remaining > 0) {
180
+ const take = Math.min(remaining, chunkBytes);
181
+ end -= take;
182
+ const bytes = Buffer.allocUnsafe(take);
183
+ const result = await file.read(bytes, 0, take, end);
184
+ chunks.unshift(bytes.subarray(0, result.bytesRead));
185
+ remaining -= result.bytesRead;
186
+ const text = Buffer.concat(chunks).toString("utf8");
187
+ const lines = text.split("\n");
188
+ const completeLines = end > 0 ? lines.length - 1 : lines.length;
189
+ if (completeLines >= minimumLines || end === 0 || result.bytesRead === 0)
190
+ return text;
191
+ }
192
+ return Buffer.concat(chunks).toString("utf8");
193
+ }
194
+ finally {
195
+ await file.close();
196
+ }
197
+ }
198
+ async readUnlocked(sessionId, boundedLimit) {
199
+ try {
200
+ const text = await this.readTailText(this.pathFor(sessionId), boundedLimit, this.maxBytes);
201
+ const entries = parseSessionEntries(text, sessionId);
202
+ const last = entries.at(-1)?.seq;
203
+ if (last !== undefined)
204
+ this.sequences.set(sessionId, last);
205
+ return Object.freeze(entries.slice(-boundedLimit));
206
+ }
207
+ catch (error) {
208
+ if (isNotFound(error))
209
+ return Object.freeze([]);
210
+ throw error;
211
+ }
212
+ }
213
+ async withSessionLock(sessionId, operation) {
214
+ const previous = this.locks.get(sessionId) ?? Promise.resolve();
215
+ let release;
216
+ const current = new Promise((resolve) => {
217
+ release = resolve;
218
+ });
219
+ this.locks.set(sessionId, current);
220
+ await previous;
221
+ try {
222
+ return await operation();
223
+ }
224
+ finally {
225
+ release();
226
+ if (this.locks.get(sessionId) === current)
227
+ this.locks.delete(sessionId);
228
+ }
229
+ }
99
230
  }
100
231
  /** In-memory prompt window with automatic, deterministic compaction and a hard size ceiling. */
101
232
  export class ContextWindow {
@@ -162,6 +293,54 @@ export class ContextWindow {
162
293
  return { before, after, removed: omitted.length, reason };
163
294
  }
164
295
  }
296
+ /**
297
+ * Open a session file without following a final-component symlink. Windows Bun does not support
298
+ * the POSIX `O_NOFOLLOW` flag, so it gets a bounded lstat/open/lstat guard instead; the descriptor is
299
+ * checked before any caller write or read. POSIX keeps the kernel-enforced flag for the race-free path.
300
+ */
301
+ async function openSessionFile(path, flags, mode) {
302
+ if (process.platform !== "win32") {
303
+ return mode === undefined
304
+ ? open(path, flags | O_NOFOLLOW)
305
+ : open(path, flags | O_NOFOLLOW, mode);
306
+ }
307
+ await rejectSessionSymlink(path);
308
+ const file = mode === undefined ? await open(path, flags) : await open(path, flags, mode);
309
+ try {
310
+ await rejectSessionSymlink(path);
311
+ return file;
312
+ }
313
+ catch (error) {
314
+ await file.close();
315
+ throw error;
316
+ }
317
+ }
318
+ async function rejectSessionSymlink(path) {
319
+ try {
320
+ if ((await lstat(path)).isSymbolicLink())
321
+ throw new Error("session store: refusing a symbolic-link session file");
322
+ }
323
+ catch (error) {
324
+ if (isNotFound(error))
325
+ return;
326
+ throw error;
327
+ }
328
+ }
329
+ // Device names Windows reserves even with an extension after them: `nul.jsonl` is the NUL device.
330
+ const WINDOWS_DEVICE = /^(?:con|prn|aux|nul|com[0-9]|lpt[0-9])(?:\.|$)/i;
331
+ /**
332
+ * The file name stem for a session id. On Windows a `:` in a file name addresses an NTFS alternate
333
+ * data stream, so it is written as `%3A` there, and an id that starts with a reserved device name has
334
+ * its first character percent-encoded. `%` is outside the id grammar, so no two ids collide.
335
+ */
336
+ export function sessionFileStem(sessionId, platform = process.platform) {
337
+ if (platform !== "win32")
338
+ return sessionId;
339
+ const stem = sessionId.replaceAll(":", "%3A");
340
+ return WINDOWS_DEVICE.test(stem)
341
+ ? `%${stem.charCodeAt(0).toString(16).toUpperCase()}${stem.slice(1)}`
342
+ : stem;
343
+ }
165
344
  function validateToken(value, name) {
166
345
  if (!/^[a-zA-Z0-9._:-]{1,128}$/.test(value))
167
346
  throw new TypeError(`session store: ${name} must be a bounded token`);
@@ -180,6 +359,36 @@ function isSessionLogEntry(value, sessionId) {
180
359
  typeof record.at === "number" &&
181
360
  typeof record.type === "string");
182
361
  }
362
+ function parseSessionEntries(text, sessionId) {
363
+ const entries = [];
364
+ for (const line of text.split("\n")) {
365
+ if (line.trim().length === 0)
366
+ continue;
367
+ try {
368
+ const value = JSON.parse(line);
369
+ if (isSessionLogEntry(value, sessionId))
370
+ entries.push(Object.freeze(value));
371
+ }
372
+ catch {
373
+ // A tail read can begin in the middle of an old line. Invalid records are ignored so a
374
+ // damaged/partially rotated log cannot turn every history request into an unbounded retry.
375
+ }
376
+ }
377
+ return entries;
378
+ }
379
+ function retainEntries(entries, maxEntries, maxBytes) {
380
+ const retained = [];
381
+ let bytes = 0;
382
+ for (let index = entries.length - 1; index >= 0 && retained.length < maxEntries; index--) {
383
+ const entry = entries[index];
384
+ const size = Buffer.byteLength(JSON.stringify(entry), "utf8") + 1;
385
+ if (bytes + size > maxBytes)
386
+ break;
387
+ retained.unshift(entry);
388
+ bytes += size;
389
+ }
390
+ return retained;
391
+ }
183
392
  function redactValue(value, key = "", depth = 0) {
184
393
  if (depth > 5)
185
394
  return "[depth-limited]";
@@ -1 +1 @@
1
- {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../src/sessions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../src/sessions.ts"],"names":[],"mappings":"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"}
@@ -23,6 +23,10 @@ export interface SubagentExecutor {
23
23
  }
24
24
  export interface SubagentWorkspaceLease {
25
25
  readonly cwd: string;
26
+ /**
27
+ * Runs once the executor has settled. A run that times out or is cancelled returns at once, but
28
+ * its workspace stays until the executor finishes, so a child never loses its cwd mid-run.
29
+ */
26
30
  readonly cleanup?: () => void | PromiseLike<void>;
27
31
  }
28
32
  /** Workspace policy seam for callers that need project boundaries or isolated worktrees. */
@@ -31,6 +35,20 @@ export interface SubagentWorkspacePolicy {
31
35
  readonly allowedRoots?: readonly string[];
32
36
  readonly isolatedWorktree?: (spec: SubagentSpec, signal: AbortSignal) => SubagentWorkspaceLease | PromiseLike<SubagentWorkspaceLease>;
33
37
  }
38
+ /** A run that returned while its executor kept running, having ignored its abort signal. */
39
+ export interface SubagentAbandonment {
40
+ readonly spec: SubagentSpec;
41
+ readonly reason: "timeout" | "cancelled";
42
+ /** The workspace the executor was given; undefined when it had none. */
43
+ readonly cwd: string | undefined;
44
+ /** Settles once the executor does; its workspace lease is cleaned up after that. */
45
+ readonly settled: Promise<void>;
46
+ }
47
+ /** Abandoned executors still running. Runners sharing one ledger are counted, and bounded by
48
+ * `maxAbandoned`, together. */
49
+ export interface SubagentAbandonmentLedger {
50
+ abandoned: number;
51
+ }
34
52
  export interface SubagentRunnerOptions {
35
53
  readonly maxChildren?: number;
36
54
  readonly maxDepth?: number;
@@ -38,13 +56,25 @@ export interface SubagentRunnerOptions {
38
56
  readonly signal?: AbortSignal;
39
57
  readonly allowedCapabilities?: readonly string[];
40
58
  readonly workspace?: SubagentWorkspacePolicy;
59
+ /**
60
+ * Called when a run returns while its executor keeps running: it timed out or was cancelled and
61
+ * ignored its abort signal. Use it to stop the executor another way, such as ending its process.
62
+ */
63
+ readonly onAbandoned?: (abandonment: SubagentAbandonment) => void;
64
+ /** Refuse new children while this many abandoned executors are still running. Default: no bound. */
65
+ readonly maxAbandoned?: number;
66
+ /** Where abandoned executors are counted. Default: a ledger of this runner's own. */
67
+ readonly abandonment?: SubagentAbandonmentLedger;
41
68
  }
42
69
  /** Explicitly bounded child execution. Recursive fan-out is impossible without a caller budget. */
43
70
  export declare class BoundedSubagentRunner {
44
71
  private readonly executor;
45
72
  private readonly options;
46
73
  private children;
74
+ private readonly ledger;
47
75
  constructor(executor: SubagentExecutor, options?: SubagentRunnerOptions);
76
+ /** Executors this runner's ledger holds as abandoned and still running. */
77
+ get abandoned(): number;
48
78
  run(spec: SubagentSpec): Promise<SubagentResult>;
49
79
  runMany(specs: readonly SubagentSpec[], maxConcurrency?: number): Promise<readonly SubagentResult[]>;
50
80
  }
@@ -1 +1 @@
1
- {"version":3,"file":"subagents.d.ts","sourceRoot":"","sources":["../src/subagents.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACzC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,KAAK,EAAE;QACT,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;QAC3B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;QAC5B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KACtB,GAAG,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;CACnC;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;CAClD;AAED,4FAA4F;AAC5F,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACzC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAC1B,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,WAAW,KAChB,sBAAsB,GAAG,WAAW,CAAC,sBAAsB,CAAC,CAAA;CAClE;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;IAC7B,QAAQ,CAAC,mBAAmB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAChD,QAAQ,CAAC,SAAS,CAAC,EAAE,uBAAuB,CAAA;CAC7C;AAED,mGAAmG;AACnG,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAGD;IACvB,OAAO,CAAC,QAAQ,CAAI;gBAER,QAAQ,EAAE,gBAAgB,EAAE,OAAO,GAAE,qBAA0B;IAcrE,GAAG,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC;IAyGhD,OAAO,CACX,KAAK,EAAE,SAAS,YAAY,EAAE,EAC9B,cAAc,SAA2B,GACxC,OAAO,CAAC,SAAS,cAAc,EAAE,CAAC;CAkBtC"}
1
+ {"version":3,"file":"subagents.d.ts","sourceRoot":"","sources":["../src/subagents.ts"],"names":[],"mappings":"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"}