@exla/rudder 4.0.0-alpha.2 → 4.0.0-alpha.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/brain.d.ts +7 -5
  2. package/dist/brain.js +32 -22
  3. package/dist/brain.js.map +1 -1
  4. package/dist/claude-sdk-protocol.d.ts +125 -0
  5. package/dist/claude-sdk-protocol.js +491 -0
  6. package/dist/claude-sdk-protocol.js.map +1 -0
  7. package/dist/claude-sdk.d.ts +28 -0
  8. package/dist/claude-sdk.js +425 -0
  9. package/dist/claude-sdk.js.map +1 -0
  10. package/dist/context-audit.js +1 -1
  11. package/dist/context-audit.js.map +1 -1
  12. package/dist/daemon.js +3 -0
  13. package/dist/daemon.js.map +1 -1
  14. package/dist/engine-authority.d.ts +5 -0
  15. package/dist/engine-authority.js +34 -0
  16. package/dist/engine-authority.js.map +1 -0
  17. package/dist/engine.d.ts +33 -0
  18. package/dist/engine.js +154 -0
  19. package/dist/engine.js.map +1 -0
  20. package/dist/fabric-local.d.ts +50 -0
  21. package/dist/fabric-local.js +339 -0
  22. package/dist/fabric-local.js.map +1 -0
  23. package/dist/fabric-remote.d.ts +92 -0
  24. package/dist/fabric-remote.js +402 -0
  25. package/dist/fabric-remote.js.map +1 -0
  26. package/dist/main.js +27 -1
  27. package/dist/main.js.map +1 -1
  28. package/dist/native/darwin-arm64/rudder-native +0 -0
  29. package/dist/native/darwin-x64/rudder-native +0 -0
  30. package/dist/native/linux-x64/rudder-native +0 -0
  31. package/dist/planner.js +1 -1
  32. package/dist/planner.js.map +1 -1
  33. package/dist/run-manager.js +11 -1
  34. package/dist/run-manager.js.map +1 -1
  35. package/dist/scheduler.js +3 -0
  36. package/dist/scheduler.js.map +1 -1
  37. package/dist/surfaces.d.ts +1 -1
  38. package/dist/surfaces.js +6 -7
  39. package/dist/surfaces.js.map +1 -1
  40. package/dist/types.d.ts +3 -0
  41. package/package.json +2 -1
