@claudexor/daemon 3.9.8 → 3.10.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.
@@ -1,24 +1,30 @@
1
1
  import { createHash } from "node:crypto";
2
- import { closeSync, existsSync, fsyncSync, ftruncateSync, mkdirSync, openSync, readFileSync, readdirSync, renameSync, rmSync, writeFileSync, writeSync, } from "node:fs";
3
- import { join } from "node:path";
4
- import { Attachment, ControlResource, ControlUploadCreateRequest, ControlUploadStatus, } from "@claudexor/schema";
5
- import { hashJson, newId, sensitiveResourcePolicy } from "@claudexor/util";
2
+ import { closeSync, existsSync, fsyncSync, ftruncateSync, mkdirSync, openSync, readFileSync, readdirSync, renameSync, rmSync, writeFileSync, } from "node:fs";
3
+ import { dirname, join } from "node:path";
4
+ import { Attachment, ControlResource, ControlUploadCreateRequest, ControlUploadStatus, ModelPayloadRef, } from "@claudexor/schema";
5
+ import { fsyncDirectory, hashJson, newId, sensitiveResourcePolicy } from "@claudexor/util";
6
6
  function resourceError(message, status = 400, code = "resource_error") {
7
7
  return Object.assign(new Error(message), { status, code });
8
8
  }
9
9
  function atomicJson(path, value) {
10
10
  const temp = `${path}.${newId("tmp")}`;
11
- writeFileSync(temp, `${JSON.stringify(value)}\n`, { mode: 0o600 });
12
- // Windows FlushFileBuffers requires a write-capable file handle. The temp
13
- // was already written above; r+ only changes handle rights, not contents.
14
- const fd = openSync(temp, "r+");
15
11
  try {
16
- fsyncSync(fd);
12
+ writeFileSync(temp, `${JSON.stringify(value)}\n`, { mode: 0o600 });
13
+ // Windows FlushFileBuffers requires a write-capable file handle. The temp
14
+ // was already written above; r+ only changes handle rights, not contents.
15
+ const fd = openSync(temp, "r+");
16
+ try {
17
+ fsyncSync(fd);
18
+ }
19
+ finally {
20
+ closeSync(fd);
21
+ }
22
+ renameSync(temp, path);
23
+ fsyncDirectory(dirname(path));
17
24
  }
18
25
  finally {
19
- closeSync(fd);
26
+ rmSync(temp, { force: true });
20
27
  }
21
- renameSync(temp, path);
22
28
  }
23
29
  /** Daemon-owned immutable content store. Uploads are single-shot streams; finalized blobs dedupe. */
24
30
  export class ResourceStore {
@@ -61,7 +67,6 @@ export class ResourceStore {
61
67
  expectedBytes: request.sizeBytes,
62
68
  });
63
69
  this.uploads.set(uploadId, { request, status, partPath });
64
- this.createIdempotency.set(idempotencyKey, { requestDigest, result: status });
65
70
  this.persistUpload(this.uploads.get(uploadId));
66
71
  this.persistIdempotency({
67
72
  operation: "create",
@@ -69,6 +74,7 @@ export class ResourceStore {
69
74
  requestDigest,
70
75
  result: status,
71
76
  });
77
+ this.createIdempotency.set(idempotencyKey, { requestDigest, result: status });
72
78
  return status;
73
79
  }
74
80
  status(uploadId) {
@@ -96,7 +102,7 @@ export class ResourceStore {
96
102
  const next = upload.status.receivedBytes + bytes.length;
97
103
  if (next > upload.status.expectedBytes)
98
104
  throw resourceError("upload exceeds declared size", 413, "upload_size_exceeded");
99
- writeSync(fd, bytes);
105
+ writeFileSync(fd, bytes);
100
106
  upload.status = { ...upload.status, receivedBytes: next };
101
107
  }
102
108
  if (upload.status.state === "cancelled")
@@ -110,20 +116,27 @@ export class ResourceStore {
110
116
  }
111
117
  catch (error) {
112
118
  upload.status = { ...upload.status, state: "cancelled" };
113
- rmSync(upload.partPath, { force: true });
114
- this.persistUpload(upload);
115
119
  throw error;
116
120
  }
117
121
  finally {
118
122
  closeSync(fd);
123
+ if (upload.status.state === "cancelled") {
124
+ rmSync(upload.partPath, { force: true });
125
+ this.persistUpload(upload);
126
+ }
119
127
  }
120
128
  }
