@claudexor/daemon 3.1.2 → 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 (86) hide show
  1. package/README.md +1 -1
  2. package/dist/client.d.ts +17 -0
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +7 -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 +8 -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/delivery-command.d.ts +28 -0
  19. package/dist/delivery-command.d.ts.map +1 -0
  20. package/dist/delivery-command.js +37 -0
  21. package/dist/delivery-command.js.map +1 -0
  22. package/dist/events.d.ts.map +1 -1
  23. package/dist/index.d.ts +1 -0
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +1 -0
  26. package/dist/index.js.map +1 -1
  27. package/dist/interactions.d.ts +3 -3
  28. package/dist/interactions.d.ts.map +1 -1
  29. package/dist/interactions.js +15 -4
  30. package/dist/interactions.js.map +1 -1
  31. package/dist/job-record.d.ts +2 -0
  32. package/dist/job-record.d.ts.map +1 -1
  33. package/dist/job-record.js +14 -7
  34. package/dist/job-record.js.map +1 -1
  35. package/dist/job-settlement.d.ts +16 -0
  36. package/dist/job-settlement.d.ts.map +1 -0
  37. package/dist/job-settlement.js +56 -0
  38. package/dist/job-settlement.js.map +1 -0
  39. package/dist/journal-manager.d.ts +5 -5
  40. package/dist/journal-manager.d.ts.map +1 -1
  41. package/dist/journal-manager.js.map +1 -1
  42. package/dist/journal-recovery-files.d.ts +1 -1
  43. package/dist/operator-decisions.d.ts +10 -1
  44. package/dist/operator-decisions.d.ts.map +1 -1
  45. package/dist/operator-decisions.js +18 -10
  46. package/dist/operator-decisions.js.map +1 -1
  47. package/dist/project-partitions.d.ts +17 -9
  48. package/dist/project-partitions.d.ts.map +1 -1
  49. package/dist/project-partitions.js +13 -34
  50. package/dist/project-partitions.js.map +1 -1
  51. package/dist/projects.d.ts.map +1 -1
  52. package/dist/projects.js.map +1 -1
  53. package/dist/quota-registry.d.ts +62 -13
  54. package/dist/quota-registry.d.ts.map +1 -1
  55. package/dist/quota-registry.js +92 -9
  56. package/dist/quota-registry.js.map +1 -1
  57. package/dist/resource-store.d.ts.map +1 -1
  58. package/dist/run-events.d.ts.map +1 -1
  59. package/dist/run-events.js.map +1 -1
  60. package/dist/server.d.ts +7 -7
  61. package/dist/server.d.ts.map +1 -1
  62. package/dist/server.js +26 -50
  63. package/dist/server.js.map +1 -1
  64. package/dist/terminal-authority.d.ts +39 -0
  65. package/dist/terminal-authority.d.ts.map +1 -0
  66. package/dist/terminal-authority.js +58 -0
  67. package/dist/terminal-authority.js.map +1 -0
  68. package/dist/terminate.d.ts +14 -0
  69. package/dist/terminate.d.ts.map +1 -1
  70. package/dist/terminate.js +13 -1
  71. package/dist/terminate.js.map +1 -1
  72. package/dist/thread-head-ping.d.ts.map +1 -1
  73. package/dist/thread-head-ping.js.map +1 -1
  74. package/dist/thread-store-support.d.ts +7 -0
  75. package/dist/thread-store-support.d.ts.map +1 -1
  76. package/dist/thread-store-support.js +22 -0
  77. package/dist/thread-store-support.js.map +1 -1
  78. package/dist/threads.d.ts +6 -15
  79. package/dist/threads.d.ts.map +1 -1
  80. package/dist/threads.js +23 -37
  81. package/dist/threads.js.map +1 -1
  82. package/dist/writer-lease.d.ts +4 -0
  83. package/dist/writer-lease.d.ts.map +1 -1
  84. package/dist/writer-lease.js +1 -0
  85. package/dist/writer-lease.js.map +1 -1
  86. package/package.json +7 -6
