cueline 0.1.0 → 0.1.2
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 +14 -0
- package/README.ja.md +51 -8
- package/README.ko.md +51 -8
- package/README.md +51 -8
- package/README.zh-CN.md +51 -8
- package/README.zh-TW.md +51 -8
- package/dist/src/api.d.ts +2 -0
- package/dist/src/api.js +7 -0
- package/dist/src/api.js.map +1 -1
- package/dist/src/browser/browser-adapter.d.ts +19 -1
- package/dist/src/browser/codex-iab/bootstrap.d.ts +3 -0
- package/dist/src/browser/codex-iab/bootstrap.js +21 -2
- package/dist/src/browser/codex-iab/bootstrap.js.map +1 -1
- package/dist/src/browser/codex-iab/chatgpt-client.js +302 -15
- package/dist/src/browser/codex-iab/chatgpt-client.js.map +1 -1
- package/dist/src/core/controller-loop.d.ts +3 -0
- package/dist/src/core/controller-loop.js +215 -29
- package/dist/src/core/controller-loop.js.map +1 -1
- package/dist/src/core/state-machine.d.ts +22 -0
- package/dist/src/core/state-machine.js +99 -5
- package/dist/src/core/state-machine.js.map +1 -1
- package/dist/src/state/store.js +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/docs/architecture.md +9 -8
- package/docs/controller-protocol.md +2 -2
- package/docs/state-and-recovery.md +36 -6
- package/package.json +2 -1
- package/skills/cueline/SKILL.md +13 -3
package/README.zh-TW.md
CHANGED
|
@@ -25,12 +25,42 @@ CueLine 是獨立實作,**沒有任何 runtime npm 相依套件**,也不是
|
|
|
25
25
|
|
|
26
26
|
主控端決定*該發生什麼*;本機這一側決定*能不能發生、怎麼發生*:通道(lane)必須啟用、候選項必須在任何程序啟動**之前**就確認可用、`argv[0]` 必須早已由你的路由設定註冊過。沒有任何東西會經過 shell。工作行程一旦啟動,就不會偷偷改用第二個候選項——失敗是以證據的形式回報,不是自動重試。
|
|
27
27
|
|
|
28
|
+
主控協定刻意區分路由層級:`lane` 填的是通道名稱 `default`;`codex-default` 是該通道內的候選執行器,不是通道。CueLine 會在註冊任何工作前先驗證整份 `dispatch`;只要包含無效通道或執行器,整份派工就會被退回修正,不會先執行其中一部分。
|
|
29
|
+
|
|
28
30
|
這是允許清單(allow-list),不是沙箱。已註冊的工作行程擁有跟 CueLine 行程本身相同的權限;`advise` 對應 Codex 的唯讀沙箱、`work` 對應 `workspace-write`,但你註冊了什麼,就等於你授權了什麼。
|
|
29
31
|
|
|
32
|
+
## 主控端必須是 Pro 模型
|
|
33
|
+
|
|
34
|
+
除非輸入框的模型選單顯示 `Pro`,否則 CueLine 拒絕送出。對話若停在別的模型,CueLine 會先把輸入框切成 `Pro`——這是它唯一被允許做的模型切換。在一次已驗證的實機執行中,它把 Instant 切成 Pro,回應回來的是 `gpt-5-6-pro`。
|
|
35
|
+
|
|
36
|
+
選了不等於證明了。每次回應之後,CueLine 會讀取該則已完成助理訊息的模型 slug,並要求它是 Pro 的 slug;送出與回覆之間若被降級,會被抓出來,而不是被信任。失敗會以 `MODEL_SELECTOR_MISSING`、`PRO_MODEL_UNAVAILABLE`、`PRO_MODEL_SELECTION_FAILED` 或 `PRO_MODEL_MISMATCH` 浮現——絕不會變成一個被接受的答案。
|
|
37
|
+
|
|
38
|
+
ChatGPT Pro 訂閱方案與「選定的 Pro 模型」是兩回事。帳號或個人資料標籤上出現 `Pro`,只是訂閱方案的證據,永遠不算模型證據;只有回應的模型 slug 才算。每一輪實機回合都會保存 `controller_response_received`,帶著 `selected_model_label`、`response_model_slug` 與 `model_evidence_source`,因此「是哪一種證據證明了模型」事後仍可稽核。
|
|
39
|
+
|
|
30
40
|
## 五分鐘上手
|
|
31
41
|
|
|
32
42
|
你需要 Node.js 22 以上、帶內建瀏覽器的 Codex,以及——若要用內建的預設通道——`PATH` 上有 `codex` CLI。
|
|
33
43
|
|
|
44
|
+
從 npm registry 安裝:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
npm install -g cueline@0.1.2
|
|
48
|
+
cueline install
|
|
49
|
+
cueline doctor
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
作為備援,也可以安裝 [v0.1.2 release](https://github.com/Seraphim0916/cueline/releases/tag/v0.1.2) 上的打包 tarball,該 release 同時附上它的 `.sha256` 校驗碼:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
npm install -g https://github.com/Seraphim0916/cueline/releases/download/v0.1.2/cueline-0.1.2.tgz
|
|
56
|
+
cueline install
|
|
57
|
+
cueline doctor
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
`cueline install` 只建立一個符號連結:把內建的 skill 接到 `$CODEX_HOME/skills/cueline`(預設 `~/.codex/skills/cueline`)。它拒絕覆寫不屬於自己的路徑,重複執行也不會有副作用。`cueline uninstall` 只移除那一個連結;若該位置換成了別人的檔案,它會保留而不刪除。
|
|
61
|
+
|
|
62
|
+
### 從原始碼安裝
|
|
63
|
+
|
|
34
64
|
```bash
|
|
35
65
|
git clone https://github.com/Seraphim0916/cueline.git
|
|
36
66
|
cd cueline
|
|
@@ -45,8 +75,8 @@ cueline doctor
|
|
|
45
75
|
接著,在 Codex 裡:
|
|
46
76
|
|
|
47
77
|
1. 用 Codex 的內建瀏覽器開啟 `https://chatgpt.com` 並登入。
|
|
48
|
-
2.
|
|
49
|
-
3. 請 Codex 用 CueLine 處理這件事:*「用 CueLine
|
|
78
|
+
2. 讓你要當主控的那個對話保持選取狀態——該頁面就是主控端。它的輸入框必須停在 `Pro` 模型;若不是,CueLine 會替你選成 `Pro`,否則就拒絕送出。
|
|
79
|
+
3. 請 Codex 用 CueLine 處理這件事:*「用 CueLine,讓那個開著的 ChatGPT Pro 對話來指揮這項任務。」*
|
|
50
80
|
4. 留著回傳的 `runId`。中斷的執行要續跑,就靠它。
|
|
51
81
|
|
|
52
82
|
內建的 `cueline` skill 是從 Codex 自己的 Node runtime 驅動這個套件的——內建瀏覽器的物件就活在那裡。另外開一個單獨的 `node` 行程並不會繼承它。
|
|
@@ -67,21 +97,29 @@ if (result.status === "complete") {
|
|
|
67
97
|
}
|
|
68
98
|
```
|
|
69
99
|
|
|
100
|
+
在 Codex 的 runtime 裡,import `cueline api path` 印出的那個絕對路徑模組——那就是你安裝的那份套件建置出來的 API。
|
|
101
|
+
|
|
70
102
|
`startCueLineRun` 是明確的啟動入口(`runCueLine` 是它的別名)。`continueCueLineRun({ runId })` 會在同一個對話裡續跑被中斷的執行,並沿用已保存的對話網址,除非你另外傳入新的 adapter。`loadCueLineRunState(runId)` 只讀取已保存的狀態,不驅動任何東西。已經走到 `complete` 或 `blocked` 的執行會原樣回傳,絕不會被再派工一次。
|
|
71
103
|
|
|
72
104
|
## CLI
|
|
73
105
|
|
|
74
|
-
CLI
|
|
106
|
+
CLI 不驅動瀏覽器。它負責管理 skill 連結,並告訴你本機這一半健不健康。
|
|
75
107
|
|
|
76
108
|
```console
|
|
109
|
+
$ cueline install
|
|
110
|
+
CueLine skill installed: /Users/you/.codex/skills/cueline
|
|
111
|
+
|
|
77
112
|
$ cueline doctor
|
|
78
|
-
CueLine 0.1.
|
|
113
|
+
CueLine 0.1.2
|
|
79
114
|
status ok
|
|
80
115
|
node 22.14.0 ok
|
|
81
|
-
config /
|
|
116
|
+
config /usr/local/lib/node_modules/cueline/config/routing.default.json valid
|
|
82
117
|
home /Users/you/.cueline
|
|
83
118
|
available_lanes 1
|
|
84
119
|
|
|
120
|
+
$ cueline api path
|
|
121
|
+
/usr/local/lib/node_modules/cueline/dist/src/api.js
|
|
122
|
+
|
|
85
123
|
$ cueline routing
|
|
86
124
|
default codex-default available
|
|
87
125
|
|
|
@@ -89,10 +127,13 @@ $ cueline jobs
|
|
|
89
127
|
No jobs.
|
|
90
128
|
|
|
91
129
|
$ cueline config path
|
|
92
|
-
/
|
|
130
|
+
/usr/local/lib/node_modules/cueline/config/routing.default.json
|
|
131
|
+
|
|
132
|
+
$ cueline uninstall
|
|
133
|
+
CueLine skill removed: /Users/you/.codex/skills/cueline
|
|
93
134
|
```
|
|
94
135
|
|
|
95
|
-
Node 版本太舊、或沒有任何通道解析得出來時,`cueline doctor` 會以非零狀態結束,因此可以直接拿來當前置檢查。`cueline routing` 會告訴你某個通道為什麼不可用,而不是安靜地改選別的。`cueline help` 會列出全部。
|
|
136
|
+
Node 版本太舊、或沒有任何通道解析得出來時,`cueline doctor` 會以非零狀態結束,因此可以直接拿來當前置檢查。`cueline routing` 會告訴你某個通道為什麼不可用,而不是安靜地改選別的。`cueline api path` 印出的就是 skill 會 import 的模組,所以用打包安裝時完全不需要 clone 原始碼。`cueline help` 會列出全部。
|
|
96
137
|
|
|
97
138
|
## 設定
|
|
98
139
|
|
|
@@ -110,6 +151,8 @@ jobs/<job-id>.json 每個工作的執行證據
|
|
|
110
151
|
|
|
111
152
|
事件日誌才是紀錄本身:主控端的這一輪在送出之前就先寫下、工作在行程啟動之前就先註冊,所以「意圖」與「副作用」之間若被中斷,會留下痕跡。壞掉的快照會被忽略、從第 1 號事件重建,而不是硬信它。
|
|
112
153
|
|
|
154
|
+
續跑只會重新接回該次執行記錄下來的那個對話網址,絕不接到長得像的分頁。對尚待處理的主控回合,它會先在該對話尋找與確切請求相符的已完成回覆;找到就以唯讀方式接回,不會重送。若舊狀態中同時有多個待處理回合,呼叫端必須明確指定一個。只有當唯一待處理提示能被證明為 `definitely_not_sent` 時,CueLine 才會自動重試;提交狀態不明或分頁消失時,會丟出 `TAB_RECOVERY_UNSAFE` 並停下。
|
|
155
|
+
|
|
113
156
|
## 驗證
|
|
114
157
|
|
|
115
158
|
```bash
|
|
@@ -125,7 +168,7 @@ npm pack --dry-run
|
|
|
125
168
|
|
|
126
169
|
## 0.1 的限制
|
|
127
170
|
|
|
128
|
-
|
|
171
|
+
只支援純文字。一次執行只對應一個對話。選成 `Pro` 是 CueLine 唯一會做的模型切換;不支援圖片、不支援檔案上傳,也不支援 Deep Research、Projects 或 Apps。工作行程一旦啟動就沒有自動重試或改道——失敗的 `work` 工作會被標記為副作用不明確後回報,因為 CueLine 無法證明它做到哪裡。macOS 是主要的桌面目標、Linux 是 CI 目標;Windows 未經驗證,而且 `install.sh` 不是 Windows 安裝程式。adapter 依賴 ChatGPT 網頁目前的介面,所以介面一改,會以明確的 `COMPOSER_MISSING`、`SEND_BUTTON_MISSING` 或回應逾時浮現——絕不會變成捏造的答案。
|
|
129
172
|
|
|
130
173
|
完整矩陣見 [compatibility](docs/compatibility.md)。
|
|
131
174
|
|
package/dist/src/api.d.ts
CHANGED
|
@@ -23,6 +23,8 @@ export interface StartCueLineRunOptions extends CueLineRuntimeOptions {
|
|
|
23
23
|
}
|
|
24
24
|
export interface ContinueCueLineRunOptions extends CueLineRuntimeOptions {
|
|
25
25
|
runId: string;
|
|
26
|
+
reconcileRequestId?: string;
|
|
27
|
+
abandonOtherPendingTurns?: boolean;
|
|
26
28
|
}
|
|
27
29
|
export declare function defaultRoutingConfigPath(): string;
|
|
28
30
|
export declare function routingConfigPath(environment?: NodeJS.ProcessEnv, explicitPath?: string): string;
|
package/dist/src/api.js
CHANGED
|
@@ -110,6 +110,7 @@ async function prepareRuntime(options, persistedConversationUrl) {
|
|
|
110
110
|
});
|
|
111
111
|
},
|
|
112
112
|
controllerInstructions: [routingInstruction(config, availability)],
|
|
113
|
+
...(conversationUrl === undefined ? {} : { conversationUrl }),
|
|
113
114
|
home,
|
|
114
115
|
};
|
|
115
116
|
}
|
|
@@ -142,6 +143,12 @@ export async function continueCueLineRun(options) {
|
|
|
142
143
|
return continueControllerLoop({
|
|
143
144
|
runId: options.runId,
|
|
144
145
|
...runtime,
|
|
146
|
+
...(options.reconcileRequestId === undefined
|
|
147
|
+
? {}
|
|
148
|
+
: { reconcileRequestId: options.reconcileRequestId }),
|
|
149
|
+
...(options.abandonOtherPendingTurns === undefined
|
|
150
|
+
? {}
|
|
151
|
+
: { abandonOtherPendingTurns: options.abandonOtherPendingTurns }),
|
|
145
152
|
...(options.maxRounds === undefined ? {} : { maxRounds: options.maxRounds }),
|
|
146
153
|
...(options.maxRepairAttempts === undefined
|
|
147
154
|
? {}
|
package/dist/src/api.js.map
CHANGED
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,25 @@ export interface ControllerTurn {
|
|
|
9
9
|
text: string;
|
|
10
10
|
conversationUrl?: string;
|
|
11
11
|
title?: string;
|
|
12
|
+
model?: ControllerModelEvidence;
|
|
13
|
+
}
|
|
14
|
+
export interface ControllerModelEvidence {
|
|
15
|
+
provider: "chatgpt";
|
|
16
|
+
selectedLabel: string;
|
|
17
|
+
responseModelSlug: string;
|
|
18
|
+
source: "composer_and_response";
|
|
19
|
+
}
|
|
20
|
+
export type ControllerSubmissionState = "possibly_sent" | "submitted";
|
|
21
|
+
export interface BrowserTurnCheckpoint {
|
|
22
|
+
submissionState: ControllerSubmissionState;
|
|
23
|
+
conversationUrl?: string;
|
|
24
|
+
selectedModelLabel: string;
|
|
25
|
+
baselineAssistantMessageCount: number;
|
|
26
|
+
}
|
|
27
|
+
export interface BrowserTurnHooks {
|
|
28
|
+
onCheckpoint?: (checkpoint: BrowserTurnCheckpoint) => Promise<void>;
|
|
12
29
|
}
|
|
13
30
|
export interface BrowserAdapter {
|
|
14
|
-
sendTurn(input: BrowserTurnInput): Promise<ControllerTurn>;
|
|
31
|
+
sendTurn(input: BrowserTurnInput, hooks?: BrowserTurnHooks): Promise<ControllerTurn>;
|
|
32
|
+
recoverTurn?(input: BrowserTurnInput): Promise<ControllerTurn>;
|
|
15
33
|
}
|
|
@@ -2,6 +2,9 @@ export interface PageChatState {
|
|
|
2
2
|
isAnswering: boolean;
|
|
3
3
|
assistantText: string;
|
|
4
4
|
assistantMessageCount: number;
|
|
5
|
+
assistantModelSlug: string | null;
|
|
6
|
+
lastUserText: string | null;
|
|
7
|
+
lastMessageRole: "assistant" | "user" | null;
|
|
5
8
|
}
|
|
6
9
|
export interface IabLocator {
|
|
7
10
|
count(): Promise<number>;
|
|
@@ -27,7 +27,9 @@ export async function readPageChatState(tab) {
|
|
|
27
27
|
.trim();
|
|
28
28
|
return /stop/i.test(label) && /(answer|generat|respond|stream|thinking)/i.test(label);
|
|
29
29
|
});
|
|
30
|
-
const
|
|
30
|
+
const messages = Array.from(document.querySelectorAll("[data-message-author-role]"));
|
|
31
|
+
const assistantMessages = messages.filter((message) => message.getAttribute("data-message-author-role") === "assistant");
|
|
32
|
+
const userMessages = messages.filter((message) => message.getAttribute("data-message-author-role") === "user");
|
|
31
33
|
const last = assistantMessages.at(-1);
|
|
32
34
|
const visibleText = last !== undefined && "innerText" in last
|
|
33
35
|
? String(last.innerText ?? last.textContent ?? "")
|
|
@@ -35,7 +37,24 @@ export async function readPageChatState(tab) {
|
|
|
35
37
|
const assistantText = visibleText
|
|
36
38
|
.replace(/\u00a0/g, " ")
|
|
37
39
|
.trim();
|
|
38
|
-
|
|
40
|
+
const assistantModelSlug = last?.getAttribute("data-message-model-slug") ?? null;
|
|
41
|
+
const lastUser = userMessages.at(-1);
|
|
42
|
+
const lastUserVisibleText = lastUser !== undefined && "innerText" in lastUser
|
|
43
|
+
? String(lastUser.innerText ??
|
|
44
|
+
lastUser.textContent ??
|
|
45
|
+
"")
|
|
46
|
+
: lastUser?.textContent ?? "";
|
|
47
|
+
const lastUserText = lastUser === undefined ? null : lastUserVisibleText.replace(/\u00a0/g, " ").trim();
|
|
48
|
+
const lastRole = messages.at(-1)?.getAttribute("data-message-author-role");
|
|
49
|
+
const lastMessageRole = lastRole === "assistant" || lastRole === "user" ? lastRole : null;
|
|
50
|
+
return {
|
|
51
|
+
isAnswering,
|
|
52
|
+
assistantText,
|
|
53
|
+
assistantMessageCount: assistantMessages.length,
|
|
54
|
+
assistantModelSlug,
|
|
55
|
+
lastUserText,
|
|
56
|
+
lastMessageRole,
|
|
57
|
+
};
|
|
39
58
|
});
|
|
40
59
|
}
|
|
41
60
|
//# sourceMappingURL=bootstrap.js.map
|
|
@@ -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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"}
|