121
129
  cancel(uploadId) {
122
130
  const upload = this.uploads.get(uploadId);
123
131
  if (!upload)
124
132
  throw resourceError(`no such upload: ${uploadId}`, 404, "upload_not_found");
133
+ if (upload.finalization)
134
+ throw resourceError("upload finalization has already started", 409, "upload_finalizing");
135
+ const writing = upload.status.state === "uploading";
125
136
  upload.status = { ...upload.status, state: "cancelled" };
126
- rmSync(upload.partPath, { force: true });
137
+ // The writer closes its descriptor before unlinking (also required on Windows).
138
+ if (!writing)
139
+ rmSync(upload.partPath, { force: true });
127
140
  this.persistUpload(upload);
128
141
  return ControlUploadStatus.parse(upload.status);
129
142
  }
@@ -133,32 +146,41 @@ export class ResourceStore {
133
146
  if (prior) {
134
147
  if (prior.requestDigest !== requestDigest)
135
148
  throw idempotencyConflict();
149
+ const pending = this.uploads.get(uploadId);
150
+ if (pending?.finalization)
151
+ this.discardUpload(pending);
136
152
  return ControlResource.parse(prior.result);
137
153
  }
138
154
  const upload = this.uploads.get(uploadId);
139
155
  if (!upload)
140
156
  throw resourceError(`no such upload: ${uploadId}`, 404, "upload_not_found");
157
+ if (upload.finalization) {
158
+ if (upload.finalization.key !== idempotencyKey ||
159
+ upload.finalization.requestDigest !== requestDigest)
160
+ throw idempotencyConflict();
161
+ return this.completeFinalization(upload);
162
+ }
141
163
  if (upload.status.state !== "uploaded")
142
164
  throw resourceError(`upload ${uploadId} is ${upload.status.state}`, 409, "upload_not_uploaded");
143
165
  const bytes = readFileSync(upload.partPath);
144
- if (sensitiveResourcePolicy.containsSensitiveContent(bytes.toString("utf8"))) {
166
+ if (bytes.length !== upload.status.expectedBytes)
167
+ throw resourceError("uploaded file no longer matches declared size", 409, "upload_size_mismatch");
168
+ if (upload.request.purpose !== "model" &&
169
+ sensitiveResourcePolicy.containsSensitiveContent(bytes.toString("utf8"))) {
145
170
  upload.status = { ...upload.status, state: "cancelled" };
146
171
  rmSync(upload.partPath, { force: true });
147
172
  this.persistUpload(upload);
148
173
  throw sensitiveResourceError();
149
174
  }
150
- const sha256 = `sha256:${createHash("sha256").update(bytes).digest("hex")}`;
175
+ const sha256 = digestOf(bytes);
151
176
  if (expectedSha256 !== undefined && expectedSha256 !== sha256)
152
177
  throw resourceError("uploaded byte digest does not match expectedSha256", 409, "digest_mismatch");
153
178
  const blobPath = join(this.blobsDir, sha256.slice("sha256:".length));
154
179
  const deduplicated = existsSync(blobPath);
155
- if (deduplicated)
156
- rmSync(upload.partPath, { force: true });
157
- else
158
- renameSync(upload.partPath, blobPath);
159
180
  const resourceId = newId("res");
160
181
  const resource = ControlResource.parse({
161
182
  resourceId,
183
+ ...(upload.request.purpose ? { purpose: upload.request.purpose } : {}),
162
184
  kind: upload.request.kind,
163
185
  mime: upload.request.mime,
164
186
  name: upload.request.name,
@@ -167,35 +189,25 @@ export class ResourceStore {
167
189
  createdAt: new Date().toISOString(),
168
190
  deduplicated,
169
191
  });
170
- atomicJson(join(this.resourcesDir, `${resourceId}.json`), resource);
171
- this.uploads.delete(uploadId);
172
- rmSync(join(this.uploadsDir, `${uploadId}.json`), { force: true });
173
- this.finalizeIdempotency.set(idempotencyKey, { requestDigest, result: resource });
174
- this.persistIdempotency({
192
+ upload.finalization = {
175
193
  operation: "finalize",
176
194
  key: idempotencyKey,
177
195
  requestDigest,
178
196
  result: resource,
179
- });
180
- return resource;
197
+ };
198
+ return this.completeFinalization(upload);
181
199
  }
182
200
  resolve(refs) {
183
201
  return (refs ?? []).map(({ resourceId }) => {
184
- const metaPath = join(this.resourcesDir, `${resourceId}.json`);
185
- if (!existsSync(metaPath))
186
- throw resourceError(`no such resource: ${resourceId}`, 404, "resource_not_found");
187
- const resource = ControlResource.parse(JSON.parse(readFileSync(metaPath, "utf8")));
188
- const path = join(this.blobsDir, resource.sha256.slice("sha256:".length));
189
- if (!existsSync(path))
190
- throw resourceError(`resource blob is unavailable: ${resourceId}`, 409, "resource_unavailable");
191
- const bytes = readFileSync(path);
202
+ const resource = this.metadata(resourceId);
203
+ if (resource.purpose === "model")
204
+ throw purposeMismatch();
205
+ const path = this.blobPath(resource.sha256);
206
+ const bytes = this.verifiedBytes(resource, path);
192
207
  if (sensitiveResourcePolicy.classifyPath(resource.name).sensitive ||
193
208
  sensitiveResourcePolicy.containsSensitiveContent(bytes.toString("utf8"))) {
194
209
  throw sensitiveResourceError();
195
210
  }
196
- const digest = `sha256:${createHash("sha256").update(bytes).digest("hex")}`;
197
- if (bytes.length !== resource.sizeBytes || digest !== resource.sha256)
198
- throw resourceError(`resource blob no longer matches finalized bytes: ${resourceId}`, 409, "resource_digest_mismatch");
199
211
  return Attachment.parse({
200
212
  resource_id: resource.resourceId,
201
213
  kind: resource.kind,
@@ -207,10 +219,150 @@ export class ResourceStore {
207
219
  });
208
220
  });
209
221
  }
222
+ /** Exact model bytes only; never a text/artifact projection or secret scanner. */
223
+ readModel(raw) {
224
+ const ref = ModelPayloadRef.parse(raw);
225
+ const resource = this.metadata(ref.resourceId);
226
+ this.assertModelRef(resource, ref);
227
+ return this.verifiedBytes(resource, this.blobPath(resource.sha256));
228
+ }
229
+ /** Publish a daemon-produced result through the same durable finalize owner. */
230
+ publishModel(bytes) {
231
+ const status = this.create({
232
+ purpose: "model",
233
+ kind: "file",
234
+ mime: "application/json",
235
+ name: "model-result.json",
236
+ sizeBytes: bytes.byteLength,
237
+ }, newId("model-create"));
238
+ const upload = this.uploads.get(status.uploadId);
239
+ try {
240
+ const fd = openSync(upload.partPath, "r+");
241
+ try {
242
+ writeFileSync(fd, bytes);
243
+ fsyncSync(fd);
244
+ }
245
+ finally {
246
+ closeSync(fd);
247
+ }
248
+ upload.status = { ...upload.status, state: "uploaded", receivedBytes: bytes.byteLength };
249
+ this.persistUpload(upload);
250
+ return payloadRef(this.finalize(status.uploadId, digestOf(bytes), newId("model-finalize")));
251
+ }
252
+ catch (error) {
253
+ // An unpublished partial result has no caller-visible ref to release.
254
+ // A begun finalization retains its binding for ordinary restart recovery.
255
+ if (!upload.finalization)
256
+ this.discardUpload(upload);
257
+ throw error;
258
+ }
259
+ }
260
+ /** Caller owns command-reference checks. This removes only this resource;
261
+ * a blob shared with another resource or pending finalize remains owned. */
262
+ releaseModel(raw) {
263
+ const ref = ModelPayloadRef.parse(raw);
264
+ const metaPath = this.resourcePath(ref.resourceId);
265
+ if (!existsSync(metaPath))
266
+ return;
267
+ const resource = this.metadata(ref.resourceId);
268
+ this.assertModelRef(resource, ref);
269
+ const referenced = readdirSync(this.resourcesDir).some((name) => {
270
+ if (!name.endsWith(".json") || name === `${ref.resourceId}.json`)
271
+ return false;
272
+ return this.metadata(name.slice(0, -5)).sha256 === ref.sha256;
273
+ }) ||
274
+ [...this.uploads.values()].some((upload) => upload.finalization?.result.sha256 === ref.sha256);
275
+ // Unlink bytes before metadata: a failed cleanup retains its exact retry target.
276
+ if (!referenced) {
277
+ rmSync(this.blobPath(ref.sha256), { force: true });
278
+ fsyncDirectory(this.blobsDir);
279
+ }
280
+ rmSync(metaPath, { force: true });
281
+ fsyncDirectory(this.resourcesDir);
282
+ }
283
+ listModelResources() {
284
+ return readdirSync(this.resourcesDir)
285
+ .filter((name) => name.endsWith(".json"))
286
+ .map((name) => this.metadata(name.slice(0, -5)))
287
+ .filter((resource) => resource.purpose === "model")
288
+ .map((resource) => ({ ...payloadRef(resource), createdAt: resource.createdAt }));
289
+ }
290
+ assertModelRef(resource, ref) {
291
+ if (resource.purpose !== "model")
292
+ throw purposeMismatch();
293
+ if (resource.sha256 !== ref.sha256 || resource.sizeBytes !== ref.sizeBytes)
294
+ throw resourceError("model resource reference does not match finalized bytes", 409, "resource_digest_mismatch");
295
+ }
296
+ resourcePath(resourceId) {
297
+ if (!/^[a-zA-Z0-9_-]+$/.test(resourceId))
298
+ throw resourceError("invalid resource id", 400, "invalid_resource_id");
299
+ return join(this.resourcesDir, `${resourceId}.json`);
300
+ }
301
+ blobPath(sha256) {
302
+ if (!/^sha256:[a-f0-9]{64}$/.test(sha256))
303
+ throw resourceError("invalid resource digest", 409, "resource_digest_mismatch");
304
+ return join(this.blobsDir, sha256.slice("sha256:".length));
305
+ }
306
+ metadata(resourceId) {
307
+ const path = this.resourcePath(resourceId);
308
+ if (!existsSync(path))
309
+ throw resourceError(`no such resource: ${resourceId}`, 404, "resource_not_found");
310
+ const resource = ControlResource.parse(JSON.parse(readFileSync(path, "utf8")));
311
+ if (resource.resourceId !== resourceId)
312
+ throw resourceError("resource identity mismatch", 409, "resource_digest_mismatch");
313
+ return resource;
314
+ }
315
+ verifiedBytes(resource, path) {
316
+ if (!existsSync(path))
317
+ throw resourceError("resource blob is unavailable", 409, "resource_unavailable");
318
+ const bytes = readFileSync(path);
319
+ if (bytes.length !== resource.sizeBytes || digestOf(bytes) !== resource.sha256)
320
+ throw resourceError("resource blob no longer matches finalized bytes", 409, "resource_digest_mismatch");
321
+ return bytes;
322
+ }
323
+ completeFinalization(upload) {
324
+ const binding = upload.finalization;
325
+ const resource = binding.result;
326
+ const prior = this.finalizeIdempotency.get(binding.key);
327
+ if (prior) {
328
+ if (prior.requestDigest !== binding.requestDigest)
329
+ throw idempotencyConflict();
330
+ // Publication already committed. Only clean debris; an ACK may since
331
+ // have released this resource and replay must never resurrect its bytes.
332
+ this.discardUpload(upload);
333
+ return ControlResource.parse(prior.result);
334
+ }
335
+ // Re-persist even on same-process retry: the earlier metadata write may have failed.
336
+ this.persistUpload(upload);
337
+ const blobPath = this.blobPath(resource.sha256);
338
+ const bytes = this.verifiedBytes(resource, existsSync(blobPath) ? blobPath : upload.partPath);
339
+ if (resource.purpose !== "model" &&
340
+ sensitiveResourcePolicy.containsSensitiveContent(bytes.toString("utf8")))
341
+ throw sensitiveResourceError();
342
+ if (!existsSync(blobPath))
343
+ renameSync(upload.partPath, blobPath);
344
+ fsyncDirectory(this.blobsDir);
345
+ fsyncDirectory(this.uploadsDir);
346
+ atomicJson(this.resourcePath(resource.resourceId), resource);
347
+ this.persistIdempotency(binding);
348
+ this.finalizeIdempotency.set(binding.key, {
349
+ requestDigest: binding.requestDigest,
350
+ result: resource,
351
+ });
352
+ this.discardUpload(upload);
353
+ return ControlResource.parse(resource);
354
+ }
355
+ discardUpload(upload) {
356
+ rmSync(upload.partPath, { force: true });
357
+ rmSync(join(this.uploadsDir, `${upload.status.uploadId}.json`), { force: true });
358
+ fsyncDirectory(this.uploadsDir);
359
+ this.uploads.delete(upload.status.uploadId);
360
+ }
210
361
  persistUpload(upload) {
211
362
  atomicJson(join(this.uploadsDir, `${upload.status.uploadId}.json`), {
212
363
  request: upload.request,
213
364
  status: upload.status,
365
+ ...(upload.finalization ? { finalization: upload.finalization } : {}),
214
366
  });
215
367
  }
216
368
  persistIdempotency(record) {
@@ -225,13 +377,27 @@ export class ResourceStore {
225
377
  const raw = JSON.parse(readFileSync(join(this.uploadsDir, name), "utf8"));
226
378
  const request = ControlUploadCreateRequest.parse(raw.request);
227
379
  let status = ControlUploadStatus.parse(raw.status);
380
+ if (!/^[a-zA-Z0-9_-]+$/.test(status.uploadId) || name !== `${status.uploadId}.json`)
381
+ continue;
228
382
  const partPath = join(this.uploadsDir, `${status.uploadId}.part`);
229
383
  if (status.state === "uploading") {
230
384
  status = { ...status, state: "open", receivedBytes: 0 };
231
385
  }
232
- if (status.state !== "cancelled" && !existsSync(partPath))
386
+ const finalization = raw.finalization
387
+ ? {
388
+ ...raw.finalization,
389
+ result: ControlResource.parse(raw.finalization.result),
390
+ }
391
+ : undefined;
392
+ if (finalization &&
393
+ (finalization.operation !== "finalize" ||
394
+ typeof finalization.key !== "string" ||
395
+ typeof finalization.requestDigest !== "string" ||
396
+ finalization.result.purpose !== request.purpose))
233
397
  continue;
234
- const upload = { request, status, partPath };
398
+ if (status.state !== "cancelled" && !existsSync(partPath) && !finalization)
399
+ continue;
400
+ const upload = { request, status, partPath, finalization };
235
401
  this.uploads.set(status.uploadId, upload);
236
402
  this.persistUpload(upload);
237
403
  }
@@ -263,8 +429,32 @@ export class ResourceStore {
263
429
  // Fail closed on the individual binding: it cannot be used to claim a replay match.
264
430
  }
265
431
  }
432
+ for (const upload of this.uploads.values()) {
433
+ if (!upload.finalization)
434
+ continue;
435
+ try {
436
+ this.completeFinalization(upload);
437
+ }
438
+ catch {
439
+ // Keep the binding for an exact finalize retry to report its failure;
440
+ // one damaged resource must not prevent unrelated resources loading.
441
+ }
442
+ }
266
443
  }
267
444
  }
445
+ function digestOf(bytes) {
446
+ return `sha256:${createHash("sha256").update(bytes).digest("hex")}`;
447
+ }
448
+ function payloadRef(resource) {
449
+ return ModelPayloadRef.parse({
450
+ resourceId: resource.resourceId,
451
+ sha256: resource.sha256,
452
+ sizeBytes: resource.sizeBytes,
453
+ });
454
+ }
455
+ function purposeMismatch() {
456
+ return resourceError("resource purpose does not match this operation", 409, "resource_purpose_mismatch");
457
+ }
268
458
  function idempotencyConflict() {
269
459
  return resourceError("idempotency key was already used with a different request", 409, "idempotency_conflict");
270
460
  }
@@ -1 +1 @@
1
- {"version":3,"file":"resource-store.js","sourceRoot":"","sources":["../src/resource-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resource-store.js","sourceRoot":"","sources":["../src/resource-store.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ import { type RunEvent as RunEventValue } from "@claudexor/schema";
3
3
  /** Writes typed run events into their owning global/project journal partition. */
4
4
  export declare class RunEventStore {
5
5
  private readonly journal;
6
- constructor(journal: DurableJournal);
6
+ constructor(journal: DurableJournal, validateOnCreate?: boolean);
7
7
  record(value: RunEventValue): RunEventValue;
8
8
  validateProjection(): void;
9
9
  }
@@ -1 +1 @@
1
- {"version":3,"file":"run-events.d.ts","sourceRoot":"","sources":["../src/run-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAY,KAAK,QAAQ,IAAI,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAI7E,kFAAkF;AAClF,qBAAa,aAAa;IACZ,OAAO,CAAC,QAAQ,CAAC,OAAO;IAApC,YAA6B,OAAO,EAAE,cAAc,EAEnD;IAED,MAAM,CAAC,KAAK,EAAE,aAAa,GAAG,aAAa,CAI1C;IAED,kBAAkB,IAAI,IAAI,CAIzB;CACF;AAED,wBAAgB,kBAAkB;IAE9B,IAAI;IACJ,MAAM,YAAY,cAAc;IAChC,QAAQ,UAAU,aAAa;EAElC"}
1
+ {"version":3,"file":"run-events.d.ts","sourceRoot":"","sources":["../src/run-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAY,KAAK,QAAQ,IAAI,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAI7E,kFAAkF;AAClF,qBAAa,aAAa;IAEtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAD1B,YACmB,OAAO,EAAE,cAAc,EACxC,gBAAgB,UAAO,EAGxB;IAED,MAAM,CAAC,KAAK,EAAE,aAAa,GAAG,aAAa,CAI1C;IAED,kBAAkB,IAAI,IAAI,CAIzB;CACF;AAED,wBAAgB,kBAAkB;IAE9B,IAAI;IAEJ,MAAM,YAAY,cAAc;IAChC,QAAQ,UAAU,aAAa;EAElC"}
@@ -3,9 +3,10 @@ const RECORDED = "run.event";
3
3
  /** Writes typed run events into their owning global/project journal partition. */
4
4
  export class RunEventStore {
5
5
  journal;
6
- constructor(journal) {
6
+ constructor(journal, validateOnCreate = true) {
7
7
  this.journal = journal;
8
- this.validateProjection();
8
+ if (validateOnCreate)
9
+ this.validateProjection();
9
10
  }
10
11
  record(value) {
11
12
  const event = RunEvent.parse(value);
@@ -13,7 +14,7 @@ export class RunEventStore {
13
14
  return event;
14
15
  }
15
16
  validateProjection() {
16
- for (const entry of this.journal.records()) {
17
+ for (const entry of this.journal.records(0, [RECORDED])) {
17
18
  if (entry.type === RECORDED)
18
19
  RunEvent.parse(entry.payload);
19
20
  }
@@ -22,7 +23,8 @@ export class RunEventStore {
22
23
  export function runEventProjection() {
23
24
  return {
24
25
  name: "run-events",
25
- create: (journal) => new RunEventStore(journal),
26
+ // JournalManager always validates the created projection before binding it.
27
+ create: (journal) => new RunEventStore(journal, false),
26
28
  validate: (store) => store.validateProjection(),
27
29
  };
28
30
  }
@@ -1 +1 @@
1
- {"version":3,"file":"run-events.js","sourceRoot":"","sources":["../src/run-events.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAkC,MAAM,mBAAmB,CAAC;AAE7E,MAAM,QAAQ,GAAG,WAAW,CAAC;AAE7B,kFAAkF;AAClF,MAAM,OAAO,aAAa;IACK,OAAO;IAApC,YAA6B,OAAuB;uBAAvB,OAAO;QAClC,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,KAAoB;QACzB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACrC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,kBAAkB;QAChB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YAC3C,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;gBAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;CACF;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,CAAC,OAAuB,EAAE,EAAE,CAAC,IAAI,aAAa,CAAC,OAAO,CAAC;QAC/D,QAAQ,EAAE,CAAC,KAAoB,EAAE,EAAE,CAAC,KAAK,CAAC,kBAAkB,EAAE;KAC/D,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"run-events.js","sourceRoot":"","sources":["../src/run-events.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAkC,MAAM,mBAAmB,CAAC;AAE7E,MAAM,QAAQ,GAAG,WAAW,CAAC;AAE7B,kFAAkF;AAClF,MAAM,OAAO,aAAa;IAEL,OAAO;IAD1B,YACmB,OAAuB,EACxC,gBAAgB,GAAG,IAAI;uBADN,OAAO;QAGxB,IAAI,gBAAgB;YAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAClD,CAAC;IAED,MAAM,CAAC,KAAoB;QACzB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACrC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,kBAAkB;QAChB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YACxD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;gBAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;CACF;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,4EAA4E;QAC5E,MAAM,EAAE,CAAC,OAAuB,EAAE,EAAE,CAAC,IAAI,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC;QACtE,QAAQ,EAAE,CAAC,KAAoB,EAAE,EAAE,CAAC,KAAK,CAAC,kBAAkB,EAAE;KAC/D,CAAC;AACJ,CAAC"}
package/dist/server.d.ts CHANGED
@@ -31,6 +31,8 @@ export interface DaemonOptions extends RuntimeReplacementAuthority {
31
31
  * used to drop pending interactions so a dead run never advertises
32
32
  * waiting_on_user. */
33
33
  onRunTerminal?: (runId: string, threadId?: string) => void;
34
+ /** Best-effort observer after a durable terminal; it must not throw. */
35
+ onCommandTerminal?: (record: JobRecord) => void;
34
36
  /** Called when a job that carried a pre-created thread turn (params.turnId)
35
37
  * settles failure-shaped WITHOUT ever binding a run — i.e. the refusal
36
38
  * happened before the run materialized (trust gate, preflight validation).
@@ -82,13 +84,6 @@ export declare class DaemonServer {
82
84
  private stoppingError;
83
85
  private pruneHistory;
84
86
  private acceptCommand;
85
- /**
86
- * Atomic daemon-side admission for belt children. Every belt process has its
87
- * own local ledger, so the durable daemon journal is the only place that can
88
- * enforce the max-eight count across retries/attempts/processes. Ordinary
89
- * parentRunId lineage never enters this rule.
90
- */
91
- private admitDelegatedRequest;
92
87
  private allRecords;
93
88
  private getRecord;
94
89
  private updateRecord;
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/dist/server.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { createServer } from "node:net";
2
- import { ControlRunStartRequest, resolveRunReviewRequested, normalizeCancelReasonCode, } from "@claudexor/schema";
2
+ import { ControlRunStartRequest, resolveRunReviewRequested, normalizeCancelReasonCode, isTerminalLifecycle, } from "@claudexor/schema";
3
3
  import { RpcFollowers } from "./rpc-followers.js";
4
4
  import { assertNoInlineSecretValues, errorCode, newId, nowIso, pathExists, redactSecrets, } from "@claudexor/util";
5
5
  import { commandStoreForId, commandStoreForRequest, commandStores, } from "./command-authority.js";
@@ -235,7 +235,9 @@ export class DaemonServer {
235
235
  const replay = findAcceptedCommand(this.opts.commands, envelope);
236
236
  if (replay)
237
237
  return commandAcceptanceReceipt(replay, true);
238
- const request = this.admitDelegatedRequest(rawRequest, operation);
238
+ // Journal-owned belt admission spans retries/processes; ordinary
239
+ // parentRunId alone never establishes delegated lineage.
240
+ const request = admitDelegatedRequest(rawRequest, operation, this.allRecords(), this.opts.delegationAuthority);
239
241
  const delegatedFrom = delegatedParentOf(request);
240
242
  const accepted = this.acceptCommand(request, idempotencyKey, clientId, envelope.idempotencyRequest, operation);
241
243
  if (!accepted.reused && delegatedFrom) {
@@ -333,15 +335,6 @@ export class DaemonServer {
333
335
  operation,
334
336
  });
335
337
  }
336
- /**
337
- * Atomic daemon-side admission for belt children. Every belt process has its
338
- * own local ledger, so the durable daemon journal is the only place that can
339
- * enforce the max-eight count across retries/attempts/processes. Ordinary
340
- * parentRunId lineage never enters this rule.
341
- */
342
- admitDelegatedRequest(request, operation) {
343
- return admitDelegatedRequest(request, operation, this.allRecords(), this.opts.delegationAuthority);
344
- }
345
338
  allRecords() {
346
339
  return commandStores(this.opts.commands).flatMap((store) => store.records());
347
340
  }
@@ -352,7 +345,11 @@ export class DaemonServer {
352
345
  const store = commandStoreForId(this.opts.commands, record.id);
353
346
  if (!store)
354
347
  throw new Error(`command authority lost job ${record.id}`);
355
- return store.update(record.id, patch);
348
+ const next = store.update(record.id, patch);
349
+ if (isTerminalLifecycle(next.state) && !isTerminalLifecycle(record.state)) {
350
+ this.opts.onCommandTerminal?.(next);
351
+ }
352
+ return next;
356
353
  }
357
354
  threadIdOf(rec) {
358
355
  const p = rec.params;