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.
- package/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/CHANGELOG.md +31 -0
- package/README.ja.md +18 -7
- package/README.ko.md +18 -7
- package/README.md +18 -7
- package/README.zh-CN.md +18 -7
- package/README.zh-TW.md +18 -7
- package/dist/src/api.d.ts +23 -1
- package/dist/src/api.js +110 -6
- package/dist/src/api.js.map +1 -1
- package/dist/src/browser/browser-adapter.d.ts +1 -0
- package/dist/src/browser/codex-iab/bootstrap.d.ts +6 -0
- package/dist/src/browser/codex-iab/bootstrap.js.map +1 -1
- package/dist/src/browser/codex-iab/chatgpt-client.js +162 -41
- package/dist/src/browser/codex-iab/chatgpt-client.js.map +1 -1
- package/dist/src/cli/main.js +150 -8
- package/dist/src/cli/main.js.map +1 -1
- package/dist/src/core/controller-loop.d.ts +6 -0
- package/dist/src/core/controller-loop.js +240 -74
- package/dist/src/core/controller-loop.js.map +1 -1
- package/dist/src/core/run-status.d.ts +50 -0
- package/dist/src/core/run-status.js +169 -0
- package/dist/src/core/run-status.js.map +1 -0
- package/dist/src/core/state-machine.d.ts +2 -1
- package/dist/src/core/state-machine.js +22 -1
- package/dist/src/core/state-machine.js.map +1 -1
- package/dist/src/jobs/status.d.ts +6 -0
- package/dist/src/jobs/status.js.map +1 -1
- package/dist/src/jobs/supervisor.d.ts +2 -0
- package/dist/src/jobs/supervisor.js +44 -12
- package/dist/src/jobs/supervisor.js.map +1 -1
- package/dist/src/protocol/types.d.ts +1 -1
- package/dist/src/protocol/validate-command.js +18 -0
- package/dist/src/protocol/validate-command.js.map +1 -1
- package/dist/src/router/resolver.js +7 -1
- package/dist/src/router/resolver.js.map +1 -1
- package/dist/src/runners/process-runner.d.ts +2 -2
- package/dist/src/runners/process-runner.js +56 -5
- package/dist/src/runners/process-runner.js.map +1 -1
- package/dist/src/runners/runner-adapter.d.ts +9 -2
- package/dist/src/runners/runner-adapter.js.map +1 -1
- package/dist/src/state/cancellation.d.ts +42 -0
- package/dist/src/state/cancellation.js +160 -0
- package/dist/src/state/cancellation.js.map +1 -0
- package/dist/src/state/paths.d.ts +3 -0
- package/dist/src/state/paths.js +3 -0
- package/dist/src/state/paths.js.map +1 -1
- package/dist/src/state/runtime-lease.d.ts +28 -0
- package/dist/src/state/runtime-lease.js +179 -0
- package/dist/src/state/runtime-lease.js.map +1 -0
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/docs/compatibility.md +3 -1
- package/docs/controller-protocol.md +4 -2
- package/docs/runner-contract.md +7 -1
- package/docs/state-and-recovery.md +34 -9
- package/package.json +4 -2
- package/schemas/controller-observation.schema.json +1 -1
- package/scripts/validate-plugin.mjs +66 -0
- 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 {
|
|
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
|
|
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
|
|
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" &&
|
|
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
|
|
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
|
|
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
|
package/dist/src/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -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":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;
|
|
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
|
-
|
|
12
|
-
|
|
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
|
-
.
|
|
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
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
const
|
|
132
|
-
|
|
133
|
-
const
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 (
|
|
313
|
+
if (!isTransientClickError(error)) {
|
|
210
314
|
throw error;
|
|
211
315
|
}
|
|
212
|
-
|
|
213
|
-
|
|
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
|
-
|
|
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) {
|