@@ -25,13 +25,17 @@ export declare class QuotaRegistry {
25
25
  private absences;
26
26
  private pollFailures;
27
27
  private pollNotBefore;
28
+ /** Signature carried by the last durable projection marker. Raw quota
29
+ * evidence may span several records; this is the commit/recovery boundary
30
+ * consumed by snapshot-then-SSE clients. */
31
+ private lastPublishedProjectionSignature;
32
+ private refreshInFlight;
28
33
  constructor(journal: DurableJournal, refreshers?: readonly QuotaRefresher[], now?: () => Date, subjects?: QuotaSubjectUniverse);
29
34
  read(): {
30
35
  snapshots: {
31
- source: "codex_app_server" | "codex_rollout" | "claude_statusline" | "claude_api_retry" | "claude_oauth_usage";
32
36
  subject: {
33
37
  harness: string;
34
- credential_route: "local" | "vendor_native" | "managed_api_key";
38
+ credential_route: "local" | "managed_api_key" | "vendor_native";
35
39
  plan_label: string | null;
36
40
  subject_id: string | null;
37
41
  };
@@ -43,18 +47,19 @@ export declare class QuotaRegistry {
43
47
  resets_at: string | null;
44
48
  cooldown_until: string | null;
45
49
  }[];
50
+ source: "claude_api_retry" | "claude_oauth_usage" | "claude_statusline" | "codex_app_server" | "codex_rollout";
46
51
  observed_at: string;
47
- freshness: "unknown" | "fresh" | "stale";
52
+ freshness: "fresh" | "stale" | "unknown";
48
53
  }[];
49
54
  absences: {
50
- detail: string | null;
51
- reason: "not_logged_in" | "transport_unavailable" | "platform_unsupported" | "refresh_failed" | "no_source";
52
55
  subject: {
53
56
  harness: string;
54
- credential_route: "local" | "vendor_native" | "managed_api_key";
57
+ credential_route: "local" | "managed_api_key" | "vendor_native";
55
58
  plan_label: string | null;
56
59
  subject_id: string | null;
57
60
  };
61
+ reason: "no_source" | "not_logged_in" | "platform_unsupported" | "refresh_failed" | "transport_unavailable";
62
+ detail: string | null;
58
63
  observed_at: string;
59
64
  }[];
60
65
  refreshed_at: string | null;
@@ -66,10 +71,9 @@ export declare class QuotaRegistry {
66
71
  private activeSnapshots;
67
72
  refresh(): Promise<{
68
73
  snapshots: {
69
- source: "codex_app_server" | "codex_rollout" | "claude_statusline" | "claude_api_retry" | "claude_oauth_usage";
70
74
  subject: {
71
75
  harness: string;
72
- credential_route: "local" | "vendor_native" | "managed_api_key";
76
+ credential_route: "local" | "managed_api_key" | "vendor_native";
73
77
  plan_label: string | null;
74
78
  subject_id: string | null;
75
79
  };
@@ -81,26 +85,67 @@ export declare class QuotaRegistry {
81
85
  resets_at: string | null;
82
86
  cooldown_until: string | null;
83
87
  }[];
88
+ source: "claude_api_retry" | "claude_oauth_usage" | "claude_statusline" | "codex_app_server" | "codex_rollout";
84
89
  observed_at: string;
85
- freshness: "unknown" | "fresh" | "stale";
90
+ freshness: "fresh" | "stale" | "unknown";
86
91
  }[];
87
92
  absences: {
88
- detail: string | null;
89
- reason: "not_logged_in" | "transport_unavailable" | "platform_unsupported" | "refresh_failed" | "no_source";
90
93
  subject: {
91
94
  harness: string;
92
- credential_route: "local" | "vendor_native" | "managed_api_key";
95
+ credential_route: "local" | "managed_api_key" | "vendor_native";
93
96
  plan_label: string | null;
94
97
  subject_id: string | null;
95
98
  };
99
+ reason: "no_source" | "not_logged_in" | "platform_unsupported" | "refresh_failed" | "transport_unavailable";
100
+ detail: string | null;
96
101
  observed_at: string;
97
102
  }[];
98
103
  refreshed_at: string | null;
99
104
  }>;
105
+ /** Fresh quota plus the exact global-journal fence for snapshot-then-SSE.
106
+ * The cursor is captured inside refreshCycle, synchronously with `response`,
107
+ * so a later append can never be skipped by a client resuming from it. */
108
+ refreshWithCursor(): Promise<{
109
+ response: {
110
+ snapshots: {
111
+ subject: {
112
+ harness: string;
113
+ credential_route: "local" | "managed_api_key" | "vendor_native";
114
+ plan_label: string | null;
115
+ subject_id: string | null;
116
+ };
117
+ constraints: {
118
+ id: string;
119
+ label: string;
120
+ used_ratio: number | null;
121
+ window_seconds: number | null;
122
+ resets_at: string | null;
123
+ cooldown_until: string | null;
124
+ }[];
125
+ source: "claude_api_retry" | "claude_oauth_usage" | "claude_statusline" | "codex_app_server" | "codex_rollout";
126
+ observed_at: string;
127
+ freshness: "fresh" | "stale" | "unknown";
128
+ }[];
129
+ absences: {
130
+ subject: {
131
+ harness: string;
132
+ credential_route: "local" | "managed_api_key" | "vendor_native";
133
+ plan_label: string | null;
134
+ subject_id: string | null;
135
+ };
136
+ reason: "no_source" | "not_logged_in" | "platform_unsupported" | "refresh_failed" | "transport_unavailable";
137
+ detail: string | null;
138
+ observed_at: string;
139
+ }[];
140
+ refreshed_at: string | null;
141
+ };
142
+ quotaEventCursor: string;
143
+ }>;
100
144
  /** Cycle-local core: the produced-snapshot count belongs to THIS invocation
101
145
  * (wave-2 finding: a shared mutable field let a concurrent user refresh
102
146
  * overwrite the poller's view of its own cycle). */
103
147
  private refreshCycle;
148
+ private performRefreshCycle;
104
149
  /** Aggregate one cycle's snapshots + absence claims against the subject
105
150
  * universe (release cut V11a): a subject with a fresh-or-stale snapshot from
106
151
  * ANY source has no absence; otherwise the first refresher-claimed absence
@@ -120,13 +165,17 @@ export declare class QuotaRegistry {
120
165
  pollStale(): Promise<boolean>;
121
166
  ingest(harnessId: string, value: unknown): void;
122
167
  upsert(value: QuotaSnapshot): void;
168
+ private recordUpsert;
123
169
  removeSubject(harness: string, subjectId: string): number;
170
+ private appendProjectionMarker;
171
+ private publishClockTransitionIfNeeded;
172
+ private projectionSignature;
124
173
  validateProjection(): void;
125
174
  private upsertCooldown;
126
175
  private apply;
127
176
  private remove;
128
177
  }
129
- export declare function quotaProjection(refreshers?: readonly QuotaRefresher[], subjects?: QuotaSubjectUniverse): {
178
+ export declare function quotaProjection(refreshers?: readonly QuotaRefresher[], subjects?: QuotaSubjectUniverse, now?: () => Date): {
130
179
  name: string;
131
180
  create: (journal: DurableJournal) => QuotaRegistry;
132
181
  validate: (registry: QuotaRegistry) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"quota-registry.d.ts","sourceRoot":"","sources":["../src/quota-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAKL,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,YAAY,EAClB,MAAM,mBAAmB,CAAC;AAW3B;;uEAEuE;AACvE,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;CAC3B;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAE/D;;iDAEiD;AACjD,MAAM,MAAM,oBAAoB,GAAG,MAAM,YAAY,EAAE,CAAC;AAExD,iEAAiE;AACjE,qBAAa,aAAa;IAUtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAZ3B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoC;IAC9D;;iDAE6C;IAC7C,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,aAAa,CAAK;gBAGP,OAAO,EAAE,cAAc,EACvB,UAAU,GAAE,SAAS,cAAc,EAAO,EAC1C,GAAG,GAAE,MAAM,IAAuB,EAClC,QAAQ,GAAE,oBAA+B;IAc5D,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IASJ;;;6EAGyE;IACzE,OAAO,CAAC,eAAe;IAgBjB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAIb;;wDAEoD;YACtC,YAAY;IAsC1B;;;;;uCAKmC;IACnC,OAAO,CAAC,iBAAiB;IA0BzB;;8EAE0E;IAC1E,OAAO,CAAC,cAAc;IAOtB;;yDAEqD;IACrD,oBAAoB,IAAI,IAAI;IAK5B,2FAA2F;IACrF,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IA8BnC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IA4B/C,MAAM,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAMlC,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAUzD,kBAAkB,IAAI,IAAI;IAI1B,OAAO,CAAC,cAAc;IAgDtB,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,MAAM;CAUf;AAED,wBAAgB,eAAe,CAC7B,UAAU,GAAE,SAAS,cAAc,EAAO,EAC1C,QAAQ,GAAE,oBAA+B;;sBAIrB,cAAc;yBAEX,aAAa;EAErC"}
1
+ {"version":3,"file":"quota-registry.d.ts","sourceRoot":"","sources":["../src/quota-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAKL,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,YAAY,EAClB,MAAM,mBAAmB,CAAC;AAY3B;;uEAEuE;AACvE,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;CAC3B;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAE/D;;iDAEiD;AACjD,MAAM,MAAM,oBAAoB,GAAG,MAAM,YAAY,EAAE,CAAC;AAExD,iEAAiE;AACjE,qBAAa,aAAa;IAetB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAjB3B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoC;IAC9D;;iDAE6C;IAC7C,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,aAAa,CAAK;IAC1B;;gDAE4C;IAC5C,OAAO,CAAC,gCAAgC,CAAuB;IAC/D,OAAO,CAAC,eAAe,CAAiE;IAExF,YACmB,OAAO,EAAE,cAAc,EACvB,UAAU,GAAE,SAAS,cAAc,EAAO,EAC1C,GAAG,GAAE,MAAM,IAAuB,EAClC,QAAQ,GAAE,oBAA+B,EA8B3D;IAED,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAOH;IAED;;;6EAGyE;IACzE,OAAO,CAAC,eAAe;IAgBjB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAEZ;IAED;;8EAE0E;IACpE,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAGtB;IAED;;wDAEoD;IACpD,OAAO,CAAC,YAAY;YASN,mBAAmB;IAkDjC;;;;;uCAKmC;IACnC,OAAO,CAAC,iBAAiB;IA0BzB;;8EAE0E;IAC1E,OAAO,CAAC,cAAc;IAOtB;;yDAEqD;IACrD,oBAAoB,IAAI,IAAI,CAG3B;IAED,2FAA2F;IACrF,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,CAgClC;IAED,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CA0B9C;IAED,MAAM,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAGjC;IAED,OAAO,CAAC,YAAY;IAMpB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CASxD;IAED,OAAO,CAAC,sBAAsB;IAe9B,OAAO,CAAC,8BAA8B;IAOtC,OAAO,CAAC,mBAAmB;IAM3B,kBAAkB,IAAI,IAAI,CAEzB;IAED,OAAO,CAAC,cAAc;IAgDtB,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,MAAM;CAUf;AAED,wBAAgB,eAAe,CAC7B,UAAU,GAAE,SAAS,cAAc,EAAO,EAC1C,QAAQ,GAAE,oBAA+B,EACzC,GAAG,GAAE,MAAM,IAAuB;IAGhC,IAAI;IACJ,MAAM,YAAY,cAAc;IAChC,QAAQ,aAAa,aAAa;EAErC"}
@@ -1,6 +1,7 @@
1
1
  import { ControlQuotaResponse, HarnessEvent, QuotaSnapshot as QuotaSnapshotSchema, } from "@claudexor/schema";
2
2
  const UPSERTED = "quota.snapshot.upserted";
3
3
  const REMOVED = "quota.subject.removed";
4
+ const PROJECTION_UPDATED = "quota.projection.updated";
4
5
  const POLL_BACKOFF_MS = 60_000;
5
6
  const MAX_POLL_BACKOFF_MS = 15 * 60_000;
6
7
  /** Snapshots older than this are pruned from every projection read (W17):
@@ -20,22 +21,44 @@ export class QuotaRegistry {
20
21
  absences = [];
21
22
  pollFailures = 0;
22
23
  pollNotBefore = 0;
24
+ /** Signature carried by the last durable projection marker. Raw quota
25
+ * evidence may span several records; this is the commit/recovery boundary
26
+ * consumed by snapshot-then-SSE clients. */
27
+ lastPublishedProjectionSignature = null;
28
+ refreshInFlight = null;
23
29
  constructor(journal, refreshers = [], now = () => new Date(), subjects = () => []) {
24
30
  this.journal = journal;
25
31
  this.refreshers = refreshers;
26
32
  this.now = now;
27
33
  this.subjects = subjects;
34
+ let rawMutationAfterMarker = false;
28
35
  for (const record of journal.records()) {
29
- if (record.type === UPSERTED)
36
+ if (record.type === UPSERTED) {
30
37
  this.apply(QuotaSnapshotSchema.parse(record.payload));
38
+ rawMutationAfterMarker = true;
39
+ }
31
40
  if (record.type === REMOVED) {
32
41
  const payload = record.payload;
33
42
  if (typeof payload.harness === "string" && typeof payload.subject_id === "string") {
34
43
  this.remove(payload.harness, payload.subject_id);
35
44
  }
45
+ rawMutationAfterMarker = true;
46
+ }
47
+ if (record.type === PROJECTION_UPDATED) {
48
+ const payload = record.payload;
49
+ this.lastPublishedProjectionSignature =
50
+ typeof payload.projection_signature === "string" ? payload.projection_signature : null;
51
+ rawMutationAfterMarker = false;
36
52
  }
37
53
  }
38
54
  this.validateProjection();
55
+ // A process can stop after a durable raw mutation but before its separate
56
+ // projection marker. Replaying that state without a new marker would leave
57
+ // already-subscribed clients permanently behind. Close the recovered
58
+ // commit boundary synchronously before the projection becomes available.
59
+ if (rawMutationAfterMarker) {
60
+ this.appendProjectionMarker("recovery", this.now().toISOString());
61
+ }
39
62
  }
40
63
  read() {
41
64
  const now = this.now().getTime();
@@ -67,10 +90,27 @@ export class QuotaRegistry {
67
90
  async refresh() {
68
91
  return (await this.refreshCycle()).response;
69
92
  }
93
+ /** Fresh quota plus the exact global-journal fence for snapshot-then-SSE.
94
+ * The cursor is captured inside refreshCycle, synchronously with `response`,
95
+ * so a later append can never be skipped by a client resuming from it. */
96
+ async refreshWithCursor() {
97
+ const { response, quotaEventCursor } = await this.refreshCycle();
98
+ return { response, quotaEventCursor };
99
+ }
70
100
  /** Cycle-local core: the produced-snapshot count belongs to THIS invocation
71
101
  * (wave-2 finding: a shared mutable field let a concurrent user refresh
72
102
  * overwrite the poller's view of its own cycle). */
73
- async refreshCycle() {
103
+ refreshCycle() {
104
+ if (this.refreshInFlight)
105
+ return this.refreshInFlight;
106
+ const cycle = this.performRefreshCycle().finally(() => {
107
+ if (this.refreshInFlight === cycle)
108
+ this.refreshInFlight = null;
109
+ });
110
+ this.refreshInFlight = cycle;
111
+ return cycle;
112
+ }
113
+ async performRefreshCycle() {
74
114
  if (this.refreshers.length === 0) {
75
115
  throw Object.assign(new Error("no live vendor-owned quota refresh source is available"), {
76
116
  code: "quota_refresh_unavailable",
@@ -84,9 +124,16 @@ export class QuotaRegistry {
84
124
  for (const refresher of this.refreshers) {
85
125
  try {
86
126
  const result = await refresher();
87
- for (const snapshot of result.snapshots)
88
- this.upsert(snapshot);
89
- producedSnapshots += result.snapshots.length;
127
+ // Validate the source batch before its first durable write. A malformed
128
+ // later item must not leave earlier items applied without the cycle's
129
+ // projection marker when this is the only nominally successful source.
130
+ const snapshots = result.snapshots.map((snapshot) => QuotaSnapshotSchema.parse(snapshot));
131
+ // One refresh can contain many vendor subjects. Persist every source
132
+ // event, but publish ONE projection-level marker after the full response
133
+ // is assembled so clients never see a marker-per-item burst.
134
+ for (const snapshot of snapshots)
135
+ this.recordUpsert(snapshot);
136
+ producedSnapshots += snapshots.length;
90
137
  if (result.absences)
91
138
  claims.push(...result.absences);
92
139
  successfulSources += 1;
@@ -103,12 +150,17 @@ export class QuotaRegistry {
103
150
  }
104
151
  const now = this.now().getTime();
105
152
  this.recomputeAbsences(claims, now);
153
+ const refreshedAt = this.now().toISOString();
106
154
  const response = ControlQuotaResponse.parse({
107
155
  snapshots: this.activeSnapshots(now),
108
156
  absences: this.activeAbsences(now),
109
- refreshed_at: this.now().toISOString(),
157
+ refreshed_at: refreshedAt,
110
158
  });
111
- return { response, producedSnapshots };
159
+ // No await may appear between response construction and this marker/cursor.
160
+ // The marker makes absence-only and identical refreshes observable; its own
161
+ // cursor is the exact last event represented by this response.
162
+ const quotaEventCursor = this.appendProjectionMarker("refresh", refreshedAt, response);
163
+ return { response, producedSnapshots, quotaEventCursor };
112
164
  }
113
165
  /** Aggregate one cycle's snapshots + absence claims against the subject
114
166
  * universe (release cut V11a): a subject with a fresh-or-stale snapshot from
@@ -159,6 +211,10 @@ export class QuotaRegistry {
159
211
  async pollStale() {
160
212
  const now = this.now().getTime();
161
213
  const snapshots = this.activeSnapshots(now);
214
+ // Freshness/pruning are clock-derived projection facts. Publish the change
215
+ // even when the official refresh attempted below fails, so subscribers do
216
+ // not retain a formerly-fresh quota/next_up pairing indefinitely.
217
+ this.publishClockTransitionIfNeeded();
162
218
  if (snapshots.length > 0 && snapshots.every((snapshot) => snapshot.freshness === "fresh"))
163
219
  return false;
164
220
  if (now < this.pollNotBefore)
@@ -216,6 +272,10 @@ export class QuotaRegistry {
216
272
  }
217
273
  }
218
274
  upsert(value) {
275
+ this.recordUpsert(value);
276
+ this.appendProjectionMarker("direct_mutation", this.now().toISOString());
277
+ }
278
+ recordUpsert(value) {
219
279
  const snapshot = QuotaSnapshotSchema.parse(value);
220
280
  this.journal.append(UPSERTED, snapshot);
221
281
  this.apply(snapshot);
@@ -224,8 +284,31 @@ export class QuotaRegistry {
224
284
  const removed = [...this.snapshots.values()].filter((snapshot) => snapshot.subject.harness === harness && snapshot.subject.subject_id === subjectId).length;
225
285
  this.journal.append(REMOVED, { harness, subject_id: subjectId });
226
286
  this.remove(harness, subjectId);
287
+ this.appendProjectionMarker("direct_mutation", this.now().toISOString());
227
288
  return removed;
228
289
  }
290
+ appendProjectionMarker(reason, observedAt, response = this.read()) {
291
+ const projectionSignature = this.projectionSignature(response);
292
+ const marker = this.journal.append(PROJECTION_UPDATED, {
293
+ reason,
294
+ observed_at: observedAt,
295
+ projection_signature: projectionSignature,
296
+ });
297
+ this.lastPublishedProjectionSignature = projectionSignature;
298
+ return this.journal.cursorFor(marker);
299
+ }
300
+ publishClockTransitionIfNeeded() {
301
+ const response = this.read();
302
+ const signature = this.projectionSignature(response);
303
+ if (signature === this.lastPublishedProjectionSignature)
304
+ return;
305
+ this.appendProjectionMarker("clock_transition", this.now().toISOString(), response);
306
+ }
307
+ projectionSignature(response) {
308
+ // refreshed_at is request metadata, not projection identity. Snapshot
309
+ // freshness and absence coverage are logical facts and remain included.
310
+ return JSON.stringify({ snapshots: response.snapshots, absences: response.absences });
311
+ }
229
312
  validateProjection() {
230
313
  for (const snapshot of this.snapshots.values())
231
314
  QuotaSnapshotSchema.parse(snapshot);
@@ -281,10 +364,10 @@ export class QuotaRegistry {
281
364
  return removed;
282
365
  }
283
366
  }
284
- export function quotaProjection(refreshers = [], subjects = () => []) {
367
+ export function quotaProjection(refreshers = [], subjects = () => [], now = () => new Date()) {
285
368
  return {
286
369
  name: "quota",
287
- create: (journal) => new QuotaRegistry(journal, refreshers, () => new Date(), subjects),
370
+ create: (journal) => new QuotaRegistry(journal, refreshers, now, subjects),
288
371
  validate: (registry) => registry.validateProjection(),
289
372
  };
290
373
  }
@@ -1 +1 @@
1
- {"version":3,"file":"quota-registry.js","sourceRoot":"","sources":["../src/quota-registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"quota-registry.js","sourceRoot":"","sources":["../src/quota-registry.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"resource-store.d.ts","sourceRoot":"","sources":["../src/resource-store.ts"],"names":[],"mappings":"AAgBA,OAAO,EACL,UAAU,EACV,eAAe,EAEf,mBAAmB,EACnB,KAAK,qBAAqB,EAC3B,MAAM,mBAAmB,CAAC;AAgC3B,qGAAqG;AACrG,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmC;IAC3D,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAG9B;IACJ,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAGhC;IACJ,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;gBAE5B,IAAI,EAAE,MAAM;IAUxB,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,KAAK,CAAC;IAiC1F,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,KAAK,CAAC;IAMhE,KAAK,CACT,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,GAChC,OAAO,CAAC,UAAU,CAAC,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;IA2CxD,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,KAAK,CAAC;IAStE,QAAQ,CACN,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,cAAc,EAAE,MAAM,GACrB,UAAU,CAAC,OAAO,eAAe,CAAC,KAAK,CAAC;IAyD3C,OAAO,CAAC,IAAI,EAAE,qBAAqB,EAAE,GAAG,SAAS,GAAG,UAAU,EAAE;IAuChE,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,YAAY;CAgDrB"}
1
+ {"version":3,"file":"resource-store.d.ts","sourceRoot":"","sources":["../src/resource-store.ts"],"names":[],"mappings":"AAgBA,OAAO,EACL,UAAU,EACV,eAAe,EAEf,mBAAmB,EACnB,KAAK,qBAAqB,EAC3B,MAAM,mBAAmB,CAAC;AAgC3B,qGAAqG;AACrG,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmC;IAC3D,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAG9B;IACJ,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAGhC;IACJ,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IAExC,YAAY,IAAI,EAAE,MAAM,EAQvB;IAED,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,KAAK,CAAC,CA+BzF;IAED,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAIrE;IAEK,KAAK,CACT,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,GAChC,OAAO,CAAC,UAAU,CAAC,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAyCvD;IAED,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAOrE;IAED,QAAQ,CACN,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,cAAc,EAAE,MAAM,GACrB,UAAU,CAAC,OAAO,eAAe,CAAC,KAAK,CAAC,CAuD1C;IAED,OAAO,CAAC,IAAI,EAAE,qBAAqB,EAAE,GAAG,SAAS,GAAG,UAAU,EAAE,CAqC/D;IAED,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,YAAY;CAgDrB"}
@@ -1 +1 @@
1
- {"version":3,"file":"run-events.d.ts","sourceRoot":"","sources":["../src/run-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAY,KAAK,QAAQ,IAAI,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAI7E,kFAAkF;AAClF,qBAAa,aAAa;IACZ,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,cAAc;IAIpD,MAAM,CAAC,KAAK,EAAE,aAAa,GAAG,aAAa;IAM3C,kBAAkB,IAAI,IAAI;CAK3B;AAED,wBAAgB,kBAAkB;;sBAGZ,cAAc;sBACd,aAAa;EAElC"}
1
+ {"version":3,"file":"run-events.d.ts","sourceRoot":"","sources":["../src/run-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAY,KAAK,QAAQ,IAAI,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAI7E,kFAAkF;AAClF,qBAAa,aAAa;IACZ,OAAO,CAAC,QAAQ,CAAC,OAAO;IAApC,YAA6B,OAAO,EAAE,cAAc,EAEnD;IAED,MAAM,CAAC,KAAK,EAAE,aAAa,GAAG,aAAa,CAI1C;IAED,kBAAkB,IAAI,IAAI,CAIzB;CACF;AAED,wBAAgB,kBAAkB;IAE9B,IAAI;IACJ,MAAM,YAAY,cAAc;IAChC,QAAQ,UAAU,aAAa;EAElC"}
@@ -1 +1 @@
1
- {"version":3,"file":"run-events.js","sourceRoot":"","sources":["../src/run-events.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAkC,MAAM,mBAAmB,CAAC;AAE7E,MAAM,QAAQ,GAAG,WAAW,CAAC;AAE7B,kFAAkF;AAClF,MAAM,OAAO,aAAa;IACK;IAA7B,YAA6B,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;QAClD,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,KAAoB;QACzB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACrC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,kBAAkB;QAChB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YAC3C,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;gBAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;CACF;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,CAAC,OAAuB,EAAE,EAAE,CAAC,IAAI,aAAa,CAAC,OAAO,CAAC;QAC/D,QAAQ,EAAE,CAAC,KAAoB,EAAE,EAAE,CAAC,KAAK,CAAC,kBAAkB,EAAE;KAC/D,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"run-events.js","sourceRoot":"","sources":["../src/run-events.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAkC,MAAM,mBAAmB,CAAC;AAE7E,MAAM,QAAQ,GAAG,WAAW,CAAC;AAE7B,kFAAkF;AAClF,MAAM,OAAO,aAAa;IACK,OAAO;IAApC,YAA6B,OAAuB;uBAAvB,OAAO;QAClC,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,KAAoB;QACzB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACrC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,kBAAkB;QAChB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YAC3C,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;gBAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;CACF;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,CAAC,OAAuB,EAAE,EAAE,CAAC,IAAI,aAAa,CAAC,OAAO,CAAC;QAC/D,QAAQ,EAAE,CAAC,KAAoB,EAAE,EAAE,CAAC,KAAK,CAAC,kBAAkB,EAAE;KAC/D,CAAC;AACJ,CAAC"}
package/dist/server.d.ts CHANGED
@@ -2,6 +2,8 @@ import { type CommandAuthority } from "./command-authority.js";
2
2
  import { type DelegationAdmissionAuthority } from "./delegation-admission.js";
3
3
  import { JOB_STATES, jobStateFromResult, type JobRecord } from "./job-record.js";
4
4
  import { socketAlive } from "./socket-probe.js";
5
+ import { type RuntimeReplacementAuthority } from "./daemon-shutdown-rpc.js";
6
+ import { type TurnEnqueueProblem as TurnEnqueueProblemValue } from "@claudexor/schema";
5
7
  export { JOB_STATES, jobStateFromResult, socketAlive, type JobRecord };
6
8
  export interface RunContext {
7
9
  jobId: string;
@@ -13,7 +15,7 @@ export interface RunContext {
13
15
  }) => void;
14
16
  }
15
17
  export type RunnerFn = (params: unknown, ctx: RunContext) => Promise<unknown>;
16
- export interface DaemonOptions {
18
+ export interface DaemonOptions extends RuntimeReplacementAuthority {
17
19
  socketPath: string;
18
20
  token: string;
19
21
  runner: RunnerFn;
@@ -30,13 +32,11 @@ export interface DaemonOptions {
30
32
  /** Called when a job that carried a pre-created thread turn (params.turnId)
31
33
  * settles failure-shaped WITHOUT ever binding a run — i.e. the refusal
32
34
  * happened before the run materialized (trust gate, preflight validation).
33
- * The observer persists the reason on the turn so it is never a silent
34
- * orphan bubble. `code` is the typed throw's machine code (null if none);
35
- * `retryable` is its explicit retryability claim (undefined = no claim). */
36
- onTurnEnqueueFailed?: (turnId: string, error: string, code: string | null, retryable?: boolean) => void;
37
- /** Composition-root shutdown hook. When present, RPC shutdown must drain
38
- * every daemon-owned subsystem, not only this socket queue. */
35
+ * The observer persists one sanitized typed problem on the turn so it is
36
+ * never a silent orphan bubble and no recovery field is dropped. */
37
+ onTurnEnqueueFailed?: (turnId: string, problem: TurnEnqueueProblemValue) => void;
39
38
  onShutdownRequested?: () => Promise<void>;
39
+ onRuntimeReplacementRequested?: () => Promise<void>;
40
40
  /** Test-only barriers around command authority acquisition. */
41
41
  startupBarrier?: (barrier: "before_registry_load" | "after_registry_load") => void | Promise<void>;
42
42
  }
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/dist/server.js CHANGED
@@ -4,10 +4,14 @@ import { chmodSync, lstatSync, unlinkSync } from "node:fs";
4
4
  import { createInterface } from "node:readline";
5
5
  import { assertNoInlineSecretValues, errorCode, newId, nowIso, pathExists, redactSecrets, } from "@claudexor/util";
6
6
  import { commandStoreForId, commandStoreForRequest, commandStores, } from "./command-authority.js";
7
+ import { commandAcceptanceReceipt, findAcceptedCommand, publicAcceptedCommand, } from "./command-rpc.js";
7
8
  import { productCommandRecords, prunableCommandIds } from "./command-retention.js";
8
9
  import { admitDelegatedRequest, delegatedParentOf, isDelegatedChildRecord, } from "./delegation-admission.js";
9
10
  import { JOB_STATES, jobStateFromResult, publicJobRecord, resultReason, resultSummary, } from "./job-record.js";
11
+ import { settleJobError } from "./job-settlement.js";
10
12
  import { socketAlive } from "./socket-probe.js";
13
+ import { dispatchShutdownRpc, replacementRefusal, } from "./daemon-shutdown-rpc.js";
14
+ import { TurnEnqueueProblem, } from "@claudexor/schema";
11
15
  export { JOB_STATES, jobStateFromResult, socketAlive };
12
16
  // Daemon job state is EXACTLY the run LIFECYCLE (D8): outcome quality
13
17
  // (checks/review/reason) lives on the run's facts, projected by the control
@@ -194,11 +198,15 @@ export class DaemonServer {
194
198
  ...(err && typeof err === "object" && "status" in err
195
199
  ? { status: Number(err.status) }
196
200
  : {}),
201
+ ...(replacementRefusal(err) ? { retryable: true } : {}),
197
202
  },
198
203
  });
199
204
  }
200
205
  }
201
206
  async dispatch(method, params) {
207
+ const shutdown = dispatchShutdownRpc(method, params, this.queue.length + this.active + this.activeTasks.size, () => this.allRecords(), this.opts.onShutdownRequested ?? (() => this.stop()), this.opts.onRuntimeReplacementRequested, this.opts.runtimeIdentity, this.opts.runtimeLeaseOwner);
208
+ if (shutdown)
209
+ return shutdown;
202
210
  switch (method) {
203
211
  case "claudexor.health":
204
212
  return {
@@ -227,16 +235,9 @@ export class DaemonServer {
227
235
  // must keep returning its durable job even after the parent is fenced
228
236
  // or its monotonic eight-child allowance is full. A different request
229
237
  // under the same key still conflicts inside find().
230
- const store = commandStoreForRequest(this.opts.commands, rawRequest);
231
- const replay = store.find({
232
- params: rawRequest,
233
- idempotencyKey,
234
- clientId,
235
- operation,
236
- idempotencyParams: envelope.idempotencyRequest,
237
- });
238
+ const replay = findAcceptedCommand(this.opts.commands, envelope);
238
239
  if (replay)
239
- return { id: replay.id, state: replay.state };
240
+ return commandAcceptanceReceipt(replay, true);
240
241
  const request = this.admitDelegatedRequest(rawRequest, operation);
241
242
  const delegatedFrom = delegatedParentOf(request);
242
243
  const accepted = this.acceptCommand(request, idempotencyKey, clientId, envelope.idempotencyRequest, operation);
@@ -246,7 +247,7 @@ export class DaemonServer {
246
247
  if (!accepted.reused)
247
248
  this.queue.push(accepted.record.id);
248
249
  void this.drain();
249
- return { id: accepted.record.id, state: accepted.record.state };
250
+ return commandAcceptanceReceipt(accepted.record, accepted.reused);
250
251
  }
251
252
  case "claudexor.status": {
252
253
  const rec = this.getRecord(String(params?.id));
@@ -255,14 +256,7 @@ export class DaemonServer {
255
256
  return publicJobRecord(rec);
256
257
  }
257
258
  case "claudexor.findAccepted": {
258
- const store = commandStoreForRequest(this.opts.commands, params?.request);
259
- const record = store.find({
260
- params: params?.request,
261
- idempotencyKey: String(params?.idempotencyKey ?? ""),
262
- clientId: String(params?.clientId ?? "daemon-client"),
263
- operation: typeof params?.operation === "string" ? params.operation : undefined,
264
- });
265
- return record ? publicJobRecord(record) : null;
259
+ return publicAcceptedCommand(this.opts.commands, params);
266
260
  }
267
261
  case "claudexor.list":
268
262
  return productCommandRecords(this.allRecords()).map(publicJobRecord);
@@ -287,15 +281,6 @@ export class DaemonServer {
287
281
  this.opts.delegationAuthority.beginParentClose(runId);
288
282
  return { runId, fenced: true };
289
283
  }
290
- case "claudexor.shutdown":
291
- setTimeout(() => {
292
- const operation = this.opts.onShutdownRequested?.() ?? this.stop();
293
- void operation.catch(() => {
294
- // Fail closed: the process and ownership lease remain alive. The
295
- // composition root records the detailed failure in its private log.
296
- });
297
- }, 10);
298
- return { ok: true };
299
284
  default:
300
285
  throw new Error(`unknown method: ${method}`);
301
286
  }
@@ -454,28 +439,13 @@ export class DaemonServer {
454
439
  rec = this.updateRecord(rec, { state, result, finishedAt: nowIso() });
455
440
  }
456
441
  }
457
- catch (err) {
458
- const code = err && typeof err === "object" && "code" in err
459
- ? err.code
460
- : undefined;
461
- const status = err && typeof err === "object" && "status" in err
462
- ? err.status
463
- : undefined;
464
- const typedStatus = typeof status === "number" && Number.isInteger(status) && status >= 400 && status <= 599
465
- ? status
466
- : undefined;
467
- // Carry a typed throw's non-retryability (plan_not_ready) to the
468
- // refused-turn recorder; only an explicit boolean is a claim (round-2 #4).
469
- const retryable = err && typeof err === "object" && "retryable" in err
470
- ? err.retryable
471
- : undefined;
472
- rec = this.updateRecord(rec, {
473
- state: controller.signal.aborted ? "cancelled" : "failed",
474
- error: redactSecrets(err instanceof Error ? err.message : String(err)),
475
- ...(typeof code === "string" && code ? { errorCode: code } : {}),
476
- ...(typedStatus !== undefined ? { errorStatus: typedStatus } : {}),
477
- ...(typeof retryable === "boolean" ? { errorRetryable: retryable } : {}),
478
- finishedAt: nowIso(),
442
+ catch (thrown) {
443
+ rec = settleJobError({
444
+ thrown,
445
+ record: rec,
446
+ aborted: controller.signal.aborted,
447
+ commands: this.opts.commands,
448
+ update: (record, patch) => this.updateRecord(record, patch),
479
449
  });
480
450
  }
481
451
  finally {
@@ -504,7 +474,13 @@ export class DaemonServer {
504
474
  const turnId = rec.params?.turnId;
505
475
  if (typeof turnId === "string" && turnId) {
506
476
  try {
507
- this.opts.onTurnEnqueueFailed?.(turnId, rec.error, rec.errorCode ?? null, rec.errorRetryable);
477
+ this.opts.onTurnEnqueueFailed?.(turnId, TurnEnqueueProblem.parse({
478
+ message: rec.error,
479
+ code: rec.errorCode ?? null,
480
+ retryable: rec.errorRetryable ?? true,
481
+ required_actions: rec.errorRequiredActions ?? [],
482
+ context: rec.errorContext ?? {},
483
+ }));
508
484
  }
509
485
  catch {
510
486
  /* observer failure must not corrupt terminal bookkeeping */