@claudexor/cli 1.0.1 → 2.1.3
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/dist/acp-surface-runner.d.ts +17 -0
- package/dist/acp-surface-runner.d.ts.map +1 -0
- package/dist/acp-surface-runner.js +187 -0
- package/dist/acp-surface-runner.js.map +1 -0
- package/dist/args.d.ts.map +1 -1
- package/dist/args.js.map +1 -1
- package/dist/bridge-serve.d.ts +3 -0
- package/dist/bridge-serve.d.ts.map +1 -0
- package/dist/bridge-serve.js +39 -0
- package/dist/bridge-serve.js.map +1 -0
- package/dist/capabilities.d.ts.map +1 -1
- package/dist/capabilities.js +12 -3
- package/dist/capabilities.js.map +1 -1
- package/dist/claude-oauth-usage.d.ts +33 -0
- package/dist/claude-oauth-usage.d.ts.map +1 -0
- package/dist/claude-oauth-usage.js +190 -0
- package/dist/claude-oauth-usage.js.map +1 -0
- package/dist/claude-statusline.d.ts +25 -0
- package/dist/claude-statusline.d.ts.map +1 -0
- package/dist/claude-statusline.js +259 -0
- package/dist/claude-statusline.js.map +1 -0
- package/dist/claudexord.js +346 -543
- package/dist/claudexord.js.map +1 -1
- package/dist/cli-io.d.ts +8 -9
- package/dist/cli-io.d.ts.map +1 -1
- package/dist/cli-io.js +11 -7
- package/dist/cli-io.js.map +1 -1
- package/dist/cli.js +475 -516
- package/dist/cli.js.map +1 -1
- package/dist/codex-quota-source.d.ts +11 -0
- package/dist/codex-quota-source.d.ts.map +1 -0
- package/dist/codex-quota-source.js +181 -0
- package/dist/codex-quota-source.js.map +1 -0
- package/dist/command-flags.d.ts +18 -0
- package/dist/command-flags.d.ts.map +1 -0
- package/dist/command-flags.js +124 -0
- package/dist/command-flags.js.map +1 -0
- package/dist/command-registry.d.ts +2 -40
- package/dist/command-registry.d.ts.map +1 -1
- package/dist/command-registry.js +74 -164
- package/dist/command-registry.js.map +1 -1
- package/dist/control-services.d.ts +2490 -0
- package/dist/control-services.d.ts.map +1 -0
- package/dist/control-services.js +453 -0
- package/dist/control-services.js.map +1 -0
- package/dist/credential-commands.d.ts +9 -0
- package/dist/credential-commands.d.ts.map +1 -0
- package/dist/credential-commands.js +224 -0
- package/dist/credential-commands.js.map +1 -0
- package/dist/daemon-lifecycle.d.ts +7 -3
- package/dist/daemon-lifecycle.d.ts.map +1 -1
- package/dist/daemon-lifecycle.js +40 -12
- package/dist/daemon-lifecycle.js.map +1 -1
- package/dist/daemon-run.d.ts +2 -0
- package/dist/daemon-run.d.ts.map +1 -1
- package/dist/daemon-run.js +62 -14
- package/dist/daemon-run.js.map +1 -1
- package/dist/daemon-runtime-shutdown.d.ts +58 -0
- package/dist/daemon-runtime-shutdown.d.ts.map +1 -0
- package/dist/daemon-runtime-shutdown.js +142 -0
- package/dist/daemon-runtime-shutdown.js.map +1 -0
- package/dist/decision.d.ts.map +1 -1
- package/dist/decision.js +12 -3
- package/dist/decision.js.map +1 -1
- package/dist/live.d.ts +29 -0
- package/dist/live.d.ts.map +1 -1
- package/dist/live.js +117 -6
- package/dist/live.js.map +1 -1
- package/dist/local-attachment.d.ts +14 -0
- package/dist/local-attachment.d.ts.map +1 -0
- package/dist/local-attachment.js +67 -0
- package/dist/local-attachment.js.map +1 -0
- package/dist/mcp-runner.d.ts +4 -15
- package/dist/mcp-runner.d.ts.map +1 -1
- package/dist/mcp-runner.js +276 -145
- package/dist/mcp-runner.js.map +1 -1
- package/dist/native-login.d.ts +21 -0
- package/dist/native-login.d.ts.map +1 -0
- package/dist/native-login.js +110 -0
- package/dist/native-login.js.map +1 -0
- package/dist/ops-commands.d.ts +8 -6
- package/dist/ops-commands.d.ts.map +1 -1
- package/dist/ops-commands.js +250 -168
- package/dist/ops-commands.js.map +1 -1
- package/dist/orchestrate-options.d.ts.map +1 -1
- package/dist/orchestrate-options.js +1 -1
- package/dist/orchestrate-options.js.map +1 -1
- package/dist/orphan-reaper.d.ts +4 -5
- package/dist/orphan-reaper.d.ts.map +1 -1
- package/dist/orphan-reaper.js +29 -56
- package/dist/orphan-reaper.js.map +1 -1
- package/dist/orphan-sweeper.d.ts +1 -2
- package/dist/orphan-sweeper.d.ts.map +1 -1
- package/dist/orphan-sweeper.js +29 -48
- package/dist/orphan-sweeper.js.map +1 -1
- package/dist/plugins.d.ts.map +1 -1
- package/dist/plugins.js +196 -64
- package/dist/plugins.js.map +1 -1
- package/dist/primary-output.d.ts.map +1 -1
- package/dist/primary-output.js.map +1 -1
- package/dist/profile-compatibility.d.ts +6 -0
- package/dist/profile-compatibility.d.ts.map +1 -0
- package/dist/profile-compatibility.js +21 -0
- package/dist/profile-compatibility.js.map +1 -0
- package/dist/profile-registration.d.ts +15 -0
- package/dist/profile-registration.d.ts.map +1 -0
- package/dist/profile-registration.js +68 -0
- package/dist/profile-registration.js.map +1 -0
- package/dist/project-command.d.ts +3 -0
- package/dist/project-command.d.ts.map +1 -0
- package/dist/project-command.js +87 -0
- package/dist/project-command.js.map +1 -0
- package/dist/quota-command.d.ts +3 -0
- package/dist/quota-command.d.ts.map +1 -0
- package/dist/quota-command.js +59 -0
- package/dist/quota-command.js.map +1 -0
- package/dist/registry.d.ts +1 -1
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +16 -4
- package/dist/registry.js.map +1 -1
- package/dist/release.d.ts.map +1 -1
- package/dist/release.js +15 -3
- package/dist/release.js.map +1 -1
- package/dist/repl.d.ts +3 -8
- package/dist/repl.d.ts.map +1 -1
- package/dist/repl.js +23 -122
- package/dist/repl.js.map +1 -1
- package/dist/request-preflight.d.ts +13 -0
- package/dist/request-preflight.d.ts.map +1 -0
- package/dist/request-preflight.js +81 -0
- package/dist/request-preflight.js.map +1 -0
- package/dist/retention-service.d.ts +24 -0
- package/dist/retention-service.d.ts.map +1 -0
- package/dist/retention-service.js +100 -0
- package/dist/retention-service.js.map +1 -0
- package/dist/retry-command-specs.d.ts +3 -0
- package/dist/retry-command-specs.d.ts.map +1 -0
- package/dist/retry-command-specs.js +21 -0
- package/dist/retry-command-specs.js.map +1 -0
- package/dist/retry-command.d.ts +4 -0
- package/dist/retry-command.d.ts.map +1 -0
- package/dist/retry-command.js +57 -0
- package/dist/retry-command.js.map +1 -0
- package/dist/review-command.d.ts.map +1 -1
- package/dist/review-command.js +47 -12
- package/dist/review-command.js.map +1 -1
- package/dist/run-options.d.ts +2 -2
- package/dist/run-options.d.ts.map +1 -1
- package/dist/run-options.js +27 -5
- package/dist/run-options.js.map +1 -1
- package/dist/settings-command.d.ts.map +1 -1
- package/dist/settings-command.js +143 -188
- package/dist/settings-command.js.map +1 -1
- package/dist/settings-service.d.ts +50 -0
- package/dist/settings-service.d.ts.map +1 -1
- package/dist/settings-service.js +67 -1
- package/dist/settings-service.js.map +1 -1
- package/dist/setup-job-reducer.d.ts +9 -0
- package/dist/setup-job-reducer.d.ts.map +1 -0
- package/dist/setup-job-reducer.js +290 -0
- package/dist/setup-job-reducer.js.map +1 -0
- package/dist/setup-job-store.d.ts +250 -0
- package/dist/setup-job-store.d.ts.map +1 -0
- package/dist/setup-job-store.js +359 -0
- package/dist/setup-job-store.js.map +1 -0
- package/dist/setup-job-support.d.ts +27 -0
- package/dist/setup-job-support.d.ts.map +1 -0
- package/dist/setup-job-support.js +141 -0
- package/dist/setup-job-support.js.map +1 -0
- package/dist/setup-jobs.d.ts +437 -22
- package/dist/setup-jobs.d.ts.map +1 -1
- package/dist/setup-jobs.js +813 -423
- package/dist/setup-jobs.js.map +1 -1
- package/dist/setup-lifecycle-binding.d.ts +40 -0
- package/dist/setup-lifecycle-binding.d.ts.map +1 -0
- package/dist/setup-lifecycle-binding.js +159 -0
- package/dist/setup-lifecycle-binding.js.map +1 -0
- package/dist/setup-login-protocol.d.ts +13 -0
- package/dist/setup-login-protocol.d.ts.map +1 -0
- package/dist/setup-login-protocol.js +179 -0
- package/dist/setup-login-protocol.js.map +1 -0
- package/dist/setup-login-runner.d.ts +20 -0
- package/dist/setup-login-runner.d.ts.map +1 -0
- package/dist/setup-login-runner.js +225 -0
- package/dist/setup-login-runner.js.map +1 -0
- package/dist/setup-supervisor.d.ts +53 -0
- package/dist/setup-supervisor.d.ts.map +1 -0
- package/dist/setup-supervisor.js +177 -0
- package/dist/setup-supervisor.js.map +1 -0
- package/dist/spec-thread-scope.d.ts +3 -0
- package/dist/spec-thread-scope.d.ts.map +1 -0
- package/dist/spec-thread-scope.js +9 -0
- package/dist/spec-thread-scope.js.map +1 -0
- package/dist/spec.d.ts +9 -20
- package/dist/spec.d.ts.map +1 -1
- package/dist/spec.js +49 -21
- package/dist/spec.js.map +1 -1
- package/dist/thread-delivery.d.ts +18 -0
- package/dist/thread-delivery.d.ts.map +1 -0
- package/dist/thread-delivery.js +67 -0
- package/dist/thread-delivery.js.map +1 -0
- package/dist/thread-select.d.ts +9 -0
- package/dist/thread-select.d.ts.map +1 -0
- package/dist/thread-select.js +12 -0
- package/dist/thread-select.js.map +1 -0
- package/dist/trust-command.d.ts.map +1 -1
- package/dist/trust-command.js +69 -61
- package/dist/trust-command.js.map +1 -1
- package/dist/trust-services.d.ts +5 -6
- package/dist/trust-services.d.ts.map +1 -1
- package/dist/trust-services.js +42 -13
- package/dist/trust-services.js.map +1 -1
- package/package.json +24 -22
- package/dist/attachment-resolver.d.ts +0 -11
- package/dist/attachment-resolver.d.ts.map +0 -1
- package/dist/attachment-resolver.js +0 -61
- package/dist/attachment-resolver.js.map +0 -1
- package/dist/settings-display.d.ts +0 -3
- package/dist/settings-display.d.ts.map +0 -1
- package/dist/settings-display.js +0 -33
- package/dist/settings-display.js.map +0 -1
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
import { ControlSetupJob as ControlSetupJobSchema } from "@claudexor/schema";
|
|
2
|
+
const ALLOWED_STATE_TRANSITIONS = {
|
|
3
|
+
queued: new Set([
|
|
4
|
+
"queued",
|
|
5
|
+
"running",
|
|
6
|
+
"waiting_for_input",
|
|
7
|
+
"failed",
|
|
8
|
+
"cancelled",
|
|
9
|
+
"timed_out",
|
|
10
|
+
"interrupted_unknown",
|
|
11
|
+
"not_supported",
|
|
12
|
+
]),
|
|
13
|
+
running: new Set([
|
|
14
|
+
"running",
|
|
15
|
+
"succeeded",
|
|
16
|
+
"failed",
|
|
17
|
+
"cancelled",
|
|
18
|
+
"timed_out",
|
|
19
|
+
"interrupted_unknown",
|
|
20
|
+
]),
|
|
21
|
+
waiting_for_input: new Set([
|
|
22
|
+
"waiting_for_input",
|
|
23
|
+
"running",
|
|
24
|
+
"succeeded",
|
|
25
|
+
"failed",
|
|
26
|
+
"cancelled",
|
|
27
|
+
"timed_out",
|
|
28
|
+
"interrupted_unknown",
|
|
29
|
+
]),
|
|
30
|
+
succeeded: new Set(),
|
|
31
|
+
failed: new Set(["failed"]),
|
|
32
|
+
cancelled: new Set(),
|
|
33
|
+
timed_out: new Set(),
|
|
34
|
+
interrupted_unknown: new Set(),
|
|
35
|
+
not_supported: new Set(),
|
|
36
|
+
};
|
|
37
|
+
const IMMUTABLE_FIELDS = [
|
|
38
|
+
"jobId",
|
|
39
|
+
"harness",
|
|
40
|
+
"action",
|
|
41
|
+
"createdAt",
|
|
42
|
+
"guideUrl",
|
|
43
|
+
];
|
|
44
|
+
const ALLOWED_PHASE_TRANSITIONS = {
|
|
45
|
+
preparing: new Set(["preparing", "launching", "completed"]),
|
|
46
|
+
launching: new Set(["launching", "awaiting_user", "cancelling", "completed"]),
|
|
47
|
+
awaiting_user: new Set(["awaiting_user", "verifying", "cancelling", "completed"]),
|
|
48
|
+
verifying: new Set(["verifying", "cancelling", "completed"]),
|
|
49
|
+
cancelling: new Set(["cancelling", "completed"]),
|
|
50
|
+
completed: new Set(["completed"]),
|
|
51
|
+
};
|
|
52
|
+
const OUTCOME_STATE = {
|
|
53
|
+
completed: "succeeded",
|
|
54
|
+
not_supported: "not_supported",
|
|
55
|
+
launch_failed: "failed",
|
|
56
|
+
command_failed: "failed",
|
|
57
|
+
auth_not_ready: "failed",
|
|
58
|
+
capability_verification_failed: "failed",
|
|
59
|
+
credential_route_mismatch: "failed",
|
|
60
|
+
timed_out: "timed_out",
|
|
61
|
+
cancelled_by_user: "cancelled",
|
|
62
|
+
cancelled_on_restart: "cancelled",
|
|
63
|
+
interrupted: "failed",
|
|
64
|
+
interrupted_unknown: "interrupted_unknown",
|
|
65
|
+
termination_unconfirmed: "failed",
|
|
66
|
+
};
|
|
67
|
+
export class SetupTransitionError extends Error {
|
|
68
|
+
code = "invalid_setup_transition";
|
|
69
|
+
status = 409;
|
|
70
|
+
constructor(message) {
|
|
71
|
+
super(message);
|
|
72
|
+
this.name = "SetupTransitionError";
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
export function initialSetupJob(raw) {
|
|
76
|
+
const job = ControlSetupJobSchema.parse(raw);
|
|
77
|
+
if (job.state !== "queued" || job.phase !== "preparing") {
|
|
78
|
+
throw new SetupTransitionError("a setup job must begin queued in the preparing phase");
|
|
79
|
+
}
|
|
80
|
+
assertNonterminalShape(job);
|
|
81
|
+
assertActiveStatePhase(job);
|
|
82
|
+
assertChronology(job);
|
|
83
|
+
return job;
|
|
84
|
+
}
|
|
85
|
+
export function reduceSetupJob(current, rawNext) {
|
|
86
|
+
const next = ControlSetupJobSchema.parse(rawNext);
|
|
87
|
+
for (const field of IMMUTABLE_FIELDS) {
|
|
88
|
+
if (JSON.stringify(next[field]) !== JSON.stringify(current[field])) {
|
|
89
|
+
throw new SetupTransitionError(`setup field '${field}' is immutable`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (!ALLOWED_STATE_TRANSITIONS[current.state].has(next.state)) {
|
|
93
|
+
throw new SetupTransitionError(`invalid setup state transition ${current.state} -> ${next.state}`);
|
|
94
|
+
}
|
|
95
|
+
if (!current.phase || !next.phase || !ALLOWED_PHASE_TRANSITIONS[current.phase].has(next.phase)) {
|
|
96
|
+
throw new SetupTransitionError(`invalid setup phase transition ${current.phase ?? "missing"} -> ${next.phase ?? "missing"}`);
|
|
97
|
+
}
|
|
98
|
+
if (isTerminal(current.state))
|
|
99
|
+
assertTerminalReconciliation(current, next);
|
|
100
|
+
if (current.startedAt !== null && next.startedAt !== current.startedAt) {
|
|
101
|
+
throw new SetupTransitionError("setup startedAt is immutable once observed");
|
|
102
|
+
}
|
|
103
|
+
if (current.deadlineAt !== undefined && next.deadlineAt === undefined) {
|
|
104
|
+
throw new SetupTransitionError("setup deadlineAt cannot disappear once issued");
|
|
105
|
+
}
|
|
106
|
+
if (current.deadlineAt !== undefined &&
|
|
107
|
+
next.deadlineAt !== undefined &&
|
|
108
|
+
Date.parse(next.deadlineAt) < Date.parse(current.deadlineAt)) {
|
|
109
|
+
throw new SetupTransitionError("setup deadlineAt cannot move backwards");
|
|
110
|
+
}
|
|
111
|
+
assertExecutionTransition(current, next);
|
|
112
|
+
assertAuthorizationTransition(current, next);
|
|
113
|
+
assertNativeCommandTransition(current, next);
|
|
114
|
+
assertAuthCapabilityTransition(current, next);
|
|
115
|
+
if (isTerminal(next.state)) {
|
|
116
|
+
if (next.phase !== "completed" || !next.outcome || next.finishedAt === null) {
|
|
117
|
+
throw new SetupTransitionError("terminal setup jobs require completed phase, outcome and finishedAt");
|
|
118
|
+
}
|
|
119
|
+
if (OUTCOME_STATE[next.outcome.reason] !== next.state) {
|
|
120
|
+
throw new SetupTransitionError(`outcome '${next.outcome.reason}' is invalid for terminal state '${next.state}'`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
assertNonterminalShape(next);
|
|
125
|
+
assertActiveStatePhase(next);
|
|
126
|
+
}
|
|
127
|
+
assertChronology(next);
|
|
128
|
+
return next;
|
|
129
|
+
}
|
|
130
|
+
function assertTerminalReconciliation(current, next) {
|
|
131
|
+
if (current.state !== "failed" ||
|
|
132
|
+
current.phase !== "completed" ||
|
|
133
|
+
current.outcome?.reason !== "termination_unconfirmed" ||
|
|
134
|
+
current.terminationReconciliation ||
|
|
135
|
+
next.terminationReconciliation?.status !== "empty") {
|
|
136
|
+
throw new SetupTransitionError("terminal setup jobs are immutable outside reconciliation");
|
|
137
|
+
}
|
|
138
|
+
const { terminationReconciliation: _before, message: _beforeMessage, ...before } = current;
|
|
139
|
+
const { terminationReconciliation: _after, message: _afterMessage, ...after } = next;
|
|
140
|
+
if (JSON.stringify(before) !== JSON.stringify(after)) {
|
|
141
|
+
throw new SetupTransitionError("termination reconciliation cannot rewrite setup evidence");
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
function assertNonterminalShape(job) {
|
|
145
|
+
if (job.outcome !== undefined || job.finishedAt !== null) {
|
|
146
|
+
throw new SetupTransitionError("nonterminal setup jobs cannot carry terminal outcome fields");
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
function assertActiveStatePhase(job) {
|
|
150
|
+
const phase = job.phase;
|
|
151
|
+
const valid = job.state === "queued"
|
|
152
|
+
? phase === "preparing"
|
|
153
|
+
: job.state === "running"
|
|
154
|
+
? phase === "verifying" || phase === "cancelling"
|
|
155
|
+
: phase === "launching" || phase === "awaiting_user" || phase === "cancelling";
|
|
156
|
+
if (!valid)
|
|
157
|
+
throw new SetupTransitionError(`setup state '${job.state}' is incompatible with phase '${phase ?? "missing"}'`);
|
|
158
|
+
if (job.execution?.permitIssuedAt !== undefined &&
|
|
159
|
+
!["launching", "awaiting_user", "verifying", "cancelling"].includes(job.phase)) {
|
|
160
|
+
throw new SetupTransitionError("a live execution permit is incompatible with the current setup phase");
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
function isTerminal(state) {
|
|
164
|
+
return !["queued", "running", "waiting_for_input"].includes(state);
|
|
165
|
+
}
|
|
166
|
+
function assertChronology(job) {
|
|
167
|
+
const created = Date.parse(job.createdAt);
|
|
168
|
+
const started = job.startedAt === null ? null : Date.parse(job.startedAt);
|
|
169
|
+
const finished = job.finishedAt === null ? null : Date.parse(job.finishedAt);
|
|
170
|
+
const deadline = job.deadlineAt === undefined ? null : Date.parse(job.deadlineAt);
|
|
171
|
+
if (started !== null && started < created)
|
|
172
|
+
throw new SetupTransitionError("setup startedAt precedes createdAt");
|
|
173
|
+
if (finished !== null && finished < (started ?? created)) {
|
|
174
|
+
throw new SetupTransitionError("setup finishedAt precedes prior lifecycle evidence");
|
|
175
|
+
}
|
|
176
|
+
if (deadline !== null && deadline < (started ?? created)) {
|
|
177
|
+
throw new SetupTransitionError("setup deadlineAt precedes the active lifecycle");
|
|
178
|
+
}
|
|
179
|
+
if (job.state === "queued" &&
|
|
180
|
+
(job.startedAt !== null ||
|
|
181
|
+
job.finishedAt !== null ||
|
|
182
|
+
job.deadlineAt !== undefined ||
|
|
183
|
+
job.execution !== undefined ||
|
|
184
|
+
job.authorization !== undefined ||
|
|
185
|
+
job.nativeCommand !== undefined)) {
|
|
186
|
+
throw new SetupTransitionError("a queued setup job cannot carry execution or timestamp evidence");
|
|
187
|
+
}
|
|
188
|
+
if (job.execution) {
|
|
189
|
+
const observed = Date.parse(job.execution.observedAt);
|
|
190
|
+
const permit = job.execution.permitIssuedAt === undefined ? null : Date.parse(job.execution.permitIssuedAt);
|
|
191
|
+
if (started === null || observed < started || (deadline !== null && observed > deadline)) {
|
|
192
|
+
throw new SetupTransitionError("setup process-group observation is outside the active launch window");
|
|
193
|
+
}
|
|
194
|
+
if (permit !== null && (permit < observed || (deadline !== null && permit > deadline))) {
|
|
195
|
+
throw new SetupTransitionError("setup execution permit is outside the observed launch window");
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
if (job.authorization) {
|
|
199
|
+
if (job.execution &&
|
|
200
|
+
(job.execution.executionId !== job.authorization.executionId ||
|
|
201
|
+
job.execution.commandDigest !== job.authorization.commandDigest ||
|
|
202
|
+
job.execution.manifestDigest !== job.authorization.manifestDigest)) {
|
|
203
|
+
throw new SetupTransitionError("setup execution evidence contradicts its command authorization");
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
function assertNativeCommandTransition(current, next) {
|
|
208
|
+
if (!current.nativeCommand) {
|
|
209
|
+
if (!next.nativeCommand)
|
|
210
|
+
return;
|
|
211
|
+
if (!["launching", "awaiting_user"].includes(current.phase)) {
|
|
212
|
+
throw new SetupTransitionError("native command evidence may first appear only while completing a login handoff");
|
|
213
|
+
}
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
if (!next.nativeCommand)
|
|
217
|
+
throw new SetupTransitionError("native command evidence cannot disappear");
|
|
218
|
+
if (JSON.stringify(current.nativeCommand) !== JSON.stringify(next.nativeCommand)) {
|
|
219
|
+
throw new SetupTransitionError("native command evidence is immutable once journaled");
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
function assertExecutionTransition(current, next) {
|
|
223
|
+
if (!current.execution) {
|
|
224
|
+
if (!next.execution)
|
|
225
|
+
return;
|
|
226
|
+
if (current.phase !== "launching" || next.phase !== "launching") {
|
|
227
|
+
throw new SetupTransitionError("process-group evidence may first appear only during login launch");
|
|
228
|
+
}
|
|
229
|
+
if (next.execution.permitIssuedAt !== undefined) {
|
|
230
|
+
throw new SetupTransitionError("process-group observation and execution permit require separate durable transitions");
|
|
231
|
+
}
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
if (!next.execution)
|
|
235
|
+
throw new SetupTransitionError("setup execution evidence cannot disappear");
|
|
236
|
+
for (const field of ["executionId", "processGroup", "observedAt"]) {
|
|
237
|
+
if (JSON.stringify(current.execution[field]) !== JSON.stringify(next.execution[field])) {
|
|
238
|
+
throw new SetupTransitionError(`setup execution field '${field}' is immutable`);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
if (current.execution.permitIssuedAt !== undefined &&
|
|
242
|
+
next.execution.permitIssuedAt !== current.execution.permitIssuedAt) {
|
|
243
|
+
throw new SetupTransitionError("setup execution permit timestamp is immutable once issued");
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
function assertAuthorizationTransition(current, next) {
|
|
247
|
+
if (!current.authorization) {
|
|
248
|
+
if (!next.authorization)
|
|
249
|
+
return;
|
|
250
|
+
if (current.state !== "queued" ||
|
|
251
|
+
current.phase !== "preparing" ||
|
|
252
|
+
next.state !== "waiting_for_input" ||
|
|
253
|
+
next.phase !== "launching") {
|
|
254
|
+
throw new SetupTransitionError("command authorization may first appear only at the login handoff transition");
|
|
255
|
+
}
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
if (!next.authorization)
|
|
259
|
+
throw new SetupTransitionError("setup command authorization cannot disappear");
|
|
260
|
+
if (JSON.stringify(current.authorization) !== JSON.stringify(next.authorization)) {
|
|
261
|
+
throw new SetupTransitionError("setup command authorization is immutable");
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
function assertAuthCapabilityTransition(current, next) {
|
|
265
|
+
const before = current.authCapability;
|
|
266
|
+
const after = next.authCapability;
|
|
267
|
+
if (!before || !after) {
|
|
268
|
+
if (before !== after)
|
|
269
|
+
throw new SetupTransitionError("setup auth capability lifecycle cannot appear or disappear");
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
for (const field of ["attemptId", "challengeDigest", "requestDigest", "disclosure"]) {
|
|
273
|
+
if (JSON.stringify(before[field]) !== JSON.stringify(after[field])) {
|
|
274
|
+
throw new SetupTransitionError(`setup auth capability field '${field}' is immutable`);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
const allowed = {
|
|
278
|
+
disclosed: new Set(["disclosed", "running"]),
|
|
279
|
+
running: new Set(["running", "completed", "interrupted_unknown"]),
|
|
280
|
+
completed: new Set(["completed"]),
|
|
281
|
+
interrupted_unknown: new Set(["interrupted_unknown"]),
|
|
282
|
+
};
|
|
283
|
+
if (!allowed[before.state].has(after.state)) {
|
|
284
|
+
throw new SetupTransitionError(`invalid auth capability transition ${before.state} -> ${after.state}`);
|
|
285
|
+
}
|
|
286
|
+
if (before.state === after.state && JSON.stringify(before) !== JSON.stringify(after)) {
|
|
287
|
+
throw new SetupTransitionError(`auth capability state '${before.state}' is immutable`);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
//# sourceMappingURL=setup-job-reducer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-job-reducer.js","sourceRoot":"","sources":["../src/setup-job-reducer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
import { DurableJournal, type JournalRecoveryState } from "@claudexor/journal";
|
|
2
|
+
import { type ControlSetupJob, type ControlSetupJobListFilter, type ControlSetupJobSnapshot } from "@claudexor/schema";
|
|
3
|
+
export declare const ACTIVE_SETUP_STATES: Set<"succeeded" | "failed" | "running" | "queued" | "cancelled" | "interrupted_unknown" | "timed_out" | "waiting_for_input" | "not_supported">;
|
|
4
|
+
export declare const TERMINAL_SETUP_STATES: Set<"succeeded" | "failed" | "running" | "queued" | "cancelled" | "interrupted_unknown" | "timed_out" | "waiting_for_input" | "not_supported">;
|
|
5
|
+
export interface SetupJobPaths {
|
|
6
|
+
dir: string;
|
|
7
|
+
manifest: string;
|
|
8
|
+
runnerState: string;
|
|
9
|
+
runnerResult: string;
|
|
10
|
+
runnerPermit: string;
|
|
11
|
+
command: string;
|
|
12
|
+
}
|
|
13
|
+
export interface SetupJobStoreOptions {
|
|
14
|
+
now?: () => Date;
|
|
15
|
+
journal?: DurableJournal;
|
|
16
|
+
}
|
|
17
|
+
interface SetupCreateIdempotency {
|
|
18
|
+
key: string;
|
|
19
|
+
client: string;
|
|
20
|
+
request: unknown;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Setup lifecycle projection over the daemon's global durable journal.
|
|
24
|
+
*
|
|
25
|
+
* Per-job directories contain only operational artifacts (runner handshake
|
|
26
|
+
* and command launcher). They never contain a job snapshot,
|
|
27
|
+
* event ledger or sequence metadata and cannot become a second authority.
|
|
28
|
+
*/
|
|
29
|
+
export declare class SetupJobStore {
|
|
30
|
+
readonly rootDir: string;
|
|
31
|
+
readonly artifactsDir: string;
|
|
32
|
+
readonly journal: DurableJournal;
|
|
33
|
+
private readonly jobs;
|
|
34
|
+
private readonly createByKey;
|
|
35
|
+
private readonly now;
|
|
36
|
+
private semanticRecovery;
|
|
37
|
+
constructor(rootDir: string, opts?: SetupJobStoreOptions);
|
|
38
|
+
paths(jobId: string): SetupJobPaths;
|
|
39
|
+
recoveryState(): JournalRecoveryState;
|
|
40
|
+
validateProjection(): void;
|
|
41
|
+
create(job: ControlSetupJob, idempotency?: SetupCreateIdempotency): ControlSetupJob;
|
|
42
|
+
resolveCreate(idempotency: SetupCreateIdempotency): ControlSetupJob | null;
|
|
43
|
+
bindCreate(jobId: string, idempotency: SetupCreateIdempotency): ControlSetupJob;
|
|
44
|
+
private persist;
|
|
45
|
+
update(jobId: string, patch: Partial<ControlSetupJob>): ControlSetupJob;
|
|
46
|
+
status(jobId: string): ControlSetupJob;
|
|
47
|
+
list(filter?: ControlSetupJobListFilter): ControlSetupJob[];
|
|
48
|
+
snapshot(jobId: string): ControlSetupJobSnapshot;
|
|
49
|
+
events(jobId: string, afterCursor?: string | null): {
|
|
50
|
+
message: string;
|
|
51
|
+
cursor: string;
|
|
52
|
+
state: "failed" | "cancelled" | "running" | "interrupted_unknown" | "queued" | "succeeded" | "timed_out" | "waiting_for_input" | "not_supported";
|
|
53
|
+
kind: "status";
|
|
54
|
+
time: string;
|
|
55
|
+
jobId: string;
|
|
56
|
+
previousCursor: string | null;
|
|
57
|
+
sequence: number;
|
|
58
|
+
job: {
|
|
59
|
+
message: string;
|
|
60
|
+
harness: "cursor" | "codex" | "claude";
|
|
61
|
+
startedAt: string | null;
|
|
62
|
+
state: "failed" | "cancelled" | "running" | "interrupted_unknown" | "queued" | "succeeded" | "timed_out" | "waiting_for_input" | "not_supported";
|
|
63
|
+
profileId: string | null;
|
|
64
|
+
command: string | null;
|
|
65
|
+
createdAt: string;
|
|
66
|
+
jobId: string;
|
|
67
|
+
phase: "completed" | "preparing" | "launching" | "awaiting_user" | "verifying" | "cancelling";
|
|
68
|
+
finishedAt: string | null;
|
|
69
|
+
action: "login";
|
|
70
|
+
guideUrl: string | null;
|
|
71
|
+
outcome?: {
|
|
72
|
+
reason: "completed" | "interrupted_unknown" | "timed_out" | "not_supported" | "launch_failed" | "command_failed" | "auth_not_ready" | "capability_verification_failed" | "credential_route_mismatch" | "cancelled_by_user" | "cancelled_on_restart" | "interrupted" | "termination_unconfirmed";
|
|
73
|
+
exitCode?: number | null | undefined;
|
|
74
|
+
signal?: string | null | undefined;
|
|
75
|
+
} | undefined;
|
|
76
|
+
execution?: {
|
|
77
|
+
observedAt: string;
|
|
78
|
+
commandDigest: string;
|
|
79
|
+
executionId: string;
|
|
80
|
+
manifestDigest: string;
|
|
81
|
+
processGroup: {
|
|
82
|
+
schemaVersion: 1;
|
|
83
|
+
pgid: number;
|
|
84
|
+
leader: {
|
|
85
|
+
status: "known";
|
|
86
|
+
source: "procfs_stat" | "proc_pidinfo";
|
|
87
|
+
pid: number;
|
|
88
|
+
platform: "linux" | "darwin";
|
|
89
|
+
startToken: string;
|
|
90
|
+
processGroupId: number;
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
permitIssuedAt?: string | undefined;
|
|
94
|
+
} | undefined;
|
|
95
|
+
deadlineAt?: string | undefined;
|
|
96
|
+
authCapability?: {
|
|
97
|
+
attemptId: string;
|
|
98
|
+
challengeDigest: string;
|
|
99
|
+
requestDigest: string;
|
|
100
|
+
disclosure: {
|
|
101
|
+
schemaVersion: 1;
|
|
102
|
+
protocolVersion: 1;
|
|
103
|
+
harness: string;
|
|
104
|
+
requested: "auto" | "subscription" | "api_key";
|
|
105
|
+
requiredRoute: "local" | "vendor_native" | "managed_api_key";
|
|
106
|
+
requiredSource: "native_session" | "oauth_token_env" | "api_key_env" | "api_key_flag" | "provider_auth_file" | "none";
|
|
107
|
+
networkScope: "selected_harness_only";
|
|
108
|
+
billingKnowledge: "unknown" | "proven_zero" | "subscription_entitlement" | "metered";
|
|
109
|
+
incrementalCostKnowledge: "exact" | "unknown" | "estimated";
|
|
110
|
+
mayConsumeQuota: boolean;
|
|
111
|
+
generatedAt: string;
|
|
112
|
+
};
|
|
113
|
+
state: "disclosed";
|
|
114
|
+
} | {
|
|
115
|
+
attemptId: string;
|
|
116
|
+
startedAt: string;
|
|
117
|
+
challengeDigest: string;
|
|
118
|
+
requestDigest: string;
|
|
119
|
+
disclosure: {
|
|
120
|
+
schemaVersion: 1;
|
|
121
|
+
protocolVersion: 1;
|
|
122
|
+
harness: string;
|
|
123
|
+
requested: "auto" | "subscription" | "api_key";
|
|
124
|
+
requiredRoute: "local" | "vendor_native" | "managed_api_key";
|
|
125
|
+
requiredSource: "native_session" | "oauth_token_env" | "api_key_env" | "api_key_flag" | "provider_auth_file" | "none";
|
|
126
|
+
networkScope: "selected_harness_only";
|
|
127
|
+
billingKnowledge: "unknown" | "proven_zero" | "subscription_entitlement" | "metered";
|
|
128
|
+
incrementalCostKnowledge: "exact" | "unknown" | "estimated";
|
|
129
|
+
mayConsumeQuota: boolean;
|
|
130
|
+
generatedAt: string;
|
|
131
|
+
};
|
|
132
|
+
state: "running";
|
|
133
|
+
} | {
|
|
134
|
+
attemptId: string;
|
|
135
|
+
startedAt: string;
|
|
136
|
+
completedAt: string;
|
|
137
|
+
challengeDigest: string;
|
|
138
|
+
requestDigest: string;
|
|
139
|
+
disclosure: {
|
|
140
|
+
schemaVersion: 1;
|
|
141
|
+
protocolVersion: 1;
|
|
142
|
+
harness: string;
|
|
143
|
+
requested: "auto" | "subscription" | "api_key";
|
|
144
|
+
requiredRoute: "local" | "vendor_native" | "managed_api_key";
|
|
145
|
+
requiredSource: "native_session" | "oauth_token_env" | "api_key_env" | "api_key_flag" | "provider_auth_file" | "none";
|
|
146
|
+
networkScope: "selected_harness_only";
|
|
147
|
+
billingKnowledge: "unknown" | "proven_zero" | "subscription_entitlement" | "metered";
|
|
148
|
+
incrementalCostKnowledge: "exact" | "unknown" | "estimated";
|
|
149
|
+
mayConsumeQuota: boolean;
|
|
150
|
+
generatedAt: string;
|
|
151
|
+
};
|
|
152
|
+
state: "completed";
|
|
153
|
+
receipt: {
|
|
154
|
+
availability: "unknown" | "available" | "unavailable";
|
|
155
|
+
verification: "passed" | "failed" | "not_run";
|
|
156
|
+
harness: string;
|
|
157
|
+
requested: "auto" | "subscription" | "api_key";
|
|
158
|
+
requiredRoute: "local" | "vendor_native" | "managed_api_key";
|
|
159
|
+
requiredSource: "native_session" | "oauth_token_env" | "api_key_env" | "api_key_flag" | "provider_auth_file" | "none";
|
|
160
|
+
billingKnowledge: "unknown" | "proven_zero" | "subscription_entitlement" | "metered";
|
|
161
|
+
receiptId: string;
|
|
162
|
+
attemptId: string;
|
|
163
|
+
effective: "local" | "vendor_native" | "managed_api_key" | null;
|
|
164
|
+
effectiveSource: "native_session" | "oauth_token_env" | "api_key_env" | "api_key_flag" | "provider_auth_file" | "none" | null;
|
|
165
|
+
selectionReason: "harness_error" | "exact_requested_route" | "adapter_unavailable" | "request_mismatch" | "route_missing" | "route_mismatch" | "source_missing" | "source_mismatch" | "adapter_error" | "missing_completion" | "response_mismatch" | "scratch_mutated" | "protocol_violation" | "adapter_identity_mismatch" | "cancelled";
|
|
166
|
+
costKnowledge: "exact" | "unknown" | "estimated";
|
|
167
|
+
startedAt: string;
|
|
168
|
+
completedAt: string;
|
|
169
|
+
challengeDigest: string;
|
|
170
|
+
requestDigest: string;
|
|
171
|
+
responseDigest: string;
|
|
172
|
+
streamDigest: string;
|
|
173
|
+
scratchBeforeDigest: string;
|
|
174
|
+
scratchAfterDigest: string;
|
|
175
|
+
stream: {
|
|
176
|
+
aborted: boolean;
|
|
177
|
+
startedEvents: number;
|
|
178
|
+
completedEvents: number;
|
|
179
|
+
errorEvents: number;
|
|
180
|
+
unexpectedToolEvents: number;
|
|
181
|
+
interactionEvents: number;
|
|
182
|
+
sessionMismatchEvents: number;
|
|
183
|
+
eventsAfterCompleted: number;
|
|
184
|
+
};
|
|
185
|
+
evidenceRefs: string[];
|
|
186
|
+
costUsd?: number | undefined;
|
|
187
|
+
};
|
|
188
|
+
} | {
|
|
189
|
+
attemptId: string;
|
|
190
|
+
startedAt: string;
|
|
191
|
+
challengeDigest: string;
|
|
192
|
+
requestDigest: string;
|
|
193
|
+
disclosure: {
|
|
194
|
+
schemaVersion: 1;
|
|
195
|
+
protocolVersion: 1;
|
|
196
|
+
harness: string;
|
|
197
|
+
requested: "auto" | "subscription" | "api_key";
|
|
198
|
+
requiredRoute: "local" | "vendor_native" | "managed_api_key";
|
|
199
|
+
requiredSource: "native_session" | "oauth_token_env" | "api_key_env" | "api_key_flag" | "provider_auth_file" | "none";
|
|
200
|
+
networkScope: "selected_harness_only";
|
|
201
|
+
billingKnowledge: "unknown" | "proven_zero" | "subscription_entitlement" | "metered";
|
|
202
|
+
incrementalCostKnowledge: "exact" | "unknown" | "estimated";
|
|
203
|
+
mayConsumeQuota: boolean;
|
|
204
|
+
generatedAt: string;
|
|
205
|
+
};
|
|
206
|
+
state: "interrupted_unknown";
|
|
207
|
+
interruptedAt: string;
|
|
208
|
+
} | undefined;
|
|
209
|
+
authorization?: {
|
|
210
|
+
args: string[];
|
|
211
|
+
commandDigest: string;
|
|
212
|
+
executionId: string;
|
|
213
|
+
manifestDigest: string;
|
|
214
|
+
executable: {
|
|
215
|
+
sha256: string;
|
|
216
|
+
mode: number;
|
|
217
|
+
realpath: string;
|
|
218
|
+
size: number;
|
|
219
|
+
device: string;
|
|
220
|
+
inode: string;
|
|
221
|
+
};
|
|
222
|
+
} | undefined;
|
|
223
|
+
nativeCommand?: {
|
|
224
|
+
commandDigest: string;
|
|
225
|
+
finishedAt: string;
|
|
226
|
+
executionId: string;
|
|
227
|
+
manifestDigest: string;
|
|
228
|
+
permitIssuedAt: string | null;
|
|
229
|
+
commandStarted: boolean;
|
|
230
|
+
exitCode: number | null;
|
|
231
|
+
signal: string | null;
|
|
232
|
+
errorCode?: "permit_timeout" | "spawn_failed" | undefined;
|
|
233
|
+
} | undefined;
|
|
234
|
+
terminationReconciliation?: {
|
|
235
|
+
status: "empty";
|
|
236
|
+
observedAt: string;
|
|
237
|
+
} | undefined;
|
|
238
|
+
};
|
|
239
|
+
}[];
|
|
240
|
+
appendLog(jobId: string, line: string): void;
|
|
241
|
+
private rebuild;
|
|
242
|
+
private newBinding;
|
|
243
|
+
private rememberBinding;
|
|
244
|
+
private failSemantic;
|
|
245
|
+
private assertAvailable;
|
|
246
|
+
private ensureJobDir;
|
|
247
|
+
private validExistingJobDir;
|
|
248
|
+
}
|
|
249
|
+
export {};
|
|
250
|
+
//# sourceMappingURL=setup-job-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-job-store.d.ts","sourceRoot":"","sources":["../src/setup-job-store.ts"],"names":[],"mappings":"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"}
|