@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.
Files changed (94) hide show
  1. package/README.md +1 -1
  2. package/dist/client.d.ts +21 -0
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +10 -0
  5. package/dist/client.js.map +1 -1
  6. package/dist/command-rpc.d.ts +19 -0
  7. package/dist/command-rpc.d.ts.map +1 -0
  8. package/dist/command-rpc.js +20 -0
  9. package/dist/command-rpc.js.map +1 -0
  10. package/dist/command-store.d.ts +9 -0
  11. package/dist/command-store.d.ts.map +1 -1
  12. package/dist/command-store.js +322 -0
  13. package/dist/command-store.js.map +1 -1
  14. package/dist/daemon-shutdown-rpc.d.ts +27 -0
  15. package/dist/daemon-shutdown-rpc.d.ts.map +1 -0
  16. package/dist/daemon-shutdown-rpc.js +110 -0
  17. package/dist/daemon-shutdown-rpc.js.map +1 -0
  18. package/dist/delegation-admission.d.ts +12 -0
  19. package/dist/delegation-admission.d.ts.map +1 -0
  20. package/dist/delegation-admission.js +47 -0
  21. package/dist/delegation-admission.js.map +1 -0
  22. package/dist/delivery-command.d.ts +28 -0
  23. package/dist/delivery-command.d.ts.map +1 -0
  24. package/dist/delivery-command.js +37 -0
  25. package/dist/delivery-command.js.map +1 -0
  26. package/dist/events.d.ts.map +1 -1
  27. package/dist/index.d.ts +2 -0
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +2 -0
  30. package/dist/index.js.map +1 -1
  31. package/dist/interactions.d.ts +3 -3
  32. package/dist/interactions.d.ts.map +1 -1
  33. package/dist/interactions.js +15 -4
  34. package/dist/interactions.js.map +1 -1
  35. package/dist/job-record.d.ts +25 -0
  36. package/dist/job-record.d.ts.map +1 -0
  37. package/dist/job-record.js +62 -0
  38. package/dist/job-record.js.map +1 -0
  39. package/dist/job-settlement.d.ts +16 -0
  40. package/dist/job-settlement.d.ts.map +1 -0
  41. package/dist/job-settlement.js +56 -0
  42. package/dist/job-settlement.js.map +1 -0
  43. package/dist/journal-manager.d.ts +5 -5
  44. package/dist/journal-manager.d.ts.map +1 -1
  45. package/dist/journal-manager.js.map +1 -1
  46. package/dist/journal-recovery-files.d.ts +1 -1
  47. package/dist/operator-decisions.d.ts +10 -1
  48. package/dist/operator-decisions.d.ts.map +1 -1
  49. package/dist/operator-decisions.js +18 -10
  50. package/dist/operator-decisions.js.map +1 -1
  51. package/dist/project-partitions.d.ts +18 -10
  52. package/dist/project-partitions.d.ts.map +1 -1
  53. package/dist/project-partitions.js +13 -34
  54. package/dist/project-partitions.js.map +1 -1
  55. package/dist/projects.d.ts.map +1 -1
  56. package/dist/projects.js.map +1 -1
  57. package/dist/quota-registry.d.ts +62 -13
  58. package/dist/quota-registry.d.ts.map +1 -1
  59. package/dist/quota-registry.js +92 -9
  60. package/dist/quota-registry.js.map +1 -1
  61. package/dist/resource-store.d.ts.map +1 -1
  62. package/dist/run-events.d.ts.map +1 -1
  63. package/dist/run-events.js.map +1 -1
  64. package/dist/server.d.ts +28 -48
  65. package/dist/server.d.ts.map +1 -1
  66. package/dist/server.js +126 -154
  67. package/dist/server.js.map +1 -1
  68. package/dist/socket-probe.d.ts +3 -0
  69. package/dist/socket-probe.d.ts.map +1 -0
  70. package/dist/socket-probe.js +15 -0
  71. package/dist/socket-probe.js.map +1 -0
  72. package/dist/terminal-authority.d.ts +39 -0
  73. package/dist/terminal-authority.d.ts.map +1 -0
  74. package/dist/terminal-authority.js +58 -0
  75. package/dist/terminal-authority.js.map +1 -0
  76. package/dist/terminate.d.ts +14 -0
  77. package/dist/terminate.d.ts.map +1 -1
  78. package/dist/terminate.js +13 -1
  79. package/dist/terminate.js.map +1 -1
  80. package/dist/thread-head-ping.d.ts.map +1 -1
  81. package/dist/thread-head-ping.js.map +1 -1
  82. package/dist/thread-store-support.d.ts +7 -0
  83. package/dist/thread-store-support.d.ts.map +1 -1
  84. package/dist/thread-store-support.js +22 -0
  85. package/dist/thread-store-support.js.map +1 -1
  86. package/dist/threads.d.ts +6 -15
  87. package/dist/threads.d.ts.map +1 -1
  88. package/dist/threads.js +23 -37
  89. package/dist/threads.js.map +1 -1
  90. package/dist/writer-lease.d.ts +4 -0
  91. package/dist/writer-lease.d.ts.map +1 -1
  92. package/dist/writer-lease.js +1 -0
  93. package/dist/writer-lease.js.map +1 -1
  94. package/package.json +7 -6