@@ -0,0 +1,92 @@
1
+ export type FabricObjectKind = "blob" | "directory" | "source_root" | "environment_root" | "checkpoint" | "action_key" | "action_result";
2
+ export interface FabricObjectRef {
3
+ kind: FabricObjectKind;
4
+ algorithm: "sha256";
5
+ digest: string;
6
+ size_bytes: number;
7
+ }
8
+ export interface FabricLease {
9
+ format_version: 1;
10
+ lease_id: string;
11
+ expires_at_ms: number;
12
+ }
13
+ export interface FabricRootReceipt {
14
+ format_version: 1;
15
+ root_id: string;
16
+ root: FabricObjectRef;
17
+ durability: "replicated";
18
+ published_at_ms: number;
19
+ object_count: number;
20
+ total_bytes: number;
21
+ }
22
+ export interface FabricTransferSource {
23
+ pin(root: FabricObjectRef): Promise<string>;
24
+ unpin(ownedPinId: string): Promise<void>;
25
+ closure(root: FabricObjectRef): Promise<FabricObjectRef[]>;
26
+ read(reference: FabricObjectRef): Promise<Uint8Array>;
27
+ }
28
+ export interface FabricTransferResult {
29
+ receipt: FabricRootReceipt;
30
+ uploaded_objects: number;
31
+ uploaded_bytes: number;
32
+ cleanup_warning?: string;
33
+ }
34
+ export interface FabricLocalReceipt {
35
+ format_version: 1;
36
+ root: FabricObjectRef;
37
+ pin: string;
38
+ generation: number;
39
+ durability: "local";
40
+ }
41
+ export interface FabricTransferTarget {
42
+ beginStaging(ttlMs: number): Promise<FabricLease>;
43
+ renewStaging(leaseId: string, ttlMs: number): Promise<FabricLease>;
44
+ /** Must verify raw checksum, canonical typed schema, and the live lease. */
45
+ receive(leaseId: string, object: FabricObjectRef, bytes: Uint8Array): Promise<FabricObjectRef[]>;
46
+ /** Verify/sync the full reachable closure and atomically retain its root. */
47
+ publish(leaseId: string, pin: string, root: FabricObjectRef): Promise<FabricLocalReceipt>;
48
+ abandonStaging(leaseId: string): Promise<void>;
49
+ }
50
+ export interface FabricDownloadResult {
51
+ receipt: FabricRootReceipt;
52
+ local: FabricLocalReceipt;
53
+ downloaded_objects: number;
54
+ downloaded_bytes: number;
55
+ }
56
+ export declare class FabricRemoteError extends Error {
57
+ readonly code: string;
58
+ readonly status?: number | undefined;
59
+ constructor(code: string, message: string, status?: number | undefined);
60
+ }
61
+ export declare function validateFabricReference(value: unknown): FabricObjectRef;
62
+ export declare function verifyFabricObject(reference: FabricObjectRef, bytes: Uint8Array): void;
63
+ export declare class FabricRemoteClient {
64
+ private readonly options;
65
+ private readonly base;
66
+ private readonly concurrency;
67
+ private readonly requestTimeoutMs;
68
+ private readonly leaseTtlMs;
69
+ private readonly buffered;
70
+ constructor(options: {
71
+ /** Full authenticated endpoint base, ending /api/rudder/fabric. */
72
+ baseUrl: string;
73
+ authHeaders: () => Record<string, string> | Promise<Record<string, string>>;
74
+ fetch?: typeof globalThis.fetch;
75
+ concurrency?: number;
76
+ requestTimeoutMs?: number;
77
+ leaseTtlMs?: number;
78
+ });
79
+ private request;
80
+ private json;
81
+ beginStaging(): Promise<FabricLease>;
82
+ renewStaging(leaseId: string): Promise<FabricLease>;
83
+ missing(objects: FabricObjectRef[]): Promise<FabricObjectRef[]>;
84
+ putObject(leaseId: string, reference: FabricObjectRef, bytes: Uint8Array): Promise<void>;
85
+ getObject(reference: FabricObjectRef): Promise<Buffer>;
86
+ publishRoot(root: string, leaseId: string, object: FabricObjectRef): Promise<FabricRootReceipt>;
87
+ getRoot(root: string): Promise<FabricRootReceipt>;
88
+ uploadRoot(root: string, object: FabricObjectRef, source: FabricTransferSource): Promise<FabricTransferResult>;
89
+ downloadRoot(root: string, target: FabricTransferTarget, pin: string): Promise<FabricDownloadResult>;
90
+ }
91
+ /** Lazy loading keeps the native transport out of ordinary remote-client use. */
92
+ export declare function runFabricTransferCommand(args: string[], options?: import("./fabric-local.js").FabricTransferCommandOptions): Promise<void>;
@@ -0,0 +1,402 @@
1
+ /** Authenticated bounded CAS transfer. The source adapter must pin the root
2
+ * durably and return a NEW owned pin identifier, never a caller's existing pin.
3
+ * This client does not mount filesystems or run an agent during transfer.
4
+ */
5
+ import { createHash } from "node:crypto";
6
+ export class FabricRemoteError extends Error {
7
+ code;
8
+ status;
9
+ constructor(code, message, status) {
10
+ super(message);
11
+ this.code = code;
12
+ this.status = status;
13
+ this.name = "FabricRemoteError";
14
+ }
15
+ }
16
+ const fail = (code, message) => { throw new FabricRemoteError(code, message); };
17
+ const kinds = new Set(["blob", "directory", "source_root", "environment_root", "checkpoint", "action_key", "action_result"]);
18
+ const identity = (object) => `${object.kind}:${object.digest}:${object.size_bytes}`;
19
+ export function validateFabricReference(value) {
20
+ if (!value || typeof value !== "object" || Array.isArray(value))
21
+ fail("invalid_reference", "Invalid object reference");
22
+ const object = value;
23
+ if (Object.keys(object).length !== 4 || typeof object.kind !== "string" || !kinds.has(object.kind) || object.algorithm !== "sha256" || typeof object.digest !== "string" || !/^[a-f0-9]{64}$/.test(object.digest) || !Number.isSafeInteger(object.size_bytes) || Number(object.size_bytes) < 0 || Number(object.size_bytes) > 256 * 1024 * 1024 || (object.kind !== "blob" && Number(object.size_bytes) > 4 * 1024 * 1024))
24
+ fail("invalid_reference", "Invalid typed SHA-256 object reference");
25
+ return { kind: object.kind, algorithm: "sha256", digest: object.digest, size_bytes: object.size_bytes };
26
+ }
27
+ export function verifyFabricObject(reference, bytes) {
28
+ validateFabricReference(reference);
29
+ if (bytes.byteLength !== reference.size_bytes || createHash("sha256").update(bytes).digest("hex") !== reference.digest)
30
+ fail("checksum_mismatch", "Transferred object failed checksum verification");
31
+ }
32
+ function rootId(value) { if (typeof value !== "string" || !/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/.test(value))
33
+ fail("invalid_root_id", "Invalid root publication identifier"); return value; }
34
+ function lease(value) {
35
+ const item = value;
36
+ if (!item || Object.keys(item).length !== 3 || item.format_version !== 1 || typeof item.lease_id !== "string" || !/^[a-f0-9]{8}(?:-[a-f0-9]{4}){3}-[a-f0-9]{12}$/.test(item.lease_id) || !Number.isSafeInteger(item.expires_at_ms) || item.expires_at_ms <= 0)
37
+ fail("invalid_response", "Server returned an invalid staging lease");
38
+ return item;
39
+ }
40
+ function receipt(value, expectedId, expectedRoot) {
41
+ const item = value;
42
+ if (!item || Object.keys(item).length !== 7 || item.format_version !== 1 || item.root_id !== expectedId || item.durability !== "replicated" || !Number.isSafeInteger(item.published_at_ms) || item.published_at_ms < 0 || !Number.isSafeInteger(item.object_count) || item.object_count < 1 || item.object_count > 100_000 || !Number.isSafeInteger(item.total_bytes) || item.total_bytes < 0 || item.total_bytes > 4 * 1024 ** 3)
43
+ fail("invalid_response", "Server returned an invalid publication receipt");
44
+ const root = validateFabricReference(item.root);
45
+ if (expectedRoot && identity(root) !== identity(expectedRoot))
46
+ fail("invalid_response", "Publication receipt refers to another root");
47
+ return { ...item, root };
48
+ }
49
+ /** A single client cannot hold several large objects at once, even when the
50
+ * caller raises small-object concurrency. FIFO admission prevents starvation. */
51
+ class ByteBudget {
52
+ available = 256 * 1024 * 1024;
53
+ queue = [];
54
+ acquire(bytes) {
55
+ return new Promise((resolve) => { this.queue.push({ bytes: Math.max(1, bytes), resolve }); this.drain(); });
56
+ }
57
+ drain() {
58
+ while (this.queue.length && this.queue[0].bytes <= this.available) {
59
+ const item = this.queue.shift();
60
+ this.available -= item.bytes;
61
+ let released = false;
62
+ item.resolve(() => { if (!released) {
63
+ released = true;
64
+ this.available += item.bytes;
65
+ this.drain();
66
+ } });
67
+ }
68
+ }
69
+ }
70
+ export class FabricRemoteClient {
71
+ options;
72
+ base;
73
+ concurrency;
74
+ requestTimeoutMs;
75
+ leaseTtlMs;
76
+ buffered = new ByteBudget();
77
+ constructor(options) {
78
+ this.options = options;
79
+ this.base = new URL(options.baseUrl.endsWith("/") ? options.baseUrl : `${options.baseUrl}/`);
80
+ if (!["http:", "https:"].includes(this.base.protocol) || this.base.username || this.base.password || this.base.search || this.base.hash)
81
+ fail("invalid_endpoint", "Invalid fabric endpoint");
82
+ this.concurrency = options.concurrency ?? 1;
83
+ this.requestTimeoutMs = options.requestTimeoutMs ?? 120_000;
84
+ this.leaseTtlMs = options.leaseTtlMs ?? 300_000;
85
+ if (!Number.isInteger(this.concurrency) || this.concurrency < 1 || this.concurrency > 8 || !Number.isInteger(this.requestTimeoutMs) || this.requestTimeoutMs < 1 || this.requestTimeoutMs > 120_000 || !Number.isInteger(this.leaseTtlMs) || this.leaseTtlMs < 1000 || this.leaseTtlMs > 3_600_000)
86
+ fail("invalid_limits", "Invalid transfer concurrency or deadline");
87
+ }
88
+ async request(path, method, body, binary, headers = {}, maxResponseBytes = 2 * 1024 * 1024) {
89
+ const controller = new AbortController();
90
+ let timer;
91
+ const work = (async () => {
92
+ const authHeaders = await this.options.authHeaders();
93
+ if (controller.signal.aborted)
94
+ fail("request_timeout", "Fabric request exceeded its deadline");
95
+ const response = await (this.options.fetch ?? globalThis.fetch)(new URL(path, this.base), {
96
+ method, redirect: "error", signal: controller.signal,
97
+ headers: { ...authHeaders, ...(body !== undefined ? { "Content-Type": "application/json" } : binary ? { "Content-Type": "application/octet-stream" } : {}), ...headers },
98
+ body: binary ? Buffer.isBuffer(binary) ? binary : Buffer.from(binary.buffer, binary.byteOffset, binary.byteLength) : body !== undefined ? JSON.stringify(body) : undefined,
99
+ });
100
+ if (!response.ok) {
101
+ await response.body?.cancel().catch(() => { });
102
+ // Never echo response bodies, auth headers, bucket keys or request data.
103
+ throw new FabricRemoteError("remote_rejected", `Fabric request failed (HTTP ${response.status})`, response.status);
104
+ }
105
+ const length = response.headers.get("content-length");
106
+ if (length !== null && (!/^\d+$/.test(length) || Number(length) > maxResponseBytes)) {
107
+ await response.body?.cancel().catch(() => { });
108
+ fail("too_large", "Fabric response exceeds byte limit");
109
+ }
110
+ if (!response.body)
111
+ return Buffer.alloc(0);
112
+ const reader = response.body.getReader();
113
+ const chunks = [];
114
+ // Known lengths use one bounded destination; retaining chunks and then
115
+ // concatenating would briefly double a 200 MiB compiler response.
116
+ const destination = length === null ? undefined : Buffer.allocUnsafe(Number(length));
117
+ let bytes = 0;
118
+ try {
119
+ while (true) {
120
+ const part = await reader.read();
121
+ if (part.done)
122
+ break;
123
+ const start = bytes;
124
+ bytes += part.value.byteLength;
125
+ if (bytes > maxResponseBytes || (destination && bytes > destination.length))
126
+ fail("too_large", "Fabric response exceeds byte limit");
127
+ if (destination)
128
+ destination.set(part.value, start);
129
+ else
130
+ chunks.push(Buffer.from(part.value));
131
+ }
132
+ }
133
+ finally {
134
+ await reader.cancel().catch(() => { });
135
+ }
136
+ return destination ? destination.subarray(0, bytes) : Buffer.concat(chunks);
137
+ })();
138
+ try {
139
+ return await Promise.race([work, new Promise((_, reject) => { timer = setTimeout(() => { controller.abort(); reject(new FabricRemoteError("request_timeout", "Fabric request exceeded its deadline")); }, this.requestTimeoutMs); })]);
140
+ }
141
+ catch (failure) {
142
+ if (failure instanceof FabricRemoteError)
143
+ throw failure;
144
+ throw new FabricRemoteError("request_failed", "Fabric request failed");
145
+ }
146
+ finally {
147
+ if (timer)
148
+ clearTimeout(timer);
149
+ }
150
+ }
151
+ async json(path, method, body) {
152
+ const bytes = await this.request(path, method, body);
153
+ try {
154
+ return JSON.parse(bytes.toString("utf8"));
155
+ }
156
+ catch {
157
+ return fail("invalid_response", "Fabric returned invalid JSON");
158
+ }
159
+ }
160
+ async beginStaging() { return lease(await this.json("staging", "POST", { format_version: 1, ttl_ms: this.leaseTtlMs })); }
161
+ async renewStaging(leaseId) {
162
+ lease({ format_version: 1, lease_id: leaseId, expires_at_ms: 1 });
163
+ return lease(await this.json(`staging/${leaseId}/renew`, "POST", { format_version: 1, ttl_ms: this.leaseTtlMs }));
164
+ }
165
+ async missing(objects) {
166
+ if (objects.length > 256)
167
+ fail("too_large", "Missing-object request exceeds batch limit");
168
+ objects.forEach(validateFabricReference);
169
+ const reply = await this.json("missing", "POST", { format_version: 1, objects });
170
+ if (!reply || reply.format_version !== 1 || !Array.isArray(reply.missing) || reply.missing.length > objects.length)
171
+ fail("invalid_response", "Invalid missing-object response");
172
+ const allowed = new Set(objects.map(identity));
173
+ const seen = new Set();
174
+ return reply.missing.map((value) => { const reference = validateFabricReference(value); const key = identity(reference); if (!allowed.has(key) || seen.has(key))
175
+ fail("invalid_response", "Server requested an undeclared or duplicate object"); seen.add(key); return reference; });
176
+ }
177
+ async putObject(leaseId, reference, bytes) {
178
+ verifyFabricObject(reference, bytes);
179
+ lease({ format_version: 1, lease_id: leaseId, expires_at_ms: 1 });
180
+ await this.request(`objects/${reference.kind}/${reference.digest}/${reference.size_bytes}`, "PUT", undefined, bytes, { "X-Rudder-Staging-Lease": leaseId });
181
+ }
182
+ async getObject(reference) {
183
+ validateFabricReference(reference);
184
+ const bytes = await this.request(`objects/${reference.kind}/${reference.digest}/${reference.size_bytes}`, "GET", undefined, undefined, {}, reference.size_bytes);
185
+ verifyFabricObject(reference, bytes);
186
+ return bytes;
187
+ }
188
+ async publishRoot(root, leaseId, object) {
189
+ rootId(root);
190
+ validateFabricReference(object);
191
+ lease({ format_version: 1, lease_id: leaseId, expires_at_ms: 1 });
192
+ return receipt(await this.json(`roots/${encodeURIComponent(root)}`, "POST", { format_version: 1, lease_id: leaseId, root: object }), root, object);
193
+ }
194
+ async getRoot(root) {
195
+ rootId(root);
196
+ return receipt(await this.json(`roots/${encodeURIComponent(root)}`, "GET"), root);
197
+ }
198
+ async uploadRoot(root, object, source) {
199
+ rootId(root);
200
+ validateFabricReference(object);
201
+ let ownedPin;
202
+ try {
203
+ ownedPin = await source.pin(object);
204
+ }
205
+ catch {
206
+ return fail("source_failed", "Could not pin the local transfer source");
207
+ }
208
+ if (typeof ownedPin !== "string" || !ownedPin.trim())
209
+ fail("invalid_source", "Source did not return an owned retention pin");
210
+ let result;
211
+ let failure;
212
+ try {
213
+ const inventory = await source.closure(object);
214
+ if (!Array.isArray(inventory) || inventory.length > 100_000)
215
+ fail("too_large", "Source inventory exceeds object limit");
216
+ const unique = new Map();
217
+ let total = 0;
218
+ for (const value of inventory) {
219
+ const reference = validateFabricReference(value);
220
+ if (!unique.has(identity(reference))) {
221
+ unique.set(identity(reference), reference);
222
+ total += reference.size_bytes;
223
+ }
224
+ }
225
+ if (!unique.has(identity(object)) || total > 4 * 1024 ** 3)
226
+ fail("invalid_source", "Source inventory is incomplete or exceeds byte limit");
227
+ let staging = await this.beginStaging();
228
+ let renewal;
229
+ const ensureLease = async (force = false) => {
230
+ if (!force && staging.expires_at_ms > Date.now() + Math.max(70_000, this.leaseTtlMs / 3))
231
+ return;
232
+ renewal ??= this.renewStaging(staging.lease_id).then((updated) => { if (updated.lease_id !== staging.lease_id)
233
+ fail("invalid_response", "Lease renewal changed identity"); staging = updated; }).finally(() => { renewal = undefined; });
234
+ await renewal;
235
+ };
236
+ let uploaded = 0, uploadedBytes = 0;
237
+ const all = [...unique.values()];
238
+ for (let start = 0; start < all.length; start += 256) {
239
+ await ensureLease();
240
+ const missing = await this.missing(all.slice(start, start + 256));
241
+ let cursor = 0;
242
+ let workerFailure;
243
+ // Wait for EVERY worker before releasing the source pin on failure.
244
+ await Promise.all(Array.from({ length: Math.min(this.concurrency, missing.length) }, async () => {
245
+ while (cursor < missing.length && !workerFailure) {
246
+ const reference = missing[cursor++];
247
+ const release = await this.buffered.acquire(reference.size_bytes);
248
+ try {
249
+ await ensureLease();
250
+ const bytes = await source.read(reference);
251
+ verifyFabricObject(reference, bytes);
252
+ await ensureLease();
253
+ await this.putObject(staging.lease_id, reference, bytes);
254
+ uploaded++;
255
+ uploadedBytes += bytes.byteLength;
256
+ }
257
+ catch (error) {
258
+ workerFailure = error;
259
+ }
260
+ finally {
261
+ release();
262
+ }
263
+ }
264
+ }));
265
+ if (workerFailure)
266
+ throw workerFailure;
267
+ }
268
+ await ensureLease(true);
269
+ result = { receipt: await this.publishRoot(root, staging.lease_id, object), uploaded_objects: uploaded, uploaded_bytes: uploadedBytes };
270
+ }
271
+ catch (error) {
272
+ failure = error instanceof FabricRemoteError ? error : new FabricRemoteError("source_failed", "Pinned source transfer failed");
273
+ }
274
+ finally {
275
+ try {
276
+ await source.unpin(ownedPin);
277
+ }
278
+ catch {
279
+ if (result)
280
+ result.cleanup_warning = "Remote publication committed; its temporary local retention pin needs cleanup";
281
+ else
282
+ failure ??= new FabricRemoteError("source_cleanup_failed", "Temporary local retention pin needs cleanup");
283
+ }
284
+ }
285
+ if (failure)
286
+ throw failure;
287
+ return result;
288
+ }
289
+ async downloadRoot(root, target, pin) {
290
+ rootId(root);
291
+ if (typeof pin !== "string" || !pin.trim() || pin.length > 512 || /[\x00-\x1f\x7f]/.test(pin))
292
+ fail("invalid_pin", "A local retention pin is required");
293
+ const published = await this.getRoot(root);
294
+ let staging;
295
+ let committed = false;
296
+ try {
297
+ staging = lease(await target.beginStaging(this.leaseTtlMs));
298
+ let renewal;
299
+ const ensureLease = async (force = false) => {
300
+ if (!force && staging.expires_at_ms > Date.now() + Math.max(this.requestTimeoutMs + 5000, this.leaseTtlMs / 3))
301
+ return;
302
+ renewal ??= target.renewStaging(staging.lease_id, this.leaseTtlMs).then((value) => {
303
+ const updated = lease(value);
304
+ if (updated.lease_id !== staging.lease_id)
305
+ fail("invalid_target", "Local renewal changed lease identity");
306
+ staging = updated;
307
+ }).finally(() => { renewal = undefined; });
308
+ await renewal;
309
+ };
310
+ const queue = [];
311
+ const seen = new Set();
312
+ let total = 0, edges = 0, cursor = 0;
313
+ const add = (value, depth) => {
314
+ const object = validateFabricReference(value);
315
+ if (depth > 1024)
316
+ fail("too_large", "Downloaded closure exceeds depth limit");
317
+ if (seen.has(identity(object)))
318
+ return;
319
+ total += object.size_bytes;
320
+ seen.add(identity(object));
321
+ if (seen.size > 100_000 || total > 4 * 1024 ** 3)
322
+ fail("too_large", "Downloaded closure exceeds transfer limits");
323
+ queue.push({ object, depth });
324
+ };
325
+ add(published.root, 0);
326
+ let workerFailure;
327
+ let active = 0;
328
+ const waiting = new Set();
329
+ const wake = () => { for (const resolve of waiting)
330
+ resolve(); waiting.clear(); };
331
+ await Promise.all(Array.from({ length: this.concurrency }, async () => {
332
+ while (!workerFailure) {
333
+ if (cursor === queue.length) {
334
+ // An in-flight metadata object can still reveal more work. Keep
335
+ // idle workers available until the entire discovered graph drains.
336
+ if (!active)
337
+ return;
338
+ await new Promise((resolve) => { waiting.add(resolve); });
339
+ continue;
340
+ }
341
+ const { object, depth } = queue[cursor++];
342
+ active++;
343
+ let release;
344
+ try {
345
+ release = await this.buffered.acquire(object.size_bytes);
346
+ if (workerFailure)
347
+ continue;
348
+ await ensureLease();
349
+ if (workerFailure)
350
+ continue;
351
+ const bytes = await this.getObject(object);
352
+ await ensureLease();
353
+ const children = await target.receive(staging.lease_id, object, bytes);
354
+ if (!Array.isArray(children))
355
+ fail("invalid_target", "Local target returned invalid metadata references");
356
+ edges += children.length;
357
+ if (edges > 500_000 || (object.kind === "blob" && children.length))
358
+ fail("invalid_target", "Local target returned invalid metadata edges");
359
+ for (const child of children)
360
+ add(child, depth + 1);
361
+ }
362
+ catch (error) {
363
+ workerFailure ??= { error };
364
+ }
365
+ finally {
366
+ release?.();
367
+ active--;
368
+ wake();
369
+ }
370
+ }
371
+ }));
372
+ if (workerFailure)
373
+ throw workerFailure.error;
374
+ if (seen.size !== published.object_count || total !== published.total_bytes)
375
+ fail("invalid_response", "Published closure inventory differs from verified downloaded objects");
376
+ await ensureLease(true);
377
+ const local = await target.publish(staging.lease_id, pin, published.root);
378
+ if (!local || local.format_version !== 1 || local.durability !== "local" || local.pin !== pin || identity(validateFabricReference(local.root)) !== identity(published.root) || !Number.isSafeInteger(local.generation) || local.generation < 1)
379
+ fail("invalid_target", "Local target returned invalid retention evidence");
380
+ committed = true;
381
+ return { receipt: published, local, downloaded_objects: seen.size, downloaded_bytes: total };
382
+ }
383
+ catch (failure) {
384
+ if (failure instanceof FabricRemoteError)
385
+ throw failure;
386
+ throw new FabricRemoteError("target_failed", "Local download did not confirm complete durable publication");
387
+ }
388
+ finally {
389
+ if (staging && !committed) {
390
+ try {
391
+ await target.abandonStaging(staging.lease_id);
392
+ }
393
+ catch { /* No durable success is returned; its bounded staging lease may need cleanup. */ }
394
+ }
395
+ }
396
+ }
397
+ }
398
+ /** Lazy loading keeps the native transport out of ordinary remote-client use. */
399
+ export async function runFabricTransferCommand(args, options = {}) {
400
+ return (await import("./fabric-local.js")).runFabricTransferCommand(args, options);
401
+ }
402
+ //# sourceMappingURL=fabric-remote.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fabric-remote.js","sourceRoot":"","sources":["../src/fabric-remote.ts"],"names":[],"mappings":"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"}
package/dist/main.js CHANGED
@@ -23,12 +23,25 @@ import { buildFanoutDag, gateDecision, planTask, scaffoldPlan } from "./planner.
23
23
  import { backfillLlmTaskSummaries, listRuns, loadConfig, popUndoEntry, projectStateDir, registerProject, runsDir } from "./state.js";
