@claudexor/daemon 3.9.7 → 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.
- package/dist/command-retention.d.ts.map +1 -1
- package/dist/command-retention.js +6 -2
- package/dist/command-retention.js.map +1 -1
- package/dist/command-store.js +2 -2
- package/dist/command-store.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/interactions.js +1 -1
- package/dist/interactions.js.map +1 -1
- package/dist/model-operations.d.ts +72 -0
- package/dist/model-operations.d.ts.map +1 -0
- package/dist/model-operations.js +383 -0
- package/dist/model-operations.js.map +1 -0
- package/dist/operator-decisions.js +1 -1
- package/dist/operator-decisions.js.map +1 -1
- package/dist/resource-store.d.ts +18 -1
- package/dist/resource-store.d.ts.map +1 -1
- package/dist/resource-store.js +232 -42
- package/dist/resource-store.js.map +1 -1
- package/dist/run-events.d.ts +1 -1
- package/dist/run-events.d.ts.map +1 -1
- package/dist/run-events.js +6 -4
- package/dist/run-events.js.map +1 -1
- package/dist/server.d.ts +2 -7
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +16 -14
- package/dist/server.js.map +1 -1
- package/dist/terminal-authority.d.ts +1 -0
- package/dist/terminal-authority.d.ts.map +1 -1
- package/dist/threads.js +1 -1
- package/dist/threads.js.map +1 -1
- package/package.json +5 -5
package/dist/resource-store.js
CHANGED
|
@@ -1,24 +1,30 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
|
-
import { closeSync, existsSync, fsyncSync, ftruncateSync, mkdirSync, openSync, readFileSync, readdirSync, renameSync, rmSync, writeFileSync,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 (
|
|
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 =
|
|
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
|
-
|
|
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
|
|
197
|
+
};
|
|
198
|
+
return this.completeFinalization(upload);
|
|
181
199
|
}
|
|
182
200
|
resolve(refs) {
|
|
183
201
|
return (refs ?? []).map(({ resourceId }) => {
|
|
184
|
-
const
|
|
185
|
-
if (
|
|
186
|
-
throw
|
|
187
|
-
const
|
|
188
|
-
const
|
|
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
|
-
|
|
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
|
-
|
|
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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"}
|
package/dist/run-events.d.ts
CHANGED
|
@@ -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
|
}
|
package/dist/run-events.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/run-events.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
}
|
package/dist/run-events.js.map
CHANGED
|
@@ -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;
|
|
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;
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,gBAAgB,EACtB,MAAM,mBAAmB,CAAC;AAU3B,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,wBAAwB,CAAC;AAQhC,OAAO,EAIL,KAAK,4BAA4B,EAClC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,UAAU,EACV,kBAAkB,EAIlB,KAAK,SAAS,EACf,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAIL,KAAK,yBAAyB,EAC/B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAGL,KAAK,2BAA2B,EACjC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAEL,KAAK,kBAAkB,IAAI,uBAAuB,EACnD,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,WAAW,EAAE,KAAK,SAAS,EAAE,CAAC;AAEvE,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CAC/E;AAED,MAAM,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAE9E,MAAM,WAAW,aAAc,SAAQ,2BAA2B;IAChE,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,QAAQ,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,mBAAmB,CAAC,EAAE,4BAA4B,CAAC;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB;;0BAEsB;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D,wEAAwE;IACxE,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,IAAI,CAAC;IAChD;;;;wEAIoE;IACpE,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,KAAK,IAAI,CAAC;IACjF,mBAAmB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,6BAA6B,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,8EAA8E;IAC9E,WAAW,CAAC,EAAE,yBAAyB,CAAC;IACxC,+DAA+D;IAC/D,cAAc,CAAC,EAAE,CACf,OAAO,EAAE,sBAAsB,GAAG,qBAAqB,KACpD,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAKD,8EAA8E;AAC9E,qBAAa,YAAY;IAkBX,OAAO,CAAC,QAAQ,CAAC,IAAI;IAjBjC,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsB;IAChD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAC/C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsC;IAClE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA4B;IACxD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAiB;IAC9C,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;IACxC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,YAAY,CAAC,CAAgB;IACrC,OAAO,CAAC,WAAW,CAAC,CAAgB;IACpC,OAAO,CAAC,eAAe,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAE7B;IAEH,YAA6B,IAAI,EAAE,aAAa,EAAI;IAE9C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAgB3B;YAEa,SAAS;IA2BvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAIpB;YAEa,QAAQ;IAwDtB,qDAAqD;IACrD,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAE/B;IAED,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,IAAI;YAIE,MAAM;YAsCN,QAAQ;IAkHtB,OAAO,KAAK,aAAa,GAExB;IAED;+EAC2E;IAC3E,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,gBAAgB,GAAG;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,IAAI,CAAA;KAAE,CAerF;IAED,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,aAAa;IAwBrB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,UAAU;IAKlB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,KAAK;YAqDC,MAAM;CA2ErB"}
|
package/dist/server.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createServer } from "node:net";
|
|
2
|
-
import { 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
|
-
|
|
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) {
|
|
@@ -319,24 +321,20 @@ export class DaemonServer {
|
|
|
319
321
|
}
|
|
320
322
|
acceptCommand(params, idempotencyKey, clientId, idempotencyParams, operation) {
|
|
321
323
|
const store = commandStoreForRequest(this.opts.commands, params);
|
|
324
|
+
const parsed = ControlRunStartRequest.safeParse(params);
|
|
325
|
+
const acceptedParams = parsed.success && parsed.data.mode === "agent"
|
|
326
|
+
? { ...params, review: resolveRunReviewRequested(parsed.data) }
|
|
327
|
+
: params;
|
|
322
328
|
return store.accept({
|
|
323
329
|
id: newId("job"),
|
|
324
|
-
params,
|
|
330
|
+
params: acceptedParams,
|
|
325
331
|
idempotencyKey,
|
|
326
332
|
clientId,
|
|
327
|
-
|
|
333
|
+
// Resolved defaults belong to accepted execution, never the wire digest.
|
|
334
|
+
idempotencyParams: idempotencyParams ?? params,
|
|
328
335
|
operation,
|
|
329
336
|
});
|
|
330
337
|
}
|
|
331
|
-
/**
|
|
332
|
-
* Atomic daemon-side admission for belt children. Every belt process has its
|
|
333
|
-
* own local ledger, so the durable daemon journal is the only place that can
|
|
334
|
-
* enforce the max-eight count across retries/attempts/processes. Ordinary
|
|
335
|
-
* parentRunId lineage never enters this rule.
|
|
336
|
-
*/
|
|
337
|
-
admitDelegatedRequest(request, operation) {
|
|
338
|
-
return admitDelegatedRequest(request, operation, this.allRecords(), this.opts.delegationAuthority);
|
|
339
|
-
}
|
|
340
338
|
allRecords() {
|
|
341
339
|
return commandStores(this.opts.commands).flatMap((store) => store.records());
|
|
342
340
|
}
|
|
@@ -347,7 +345,11 @@ export class DaemonServer {
|
|
|
347
345
|
const store = commandStoreForId(this.opts.commands, record.id);
|
|
348
346
|
if (!store)
|
|
349
347
|
throw new Error(`command authority lost job ${record.id}`);
|
|
350
|
-
|
|
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;
|
|
351
353
|
}
|
|
352
354
|
threadIdOf(rec) {
|
|
353
355
|
const p = rec.params;
|