@@ -0,0 +1,27 @@
1
+ import type { DaemonLeaseOwner } from "./writer-lease.js";
2
+ export interface RuntimeReplacementIdentity {
3
+ version: string;
4
+ buildSha: string;
5
+ }
6
+ export interface RuntimeReplacementTarget extends RuntimeReplacementIdentity {
7
+ leaseOwner: Pick<DaemonLeaseOwner, "pid" | "token">;
8
+ }
9
+ /** Exact serving authority configured into one daemon closure. */
10
+ export interface RuntimeReplacementAuthority {
11
+ runtimeIdentity?: RuntimeReplacementIdentity;
12
+ runtimeLeaseOwner?: Pick<DaemonLeaseOwner, "pid" | "token">;
13
+ }
14
+ export type DaemonShutdownRpcReceipt = {
15
+ ok: true;
16
+ fenced?: true;
17
+ targetBound?: true;
18
+ };
19
+ export declare function replacementRefusal(error: unknown): boolean;
20
+ /** Socket shutdown protocol owner. Ordinary operator shutdown stays delayed and
21
+ * forceful. Runtime replacement instead runs one synchronous activity check and
22
+ * composition callback; that callback must check setup then enter the shared
23
+ * shutdown state machine before returning its promise. */
24
+ export declare function dispatchShutdownRpc(method: string, params: unknown, transientActivity: number, readRecords: () => Iterable<{
25
+ state: string;
26
+ }>, requestOperatorShutdown: () => Promise<void>, requestRuntimeReplacement?: () => Promise<void>, configuredRuntimeIdentity?: RuntimeReplacementIdentity, configuredLeaseOwner?: Pick<DaemonLeaseOwner, "pid" | "token">): DaemonShutdownRpcReceipt | null;
27
+ //# sourceMappingURL=daemon-shutdown-rpc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon-shutdown-rpc.d.ts","sourceRoot":"","sources":["../src/daemon-shutdown-rpc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,wBAAyB,SAAQ,0BAA0B;IAC1E,UAAU,EAAE,IAAI,CAAC,gBAAgB,EAAE,KAAK,GAAG,OAAO,CAAC,CAAC;CACrD;AAED,kEAAkE;AAClE,MAAM,WAAW,2BAA2B;IAC1C,eAAe,CAAC,EAAE,0BAA0B,CAAC;IAC7C,iBAAiB,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,KAAK,GAAG,OAAO,CAAC,CAAC;CAC7D;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,EAAE,EAAE,IAAI,CAAC;IACT,MAAM,CAAC,EAAE,IAAI,CAAC;IACd,WAAW,CAAC,EAAE,IAAI,CAAC;CACpB,CAAC;AAyCF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAI1D;AAED;;;0DAG0D;AAC1D,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,OAAO,EACf,iBAAiB,EAAE,MAAM,EACzB,WAAW,EAAE,MAAM,QAAQ,CAAC;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,EAC9C,uBAAuB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAC5C,yBAAyB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAC/C,yBAAyB,CAAC,EAAE,0BAA0B,EACtD,oBAAoB,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,KAAK,GAAG,OAAO,CAAC,GAC7D,wBAAwB,GAAG,IAAI,CAkEjC"}
@@ -0,0 +1,110 @@
1
+ function activityUnknown(message) {
2
+ return Object.assign(new Error(message), {
3
+ code: "runtime_activity_unknown",
4
+ status: 503,
5
+ retryable: true,
6
+ });
7
+ }
8
+ function exactIdentity(value) {
9
+ if (!value || typeof value !== "object")
10
+ return null;
11
+ const candidate = value;
12
+ if (typeof candidate.version !== "string" ||
13
+ candidate.version.length === 0 ||
14
+ typeof candidate.buildSha !== "string" ||
15
+ !/^[0-9a-f]{40}$/.test(candidate.buildSha)) {
16
+ return null;
17
+ }
18
+ return { version: candidate.version, buildSha: candidate.buildSha };
19
+ }
20
+ function exactTarget(value) {
21
+ const identity = exactIdentity(value);
22
+ if (!identity || !value || typeof value !== "object")
23
+ return null;
24
+ const leaseOwner = value.leaseOwner;
25
+ if (!leaseOwner || typeof leaseOwner !== "object")
26
+ return null;
27
+ const candidate = leaseOwner;
28
+ if (!Number.isSafeInteger(candidate.pid) ||
29
+ Number(candidate.pid) <= 0 ||
30
+ typeof candidate.token !== "string" ||
31
+ candidate.token.length === 0) {
32
+ return null;
33
+ }
34
+ return { ...identity, leaseOwner: { pid: Number(candidate.pid), token: candidate.token } };
35
+ }
36
+ export function replacementRefusal(error) {
37
+ if (!error || typeof error !== "object" || !("code" in error))
38
+ return false;
39
+ const code = error.code;
40
+ return code === "runtime_replacement_busy" || code === "runtime_activity_unknown";
41
+ }
42
+ /** Socket shutdown protocol owner. Ordinary operator shutdown stays delayed and
43
+ * forceful. Runtime replacement instead runs one synchronous activity check and
44
+ * composition callback; that callback must check setup then enter the shared
45
+ * shutdown state machine before returning its promise. */
46
+ export function dispatchShutdownRpc(method, params, transientActivity, readRecords, requestOperatorShutdown, requestRuntimeReplacement, configuredRuntimeIdentity, configuredLeaseOwner) {
47
+ if (method === "claudexor.shutdown") {
48
+ setTimeout(() => {
49
+ void requestOperatorShutdown().catch(() => {
50
+ // Fail closed: the process and ownership lease remain alive. The
51
+ // composition root records the detailed failure in its private log.
52
+ });
53
+ }, 10);
54
+ return { ok: true };
55
+ }
56
+ if (method !== "claudexor.shutdownForRuntimeReplacement")
57
+ return null;
58
+ // Bind replacement admission to the exact runtime the caller observed. This
59
+ // comparison shares the same synchronous event-loop turn as the activity
60
+ // check and admission fence below, so a stale handshake can never stop a
61
+ // different serving closure. Missing/unstamped authority fails closed.
62
+ const expected = exactTarget(params);
63
+ const configured = exactIdentity(configuredRuntimeIdentity);
64
+ if (!expected ||
65
+ !configured ||
66
+ !configuredLeaseOwner ||
67
+ expected.version !== configured.version ||
68
+ expected.buildSha !== configured.buildSha ||
69
+ expected.leaseOwner.pid !== configuredLeaseOwner.pid ||
70
+ expected.leaseOwner.token !== configuredLeaseOwner.token) {
71
+ throw activityUnknown("runtime replacement serving process identity could not be proven");
72
+ }
73
+ let busy;
74
+ try {
75
+ busy =
76
+ transientActivity > 0 ||
77
+ [...readRecords()].some((record) => record.state === "queued" || record.state === "running");
78
+ }
79
+ catch (cause) {
80
+ throw Object.assign(new Error("runtime replacement could not prove daemon activity state"), {
81
+ code: "runtime_activity_unknown",
82
+ status: 503,
83
+ retryable: true,
84
+ cause,
85
+ });
86
+ }
87
+ if (busy) {
88
+ throw Object.assign(new Error("runtime replacement is deferred while daemon work is active"), {
89
+ code: "runtime_replacement_busy",
90
+ status: 409,
91
+ retryable: true,
92
+ });
93
+ }
94
+ if (!requestRuntimeReplacement) {
95
+ throw Object.assign(new Error("runtime replacement admission authority is unavailable"), {
96
+ code: "runtime_activity_unknown",
97
+ status: 503,
98
+ retryable: true,
99
+ });
100
+ }
101
+ // No await or timer separates the daemon activity check from this callback.
102
+ // Its synchronous prefix checks setup and fences setup/control/run admission.
103
+ const operation = requestRuntimeReplacement();
104
+ void operation.catch(() => {
105
+ // An accepted stop may close the response socket. The caller proves the
106
+ // pinned daemon's termination rather than trusting response delivery.
107
+ });
108
+ return { ok: true, fenced: true, targetBound: true };
109
+ }
110
+ //# sourceMappingURL=daemon-shutdown-rpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon-shutdown-rpc.js","sourceRoot":"","sources":["../src/daemon-shutdown-rpc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { JobRecord } from "./server.js";
2
+ export interface DelegationAdmissionAuthority {
3
+ assertCanAdmitChild(parentRunId: string): void;
4
+ noteChildAccepted(parentRunId: string, admissionId: string): void;
5
+ cancelAcceptedChild(parentRunId: string, admissionId: string): void;
6
+ beginParentClose(parentRunId: string): void;
7
+ }
8
+ export declare function delegatedParentOf(request: unknown): string | null;
9
+ export declare function isDelegatedChildRecord(record: JobRecord): boolean;
10
+ /** Pure lineage half of daemon-atomic Delegate admission. */
11
+ export declare function admitDelegatedRequest(request: unknown, operation: string | undefined, records: readonly JobRecord[], authority?: Pick<DelegationAdmissionAuthority, "assertCanAdmitChild">): unknown;
12
+ //# sourceMappingURL=delegation-admission.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delegation-admission.d.ts","sourceRoot":"","sources":["../src/delegation-admission.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,WAAW,4BAA4B;IAC3C,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/C,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAClE,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpE,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7C;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAIjE;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAEjE;AAED,6DAA6D;AAC7D,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,OAAO,EAAE,SAAS,SAAS,EAAE,EAC7B,SAAS,CAAC,EAAE,IAAI,CAAC,4BAA4B,EAAE,qBAAqB,CAAC,GACpE,OAAO,CAmCT"}
@@ -0,0 +1,47 @@
1
+ export function delegatedParentOf(request) {
2
+ if (!request || typeof request !== "object" || Array.isArray(request))
3
+ return null;
4
+ const value = request["delegatedFromRunId"];
5
+ return typeof value === "string" && value ? value : null;
6
+ }
7
+ export function isDelegatedChildRecord(record) {
8
+ return delegatedParentOf(record.params) !== null;
9
+ }
10
+ /** Pure lineage half of daemon-atomic Delegate admission. */
11
+ export function admitDelegatedRequest(request, operation, records, authority) {
12
+ const delegatedFrom = delegatedParentOf(request);
13
+ if (!delegatedFrom)
14
+ return request;
15
+ const params = request;
16
+ if (operation !== "delegated-run" || params["parentRunId"] !== delegatedFrom) {
17
+ throw Object.assign(new Error("delegation lineage is reserved for the scoped belt"), {
18
+ code: "delegation_lineage_forbidden",
19
+ status: 403,
20
+ });
21
+ }
22
+ if (params["delegate"] === true) {
23
+ throw Object.assign(new Error("delegated children cannot enable Delegate"), {
24
+ code: "delegation_depth_forbidden",
25
+ status: 403,
26
+ });
27
+ }
28
+ const parent = records.find((record) => record.runId === delegatedFrom);
29
+ const parentParams = parent?.params && typeof parent.params === "object" && !Array.isArray(parent.params)
30
+ ? parent.params
31
+ : null;
32
+ if (!parent || parent.state !== "running" || parentParams?.["delegate"] !== true) {
33
+ throw Object.assign(new Error(`no running Delegate parent run ${delegatedFrom}`), {
34
+ code: "delegation_parent_invalid",
35
+ status: 403,
36
+ });
37
+ }
38
+ if (!authority) {
39
+ throw Object.assign(new Error(`no Delegate budget authority for parent ${delegatedFrom}`), {
40
+ code: "delegation_budget_parent_unavailable",
41
+ status: 409,
42
+ });
43
+ }
44
+ authority.assertCanAdmitChild(delegatedFrom);
45
+ return request;
46
+ }
47
+ //# sourceMappingURL=delegation-admission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delegation-admission.js","sourceRoot":"","sources":["../src/delegation-admission.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,iBAAiB,CAAC,OAAgB;IAChD,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACnF,MAAM,KAAK,GAAI,OAAmC,CAAC,oBAAoB,CAAC,CAAC;IACzE,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAiB;IACtD,OAAO,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;AACnD,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,qBAAqB,CACnC,OAAgB,EAChB,SAA6B,EAC7B,OAA6B,EAC7B,SAAqE;IAErE,MAAM,aAAa,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACjD,IAAI,CAAC,aAAa;QAAE,OAAO,OAAO,CAAC;IACnC,MAAM,MAAM,GAAG,OAAkC,CAAC;IAClD,IAAI,SAAS,KAAK,eAAe,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,aAAa,EAAE,CAAC;QAC7E,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,oDAAoD,CAAC,EAAE;YACnF,IAAI,EAAE,8BAA8B;YACpC,MAAM,EAAE,GAAG;SACZ,CAAC,CAAC;IACL,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC;QAChC,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,2CAA2C,CAAC,EAAE;YAC1E,IAAI,EAAE,4BAA4B;YAClC,MAAM,EAAE,GAAG;SACZ,CAAC,CAAC;IACL,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,aAAa,CAAC,CAAC;IACxE,MAAM,YAAY,GAChB,MAAM,EAAE,MAAM,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;QAClF,CAAC,CAAE,MAAM,CAAC,MAAkC;QAC5C,CAAC,CAAC,IAAI,CAAC;IACX,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,YAAY,EAAE,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC;QACjF,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,kCAAkC,aAAa,EAAE,CAAC,EAAE;YAChF,IAAI,EAAE,2BAA2B;YACjC,MAAM,EAAE,GAAG;SACZ,CAAC,CAAC;IACL,CAAC;IACD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,2CAA2C,aAAa,EAAE,CAAC,EAAE;YACzF,IAAI,EAAE,sCAAsC;YAC5C,MAAM,EAAE,GAAG;SACZ,CAAC,CAAC;IACL,CAAC;IACD,SAAS,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;IAC7C,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { CommandStore } from "./command-store.js";
2
+ export declare function beginDeliveryCommand(store: CommandStore, params: unknown, input: {
3
+ key: string;
4
+ client: string;
5
+ operation: string;
6
+ request: unknown;
7
+ }): {
8
+ id: string;
9
+ state: import("./job-record.js").JobState;
10
+ params: unknown;
11
+ result?: unknown;
12
+ error?: string;
13
+ errorCode?: string;
14
+ errorStatus?: number;
15
+ errorRetryable?: boolean;
16
+ errorRequiredActions?: string[];
17
+ errorContext?: Record<string, unknown>;
18
+ createdAt: string;
19
+ runId?: string;
20
+ taskId?: string;
21
+ runDir?: string;
22
+ startedAt?: string;
23
+ finishedAt?: string;
24
+ reused: boolean;
25
+ };
26
+ export declare function completeDeliveryCommand(store: CommandStore | undefined, id: string, result: unknown): void;
27
+ export declare function failDeliveryCommand(store: CommandStore | undefined, id: string, error: unknown): void;
28
+ //# sourceMappingURL=delivery-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivery-command.d.ts","sourceRoot":"","sources":["../src/delivery-command.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,OAAO,EACf,KAAK,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE;;;;;;;;;;;;;;;;;;EAc5E;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,YAAY,GAAG,SAAS,EAC/B,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,OAAO,GACd,IAAI,CAGN;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,YAAY,GAAG,SAAS,EAC/B,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,OAAO,GACb,IAAI,CAcN"}
@@ -0,0 +1,37 @@
1
+ import { newId, nowIso, safeProblemMessage } from "@claudexor/util";
2
+ export function beginDeliveryCommand(store, params, input) {
3
+ const accepted = store.accept({
4
+ id: newId("delivery"),
5
+ params,
6
+ idempotencyKey: input.key,
7
+ clientId: input.client,
8
+ operation: `delivery.${input.operation}`,
9
+ idempotencyParams: input.request,
10
+ });
11
+ const record = accepted.reused
12
+ ? accepted.record
13
+ : store.update(accepted.record.id, { state: "running", startedAt: nowIso() });
14
+ return { ...record, reused: accepted.reused };
15
+ }
16
+ export function completeDeliveryCommand(store, id, result) {
17
+ if (!store)
18
+ throw new Error(`delivery authority lost command ${id}`);
19
+ store.update(id, { state: "succeeded", result, finishedAt: nowIso() });
20
+ }
21
+ export function failDeliveryCommand(store, id, error) {
22
+ if (!store)
23
+ throw new Error(`delivery authority lost command ${id}`);
24
+ const value = error && typeof error === "object" ? error : {};
25
+ store.update(id, {
26
+ state: "failed",
27
+ // This command store is the durable journal authority; redact before append.
28
+ error: safeProblemMessage(error),
29
+ errorCode: typeof value["code"] === "string" ? value["code"] : undefined,
30
+ result: {
31
+ status: typeof value["status"] === "number" ? value["status"] : 500,
32
+ code: typeof value["code"] === "string" ? value["code"] : null,
33
+ },
34
+ finishedAt: nowIso(),
35
+ });
36
+ }
37
+ //# sourceMappingURL=delivery-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivery-command.js","sourceRoot":"","sources":["../src/delivery-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGpE,MAAM,UAAU,oBAAoB,CAClC,KAAmB,EACnB,MAAe,EACf,KAA2E;IAE3E,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,EAAE,EAAE,KAAK,CAAC,UAAU,CAAC;QACrB,MAAM;QACN,cAAc,EAAE,KAAK,CAAC,GAAG;QACzB,QAAQ,EAAE,KAAK,CAAC,MAAM;QACtB,SAAS,EAAE,YAAY,KAAK,CAAC,SAAS,EAAE;QACxC,iBAAiB,EAAE,KAAK,CAAC,OAAO;KACjC,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM;QAC5B,CAAC,CAAC,QAAQ,CAAC,MAAM;QACjB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IAChF,OAAO,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,KAA+B,EAC/B,EAAU,EACV,MAAe;IAEf,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,EAAE,EAAE,CAAC,CAAC;IACrE,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,KAA+B,EAC/B,EAAU,EACV,KAAc;IAEd,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,EAAE,EAAE,CAAC,CAAC;IACrE,MAAM,KAAK,GAAG,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAE,KAAiC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3F,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE;QACf,KAAK,EAAE,QAAQ;QACf,6EAA6E;QAC7E,KAAK,EAAE,kBAAkB,CAAC,KAAK,CAAC;QAChC,SAAS,EAAE,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;QACxE,MAAM,EAAE;YACN,MAAM,EAAE,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG;YACnE,IAAI,EAAE,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI;SAC/D;QACD,UAAU,EAAE,MAAM,EAAE;KACrB,CAAC,CAAC;AACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;AAEzD;;;;;GAKG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA+B;IAEzD,OAAO,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAU9B,SAAS,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,IAAI;CAMlD"}
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;AAEzD;;;;;GAKG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA+B;IAEzD,OAAO,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAQ7B;IAED,SAAS,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,IAAI,CAKhD;CACF"}
package/dist/index.d.ts CHANGED
@@ -1,8 +1,10 @@
1
1
  export * from "./token.js";
