pi-forge 1.2.4 → 1.3.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 +1 -1
- package/dist/client/assets/{CodeMirrorEditor-M7HIAKX2.js → CodeMirrorEditor-BuLFJjB1.js} +13 -13
- package/dist/client/assets/CodeMirrorEditor-BuLFJjB1.js.map +1 -0
- package/dist/client/assets/index-CEqSkIuy.css +1 -0
- package/dist/client/assets/index-GubcPYw6.js +375 -0
- package/dist/client/assets/index-GubcPYw6.js.map +1 -0
- package/dist/client/assets/{workbox-window.prod.es5-Cch4wiA5.js → workbox-window.prod.es5-Bd17z0YL.js} +2 -2
- package/dist/client/assets/{workbox-window.prod.es5-Cch4wiA5.js.map → workbox-window.prod.es5-Bd17z0YL.js.map} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/client/sw.js +1 -1
- package/dist/client/sw.js.map +1 -1
- package/dist/server/agent-extensions/compaction-continuation.js +65 -0
- package/dist/server/agent-extensions/compaction-continuation.js.map +1 -0
- package/dist/server/agent-resource-loader.js +10 -0
- package/dist/server/agent-resource-loader.js.map +1 -1
- package/dist/server/git-clone.js +364 -0
- package/dist/server/git-clone.js.map +1 -0
- package/dist/server/index.js +26 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/mcp/tool-bridge.js +14 -8
- package/dist/server/mcp/tool-bridge.js.map +1 -1
- package/dist/server/orchestration/config.js +61 -0
- package/dist/server/orchestration/config.js.map +1 -0
- package/dist/server/orchestration/event-bridge.js +93 -0
- package/dist/server/orchestration/event-bridge.js.map +1 -0
- package/dist/server/orchestration/inbox.js +199 -0
- package/dist/server/orchestration/inbox.js.map +1 -0
- package/dist/server/orchestration/init.js +39 -0
- package/dist/server/orchestration/init.js.map +1 -0
- package/dist/server/orchestration/store.js +352 -0
- package/dist/server/orchestration/store.js.map +1 -0
- package/dist/server/orchestration/tools.js +769 -0
- package/dist/server/orchestration/tools.js.map +1 -0
- package/dist/server/orchestration/types.js +57 -0
- package/dist/server/orchestration/types.js.map +1 -0
- package/dist/server/processes/envelope.js +60 -0
- package/dist/server/processes/envelope.js.map +1 -0
- package/dist/server/processes/log-store.js +132 -0
- package/dist/server/processes/log-store.js.map +1 -0
- package/dist/server/processes/manager.js +370 -0
- package/dist/server/processes/manager.js.map +1 -0
- package/dist/server/processes/prompt-strings.js +43 -0
- package/dist/server/processes/prompt-strings.js.map +1 -0
- package/dist/server/processes/tool.js +273 -0
- package/dist/server/processes/tool.js.map +1 -0
- package/dist/server/processes/types.js +21 -0
- package/dist/server/processes/types.js.map +1 -0
- package/dist/server/processes/watches.js +59 -0
- package/dist/server/processes/watches.js.map +1 -0
- package/dist/server/project-manager.js +46 -32
- package/dist/server/project-manager.js.map +1 -1
- package/dist/server/routes/config.js +5 -0
- package/dist/server/routes/config.js.map +1 -1
- package/dist/server/routes/control.js +9 -0
- package/dist/server/routes/control.js.map +1 -1
- package/dist/server/routes/health.js +14 -1
- package/dist/server/routes/health.js.map +1 -1
- package/dist/server/routes/orchestration.js +464 -0
- package/dist/server/routes/orchestration.js.map +1 -0
- package/dist/server/routes/processes.js +228 -0
- package/dist/server/routes/processes.js.map +1 -0
- package/dist/server/routes/projects.js +239 -14
- package/dist/server/routes/projects.js.map +1 -1
- package/dist/server/routes/sessions.js +53 -34
- package/dist/server/routes/sessions.js.map +1 -1
- package/dist/server/routes/webhooks.js +362 -0
- package/dist/server/routes/webhooks.js.map +1 -0
- package/dist/server/session-registry.js +246 -3
- package/dist/server/session-registry.js.map +1 -1
- package/dist/server/sse-bridge.js +226 -18
- package/dist/server/sse-bridge.js.map +1 -1
- package/dist/server/webhooks/dispatcher.js +254 -0
- package/dist/server/webhooks/dispatcher.js.map +1 -0
- package/dist/server/webhooks/event-bridge.js +185 -0
- package/dist/server/webhooks/event-bridge.js.map +1 -0
- package/dist/server/webhooks/init.js +55 -0
- package/dist/server/webhooks/init.js.map +1 -0
- package/dist/server/webhooks/store.js +394 -0
- package/dist/server/webhooks/store.js.map +1 -0
- package/dist/server/webhooks/types.js +32 -0
- package/dist/server/webhooks/types.js.map +1 -0
- package/package.json +4 -4
- package/dist/client/assets/CodeMirrorEditor-M7HIAKX2.js.map +0 -1
- package/dist/client/assets/index-DFDpaYie.css +0 -1
- package/dist/client/assets/index-DjYKKZRm.js +0 -363
- package/dist/client/assets/index-DjYKKZRm.js.map +0 -1
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Disk-backed persistence for orchestration metadata.
|
|
3
|
+
*
|
|
4
|
+
* Two files in `${FORGE_DATA_DIR}/`:
|
|
5
|
+
* - `session-orchestration.json` — supervisor opt-in + supervisor↔worker links
|
|
6
|
+
* - `orchestrator-inbox.json` — per-supervisor pending event queue
|
|
7
|
+
*
|
|
8
|
+
* Separate files so the chatty inbox writes don't fight the rare
|
|
9
|
+
* topology mutations. Same atomic-write + in-process lock pattern as
|
|
10
|
+
* `webhooks/store.ts` and `project-manager.ts`. Single-tenant /
|
|
11
|
+
* single-process assumption — cross-process safety would need a real
|
|
12
|
+
* file lock.
|
|
13
|
+
*
|
|
14
|
+
* Mode 0600 on both: the link file has no secrets but the inbox can
|
|
15
|
+
* carry assistant-message previews (which can contain anything the
|
|
16
|
+
* agent has been working on); both should be unreadable to other
|
|
17
|
+
* users on shared boxes.
|
|
18
|
+
*/
|
|
19
|
+
import { randomUUID } from "node:crypto";
|
|
20
|
+
import { chmod, mkdir, readFile, rename, unlink, writeFile } from "node:fs/promises";
|
|
21
|
+
import { join } from "node:path";
|
|
22
|
+
import { config } from "../config.js";
|
|
23
|
+
import { emptyInboxStore, emptyStore, isInboxEventType, MAX_INBOX_ITEMS, ORCHESTRATION_VERSION, } from "./types.js";
|
|
24
|
+
const STORE_FILE = () => join(config.forgeDataDir, "session-orchestration.json");
|
|
25
|
+
const INBOX_FILE = () => join(config.forgeDataDir, "orchestrator-inbox.json");
|
|
26
|
+
async function ensureDir() {
|
|
27
|
+
await mkdir(config.forgeDataDir, { recursive: true });
|
|
28
|
+
}
|
|
29
|
+
async function atomicWriteJson(target, data, mode) {
|
|
30
|
+
await ensureDir();
|
|
31
|
+
const tmp = `${target}.${randomUUID()}.tmp`;
|
|
32
|
+
await writeFile(tmp, JSON.stringify(data, null, 2), "utf8");
|
|
33
|
+
try {
|
|
34
|
+
await chmod(tmp, mode);
|
|
35
|
+
await rename(tmp, target);
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
await unlink(tmp).catch(() => undefined);
|
|
39
|
+
throw err;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// ---- session-orchestration.json (topology) ----
|
|
43
|
+
let storeLock = Promise.resolve();
|
|
44
|
+
function withStoreLock(fn) {
|
|
45
|
+
const next = storeLock.then(fn, fn);
|
|
46
|
+
storeLock = next.catch(() => undefined);
|
|
47
|
+
return next;
|
|
48
|
+
}
|
|
49
|
+
function isSupervisorRecord(v) {
|
|
50
|
+
if (typeof v !== "object" || v === null)
|
|
51
|
+
return false;
|
|
52
|
+
const r = v;
|
|
53
|
+
return (typeof r.enabledAt === "string" &&
|
|
54
|
+
Array.isArray(r.workerIds) &&
|
|
55
|
+
r.workerIds.every((id) => typeof id === "string"));
|
|
56
|
+
}
|
|
57
|
+
function isWorkerRecord(v) {
|
|
58
|
+
if (typeof v !== "object" || v === null)
|
|
59
|
+
return false;
|
|
60
|
+
const r = v;
|
|
61
|
+
if (typeof r.supervisorId !== "string" || typeof r.spawnedAt !== "string")
|
|
62
|
+
return false;
|
|
63
|
+
if (r.spawnedFrom !== undefined) {
|
|
64
|
+
const sf = r.spawnedFrom;
|
|
65
|
+
if (typeof sf.sessionId !== "string")
|
|
66
|
+
return false;
|
|
67
|
+
if (sf.mode !== "fresh" && sf.mode !== "summary")
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
async function readStoreFile() {
|
|
73
|
+
await ensureDir();
|
|
74
|
+
try {
|
|
75
|
+
const raw = await readFile(STORE_FILE(), "utf8");
|
|
76
|
+
const parsed = JSON.parse(raw);
|
|
77
|
+
if (typeof parsed !== "object" || parsed === null)
|
|
78
|
+
return emptyStore();
|
|
79
|
+
const r = parsed;
|
|
80
|
+
const supervisors = {};
|
|
81
|
+
const workers = {};
|
|
82
|
+
if (typeof r.supervisors === "object" && r.supervisors !== null) {
|
|
83
|
+
for (const [id, rec] of Object.entries(r.supervisors)) {
|
|
84
|
+
if (isSupervisorRecord(rec))
|
|
85
|
+
supervisors[id] = rec;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (typeof r.workers === "object" && r.workers !== null) {
|
|
89
|
+
for (const [id, rec] of Object.entries(r.workers)) {
|
|
90
|
+
if (isWorkerRecord(rec))
|
|
91
|
+
workers[id] = rec;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return { version: ORCHESTRATION_VERSION, supervisors, workers };
|
|
95
|
+
}
|
|
96
|
+
catch (err) {
|
|
97
|
+
if (err.code === "ENOENT")
|
|
98
|
+
return emptyStore();
|
|
99
|
+
throw err;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
async function writeStoreFile(s) {
|
|
103
|
+
await atomicWriteJson(STORE_FILE(), s, 0o600);
|
|
104
|
+
}
|
|
105
|
+
export async function readStore() {
|
|
106
|
+
return readStoreFile();
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Mark a session as a supervisor. Idempotent — calling on an
|
|
110
|
+
* already-enabled session updates nothing. Rejects if the session
|
|
111
|
+
* is currently registered as a worker (depth=1 limit).
|
|
112
|
+
*/
|
|
113
|
+
export class OrchestrationError extends Error {
|
|
114
|
+
code;
|
|
115
|
+
constructor(code, message) {
|
|
116
|
+
super(message);
|
|
117
|
+
this.code = code;
|
|
118
|
+
this.name = "OrchestrationError";
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
export async function enableSupervisor(sessionId) {
|
|
122
|
+
return withStoreLock(async () => {
|
|
123
|
+
const s = await readStoreFile();
|
|
124
|
+
if (s.workers[sessionId] !== undefined) {
|
|
125
|
+
throw new OrchestrationError("depth_limit_exceeded", `Session ${sessionId} is a worker and cannot become a supervisor (depth=1).`);
|
|
126
|
+
}
|
|
127
|
+
const existing = s.supervisors[sessionId];
|
|
128
|
+
if (existing !== undefined)
|
|
129
|
+
return existing;
|
|
130
|
+
const rec = {
|
|
131
|
+
enabledAt: new Date().toISOString(),
|
|
132
|
+
workerIds: [],
|
|
133
|
+
};
|
|
134
|
+
s.supervisors[sessionId] = rec;
|
|
135
|
+
await writeStoreFile(s);
|
|
136
|
+
return rec;
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Remove a session's supervisor mode. Detaches every worker so they
|
|
141
|
+
* become standalone (their session records are left alone on disk).
|
|
142
|
+
* No-op if the session wasn't a supervisor.
|
|
143
|
+
*/
|
|
144
|
+
export async function disableSupervisor(sessionId) {
|
|
145
|
+
await withStoreLock(async () => {
|
|
146
|
+
const s = await readStoreFile();
|
|
147
|
+
const rec = s.supervisors[sessionId];
|
|
148
|
+
if (rec === undefined)
|
|
149
|
+
return;
|
|
150
|
+
for (const workerId of rec.workerIds) {
|
|
151
|
+
delete s.workers[workerId];
|
|
152
|
+
}
|
|
153
|
+
delete s.supervisors[sessionId];
|
|
154
|
+
await writeStoreFile(s);
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Register a new worker session under a supervisor. Caller is
|
|
159
|
+
* responsible for actually creating the session (via createSession
|
|
160
|
+
* in session-registry); this just records the link. Rejects if the
|
|
161
|
+
* supervisor doesn't exist or the worker is already linked
|
|
162
|
+
* elsewhere. Concurrency-safe (single store lock).
|
|
163
|
+
*/
|
|
164
|
+
export async function registerWorker(opts) {
|
|
165
|
+
await withStoreLock(async () => {
|
|
166
|
+
const s = await readStoreFile();
|
|
167
|
+
const sup = s.supervisors[opts.supervisorId];
|
|
168
|
+
if (sup === undefined) {
|
|
169
|
+
throw new OrchestrationError("supervisor_not_found", `No supervisor record for ${opts.supervisorId}.`);
|
|
170
|
+
}
|
|
171
|
+
if (s.workers[opts.workerId] !== undefined) {
|
|
172
|
+
throw new OrchestrationError("worker_already_linked", `Worker ${opts.workerId} is already linked to a supervisor.`);
|
|
173
|
+
}
|
|
174
|
+
if (s.supervisors[opts.workerId] !== undefined) {
|
|
175
|
+
throw new OrchestrationError("depth_limit_exceeded", `Session ${opts.workerId} is already a supervisor; cannot also be a worker.`);
|
|
176
|
+
}
|
|
177
|
+
sup.workerIds.push(opts.workerId);
|
|
178
|
+
const wrec = {
|
|
179
|
+
supervisorId: opts.supervisorId,
|
|
180
|
+
spawnedAt: new Date().toISOString(),
|
|
181
|
+
};
|
|
182
|
+
if (opts.spawnedFrom !== undefined)
|
|
183
|
+
wrec.spawnedFrom = opts.spawnedFrom;
|
|
184
|
+
s.workers[opts.workerId] = wrec;
|
|
185
|
+
await writeStoreFile(s);
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Drop a worker's link to its supervisor. Idempotent — no-op if the
|
|
190
|
+
* worker wasn't registered. Used by `orchestrate_detach_worker`
|
|
191
|
+
* and as the cleanup step when a worker is killed.
|
|
192
|
+
*/
|
|
193
|
+
export async function unregisterWorker(workerId) {
|
|
194
|
+
await withStoreLock(async () => {
|
|
195
|
+
const s = await readStoreFile();
|
|
196
|
+
const wrec = s.workers[workerId];
|
|
197
|
+
if (wrec === undefined)
|
|
198
|
+
return;
|
|
199
|
+
const sup = s.supervisors[wrec.supervisorId];
|
|
200
|
+
if (sup !== undefined) {
|
|
201
|
+
sup.workerIds = sup.workerIds.filter((id) => id !== workerId);
|
|
202
|
+
}
|
|
203
|
+
delete s.workers[workerId];
|
|
204
|
+
await writeStoreFile(s);
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Resolve the supervisor ID for a worker session, or undefined if
|
|
209
|
+
* the session isn't a registered worker. Read-only — no lock
|
|
210
|
+
* needed because we tolerate stale reads (the event bridge reads
|
|
211
|
+
* this on every event and just skips when the link has been torn
|
|
212
|
+
* down mid-flight).
|
|
213
|
+
*/
|
|
214
|
+
export async function getSupervisorIdForWorker(workerId) {
|
|
215
|
+
const s = await readStoreFile();
|
|
216
|
+
return s.workers[workerId]?.supervisorId;
|
|
217
|
+
}
|
|
218
|
+
export async function isSupervisor(sessionId) {
|
|
219
|
+
const s = await readStoreFile();
|
|
220
|
+
return s.supervisors[sessionId] !== undefined;
|
|
221
|
+
}
|
|
222
|
+
export async function isWorker(sessionId) {
|
|
223
|
+
const s = await readStoreFile();
|
|
224
|
+
return s.workers[sessionId] !== undefined;
|
|
225
|
+
}
|
|
226
|
+
export async function getWorkerIds(supervisorId) {
|
|
227
|
+
const s = await readStoreFile();
|
|
228
|
+
return [...(s.supervisors[supervisorId]?.workerIds ?? [])];
|
|
229
|
+
}
|
|
230
|
+
export async function getWorkerRecord(workerId) {
|
|
231
|
+
const s = await readStoreFile();
|
|
232
|
+
return s.workers[workerId];
|
|
233
|
+
}
|
|
234
|
+
// ---- orchestrator-inbox.json (queue) ----
|
|
235
|
+
let inboxLock = Promise.resolve();
|
|
236
|
+
function withInboxLock(fn) {
|
|
237
|
+
const next = inboxLock.then(fn, fn);
|
|
238
|
+
inboxLock = next.catch(() => undefined);
|
|
239
|
+
return next;
|
|
240
|
+
}
|
|
241
|
+
function isInboxItem(v) {
|
|
242
|
+
if (typeof v !== "object" || v === null)
|
|
243
|
+
return false;
|
|
244
|
+
const r = v;
|
|
245
|
+
return (typeof r.id === "string" &&
|
|
246
|
+
isInboxEventType(r.type) &&
|
|
247
|
+
typeof r.workerId === "string" &&
|
|
248
|
+
typeof r.occurredAt === "string" &&
|
|
249
|
+
typeof r.data === "object" &&
|
|
250
|
+
r.data !== null &&
|
|
251
|
+
typeof r.delivered === "boolean");
|
|
252
|
+
}
|
|
253
|
+
async function readInboxFile() {
|
|
254
|
+
await ensureDir();
|
|
255
|
+
try {
|
|
256
|
+
const raw = await readFile(INBOX_FILE(), "utf8");
|
|
257
|
+
const parsed = JSON.parse(raw);
|
|
258
|
+
if (typeof parsed !== "object" || parsed === null)
|
|
259
|
+
return emptyInboxStore();
|
|
260
|
+
const r = parsed;
|
|
261
|
+
const inboxes = {};
|
|
262
|
+
if (typeof r.inboxes === "object" && r.inboxes !== null) {
|
|
263
|
+
for (const [supId, items] of Object.entries(r.inboxes)) {
|
|
264
|
+
if (Array.isArray(items)) {
|
|
265
|
+
inboxes[supId] = items.filter(isInboxItem);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
return { version: ORCHESTRATION_VERSION, inboxes };
|
|
270
|
+
}
|
|
271
|
+
catch (err) {
|
|
272
|
+
if (err.code === "ENOENT")
|
|
273
|
+
return emptyInboxStore();
|
|
274
|
+
throw err;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
async function writeInboxFile(s) {
|
|
278
|
+
await atomicWriteJson(INBOX_FILE(), s, 0o600);
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Append an inbox item for the supervisor. FIFO-evicts items beyond
|
|
282
|
+
* `MAX_INBOX_ITEMS`. Caller is responsible for resolving the
|
|
283
|
+
* supervisor ID (via `getSupervisorIdForWorker`) — this is a raw
|
|
284
|
+
* write that doesn't check the topology.
|
|
285
|
+
*/
|
|
286
|
+
export async function enqueueInboxItem(supervisorId, item) {
|
|
287
|
+
return withInboxLock(async () => {
|
|
288
|
+
const s = await readInboxFile();
|
|
289
|
+
const existing = s.inboxes[supervisorId] ?? [];
|
|
290
|
+
const full = { id: randomUUID(), delivered: false, ...item };
|
|
291
|
+
existing.push(full);
|
|
292
|
+
// FIFO trim from the front so the most recent N stay.
|
|
293
|
+
const trimmed = existing.length > MAX_INBOX_ITEMS
|
|
294
|
+
? existing.slice(existing.length - MAX_INBOX_ITEMS)
|
|
295
|
+
: existing;
|
|
296
|
+
s.inboxes[supervisorId] = trimmed;
|
|
297
|
+
await writeInboxFile(s);
|
|
298
|
+
return full;
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Read pending (undelivered) items for the supervisor. Optionally
|
|
303
|
+
* mark them delivered as part of the same lock window so the
|
|
304
|
+
* agent-facing tool can advance the cursor atomically.
|
|
305
|
+
*
|
|
306
|
+
* Returns the items in chronological order (oldest first) — the
|
|
307
|
+
* supervisor LLM should process them in arrival order so a "ended"
|
|
308
|
+
* event after an "ask_user" doesn't get acted on first.
|
|
309
|
+
*/
|
|
310
|
+
export async function readPendingInbox(supervisorId, opts = {}) {
|
|
311
|
+
return withInboxLock(async () => {
|
|
312
|
+
const s = await readInboxFile();
|
|
313
|
+
const items = s.inboxes[supervisorId] ?? [];
|
|
314
|
+
const pending = items.filter((it) => !it.delivered);
|
|
315
|
+
if (opts.markDelivered === true && pending.length > 0) {
|
|
316
|
+
for (const it of pending)
|
|
317
|
+
it.delivered = true;
|
|
318
|
+
s.inboxes[supervisorId] = items;
|
|
319
|
+
await writeInboxFile(s);
|
|
320
|
+
}
|
|
321
|
+
return pending.map((it) => ({ ...it }));
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Return ALL inbox items for the supervisor (delivered + pending),
|
|
326
|
+
* newest first. Powers the REST UI; capped by the per-supervisor
|
|
327
|
+
* FIFO already, so safe to send wholesale.
|
|
328
|
+
*/
|
|
329
|
+
export async function readAllInbox(supervisorId) {
|
|
330
|
+
const s = await readInboxFile();
|
|
331
|
+
const items = s.inboxes[supervisorId] ?? [];
|
|
332
|
+
return items.slice().reverse();
|
|
333
|
+
}
|
|
334
|
+
export async function pendingInboxCount(supervisorId) {
|
|
335
|
+
const s = await readInboxFile();
|
|
336
|
+
const items = s.inboxes[supervisorId] ?? [];
|
|
337
|
+
return items.filter((it) => !it.delivered).length;
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* Drop a supervisor's inbox entirely. Called when supervisor mode
|
|
341
|
+
* is disabled or the supervisor session is deleted.
|
|
342
|
+
*/
|
|
343
|
+
export async function clearInbox(supervisorId) {
|
|
344
|
+
await withInboxLock(async () => {
|
|
345
|
+
const s = await readInboxFile();
|
|
346
|
+
if (s.inboxes[supervisorId] === undefined)
|
|
347
|
+
return;
|
|
348
|
+
delete s.inboxes[supervisorId];
|
|
349
|
+
await writeInboxFile(s);
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/orchestration/store.ts"],"names":[],"mappings":"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"}
|