@claudexor/daemon 3.1.1 → 3.2.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.d.ts +21 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +10 -0
- package/dist/client.js.map +1 -1
- package/dist/command-rpc.d.ts +19 -0
- package/dist/command-rpc.d.ts.map +1 -0
- package/dist/command-rpc.js +20 -0
- package/dist/command-rpc.js.map +1 -0
- package/dist/command-store.d.ts +9 -0
- package/dist/command-store.d.ts.map +1 -1
- package/dist/command-store.js +322 -0
- package/dist/command-store.js.map +1 -1
- package/dist/daemon-shutdown-rpc.d.ts +27 -0
- package/dist/daemon-shutdown-rpc.d.ts.map +1 -0
- package/dist/daemon-shutdown-rpc.js +110 -0
- package/dist/daemon-shutdown-rpc.js.map +1 -0
- package/dist/delegation-admission.d.ts +12 -0
- package/dist/delegation-admission.d.ts.map +1 -0
- package/dist/delegation-admission.js +47 -0
- package/dist/delegation-admission.js.map +1 -0
- package/dist/delivery-command.d.ts +28 -0
- package/dist/delivery-command.d.ts.map +1 -0
- package/dist/delivery-command.js +37 -0
- package/dist/delivery-command.js.map +1 -0
- package/dist/events.d.ts.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/interactions.d.ts +3 -3
- package/dist/interactions.d.ts.map +1 -1
- package/dist/interactions.js +15 -4
- package/dist/interactions.js.map +1 -1
- package/dist/job-record.d.ts +25 -0
- package/dist/job-record.d.ts.map +1 -0
- package/dist/job-record.js +62 -0
- package/dist/job-record.js.map +1 -0
- package/dist/job-settlement.d.ts +16 -0
- package/dist/job-settlement.d.ts.map +1 -0
- package/dist/job-settlement.js +56 -0
- package/dist/job-settlement.js.map +1 -0
- package/dist/journal-manager.d.ts +5 -5
- package/dist/journal-manager.d.ts.map +1 -1
- package/dist/journal-manager.js.map +1 -1
- package/dist/journal-recovery-files.d.ts +1 -1
- package/dist/operator-decisions.d.ts +10 -1
- package/dist/operator-decisions.d.ts.map +1 -1
- package/dist/operator-decisions.js +18 -10
- package/dist/operator-decisions.js.map +1 -1
- package/dist/project-partitions.d.ts +18 -10
- package/dist/project-partitions.d.ts.map +1 -1
- package/dist/project-partitions.js +13 -34
- package/dist/project-partitions.js.map +1 -1
- package/dist/projects.d.ts.map +1 -1
- package/dist/projects.js.map +1 -1
- package/dist/quota-registry.d.ts +62 -13
- package/dist/quota-registry.d.ts.map +1 -1
- package/dist/quota-registry.js +92 -9
- package/dist/quota-registry.js.map +1 -1
- package/dist/resource-store.d.ts.map +1 -1
- package/dist/run-events.d.ts.map +1 -1
- package/dist/run-events.js.map +1 -1
- package/dist/server.d.ts +28 -48
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +126 -154
- package/dist/server.js.map +1 -1
- package/dist/socket-probe.d.ts +3 -0
- package/dist/socket-probe.d.ts.map +1 -0
- package/dist/socket-probe.js +15 -0
- package/dist/socket-probe.js.map +1 -0
- package/dist/terminal-authority.d.ts +39 -0
- package/dist/terminal-authority.d.ts.map +1 -0
- package/dist/terminal-authority.js +58 -0
- package/dist/terminal-authority.js.map +1 -0
- package/dist/terminate.d.ts +14 -0
- package/dist/terminate.d.ts.map +1 -1
- package/dist/terminate.js +13 -1
- package/dist/terminate.js.map +1 -1
- package/dist/thread-head-ping.d.ts.map +1 -1
- package/dist/thread-head-ping.js.map +1 -1
- package/dist/thread-store-support.d.ts +7 -0
- package/dist/thread-store-support.d.ts.map +1 -1
- package/dist/thread-store-support.js +22 -0
- package/dist/thread-store-support.js.map +1 -1
- package/dist/threads.d.ts +6 -15
- package/dist/threads.d.ts.map +1 -1
- package/dist/threads.js +23 -37
- package/dist/threads.js.map +1 -1
- package/dist/writer-lease.d.ts +4 -0
- package/dist/writer-lease.d.ts.map +1 -1
- package/dist/writer-lease.js +1 -0
- package/dist/writer-lease.js.map +1 -1
- package/package.json +7 -6
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @claudexor/daemon
|
|
2
2
|
|
|
3
|
-
Internal package of [Claudexor](https://github.com/razzant/claudexor) —
|
|
3
|
+
Internal package of [Claudexor](https://github.com/razzant/claudexor) — Managed local daemon: Unix-socket JSON-RPC, token auth, task queue. Runner injected (no second scheduler).
|
|
4
4
|
|
|
5
5
|
Published as part of the Claudexor toolchain; it follows the monorepo's
|
|
6
6
|
lockstep version and has no separate semver contract. Use the `claudexor`
|
package/dist/client.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { RuntimeReplacementTarget } from "./daemon-shutdown-rpc.js";
|
|
1
2
|
/** Thin JSON-RPC client for the daemon over a Unix socket. */
|
|
2
3
|
export declare class DaemonClient {
|
|
3
4
|
private readonly socketPath;
|
|
@@ -13,6 +14,7 @@ export declare class DaemonClient {
|
|
|
13
14
|
}): Promise<{
|
|
14
15
|
id: string;
|
|
15
16
|
state: string;
|
|
17
|
+
reused: boolean;
|
|
16
18
|
}>;
|
|
17
19
|
status(id: string): Promise<{
|
|
18
20
|
id: string;
|
|
@@ -25,6 +27,9 @@ export declare class DaemonClient {
|
|
|
25
27
|
error?: string;
|
|
26
28
|
errorCode?: string;
|
|
27
29
|
errorStatus?: number;
|
|
30
|
+
errorRetryable?: boolean;
|
|
31
|
+
errorRequiredActions?: string[];
|
|
32
|
+
errorContext?: Record<string, unknown>;
|
|
28
33
|
createdAt?: string;
|
|
29
34
|
startedAt?: string;
|
|
30
35
|
finishedAt?: string;
|
|
@@ -33,6 +38,7 @@ export declare class DaemonClient {
|
|
|
33
38
|
idempotencyKey: string;
|
|
34
39
|
clientId?: string;
|
|
35
40
|
operation?: string;
|
|
41
|
+
idempotencyRequest?: unknown;
|
|
36
42
|
}): Promise<{
|
|
37
43
|
id: string;
|
|
38
44
|
state: string;
|
|
@@ -44,6 +50,9 @@ export declare class DaemonClient {
|
|
|
44
50
|
error?: string;
|
|
45
51
|
errorCode?: string;
|
|
46
52
|
errorStatus?: number;
|
|
53
|
+
errorRetryable?: boolean;
|
|
54
|
+
errorRequiredActions?: string[];
|
|
55
|
+
errorContext?: Record<string, unknown>;
|
|
47
56
|
createdAt?: string;
|
|
48
57
|
startedAt?: string;
|
|
49
58
|
finishedAt?: string;
|
|
@@ -58,11 +67,23 @@ export declare class DaemonClient {
|
|
|
58
67
|
error?: string;
|
|
59
68
|
errorCode?: string;
|
|
60
69
|
errorStatus?: number;
|
|
70
|
+
errorRetryable?: boolean;
|
|
71
|
+
errorRequiredActions?: string[];
|
|
72
|
+
errorContext?: Record<string, unknown>;
|
|
61
73
|
createdAt?: string;
|
|
62
74
|
startedAt?: string;
|
|
63
75
|
finishedAt?: string;
|
|
64
76
|
}[]>;
|
|
65
77
|
cancel(id: string): Promise<unknown>;
|
|
78
|
+
fenceDelegationParent(runId: string): Promise<{
|
|
79
|
+
runId: string;
|
|
80
|
+
fenced: boolean;
|
|
81
|
+
}>;
|
|
66
82
|
shutdown(): Promise<unknown>;
|
|
83
|
+
shutdownForRuntimeReplacement(expectedTarget: RuntimeReplacementTarget): Promise<{
|
|
84
|
+
ok: true;
|
|
85
|
+
fenced: true;
|
|
86
|
+
targetBound: true;
|
|
87
|
+
}>;
|
|
67
88
|
}
|
|
68
89
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEzE,8DAA8D;AAC9D,qBAAa,YAAY;IAErB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,KAAK;IAFxB,YACmB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EAC5B;IAEJ,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAiD9D;IAED,MAAM,qBAEL;IACD,OAAO,CACL,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE;QACP,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;KACf;YAEiB,MAAM;eAAS,MAAM;gBAAU,OAAO;OAO9D;IACD,MAAM,CAAC,EAAE,EAAE,MAAM;YAET,MAAM;eACH,MAAM;iBACJ,OAAO;gBACR,MAAM;iBACL,MAAM;iBACN,MAAM;iBACN,OAAO;gBACR,MAAM;oBACF,MAAM;sBACJ,MAAM;yBACH,OAAO;+BACD,MAAM,EAAE;uBAChB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oBAC1B,MAAM;oBACN,MAAM;qBACL,MAAM;OAEtB;IACD,YAAY,CACV,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE;QACP,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,kBAAkB,CAAC,EAAE,OAAO,CAAC;KAC9B;YAzBK,MAAM;eACH,MAAM;iBACJ,OAAO;gBACR,MAAM;iBACL,MAAM;iBACN,MAAM;iBACN,OAAO;gBACR,MAAM;oBACF,MAAM;sBACJ,MAAM;yBACH,OAAO;+BACD,MAAM,EAAE;uBAChB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oBAC1B,MAAM;oBACN,MAAM;qBACL,MAAM;cAmBtB;IACD,IAAI;YAGM,MAAM;eACH,MAAM;iBACJ,OAAO;gBACR,MAAM;iBACL,MAAM;iBACN,MAAM;gBACP,MAAM;oBACF,MAAM;sBACJ,MAAM;yBACH,OAAO;+BACD,MAAM,EAAE;uBAChB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oBAC1B,MAAM;oBACN,MAAM;qBACL,MAAM;SAGxB;IACD,MAAM,CAAC,EAAE,EAAE,MAAM,oBAEhB;IACD,qBAAqB,CAAC,KAAK,EAAE,MAAM;eACP,MAAM;gBAAU,OAAO;OAClD;IACD,QAAQ,qBAEP;IACD,6BAA6B,CAAC,cAAc,EAAE,wBAAwB;YAC7C,IAAI;gBAAU,IAAI;qBAAe,IAAI;OAI7D;CACF"}
|
package/dist/client.js
CHANGED
|
@@ -46,6 +46,9 @@ export class DaemonClient {
|
|
|
46
46
|
const error = Object.assign(new Error(msg.error.message), {
|
|
47
47
|
...(typeof msg.error.code === "string" ? { code: msg.error.code } : {}),
|
|
48
48
|
...(typeof msg.error.status === "number" ? { status: msg.error.status } : {}),
|
|
49
|
+
...(typeof msg.error.retryable === "boolean"
|
|
50
|
+
? { retryable: msg.error.retryable }
|
|
51
|
+
: {}),
|
|
49
52
|
});
|
|
50
53
|
finish(() => reject(error));
|
|
51
54
|
}
|
|
@@ -79,6 +82,7 @@ export class DaemonClient {
|
|
|
79
82
|
idempotencyKey: options.idempotencyKey,
|
|
80
83
|
clientId: options.clientId ?? "daemon-client",
|
|
81
84
|
operation: options.operation,
|
|
85
|
+
idempotencyRequest: options.idempotencyRequest,
|
|
82
86
|
});
|
|
83
87
|
}
|
|
84
88
|
list() {
|
|
@@ -87,8 +91,14 @@ export class DaemonClient {
|
|
|
87
91
|
cancel(id) {
|
|
88
92
|
return this.call("claudexor.cancel", { id });
|
|
89
93
|
}
|
|
94
|
+
fenceDelegationParent(runId) {
|
|
95
|
+
return this.call("claudexor.delegationFence", { runId });
|
|
96
|
+
}
|
|
90
97
|
shutdown() {
|
|
91
98
|
return this.call("claudexor.shutdown");
|
|
92
99
|
}
|
|
100
|
+
shutdownForRuntimeReplacement(expectedTarget) {
|
|
101
|
+
return this.call("claudexor.shutdownForRuntimeReplacement", expectedTarget);
|
|
102
|
+
}
|
|
93
103
|
}
|
|
94
104
|
//# sourceMappingURL=client.js.map
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,OAAO,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type CommandAuthority } from "./command-authority.js";
|
|
2
|
+
import { publicJobRecord, type JobRecord } from "./job-record.js";
|
|
3
|
+
interface CommandLookupEnvelope {
|
|
4
|
+
request?: unknown;
|
|
5
|
+
idempotencyKey?: unknown;
|
|
6
|
+
clientId?: unknown;
|
|
7
|
+
operation?: unknown;
|
|
8
|
+
idempotencyRequest?: unknown;
|
|
9
|
+
}
|
|
10
|
+
/** One parser for enqueue replay and the explicit findAccepted RPC. */
|
|
11
|
+
export declare function findAcceptedCommand(commands: CommandAuthority, input: CommandLookupEnvelope | null | undefined): JobRecord | null;
|
|
12
|
+
export declare function publicAcceptedCommand(commands: CommandAuthority, input: CommandLookupEnvelope | null | undefined): ReturnType<typeof publicJobRecord> | null;
|
|
13
|
+
export declare function commandAcceptanceReceipt(record: JobRecord, reused: boolean): {
|
|
14
|
+
id: string;
|
|
15
|
+
state: "cancelled" | "failed" | "interrupted" | "queued" | "running" | "succeeded";
|
|
16
|
+
reused: boolean;
|
|
17
|
+
};
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=command-rpc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-rpc.d.ts","sourceRoot":"","sources":["../src/command-rpc.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAElE,UAAU,qBAAqB;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,uEAAuE;AACvE,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,gBAAgB,EAC1B,KAAK,EAAE,qBAAqB,GAAG,IAAI,GAAG,SAAS,GAC9C,SAAS,GAAG,IAAI,CAQlB;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,gBAAgB,EAC1B,KAAK,EAAE,qBAAqB,GAAG,IAAI,GAAG,SAAS,GAC9C,UAAU,CAAC,OAAO,eAAe,CAAC,GAAG,IAAI,CAG3C;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO;;;;EAE1E"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { commandStoreForRequest } from "./command-authority.js";
|
|
2
|
+
import { publicJobRecord } from "./job-record.js";
|
|
3
|
+
/** One parser for enqueue replay and the explicit findAccepted RPC. */
|
|
4
|
+
export function findAcceptedCommand(commands, input) {
|
|
5
|
+
return commandStoreForRequest(commands, input?.request).find({
|
|
6
|
+
params: input?.request,
|
|
7
|
+
idempotencyKey: String(input?.idempotencyKey ?? ""),
|
|
8
|
+
clientId: String(input?.clientId ?? "daemon-client"),
|
|
9
|
+
operation: typeof input?.operation === "string" ? input.operation : undefined,
|
|
10
|
+
idempotencyParams: input?.idempotencyRequest,
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
export function publicAcceptedCommand(commands, input) {
|
|
14
|
+
const record = findAcceptedCommand(commands, input);
|
|
15
|
+
return record ? publicJobRecord(record) : null;
|
|
16
|
+
}
|
|
17
|
+
export function commandAcceptanceReceipt(record, reused) {
|
|
18
|
+
return { id: record.id, state: record.state, reused };
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=command-rpc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-rpc.js","sourceRoot":"","sources":["../src/command-rpc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAyB,MAAM,wBAAwB,CAAC;AACvF,OAAO,EAAE,eAAe,EAAkB,MAAM,iBAAiB,CAAC;AAUlE,uEAAuE;AACvE,MAAM,UAAU,mBAAmB,CACjC,QAA0B,EAC1B,KAA+C;IAE/C,OAAO,sBAAsB,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;QAC3D,MAAM,EAAE,KAAK,EAAE,OAAO;QACtB,cAAc,EAAE,MAAM,CAAC,KAAK,EAAE,cAAc,IAAI,EAAE,CAAC;QACnD,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,IAAI,eAAe,CAAC;QACpD,SAAS,EAAE,OAAO,KAAK,EAAE,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;QAC7E,iBAAiB,EAAE,KAAK,EAAE,kBAAkB;KAC7C,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,QAA0B,EAC1B,KAA+C;IAE/C,MAAM,MAAM,GAAG,mBAAmB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACpD,OAAO,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,MAAiB,EAAE,MAAe;IACzE,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;AACxD,CAAC"}
|
package/dist/command-store.d.ts
CHANGED
|
@@ -23,14 +23,23 @@ export declare class CommandStore {
|
|
|
23
23
|
idempotencyKey: string;
|
|
24
24
|
clientId: string;
|
|
25
25
|
operation?: string;
|
|
26
|
+
idempotencyParams?: unknown;
|
|
26
27
|
}): JobRecord | null;
|
|
27
28
|
get(id: string): JobRecord | undefined;
|
|
28
29
|
records(): JobRecord[];
|
|
29
30
|
update(id: string, patch: Partial<JobRecord>): JobRecord;
|
|
30
31
|
prune(ids: readonly string[]): void;
|
|
32
|
+
/**
|
|
33
|
+
* Reconcile one command after the partition journal accepted its terminal
|
|
34
|
+
* but local receipt/tail finalization failed.
|
|
35
|
+
*/
|
|
36
|
+
recoverDurableTerminal(id: string): JobRecord | null;
|
|
31
37
|
validateProjection(): void;
|
|
32
38
|
private replay;
|
|
33
39
|
private interruptUnknownCommands;
|
|
40
|
+
private reconcileTerminal;
|
|
41
|
+
private durableTerminalEvents;
|
|
42
|
+
private recoverTerminalArtifacts;
|
|
34
43
|
private drop;
|
|
35
44
|
}
|
|
36
45
|
export declare function commandProjection(): {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-store.d.ts","sourceRoot":"","sources":["../src/command-store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"command-store.d.ts","sourceRoot":"","sources":["../src/command-store.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAUzD,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAqBzD,oFAAoF;AACpF,qBAAa,YAAY;IAKrB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,GAAG;IALtB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgC;IAC5D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA4D;IAE1F,YACmB,OAAO,EAAE,cAAc,EACvB,GAAG,GAAE,MAAM,IAAuB,EAIpD;IAED,MAAM,CAAC,KAAK,EAAE;QACZ,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,OAAO,CAAC;QAChB,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,iBAAiB,CAAC,EAAE,OAAO,CAAC;KAC7B,GAAG;QAAE,MAAM,EAAE,SAAS,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAwBzC;IAED,IAAI,CAAC,KAAK,EAAE;QACV,MAAM,EAAE,OAAO,CAAC;QAChB,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,iBAAiB,CAAC,EAAE,OAAO,CAAC;KAC7B,GAAG,SAAS,GAAG,IAAI,CAOnB;IAED,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAErC;IAED,OAAO,IAAI,SAAS,EAAE,CAErB;IAED,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,CAOvD;IAED,KAAK,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAIlC;IAED;;;OAGG;IACH,sBAAsB,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAKnD;IAED,kBAAkB,IAAI,IAAI,CAKzB;IAED,OAAO,CAAC,MAAM;IAkCd,OAAO,CAAC,wBAAwB;IAmBhC,OAAO,CAAC,iBAAiB;IAsDzB,OAAO,CAAC,qBAAqB;IAmB7B,OAAO,CAAC,wBAAwB;IAgKhC,OAAO,CAAC,IAAI;CAOb;AAsFD,wBAAgB,iBAAiB;IAE7B,IAAI;IACJ,MAAM,YAAY,cAAc;IAChC,QAAQ,UAAU,YAAY;EAEjC"}
|
package/dist/command-store.js
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { closeSync, constants, fsyncSync, openSync, readFileSync, renameSync, unlinkSync, writeFileSync, } from "node:fs";
|
|
3
|
+
import { dirname, join } from "node:path";
|
|
4
|
+
import { TextDecoder } from "node:util";
|
|
5
|
+
import { RunEvent as RunEventSchema, RunTelemetry, validateRunFactsInvariants, } from "@claudexor/schema";
|
|
1
6
|
import { hashJson } from "@claudexor/util";
|
|
7
|
+
import { parse as parseYaml, stringify as stringifyYaml } from "yaml";
|
|
2
8
|
import { JOB_STATES } from "./server.js";
|
|
9
|
+
import { lstatOrNull, recoveredTerminalFacts, terminalCommandResult, } from "./terminal-authority.js";
|
|
3
10
|
const ACCEPTED = "command.accepted";
|
|
4
11
|
const UPDATED = "command.updated";
|
|
5
12
|
const PRUNED = "command.pruned";
|
|
@@ -73,6 +80,17 @@ export class CommandStore {
|
|
|
73
80
|
this.journal.append(PRUNED, { ids: [...ids] });
|
|
74
81
|
this.drop(ids);
|
|
75
82
|
}
|
|
83
|
+
/**
|
|
84
|
+
* Reconcile one command after the partition journal accepted its terminal
|
|
85
|
+
* but local receipt/tail finalization failed.
|
|
86
|
+
*/
|
|
87
|
+
recoverDurableTerminal(id) {
|
|
88
|
+
const record = this.recordsById.get(id);
|
|
89
|
+
if (!record?.runId)
|
|
90
|
+
return null;
|
|
91
|
+
const terminal = this.durableTerminalEvents().get(record.runId);
|
|
92
|
+
return terminal ? this.reconcileTerminal(record, terminal) : null;
|
|
93
|
+
}
|
|
76
94
|
validateProjection() {
|
|
77
95
|
for (const record of this.recordsById.values())
|
|
78
96
|
validateRecord(record);
|
|
@@ -116,7 +134,13 @@ export class CommandStore {
|
|
|
116
134
|
}
|
|
117
135
|
}
|
|
118
136
|
interruptUnknownCommands() {
|
|
137
|
+
const terminals = this.durableTerminalEvents();
|
|
119
138
|
for (const record of this.recordsById.values()) {
|
|
139
|
+
const terminal = record.runId ? terminals.get(record.runId) : undefined;
|
|
140
|
+
if (terminal) {
|
|
141
|
+
this.reconcileTerminal(record, terminal);
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
120
144
|
if (record.state !== "queued" && record.state !== "running")
|
|
121
145
|
continue;
|
|
122
146
|
this.update(record.id, {
|
|
@@ -128,6 +152,237 @@ export class CommandStore {
|
|
|
128
152
|
});
|
|
129
153
|
}
|
|
130
154
|
}
|
|
155
|
+
reconcileTerminal(record, terminal) {
|
|
156
|
+
const hasRunFacts = Object.prototype.hasOwnProperty.call(terminal.payload, "run_facts");
|
|
157
|
+
if (!hasRunFacts) {
|
|
158
|
+
// Pre-RunFacts journals remain readable across the upgrade. An
|
|
159
|
+
// already-terminal command has its historical command.updated
|
|
160
|
+
// authority; an active command cannot reconstruct the new
|
|
161
|
+
// byte-equivalent receipt and therefore follows the legacy crash path.
|
|
162
|
+
if (record.state !== "queued" && record.state !== "running")
|
|
163
|
+
return record;
|
|
164
|
+
return this.update(record.id, {
|
|
165
|
+
state: "interrupted",
|
|
166
|
+
error: "daemon restarted after a legacy terminal event without recoverable RunFacts",
|
|
167
|
+
errorCode: "legacy_terminal_recovery_unavailable",
|
|
168
|
+
errorStatus: 503,
|
|
169
|
+
errorRetryable: false,
|
|
170
|
+
finishedAt: this.now().toISOString(),
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
const active = record.state === "queued" || record.state === "running";
|
|
174
|
+
const provisionalRecovery = !active && record.errorCode === "terminal_recovery_required";
|
|
175
|
+
if (!active && !provisionalRecovery) {
|
|
176
|
+
// Already reconciled: the durable payload is still re-validated in
|
|
177
|
+
// memory, but artifact recovery is skipped entirely. Restart must not
|
|
178
|
+
// re-read per-run evidence for every historical terminal command (O(N)
|
|
179
|
+
// disk work per start) and must not require a run directory that disk
|
|
180
|
+
// retention may have legitimately reclaimed after the terminal
|
|
181
|
+
// committed — either would poison the whole partition.
|
|
182
|
+
const { facts } = recoveredTerminalFacts(record, terminal);
|
|
183
|
+
if (record.state !== facts.outcome.lifecycle ||
|
|
184
|
+
!terminalResultMatches(record.result, terminalCommandResult(record, facts))) {
|
|
185
|
+
throw new Error("terminal command result conflicts with durable terminal authority");
|
|
186
|
+
}
|
|
187
|
+
return record;
|
|
188
|
+
}
|
|
189
|
+
const facts = this.recoverTerminalArtifacts(record, terminal);
|
|
190
|
+
const lifecycle = facts.outcome.lifecycle;
|
|
191
|
+
return this.update(record.id, {
|
|
192
|
+
state: lifecycle,
|
|
193
|
+
result: terminalCommandResult(record, facts),
|
|
194
|
+
error: lifecycle === "failed" || lifecycle === "interrupted"
|
|
195
|
+
? `recovered durable ${lifecycle} terminal after daemon restart`
|
|
196
|
+
: undefined,
|
|
197
|
+
errorCode: undefined,
|
|
198
|
+
errorStatus: undefined,
|
|
199
|
+
errorRetryable: undefined,
|
|
200
|
+
errorRequiredActions: undefined,
|
|
201
|
+
errorContext: undefined,
|
|
202
|
+
finishedAt: terminal.ts,
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
durableTerminalEvents() {
|
|
206
|
+
const terminals = new Map();
|
|
207
|
+
for (const entry of this.journal.records()) {
|
|
208
|
+
if (entry.type !== "run.event")
|
|
209
|
+
continue;
|
|
210
|
+
const event = RunEventSchema.parse(entry.payload);
|
|
211
|
+
if (event.type === "run.completed" ||
|
|
212
|
+
event.type === "run.failed" ||
|
|
213
|
+
event.type === "run.blocked") {
|
|
214
|
+
if (terminals.has(event.run_id)) {
|
|
215
|
+
throw new Error(`multiple durable terminal events for run ${event.run_id}`);
|
|
216
|
+
}
|
|
217
|
+
terminals.set(event.run_id, event);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
return terminals;
|
|
221
|
+
}
|
|
222
|
+
recoverTerminalArtifacts(record, terminal) {
|
|
223
|
+
const { facts, terminalSeq } = recoveredTerminalFacts(record, terminal);
|
|
224
|
+
// ENOENT on the run root or its final/ directory means disk retention
|
|
225
|
+
// already reclaimed this run's on-disk evidence (rmSync may leave only a
|
|
226
|
+
// recreated root holding a tombstone marker). The partition journal is the
|
|
227
|
+
// durable authority, so the recovered facts are returned WITHOUT
|
|
228
|
+
// filesystem repair instead of poisoning the partition on restart.
|
|
229
|
+
const rootStat = lstatOrNull(record.runDir);
|
|
230
|
+
if (!rootStat)
|
|
231
|
+
return facts;
|
|
232
|
+
if (rootStat.isSymbolicLink() || !rootStat.isDirectory()) {
|
|
233
|
+
throw new Error("durable terminal run directory is not a canonical directory");
|
|
234
|
+
}
|
|
235
|
+
const finalDir = join(record.runDir, "final");
|
|
236
|
+
const finalStat = lstatOrNull(finalDir);
|
|
237
|
+
if (!finalStat)
|
|
238
|
+
return facts;
|
|
239
|
+
if (finalStat.isSymbolicLink() || !finalStat.isDirectory()) {
|
|
240
|
+
throw new Error("durable terminal run directory is not a canonical directory");
|
|
241
|
+
}
|
|
242
|
+
const receiptPath = join(finalDir, "run_facts.yaml");
|
|
243
|
+
const receiptStat = lstatOrNull(receiptPath);
|
|
244
|
+
if (!receiptStat) {
|
|
245
|
+
// JSON is valid YAML and avoids a second schema-to-presentation owner.
|
|
246
|
+
replaceFileDurably(receiptPath, `${JSON.stringify(facts, null, 2)}\n`);
|
|
247
|
+
}
|
|
248
|
+
else {
|
|
249
|
+
if (receiptStat.isSymbolicLink() || !receiptStat.isFile()) {
|
|
250
|
+
throw new Error("durable terminal RunFacts receipt is not a regular file");
|
|
251
|
+
}
|
|
252
|
+
const receiptText = readFileSync(receiptPath, "utf8");
|
|
253
|
+
let receiptValue;
|
|
254
|
+
let receiptTorn = false;
|
|
255
|
+
try {
|
|
256
|
+
receiptValue = parseYaml(receiptText);
|
|
257
|
+
}
|
|
258
|
+
catch {
|
|
259
|
+
// Older direct writers could crash mid-file. The complete journal
|
|
260
|
+
// payload is the durable authority, so a syntactically TORN receipt is
|
|
261
|
+
// safely reconstructible. ONLY the YAML tear is rebuilt: a receipt that
|
|
262
|
+
// parses but violates the canonical schema, or one that validates but
|
|
263
|
+
// differs from the journal, is corruption evidence and fails loud below
|
|
264
|
+
// instead of being silently destroyed.
|
|
265
|
+
receiptTorn = true;
|
|
266
|
+
replaceFileDurably(receiptPath, `${JSON.stringify(facts, null, 2)}\n`);
|
|
267
|
+
}
|
|
268
|
+
if (!receiptTorn) {
|
|
269
|
+
let existing;
|
|
270
|
+
try {
|
|
271
|
+
existing = validateRunFactsInvariants(receiptValue);
|
|
272
|
+
}
|
|
273
|
+
catch {
|
|
274
|
+
throw new Error("durable terminal RunFacts receipt violates the canonical schema");
|
|
275
|
+
}
|
|
276
|
+
if (hashJson(existing) !== hashJson(facts)) {
|
|
277
|
+
throw new Error("durable terminal RunFacts receipt does not match journal authority");
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
const telemetryPath = join(finalDir, "telemetry.yaml");
|
|
282
|
+
const telemetryStat = lstatOrNull(telemetryPath);
|
|
283
|
+
if (telemetryStat) {
|
|
284
|
+
if (telemetryStat.isSymbolicLink() || !telemetryStat.isFile()) {
|
|
285
|
+
throw new Error("durable terminal telemetry is not a regular file");
|
|
286
|
+
}
|
|
287
|
+
// Telemetry is best-effort descriptive evidence written non-atomically
|
|
288
|
+
// (no fsync), and the terminal commit path itself tolerates a corrupt
|
|
289
|
+
// copy (safeParse -> the embedded receipt is simply skipped). The JOURNAL
|
|
290
|
+
// is the authority, so an unreadable or schema-invalid telemetry file
|
|
291
|
+
// must never take the whole partition into recovery: it stays in place as
|
|
292
|
+
// corruption evidence, and only a READABLE copy participates in the
|
|
293
|
+
// receipt-consistency fence below.
|
|
294
|
+
let telemetry = null;
|
|
295
|
+
try {
|
|
296
|
+
telemetry = RunTelemetry.parse(parseYaml(readFileSync(telemetryPath, "utf8")));
|
|
297
|
+
}
|
|
298
|
+
catch {
|
|
299
|
+
telemetry = null;
|
|
300
|
+
}
|
|
301
|
+
if (telemetry?.run_facts) {
|
|
302
|
+
if (hashJson(telemetry.run_facts) !== hashJson(facts)) {
|
|
303
|
+
throw new Error("durable terminal telemetry does not match journal authority");
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
else if (telemetry) {
|
|
307
|
+
replaceFileDurably(telemetryPath, stringifyYaml(RunTelemetry.parse({ ...telemetry, run_facts: facts })));
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
const eventsPath = join(record.runDir, "events.jsonl");
|
|
311
|
+
const eventsStat = lstatOrNull(eventsPath);
|
|
312
|
+
let eventsBytes = Buffer.alloc(0);
|
|
313
|
+
if (eventsStat) {
|
|
314
|
+
if (eventsStat.isSymbolicLink() || !eventsStat.isFile()) {
|
|
315
|
+
throw new Error("durable terminal event log is not a regular file");
|
|
316
|
+
}
|
|
317
|
+
eventsBytes = readFileSync(eventsPath);
|
|
318
|
+
}
|
|
319
|
+
const normalizedLines = [];
|
|
320
|
+
let terminalOccurrences = 0;
|
|
321
|
+
let previousSeq = 0;
|
|
322
|
+
const rawLines = splitLines(eventsBytes);
|
|
323
|
+
const finalNonEmptyIndex = rawLines.findLastIndex((line) => !isAsciiWhitespace(line));
|
|
324
|
+
const canonicalTerminalLine = JSON.stringify(terminal);
|
|
325
|
+
const canonicalTerminalBytes = Buffer.from(canonicalTerminalLine, "utf8");
|
|
326
|
+
const endsWithNewline = eventsBytes.at(-1) === 0x0a;
|
|
327
|
+
const utf8 = new TextDecoder("utf-8", { fatal: true });
|
|
328
|
+
for (const [index, lineBytes] of rawLines.entries()) {
|
|
329
|
+
if (isAsciiWhitespace(lineBytes))
|
|
330
|
+
continue;
|
|
331
|
+
let event;
|
|
332
|
+
try {
|
|
333
|
+
const line = utf8.decode(lineBytes);
|
|
334
|
+
event = RunEventSchema.parse(JSON.parse(line));
|
|
335
|
+
}
|
|
336
|
+
catch {
|
|
337
|
+
const tornFinalLine = index === finalNonEmptyIndex &&
|
|
338
|
+
!endsWithNewline &&
|
|
339
|
+
terminalOccurrences === 0 &&
|
|
340
|
+
isBufferPrefix(canonicalTerminalBytes, lineBytes);
|
|
341
|
+
if (tornFinalLine)
|
|
342
|
+
break;
|
|
343
|
+
throw new Error("per-run event log contains malformed committed evidence");
|
|
344
|
+
}
|
|
345
|
+
if (event.run_id !== terminal.run_id || event.task_id !== terminal.task_id) {
|
|
346
|
+
throw new Error("per-run event identity conflicts with durable terminal authority");
|
|
347
|
+
}
|
|
348
|
+
if (typeof event.seq !== "number" || !Number.isSafeInteger(event.seq) || event.seq <= 0) {
|
|
349
|
+
throw new Error("per-run event has no valid sequence");
|
|
350
|
+
}
|
|
351
|
+
const eventSeq = event.seq;
|
|
352
|
+
if (eventSeq <= previousSeq) {
|
|
353
|
+
throw new Error("per-run event sequence is duplicate or non-monotonic");
|
|
354
|
+
}
|
|
355
|
+
const sameEvent = hashJson(event) === hashJson(terminal);
|
|
356
|
+
if (terminalOccurrences === 0 && !sameEvent && eventSeq >= terminalSeq) {
|
|
357
|
+
throw new Error("per-run event sequence conflicts with durable terminal authority");
|
|
358
|
+
}
|
|
359
|
+
if (terminalOccurrences > 0 && !sameEvent && !isPostTerminalControlAudit(event.type)) {
|
|
360
|
+
throw new Error("per-run event appears after terminal authority");
|
|
361
|
+
}
|
|
362
|
+
const eventIsTerminal = event.type === "run.completed" ||
|
|
363
|
+
event.type === "run.failed" ||
|
|
364
|
+
event.type === "run.blocked";
|
|
365
|
+
if (eventIsTerminal) {
|
|
366
|
+
if (!sameEvent) {
|
|
367
|
+
throw new Error("per-run terminal event conflicts with durable journal authority");
|
|
368
|
+
}
|
|
369
|
+
terminalOccurrences += 1;
|
|
370
|
+
if (terminalOccurrences > 1) {
|
|
371
|
+
throw new Error("per-run event log contains multiple terminal events");
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
previousSeq = eventSeq;
|
|
375
|
+
normalizedLines.push(JSON.stringify(event));
|
|
376
|
+
}
|
|
377
|
+
if (terminalOccurrences === 0) {
|
|
378
|
+
normalizedLines.push(JSON.stringify(terminal));
|
|
379
|
+
}
|
|
380
|
+
const normalizedEvents = normalizedLines.length > 0 ? `${normalizedLines.join("\n")}\n` : "";
|
|
381
|
+
if (!Buffer.from(normalizedEvents, "utf8").equals(eventsBytes)) {
|
|
382
|
+
replaceFileDurably(eventsPath, normalizedEvents);
|
|
383
|
+
}
|
|
384
|
+
return facts;
|
|
385
|
+
}
|
|
131
386
|
drop(ids) {
|
|
132
387
|
const removed = new Set(ids);
|
|
133
388
|
for (const id of removed)
|
|
@@ -138,6 +393,73 @@ export class CommandStore {
|
|
|
138
393
|
}
|
|
139
394
|
}
|
|
140
395
|
}
|
|
396
|
+
function splitLines(bytes) {
|
|
397
|
+
const lines = [];
|
|
398
|
+
let start = 0;
|
|
399
|
+
for (let index = 0; index < bytes.length; index += 1) {
|
|
400
|
+
if (bytes[index] !== 0x0a)
|
|
401
|
+
continue;
|
|
402
|
+
lines.push(bytes.subarray(start, index));
|
|
403
|
+
start = index + 1;
|
|
404
|
+
}
|
|
405
|
+
lines.push(bytes.subarray(start));
|
|
406
|
+
return lines;
|
|
407
|
+
}
|
|
408
|
+
function isAsciiWhitespace(bytes) {
|
|
409
|
+
for (const byte of bytes) {
|
|
410
|
+
if (byte !== 0x09 && byte !== 0x0b && byte !== 0x0c && byte !== 0x0d && byte !== 0x20) {
|
|
411
|
+
return false;
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
return true;
|
|
415
|
+
}
|
|
416
|
+
function isBufferPrefix(whole, prefix) {
|
|
417
|
+
return prefix.length <= whole.length && whole.subarray(0, prefix.length).equals(prefix);
|
|
418
|
+
}
|
|
419
|
+
function isPostTerminalControlAudit(type) {
|
|
420
|
+
return type === "control.requested" || type === "control.applied" || type === "control.rejected";
|
|
421
|
+
}
|
|
422
|
+
function terminalResultMatches(result, expected) {
|
|
423
|
+
if (!result || typeof result !== "object" || Array.isArray(result))
|
|
424
|
+
return false;
|
|
425
|
+
const value = result;
|
|
426
|
+
return (value["lifecycle"] === expected.lifecycle &&
|
|
427
|
+
value["runId"] === expected.runId &&
|
|
428
|
+
value["taskId"] === expected.taskId &&
|
|
429
|
+
value["runDir"] === expected.runDir &&
|
|
430
|
+
hashJson(value["facts"]) === hashJson(expected.facts));
|
|
431
|
+
}
|
|
432
|
+
function replaceFileDurably(path, text) {
|
|
433
|
+
const parent = dirname(path);
|
|
434
|
+
const tmp = join(parent, `.claudexor-recovery-${randomUUID()}`);
|
|
435
|
+
let fd = null;
|
|
436
|
+
try {
|
|
437
|
+
fd = openSync(tmp, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL | constants.O_NOFOLLOW, 0o600);
|
|
438
|
+
writeFileSync(fd, text, "utf8");
|
|
439
|
+
fsyncSync(fd);
|
|
440
|
+
closeSync(fd);
|
|
441
|
+
fd = null;
|
|
442
|
+
renameSync(tmp, path);
|
|
443
|
+
const parentFd = openSync(parent, constants.O_RDONLY | constants.O_DIRECTORY | constants.O_NOFOLLOW);
|
|
444
|
+
try {
|
|
445
|
+
fsyncSync(parentFd);
|
|
446
|
+
}
|
|
447
|
+
finally {
|
|
448
|
+
closeSync(parentFd);
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
finally {
|
|
452
|
+
if (fd !== null)
|
|
453
|
+
closeSync(fd);
|
|
454
|
+
try {
|
|
455
|
+
unlinkSync(tmp);
|
|
456
|
+
}
|
|
457
|
+
catch (error) {
|
|
458
|
+
if (error.code !== "ENOENT")
|
|
459
|
+
throw error;
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
}
|
|
141
463
|
export function commandProjection() {
|
|
142
464
|
return {
|
|
143
465
|
name: "commands",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-store.js","sourceRoot":"","sources":["../src/command-store.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"command-store.js","sourceRoot":"","sources":["../src/command-store.ts"],"names":[],"mappings":"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"}
|