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.
Files changed (188) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.codex-plugin/plugin.json +1 -1
  3. package/CHANGELOG.md +50 -0
  4. package/README.ja.md +77 -30
  5. package/README.ko.md +77 -30
  6. package/README.md +71 -29
  7. package/README.zh-CN.md +77 -30
  8. package/README.zh-TW.md +74 -29
  9. package/config/routing.schema.json +3 -0
  10. package/dist/src/api-caller-work.js +58 -14
  11. package/dist/src/api-caller-work.js.map +1 -1
  12. package/dist/src/api-contracts.d.ts +56 -0
  13. package/dist/src/api-controller-handoff.d.ts +5 -1
  14. package/dist/src/api-controller-handoff.js +178 -38
  15. package/dist/src/api-controller-handoff.js.map +1 -1
  16. package/dist/src/api-run-verification.d.ts +3 -0
  17. package/dist/src/api-run-verification.js +174 -0
  18. package/dist/src/api-run-verification.js.map +1 -0
  19. package/dist/src/api-runtime-lifecycle.d.ts +6 -1
  20. package/dist/src/api-runtime-lifecycle.js +97 -8
  21. package/dist/src/api-runtime-lifecycle.js.map +1 -1
  22. package/dist/src/api.d.ts +26 -4
  23. package/dist/src/api.js +111 -40
  24. package/dist/src/api.js.map +1 -1
  25. package/dist/src/browser/browser-adapter.d.ts +41 -0
  26. package/dist/src/browser/codex-iab/bootstrap.d.ts +21 -0
  27. package/dist/src/browser/codex-iab/bootstrap.js +174 -9
  28. package/dist/src/browser/codex-iab/bootstrap.js.map +1 -1
  29. package/dist/src/browser/codex-iab/chatgpt-client.d.ts +3 -0
  30. package/dist/src/browser/codex-iab/chatgpt-client.js +216 -70
  31. package/dist/src/browser/codex-iab/chatgpt-client.js.map +1 -1
  32. package/dist/src/browser/codex-iab/probe.d.ts +36 -0
  33. package/dist/src/browser/codex-iab/probe.js +217 -0
  34. package/dist/src/browser/codex-iab/probe.js.map +1 -0
  35. package/dist/src/browser/codex-iab/recovery-evidence.d.ts +1 -1
  36. package/dist/src/browser/codex-iab/recovery-evidence.js +7 -10
  37. package/dist/src/browser/codex-iab/recovery-evidence.js.map +1 -1
  38. package/dist/src/browser/codex-iab/selectors.d.ts +1 -0
  39. package/dist/src/browser/codex-iab/selectors.js +1 -0
  40. package/dist/src/browser/codex-iab/selectors.js.map +1 -1
  41. package/dist/src/browser/codex-iab/send-button.d.ts +5 -0
  42. package/dist/src/browser/codex-iab/send-button.js +62 -0
  43. package/dist/src/browser/codex-iab/send-button.js.map +1 -0
  44. package/dist/src/browser/codex-iab/submission-url.js +6 -15
  45. package/dist/src/browser/codex-iab/submission-url.js.map +1 -1
  46. package/dist/src/browser/codex-iab/tab-discovery.js +45 -12
  47. package/dist/src/browser/codex-iab/tab-discovery.js.map +1 -1
  48. package/dist/src/browser/codex-iab/timing-options.d.ts +1 -0
  49. package/dist/src/browser/codex-iab/timing-options.js +5 -0
  50. package/dist/src/browser/codex-iab/timing-options.js.map +1 -0
  51. package/dist/src/cli/health-commands.d.ts +2 -0
  52. package/dist/src/cli/health-commands.js +265 -0
  53. package/dist/src/cli/health-commands.js.map +1 -0
  54. package/dist/src/cli/io.d.ts +4 -0
  55. package/dist/src/cli/io.js +2 -0
  56. package/dist/src/cli/io.js.map +1 -0
  57. package/dist/src/cli/main.d.ts +1 -5
  58. package/dist/src/cli/main.js +187 -84
  59. package/dist/src/cli/main.js.map +1 -1
  60. package/dist/src/cli/observation-commands.d.ts +2 -0
  61. package/dist/src/cli/observation-commands.js +350 -0
  62. package/dist/src/cli/observation-commands.js.map +1 -0
  63. package/dist/src/cli/run-status-view.d.ts +87 -0
  64. package/dist/src/cli/run-status-view.js +121 -0
  65. package/dist/src/cli/run-status-view.js.map +1 -0
  66. package/dist/src/core/controller-command-execution.d.ts +2 -2
  67. package/dist/src/core/controller-command-execution.js +82 -16
  68. package/dist/src/core/controller-command-execution.js.map +1 -1
  69. package/dist/src/core/controller-conversation-archive.d.ts +11 -0
  70. package/dist/src/core/controller-conversation-archive.js +109 -0
  71. package/dist/src/core/controller-conversation-archive.js.map +1 -0
  72. package/dist/src/core/controller-loop.d.ts +7 -1
  73. package/dist/src/core/controller-loop.js +136 -23
  74. package/dist/src/core/controller-loop.js.map +1 -1
  75. package/dist/src/core/controller-turn.d.ts +21 -3
  76. package/dist/src/core/controller-turn.js +182 -41
  77. package/dist/src/core/controller-turn.js.map +1 -1
  78. package/dist/src/core/controller-types.d.ts +2 -0
  79. package/dist/src/core/conversation-url.d.ts +3 -0
  80. package/dist/src/core/conversation-url.js +34 -0
  81. package/dist/src/core/conversation-url.js.map +1 -0
  82. package/dist/src/core/run-status.d.ts +17 -2
  83. package/dist/src/core/run-status.js +64 -25
  84. package/dist/src/core/run-status.js.map +1 -1
  85. package/dist/src/core/state-machine.d.ts +36 -1
  86. package/dist/src/core/state-machine.js +242 -13
  87. package/dist/src/core/state-machine.js.map +1 -1
  88. package/dist/src/core/timing.d.ts +9 -0
  89. package/dist/src/core/timing.js +22 -0
  90. package/dist/src/core/timing.js.map +1 -0
  91. package/dist/src/diagnostics/run-doctor.d.ts +22 -0
  92. package/dist/src/diagnostics/run-doctor.js +197 -0
  93. package/dist/src/diagnostics/run-doctor.js.map +1 -0
  94. package/dist/src/jobs/status.d.ts +5 -2
  95. package/dist/src/jobs/status.js +172 -12
  96. package/dist/src/jobs/status.js.map +1 -1
  97. package/dist/src/jobs/supervisor.js +57 -8
  98. package/dist/src/jobs/supervisor.js.map +1 -1
  99. package/dist/src/observation/run-diff.d.ts +39 -0
  100. package/dist/src/observation/run-diff.js +67 -0
  101. package/dist/src/observation/run-diff.js.map +1 -0
  102. package/dist/src/observation/run-graph.d.ts +17 -0
  103. package/dist/src/observation/run-graph.js +77 -0
  104. package/dist/src/observation/run-graph.js.map +1 -0
  105. package/dist/src/observation/run-handoff.d.ts +86 -0
  106. package/dist/src/observation/run-handoff.js +309 -0
  107. package/dist/src/observation/run-handoff.js.map +1 -0
  108. package/dist/src/observation/run-status-at.d.ts +41 -0
  109. package/dist/src/observation/run-status-at.js +65 -0
  110. package/dist/src/observation/run-status-at.js.map +1 -0
  111. package/dist/src/observation/run-timeline.d.ts +32 -0
  112. package/dist/src/observation/run-timeline.js +279 -0
  113. package/dist/src/observation/run-timeline.js.map +1 -0
  114. package/dist/src/observation/run-watch.d.ts +15 -0
  115. package/dist/src/observation/run-watch.js +82 -0
  116. package/dist/src/observation/run-watch.js.map +1 -0
  117. package/dist/src/protocol/limits.d.ts +3 -0
  118. package/dist/src/protocol/limits.js +4 -0
  119. package/dist/src/protocol/limits.js.map +1 -0
  120. package/dist/src/protocol/lint-command.d.ts +24 -0
  121. package/dist/src/protocol/lint-command.js +210 -0
  122. package/dist/src/protocol/lint-command.js.map +1 -0
  123. package/dist/src/protocol/parse-command.js +4 -0
  124. package/dist/src/protocol/parse-command.js.map +1 -1
  125. package/dist/src/protocol/types.d.ts +12 -0
  126. package/dist/src/protocol/validate-command.js +76 -3
  127. package/dist/src/protocol/validate-command.js.map +1 -1
  128. package/dist/src/router/config-loader.js +23 -2
  129. package/dist/src/router/config-loader.js.map +1 -1
  130. package/dist/src/router/explain.d.ts +28 -0
  131. package/dist/src/router/explain.js +86 -0
  132. package/dist/src/router/explain.js.map +1 -0
  133. package/dist/src/router/resolver.d.ts +2 -1
  134. package/dist/src/router/resolver.js +11 -6
  135. package/dist/src/router/resolver.js.map +1 -1
  136. package/dist/src/runners/process-runner.js +55 -12
  137. package/dist/src/runners/process-runner.js.map +1 -1
  138. package/dist/src/runners/runner-adapter.d.ts +2 -0
  139. package/dist/src/runners/runner-adapter.js.map +1 -1
  140. package/dist/src/state/atomic-write.d.ts +6 -0
  141. package/dist/src/state/atomic-write.js +43 -2
  142. package/dist/src/state/atomic-write.js.map +1 -1
  143. package/dist/src/state/cancellation.js +38 -4
  144. package/dist/src/state/cancellation.js.map +1 -1
  145. package/dist/src/state/event-log.js +5 -4
  146. package/dist/src/state/event-log.js.map +1 -1
  147. package/dist/src/state/private-directory.d.ts +5 -0
  148. package/dist/src/state/private-directory.js +37 -0
  149. package/dist/src/state/private-directory.js.map +1 -0
  150. package/dist/src/state/runtime-lease.js +19 -39
  151. package/dist/src/state/runtime-lease.js.map +1 -1
  152. package/dist/src/state/runtime-record-validation.d.ts +6 -0
  153. package/dist/src/state/runtime-record-validation.js +44 -0
  154. package/dist/src/state/runtime-record-validation.js.map +1 -0
  155. package/dist/src/state/runtime-retirement.js +58 -18
  156. package/dist/src/state/runtime-retirement.js.map +1 -1
  157. package/dist/src/state/runtime-takeover-intent.js +2 -2
  158. package/dist/src/state/runtime-takeover-intent.js.map +1 -1
  159. package/dist/src/state/store.d.ts +1 -0
  160. package/dist/src/state/store.js +12 -6
  161. package/dist/src/state/store.js.map +1 -1
  162. package/dist/src/version.d.ts +1 -1
  163. package/dist/src/version.js +1 -1
  164. package/docs/architecture.md +4 -4
  165. package/docs/assets/README.md +3 -1
  166. package/docs/assets/cueline-architecture-en.svg +63 -0
  167. package/docs/assets/cueline-architecture-ja.svg +63 -0
  168. package/docs/assets/cueline-architecture-ko.svg +63 -0
  169. package/docs/assets/cueline-architecture-zh-CN.svg +63 -0
  170. package/docs/assets/cueline-architecture-zh-TW.svg +63 -0
  171. package/docs/assets/cueline-states-en.svg +50 -0
  172. package/docs/assets/cueline-states-ja.svg +48 -0
  173. package/docs/assets/cueline-states-ko.svg +48 -0
  174. package/docs/assets/cueline-states-zh-CN.svg +48 -0
  175. package/docs/assets/cueline-states-zh-TW.svg +48 -0
  176. package/docs/compatibility.md +1 -1
  177. package/docs/controller-protocol.md +44 -7
  178. package/docs/experiments/protocol-lint.md +40 -0
  179. package/docs/experiments/run-doctor.md +39 -0
  180. package/docs/experiments/run-handoff.md +39 -0
  181. package/docs/experiments/run-timeline.md +35 -0
  182. package/docs/experiments/run-watch.md +31 -0
  183. package/docs/multi-model-routing.md +256 -0
  184. package/docs/runner-contract.md +4 -3
  185. package/docs/state-and-recovery.md +45 -5
  186. package/package.json +1 -1
  187. package/schemas/controller-command.schema.json +89 -4
  188. 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 atomically replaced JSON status file per job. The write format is
