cueline 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.codex-plugin/plugin.json +1 -1
  3. package/CHANGELOG.md +31 -0
  4. package/README.ja.md +18 -7
  5. package/README.ko.md +18 -7
  6. package/README.md +18 -7
  7. package/README.zh-CN.md +18 -7
  8. package/README.zh-TW.md +18 -7
  9. package/dist/src/api.d.ts +23 -1
  10. package/dist/src/api.js +110 -6
  11. package/dist/src/api.js.map +1 -1
  12. package/dist/src/browser/browser-adapter.d.ts +1 -0
  13. package/dist/src/browser/codex-iab/bootstrap.d.ts +6 -0
  14. package/dist/src/browser/codex-iab/bootstrap.js.map +1 -1
  15. package/dist/src/browser/codex-iab/chatgpt-client.js +162 -41
  16. package/dist/src/browser/codex-iab/chatgpt-client.js.map +1 -1
  17. package/dist/src/cli/main.js +150 -8
  18. package/dist/src/cli/main.js.map +1 -1
  19. package/dist/src/core/controller-loop.d.ts +6 -0
  20. package/dist/src/core/controller-loop.js +240 -74
  21. package/dist/src/core/controller-loop.js.map +1 -1
  22. package/dist/src/core/run-status.d.ts +50 -0
  23. package/dist/src/core/run-status.js +169 -0
  24. package/dist/src/core/run-status.js.map +1 -0
  25. package/dist/src/core/state-machine.d.ts +2 -1
  26. package/dist/src/core/state-machine.js +22 -1
  27. package/dist/src/core/state-machine.js.map +1 -1
  28. package/dist/src/jobs/status.d.ts +6 -0
  29. package/dist/src/jobs/status.js.map +1 -1
  30. package/dist/src/jobs/supervisor.d.ts +2 -0
  31. package/dist/src/jobs/supervisor.js +44 -12
  32. package/dist/src/jobs/supervisor.js.map +1 -1
  33. package/dist/src/protocol/types.d.ts +1 -1
  34. package/dist/src/protocol/validate-command.js +18 -0
  35. package/dist/src/protocol/validate-command.js.map +1 -1
  36. package/dist/src/router/resolver.js +7 -1
  37. package/dist/src/router/resolver.js.map +1 -1
  38. package/dist/src/runners/process-runner.d.ts +2 -2
  39. package/dist/src/runners/process-runner.js +56 -5
  40. package/dist/src/runners/process-runner.js.map +1 -1
  41. package/dist/src/runners/runner-adapter.d.ts +9 -2
  42. package/dist/src/runners/runner-adapter.js.map +1 -1
  43. package/dist/src/state/cancellation.d.ts +42 -0
  44. package/dist/src/state/cancellation.js +160 -0
  45. package/dist/src/state/cancellation.js.map +1 -0
  46. package/dist/src/state/paths.d.ts +3 -0
  47. package/dist/src/state/paths.js +3 -0
  48. package/dist/src/state/paths.js.map +1 -1
  49. package/dist/src/state/runtime-lease.d.ts +28 -0
  50. package/dist/src/state/runtime-lease.js +179 -0
  51. package/dist/src/state/runtime-lease.js.map +1 -0
  52. package/dist/src/version.d.ts +1 -1
  53. package/dist/src/version.js +1 -1
  54. package/docs/compatibility.md +3 -1
  55. package/docs/controller-protocol.md +4 -2
  56. package/docs/runner-contract.md +7 -1
  57. package/docs/state-and-recovery.md +34 -9
  58. package/package.json +4 -2
  59. package/schemas/controller-observation.schema.json +1 -1
  60. package/scripts/validate-plugin.mjs +66 -0
  61. package/skills/cueline/SKILL.md +33 -5
package/dist/src/api.js CHANGED
@@ -3,6 +3,7 @@ import { createCodexIabAdapter, } from "./browser/codex-iab/chatgpt-client.js";
3
3
  import { continueControllerLoop, runControllerLoop, } from "./core/controller-loop.js";
4
4
  import { CueLineError } from "./core/errors.js";
5
5
  import { runtimeCwd, runtimeEnvironment } from "./core/runtime.js";
6
+ import { acceptedControllerCommandEvidence, assertRunCanContinue, summarizeCueLineRunState, } from "./core/run-status.js";
6
7
  import { initialRunState, reduceRunState, } from "./core/state-machine.js";
7
8
  import { JobStatusStore } from "./jobs/status.js";
8
9
  import { JobSupervisor } from "./jobs/supervisor.js";
@@ -12,7 +13,10 @@ import { materializeRunnerSpec } from "./router/materialize.js";
12
13
  import { resolveRoute } from "./router/resolver.js";
13
14
  import { ProcessRunner } from "./runners/process-runner.js";
14
15
  import { RunnerRegistry } from "./runners/registry.js";