24
24
  import { discoverModelOptions } from "./models.js";
25
25
  import { resolveNativeBinaryPath } from "./native-binary.js";
26
+ import { ensureEngineRunning, persistentProjectEngineRequested, runEngineCommand } from "./engine.js";
26
27
  import { cleanupRuns, deleteRun, listProjectRuns, mergeRun, printLogs, startRun, statusRuns, stopRun, syncRun, watchRun, workerRun, } from "./run-manager.js";
27
28
  import { appendCompletionNote, appendDecision, appendSharedContext, parseCompletionNoteArg, SHARED_CONTEXT_FILE, syncSharedContextToWorkspaces, writeCompletionNoteFile } from "./surfaces.js";
28
29
  import { commandExists, isTty, MissingToolError, newRunId, runCommand } from "./util.js";
29
30
  import { autoUpdateAndRerunIfNeeded, getUpdateAvailable } from "./version-check.js";
30
31
  import { printReport } from "./report.js";
31
32
  export async function main() {
33
+ // The SDK renderer owns its provider argv and stdio/control protocol. Route
34
+ // before general flag parsing so provider options never become Rudder tasks.
35
+ if (process.argv[2] === "__claude-sdk") {
36
+ const { runClaudeSdkBridge } = await import("./claude-sdk.js");
37
+ await runClaudeSdkBridge(process.argv.slice(3));
38
+ return;
39
+ }
40
+ if (process.argv[2] === "engine" && process.argv[3] === "api" && ["upload", "download"].includes(process.argv[4] ?? "")) {
41
+ const { runFabricTransferCommand } = await import("./fabric-remote.js");
42
+ await runFabricTransferCommand(process.argv.slice(4));
43
+ return;
44
+ }
32
45
  const parsed = parseArgs(process.argv.slice(2));
33
46
  if (shouldAutoUpdateForCommand(parsed.command) && await autoUpdateAndRerunIfNeeded(process.argv.slice(2))) {
34
47
  return;
@@ -95,6 +108,9 @@ export async function main() {
95
108
  return;
96
109
  }
97
110
  switch (parsed.command) {
111
+ case "engine":
112
+ await runEngineCommand(parsed.args[0], parsed.flags.repo ?? findRepoRoot(), parsed.flags.json);
113
+ return;
98
114
  case "tmux":
99
115
  throw new Error("The tmux dashboard has been removed. Run `rudder` or `rudder dashboard` to open the native dashboard.");
100
116
  case "attach": {
@@ -453,7 +469,7 @@ export function isInternalCommand(command) {
453
469
  return Boolean(command?.startsWith("__"));
454
470
  }
455
471
  // Commands that never touch a repository, so they never wait on a jj download.
456
- const JJ_FREE_COMMANDS = new Set(["__event", "__route-task", "telemetry", "feedback", "login", "logout", "help"]);
472
+ const JJ_FREE_COMMANDS = new Set(["__event", "__route-task", "engine", "telemetry", "feedback", "login", "logout", "help"]);
457
473
  function shouldAutoUpdateForCommand(command) {
458
474
  if (command?.startsWith("__")) {
459
475
  return false;
@@ -760,6 +776,15 @@ async function maybeOnboard() {
760
776
  }
761
777
  async function openDashboard(parsed) {
762
778
  await refreshModelCache();
779
+ if (await attachSocketLive()) {
780
+ await runNativeCommand(["attach", "--dashboard"]);
781
+ return;
782
+ }
783
+ if (persistentProjectEngineRequested(findRepoRoot())) {
784
+ await ensureEngineRunning(findRepoRoot());
785
+ await runNativeCommand(["attach", "--dashboard"]);
786
+ return;
787
+ }
763
788
  if (await runNativeDashboard()) {
764
789
  return;
765
790
  }
@@ -1269,6 +1294,7 @@ Usage:
1269
1294
  rudder Open native dashboard with real agent panes
1270
1295
  rudder restart Clear local session and open dashboard
1271
1296
  rudder attach [agent] Mirror one live agent pane of the running dashboard in this terminal
1297
+ rudder engine [start|status|shutdown] Control the persistent project engine
1272
1298
  rudder "task"
1273
1299
  rudder run [options] "task"
1274
1300
  rudder claude [options] "task"