2
2
  export * from "./server.js";
3
+ export * from "./delegation-admission.js";
3
4
  export * from "./writer-lease.js";
4
5
  export * from "./terminate.js";
5
6
  export * from "./client.js";
7
+ export * from "./daemon-shutdown-rpc.js";
6
8
  export * from "./events.js";
7
9
  export * from "./interactions.js";
8
10
  export * from "./operator-decisions.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC"}
package/dist/index.js CHANGED
@@ -1,8 +1,10 @@
1
1
  export * from "./token.js";
2
2
  export * from "./server.js";
3
+ export * from "./delegation-admission.js";
3
4
  export * from "./writer-lease.js";
4
5
  export * from "./terminate.js";
5
6
  export * from "./client.js";
7
+ export * from "./daemon-shutdown-rpc.js";
6
8
  export * from "./events.js";
7
9
  export * from "./interactions.js";
8
10
  export * from "./operator-decisions.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { DurableJournal } from "@claudexor/journal";
2
- import type { ControlPendingInteraction, InteractionAnswerSet, InteractionRequest } from "@claudexor/schema";
2
+ import type { ControlPendingInteraction, InteractionAnswerSet, InteractionHandlerRelease, InteractionRequest } from "@claudexor/schema";
3
3
  /** Structural twin of the orchestrator's PendingInteractionContext. */
