@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.
- package/README.md +11 -4
- package/SECURITY.md +2 -1
- package/dist/approvals.d.ts +14 -2
- package/dist/approvals.d.ts.map +1 -1
- package/dist/approvals.js +51 -43
- package/dist/approvals.js.map +1 -1
- package/dist/cli.d.ts +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +11 -2
- package/dist/cli.js.map +1 -1
- package/dist/context.js +29 -1
- package/dist/context.js.map +1 -1
- package/dist/diff.js +38 -2
- package/dist/diff.js.map +1 -1
- package/dist/handoffs.d.ts.map +1 -1
- package/dist/handoffs.js +12 -4
- package/dist/handoffs.js.map +1 -1
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +146 -23
- package/dist/host.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/isolated.js +37 -2
- package/dist/isolated.js.map +1 -1
- package/dist/native.d.ts +12 -0
- package/dist/native.d.ts.map +1 -1
- package/dist/native.js +165 -40
- package/dist/native.js.map +1 -1
- package/dist/orchestration/compile.d.ts +7 -0
- package/dist/orchestration/compile.d.ts.map +1 -1
- package/dist/orchestration/compile.js +16 -2
- package/dist/orchestration/compile.js.map +1 -1
- package/dist/orchestration/evidence-store.d.ts.map +1 -1
- package/dist/orchestration/evidence-store.js +9 -4
- package/dist/orchestration/evidence-store.js.map +1 -1
- package/dist/orchestration/host.d.ts +10 -0
- package/dist/orchestration/host.d.ts.map +1 -1
- package/dist/orchestration/host.js +9 -0
- package/dist/orchestration/host.js.map +1 -1
- package/dist/replay.d.ts +4 -0
- package/dist/replay.d.ts.map +1 -1
- package/dist/replay.js +189 -24
- package/dist/replay.js.map +1 -1
- package/dist/rpc.d.ts +10 -0
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +209 -29
- package/dist/rpc.js.map +1 -1
- package/dist/session-migration.d.ts.map +1 -1
- package/dist/session-migration.js +3 -2
- package/dist/session-migration.js.map +1 -1
- package/dist/sessions.d.ts +20 -2
- package/dist/sessions.d.ts.map +1 -1
- package/dist/sessions.js +269 -60
- package/dist/sessions.js.map +1 -1
- package/dist/subagents.d.ts +30 -0
- package/dist/subagents.d.ts.map +1 -1
- package/dist/subagents.js +118 -15
- package/dist/subagents.js.map +1 -1
- package/dist/verification.d.ts +28 -1
- package/dist/verification.d.ts.map +1 -1
- package/dist/verification.js +119 -3
- package/dist/verification.js.map +1 -1
- package/dist/workflows.d.ts +1 -0
- package/dist/workflows.d.ts.map +1 -1
- package/dist/workflows.js +55 -23
- package/dist/workflows.js.map +1 -1
- package/package.json +9 -5
- package/src/approvals.ts +62 -45
- package/src/cli.ts +11 -2
- package/src/context.ts +32 -1
- package/src/diff.ts +40 -2
- package/src/handoffs.ts +20 -8
- package/src/host.ts +146 -23
- package/src/index.ts +7 -0
- package/src/isolated.ts +39 -2
- package/src/native.ts +213 -39
- package/src/orchestration/compile.ts +28 -2
- package/src/orchestration/evidence-store.ts +9 -3
- package/src/orchestration/host.ts +17 -0
- package/src/replay.ts +206 -25
- package/src/rpc.ts +262 -33
- package/src/session-migration.ts +3 -2
- package/src/sessions.ts +288 -57
- package/src/subagents.ts +147 -17
- package/src/verification.ts +146 -3
- package/src/workflows.ts +47 -27
package/dist/sessions.d.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
package/dist/sessions.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../src/sessions.ts"],"names":[],"mappings":"
|
|
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 {
|
|
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
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
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
|
-
|
|
35
|
-
|
|
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
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
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
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
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.
|
|
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]";
|
package/dist/sessions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../src/sessions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AA6BzC;;;GAGG;AACH,MAAM,OAAO,gBAAgB;IACV,IAAI,CAAQ;IACZ,aAAa,CAAQ;IACrB,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAA;IAEtD,YAAY,OAAgC;QAC1C,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;QACxB,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,GAAG,GAAG,IAAI,CAAA;QACxD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI;YACxE,MAAM,IAAI,UAAU,CAAC,oDAAoD,CAAC,CAAA;IAC9E,CAAC;IAED,KAAK,CAAC,MAAM,CACV,SAAiB,EACjB,IAAY,EACZ,OAAiB,EACjB,UAAyC,EAAE;QAE3C,aAAa,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;QACrC,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC;YACzC,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,CAAA;QAC1D,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC3C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAA;QAClD,MAAM,KAAK,GAAoB,MAAM,CAAC,MAAM,CAAC;YAC3C,OAAO,EAAE,CAAC;YACV,SAAS;YACT,GAAG,EAAE,OAAO;YACZ,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;YACd,IAAI;YACJ,GAAG,CAAC,OAAO,KAAK,SAAS;gBACvB,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;YACtE,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACrD,CAAC,CAAA;QACF,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;QAClC,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa;YACtD,MAAM,IAAI,UAAU,CAAC,4CAA4C,CAAC,CAAA;QACpE,MAAM,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,IAAI,EAAE,MAAM,CAAC,CAAA;QAC9D,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;QACtC,OAAO,KAAK,CAAA;IACd,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAiB;QAC1B,aAAa,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;QACrC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,CAAA;YAC5D,MAAM,OAAO,GAAsB,EAAE,CAAA;YACrC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;oBAAE,SAAQ;gBACtC,MAAM,KAAK,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBACvC,IAAI,iBAAiB,CAAC,KAAK,EAAE,SAAS,CAAC;oBAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;YAC7E,CAAC;YACD,MAAM,IAAI,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAA;YAChC,IAAI,IAAI,KAAK,SAAS;gBAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;YAC3D,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,UAAU,CAAC,KAAK,CAAC;gBAAE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;YAC/C,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,SAAiB,EAAE,OAAgB;QAClD,aAAa,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,SAAS,kBAAkB,CAAC,CAAA;QAC9D,MAAM,SAAS,GAAG,GAAG,MAAM,IAAI,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,MAAM,CAAA;QAC9D,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACjD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;YAC7B,OAAO,EAAE,CAAC;YACV,SAAS;YACT,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;YACd,OAAO,EAAE,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC;SAC9D,CAAC,CAAA;QACF,MAAM,SAAS,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;QAC3C,MAAM,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;IACjC,CAAC;IAED,KAAK,CAAC,IAAI,CACR,SAAiB,EACjB,eAAe,GAAG,GAAG,SAAS,SAAS,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;QAEhE,aAAa,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;QACrC,aAAa,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAA;QACjD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC1C,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA;QAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CACzC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CACrE,CAAA;QACD,MAAM,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QAClF,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAA;QAClE,OAAO,eAAe,CAAA;IACxB,CAAC;IAEO,OAAO,CAAC,SAAiB;QAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,SAAS,QAAQ,CAAC,CAAA;IAC9C,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,SAAiB;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAC5C,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,MAAM,GAAG,CAAC,CAAA;QAC3C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC1C,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IACxC,CAAC;CACF;AAuBD,gGAAgG;AAChG,MAAM,OAAO,aAAa;IACP,SAAS,CAAQ;IACjB,UAAU,CAAQ;IAClB,eAAe,CAAQ;IACvB,eAAe,CAAiE;IACzF,OAAO,GAAoB,EAAE,CAAA;IAErC,YAAY,UAAgC,EAAE;QAC5C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,MAAM,CAAA;QAC5C,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,CAAA;QAC1C,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,KAAK,CAAA;QACvD,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,SAAS,IAAI,SAAS,CAAA;QACrD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,SAAS,GAAG,GAAG;YAC/D,MAAM,IAAI,UAAU,CAAC,gDAAgD,CAAC,CAAA;QACxE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC;YAC/D,MAAM,IAAI,UAAU,CAAC,6CAA6C,CAAC,CAAA;IACvE,CAAC;IAED,IAAI,MAAM;QACR,OAAO,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACrC,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAA;IAC5B,CAAC;IAED,QAAQ;QACN,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,CAAA;IAClF,CAAC;IAED,iGAAiG;IACjG,OAAO,CAAC,OAAiC;QACvC,IAAI,CAAC,OAAO,GAAG,EAAE,CAAA;QACjB,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;YAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAC9F,CAAC;IAED,MAAM,CAAC,MAAqB;QAC1B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YAChB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC;YACtD,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpD,CAAC,CAAA;QACF,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO,SAAS,CAAA;QACnD,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IAClC,CAAC;IAED,OAAO,CAAC,SAAqC,QAAQ;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAC1B,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAA;QAChG,6FAA6F;QAC7F,8FAA8F;QAC9F,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAC1C,CAAC,MAAM,EAAE,EAAE,CACT,MAAM,CAAC,IAAI,KAAK,gBAAgB;YAChC,CAAC,MAAM,CAAC,MAAM,KAAK,IAAI,IAAI,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAC3D,CAAA;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACnD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,gBAAgB,EAAE,GAAG,MAAM,CAAC,CAAC,CAAA;QAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;QACtE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAA;QAC9E,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,KAAK,CACvE,CAAC,EACD,IAAI,CAAC,eAAe,CACrB,CAAA;QACD,IAAI,CAAC,OAAO,GAAG;YACb,GAAG,gBAAgB;YACnB,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE;YAC1D,GAAG,MAAM,CAAC,MAAM,CACd,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,CACnF;SACF,CAAA;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAA;QACzB,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,CAAA;IAC3D,CAAC;CACF;AAED,SAAS,aAAa,CAAC,KAAa,EAAE,IAAY;IAChD,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC;QACzC,MAAM,IAAI,SAAS,CAAC,kBAAkB,IAAI,0BAA0B,CAAC,CAAA;AACzE,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAA;AAClG,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc,EAAE,SAAiB;IAC1D,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IACrF,MAAM,MAAM,GAAG,KAAgC,CAAA;IAC/C,OAAO,CACL,MAAM,CAAC,OAAO,KAAK,CAAC;QACpB,MAAM,CAAC,SAAS,KAAK,SAAS;QAC9B,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ;QAC9B,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC;QAChC,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ;QAC7B,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAChC,CAAA;AACH,CAAC;AAED,SAAS,WAAW,CAAC,KAAc,EAAE,GAAG,GAAG,EAAE,EAAE,KAAK,GAAG,CAAC;IACtD,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,iBAAiB,CAAA;IACvC,IAAI,6EAA6E,CAAC,IAAI,CAAC,GAAG,CAAC;QACzF,OAAO,YAAY,CAAA;IACrB,IAAI,OAAO,KAAK,KAAK,QAAQ;QAC3B,OAAO,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAA;IAChF,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACtB,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAA;IAC5E,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,MAAM,GAA4B,EAAE,CAAA;QAC1C,KAAK,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;YACtE,MAAM,CAAC,QAAQ,CAAC,GAAG,WAAW,CAAC,UAAU,EAAE,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;QACjE,OAAO,MAAM,CAAA;IACf,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,UAAU,CAAC,KAAc,EAAE,QAAgB;IAClD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IAClC,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,QAAQ;QAAE,OAAO,KAAK,CAAA;IAC7D,OAAO,qBAAqB,CAAA;AAC9B,CAAC;AAED,SAAS,cAAc,CAAC,OAAiC;IACvD,OAAO,IAAI,CAAC,IAAI,CACd,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAC7F,CAAA;AACH,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,OAAO,CACL,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,IAAI,KAAK,oBAAoB,CAChG,CAAA;AACH,CAAC;AAED,SAAS,SAAS,CAAC,OAAiC,EAAE,QAAgB;IACpE,MAAM,KAAK,GAAG,CAAC,aAAa,OAAO,CAAC,MAAM,2BAA2B,CAAC,CAAA;IACtE,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,KAAK,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAA;QACrF,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,QAAQ;YAAE,MAAK;QAC/D,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAClB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC"}
|
|
1
|
+
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../src/sessions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,IAAI,YAAY,EAAE,MAAM,SAAS,CAAA;AACnD,OAAO,EAAmB,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjG,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEzC,MAAM,2BAA2B,GAAG,KAAK,CAAA;AACzC,MAAM,yBAAyB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAA;AACjD,MAAM,mBAAmB,GAAG,OAAO,CAAA;AACnC,MAAM,iBAAiB,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAA;AAC3C,kFAAkF;AAClF,mFAAmF;AACnF,8EAA8E;AAC9E,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAA;AACtC,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAA;AACpC,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAA;AACtC,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAA;AACtC,MAAM,UAAU,GAAG,YAAY,CAAC,UAAU,IAAI,CAAC,CAAA;AAkC/C;;;GAGG;AACH,MAAM,OAAO,gBAAgB;IACV,IAAI,CAAQ;IACZ,aAAa,CAAQ;IACrB,UAAU,CAAQ;IAClB,QAAQ,CAAQ;IAChB,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAA;IACrC,KAAK,GAAG,IAAI,GAAG,EAAyB,CAAA;IAEzD,YAAY,OAAgC;QAC1C,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;QACxB,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,GAAG,GAAG,IAAI,CAAA;QACxD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,aAAa,GAAG,IAAI;YACxE,MAAM,IAAI,UAAU,CAAC,oDAAoD,CAAC,CAAA;QAC5E,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,2BAA2B,CAAA;QACnE,IACE,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC;YACtC,IAAI,CAAC,UAAU,GAAG,CAAC;YACnB,IAAI,CAAC,UAAU,GAAG,mBAAmB;YAErC,MAAM,IAAI,UAAU,CAAC,mDAAmD,mBAAmB,EAAE,CAAC,CAAA;QAChG,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,yBAAyB,CAAA;QAC7D,IACE,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC;YACpC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC;YACtC,IAAI,CAAC,QAAQ,GAAG,iBAAiB;YAEjC,MAAM,IAAI,UAAU,CAClB,+DAA+D,iBAAiB,EAAE,CACnF,CAAA;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CACV,SAAiB,EACjB,IAAY,EACZ,OAAiB,EACjB,UAAyC,EAAE;QAE3C,aAAa,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;QACrC,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC;YACzC,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,CAAA;QAC1D,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;YAChD,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YAC3C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAA;YAClD,MAAM,KAAK,GAAoB,MAAM,CAAC,MAAM,CAAC;gBAC3C,OAAO,EAAE,CAAC;gBACV,SAAS;gBACT,GAAG,EAAE,OAAO;gBACZ,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;gBACd,IAAI;gBACJ,GAAG,CAAC,OAAO,KAAK,SAAS;oBACvB,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;gBACtE,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACrD,CAAC,CAAA;YACF,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;YAClC,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa;gBACtD,MAAM,IAAI,UAAU,CAAC,4CAA4C,CAAC,CAAA;YACpE,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;YACpC,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,EAAE,KAAK,CAAC,CAAA;YAC9E,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,IAAI,EAAE,MAAM,CAAC,CAAA;YAC3C,CAAC;oBAAS,CAAC;gBACT,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;YACpB,CAAC;YACD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;YACtC,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAA;YACrC,OAAO,KAAK,CAAA;QACd,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAiB,EAAE,KAAK,GAAG,IAAI,CAAC,UAAU;QACnD,aAAa,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;QACrC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;YAC3C,MAAM,IAAI,UAAU,CAAC,2DAA2D,CAAC,CAAA;QACnF,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;QACrD,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAA;IAC1F,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,SAAiB,EAAE,OAAgB;QAClD,aAAa,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;QACrC,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;YAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,eAAe,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAA;YAC/E,MAAM,SAAS,GAAG,GAAG,MAAM,IAAI,OAAO,CAAC,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,MAAM,CAAA;YACvE,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YACjD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC7B,OAAO,EAAE,CAAC;gBACV,SAAS;gBACT,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;gBACd,OAAO,EAAE,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC;aAC9D,CAAC,CAAA;YACF,0FAA0F;YAC1F,MAAM,SAAS,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;YAClF,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;YACjC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;gBACvC,MAAM,KAAK,CAAA;YACb,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,IAAI,CACR,SAAiB,EACjB,eAAe,GAAG,GAAG,SAAS,SAAS,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;QAEhE,aAAa,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;QACrC,aAAa,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAA;QACjD,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;YAChD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;YACnE,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA;YAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CACzC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CACrE,CAAA;YACD,uFAAuF;YACvF,0EAA0E;YAC1E,MAAM,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBACzE,QAAQ,EAAE,MAAM;gBAChB,IAAI,EAAE,IAAI;gBACV,IAAI,EAAE,KAAK;aACZ,CAAC,CAAA;YACF,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAA;YAClE,OAAO,eAAe,CAAA;QACxB,CAAC,CAAC,CAAA;IACJ,CAAC;IAEO,OAAO,CAAC,SAAiB;QAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;IAC/D,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,SAAiB;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAC5C,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,MAAM,GAAG,CAAC,CAAA;QAC3C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;QACrD,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IACxC,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,SAAiB;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QACpC,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;QAClD,IAAI,IAAY,CAAA;QAChB,IAAI,CAAC;YACH,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAA;QACjC,CAAC;gBAAS,CAAC;YACT,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;QACpB,CAAC;QACD,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,mBAAmB,CAChC,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,EACjE,SAAS,CACV,CAAA;YACD,IAAI,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU;gBAAE,OAAM;QAC9C,CAAC;QACD,wFAAwF;QACxF,6EAA6E;QAC7E,MAAM,MAAM,GAAG,mBAAmB,CAChC,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,EACtF,SAAS,CACV,CAAA;QACD,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;QACtE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAM;QACjC,MAAM,OAAO,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA;QAChF,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAM;QAC/E,MAAM,SAAS,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,MAAM,CAAA;QACrE,MAAM,SAAS,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;QAClF,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;YACvC,MAAM,KAAK,CAAA;QACb,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,CAAA;IACrD,CAAC;IAEO,KAAK,CAAC,YAAY,CACxB,IAAY,EACZ,YAAoB,EACpB,QAAgB;QAEhB,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;QAClD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAA;YACrC,IAAI,GAAG,GAAG,IAAI,CAAA;YACd,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;YACxC,MAAM,MAAM,GAAa,EAAE,CAAA;YAC3B,MAAM,UAAU,GAAG,EAAE,GAAG,IAAI,CAAA;YAC5B,OAAO,SAAS,GAAG,CAAC,EAAE,CAAC;gBACrB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;gBAC5C,GAAG,IAAI,IAAI,CAAA;gBACX,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;gBACtC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;gBACnD,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAA;gBACnD,SAAS,IAAI,MAAM,CAAC,SAAS,CAAA;gBAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;gBACnD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBAC9B,MAAM,aAAa,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAA;gBAC/D,IAAI,aAAa,IAAI,YAAY,IAAI,GAAG,KAAK,CAAC,IAAI,MAAM,CAAC,SAAS,KAAK,CAAC;oBAAE,OAAO,IAAI,CAAA;YACvF,CAAC;YACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QAC/C,CAAC;gBAAS,CAAC;YACT,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;QACpB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,YAAY,CACxB,SAAiB,EACjB,YAAoB;QAEpB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;YAC1F,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;YACpD,MAAM,IAAI,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAA;YAChC,IAAI,IAAI,KAAK,SAAS;gBAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;YAC3D,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAA;QACpD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,UAAU,CAAC,KAAK,CAAC;gBAAE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;YAC/C,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,eAAe,CAAI,SAAiB,EAAE,SAA2B;QAC7E,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAA;QAC/D,IAAI,OAAoB,CAAA;QACxB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAC5C,OAAO,GAAG,OAAO,CAAA;QACnB,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;QAClC,MAAM,QAAQ,CAAA;QACd,IAAI,CAAC;YACH,OAAO,MAAM,SAAS,EAAE,CAAA;QAC1B,CAAC;gBAAS,CAAC;YACT,OAAO,EAAE,CAAA;YACT,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,OAAO;gBAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QACzE,CAAC;IACH,CAAC;CACF;AAuBD,gGAAgG;AAChG,MAAM,OAAO,aAAa;IACP,SAAS,CAAQ;IACjB,UAAU,CAAQ;IAClB,eAAe,CAAQ;IACvB,eAAe,CAAiE;IACzF,OAAO,GAAoB,EAAE,CAAA;IAErC,YAAY,UAAgC,EAAE;QAC5C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,MAAM,CAAA;QAC5C,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,CAAA;QAC1C,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,KAAK,CAAA;QACvD,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,SAAS,IAAI,SAAS,CAAA;QACrD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,SAAS,GAAG,GAAG;YAC/D,MAAM,IAAI,UAAU,CAAC,gDAAgD,CAAC,CAAA;QACxE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC;YAC/D,MAAM,IAAI,UAAU,CAAC,6CAA6C,CAAC,CAAA;IACvE,CAAC;IAED,IAAI,MAAM;QACR,OAAO,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACrC,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAA;IAC5B,CAAC;IAED,QAAQ;QACN,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,CAAA;IAClF,CAAC;IAED,iGAAiG;IACjG,OAAO,CAAC,OAAiC;QACvC,IAAI,CAAC,OAAO,GAAG,EAAE,CAAA;QACjB,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;YAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAC9F,CAAC;IAED,MAAM,CAAC,MAAqB;QAC1B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YAChB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC;YACtD,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpD,CAAC,CAAA;QACF,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO,SAAS,CAAA;QACnD,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IAClC,CAAC;IAED,OAAO,CAAC,SAAqC,QAAQ;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAC1B,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAA;QAChG,6FAA6F;QAC7F,8FAA8F;QAC9F,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAC1C,CAAC,MAAM,EAAE,EAAE,CACT,MAAM,CAAC,IAAI,KAAK,gBAAgB;YAChC,CAAC,MAAM,CAAC,MAAM,KAAK,IAAI,IAAI,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAC3D,CAAA;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACnD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,gBAAgB,EAAE,GAAG,MAAM,CAAC,CAAC,CAAA;QAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;QACtE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAA;QAC9E,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,KAAK,CACvE,CAAC,EACD,IAAI,CAAC,eAAe,CACrB,CAAA;QACD,IAAI,CAAC,OAAO,GAAG;YACb,GAAG,gBAAgB;YACnB,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE;YAC1D,GAAG,MAAM,CAAC,MAAM,CACd,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,CACnF;SACF,CAAA;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAA;QACzB,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,CAAA;IAC3D,CAAC;CACF;AAED;;;;GAIG;AACH,KAAK,UAAU,eAAe,CAAC,IAAY,EAAE,KAAa,EAAE,IAAa;IACvE,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,IAAI,KAAK,SAAS;YACvB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,UAAU,CAAC;YAChC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,UAAU,EAAE,IAAI,CAAC,CAAA;IAC1C,CAAC;IACD,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAA;IAChC,MAAM,IAAI,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;IACzF,IAAI,CAAC;QACH,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAA;QAChC,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;QAClB,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,IAAY;IAC9C,IAAI,CAAC;QACH,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,EAAE;YACtC,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAA;IAC3E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,UAAU,CAAC,KAAK,CAAC;YAAE,OAAM;QAC7B,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC;AAED,kGAAkG;AAClG,MAAM,cAAc,GAAG,iDAAiD,CAAA;AAExE;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,SAAiB,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ;IAC5E,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,SAAS,CAAA;IAC1C,MAAM,IAAI,GAAG,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IAC7C,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;QAC9B,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;QACrE,CAAC,CAAC,IAAI,CAAA;AACV,CAAC;AAED,SAAS,aAAa,CAAC,KAAa,EAAE,IAAY;IAChD,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC;QACzC,MAAM,IAAI,SAAS,CAAC,kBAAkB,IAAI,0BAA0B,CAAC,CAAA;AACzE,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAA;AAClG,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc,EAAE,SAAiB;IAC1D,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IACrF,MAAM,MAAM,GAAG,KAAgC,CAAA;IAC/C,OAAO,CACL,MAAM,CAAC,OAAO,KAAK,CAAC;QACpB,MAAM,CAAC,SAAS,KAAK,SAAS;QAC9B,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ;QAC9B,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC;QAChC,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ;QAC7B,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAChC,CAAA;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY,EAAE,SAAiB;IAC1D,MAAM,OAAO,GAAsB,EAAE,CAAA;IACrC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;YAAE,SAAQ;QACtC,IAAI,CAAC;YACH,MAAM,KAAK,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YACvC,IAAI,iBAAiB,CAAC,KAAK,EAAE,SAAS,CAAC;gBAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;QAC7E,CAAC;QAAC,MAAM,CAAC;YACP,uFAAuF;YACvF,2FAA2F;QAC7F,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,SAAS,aAAa,CACpB,OAAmC,EACnC,UAAkB,EAClB,QAAgB;IAEhB,MAAM,QAAQ,GAAsB,EAAE,CAAA;IACtC,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,KAAK,IAAI,KAAK,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,UAAU,EAAE,KAAK,EAAE,EAAE,CAAC;QACzF,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAE,CAAA;QAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAA;QACjE,IAAI,KAAK,GAAG,IAAI,GAAG,QAAQ;YAAE,MAAK;QAClC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QACvB,KAAK,IAAI,IAAI,CAAA;IACf,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,SAAS,WAAW,CAAC,KAAc,EAAE,GAAG,GAAG,EAAE,EAAE,KAAK,GAAG,CAAC;IACtD,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,iBAAiB,CAAA;IACvC,IAAI,6EAA6E,CAAC,IAAI,CAAC,GAAG,CAAC;QACzF,OAAO,YAAY,CAAA;IACrB,IAAI,OAAO,KAAK,KAAK,QAAQ;QAC3B,OAAO,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAA;IAChF,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACtB,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAA;IAC5E,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,MAAM,GAA4B,EAAE,CAAA;QAC1C,KAAK,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;YACtE,MAAM,CAAC,QAAQ,CAAC,GAAG,WAAW,CAAC,UAAU,EAAE,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;QACjE,OAAO,MAAM,CAAA;IACf,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,UAAU,CAAC,KAAc,EAAE,QAAgB;IAClD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IAClC,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,QAAQ;QAAE,OAAO,KAAK,CAAA;IAC7D,OAAO,qBAAqB,CAAA;AAC9B,CAAC;AAED,SAAS,cAAc,CAAC,OAAiC;IACvD,OAAO,IAAI,CAAC,IAAI,CACd,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAC7F,CAAA;AACH,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,OAAO,CACL,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,IAAI,KAAK,oBAAoB,CAChG,CAAA;AACH,CAAC;AAED,SAAS,SAAS,CAAC,OAAiC,EAAE,QAAgB;IACpE,MAAM,KAAK,GAAG,CAAC,aAAa,OAAO,CAAC,MAAM,2BAA2B,CAAC,CAAA;IACtE,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,KAAK,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAA;QACrF,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,QAAQ;YAAE,MAAK;QAC/D,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAClB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC"}
|
package/dist/subagents.d.ts
CHANGED
|
@@ -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
|
}
|
package/dist/subagents.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subagents.d.ts","sourceRoot":"","sources":["../src/subagents.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"subagents.d.ts","sourceRoot":"","sources":["../src/subagents.ts"],"names":[],"mappings":"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"}
|