cueline 0.1.6 → 0.1.7
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 +27 -0
- package/README.ja.md +29 -7
- package/README.ko.md +29 -7
- package/README.md +78 -11
- package/README.zh-CN.md +29 -7
- package/README.zh-TW.md +36 -8
- 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 +49 -0
- package/dist/src/api-controller-handoff.js +30 -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 +17 -3
- package/dist/src/api.js +105 -38
- package/dist/src/api.js.map +1 -1
- package/dist/src/browser/browser-adapter.d.ts +15 -0
- package/dist/src/browser/codex-iab/bootstrap.d.ts +20 -0
- package/dist/src/browser/codex-iab/bootstrap.js +173 -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 +115 -57
- 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 +191 -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 +159 -77
- 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 +239 -0
- package/dist/src/cli/observation-commands.js.map +1 -0
- package/dist/src/cli/run-status-view.d.ts +79 -0
- package/dist/src/cli/run-status-view.js +112 -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 +114 -23
- package/dist/src/core/controller-loop.js.map +1 -1
- package/dist/src/core/controller-turn.d.ts +14 -2
- package/dist/src/core/controller-turn.js +109 -40
- 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 +9 -2
- package/dist/src/core/run-status.js +38 -25
- package/dist/src/core/run-status.js.map +1 -1
- package/dist/src/core/state-machine.d.ts +21 -1
- package/dist/src/core/state-machine.js +138 -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-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-timeline.d.ts +32 -0
- package/dist/src/observation/run-timeline.js +278 -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/resolver.js +8 -3
- 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/compatibility.md +1 -1
- package/docs/controller-protocol.md +38 -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/runner-contract.md +4 -3
- package/docs/state-and-recovery.md +15 -5
- package/package.json +1 -1
- package/schemas/controller-command.schema.json +89 -4
- package/skills/cueline/SKILL.md +13 -7
package/README.zh-TW.md
CHANGED
|
@@ -17,6 +17,15 @@
|
|
|
17
17
|
|
|
18
18
|
CueLine 是獨立實作,**沒有任何 runtime npm 相依套件**,也不是 Omnilane 或 GPT Relay 的包裝層。
|
|
19
19
|
|
|
20
|
+
## 最新版本:0.1.7
|
|
21
|
+
|
|
22
|
+
- 新增安全的 run 清單、doctor、watch、timeline、handoff、完整性驗證、協定 lint、瀏覽器診斷與 inspect 證據分頁。
|
|
23
|
+
- 強化分頁/按鈕證據、指令與路由上限、原子 job 狀態、私有持久資料、workdir 身分、runtime/取消紀錄,以及 CLI 去敏感資訊。
|
|
24
|
+
- 新增選用的 `complete` 後精確對話封存:點擊前有持久 fence,Pro 又開始回答或換頁就拒絕,進入含糊狀態後絕不重點。
|
|
25
|
+
- 完成 454/454 測試與一次可丟棄的真實 ChatGPT Web Pro 驗收;主控自然完成、只封存一次,原本使用者對話完全未動。
|
|
26
|
+
|
|
27
|
+
完整內容請看 [changelog](CHANGELOG.md#017---2026-07-16) 或不可變的 [v0.1.7 release](https://github.com/Seraphim0916/cueline/releases/tag/v0.1.7)。
|
|
28
|
+
|
|
20
29
|
## 一次執行實際上怎麼跑
|
|
21
30
|
|
|
22
31
|
<img alt="Caller-first CueLine 執行:ChatGPT 下文字命令,目前的 Codex 做本機唯讀查驗,CueLine 回送有界證據直到 complete。" src="docs/assets/cueline-loop-zh-TW.svg" width="100%">
|
|
@@ -25,7 +34,7 @@ CueLine 是獨立實作,**沒有任何 runtime npm 相依套件**,也不是
|
|
|
25
34
|
|
|
26
35
|
非預設的 `maxRounds` 會在建立 run 時固定,並跨所有無 owner 的暫停累計主控總輪數。之後續跑通常省略它、沿用持久值;若傳入不同數字,CueLine 會拒絕,不會偷偷重設或放寬預算。
|
|
27
36
|
|
|
28
|
-
`startCueLineRun` 與 `runCueLine` 都預設使用 `caller` executor。使用內建瀏覽器時,CueLine 只送一次、保存精確對話 URL,然後回傳 `awaiting_controller` 並釋放 runtime lease,不會讓單一工具呼叫卡著等 Pro 思考。之後的 `continueCueLineRun` 只做一次唯讀觀測;若仍未完成,就再次回傳 `awaiting_controller`,絕不重送。`advise` 派工回傳 `awaiting_caller`,沒有副作用 claim,需協調單一 session。`work` 派工回傳 `awaiting_caller_work`,在目前 Codex 呼叫 `claimCueLineCallerJob` 與 `startCueLineCallerJob` 前,絕對尚未開始本機修改。claim 綁定 run、job、task hash、絕對 workdir、caller identity 與 fencing token
|
|
37
|
+
`startCueLineRun` 與 `runCueLine` 都預設使用 `caller` executor。使用內建瀏覽器時,CueLine 只送一次、保存精確對話 URL,然後回傳 `awaiting_controller` 並釋放 runtime lease,不會讓單一工具呼叫卡著等 Pro 思考。之後的 `continueCueLineRun` 只做一次唯讀觀測;若仍未完成,就再次回傳 `awaiting_controller`,絕不重送。`advise` 派工回傳 `awaiting_caller`,沒有副作用 claim,需協調單一 session。`work` 派工回傳 `awaiting_caller_work`,在目前 Codex 呼叫 `claimCueLineCallerJob` 與 `startCueLineCallerJob` 前,絕對尚未開始本機修改。claim 綁定 run、job、task hash、絕對 workdir、canonical 目錄身分、caller identity 與 fencing token;本機工作只能使用它回傳的 `resolvedWorkdir`。已開始的工作不會自動重試,claim 逾期則成為 `ambiguous`。Pro 只提出與審查文字指令,沒有親自使用本機工具。
|
|
29
38
|
|
|
30
39
|
Process 模式必須同時指定 `executor: "process"` 與 `allowProcessExecution: true`,非終態續跑也要再次傳入第二道授權。內建 route 另加 `--ignore-user-config`,不讓隱藏 worker 載入使用者設定的 MCP server 或其命令參數。通道(lane)必須啟用、候選項必須在任何程序啟動**之前**就確認可用、`argv[0]` 必須早已由路由設定註冊。沒有任何東西會經過 shell。唯讀工作預設全域與每 lane 最多同時 2 個;只要批次包含 `work` 就維持串行。狀態會顯示解析後 runner、PID、phase、最後進度時間,以及安全辨識到的 model/provider。
|
|
31
40
|
|
|
@@ -48,15 +57,15 @@ ChatGPT Pro 訂閱方案與「選定的 Pro 模型」是兩回事。帳號或個
|
|
|
48
57
|
從 npm registry 安裝:
|
|
49
58
|
|
|
50
59
|
```bash
|
|
51
|
-
npm install -g cueline@0.1.
|
|
60
|
+
npm install -g cueline@0.1.7
|
|
52
61
|
cueline install
|
|
53
62
|
cueline doctor
|
|
54
63
|
```
|
|
55
64
|
|
|
56
|
-
作為備援,也可以安裝 [v0.1.
|
|
65
|
+
作為備援,也可以安裝 [v0.1.7 release](https://github.com/Seraphim0916/cueline/releases/tag/v0.1.7) 上的打包 tarball,該 release 同時附上它的 `.sha256` 校驗碼:
|
|
57
66
|
|
|
58
67
|
```bash
|
|
59
|
-
npm install -g https://github.com/Seraphim0916/cueline/releases/download/v0.1.
|
|
68
|
+
npm install -g https://github.com/Seraphim0916/cueline/releases/download/v0.1.7/cueline-0.1.7.tgz
|
|
60
69
|
cueline install
|
|
61
70
|
cueline doctor
|
|
62
71
|
```
|
|
@@ -101,6 +110,7 @@ import {
|
|
|
101
110
|
let result = await runCueLine({
|
|
102
111
|
request: "Inspect the repository, delegate an implementation plan, and report the evidence.",
|
|
103
112
|
browser: createCodexIabAdapter({ browser: globalThis.browser }),
|
|
113
|
+
// 選填並明確啟用:archiveControllerConversationOnComplete: true,
|
|
104
114
|
// 選填:conversationUrl、routingConfig / routingConfigPath、home、cwd、
|
|
105
115
|
// runTimeoutMs、signal,以及各工作/預設期限。
|
|
106
116
|
}); // 預設 executor: "caller"
|
|
@@ -128,7 +138,7 @@ while (["awaiting_controller", "awaiting_caller", "awaiting_caller_work"].includ
|
|
|
128
138
|
fencingToken: claim.fencingToken,
|
|
129
139
|
};
|
|
130
140
|
await startCueLineCallerJob(result.runId, job.jobId, proof);
|
|
131
|
-
const stdout = await executeExactLocalWork(job.spec.task, claim.
|
|
141
|
+
const stdout = await executeExactLocalWork(job.spec.task, claim.resolvedWorkdir, {
|
|
132
142
|
heartbeat: () => heartbeatCueLineCallerJob(result.runId, job.jobId, proof),
|
|
133
143
|
});
|
|
134
144
|
await submitCueLineCallerJobResult(
|
|
@@ -147,22 +157,28 @@ if (result.status === "complete") {
|
|
|
147
157
|
}
|
|
148
158
|
```
|
|
149
159
|
|
|
160
|
+
`archiveControllerConversationOnComplete` 預設為 `false`,並在建立 run 時固定。啟用後,CueLine 會先把 `complete` 寫進持久紀錄,再於 Pro 未回答時封存那一個精確對話。點擊 fence 前能證明尚未點擊的失敗可以重試;fence 後只要逾時、重開、換頁或缺少完成證據,就標成 `ambiguous` 且永不再點。`blocked` 與 `cancelled` 一律保留原對話。
|
|
161
|
+
|
|
150
162
|
若回傳 `awaiting_controller`,代表同一個精確 request 已送出、但 Pro 回覆尚未被觀測;稍後續跑只會唯讀觀測,不會重送。`awaiting_caller` 交接 `advise`;`awaiting_caller_work` 則必須依序 claim、start、執行、heartbeat 與帶 claim proof 提交結果。Pro 網頁從未直接使用本機工具。
|
|
151
163
|
|
|
164
|
+
`listCueLineRuns()` 是唯讀且已去敏感資訊的 run 清單,可用來找回持久化的 run ID;它不包含主控文字、對話網址、工作內容或 worker 輸出。
|
|
165
|
+
|
|
166
|
+
`verifyCueLineRun(runId)` 是唯讀完整性檢查,會核對建立 marker、event replay 與 authority fence、選用 snapshot、runtime lease 和 job status 證據;只回傳穩定 finding,不回傳持久 run 內容。
|
|
167
|
+
|
|
152
168
|
在 Codex 的 runtime 裡,import `cueline api path` 印出的那個絕對路徑模組——那就是你安裝的那份套件建置出來的 API。
|
|
153
169
|
|
|
154
|
-
`startCueLineRun` 只建立持久 run 並回傳 `ready`;`runCueLine` 會建立並推進到持久 controller 觀測暫停、caller 交接或終態。續跑前先執行 `cueline run status <run-id> --json`。單一正常送出、非人工、具精確 URL、無 job/pending command/取消的 stale caller observer 可被 fencing 後唯讀恢復;其他 stale 狀態仍須正式接管。`caller_work_pending`、`caller_work_claimed`、`caller_work_running` 分別只允許 `claim_caller_work`、`start_caller_work`、`continue_caller_work`,主控的 `dispatch` 本身不代表本機工作已開始。
|
|
170
|
+
`startCueLineRun` 只建立持久 run 並回傳 `ready`;`runCueLine` 會建立並推進到持久 controller 觀測暫停、caller 交接或終態。續跑前先執行 `cueline run status <run-id> --json`。單一正常送出、非人工、具精確 URL、無 job/pending command/取消的 stale caller observer 可被 fencing 後唯讀恢復;其他 stale 狀態仍須正式接管。`caller_work_pending`、`caller_work_claimed`、`caller_work_running` 分別只允許 `claim_caller_work`、`start_caller_work`、`continue_caller_work`,主控的 `dispatch` 本身不代表本機工作已開始。CLI 的 `run status` 只輸出交接所需 metadata,不包含 task 內文、caller 身分、task hash、workdir 或 runtime owner ID;完成正式 claim 後,API 才會把精確 task 與 workdir 交給獲授權的 caller。
|
|
155
171
|
|
|
156
172
|
## CLI
|
|
157
173
|
|
|
158
|
-
CLI 不驅動瀏覽器。`doctor`、`routing`、`jobs`、`run status`、`api path`、`config path` 都是唯讀;`install`/`uninstall` 只改套件擁有的 skill 連結;`run reconcile`、`run takeover`、`run reconcile-runtime`、`run cancel`/`run stop`、`job cancel` 會追加稽核證據或修改持久 run/job 狀態。執行寫入狀態的命令前,先用 `cueline help` 核對完整參數。
|
|
174
|
+
CLI 不驅動瀏覽器。`doctor`、`routing`、`jobs`、`runs`、`run status`、`run verify`、`api path`、`config path` 都是唯讀;`install`/`uninstall` 只改套件擁有的 skill 連結;`run reconcile`、`run takeover`、`run reconcile-runtime`、`run cancel`/`run stop`、`job cancel` 會追加稽核證據或修改持久 run/job 狀態。執行寫入狀態的命令前,先用 `cueline help` 核對完整參數。
|
|
159
175
|
|
|
160
176
|
```console
|
|
161
177
|
$ cueline install
|
|
162
178
|
CueLine skill installed: /Users/you/.codex/skills/cueline
|
|
163
179
|
|
|
164
180
|
$ cueline doctor
|
|
165
|
-
CueLine 0.1.
|
|
181
|
+
CueLine 0.1.7
|
|
166
182
|
status ok
|
|
167
183
|
node 22.14.0 ok
|
|
168
184
|
config /usr/local/lib/node_modules/cueline/config/routing.default.json valid
|
|
@@ -171,18 +187,30 @@ caller_ready yes
|
|
|
171
187
|
caller_lanes 1
|
|
172
188
|
process_available_lanes 1
|
|
173
189
|
|
|
190
|
+
$ cueline doctor --json
|
|
191
|
+
{"version":"0.1.7","status":"ok","node":{"version":"22.14.0","ok":true,"requirement":">=22"},...}
|
|
192
|
+
|
|
174
193
|
$ cueline api path
|
|
175
194
|
/usr/local/lib/node_modules/cueline/dist/src/api.js
|
|
176
195
|
|
|
177
196
|
$ cueline routing
|
|
178
197
|
default codex-default available
|
|
179
198
|
|
|
199
|
+
$ cueline routing --json
|
|
200
|
+
{"version":"0.1.7","availableLanes":1,"lanes":[{"name":"default","status":"available","selectedRunnerId":"codex-default"}],...}
|
|
201
|
+
|
|
180
202
|
$ cueline jobs
|
|
181
203
|
No jobs.
|
|
182
204
|
|
|
205
|
+
$ cueline runs
|
|
206
|
+
No runs.
|
|
207
|
+
|
|
183
208
|
$ cueline run status run_... --json
|
|
184
209
|
{"status":"running","executor":"caller","phase":"caller_jobs_pending","runtime":{"ownership":"missing"},...}
|
|
185
210
|
|
|
211
|
+
$ cueline run verify run_... --json
|
|
212
|
+
{"runId":"run_...","outcome":"verified","marker":"valid",...}
|
|
213
|
+
|
|
186
214
|
$ cueline run takeover stale_run_... --json
|
|
187
215
|
{"runId":"stale_run_...","outcome":"taken_over","next":"continue",...}
|
|
188
216
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
|
-
import { stat } from "node:fs/promises";
|
|
2
|
+
import { realpath, stat } from "node:fs/promises";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { CueLineError } from "./core/errors.js";
|
|
5
5
|
import { jobSpecHash } from "./core/ids.js";
|
|
@@ -47,13 +47,41 @@ function callerWorkJob(store, jobId) {
|
|
|
47
47
|
}
|
|
48
48
|
return job;
|
|
49
49
|
}
|
|
50
|
-
async function
|
|
51
|
-
const
|
|
50
|
+
async function inspectWorkdir(workdir) {
|
|
51
|
+
const resolvedPath = await realpath(workdir).catch((error) => {
|
|
52
|
+
throw new CueLineError("CALLER_WORKDIR_UNAVAILABLE", `Caller workdir '${workdir}' is unavailable.`, { cause: error });
|
|
53
|
+
});
|
|
54
|
+
const metadata = await stat(resolvedPath).catch((error) => {
|
|
52
55
|
throw new CueLineError("CALLER_WORKDIR_UNAVAILABLE", `Caller workdir '${workdir}' is unavailable.`, { cause: error });
|
|
53
56
|
});
|
|
54
57
|
if (!metadata.isDirectory()) {
|
|
55
58
|
throw new CueLineError("CALLER_WORKDIR_UNAVAILABLE", `Caller workdir '${workdir}' is not a directory.`);
|
|
56
59
|
}
|
|
60
|
+
return {
|
|
61
|
+
resolvedPath,
|
|
62
|
+
device: String(metadata.dev),
|
|
63
|
+
inode: String(metadata.ino),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
function sameWorkdirIdentity(left, right) {
|
|
67
|
+
return (left.resolvedPath === right.resolvedPath &&
|
|
68
|
+
left.device === right.device &&
|
|
69
|
+
left.inode === right.inode);
|
|
70
|
+
}
|
|
71
|
+
async function assertClaimedWorkdir(claim) {
|
|
72
|
+
if (claim.workdirIdentity === undefined) {
|
|
73
|
+
throw new CueLineError("CALLER_WORKDIR_IDENTITY_REQUIRED", `Caller work claim '${claim.claimId}' predates directory pinning; reclaim it with the same caller before starting local work.`);
|
|
74
|
+
}
|
|
75
|
+
const observed = await inspectWorkdir(claim.workdir);
|
|
76
|
+
if (!sameWorkdirIdentity(observed, claim.workdirIdentity)) {
|
|
77
|
+
throw new CueLineError("CALLER_WORKDIR_IDENTITY_MISMATCH", `Caller workdir '${claim.workdir}' no longer identifies the directory pinned by claim '${claim.claimId}'.`, {
|
|
78
|
+
details: {
|
|
79
|
+
expected_resolved_path: claim.workdirIdentity.resolvedPath,
|
|
80
|
+
observed_resolved_path: observed.resolvedPath,
|
|
81
|
+
},
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
return observed;
|
|
57
85
|
}
|
|
58
86
|
function claimExpired(claim, now) {
|
|
59
87
|
const expiresAt = Date.parse(claim.expiresAt);
|
|
@@ -77,6 +105,9 @@ function expiration(now, ttlMs) {
|
|
|
77
105
|
async function writeClaimJobStatus(home, store, job, status, timestamp, error) {
|
|
78
106
|
const statusStore = new JobStatusStore(home);
|
|
79
107
|
const existing = await statusStore.read(job.jobId);
|
|
108
|
+
const startedAt = status === "running" && existing?.status !== "running"
|
|
109
|
+
? timestamp
|
|
110
|
+
: (existing?.startedAt ?? timestamp);
|
|
80
111
|
const next = {
|
|
81
112
|
jobId: job.jobId,
|
|
82
113
|
runId: store.runId,
|
|
@@ -85,7 +116,7 @@ async function writeClaimJobStatus(home, store, job, status, timestamp, error) {
|
|
|
85
116
|
mode: job.spec.mode,
|
|
86
117
|
execution: "foreground",
|
|
87
118
|
status,
|
|
88
|
-
startedAt
|
|
119
|
+
startedAt,
|
|
89
120
|
...(status === "ambiguous" ? { finishedAt: timestamp } : {}),
|
|
90
121
|
...(error === undefined ? {} : { error }),
|
|
91
122
|
};
|
|
@@ -111,13 +142,13 @@ async function persistStartedClaimAmbiguous(store, job, claim, home, now) {
|
|
|
111
142
|
await writeClaimJobStatus(home, store, job, "ambiguous", now.toISOString(), reason);
|
|
112
143
|
return reason;
|
|
113
144
|
}
|
|
114
|
-
async function releaseExpiredUnstartedClaim(store, job, claim, home, now) {
|
|
145
|
+
async function releaseExpiredUnstartedClaim(store, job, claim, home, now, reason = "expired_before_start") {
|
|
115
146
|
await store.append("caller_work_claim_released", {
|
|
116
147
|
job_id: job.jobId,
|
|
117
148
|
claim_id: claim.claimId,
|
|
118
149
|
fencing_token: claim.fencingToken,
|
|
119
150
|
caller_id: claim.callerId,
|
|
120
|
-
reason
|
|
151
|
+
reason,
|
|
121
152
|
released_at: now.toISOString(),
|
|
122
153
|
});
|
|
123
154
|
await writeClaimJobStatus(home, store, job, "pending", now.toISOString());
|
|
@@ -154,6 +185,7 @@ function claimResult(runId, job, claim, outcome) {
|
|
|
154
185
|
task: job.spec.task,
|
|
155
186
|
taskHash: claim.taskHash,
|
|
156
187
|
workdir: claim.workdir,
|
|
188
|
+
resolvedWorkdir: claim.workdirIdentity?.resolvedPath ?? claim.workdir,
|
|
157
189
|
claimId: claim.claimId,
|
|
158
190
|
callerId: claim.callerId,
|
|
159
191
|
fencingToken: claim.fencingToken,
|
|
@@ -203,21 +235,29 @@ export async function claimCueLineCallerJob(runId, jobId, options) {
|
|
|
203
235
|
if (existing !== null && existing !== undefined) {
|
|
204
236
|
if (!claimExpired(existing, currentTime)) {
|
|
205
237
|
if (existing.callerId === options.callerId) {
|
|
206
|
-
|
|
238
|
+
if (existing.workdirIdentity !== undefined || existing.startedAt !== null) {
|
|
239
|
+
return claimResult(runId, job, existing, "already_claimed");
|
|
240
|
+
}
|
|
241
|
+
await releaseExpiredUnstartedClaim(store, job, existing, home, currentTime, "identity_upgrade_before_start");
|
|
242
|
+
job = callerWorkJob(store, jobId);
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
throw new CueLineError("CALLER_WORK_ALREADY_CLAIMED", `Caller work job '${jobId}' already has an active claim.`, { details: { job_id: jobId, expires_at: existing.expiresAt } });
|
|
207
246
|
}
|
|
208
|
-
throw new CueLineError("CALLER_WORK_ALREADY_CLAIMED", `Caller work job '${jobId}' already has an active claim.`, { details: { job_id: jobId, expires_at: existing.expiresAt } });
|
|
209
247
|
}
|
|
210
|
-
|
|
211
|
-
|
|
248
|
+
else {
|
|
249
|
+
if (existing.startedAt !== null) {
|
|
250
|
+
await markStartedClaimAmbiguous(store, job, existing, home, currentTime);
|
|
251
|
+
}
|
|
252
|
+
await releaseExpiredUnstartedClaim(store, job, existing, home, currentTime);
|
|
253
|
+
job = callerWorkJob(store, jobId);
|
|
212
254
|
}
|
|
213
|
-
await releaseExpiredUnstartedClaim(store, job, existing, home, currentTime);
|
|
214
|
-
job = callerWorkJob(store, jobId);
|
|
215
255
|
}
|
|
216
256
|
if (job.status !== "pending") {
|
|
217
257
|
throw new CueLineError("CALLER_WORK_CLAIM_STATE_INVALID", `Caller work job '${jobId}' is running without an active claim and cannot be reclaimed safely.`);
|
|
218
258
|
}
|
|
219
259
|
const workdir = job.spec.workdir;
|
|
220
|
-
await
|
|
260
|
+
const workdirIdentity = await inspectWorkdir(workdir);
|
|
221
261
|
const timestamp = currentTime.toISOString();
|
|
222
262
|
const fencingToken = (job.callerWork?.nextFencingToken ?? 0) + 1;
|
|
223
263
|
const claim = {
|
|
@@ -225,6 +265,7 @@ export async function claimCueLineCallerJob(runId, jobId, options) {
|
|
|
225
265
|
callerId: options.callerId,
|
|
226
266
|
taskHash: jobSpecHash(job.spec),
|
|
227
267
|
workdir,
|
|
268
|
+
workdirIdentity,
|
|
228
269
|
fencingToken,
|
|
229
270
|
claimedAt: timestamp,
|
|
230
271
|
heartbeatAt: timestamp,
|
|
@@ -261,7 +302,7 @@ export async function startCueLineCallerJob(runId, jobId, proof, options = {}) {
|
|
|
261
302
|
expiresAt: claim.expiresAt,
|
|
262
303
|
};
|
|
263
304
|
}
|
|
264
|
-
await
|
|
305
|
+
await assertClaimedWorkdir(claim);
|
|
265
306
|
const timestamp = currentTime.toISOString();
|
|
266
307
|
const expiresAt = expiration(currentTime, claim.ttlMs);
|
|
267
308
|
await store.append("caller_work_started", {
|
|
@@ -271,6 +312,9 @@ export async function startCueLineCallerJob(runId, jobId, proof, options = {}) {
|
|
|
271
312
|
fencing_token: claim.fencingToken,
|
|
272
313
|
task_hash: claim.taskHash,
|
|
273
314
|
workdir: claim.workdir,
|
|
315
|
+
...(claim.workdirIdentity === undefined
|
|
316
|
+
? {}
|
|
317
|
+
: { workdir_identity: claim.workdirIdentity }),
|
|
274
318
|
started_at: timestamp,
|
|
275
319
|
expires_at: expiresAt,
|
|
276
320
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-caller-work.js","sourceRoot":"","sources":["../../src/api-caller-work.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,IAAI,MAAM,WAAW,CAAC;AAS7B,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAMvD,OAAO,EAAE,cAAc,EAAkB,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,YAAY,GACb,MAAM,0BAA0B,CAAC;AAGlC,MAAM,gCAAgC,GAAG,OAAO,CAAC;AACjD,MAAM,4BAA4B,GAAG,KAAK,CAAC;AAC3C,MAAM,4BAA4B,GAAG,UAAU,CAAC;AAIhD,SAAS,cAAc,CAAC,KAAa;IACnC,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG,IAAI,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACrF,MAAM,IAAI,YAAY,CACpB,mBAAmB,EACnB,8EAA8E,CAC/E,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,KAAyB;IAC/C,MAAM,KAAK,GAAG,KAAK,IAAI,gCAAgC,CAAC;IACxD,IACE,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC;QAC5B,KAAK,GAAG,4BAA4B;QACpC,KAAK,GAAG,4BAA4B,EACpC,CAAC;QACD,MAAM,IAAI,YAAY,CACpB,+BAA+B,EAC/B,mDAAmD,4BAA4B,OAAO,4BAA4B,GAAG,CACtH,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAkC;IAC1D,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC/B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7E,MAAM,IAAI,YAAY,CACpB,iCAAiC,EACjC,iFAAiF,CAClF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,KAAgC,EAAE,KAAa;IACpE,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACtC,MAAM,IAAI,YAAY,CACpB,0BAA0B,EAC1B,QAAQ,KAAK,CAAC,KAAK,6DAA6D,CACjF,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,YAAY,CAAC,eAAe,EAAE,WAAW,KAAK,oBAAoB,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;IAC/F,CAAC;IACD,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC7B,MAAM,IAAI,YAAY,CACpB,0BAA0B,EAC1B,QAAQ,KAAK,wDAAwD,CACtE,CAAC;IACJ,CAAC;IACD,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACzE,MAAM,IAAI,YAAY,CACpB,yBAAyB,EACzB,oBAAoB,KAAK,wCAAwC,CAClE,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,KAAK,UAAU,sBAAsB,CAAC,OAAe;IACnD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;QAC5D,MAAM,IAAI,YAAY,CACpB,4BAA4B,EAC5B,mBAAmB,OAAO,mBAAmB,EAC7C,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;QAC5B,MAAM,IAAI,YAAY,CACpB,4BAA4B,EAC5B,mBAAmB,OAAO,uBAAuB,CAClD,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAsB,EAAE,GAAS;IACrD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC9C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;AACnE,CAAC;AAED,SAAS,yBAAyB,CAAC,KAAsB,EAAE,GAAS;IAClE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,GAAG,WAAW,EAAE,CAAC;QACjE,MAAM,IAAI,YAAY,CACpB,8BAA8B,EAC9B,mEAAmE,KAAK,CAAC,OAAO,+DAA+D,EAC/I;YACE,OAAO,EAAE;gBACP,QAAQ,EAAE,KAAK,CAAC,OAAO;gBACvB,YAAY,EAAE,KAAK,CAAC,WAAW;gBAC/B,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE;aAC/B;SACF,CACF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,GAAS,EAAE,KAAa;IAC1C,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;AACvD,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,IAAY,EACZ,KAAgC,EAChC,GAAc,EACd,MAA2C,EAC3C,SAAiB,EACjB,KAAc;IAEd,MAAM,WAAW,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACnD,MAAM,IAAI,GAAc;QACtB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI;QACnB,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI;QACnB,SAAS,EAAE,YAAY;QACvB,MAAM;QACN,SAAS,EAAE,QAAQ,EAAE,SAAS,IAAI,SAAS;QAC3C,GAAG,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5D,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;KAC1C,CAAC;IACF,MAAM,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC;AAED,KAAK,UAAU,yBAAyB,CACtC,KAAgC,EAChC,GAAc,EACd,KAAsB,EACtB,IAAY,EACZ,GAAS;IAET,MAAM,MAAM,GAAG,MAAM,4BAA4B,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IAChF,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;IACvB,MAAM,IAAI,YAAY,CAAC,8BAA8B,EAAE,MAAM,EAAE;QAC7D,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,OAAO,EAAE;KAC7E,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,4BAA4B,CACzC,KAAgC,EAChC,GAAc,EACd,KAAsB,EACtB,IAAY,EACZ,GAAS;IAET,MAAM,MAAM,GACV,iGAAiG,CAAC;IACpG,MAAM,KAAK,CAAC,MAAM,CAAC,8BAA8B,EAAE;QACjD,MAAM,EAAE,GAAG,CAAC,KAAK;QACjB,QAAQ,EAAE,KAAK,CAAC,OAAO;QACvB,aAAa,EAAE,KAAK,CAAC,YAAY;QACjC,SAAS,EAAE,KAAK,CAAC,QAAQ;QACzB,MAAM;QACN,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE;KAC/B,CAAC,CAAC;IACH,MAAM,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,EAAE,MAAM,CAAC,CAAC;IACpF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,4BAA4B,CACzC,KAAgC,EAChC,GAAc,EACd,KAAsB,EACtB,IAAY,EACZ,GAAS;IAET,MAAM,KAAK,CAAC,MAAM,CAAC,4BAA4B,EAAE;QAC/C,MAAM,EAAE,GAAG,CAAC,KAAK;QACjB,QAAQ,EAAE,KAAK,CAAC,OAAO;QACvB,aAAa,EAAE,KAAK,CAAC,YAAY;QACjC,SAAS,EAAE,KAAK,CAAC,QAAQ;QACzB,MAAM,EAAE,sBAAsB;QAC9B,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE;KAC/B,CAAC,CAAC;IACH,MAAM,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;AAC5E,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,KAAgC,EAChC,GAAc,EACd,KAAsB,EACtB,IAAY,EACZ,GAAS;IAET,yBAAyB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACtC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC;QAAE,OAAO;IACtC,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;QAC7B,MAAM,yBAAyB,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IAChE,CAAC;IACD,MAAM,4BAA4B,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IACjE,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;IACvB,MAAM,IAAI,YAAY,CACpB,2BAA2B,EAC3B,sBAAsB,KAAK,CAAC,OAAO,sCAAsC,EACzE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,CACjF,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,GAAc,EAAE,KAAkC;IACpE,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACxB,MAAM,KAAK,GAAG,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC;IACpC,IACE,CAAC,KAAK;QACN,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO;QAC/B,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ;QACjC,KAAK,CAAC,YAAY,KAAK,KAAK,CAAC,YAAY;QACzC,KAAK,CAAC,QAAQ,KAAK,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;QACxC,KAAK,CAAC,OAAO,KAAK,GAAG,CAAC,IAAI,CAAC,OAAO,EAClC,CAAC;QACD,MAAM,IAAI,YAAY,CACpB,4BAA4B,EAC5B,wEAAwE,GAAG,CAAC,KAAK,IAAI,CACtF,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAClB,KAAa,EACb,GAAc,EACd,KAAsB,EACtB,OAAgD;IAEhD,OAAO;QACL,KAAK;QACL,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,OAAO;QACP,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI;QACnB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,OAAO,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI;KAClC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,KAAa,EACb,OAAwE,EACxE,SAIoB;IAEpB,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,kBAAkB,EAAE,CAAC;IAChE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAC7D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAC9C,MAAM,qBAAqB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7D,MAAM,YAAY,GAChB,CAAC,OAAO,CAAC,SAAS,KAAK,QAAQ,IAAI,OAAO,CAAC,SAAS,KAAK,OAAO,CAAC;QACjE,OAAO,CAAC,OAAO,KAAK,SAAS;QAC7B,CAAC,MAAM,sBAAsB,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAC1D,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE;QAC5D,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7D,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,qBAAqB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACvD,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,KAAK,CAAC,MAAM,CAAC,4BAA4B,EAAE;gBAC/C,QAAQ,EAAE,YAAY,CAAC,OAAO;gBAC9B,kBAAkB,EAAE,YAAY,CAAC,SAAS;aAC3C,CAAC,CAAC;QACL,CAAC;QACD,OAAO,MAAM,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IAC3C,CAAC;YAAS,CAAC;QACT,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,KAAa,EACb,KAAa,EACb,OAAsC;IAEtC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACjC,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5C,OAAO,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;QACpE,IAAI,GAAG,GAAG,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACtC,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACzD,MAAM,IAAI,YAAY,CACpB,2BAA2B,EAC3B,oBAAoB,KAAK,iBAAiB,GAAG,CAAC,MAAM,0BAA0B,CAC/E,CAAC;QACJ,CAAC;QACD,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC;QACvC,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAChD,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,CAAC;gBACzC,IAAI,QAAQ,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;oBAC3C,OAAO,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC;gBAC9D,CAAC;gBACD,MAAM,IAAI,YAAY,CACpB,6BAA6B,EAC7B,oBAAoB,KAAK,gCAAgC,EACzD,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,SAAS,EAAE,EAAE,CAC/D,CAAC;YACJ,CAAC;YACD,IAAI,QAAQ,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;gBAChC,MAAM,yBAAyB,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;YAC3E,CAAC;YACD,MAAM,4BAA4B,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;YAC5E,GAAG,GAAG,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,IAAI,YAAY,CACpB,iCAAiC,EACjC,oBAAoB,KAAK,sEAAsE,CAChG,CAAC;QACJ,CAAC;QACD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,OAAQ,CAAC;QAClC,MAAM,sBAAsB,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,SAAS,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;QAC5C,MAAM,YAAY,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,gBAAgB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACjE,MAAM,KAAK,GAAoB;YAC7B,OAAO,EAAE,SAAS,UAAU,EAAE,EAAE;YAChC,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,QAAQ,EAAE,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;YAC/B,OAAO;YACP,YAAY;YACZ,SAAS,EAAE,SAAS;YACpB,WAAW,EAAE,SAAS;YACtB,SAAS,EAAE,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC;YACzC,KAAK;YACL,SAAS,EAAE,IAAI;SAChB,CAAC;QACF,MAAM,KAAK,CAAC,MAAM,CAAC,qBAAqB,EAAE;YACxC,MAAM,EAAE,GAAG,CAAC,KAAK;YACjB,KAAK;SACN,CAAC,CAAC;QACH,MAAM,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAClE,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;QACvB,OAAO,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,KAAa,EACb,KAAa,EACb,KAAkC,EAClC,OAAO,GAA8B,EAAE;IAEvC,OAAO,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;QACpE,MAAM,GAAG,GAAG,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACrC,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACzD,MAAM,IAAI,YAAY,CACpB,2BAA2B,EAC3B,oBAAoB,KAAK,0BAA0B,GAAG,CAAC,MAAM,IAAI,CAClE,CAAC;QACJ,CAAC;QACD,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC;QAC1B,MAAM,qBAAqB,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;QAClE,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YAC7B,OAAO;gBACL,KAAK;gBACL,KAAK;gBACL,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,OAAO,EAAE,iBAAiB;gBAC1B,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;aAC3B,CAAC;QACJ,CAAC;QACD,MAAM,sBAAsB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,SAAS,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;QAC5C,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACvD,MAAM,KAAK,CAAC,MAAM,CAAC,qBAAqB,EAAE;YACxC,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,KAAK,CAAC,OAAO;YACvB,SAAS,EAAE,KAAK,CAAC,QAAQ;YACzB,aAAa,EAAE,KAAK,CAAC,YAAY;YACjC,SAAS,EAAE,KAAK,CAAC,QAAQ;YACzB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,UAAU,EAAE,SAAS;YACrB,UAAU,EAAE,SAAS;SACtB,CAAC,CAAC;QACH,MAAM,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAClE,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;QACvB,OAAO;YACL,KAAK;YACL,KAAK;YACL,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,OAAO,EAAE,SAAS;YAClB,WAAW,EAAE,SAAS;YACtB,SAAS;SACV,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,KAAa,EACb,KAAa,EACb,KAAkC,EAClC,OAAO,GAA8B,EAAE;IAEvC,OAAO,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;QACpE,MAAM,GAAG,GAAG,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACrC,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACzD,MAAM,IAAI,YAAY,CACpB,wBAAwB,EACxB,oBAAoB,KAAK,0BAA0B,GAAG,CAAC,MAAM,IAAI,CAClE,CAAC;QACJ,CAAC;QACD,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC;QAC1B,MAAM,qBAAqB,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;QAClE,MAAM,SAAS,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;QAC5C,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACvD,MAAM,KAAK,CAAC,MAAM,CAAC,uBAAuB,EAAE;YAC1C,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,KAAK,CAAC,OAAO;YACvB,SAAS,EAAE,KAAK,CAAC,QAAQ;YACzB,aAAa,EAAE,KAAK,CAAC,YAAY;YACjC,YAAY,EAAE,SAAS;YACvB,UAAU,EAAE,SAAS;SACtB,CAAC,CAAC;QACH,MAAM,mBAAmB,CACvB,IAAI,EACJ,KAAK,EACL,GAAG,EACH,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAChD,SAAS,CACV,CAAC;QACF,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;QACvB,OAAO;YACL,KAAK;YACL,KAAK;YACL,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,OAAO,EAAE,oBAAoB;YAC7B,WAAW,EAAE,SAAS;YACtB,SAAS;SACV,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,KAAa,EACb,KAAa,EACb,KAAkC,EAClC,OAAO,GAA8B,EAAE;IAEvC,OAAO,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;QACpE,MAAM,GAAG,GAAG,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACrC,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC;QAC1B,MAAM,qBAAqB,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;QAClE,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YAC7B,MAAM,IAAI,YAAY,CACpB,2CAA2C,EAC3C,uHAAuH,CACxH,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,CAAC,MAAM,CAAC,4BAA4B,EAAE;YAC/C,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,KAAK,CAAC,OAAO;YACvB,SAAS,EAAE,KAAK,CAAC,QAAQ;YACzB,aAAa,EAAE,KAAK,CAAC,YAAY;YACjC,MAAM,EAAE,8BAA8B;YACtC,WAAW,EAAE,WAAW,CAAC,WAAW,EAAE;SACvC,CAAC,CAAC;QACH,MAAM,mBAAmB,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;QAClF,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;QACvB,OAAO;YACL,KAAK;YACL,KAAK;YACL,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,OAAO,EAAE,UAAU;SACpB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,sFAAsF;AACtF,MAAM,CAAC,KAAK,UAAU,gCAAgC,CACpD,KAAa,EACb,OAAO,GAA8B,EAAE;IAEvC,OAAO,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;QACpE,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,KAAK,QAAQ;YAAE,OAAO,CAAC,CAAC;QAChD,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC;QAC1B,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAClD,MAAM,KAAK,GAAG,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC;YACpC,IACE,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM;gBACxB,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC;gBACtD,KAAK,KAAK,IAAI;gBACd,KAAK,KAAK,SAAS;gBACnB,CAAC,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC,EACjC,CAAC;gBACD,SAAS;YACX,CAAC;YACD,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;gBAC7B,MAAM,4BAA4B,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;YAC3E,CAAC;iBAAM,CAAC;gBACN,MAAM,4BAA4B,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;YAC3E,CAAC;YACD,QAAQ,IAAI,CAAC,CAAC;QAChB,CAAC;QACD,IAAI,QAAQ,GAAG,CAAC;YAAE,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;QACzC,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,sFAAsF;AACtF,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,KAAgC,EAChC,GAAc,EACd,KAAkC,EAClC,IAAY,EACZ,GAAS,EACT,OAAO,GAAwC,EAAE;IAEjD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACrC,MAAM,eAAe,GAAG,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC;IAC7E,IAAI,eAAe;QAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;IACvD,IAAI,OAAO,CAAC,qBAAqB,KAAK,IAAI,EAAE,CAAC;QAC3C,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACzD,MAAM,IAAI,YAAY,CACpB,yBAAyB,EACzB,oBAAoB,GAAG,CAAC,KAAK,gEAAgE,CAC9F,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC;IAC3C,CAAC;IACD,MAAM,qBAAqB,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IAC1D,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACzD,MAAM,IAAI,YAAY,CACpB,yBAAyB,EACzB,oBAAoB,GAAG,CAAC,KAAK,uDAAuD,CACrF,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC;AAC3C,CAAC"}
|
|
1
|
+
{"version":3,"file":"api-caller-work.js","sourceRoot":"","sources":["../../src/api-caller-work.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { BrowserAdapter } from "./browser/browser-adapter.js";
|
|
2
2
|
import type { CodexIabAdapterOptions } from "./browser/codex-iab/chatgpt-client.js";
|
|
3
|
+
import type { CueLineRunStatusSummary } from "./core/run-status.js";
|
|
3
4
|
import type { RoutingConfig } from "./router/types.js";
|
|
4
5
|
import type { JobResultStatus } from "./runners/runner-adapter.js";
|
|
5
6
|
export interface CueLineRuntimeOptions {
|
|
@@ -23,11 +24,57 @@ export interface CueLineRuntimeOptions {
|
|
|
23
24
|
allowProcessExecution?: boolean;
|
|
24
25
|
maxConcurrency?: number;
|
|
25
26
|
laneConcurrency?: Readonly<Record<string, number>>;
|
|
27
|
+
/** Opt in to archiving the exact ChatGPT controller conversation after a durable complete. */
|
|
28
|
+
archiveControllerConversationOnComplete?: boolean;
|
|
26
29
|
}
|
|
27
30
|
export interface StartCueLineRunOptions extends CueLineRuntimeOptions {
|
|
28
31
|
request: string;
|
|
29
32
|
runId?: string;
|
|
30
33
|
}
|
|
34
|
+
export type CueLineRunListEntry = {
|
|
35
|
+
runId: string;
|
|
36
|
+
readable: true;
|
|
37
|
+
status: CueLineRunStatusSummary["status"];
|
|
38
|
+
executor: CueLineRunStatusSummary["executor"];
|
|
39
|
+
phase: CueLineRunStatusSummary["phase"];
|
|
40
|
+
round: number;
|
|
41
|
+
pendingTurns: number;
|
|
42
|
+
activeJobs: number;
|
|
43
|
+
runtimeOwnership: CueLineRunStatusSummary["runtime"]["ownership"];
|
|
44
|
+
safeNextAction: CueLineRunStatusSummary["safeNextAction"];
|
|
45
|
+
lastEventSequence: number;
|
|
46
|
+
lastEventAt: string;
|
|
47
|
+
} | {
|
|
48
|
+
runId: string;
|
|
49
|
+
readable: false;
|
|
50
|
+
errorCode: string;
|
|
51
|
+
};
|
|
52
|
+
export type CueLineRunVerificationOutcome = "verified" | "degraded" | "unreadable";
|
|
53
|
+
export interface CueLineRunVerificationFinding {
|
|
54
|
+
code: string;
|
|
55
|
+
severity: "warning" | "error";
|
|
56
|
+
surface: "marker" | "events" | "snapshot" | "runtime" | "jobs";
|
|
57
|
+
message: string;
|
|
58
|
+
}
|
|
59
|
+
export interface CueLineRunVerificationReport {
|
|
60
|
+
runId: string;
|
|
61
|
+
outcome: CueLineRunVerificationOutcome;
|
|
62
|
+
marker: "valid" | "missing" | "invalid";
|
|
63
|
+
eventLog: {
|
|
64
|
+
readable: true;
|
|
65
|
+
totalEvents: number;
|
|
66
|
+
authoritativeEvents: number;
|
|
67
|
+
lastSequence: number;
|
|
68
|
+
} | {
|
|
69
|
+
readable: false;
|
|
70
|
+
totalEvents: 0;
|
|
71
|
+
authoritativeEvents: 0;
|
|
72
|
+
lastSequence: null;
|
|
73
|
+
};
|
|
74
|
+
snapshot: "missing" | "valid" | "stale" | "invalid";
|
|
75
|
+
runtimeOwnership: "missing" | "active" | "stale" | "released" | "invalid";
|
|
76
|
+
findings: CueLineRunVerificationFinding[];
|
|
77
|
+
}
|
|
31
78
|
export interface ContinueCueLineRunOptions extends CueLineRuntimeOptions {
|
|
32
79
|
runId: string;
|
|
33
80
|
reconcileRequestId?: string;
|
|
@@ -71,6 +118,8 @@ export interface CueLineCallerWorkClaimResult extends CueLineCallerWorkClaimProo
|
|
|
71
118
|
task: string;
|
|
72
119
|
taskHash: string;
|
|
73
120
|
workdir: string;
|
|
121
|
+
/** Canonical directory pinned by the durable claim; execute work only here. */
|
|
122
|
+
resolvedWorkdir: string;
|
|
74
123
|
claimedAt: string;
|
|
75
124
|
heartbeatAt: string;
|
|
76
125
|
expiresAt: string;
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { validateCallerWorkResultClaim } from "./api-caller-work.js";
|
|
2
|
+
import { boundedControllerEventEvidence } from "./core/controller-turn.js";
|
|
3
|
+
import { isExactChatGptConversationUrl, sameChatGptConversationUrl, } from "./core/conversation-url.js";
|
|
2
4
|
import { CueLineError } from "./core/errors.js";
|
|
3
5
|
import { loadPersistedRunStore } from "./core/persisted-run.js";
|
|
4
6
|
import { runtimeEnvironment } from "./core/runtime.js";
|
|
@@ -6,26 +8,6 @@ import { JobStatusStore } from "./jobs/status.js";
|
|
|
6
8
|
import { defaultCueLineHome } from "./state/paths.js";
|
|
7
9
|
import { readRuntimeLease, retireDeadRuntimeLease, RuntimeLease, } from "./state/runtime-lease.js";
|
|
8
10
|
import { readAuthoritativeRunEvents } from "./state/store.js";
|
|
9
|
-
function normalizedConversationUrl(value) {
|
|
10
|
-
try {
|
|
11
|
-
const parsed = new URL(value);
|
|
12
|
-
return `${parsed.origin}${parsed.pathname}`;
|
|
13
|
-
}
|
|
14
|
-
catch {
|
|
15
|
-
return value;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
function isChatGptConversationUrl(value) {
|
|
19
|
-
try {
|
|
20
|
-
const parsed = new URL(value);
|
|
21
|
-
return (parsed.protocol === "https:" &&
|
|
22
|
-
parsed.hostname === "chatgpt.com" &&
|
|
23
|
-
/^\/c\/[^/]+\/?$/.test(parsed.pathname));
|
|
24
|
-
}
|
|
25
|
-
catch {
|
|
26
|
-
return false;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
11
|
export async function confirmManualControllerSubmission(runId, options) {
|
|
30
12
|
const environment = options.environment ?? runtimeEnvironment();
|
|
31
13
|
const home = options.home ?? defaultCueLineHome(environment);
|
|
@@ -58,20 +40,19 @@ export async function confirmManualControllerSubmission(runId, options) {
|
|
|
58
40
|
if (!turn) {
|
|
59
41
|
throw new CueLineError("CONTROLLER_RECONCILIATION_REQUEST_NOT_FOUND", `Controller request '${options.requestId}' is neither pending nor recoverably abandoned in run '${runId}'.`);
|
|
60
42
|
}
|
|
61
|
-
const
|
|
62
|
-
if (!
|
|
43
|
+
const suppliedConversationUrl = options.conversationUrl ?? turn.conversationUrl ?? state.conversationUrl;
|
|
44
|
+
if (!isExactChatGptConversationUrl(suppliedConversationUrl)) {
|
|
63
45
|
throw new CueLineError("CONTROLLER_RECONCILIATION_URL_REQUIRED", "Manual submission confirmation requires the exact ChatGPT conversation URL.");
|
|
64
46
|
}
|
|
65
47
|
if (state.conversationUrl !== null &&
|
|
66
|
-
|
|
67
|
-
normalizedConversationUrl(state.conversationUrl)) {
|
|
48
|
+
!sameChatGptConversationUrl(suppliedConversationUrl, state.conversationUrl)) {
|
|
68
49
|
throw new CueLineError("CONTROLLER_RECONCILIATION_CONVERSATION_MISMATCH", "The operator-confirmed conversation URL does not match the persisted CueLine conversation.");
|
|
69
50
|
}
|
|
70
51
|
if (turn.conversationUrl !== null &&
|
|
71
|
-
|
|
72
|
-
normalizedConversationUrl(turn.conversationUrl)) {
|
|
52
|
+
!sameChatGptConversationUrl(suppliedConversationUrl, turn.conversationUrl)) {
|
|
73
53
|
throw new CueLineError("CONTROLLER_RECONCILIATION_CONVERSATION_MISMATCH", "The operator-confirmed conversation URL does not match the exact conversation bound to this controller turn.");
|
|
74
54
|
}
|
|
55
|
+
const conversationUrl = state.conversationUrl ?? turn.conversationUrl ?? suppliedConversationUrl;
|
|
75
56
|
const events = await readAuthoritativeRunEvents(home, runId);
|
|
76
57
|
for (const event of events) {
|
|
77
58
|
if (event.type !== "controller_command_accepted")
|
|
@@ -164,6 +145,21 @@ function assertCallerJobResultInput(input) {
|
|
|
164
145
|
throw new CueLineError("CALLER_JOB_RESULT_INVALID", "Caller job result exitCode must be a safe integer or null when provided.");
|
|
165
146
|
}
|
|
166
147
|
}
|
|
148
|
+
function resolveCallerJobResultTimestamps(input, observedAt) {
|
|
149
|
+
let observedTimestamp;
|
|
150
|
+
try {
|
|
151
|
+
observedTimestamp = observedAt.toISOString();
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
throw new CueLineError("CALLER_JOB_RESULT_INVALID", "Caller job result observation time must be a valid timestamp.", { cause: error });
|
|
155
|
+
}
|
|
156
|
+
const startedAt = input.startedAt ?? observedTimestamp;
|
|
157
|
+
const finishedAt = input.finishedAt ?? observedTimestamp;
|
|
158
|
+
if (Date.parse(finishedAt) < Date.parse(startedAt)) {
|
|
159
|
+
throw new CueLineError("CALLER_JOB_RESULT_INVALID", "Caller job result finishedAt cannot precede startedAt.");
|
|
160
|
+
}
|
|
161
|
+
return { startedAt, finishedAt };
|
|
162
|
+
}
|
|
167
163
|
function workResultIntentStatus(events, jobId, proof) {
|
|
168
164
|
for (const event of events) {
|
|
169
165
|
if (event.type !== "caller_work_result_submission_started")
|
|
@@ -226,6 +222,7 @@ export async function submitCueLineCallerJobResult(runId, jobId, input, options
|
|
|
226
222
|
}
|
|
227
223
|
}
|
|
228
224
|
const events = await readAuthoritativeRunEvents(home, runId);
|
|
225
|
+
let resultObservedAt;
|
|
229
226
|
if (job.spec.mode === "work") {
|
|
230
227
|
if (options.claim === undefined) {
|
|
231
228
|
throw new CueLineError("CALLER_WORK_CLAIM_REQUIRED", `Caller work result for '${jobId}' requires the exact active claim proof.`);
|
|
@@ -236,7 +233,8 @@ export async function submitCueLineCallerJobResult(runId, jobId, input, options
|
|
|
236
233
|
intentStatus !== (terminal?.status ?? effectiveStatus)) {
|
|
237
234
|
throw new CueLineError("CALLER_JOB_RESULT_CONFLICT", `Caller work result intent for '${jobId}' is already bound to status '${intentStatus}'.`);
|
|
238
235
|
}
|
|
239
|
-
|
|
236
|
+
resultObservedAt = now();
|
|
237
|
+
const validation = await validateCallerWorkResultClaim(store, job, options.claim, home, resultObservedAt, { durableTerminalIntent });
|
|
240
238
|
if (validation.alreadyTerminal) {
|
|
241
239
|
return { runId, jobId, outcome: "already_terminal" };
|
|
242
240
|
}
|
|
@@ -247,6 +245,9 @@ export async function submitCueLineCallerJobResult(runId, jobId, input, options
|
|
|
247
245
|
else if (job.status !== "pending" && job.status !== "running") {
|
|
248
246
|
return { runId, jobId, outcome: "already_terminal" };
|
|
249
247
|
}
|
|
248
|
+
const resultTimestamps = terminal === undefined
|
|
249
|
+
? resolveCallerJobResultTimestamps(input, resultObservedAt ?? now())
|
|
250
|
+
: undefined;
|
|
250
251
|
if (job.spec.mode === "work" && options.claim !== undefined) {
|
|
251
252
|
const intentStatus = workResultIntentStatus(events, jobId, options.claim);
|
|
252
253
|
if (intentStatus === undefined) {
|
|
@@ -268,11 +269,7 @@ export async function submitCueLineCallerJobResult(runId, jobId, input, options
|
|
|
268
269
|
: stderr === ""
|
|
269
270
|
? stdout
|
|
270
271
|
: `${stdout}${stdout.endsWith("\n") ? "" : "\n"}${stderr}`);
|
|
271
|
-
const startedAt
|
|
272
|
-
const finishedAt = input.finishedAt ?? now().toISOString();
|
|
273
|
-
if (Date.parse(finishedAt) < Date.parse(startedAt)) {
|
|
274
|
-
throw new CueLineError("CALLER_JOB_RESULT_INVALID", "Caller job result finishedAt cannot precede startedAt.");
|
|
275
|
-
}
|
|
272
|
+
const { startedAt, finishedAt } = resultTimestamps;
|
|
276
273
|
const result = {
|
|
277
274
|
status: effectiveStatus,
|
|
278
275
|
exitCode: input.exitCode ?? (input.status === "succeeded" ? 0 : null),
|
|
@@ -327,15 +324,10 @@ export async function submitCueLineCallerJobResult(runId, jobId, input, options
|
|
|
327
324
|
});
|
|
328
325
|
}
|
|
329
326
|
}
|
|
330
|
-
const terminalResult = terminal.result;
|
|
331
|
-
const controllerOutput = terminal.status === "succeeded" && terminalResult?.stdout.trim() !== ""
|
|
332
|
-
? terminalResult?.stdout
|
|
333
|
-
: terminalResult?.output;
|
|
334
327
|
await store.append("job_status", {
|
|
335
328
|
job_id: jobId,
|
|
336
329
|
status: terminal.status,
|
|
337
|
-
...(
|
|
338
|
-
...(terminal.error === undefined ? {} : { error: terminal.error }),
|
|
330
|
+
...boundedControllerEventEvidence(terminal),
|
|
339
331
|
});
|
|
340
332
|
await store.snapshot();
|
|
341
333
|
return { runId, jobId, outcome: "submitted" };
|