4
4
  export interface InteractionContext {
5
5
  runId: string;
@@ -8,7 +8,7 @@ export interface InteractionContext {
8
8
  harnessId: string;
9
9
  request: InteractionRequest;
10
10
  requestedAt: string;
11
- timeoutAt: string;
11
+ timeoutAt: string | null;
12
12
  }
13
13
  export type InteractionAnswerStatus = "delivered" | "not_found" | "already_resolved" | "rejected";
14
14
  export type InteractionTerminal = "answered" | "timeout" | "run_terminal" | "interrupted";
@@ -37,7 +37,7 @@ export declare class InteractionRegistry {
37
37
  forRequest(params: unknown): InteractionStore;
38
38
  all(): InteractionStore[];
39
39
  });
40
- register(ctx: InteractionContext, params: unknown): Promise<InteractionAnswerSet | null>;
40
+ register(ctx: InteractionContext, params: unknown): Promise<InteractionAnswerSet | InteractionHandlerRelease>;
41
41
  answer(runId: string, interactionId: string, rawAnswers: unknown): {
42
42
  status: InteractionAnswerStatus;
43
43
  message?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"interactions.d.ts","sourceRoot":"","sources":["../src/interactions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EACV,yBAAyB,EACzB,oBAAoB,EACpB,kBAAkB,EACnB,MAAM,mBAAmB,CAAC;AAM3B,uEAAuE;AACvE,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,kBAAkB,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,uBAAuB,GAAG,WAAW,GAAG,WAAW,GAAG,kBAAkB,GAAG,UAAU,CAAC;AAClG,MAAM,MAAM,mBAAmB,GAAG,UAAU,GAAG,SAAS,GAAG,cAAc,GAAG,aAAa,CAAC;AAW1F,oEAAoE;AACpE,qBAAa,gBAAgB;IAIf,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgD;IACxE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;gBAEjB,OAAO,EAAE,cAAc;IAKpD,OAAO,CAAC,GAAG,EAAE,kBAAkB,GAAG,yBAAyB;IAoB3D,OAAO,CACL,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,mBAAmB,GAC5B,UAAU,GAAG,WAAW,GAAG,kBAAkB;IAQhD,UAAU,CACR,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,OAAO,CAAC,mBAAmB,EAAE,cAAc,GAAG,aAAa,CAAC,GACrE,MAAM,EAAE;IAMX,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS;IAMhF,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,yBAAyB,EAAE;IAIzD,kBAAkB,IAAI,IAAI;IAO1B,OAAO,CAAC,MAAM;IAgBd,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,eAAe;CAOxB;AAQD,2EAA2E;AAC3E,qBAAa,mBAAmB;IAI5B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHzB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAgC;gBAGlC,MAAM,EAAE;QACvB,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,gBAAgB,CAAC;QAC9C,GAAG,IAAI,gBAAgB,EAAE,CAAC;KAC3B;IAGH,QAAQ,CAAC,GAAG,EAAE,kBAAkB,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;IAaxF,MAAM,CACJ,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,OAAO,GAClB;QAAE,MAAM,EAAE,uBAAuB,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;IAwBxD,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAS/B,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,yBAAyB,EAAE;IAKzD,OAAO,CAAC,KAAK;CAYd;AAED,wBAAgB,qBAAqB;;sBAGf,cAAc;sBACd,gBAAgB;EAErC"}
1
+ {"version":3,"file":"interactions.d.ts","sourceRoot":"","sources":["../src/interactions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EACV,yBAAyB,EACzB,oBAAoB,EACpB,yBAAyB,EACzB,kBAAkB,EACnB,MAAM,mBAAmB,CAAC;AAM3B,uEAAuE;AACvE,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,kBAAkB,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,MAAM,uBAAuB,GAAG,WAAW,GAAG,WAAW,GAAG,kBAAkB,GAAG,UAAU,CAAC;AAClG,MAAM,MAAM,mBAAmB,GAAG,UAAU,GAAG,SAAS,GAAG,cAAc,GAAG,aAAa,CAAC;AAW1F,oEAAoE;AACpE,qBAAa,gBAAgB;IAIf,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgD;IACxE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAE9C,YAA6B,OAAO,EAAE,cAAc,EAGnD;IAED,OAAO,CAAC,GAAG,EAAE,kBAAkB,GAAG,yBAAyB,CAkB1D;IAED,OAAO,CACL,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,mBAAmB,GAC5B,UAAU,GAAG,WAAW,GAAG,kBAAkB,CAM/C;IAED,UAAU,CACR,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,OAAO,CAAC,mBAAmB,EAAE,cAAc,GAAG,aAAa,CAAC,GACrE,MAAM,EAAE,CAIV;IAED,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAI/E;IAED,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,yBAAyB,EAAE,CAExD;IAED,kBAAkB,IAAI,IAAI,CAKzB;IAED,OAAO,CAAC,MAAM;IAgBd,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,eAAe;CAOxB;AAQD,2EAA2E;AAC3E,qBAAa,mBAAmB;IAI5B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHzB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAgC;IAErD,YACmB,MAAM,EAAE;QACvB,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,gBAAgB,CAAC;QAC9C,GAAG,IAAI,gBAAgB,EAAE,CAAC;KAC3B,EACC;IAEJ,QAAQ,CACN,GAAG,EAAE,kBAAkB,EACvB,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,oBAAoB,GAAG,yBAAyB,CAAC,CAc3D;IAED,MAAM,CACJ,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,OAAO,GAClB;QAAE,MAAM,EAAE,uBAAuB,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAsBvD;IAED,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAO9B;IAED,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,yBAAyB,EAAE,CAGxD;IAED,OAAO,CAAC,KAAK;CAYd;AASD,wBAAgB,qBAAqB;IAEjC,IAAI;IACJ,MAAM,YAAY,cAAc;IAChC,QAAQ,UAAU,gBAAgB;EAErC"}
@@ -112,13 +112,16 @@ export class InteractionRegistry {
112
112
  }
113
113
  register(ctx, params) {
114
114
  this.prune();
115
+ // Validate before the durable request append: a malformed internal
116
+ // deadline must not leave an unanswerable journal row without a live owner.
117
+ const expiresAtMs = parseExpiry(ctx.timeoutAt);
115
118
  const store = this.stores.forRequest(params);
116
119
  store.request(ctx);
117
120
  return new Promise((resolve) => {
118
121
  this.live.set(interactionKey(ctx.runId, ctx.request.interaction_id), {
119
122
  store,
120
123
  resolve,
121
- expiresAtMs: Date.parse(ctx.timeoutAt) || Date.now() + 900_000,
124
+ expiresAtMs,
122
125
  });
123
126
  });
124
127
  }
@@ -153,7 +156,7 @@ export class InteractionRegistry {
153
156
  if (!key.startsWith(`${runId}\u0000`))
154
157
  continue;
155
158
  this.live.delete(key);
156
- entry.resolve(null);
159
+ entry.resolve({ kind: "released", reason: "run_terminal" });
157
160
  }
158
161
  }
159
162
  pendingForRun(runId) {
@@ -163,17 +166,25 @@ export class InteractionRegistry {
163
166
  prune() {
164
167
  const now = Date.now();
165
168
  for (const [key, entry] of this.live) {
166
- if (entry.expiresAtMs > now)
169
+ if (entry.expiresAtMs === null || entry.expiresAtMs > now)
167
170
  continue;
168
171
  const split = key.indexOf("\u0000");
169
172
  const runId = key.slice(0, split);
170
173
  const interactionId = key.slice(split + 1);
171
174
  entry.store.resolve(runId, interactionId, "timeout");
172
175
  this.live.delete(key);
173
- entry.resolve(null);
176
+ entry.resolve({ kind: "released", reason: "timeout" });
174
177
  }
175
178
  }
176
179
  }
180
+ function parseExpiry(timeoutAt) {
181
+ if (timeoutAt === null)
182
+ return null;
183
+ const value = Date.parse(timeoutAt);
184
+ if (!Number.isFinite(value))
185
+ throw new Error("invalid interaction timeoutAt");
186
+ return value;
187
+ }
177
188
  export function interactionProjection() {
178
189
  return {
179
190
  name: "interactions",
@@ -1 +1 @@
1
- {"version":3,"file":"interactions.js","sourceRoot":"","sources":["../src/interactions.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,yBAAyB,IAAI,wBAAwB,EACrD,oBAAoB,IAAI,0BAA0B,GACnD,MAAM,mBAAmB,CAAC;AAsB3B,MAAM,SAAS,GAAG,uBAAuB,CAAC;AAC1C,MAAM,QAAQ,GAAG,sBAAsB,CAAC;AAExC,oEAAoE;AACpE,MAAM,OAAO,gBAAgB;IAIE;IAHZ,OAAO,GAAG,IAAI,GAAG,EAAqC,CAAC;IACvD,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IAE9C,YAA6B,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;QAClD,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,IAAI,CAAC,qBAAqB,EAAE,CAAC;IAC/B,CAAC;IAED,OAAO,CAAC,GAAuB;QAC7B,MAAM,KAAK,GAAG,wBAAwB,CAAC,KAAK,CAAC;YAC3C,aAAa,EAAE,GAAG,CAAC,OAAO,CAAC,cAAc;YACzC,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,UAAU,EAAE,GAAG,CAAC,OAAO,CAAC,WAAW;YACnC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,SAAS;YAChC,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,SAAS,EAAE,GAAG,CAAC,SAAS;SACzB,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;QAC7D,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACpD,MAAM,IAAI,KAAK,CAAC,0BAA0B,KAAK,CAAC,aAAa,cAAc,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;QAC7F,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC7B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,CACL,KAAa,EACb,aAAqB,EACrB,QAA6B;QAE7B,MAAM,GAAG,GAAG,cAAc,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QACjD,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,kBAAkB,CAAC;QACtD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,WAAW,CAAC;QAC/C,IAAI,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC5E,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,UAAU,CACR,KAAa,EACb,QAAsE;QAEtE,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACrF,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC;YAAE,IAAI,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC1F,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,MAAM,CAAC,KAAa,EAAE,aAAqB;QACzC,MAAM,GAAG,GAAG,cAAc,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QACjD,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,SAAS,CAAC;QAC5C,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IACzD,CAAC;IAED,aAAa,CAAC,KAAa;QACzB,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;IAC7E,CAAC;IAED,kBAAkB;QAChB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YAAE,wBAAwB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACjF,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YACtC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC1F,CAAC;IACH,CAAC;IAEO,MAAM;QACZ,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YAC5C,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC9B,MAAM,KAAK,GAAG,wBAAwB,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC7D,MAAM,GAAG,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;gBAC7D,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBACpD,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;gBAC3D,CAAC;gBACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC/B,CAAC;iBAAM,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACpC,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QACD,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAEO,qBAAqB;QAC3B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAoB,CAAC;QAC1C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1C,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YACzC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAC9B,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC9B,CAAC;QACD,KAAK,MAAM,CAAC,KAAK,EAAE,cAAc,CAAC,IAAI,KAAK,EAAE,CAAC;YAC5C,IAAI,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAEO,gBAAgB,CAAC,KAA4B;QACnD,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACtC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAEO,eAAe,CAAC,KAA4B;QAClD,KAAK,MAAM,aAAa,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;YACjD,MAAM,GAAG,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;YACvD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;YAC1F,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;CACF;AAQD,2EAA2E;AAC3E,MAAM,OAAO,mBAAmB;IAIX;IAHF,IAAI,GAAG,IAAI,GAAG,EAAqB,CAAC;IAErD,YACmB,MAGhB;QAHgB,WAAM,GAAN,MAAM,CAGtB;IACA,CAAC;IAEJ,QAAQ,CAAC,GAAuB,EAAE,MAAe;QAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC7C,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACnB,OAAO,IAAI,OAAO,CAA8B,CAAC,OAAO,EAAE,EAAE;YAC1D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;gBACnE,KAAK;gBACL,OAAO;gBACP,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO;aAC/D,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CACJ,KAAa,EACb,aAAqB,EACrB,UAAmB;QAEnB,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,0BAA0B,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,iBAAiB,EAAE,CAAC;QAC/F,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM;aACtB,GAAG,EAAE;aACL,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,SAAS,CAAC,CAAC;QAC7E,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,CAAC,KAAK,EAAE,aAAa,CAAC,EAAE,CAAC;QAC1F,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;QAC/D,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;YAC1B,OAAO;gBACL,MAAM,EAAE,MAAM,KAAK,kBAAkB,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,WAAW;gBACxE,OAAO,EAAE,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS;aACnF,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,GAAG,cAAc,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QACjD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACtB,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5B,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IACjC,CAAC;IAED,UAAU,CAAC,KAAa;QACtB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;YAAE,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAC/E,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACrC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,KAAK,QAAQ,CAAC;gBAAE,SAAS;YAChD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACtB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAED,aAAa,CAAC,KAAa;QACzB,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1E,CAAC;IAEO,KAAK;QACX,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACrC,IAAI,KAAK,CAAC,WAAW,GAAG,GAAG;gBAAE,SAAS;YACtC,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACpC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAClC,MAAM,aAAa,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAC3C,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;YACrD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACtB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;CACF;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO;QACL,IAAI,EAAE,cAAc;QACpB,MAAM,EAAE,CAAC,OAAuB,EAAE,EAAE,CAAC,IAAI,gBAAgB,CAAC,OAAO,CAAC;QAClE,QAAQ,EAAE,CAAC,KAAuB,EAAE,EAAE,CAAC,KAAK,CAAC,kBAAkB,EAAE;KAClE,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAa,EAAE,aAAqB;IAC1D,OAAO,GAAG,KAAK,SAAS,aAAa,EAAE,CAAC;AAC1C,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,KAAuC,CAAC;IACtD,MAAM,SAAS,GAA0B,CAAC,UAAU,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;IAChG,IACE,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;QAC/B,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC;QACpC,KAAK,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC;QACjC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,QAAQ,IAAI,CAAC,EAAE,CAAC;QAChE,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,QAA+B,CAAC,EAC1D,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IACD,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,cAAc,EAAE,CAAC,GAAG,KAAK,CAAC,cAAc,CAAC;QACzC,QAAQ,EAAE,KAAK,CAAC,QAA+B;KAChD,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAa,EAAE,aAAqB;IAC1D,OAAO,2BAA2B,aAAa,cAAc,KAAK,GAAG,CAAC;AACxE,CAAC"}
1
+ {"version":3,"file":"interactions.js","sourceRoot":"","sources":["../src/interactions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ export declare const JOB_STATES: readonly ["queued", "running", "succeeded", "failed", "cancelled", "interrupted"];
2
+ export type JobState = (typeof JOB_STATES)[number];
3
+ export interface JobRecord {
4
+ id: string;
5
+ state: JobState;
6
+ params: unknown;
7
+ result?: unknown;
8
+ error?: string;
9
+ errorCode?: string;
10
+ errorStatus?: number;
11
+ errorRetryable?: boolean;
12
+ errorRequiredActions?: string[];
13
+ errorContext?: Record<string, unknown>;
14
+ createdAt: string;
15
+ runId?: string;
16
+ taskId?: string;
17
+ runDir?: string;
18
+ startedAt?: string;
19
+ finishedAt?: string;
20
+ }
21
+ export declare function jobStateFromResult(result: unknown, aborted: boolean): JobState;
22
+ export declare function resultReason(result: unknown): string | null;
23
+ export declare function resultSummary(result: unknown): string | null;
24
+ export declare function publicJobRecord(record: JobRecord): JobRecord;
25
+ //# sourceMappingURL=job-record.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job-record.d.ts","sourceRoot":"","sources":["../src/job-record.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,YACrB,QAAQ,EACR,SAAS,EACT,WAAW,EACX,QAAQ,EACR,WAAW,EACX,aAAa,CACL,CAAC;AACX,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnD,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,QAAQ,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,QAAQ,CAe9E;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAG3D;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAG5D;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,CAU5D"}
@@ -0,0 +1,62 @@
1
+ import { redactSecrets, safeProblemContext, safeProblemRequiredActions } from "@claudexor/util";
2
+ export const JOB_STATES = [
3
+ "queued",
4
+ "running",
5
+ "succeeded",
6
+ "failed",
7
+ "cancelled",
8
+ "interrupted",
9
+ ];
10
+ export function jobStateFromResult(result, aborted) {
11
+ // The engine's synchronous terminal commit is the cutoff. A recognizable
12
+ // lifecycle already reflects any abort present at that boundary, while a
13
+ // later abort must not rewrite the durable result.
14
+ const lifecycle = resultString(result, "lifecycle");
15
+ if (lifecycle === "succeeded" ||
16
+ lifecycle === "failed" ||
17
+ lifecycle === "cancelled" ||
18
+ lifecycle === "interrupted") {
19
+ return lifecycle;
20
+ }
21
+ // Preserve the daemon's fail-closed fallback for a malformed runner result.
22
+ return aborted ? "cancelled" : "failed";
23
+ }
24
+ export function resultReason(result) {
25
+ if (!result || typeof result !== "object" || Array.isArray(result))
26
+ return null;
27
+ return resultString(result["facts"], "reason");
28
+ }
29
+ export function resultSummary(result) {
30
+ const summary = resultString(result, "summary");
31
+ return summary === null ? null : redactSecrets(summary);
32
+ }
33
+ export function publicJobRecord(record) {
34
+ return {
35
+ ...record,
36
+ error: record.error ? redactSecrets(record.error) : undefined,
37
+ ...(record.errorRequiredActions
38
+ ? { errorRequiredActions: safeProblemRequiredActions(record.errorRequiredActions) }
39
+ : {}),
40
+ ...(record.errorContext ? { errorContext: safeProblemContext(record.errorContext) } : {}),
41
+ params: redactParams(record.params),
42
+ };
43
+ }
44
+ function resultString(result, key) {
45
+ if (!result || typeof result !== "object" || Array.isArray(result))
46
+ return null;
47
+ const value = result[key];
48
+ return typeof value === "string" ? value : null;
49
+ }
50
+ function redactParams(value) {
51
+ if (typeof value === "string")
52
+ return redactSecrets(value);
53
+ if (Array.isArray(value))
54
+ return value.map(redactParams);
55
+ if (!value || typeof value !== "object")
56
+ return value;
57
+ return Object.fromEntries(Object.entries(value).map(([key, child]) => [
58
+ key,
59
+ key === "prompt" && typeof child === "string" ? redactSecrets(child) : redactParams(child),
60
+ ]));
61
+ }
62
+ //# sourceMappingURL=job-record.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job-record.js","sourceRoot":"","sources":["../src/job-record.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { type CommandAuthority } from "./command-authority.js";
2
+ import type { JobRecord } from "./job-record.js";
3
+ interface JobErrorSettlement {
4
+ thrown: unknown;
5
+ record: JobRecord;
6
+ aborted: boolean;
7
+ commands: CommandAuthority;
8
+ update: (record: JobRecord, patch: Partial<JobRecord>) => JobRecord;
9
+ }
10
+ /**
11
+ * Settle a runner throw without allowing local terminal-finalization failures
12
+ * to overwrite a terminal event already accepted by durable authority.
13
+ */
14
+ export declare function settleJobError({ thrown, record, aborted, commands, update, }: JobErrorSettlement): JobRecord;
15
+ export {};
16
+ //# sourceMappingURL=job-settlement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job-settlement.d.ts","sourceRoot":"","sources":["../src/job-settlement.ts"],"names":[],"mappings":"AAMA,OAAO,EAAqB,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,UAAU,kBAAkB;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,SAAS,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,MAAM,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK,SAAS,CAAC;CACrE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAC7B,MAAM,EACN,MAAM,EACN,OAAO,EACP,QAAQ,EACR,MAAM,GACP,EAAE,kBAAkB,GAAG,SAAS,CA8ChC"}