@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.
- package/README.md +1 -1
- package/dist/client.d.ts +17 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +7 -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 +8 -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/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 +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/interactions.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 +2 -0
- package/dist/job-record.d.ts.map +1 -1
- package/dist/job-record.js +14 -7
- package/dist/job-record.js.map +1 -1
- 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 +17 -9
- 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 +7 -7
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +26 -50
- package/dist/server.js.map +1 -1
- 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/dist/quota-registry.d.ts
CHANGED
|
@@ -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" | "
|
|
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: "
|
|
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" | "
|
|
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" | "
|
|
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: "
|
|
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" | "
|
|
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;
|
|
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"}
|
package/dist/quota-registry.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
88
|
-
|
|
89
|
-
|
|
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:
|
|
157
|
+
refreshed_at: refreshedAt,
|
|
110
158
|
});
|
|
111
|
-
|
|
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,
|
|
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;
|
|
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"}
|
package/dist/run-events.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-events.d.ts","sourceRoot":"","sources":["../src/run-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAY,KAAK,QAAQ,IAAI,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAI7E,kFAAkF;AAClF,qBAAa,aAAa;IACZ,OAAO,CAAC,QAAQ,CAAC,OAAO;
|
|
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"}
|
package/dist/run-events.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-events.js","sourceRoot":"","sources":["../src/run-events.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAkC,MAAM,mBAAmB,CAAC;AAE7E,MAAM,QAAQ,GAAG,WAAW,CAAC;AAE7B,kFAAkF;AAClF,MAAM,OAAO,aAAa;IACK;
|
|
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
|
|
34
|
-
*
|
|
35
|
-
|
|
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
|
}
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAYA,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAYA,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,wBAAwB,CAAC;AAOhC,OAAO,EAIL,KAAK,4BAA4B,EAClC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,UAAU,EACV,kBAAkB,EAIlB,KAAK,SAAS,EACf,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAGL,KAAK,2BAA2B,EACjC,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAEL,KAAK,kBAAkB,IAAI,uBAAuB,EACnD,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,WAAW,EAAE,KAAK,SAAS,EAAE,CAAC;AAEvE,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CAC/E;AAED,MAAM,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAE9E,MAAM,WAAW,aAAc,SAAQ,2BAA2B;IAChE,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,QAAQ,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,mBAAmB,CAAC,EAAE,4BAA4B,CAAC;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB;;0BAEsB;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D;;;;wEAIoE;IACpE,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,KAAK,IAAI,CAAC;IACjF,mBAAmB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,6BAA6B,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,+DAA+D;IAC/D,cAAc,CAAC,EAAE,CACf,OAAO,EAAE,sBAAsB,GAAG,qBAAqB,KACpD,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAKD,8EAA8E;AAC9E,qBAAa,YAAY;IAkBX,OAAO,CAAC,QAAQ,CAAC,IAAI;IAjBjC,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAC/C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsC;IAClE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA4B;IACxD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAiB;IAC9C,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;IACxC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,YAAY,CAAC,CAAgB;IACrC,OAAO,CAAC,WAAW,CAAC,CAAgB;IACpC,OAAO,CAAC,eAAe,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAE7B;IAEH,YAA6B,IAAI,EAAE,aAAa,EAAI;IAE9C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAgB3B;YAEa,SAAS;IAmCvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAIpB;YAEa,QAAQ;IAwDtB,qDAAqD;IACrD,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAE/B;IAED,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,IAAI;YAQE,MAAM;YAgCN,QAAQ;IAoGtB,OAAO,KAAK,aAAa,GAExB;IAED;+EAC2E;IAC3E,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,IAAI,CAAA;KAAE,CAYtD;IAED,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,aAAa;IAkBrB;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IAS7B,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,UAAU;IAKlB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,KAAK;YAqDC,MAAM;CA2ErB"}
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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 (
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
:
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
:
|
|
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,
|
|
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 */
|