cueline 0.1.6 → 0.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/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/CHANGELOG.md +50 -0
- package/README.ja.md +77 -30
- package/README.ko.md +77 -30
- package/README.md +71 -29
- package/README.zh-CN.md +77 -30
- package/README.zh-TW.md +74 -29
- package/config/routing.schema.json +3 -0
- package/dist/src/api-caller-work.js +58 -14
- package/dist/src/api-caller-work.js.map +1 -1
- package/dist/src/api-contracts.d.ts +56 -0
- package/dist/src/api-controller-handoff.d.ts +5 -1
- package/dist/src/api-controller-handoff.js +178 -38
- package/dist/src/api-controller-handoff.js.map +1 -1
- package/dist/src/api-run-verification.d.ts +3 -0
- package/dist/src/api-run-verification.js +174 -0
- package/dist/src/api-run-verification.js.map +1 -0
- package/dist/src/api-runtime-lifecycle.d.ts +6 -1
- package/dist/src/api-runtime-lifecycle.js +97 -8
- package/dist/src/api-runtime-lifecycle.js.map +1 -1
- package/dist/src/api.d.ts +26 -4
- package/dist/src/api.js +111 -40
- package/dist/src/api.js.map +1 -1
- package/dist/src/browser/browser-adapter.d.ts +41 -0
- package/dist/src/browser/codex-iab/bootstrap.d.ts +21 -0
- package/dist/src/browser/codex-iab/bootstrap.js +174 -9
- package/dist/src/browser/codex-iab/bootstrap.js.map +1 -1
- package/dist/src/browser/codex-iab/chatgpt-client.d.ts +3 -0
- package/dist/src/browser/codex-iab/chatgpt-client.js +216 -70
- package/dist/src/browser/codex-iab/chatgpt-client.js.map +1 -1
- package/dist/src/browser/codex-iab/probe.d.ts +36 -0
- package/dist/src/browser/codex-iab/probe.js +217 -0
- package/dist/src/browser/codex-iab/probe.js.map +1 -0
- package/dist/src/browser/codex-iab/recovery-evidence.d.ts +1 -1
- package/dist/src/browser/codex-iab/recovery-evidence.js +7 -10
- package/dist/src/browser/codex-iab/recovery-evidence.js.map +1 -1
- package/dist/src/browser/codex-iab/selectors.d.ts +1 -0
- package/dist/src/browser/codex-iab/selectors.js +1 -0
- package/dist/src/browser/codex-iab/selectors.js.map +1 -1
- package/dist/src/browser/codex-iab/send-button.d.ts +5 -0
- package/dist/src/browser/codex-iab/send-button.js +62 -0
- package/dist/src/browser/codex-iab/send-button.js.map +1 -0
- package/dist/src/browser/codex-iab/submission-url.js +6 -15
- package/dist/src/browser/codex-iab/submission-url.js.map +1 -1
- package/dist/src/browser/codex-iab/tab-discovery.js +45 -12
- package/dist/src/browser/codex-iab/tab-discovery.js.map +1 -1
- package/dist/src/browser/codex-iab/timing-options.d.ts +1 -0
- package/dist/src/browser/codex-iab/timing-options.js +5 -0
- package/dist/src/browser/codex-iab/timing-options.js.map +1 -0
- package/dist/src/cli/health-commands.d.ts +2 -0
- package/dist/src/cli/health-commands.js +265 -0
- package/dist/src/cli/health-commands.js.map +1 -0
- package/dist/src/cli/io.d.ts +4 -0
- package/dist/src/cli/io.js +2 -0
- package/dist/src/cli/io.js.map +1 -0
- package/dist/src/cli/main.d.ts +1 -5
- package/dist/src/cli/main.js +187 -84
- package/dist/src/cli/main.js.map +1 -1
- package/dist/src/cli/observation-commands.d.ts +2 -0
- package/dist/src/cli/observation-commands.js +350 -0
- package/dist/src/cli/observation-commands.js.map +1 -0
- package/dist/src/cli/run-status-view.d.ts +87 -0
- package/dist/src/cli/run-status-view.js +121 -0
- package/dist/src/cli/run-status-view.js.map +1 -0
- package/dist/src/core/controller-command-execution.d.ts +2 -2
- package/dist/src/core/controller-command-execution.js +82 -16
- package/dist/src/core/controller-command-execution.js.map +1 -1
- package/dist/src/core/controller-conversation-archive.d.ts +11 -0
- package/dist/src/core/controller-conversation-archive.js +109 -0
- package/dist/src/core/controller-conversation-archive.js.map +1 -0
- package/dist/src/core/controller-loop.d.ts +7 -1
- package/dist/src/core/controller-loop.js +136 -23
- package/dist/src/core/controller-loop.js.map +1 -1
- package/dist/src/core/controller-turn.d.ts +21 -3
- package/dist/src/core/controller-turn.js +182 -41
- package/dist/src/core/controller-turn.js.map +1 -1
- package/dist/src/core/controller-types.d.ts +2 -0
- package/dist/src/core/conversation-url.d.ts +3 -0
- package/dist/src/core/conversation-url.js +34 -0
- package/dist/src/core/conversation-url.js.map +1 -0
- package/dist/src/core/run-status.d.ts +17 -2
- package/dist/src/core/run-status.js +64 -25
- package/dist/src/core/run-status.js.map +1 -1
- package/dist/src/core/state-machine.d.ts +36 -1
- package/dist/src/core/state-machine.js +242 -13
- package/dist/src/core/state-machine.js.map +1 -1
- package/dist/src/core/timing.d.ts +9 -0
- package/dist/src/core/timing.js +22 -0
- package/dist/src/core/timing.js.map +1 -0
- package/dist/src/diagnostics/run-doctor.d.ts +22 -0
- package/dist/src/diagnostics/run-doctor.js +197 -0
- package/dist/src/diagnostics/run-doctor.js.map +1 -0
- package/dist/src/jobs/status.d.ts +5 -2
- package/dist/src/jobs/status.js +172 -12
- package/dist/src/jobs/status.js.map +1 -1
- package/dist/src/jobs/supervisor.js +57 -8
- package/dist/src/jobs/supervisor.js.map +1 -1
- package/dist/src/observation/run-diff.d.ts +39 -0
- package/dist/src/observation/run-diff.js +67 -0
- package/dist/src/observation/run-diff.js.map +1 -0
- package/dist/src/observation/run-graph.d.ts +17 -0
- package/dist/src/observation/run-graph.js +77 -0
- package/dist/src/observation/run-graph.js.map +1 -0
- package/dist/src/observation/run-handoff.d.ts +86 -0
- package/dist/src/observation/run-handoff.js +309 -0
- package/dist/src/observation/run-handoff.js.map +1 -0
- package/dist/src/observation/run-status-at.d.ts +41 -0
- package/dist/src/observation/run-status-at.js +65 -0
- package/dist/src/observation/run-status-at.js.map +1 -0
- package/dist/src/observation/run-timeline.d.ts +32 -0
- package/dist/src/observation/run-timeline.js +279 -0
- package/dist/src/observation/run-timeline.js.map +1 -0
- package/dist/src/observation/run-watch.d.ts +15 -0
- package/dist/src/observation/run-watch.js +82 -0
- package/dist/src/observation/run-watch.js.map +1 -0
- package/dist/src/protocol/limits.d.ts +3 -0
- package/dist/src/protocol/limits.js +4 -0
- package/dist/src/protocol/limits.js.map +1 -0
- package/dist/src/protocol/lint-command.d.ts +24 -0
- package/dist/src/protocol/lint-command.js +210 -0
- package/dist/src/protocol/lint-command.js.map +1 -0
- package/dist/src/protocol/parse-command.js +4 -0
- package/dist/src/protocol/parse-command.js.map +1 -1
- package/dist/src/protocol/types.d.ts +12 -0
- package/dist/src/protocol/validate-command.js +76 -3
- package/dist/src/protocol/validate-command.js.map +1 -1
- package/dist/src/router/config-loader.js +23 -2
- package/dist/src/router/config-loader.js.map +1 -1
- package/dist/src/router/explain.d.ts +28 -0
- package/dist/src/router/explain.js +86 -0
- package/dist/src/router/explain.js.map +1 -0
- package/dist/src/router/resolver.d.ts +2 -1
- package/dist/src/router/resolver.js +11 -6
- package/dist/src/router/resolver.js.map +1 -1
- package/dist/src/runners/process-runner.js +55 -12
- package/dist/src/runners/process-runner.js.map +1 -1
- package/dist/src/runners/runner-adapter.d.ts +2 -0
- package/dist/src/runners/runner-adapter.js.map +1 -1
- package/dist/src/state/atomic-write.d.ts +6 -0
- package/dist/src/state/atomic-write.js +43 -2
- package/dist/src/state/atomic-write.js.map +1 -1
- package/dist/src/state/cancellation.js +38 -4
- package/dist/src/state/cancellation.js.map +1 -1
- package/dist/src/state/event-log.js +5 -4
- package/dist/src/state/event-log.js.map +1 -1
- package/dist/src/state/private-directory.d.ts +5 -0
- package/dist/src/state/private-directory.js +37 -0
- package/dist/src/state/private-directory.js.map +1 -0
- package/dist/src/state/runtime-lease.js +19 -39
- package/dist/src/state/runtime-lease.js.map +1 -1
- package/dist/src/state/runtime-record-validation.d.ts +6 -0
- package/dist/src/state/runtime-record-validation.js +44 -0
- package/dist/src/state/runtime-record-validation.js.map +1 -0
- package/dist/src/state/runtime-retirement.js +58 -18
- package/dist/src/state/runtime-retirement.js.map +1 -1
- package/dist/src/state/runtime-takeover-intent.js +2 -2
- package/dist/src/state/runtime-takeover-intent.js.map +1 -1
- package/dist/src/state/store.d.ts +1 -0
- package/dist/src/state/store.js +12 -6
- package/dist/src/state/store.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/docs/architecture.md +4 -4
- package/docs/assets/README.md +3 -1
- package/docs/assets/cueline-architecture-en.svg +63 -0
- package/docs/assets/cueline-architecture-ja.svg +63 -0
- package/docs/assets/cueline-architecture-ko.svg +63 -0
- package/docs/assets/cueline-architecture-zh-CN.svg +63 -0
- package/docs/assets/cueline-architecture-zh-TW.svg +63 -0
- package/docs/assets/cueline-states-en.svg +50 -0
- package/docs/assets/cueline-states-ja.svg +48 -0
- package/docs/assets/cueline-states-ko.svg +48 -0
- package/docs/assets/cueline-states-zh-CN.svg +48 -0
- package/docs/assets/cueline-states-zh-TW.svg +48 -0
- package/docs/compatibility.md +1 -1
- package/docs/controller-protocol.md +44 -7
- package/docs/experiments/protocol-lint.md +40 -0
- package/docs/experiments/run-doctor.md +39 -0
- package/docs/experiments/run-handoff.md +39 -0
- package/docs/experiments/run-timeline.md +35 -0
- package/docs/experiments/run-watch.md +31 -0
- package/docs/multi-model-routing.md +256 -0
- package/docs/runner-contract.md +4 -3
- package/docs/state-and-recovery.md +45 -5
- package/package.json +1 -1
- package/schemas/controller-command.schema.json +89 -4
- package/skills/cueline/SKILL.md +13 -7
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import { loadCueLineRunStatus } from "../api-runtime-lifecycle.js";
|
|
2
|
+
const PHASE_DIAGNOSES = {
|
|
3
|
+
starting: {
|
|
4
|
+
code: "RUN_START_READY",
|
|
5
|
+
severity: "info",
|
|
6
|
+
summary: "The run has not started controller work yet.",
|
|
7
|
+
action: "Continue the same run once; do not create a replacement run.",
|
|
8
|
+
},
|
|
9
|
+
prompt_not_sent: {
|
|
10
|
+
code: "PROMPT_PROVEN_NOT_SENT",
|
|
11
|
+
severity: "warning",
|
|
12
|
+
summary: "Durable request-correlated evidence proves the controller prompt was not sent.",
|
|
13
|
+
action: "Retry the same persisted turn; do not allocate a new round.",
|
|
14
|
+
},
|
|
15
|
+
controller_response_pending: {
|
|
16
|
+
code: "CONTROLLER_RESPONSE_PENDING",
|
|
17
|
+
severity: "info",
|
|
18
|
+
summary: "The controller turn was submitted and its matching response is not accepted yet.",
|
|
19
|
+
action: "Observe the exact conversation and request identity; do not resend.",
|
|
20
|
+
},
|
|
21
|
+
jobs_running: {
|
|
22
|
+
code: "PROCESS_JOBS_RUNNING",
|
|
23
|
+
severity: "info",
|
|
24
|
+
summary: "An explicitly authorized process executor still owns active local jobs.",
|
|
25
|
+
action: "Observe job progress and the active runtime owner; do not spawn duplicates.",
|
|
26
|
+
},
|
|
27
|
+
controller_decision_pending: {
|
|
28
|
+
code: "CONTROLLER_DECISION_READY",
|
|
29
|
+
severity: "info",
|
|
30
|
+
summary: "Local evidence is terminal and the controller may decide the next step.",
|
|
31
|
+
action: "Continue the same run to submit the next bounded observation.",
|
|
32
|
+
},
|
|
33
|
+
controller_archive_pending: {
|
|
34
|
+
code: "CONTROLLER_ARCHIVE_PENDING",
|
|
35
|
+
severity: "warning",
|
|
36
|
+
summary: "The run completed, but its opt-in controller conversation archive is unsettled.",
|
|
37
|
+
action: "Continue the same run once to settle the durable archive state; never repeat a started archive click.",
|
|
38
|
+
},
|
|
39
|
+
caller_jobs_pending: {
|
|
40
|
+
code: "CALLER_ADVICE_PENDING",
|
|
41
|
+
severity: "warning",
|
|
42
|
+
summary: "The controller proposed caller advice jobs that the current Codex has not completed.",
|
|
43
|
+
action: "Execute each pending caller advice job once and submit terminal evidence.",
|
|
44
|
+
},
|
|
45
|
+
caller_work_pending: {
|
|
46
|
+
code: "CALLER_WORK_NOT_STARTED",
|
|
47
|
+
severity: "warning",
|
|
48
|
+
summary: "The controller proposed local work, but no caller claim exists and work has not started.",
|
|
49
|
+
action: "Claim the exact job before making any local mutation.",
|
|
50
|
+
},
|
|
51
|
+
caller_work_claimed: {
|
|
52
|
+
code: "CALLER_WORK_CLAIMED_NOT_STARTED",
|
|
53
|
+
severity: "warning",
|
|
54
|
+
summary: "Caller work is claimed but has not been durably marked started.",
|
|
55
|
+
action: "Verify the claim proof, then start that exact claim before modifying files.",
|
|
56
|
+
},
|
|
57
|
+
caller_work_running: {
|
|
58
|
+
code: "CALLER_WORK_IN_PROGRESS",
|
|
59
|
+
severity: "info",
|
|
60
|
+
summary: "Caller work has a started claim and may already have local side effects.",
|
|
61
|
+
action: "Continue only the exact claim; never retry the work automatically.",
|
|
62
|
+
},
|
|
63
|
+
runtime_active: {
|
|
64
|
+
code: "RUNTIME_ACTIVE",
|
|
65
|
+
severity: "info",
|
|
66
|
+
summary: "A runtime owner is active even though the persisted run needs attention.",
|
|
67
|
+
action: "Observe the active owner; do not take over or start a second loop.",
|
|
68
|
+
},
|
|
69
|
+
runtime_stale: {
|
|
70
|
+
code: "RUNTIME_STALE",
|
|
71
|
+
severity: "error",
|
|
72
|
+
summary: "The durable runtime lease stopped heartbeating.",
|
|
73
|
+
action: "Inspect matching ownership evidence, then use explicit takeover or runtime reconciliation.",
|
|
74
|
+
},
|
|
75
|
+
runtime_ownership_unknown: {
|
|
76
|
+
code: "RUNTIME_OWNERSHIP_UNKNOWN",
|
|
77
|
+
severity: "error",
|
|
78
|
+
summary: "The run claims active process work without a verifiable runtime owner.",
|
|
79
|
+
action: "Inspect worker liveness and reconcile runtime state before any continuation.",
|
|
80
|
+
},
|
|
81
|
+
cancellation_pending: {
|
|
82
|
+
code: "CANCELLATION_PENDING",
|
|
83
|
+
severity: "error",
|
|
84
|
+
summary: "A durable cancellation request exists and normal continuation is forbidden.",
|
|
85
|
+
action: "Observe cancellation settlement; inspect runtime if no owner remains.",
|
|
86
|
+
},
|
|
87
|
+
reconciliation_required: {
|
|
88
|
+
code: "CONTROLLER_RECONCILIATION_REQUIRED",
|
|
89
|
+
severity: "error",
|
|
90
|
+
summary: "Controller submission or response identity remains ambiguous.",
|
|
91
|
+
action: "Reconcile the exact URL, model, round, and request identity; never resend.",
|
|
92
|
+
},
|
|
93
|
+
job_recovery_required: {
|
|
94
|
+
code: "JOB_RECOVERY_REQUIRED",
|
|
95
|
+
severity: "error",
|
|
96
|
+
summary: "Active-looking jobs survived a failed run without trustworthy ownership.",
|
|
97
|
+
action: "Reconcile each job from process and event evidence before continuing.",
|
|
98
|
+
},
|
|
99
|
+
round_limit_reached: {
|
|
100
|
+
code: "ROUND_LIMIT_REACHED",
|
|
101
|
+
severity: "error",
|
|
102
|
+
summary: "The configured controller round limit was exhausted.",
|
|
103
|
+
action: "Return the recorded failure; do not silently add another round.",
|
|
104
|
+
},
|
|
105
|
+
resume_ready: {
|
|
106
|
+
code: "RESUME_READY",
|
|
107
|
+
severity: "warning",
|
|
108
|
+
summary: "The failed run has no active work and may be resumed deliberately.",
|
|
109
|
+
action: "Review the last failure, then continue the same run if its request is still valid.",
|
|
110
|
+
},
|
|
111
|
+
complete: {
|
|
112
|
+
code: "RUN_COMPLETE",
|
|
113
|
+
severity: "info",
|
|
114
|
+
summary: "The controller accepted a complete terminal result.",
|
|
115
|
+
action: "Return the persisted result; no continuation is needed.",
|
|
116
|
+
},
|
|
117
|
+
blocked: {
|
|
118
|
+
code: "RUN_BLOCKED",
|
|
119
|
+
severity: "error",
|
|
120
|
+
summary: "The controller accepted a blocked terminal result.",
|
|
121
|
+
action: "Return the persisted blocker; do not continue automatically.",
|
|
122
|
+
},
|
|
123
|
+
cancelled: {
|
|
124
|
+
code: "RUN_CANCELLED",
|
|
125
|
+
severity: "info",
|
|
126
|
+
summary: "The run reached a cancelled terminal state.",
|
|
127
|
+
action: "Return the persisted cancellation result; do not restart it implicitly.",
|
|
128
|
+
},
|
|
129
|
+
};
|
|
130
|
+
function jobFinding(code, severity, message, action, jobIds) {
|
|
131
|
+
return {
|
|
132
|
+
code,
|
|
133
|
+
severity,
|
|
134
|
+
message,
|
|
135
|
+
action,
|
|
136
|
+
evidence: { count: jobIds.length, job_ids: jobIds.join(",") },
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
export function diagnoseCueLineRunStatus(status) {
|
|
140
|
+
const phase = PHASE_DIAGNOSES[status.phase];
|
|
141
|
+
const findings = [
|
|
142
|
+
{
|
|
143
|
+
code: phase.code,
|
|
144
|
+
severity: phase.severity,
|
|
145
|
+
message: phase.summary,
|
|
146
|
+
action: phase.action,
|
|
147
|
+
evidence: {
|
|
148
|
+
phase: status.phase,
|
|
149
|
+
runtime_ownership: status.runtime.ownership,
|
|
150
|
+
pending_turns: status.controller.pendingTurns,
|
|
151
|
+
active_jobs: status.jobs.counts.pending + status.jobs.counts.running,
|
|
152
|
+
},
|
|
153
|
+
},
|
|
154
|
+
];
|
|
155
|
+
const ambiguous = status.jobs.items
|
|
156
|
+
.filter((job) => job.status === "ambiguous")
|
|
157
|
+
.map((job) => job.jobId);
|
|
158
|
+
if (ambiguous.length > 0) {
|
|
159
|
+
findings.push(jobFinding("AMBIGUOUS_JOB_PRESENT", "error", "Caller work may already have side effects but lacks a trustworthy terminal result.", "Inspect the exact worktree and claim evidence; never retry automatically.", ambiguous));
|
|
160
|
+
}
|
|
161
|
+
const orphaned = status.jobs.items
|
|
162
|
+
.filter((job) => job.status === "orphaned")
|
|
163
|
+
.map((job) => job.jobId);
|
|
164
|
+
if (orphaned.length > 0) {
|
|
165
|
+
findings.push(jobFinding("ORPHANED_JOB_PRESENT", "error", "Persisted process jobs have no active verified owner.", "Reconcile process liveness and append a terminal status before continuing.", orphaned));
|
|
166
|
+
}
|
|
167
|
+
const timedOut = status.jobs.items
|
|
168
|
+
.filter((job) => job.status === "timed_out")
|
|
169
|
+
.map((job) => job.jobId);
|
|
170
|
+
if (timedOut.length > 0) {
|
|
171
|
+
findings.push(jobFinding("TIMED_OUT_JOB_EVIDENCE", "warning", "One or more jobs ended at their configured deadline.", "Treat timeout as evidence for the controller; do not rerun without a new command.", timedOut));
|
|
172
|
+
}
|
|
173
|
+
const failed = status.jobs.items
|
|
174
|
+
.filter((job) => job.status === "failed")
|
|
175
|
+
.map((job) => job.jobId);
|
|
176
|
+
if (failed.length > 0) {
|
|
177
|
+
findings.push(jobFinding("FAILED_JOB_EVIDENCE", "warning", "One or more jobs returned a terminal failure.", "Submit the bounded failure evidence to the controller; do not hide or auto-retry it.", failed));
|
|
178
|
+
}
|
|
179
|
+
const outcome = findings.some((finding) => finding.severity === "error")
|
|
180
|
+
? "blocked"
|
|
181
|
+
: findings.some((finding) => finding.severity === "warning")
|
|
182
|
+
? "action_required"
|
|
183
|
+
: "healthy";
|
|
184
|
+
return {
|
|
185
|
+
runId: status.runId,
|
|
186
|
+
outcome,
|
|
187
|
+
phase: status.phase,
|
|
188
|
+
summary: phase.summary,
|
|
189
|
+
nextAction: status.safeNextAction,
|
|
190
|
+
eventSequence: status.lastEventSequence,
|
|
191
|
+
findings,
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
export async function diagnoseCueLineRun(runId, options = {}) {
|
|
195
|
+
return diagnoseCueLineRunStatus(await loadCueLineRunStatus(runId, options));
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=run-doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-doctor.js","sourceRoot":"","sources":["../../../src/diagnostics/run-doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,9 +20,11 @@ export interface JobStatus {
|
|
|
20
20
|
result?: JobResult;
|
|
21
21
|
error?: string;
|
|
22
22
|
}
|
|
23
|
+
export declare function parseJobStatus(source: string, expectedJobId?: string): JobStatus;
|
|
23
24
|
/**
|
|
24
|
-
* Stores one
|
|
25
|
-
*
|
|
25
|
+
* Stores one replaceable JSON status plus an immutable anchor for the first
|
|
26
|
+
* terminal result. Readers prefer the anchor, preventing stale writers from
|
|
27
|
+
* regressing completed work or authorizing a duplicate spawn.
|
|
26
28
|
*/
|
|
27
29
|
export declare class JobStatusStore {
|
|
28
30
|
#private;
|
|
@@ -30,4 +32,5 @@ export declare class JobStatusStore {
|
|
|
30
32
|
write(status: JobStatus): Promise<void>;
|
|
31
33
|
read(jobId: string): Promise<JobStatus | undefined>;
|
|
32
34
|
pathFor(jobId: string): string;
|
|
35
|
+
terminalPathFor(jobId: string): string;
|
|
33
36
|
}
|
package/dist/src/jobs/status.js
CHANGED
|
@@ -1,7 +1,100 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { CueLineError } from "../core/errors.js";
|
|
4
|
-
import {
|
|
4
|
+
import { canonicalJson } from "../core/ids.js";
|
|
5
|
+
import { atomicCreateJson, atomicWriteJson } from "../state/atomic-write.js";
|
|
6
|
+
const JOB_STATUS_KINDS = new Set([
|
|
7
|
+
"pending",
|
|
8
|
+
"running",
|
|
9
|
+
"succeeded",
|
|
10
|
+
"failed",
|
|
11
|
+
"timed_out",
|
|
12
|
+
"cancelled",
|
|
13
|
+
"ambiguous",
|
|
14
|
+
]);
|
|
15
|
+
const JOB_RESULT_STATUSES = new Set([
|
|
16
|
+
"succeeded",
|
|
17
|
+
"failed",
|
|
18
|
+
"timed_out",
|
|
19
|
+
"cancelled",
|
|
20
|
+
"ambiguous",
|
|
21
|
+
]);
|
|
22
|
+
function validTimestamp(value) {
|
|
23
|
+
return typeof value === "string" && Number.isFinite(Date.parse(value));
|
|
24
|
+
}
|
|
25
|
+
function optionalString(value) {
|
|
26
|
+
return value === undefined || typeof value === "string";
|
|
27
|
+
}
|
|
28
|
+
function validJobResult(value, expectedStatus) {
|
|
29
|
+
if (typeof value !== "object" || value === null || Array.isArray(value))
|
|
30
|
+
return false;
|
|
31
|
+
const result = value;
|
|
32
|
+
return (typeof result.status === "string" &&
|
|
33
|
+
JOB_RESULT_STATUSES.has(result.status) &&
|
|
34
|
+
result.status === expectedStatus &&
|
|
35
|
+
(result.exitCode === null || Number.isSafeInteger(result.exitCode)) &&
|
|
36
|
+
typeof result.stdout === "string" &&
|
|
37
|
+
typeof result.stderr === "string" &&
|
|
38
|
+
typeof result.output === "string" &&
|
|
39
|
+
typeof result.emptyOutput === "boolean" &&
|
|
40
|
+
result.emptyOutput === (result.output.length === 0) &&
|
|
41
|
+
typeof result.timedOut === "boolean" &&
|
|
42
|
+
result.timedOut === (expectedStatus === "timed_out") &&
|
|
43
|
+
typeof result.cancelled === "boolean" &&
|
|
44
|
+
result.cancelled === (expectedStatus === "cancelled") &&
|
|
45
|
+
typeof result.ambiguousSideEffects === "boolean" &&
|
|
46
|
+
result.retryable === false &&
|
|
47
|
+
validTimestamp(result.startedAt) &&
|
|
48
|
+
validTimestamp(result.finishedAt) &&
|
|
49
|
+
Date.parse(result.finishedAt) >= Date.parse(result.startedAt));
|
|
50
|
+
}
|
|
51
|
+
function assertJobStatus(value, expectedJobId) {
|
|
52
|
+
const invalid = () => {
|
|
53
|
+
throw new CueLineError("JOB_STATUS_INVALID", `persisted job status${expectedJobId === undefined ? "" : ` for '${expectedJobId}'`} has an invalid structure`, expectedJobId === undefined ? undefined : { details: { jobId: expectedJobId } });
|
|
54
|
+
};
|
|
55
|
+
if (typeof value !== "object" || value === null || Array.isArray(value))
|
|
56
|
+
invalid();
|
|
57
|
+
const status = value;
|
|
58
|
+
if (typeof status.jobId !== "string" ||
|
|
59
|
+
(expectedJobId !== undefined && status.jobId !== expectedJobId) ||
|
|
60
|
+
(status.execution !== "foreground" && status.execution !== "background") ||
|
|
61
|
+
typeof status.status !== "string" ||
|
|
62
|
+
!JOB_STATUS_KINDS.has(status.status) ||
|
|
63
|
+
!validTimestamp(status.startedAt) ||
|
|
64
|
+
!optionalString(status.runId) ||
|
|
65
|
+
!optionalString(status.jobKey) ||
|
|
66
|
+
!optionalString(status.lane) ||
|
|
67
|
+
(status.mode !== undefined && status.mode !== "advise" && status.mode !== "work") ||
|
|
68
|
+
!optionalString(status.runnerId) ||
|
|
69
|
+
!optionalString(status.model) ||
|
|
70
|
+
!optionalString(status.provider) ||
|
|
71
|
+
!optionalString(status.phase) ||
|
|
72
|
+
(status.lastProgressAt !== undefined && !validTimestamp(status.lastProgressAt)) ||
|
|
73
|
+
(status.pid !== undefined && (!Number.isSafeInteger(status.pid) || status.pid < 1)) ||
|
|
74
|
+
(status.finishedAt !== undefined &&
|
|
75
|
+
(!validTimestamp(status.finishedAt) ||
|
|
76
|
+
Date.parse(status.finishedAt) < Date.parse(status.startedAt))) ||
|
|
77
|
+
!optionalString(status.error) ||
|
|
78
|
+
(status.result !== undefined &&
|
|
79
|
+
!validJobResult(status.result, status.status)) ||
|
|
80
|
+
((status.status === "pending" || status.status === "running") &&
|
|
81
|
+
(status.result !== undefined || status.finishedAt !== undefined))) {
|
|
82
|
+
invalid();
|
|
83
|
+
}
|
|
84
|
+
if (!/^[A-Za-z0-9][A-Za-z0-9_-]*$/.test(status.jobId))
|
|
85
|
+
invalid();
|
|
86
|
+
}
|
|
87
|
+
export function parseJobStatus(source, expectedJobId) {
|
|
88
|
+
let parsed;
|
|
89
|
+
try {
|
|
90
|
+
parsed = JSON.parse(source);
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
throw new CueLineError("JOB_STATUS_INVALID", `persisted job status${expectedJobId === undefined ? "" : ` for '${expectedJobId}'`} is not valid JSON`, expectedJobId === undefined ? undefined : { details: { jobId: expectedJobId } });
|
|
94
|
+
}
|
|
95
|
+
assertJobStatus(parsed, expectedJobId);
|
|
96
|
+
return parsed;
|
|
97
|
+
}
|
|
5
98
|
function assertSafeJobId(jobId) {
|
|
6
99
|
if (!/^[A-Za-z0-9][A-Za-z0-9_-]*$/.test(jobId)) {
|
|
7
100
|
throw new CueLineError("JOB_ID_INVALID", "job id contains unsupported path characters", {
|
|
@@ -9,9 +102,13 @@ function assertSafeJobId(jobId) {
|
|
|
9
102
|
});
|
|
10
103
|
}
|
|
11
104
|
}
|
|
105
|
+
function isTerminalStatus(status) {
|
|
106
|
+
return status.status !== "pending" && status.status !== "running";
|
|
107
|
+
}
|
|
12
108
|
/**
|
|
13
|
-
* Stores one
|
|
14
|
-
*
|
|
109
|
+
* Stores one replaceable JSON status plus an immutable anchor for the first
|
|
110
|
+
* terminal result. Readers prefer the anchor, preventing stale writers from
|
|
111
|
+
* regressing completed work or authorizing a duplicate spawn.
|
|
15
112
|
*/
|
|
16
113
|
export class JobStatusStore {
|
|
17
114
|
#directory;
|
|
@@ -19,33 +116,96 @@ export class JobStatusStore {
|
|
|
19
116
|
this.#directory = path.resolve(rootDirectory, "jobs");
|
|
20
117
|
}
|
|
21
118
|
async write(status) {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
119
|
+
assertJobStatus(status, status.jobId);
|
|
120
|
+
const jsonStatus = JSON.parse(JSON.stringify(status));
|
|
121
|
+
const existingTerminal = await this.#anchorLegacyTerminal(status.jobId);
|
|
122
|
+
if (isTerminalStatus(jsonStatus)) {
|
|
123
|
+
let committed = existingTerminal;
|
|
124
|
+
if (committed === undefined) {
|
|
125
|
+
const created = await atomicCreateJson(this.terminalPathFor(status.jobId), jsonStatus);
|
|
126
|
+
committed = created ? jsonStatus : await this.#readTerminal(status.jobId);
|
|
127
|
+
}
|
|
128
|
+
if (committed === undefined) {
|
|
129
|
+
throw new CueLineError("JOB_STATUS_TERMINAL_WRITE_FAILED", `Terminal job status disappeared while being committed: ${status.jobId}`);
|
|
130
|
+
}
|
|
131
|
+
if (canonicalJson(committed) !== canonicalJson(jsonStatus)) {
|
|
132
|
+
throw new CueLineError("JOB_STATUS_TERMINAL_CONFLICT", `Job '${status.jobId}' already has different terminal execution evidence.`, {
|
|
133
|
+
details: {
|
|
134
|
+
jobId: status.jobId,
|
|
135
|
+
committedStatus: committed.status,
|
|
136
|
+
rejectedStatus: jsonStatus.status,
|
|
137
|
+
},
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
await atomicWriteJson(this.pathFor(status.jobId), committed);
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
if (existingTerminal !== undefined) {
|
|
144
|
+
await atomicWriteJson(this.pathFor(status.jobId), existingTerminal);
|
|
145
|
+
throw this.#alreadyTerminalError(status.jobId, existingTerminal.status);
|
|
146
|
+
}
|
|
147
|
+
await atomicWriteJson(this.pathFor(status.jobId), jsonStatus);
|
|
148
|
+
const concurrentTerminal = await this.#readTerminal(status.jobId);
|
|
149
|
+
if (concurrentTerminal !== undefined) {
|
|
150
|
+
await atomicWriteJson(this.pathFor(status.jobId), concurrentTerminal);
|
|
151
|
+
throw this.#alreadyTerminalError(status.jobId, concurrentTerminal.status);
|
|
152
|
+
}
|
|
28
153
|
}
|
|
29
154
|
async read(jobId) {
|
|
30
155
|
assertSafeJobId(jobId);
|
|
156
|
+
const terminal = await this.#readTerminal(jobId);
|
|
157
|
+
if (terminal !== undefined)
|
|
158
|
+
return terminal;
|
|
159
|
+
return this.#readPath(this.pathFor(jobId), jobId);
|
|
160
|
+
}
|
|
161
|
+
async #anchorLegacyTerminal(jobId) {
|
|
162
|
+
const anchored = await this.#readTerminal(jobId);
|
|
163
|
+
if (anchored !== undefined)
|
|
164
|
+
return anchored;
|
|
165
|
+
const current = await this.#readPath(this.pathFor(jobId), jobId);
|
|
166
|
+
if (current === undefined || !isTerminalStatus(current))
|
|
167
|
+
return undefined;
|
|
168
|
+
const created = await atomicCreateJson(this.terminalPathFor(jobId), current);
|
|
169
|
+
if (created)
|
|
170
|
+
return current;
|
|
171
|
+
return this.#readTerminal(jobId);
|
|
172
|
+
}
|
|
173
|
+
async #readTerminal(jobId) {
|
|
174
|
+
const status = await this.#readPath(this.terminalPathFor(jobId), jobId);
|
|
175
|
+
if (status !== undefined && !isTerminalStatus(status)) {
|
|
176
|
+
throw new CueLineError("JOB_STATUS_TERMINAL_INVALID", `Terminal anchor for job '${jobId}' contains a non-terminal status.`);
|
|
177
|
+
}
|
|
178
|
+
return status;
|
|
179
|
+
}
|
|
180
|
+
async #readPath(target, jobId) {
|
|
181
|
+
let source;
|
|
31
182
|
try {
|
|
32
|
-
|
|
33
|
-
return JSON.parse(source);
|
|
183
|
+
source = await readFile(target, "utf8");
|
|
34
184
|
}
|
|
35
185
|
catch (error) {
|
|
36
186
|
if (isNotFound(error)) {
|
|
37
187
|
return undefined;
|
|
38
188
|
}
|
|
189
|
+
if (error instanceof CueLineError)
|
|
190
|
+
throw error;
|
|
39
191
|
throw new CueLineError("JOB_STATUS_READ_FAILED", `unable to read job status: ${jobId}`, {
|
|
40
192
|
cause: error,
|
|
41
193
|
details: { jobId },
|
|
42
194
|
});
|
|
43
195
|
}
|
|
196
|
+
return parseJobStatus(source, jobId);
|
|
197
|
+
}
|
|
198
|
+
#alreadyTerminalError(jobId, committedStatus) {
|
|
199
|
+
return new CueLineError("JOB_STATUS_ALREADY_TERMINAL", `Job '${jobId}' already has terminal status '${committedStatus}'; refusing a non-terminal update.`, { details: { jobId, committedStatus } });
|
|
44
200
|
}
|
|
45
201
|
pathFor(jobId) {
|
|
46
202
|
assertSafeJobId(jobId);
|
|
47
203
|
return path.join(this.#directory, `${jobId}.json`);
|
|
48
204
|
}
|
|
205
|
+
terminalPathFor(jobId) {
|
|
206
|
+
assertSafeJobId(jobId);
|
|
207
|
+
return path.join(this.#directory, `${jobId}.terminal`);
|
|
208
|
+
}
|
|
49
209
|
}
|
|
50
210
|
function isNotFound(error) {
|
|
51
211
|
return typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/jobs/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/jobs/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -93,13 +93,60 @@ export class JobSupervisor {
|
|
|
93
93
|
}
|
|
94
94
|
async completeOnce(spec, running, release) {
|
|
95
95
|
let terminal;
|
|
96
|
-
let
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
96
|
+
let pendingProgress;
|
|
97
|
+
let progressWriter;
|
|
98
|
+
let progressWriteFailed = false;
|
|
99
|
+
let progressWriteFailure;
|
|
100
|
+
let acceptsProgress = true;
|
|
101
|
+
const ensureProgressWriter = () => {
|
|
102
|
+
if (progressWriteFailed) {
|
|
103
|
+
return Promise.reject(progressWriteFailure);
|
|
104
|
+
}
|
|
105
|
+
if (progressWriter !== undefined) {
|
|
106
|
+
return progressWriter;
|
|
107
|
+
}
|
|
108
|
+
const writer = (async () => {
|
|
109
|
+
while (pendingProgress !== undefined) {
|
|
110
|
+
const update = pendingProgress;
|
|
111
|
+
pendingProgress = undefined;
|
|
112
|
+
running.current = { ...running.current, ...update };
|
|
113
|
+
await this.options.statusStore.write(running.current);
|
|
114
|
+
}
|
|
115
|
+
})()
|
|
116
|
+
.catch((error) => {
|
|
117
|
+
progressWriteFailed = true;
|
|
118
|
+
progressWriteFailure = error;
|
|
119
|
+
pendingProgress = undefined;
|
|
120
|
+
throw error;
|
|
121
|
+
})
|
|
122
|
+
.finally(() => {
|
|
123
|
+
if (progressWriter === writer) {
|
|
124
|
+
progressWriter = undefined;
|
|
125
|
+
}
|
|
126
|
+
if (pendingProgress !== undefined && !progressWriteFailed) {
|
|
127
|
+
void ensureProgressWriter().catch(() => undefined);
|
|
128
|
+
}
|
|
101
129
|
});
|
|
102
|
-
|
|
130
|
+
progressWriter = writer;
|
|
131
|
+
return writer;
|
|
132
|
+
};
|
|
133
|
+
const persistProgress = (update) => {
|
|
134
|
+
if (!acceptsProgress) {
|
|
135
|
+
return Promise.resolve();
|
|
136
|
+
}
|
|
137
|
+
if (progressWriteFailed) {
|
|
138
|
+
return Promise.reject(progressWriteFailure);
|
|
139
|
+
}
|
|
140
|
+
pendingProgress = { ...pendingProgress, ...update };
|
|
141
|
+
return ensureProgressWriter();
|
|
142
|
+
};
|
|
143
|
+
const flushProgress = async () => {
|
|
144
|
+
while (pendingProgress !== undefined || progressWriter !== undefined) {
|
|
145
|
+
await (progressWriter ?? ensureProgressWriter());
|
|
146
|
+
}
|
|
147
|
+
if (progressWriteFailed) {
|
|
148
|
+
throw progressWriteFailure;
|
|
149
|
+
}
|
|
103
150
|
};
|
|
104
151
|
try {
|
|
105
152
|
const result = await this.runner.run(spec, {
|
|
@@ -115,11 +162,13 @@ export class JobSupervisor {
|
|
|
115
162
|
...(progress.provider === undefined ? {} : { provider: progress.provider }),
|
|
116
163
|
}),
|
|
117
164
|
});
|
|
118
|
-
|
|
165
|
+
acceptsProgress = false;
|
|
166
|
+
await flushProgress();
|
|
119
167
|
terminal = this.withResult(running.current, result);
|
|
120
168
|
}
|
|
121
169
|
catch (error) {
|
|
122
|
-
|
|
170
|
+
acceptsProgress = false;
|
|
171
|
+
await flushProgress().catch(() => undefined);
|
|
123
172
|
const finishedAt = new Date().toISOString();
|
|
124
173
|
terminal = {
|
|
125
174
|
...running.current,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"supervisor.js","sourceRoot":"","sources":["../../../src/jobs/supervisor.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"supervisor.js","sourceRoot":"","sources":["../../../src/jobs/supervisor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { CueLineRuntimeOptions } from "../api-contracts.js";
|
|
2
|
+
type DiffValue = string | number | boolean | null;
|
|
3
|
+
export interface CueLineRunDiffOptions extends Pick<CueLineRuntimeOptions, "environment" | "home" | "now"> {
|
|
4
|
+
}
|
|
5
|
+
export interface CueLineRunDiffProjection {
|
|
6
|
+
runId: string;
|
|
7
|
+
status: string;
|
|
8
|
+
executor: string;
|
|
9
|
+
allowProcessExecution: boolean;
|
|
10
|
+
phase: string;
|
|
11
|
+
round: number;
|
|
12
|
+
maxRounds: number;
|
|
13
|
+
lastEventSequence: number;
|
|
14
|
+
runtimeOwnership: string;
|
|
15
|
+
cancellationRequested: boolean;
|
|
16
|
+
pendingControllerTurns: number;
|
|
17
|
+
acceptedCommands: number;
|
|
18
|
+
archiveStatus: string;
|
|
19
|
+
jobs: {
|
|
20
|
+
total: number;
|
|
21
|
+
counts: Record<string, number>;
|
|
22
|
+
};
|
|
23
|
+
continueAllowed: boolean;
|
|
24
|
+
safeNextAction: string;
|
|
25
|
+
}
|
|
26
|
+
export interface CueLineRunDiffChange {
|
|
27
|
+
field: string;
|
|
28
|
+
left: DiffValue;
|
|
29
|
+
right: DiffValue;
|
|
30
|
+
}
|
|
31
|
+
export interface CueLineRunDiff {
|
|
32
|
+
schema: "cueline-run-diff/0.1";
|
|
33
|
+
equivalent: boolean;
|
|
34
|
+
left: CueLineRunDiffProjection;
|
|
35
|
+
right: CueLineRunDiffProjection;
|
|
36
|
+
changes: CueLineRunDiffChange[];
|
|
37
|
+
}
|
|
38
|
+
export declare function compareCueLineRuns(leftRunId: string, rightRunId: string, options?: CueLineRunDiffOptions): Promise<CueLineRunDiff>;
|
|
39
|
+
export {};
|