25
- * deliberately small so foreground and background work share the same view.
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
  }
@@ -1,7 +1,100 @@
1
- import { mkdir, readFile, rename, writeFile } from "node:fs/promises";
1
+ import { readFile } from "node:fs/promises";
2
2
  import path from "node:path";
3
3
  import { CueLineError } from "../core/errors.js";
4
- import { runtimePidTag } from "../core/runtime.js";
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 atomically replaced JSON status file per job. The write format is
14
- * deliberately small so foreground and background work share the same view.
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
- assertSafeJobId(status.jobId);
23
- await mkdir(this.#directory, { recursive: true });
24
- const target = this.pathFor(status.jobId);
25
- const temporary = `${target}.${runtimePidTag()}.${Date.now()}.tmp`;
26
- await writeFile(temporary, `${JSON.stringify(status)}\n`, "utf8");
27
- await rename(temporary, target);
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
- const source = await readFile(this.pathFor(jobId), "utf8");
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,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AA0BnD,SAAS,eAAe,CAAC,KAAa;IACpC,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,YAAY,CAAC,gBAAgB,EAAE,6CAA6C,EAAE;YACtF,OAAO,EAAE,EAAE,KAAK,EAAE;SACnB,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,OAAO,cAAc;IAChB,UAAU,CAAS;IAE5B,YAAY,aAAqB;QAC/B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,MAAiB;QAC3B,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9B,MAAM,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,SAAS,GAAG,GAAG,MAAM,IAAI,aAAa,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;QACnE,MAAM,SAAS,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAClE,MAAM,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAa;QACtB,eAAe,CAAC,KAAK,CAAC,CAAC;QACvB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;YAC3D,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAc,CAAC;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtB,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,MAAM,IAAI,YAAY,CAAC,wBAAwB,EAAE,8BAA8B,KAAK,EAAE,EAAE;gBACtF,KAAK,EAAE,KAAK;gBACZ,OAAO,EAAE,EAAE,KAAK,EAAE;aACnB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,CAAC,KAAa;QACnB,eAAe,CAAC,KAAK,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC;IACrD,CAAC;CACF;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;AACnG,CAAC"}
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 progressWrites = Promise.resolve();
97
- const persistProgress = (update) => {
98
- progressWrites = progressWrites.then(async () => {
99
- running.current = { ...running.current, ...update };
100
- await this.options.statusStore.write(running.current);
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
- return progressWrites;
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
- await progressWrites;
165
+ acceptsProgress = false;
166
+ await flushProgress();
119
167
  terminal = this.withResult(running.current, result);
120
168
  }
121
169
  catch (error) {
122
- await progressWrites.catch(() => undefined);
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 {};