15
- import { defaultCueLineHome } from "./state/paths.js";
16
+ import { readCancellationObservation, requestJobCancellation, requestRunCancellation, } from "./state/cancellation.js";
17
+ import { readEvents } from "./state/event-log.js";
18
+ import { defaultCueLineHome, runPaths } from "./state/paths.js";
19
+ import { readRuntimeLease } from "./state/runtime-lease.js";
16
20
  import { RunStore } from "./state/store.js";
17
21
  function assertNotNested(environment) {
18
22
  if (environment.CUELINE_DEPTH !== undefined) {
@@ -25,7 +29,7 @@ export function defaultRoutingConfigPath() {
25
29
  export function routingConfigPath(environment = runtimeEnvironment(), explicitPath) {
26
30
  return explicitPath ?? environment.CUELINE_CONFIG ?? defaultRoutingConfigPath();
27
31
  }
28
- async function persistedRunState(home, runId) {
32
+ async function persistedRunStore(home, runId) {
29
33
  const store = await RunStore.load({
30
34
  home,
31
35
  runId,
@@ -36,10 +40,15 @@ async function persistedRunState(home, runId) {
36
40
  if (state.request === "") {
37
41
  throw new CueLineError("RUN_NOT_FOUND", `No persisted CueLine run '${runId}' was found.`);
38
42
  }
39
- return state;
43
+ return store;
44
+ }
45
+ async function persistedRunState(home, runId) {
46
+ return (await persistedRunStore(home, runId)).state;
40
47
  }
41
48
  function terminalResult(state) {
42
- if (state.status !== "complete" && state.status !== "blocked") {
49
+ if (state.status !== "complete" &&
50
+ state.status !== "blocked" &&
51
+ state.status !== "cancelled") {
43
52
  throw new CueLineError("RUN_NOT_TERMINAL", "CueLine result requested before a terminal state.");
44
53
  }
45
54
  return {
@@ -47,6 +56,7 @@ function terminalResult(state) {
47
56
  status: state.status,
48
57
  ...(state.finalDeliveryText === null ? {} : { finalDeliveryText: state.finalDeliveryText }),
49
58
  ...(state.conversationUrl === null ? {} : { conversationUrl: state.conversationUrl }),
59
+ ...(state.cancelledReason === null ? {} : { cancelledReason: state.cancelledReason }),
50
60
  state,
51
61
  };
52
62
  }
@@ -54,6 +64,86 @@ export async function loadCueLineRunState(runId, options = {}) {
54
64
  const environment = options.environment ?? runtimeEnvironment();
55
65
  return persistedRunState(options.home ?? defaultCueLineHome(environment), runId);
56
66
  }
67
+ export async function loadCueLineRunStatus(runId, options = {}) {
68
+ const environment = options.environment ?? runtimeEnvironment();
69
+ const home = options.home ?? defaultCueLineHome(environment);
70
+ const store = await persistedRunStore(home, runId);
71
+ const runtime = await readRuntimeLease(home, runId, {
72
+ ...(options.now === undefined ? {} : { now: options.now }),
73
+ });
74
+ const cancellation = await readCancellationObservation(home, runId);
75
+ const acceptedCommand = acceptedControllerCommandEvidence(await readEvents(runPaths(home, runId).events));
76
+ return summarizeCueLineRunState(store.state, store.lastSequence, runtime, cancellation, acceptedCommand);
77
+ }
78
+ function isTerminalRun(state) {
79
+ return (state.status === "complete" || state.status === "blocked" || state.status === "cancelled");
80
+ }
81
+ export async function cancelCueLineRun(runId, options = {}) {
82
+ const environment = options.environment ?? runtimeEnvironment();
83
+ const home = options.home ?? defaultCueLineHome(environment);
84
+ const store = await persistedRunStore(home, runId);
85
+ if (isTerminalRun(store.state)) {
86
+ return { runId, outcome: "already_terminal", affectedJobs: 0 };
87
+ }
88
+ const reason = options.reason ?? "operator requested cancellation";
89
+ await requestRunCancellation(home, runId, reason, options.now);
90
+ const runtime = await readRuntimeLease(home, runId, {
91
+ ...(options.now === undefined ? {} : { now: options.now }),
92
+ });
93
+ if (runtime.ownership === "active" ||
94
+ runtime.ownership === "stale" ||
95
+ runtime.ownership === "invalid") {
96
+ return { runId, outcome: "requested", affectedJobs: 0 };
97
+ }
98
+ const active = Object.values(store.state.jobs).filter((job) => job.status === "pending" || job.status === "running");
99
+ for (const job of active) {
100
+ await store.append("job_status", {
101
+ job_id: job.jobId,
102
+ status: "ambiguous",
103
+ error: "Run cancelled without a verifiable active runtime; process outcome is unknown.",
104
+ });
105
+ }
106
+ await store.append("run_cancelled", { reason });
107
+ await store.snapshot();
108
+ return { runId, outcome: "cancelled", affectedJobs: active.length };
109
+ }
110
+ export async function cancelCueLineJob(runId, jobId, options = {}) {
111
+ const environment = options.environment ?? runtimeEnvironment();
112
+ const home = options.home ?? defaultCueLineHome(environment);
113
+ const store = await persistedRunStore(home, runId);
114
+ const job = store.state.jobs[jobId];
115
+ if (job === undefined) {
116
+ throw new CueLineError("JOB_NOT_FOUND", `No job '${jobId}' exists in run '${runId}'.`);
117
+ }
118
+ if (isTerminalRun(store.state) ||
119
+ (job.status !== "pending" && job.status !== "running")) {
120
+ return { runId, jobId, outcome: "already_terminal" };
121
+ }
122
+ const reason = options.reason ?? "operator requested job cancellation";
123
+ await requestJobCancellation(home, runId, jobId, reason, options.now);
124
+ const runtime = await readRuntimeLease(home, runId, {
125
+ ...(options.now === undefined ? {} : { now: options.now }),
126
+ });
127
+ if (runtime.ownership === "active" ||
128
+ runtime.ownership === "stale" ||
129
+ runtime.ownership === "invalid") {
130
+ return { runId, jobId, outcome: "requested" };
131
+ }
132
+ await store.append("job_status", {
133
+ job_id: jobId,
134
+ status: "ambiguous",
135
+ error: "Job cancelled without a verifiable active runtime; process outcome is unknown.",
136
+ });
137
+ if (store.state.status === "running") {
138
+ await store.append("run_failed", {
139
+ code: "JOB_CANCELLED_WITHOUT_ACTIVE_RUNTIME",
140
+ message: `Job '${jobId}' was marked ambiguous because no active owner could confirm termination.`,
141
+ stage: "job_cancellation",
142
+ });
143
+ }
144
+ await store.snapshot();
145
+ return { runId, jobId, outcome: "ambiguous" };
146
+ }
57
147
  async function resolvedRoutingConfig(options, environment) {
58
148
  return (options.routingConfig ??
59
149
  (await loadRoutingConfig(routingConfigPath(environment, options.routingConfigPath))));
@@ -78,7 +168,7 @@ function routingInstruction(config, availability) {
78
168
  .map((candidate) => candidate.id);
79
169
  return `${name} [${candidates.length > 0 ? candidates.join(", ") : "unavailable"}]`;
80
170
  });
81
- return `Available routing lanes: ${lanes.join("; ")}. Use only a listed available lane and optional runner id.`;
171
+ return `Available routing lanes: ${lanes.join("; ")}. Use only a listed lane. Select an optional candidate with the field runner; never use runner_id or place a runner ID in lane.`;
82
172
  }
83
173
  async function prepareRuntime(options, persistedConversationUrl) {
84
174
  const environment = options.environment ?? runtimeEnvironment();
@@ -126,6 +216,11 @@ export async function startCueLineRun(options) {
126
216
  ? {}
127
217
  : { maxRepairAttempts: options.maxRepairAttempts }),
128
218
  ...(options.now === undefined ? {} : { now: options.now }),
219
+ ...(options.signal === undefined ? {} : { signal: options.signal }),
220
+ ...(options.cancellationPollIntervalMs === undefined
221
+ ? {}
222
+ : { cancellationPollIntervalMs: options.cancellationPollIntervalMs }),
223
+ ...(options.runTimeoutMs === undefined ? {} : { runTimeoutMs: options.runTimeoutMs }),
129
224
  });
130
225
  }
131
226
  export async function runCueLine(options) {
@@ -135,9 +230,12 @@ export async function continueCueLineRun(options) {
135
230
  const environment = options.environment ?? runtimeEnvironment();
136
231
  const home = options.home ?? defaultCueLineHome(environment);
137
232
  const state = await persistedRunState(home, options.runId);
138
- if (state.status === "complete" || state.status === "blocked") {
233
+ if (isTerminalRun(state)) {
139
234
  return terminalResult(state);
140
235
  }
236
+ assertRunCanContinue(state, await readRuntimeLease(home, options.runId, {
237
+ ...(options.now === undefined ? {} : { now: options.now }),
238
+ }), await readCancellationObservation(home, options.runId));
141
239
  assertNotNested(environment);
142
240
  const runtime = await prepareRuntime(options, state.conversationUrl ?? undefined);
143
241
  return continueControllerLoop({
@@ -154,7 +252,13 @@ export async function continueCueLineRun(options) {
154
252
  ? {}
155
253
  : { maxRepairAttempts: options.maxRepairAttempts }),
156
254
  ...(options.now === undefined ? {} : { now: options.now }),
255
+ ...(options.signal === undefined ? {} : { signal: options.signal }),
256
+ ...(options.cancellationPollIntervalMs === undefined
257
+ ? {}
258
+ : { cancellationPollIntervalMs: options.cancellationPollIntervalMs }),
259
+ ...(options.runTimeoutMs === undefined ? {} : { runTimeoutMs: options.runTimeoutMs }),
157
260
  });
158
261
  }
159
262
  export { createCodexIabAdapter };
263
+ export { CUELINE_VERSION } from "./version.js";
160
264
  //# sourceMappingURL=api.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC,OAAO,EACL,qBAAqB,GAEtB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EACL,sBAAsB,EACtB,iBAAiB,GAElB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EACL,eAAe,EACf,cAAc,GAEf,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAwC5C,SAAS,eAAe,CAAC,WAA8B;IACrD,IAAI,WAAW,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QAC5C,MAAM,IAAI,YAAY,CAAC,yBAAyB,EAAE,uCAAuC,CAAC,CAAC;IAC7F,CAAC;AACH,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,OAAO,aAAa,CAAC,IAAI,GAAG,CAAC,mCAAmC,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACtF,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,WAAW,GAAsB,kBAAkB,EAAE,EACrD,YAAqB;IAErB,OAAO,YAAY,IAAI,WAAW,CAAC,cAAc,IAAI,wBAAwB,EAAE,CAAC;AAClF,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,IAAY,EAAE,KAAa;IAC1D,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC;QAChC,IAAI;QACJ,KAAK;QACL,YAAY,EAAE,eAAe,CAAC,KAAK,EAAE,EAAE,CAAC;QACxC,OAAO,EAAE,cAAc;KACxB,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC1B,IAAI,KAAK,CAAC,OAAO,KAAK,EAAE,EAAE,CAAC;QACzB,MAAM,IAAI,YAAY,CAAC,eAAe,EAAE,6BAA6B,KAAK,cAAc,CAAC,CAAC;IAC5F,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CAAC,KAAsB;IAC5C,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC9D,MAAM,IAAI,YAAY,CAAC,kBAAkB,EAAE,mDAAmD,CAAC,CAAC;IAClG,CAAC;IACD,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,GAAG,CAAC,KAAK,CAAC,iBAAiB,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC3F,GAAG,CAAC,KAAK,CAAC,eAAe,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC;QACrF,KAAK;KACN,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,KAAa,EACb,OAAO,GAAwD,EAAE;IAEjE,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,kBAAkB,EAAE,CAAC;IAChE,OAAO,iBAAiB,CAAC,OAAO,CAAC,IAAI,IAAI,kBAAkB,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,CAAC;AACnF,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,OAA8B,EAC9B,WAA8B;IAE9B,OAAO,CACL,OAAO,CAAC,aAAa;QACrB,CAAC,MAAM,iBAAiB,CAAC,iBAAiB,CAAC,WAAW,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CACrF,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,MAAqB;IACxC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/C,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACxC,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACrC,IAAI,SAAS,CAAC,OAAO,KAAK,KAAK,IAAI,UAAU,KAAK,SAAS;gBAAE,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;IACD,OAAO,IAAI,cAAc,CACvB,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC,CACvE,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CACzB,MAAqB,EACrB,YAAuD;IAEvD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;SACvC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;SAClC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;QACpB,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU;aAC/B,MAAM,CACL,CAAC,SAAS,EAAE,EAAE,CACZ,SAAS,CAAC,OAAO,KAAK,KAAK,IAAI,YAAY,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,CAC3E;aACA,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACpC,OAAO,GAAG,IAAI,KAAK,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC;IACtF,CAAC,CAAC,CAAC;IACL,OAAO,4BAA4B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,4DAA4D,CAAC;AAClH,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,OAA8B,EAC9B,wBAAiC;IAEjC,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,UAAU,EAAE,CAAC;IACxC,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACjE,MAAM,YAAY,GAAG,sBAAsB,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;IAC5D,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,MAAM,EAAE;QAC9C,WAAW,EAAE,IAAI,cAAc,CAAC,IAAI,CAAC;KACtC,CAAC,CAAC;IACH,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,wBAAwB,CAAC;IAC5E,MAAM,OAAO,GACX,OAAO,CAAC,OAAO;QACf,qBAAqB,CAAC;YACpB,GAAG,OAAO,CAAC,cAAc;YACzB,GAAG,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC;SAC9D,CAAC,CAAC;IAEL,OAAO;QACL,OAAO;QACP,aAAa;QACb,iBAAiB,CAAC,KAAK,EAAE,GAAG;YAC1B,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YACvE,OAAO,qBAAqB,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE;gBAC9C,GAAG;gBACH,GAAG,CAAC,OAAO,CAAC,gBAAgB,KAAK,SAAS;oBACxC,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,gBAAgB,EAAE,CAAC;aAC7C,CAAC,CAAC;QACL,CAAC;QACD,sBAAsB,EAAE,CAAC,kBAAkB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAClE,GAAG,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC;QAC7D,IAAI;KACL,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAA+B;IAE/B,eAAe,CAAC,OAAO,CAAC,WAAW,IAAI,kBAAkB,EAAE,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;IAC9C,OAAO,iBAAiB,CAAC;QACvB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;QAChE,GAAG,OAAO;QACV,GAAG,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;QAC5E,GAAG,CAAC,OAAO,CAAC,iBAAiB,KAAK,SAAS;YACzC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC;QACrD,GAAG,CAAC,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;KAC3D,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAA+B;IAC9D,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAkC;IAElC,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,KAAK,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3D,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC9D,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,eAAe,CAAC,WAAW,CAAC,CAAC;IAC7B,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,eAAe,IAAI,SAAS,CAAC,CAAC;IAClF,OAAO,sBAAsB,CAAC;QAC5B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,GAAG,OAAO;QACV,GAAG,CAAC,OAAO,CAAC,kBAAkB,KAAK,SAAS;YAC1C,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,EAAE,CAAC;QACvD,GAAG,CAAC,OAAO,CAAC,wBAAwB,KAAK,SAAS;YAChD,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,wBAAwB,EAAE,OAAO,CAAC,wBAAwB,EAAE,CAAC;QACnE,GAAG,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;QAC5E,GAAG,CAAC,OAAO,CAAC,iBAAiB,KAAK,SAAS;YACzC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC;QACrD,GAAG,CAAC,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;KAC3D,CAAC,CAAC;AACL,CAAC;AAED,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ export interface BrowserTurnInput {
4
4
  requestId: string;
5
5
  prompt: string;
6
6
  repairAttempt?: number;
7
+ signal?: AbortSignal;
7
8
  }
8
9
  export interface ControllerTurn {
9
10
  text: string;
@@ -36,6 +36,12 @@ export interface IabTab {
36
36
  url(): Promise<string | undefined>;
37
37
  title?(): Promise<string>;
38
38
  playwright: IabPlaywright;
39
+ cua?: {
40
+ click(options: {
41
+ x: number;
42
+ y: number;
43
+ }): Promise<void>;
44
+ };
39
45
  }
40
46
  export interface IabOpenTab {
41
47
  id?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../../../src/browser/codex-iab/bootstrap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../../../src/browser/codex-iab/bootstrap.ts"],"names":[],"mappings":"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"}
@@ -8,8 +8,36 @@ const COMPOSER_HYDRATION_TIMEOUT_MS = 5_000;
8
8
  const CONTENTEDITABLE_COMPOSER_SELECTOR = '#prompt-textarea[contenteditable="true"]';
9
9
  const MODEL_PICKER_SELECTOR = "button.__composer-pill";
10
10
  const REQUIRED_MODEL_LABEL = "Pro";
11
- function delay(milliseconds) {
12
- return new Promise((resolve) => setTimeout(resolve, milliseconds));
11
+ const MODEL_LABEL_READ_ATTEMPTS = 50;
12
+ const MODEL_LABEL_RETRY_INTERVAL_MS = 100;
13
+ const TAB_DISCOVERY_RETRY_MS = 100;
14
+ function throwIfCancelled(signal) {
15
+ if (signal?.aborted !== true)
16
+ return;
17
+ if (signal.reason instanceof CueLineError)
18
+ throw signal.reason;
19
+ throw new CueLineError("RUN_CANCELLED", "CueLine run cancellation was requested.", {
20
+ cause: signal.reason,
21
+ });
22
+ }
23
+ function delay(milliseconds, signal) {
24
+ return new Promise((resolve, reject) => {
25
+ throwIfCancelled(signal);
26
+ const timer = setTimeout(() => {
27
+ signal?.removeEventListener("abort", onAbort);
28
+ resolve();
29
+ }, milliseconds);
30
+ const onAbort = () => {
31
+ clearTimeout(timer);
32
+ try {
33
+ throwIfCancelled(signal);
34
+ }
35
+ catch (error) {
36
+ reject(error);
37
+ }
38
+ };
39
+ signal?.addEventListener("abort", onAbort, { once: true });
40
+ });
13
41
  }
14
42
  async function findUniqueLocator(tab, role, names) {
15
43
  for (const name of names) {
@@ -20,6 +48,47 @@ async function findUniqueLocator(tab, role, names) {
20
48
  }
21
49
  return undefined;
22
50
  }
51
+ async function clickVisibleSendButtonByCoordinates(tab) {
52
+ if (!tab.cua?.click)
53
+ return false;
54
+ const target = await tab.playwright.evaluate(({ sendButtonNames }) => {
55
+ const normalize = (value) => String(value ?? "").trim().replace(/\s+/g, " ");
56
+ const candidates = Array.from(document.querySelectorAll("button")).filter((element) => {
57
+ const button = element;
58
+ const style = window.getComputedStyle(button);
59
+ const rect = button.getBoundingClientRect();
60
+ const label = normalize(button.getAttribute("aria-label") ?? button.innerText ?? button.textContent);
61
+ return (sendButtonNames.some((name) => name === label) &&
62
+ !button.disabled &&
63
+ button.getAttribute("aria-disabled") !== "true" &&
64
+ style.display !== "none" &&
65
+ style.visibility !== "hidden" &&
66
+ rect.width > 0 &&
67
+ rect.height > 0 &&
68
+ rect.right > 0 &&
69
+ rect.bottom > 0 &&
70
+ rect.left < window.innerWidth &&
71
+ rect.top < window.innerHeight);
72
+ });
73
+ if (candidates.length !== 1)
74
+ return null;
75
+ const rect = candidates[0].getBoundingClientRect();
76
+ return {
77
+ x: rect.left + rect.width / 2,
78
+ y: rect.top + rect.height / 2,
79
+ };
80
+ }, { sendButtonNames: [...SEND_BUTTON_NAMES] }).catch(() => null);
81
+ if (target === null ||
82
+ !Number.isFinite(target.x) ||
83
+ !Number.isFinite(target.y) ||
84
+ target.x < 0 ||
85
+ target.y < 0) {
86
+ return false;
87
+ }
88
+ await tab.cua.click({ x: Math.round(target.x), y: Math.round(target.y) });
89
+ await tab.playwright.waitForTimeout(100);
90
+ return true;
91
+ }
23
92
  async function findHydratedComposer(tab) {
24
93
  if (!tab.playwright.locator)
25
94
  return undefined;
@@ -70,12 +139,35 @@ async function readComposerModelLabel(tab) {
70
139
  return tab.playwright.evaluate(({ modelPickerSelector }) => {
71
140
  const knownModel = /^(?:Instant(?:\s+\d+(?:\.\d+)*)?|Medium|High|Extra High|Thinking|Auto|Pro(?:\s+(?:Standard|Extended))?)$/i;
72
141
  const labels = Array.from(document.querySelectorAll(modelPickerSelector))
73
- .map((element) => String(element.innerText ?? element.textContent ?? ""))
142
+ .filter((element) => {
143
+ if (element.hidden)
144
+ return false;
145
+ if (element.getAttribute("aria-hidden") === "true")
146
+ return false;
147
+ const style = window.getComputedStyle(element);
148
+ return style.display !== "none" && style.visibility !== "hidden" && element.getClientRects().length > 0;
149
+ })
150
+ .map((element) => String(element.getAttribute("aria-label") ??
151
+ element.innerText ??
152
+ element.textContent ??
153
+ ""))
74
154
  .map((label) => label.replace(/\s+/g, " ").trim())
75
155
  .filter((label) => knownModel.test(label));
76
156
  return labels.length === 1 ? labels[0] : null;
77
157
  }, { modelPickerSelector: MODEL_PICKER_SELECTOR });
78
158
  }
159
+ async function readComposerModelLabelWhenReady(tab, signal) {
160
+ for (let attempt = 0; attempt < MODEL_LABEL_READ_ATTEMPTS; attempt += 1) {
161
+ throwIfCancelled(signal);
162
+ const label = await readComposerModelLabel(tab);
163
+ if (label !== null)
164
+ return label;
165
+ if (attempt < MODEL_LABEL_READ_ATTEMPTS - 1) {
166
+ await tab.playwright.waitForTimeout(MODEL_LABEL_RETRY_INTERVAL_MS);
167
+ }
168
+ }
169
+ return null;
170
+ }
79
171
  class CodexIabAdapter {
80
172
  #options;
81
173
  #browser;
@@ -117,34 +209,42 @@ class CodexIabAdapter {
117
209
  const matchesTarget = (url) => targetUrl
118
210
  ? normalizedConversationUrl(url) === normalizedConversationUrl(targetUrl)
119
211
  : url.startsWith(CHATGPT_URL);
120
- const selected = await browser.tabs.selected?.().catch(() => undefined);
121
- if (selected && matchesTarget((await selected.url().catch(() => "")) ?? "")) {
122
- this.#tab = selected;
123
- return selected;
124
- }
125
- const sessionTabs = await browser.tabs.list?.().catch(() => []);
126
- const sessionCandidate = sessionTabs?.find((tab) => matchesTarget(String(tab.url ?? "")));
127
212
  let tab;
128
- if (sessionCandidate?.id && browser.tabs.get) {
129
- tab = await browser.tabs.get(sessionCandidate.id);
130
- }
131
- const openTabs = tab === undefined ? await browser.user?.openTabs?.().catch(() => []) : [];
132
- const candidate = openTabs?.find((openTab) => {
133
- const url = String(openTab.url ?? "");
134
- return matchesTarget(url);
135
- });
136
- if (tab === undefined && candidate && browser.user?.claimTab) {
137
- tab = await browser.user.claimTab(candidate);
213
+ const canDiscover = browser.tabs.selected !== undefined ||
214
+ browser.tabs.list !== undefined ||
215
+ browser.user?.openTabs !== undefined;
216
+ const discoveryPasses = canDiscover ? 2 : 1;
217
+ for (let pass = 0; pass < discoveryPasses && tab === undefined; pass += 1) {
218
+ const selected = await browser.tabs.selected?.();
219
+ if (selected && matchesTarget((await selected.url()) ?? "")) {
220
+ tab = selected;
221
+ break;
222
+ }
223
+ const sessionTabs = (await browser.tabs.list?.()) ?? [];
224
+ const sessionCandidate = sessionTabs.find((candidate) => matchesTarget(String(candidate.url ?? "")));
225
+ if (sessionCandidate?.id && browser.tabs.get) {
226
+ tab = await browser.tabs.get(sessionCandidate.id);
227
+ }
228
+ if (tab === undefined) {
229
+ const openTabs = (await browser.user?.openTabs?.()) ?? [];
230
+ const candidate = openTabs.find((openTab) => matchesTarget(String(openTab.url ?? "")));
231
+ if (candidate && browser.user?.claimTab) {
232
+ tab = await browser.user.claimTab(candidate);
233
+ }
234
+ }
235
+ if (tab === undefined && pass < discoveryPasses - 1) {
236
+ await delay(TAB_DISCOVERY_RETRY_MS);
237
+ }
138
238
  }
139
- else if (tab === undefined) {
239
+ if (tab === undefined) {
140
240
  tab = await browser.tabs.new();
141
241
  await tab.goto(targetUrl ?? CHATGPT_URL);
142
242
  }
143
- this.#tab = tab;
144
243
  await tab.playwright.waitForLoadState?.({
145
244
  state: "domcontentloaded",
146
245
  timeoutMs: 30_000,
147
246
  });
247
+ this.#tab = tab;
148
248
  return tab;
149
249
  }
150
250
  async #ensureProModel(tab) {
@@ -190,15 +290,19 @@ class CodexIabAdapter {
190
290
  }
191
291
  async #clickSend(tab) {
192
292
  const previousUrl = (await tab.url()) ?? "";
293
+ let lastError;
294
+ let locatorClickAttempted = false;
193
295
  for (let attempt = 0; attempt < 2; attempt += 1) {
194
296
  const button = await findUniqueLocator(tab, "button", SEND_BUTTON_NAMES);
195
297
  if (!button) {
196
298
  if (attempt > 0 && await this.#submissionStarted(tab, previousUrl)) {
197
299
  return;
198
300
  }
199
- throw new CueLineError("SEND_BUTTON_MISSING", "Could not find ChatGPT's send button.");
301
+ lastError = new CueLineError("SEND_BUTTON_MISSING", "Could not find ChatGPT's send button.");
302
+ break;
200
303
  }
201
304
  try {
305
+ locatorClickAttempted = true;
202
306
  await button.click({ timeoutMs: 10_000 });
203
307
  return;
204
308
  }
@@ -206,20 +310,31 @@ class CodexIabAdapter {
206
310
  if (await this.#submissionStarted(tab, previousUrl)) {
207
311
  return;
208
312
  }
209
- if (attempt === 1 || !isTransientClickError(error)) {
313
+ if (!isTransientClickError(error)) {
210
314
  throw error;
211
315
  }
212
- await tab.playwright.domSnapshot();
213
- await tab.playwright.waitForTimeout(250);
316
+ lastError = error;
317
+ if (attempt === 0) {
318
+ await tab.playwright.domSnapshot();
319
+ await tab.playwright.waitForTimeout(250);
320
+ if (await this.#submissionStarted(tab, previousUrl))
321
+ return;
322
+ if (await clickVisibleSendButtonByCoordinates(tab))
323
+ return;
324
+ }
214
325
  }
215
326
  }
327
+ if (!locatorClickAttempted && await clickVisibleSendButtonByCoordinates(tab))
328
+ return;
329
+ throw lastError ?? new CueLineError("SEND_BUTTON_MISSING", "Could not find ChatGPT's send button.");
216
330
  }
217
- async #waitForCompletion(tab, baseline) {
331
+ async #waitForCompletion(tab, baseline, signal) {
218
332
  const deadline = Date.now() + this.#options.timeoutMs;
219
333
  let stableText = "";
220
334
  let stableSince = 0;
221
335
  let responseStarted = false;
222
336
  while (Date.now() < deadline) {
337
+ throwIfCancelled(signal);
223
338
  const state = await readPageChatState(tab);
224
339
  if (state.isAnswering || state.assistantMessageCount > baseline.assistantMessageCount) {
225
340
  responseStarted = true;
@@ -237,15 +352,16 @@ class CodexIabAdapter {
237
352
  stableText = state.assistantText;
238
353
  stableSince = Date.now();
239
354
  }
240
- await delay(this.#options.pollIntervalMs);
355
+ await delay(this.#options.pollIntervalMs, signal);
241
356
  }
242
357
  throw new CueLineError("CHATGPT_RESPONSE_TIMEOUT", "ChatGPT did not finish before timeout.");
243
358
  }
244
- async #waitForRecoveredCompletion(tab, expectedPrompt) {
359
+ async #waitForRecoveredCompletion(tab, expectedPrompt, signal) {
245
360
  const deadline = Date.now() + this.#options.timeoutMs;
246
361
  let stableText = "";
247
362
  let stableSince = 0;
248
363
  while (Date.now() < deadline) {
364
+ throwIfCancelled(signal);
249
365
  const state = await readPageChatState(tab);
250
366
  if (normalizedMessageText(state.lastUserText) !== normalizedMessageText(expectedPrompt)) {
251
367
  throw new CueLineError("CONTROLLER_RECONCILIATION_MISMATCH", "The exact conversation's last user message does not match the pending CueLine prompt. Refusing to import an unrelated response.");
@@ -264,7 +380,7 @@ class CodexIabAdapter {
264
380
  stableText = "";
265
381
  stableSince = Date.now();
266
382
  }
267
- await delay(this.#options.pollIntervalMs);
383
+ await delay(this.#options.pollIntervalMs, signal);
268
384
  }
269
385
  throw new CueLineError("CONTROLLER_RECONCILIATION_TIMEOUT", "The existing ChatGPT response did not become readable before timeout; no prompt was sent.");
270
386
  }
@@ -295,7 +411,9 @@ class CodexIabAdapter {
295
411
  };
296
412
  }
297
413
  async #sendTurnOnce(input, context, hooks) {
414
+ throwIfCancelled(input.signal);
298
415
  const tab = await this.#getTab();
416
+ throwIfCancelled(input.signal);
299
417
  const composer = (await findHydratedComposer(tab)) ??
300
418
  (await findUniqueLocator(tab, "textbox", COMPOSER_TEXTBOX_NAMES));
301
419
  if (!composer) {
@@ -304,12 +422,13 @@ class CodexIabAdapter {
304
422
  context.selectedModelLabel = await this.#ensureProModel(tab);
305
423
  context.baseline = await readPageChatState(tab);
306
424
  await composer.fill(input.prompt, {});
425
+ throwIfCancelled(input.signal);
307
426
  await this.#emitCheckpoint(tab, context, hooks, "possibly_sent");
308
427
  context.stage = "submitting";
309
428
  await this.#clickSend(tab);
310
429
  context.stage = "submitted";
311
430
  await this.#emitCheckpoint(tab, context, hooks, "submitted");
312
- const completed = await this.#waitForCompletion(tab, context.baseline);
431
+ const completed = await this.#waitForCompletion(tab, context.baseline, input.signal);
313
432
  return this.#resultFromCompletedTurn(tab, context.selectedModelLabel, completed);
314
433
  }
315
434
  async #emitCheckpoint(tab, context, hooks, submissionState) {
@@ -356,6 +475,13 @@ class CodexIabAdapter {
356
475
  catch (error) {
357
476
  if (!isTabUnavailableError(error))
358
477
  throw this.#browserFailure(error, context, input);
478
+ this.#tab = undefined;
479
+ if (context.stage === "pre_submit") {
480
+ const retryContext = { stage: "pre_submit" };
481
+ return this.#sendTurnOnce(input, retryContext, hooks).catch((retryError) => {
482
+ throw this.#browserFailure(retryError, retryContext, input);
483
+ });
484
+ }
359
485
  if (this.#conversationUrl === undefined) {
360
486
  throw new CueLineError("TAB_RECOVERY_UNSAFE", "The ChatGPT tab disappeared before CueLine captured an exact conversation URL; refusing a potentially duplicate send.", {
361
487
  cause: error,
@@ -366,13 +492,6 @@ class CodexIabAdapter {
366
492
  },
367
493
  });
368
494
  }
369
- this.#tab = undefined;
370
- if (context.stage === "pre_submit") {
371
- const retryContext = { stage: "pre_submit" };
372
- return this.#sendTurnOnce(input, retryContext, hooks).catch((retryError) => {
373
- throw this.#browserFailure(retryError, retryContext, input);
374
- });
375
- }
376
495
  if (!context.baseline || !context.selectedModelLabel)
377
496
  throw error;
378
497
  try {
@@ -390,7 +509,7 @@ class CodexIabAdapter {
390
509
  },
391
510
  });
392
511
  }
393
- const completed = await this.#waitForCompletion(recoveredTab, context.baseline);
512
+ const completed = await this.#waitForCompletion(recoveredTab, context.baseline, input.signal);
394
513
  return this.#resultFromCompletedTurn(recoveredTab, context.selectedModelLabel, completed);
395
514
  }
396
515
  catch (recoveryError) {
@@ -399,6 +518,7 @@ class CodexIabAdapter {
399
518
  }
400
519
  }
401
520
  async recoverTurn(input) {
521
+ throwIfCancelled(input.signal);
402
522
  if (this.#conversationUrl === undefined) {
403
523
  throw new CueLineError("CONTROLLER_RECONCILIATION_URL_REQUIRED", "CueLine needs the exact persisted ChatGPT conversation URL to recover without sending.", {
404
524
  details: {
@@ -410,11 +530,12 @@ class CodexIabAdapter {
410
530
  }
411
531
  try {
412
532
  const tab = await this.#getTab();
413
- const selectedModelLabel = await readComposerModelLabel(tab);
533
+ throwIfCancelled(input.signal);
534
+ const selectedModelLabel = await readComposerModelLabelWhenReady(tab, input.signal);
414
535
  if (!isProLabel(selectedModelLabel)) {
415
536
  throw new CueLineError("CONTROLLER_RECONCILIATION_MODEL_UNVERIFIED", "The existing conversation does not currently expose a Pro composer label; refusing to import the response without both model checks.");
416
537
  }
417
- const completed = await this.#waitForRecoveredCompletion(tab, input.prompt);
538
+ const completed = await this.#waitForRecoveredCompletion(tab, input.prompt, input.signal);
418
539
  return this.#resultFromCompletedTurn(tab, selectedModelLabel, completed);
419
540
  }
420
541
  catch (error) {