cueline 0.1.0 → 0.1.1
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/README.ja.md +49 -8
- package/README.ko.md +49 -8
- package/README.md +49 -8
- package/README.zh-CN.md +49 -8
- package/README.zh-TW.md +49 -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 +278 -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 +1 -1
- package/skills/cueline/SKILL.md +13 -3
package/README.ja.md
CHANGED
|
@@ -27,10 +27,38 @@ CueLine は独立した実装で、**ランタイムの npm 依存はゼロ**で
|
|
|
27
27
|
|
|
28
28
|
これは許可リスト(allow-list)であって、サンドボックスではありません。登録されたワーカーは CueLine プロセス自身と同じ権限で動きます。`advise` は Codex の読み取り専用サンドボックスに、`work` は `workspace-write` に対応しますが、登録したものが、そのまま許可したものになります。
|
|
29
29
|
|
|
30
|
+
## コントローラーは Pro モデルでなければならない
|
|
31
|
+
|
|
32
|
+
コンポーザーのモデルセレクターが `Pro` を示していないかぎり、CueLine は送信を拒否します。会話が別のモデルにある場合、CueLine はまずコンポーザーを `Pro` に切り替えます——それが唯一許されたモデル切り替えです。検証済みのライブ実行では、Instant を Pro に切り替え、応答は `gpt-5-6-pro` として返りました。
|
|
33
|
+
|
|
34
|
+
選ぶことと、証明することは違います。各応答のあと CueLine は、完了したアシスタントメッセージのモデル slug を読み、それが Pro の slug であることを要求します。送信から返信までのあいだに格下げが起きても、信用せずに検出します。失敗は `MODEL_SELECTOR_MISSING`、`PRO_MODEL_UNAVAILABLE`、`PRO_MODEL_SELECTION_FAILED`、`PRO_MODEL_MISMATCH` として表面化し、受理された回答になることは決してありません。
|
|
35
|
+
|
|
36
|
+
ChatGPT Pro のサブスクリプションと、選択された Pro モデルは別物です。アカウントやプロフィールのラベルに `Pro` が含まれていても、それはサブスクリプションの証拠にすぎず、モデルの証拠には決してなりません。モデルの証拠になるのは応答のモデル slug だけです。ライブのターンごとに `controller_response_received` が `selected_model_label`、`response_model_slug`、`model_evidence_source` とともに永続化されるため、どちらの証拠がモデルを裏づけたのかは後からでも監査できます。
|
|
37
|
+
|
|
30
38
|
## クイックスタート
|
|
31
39
|
|
|
32
40
|
必要なもの:Node.js 22 以上、組み込みブラウザーを備えた Codex、そして——同梱の既定レーンを使う場合は——`PATH` 上の `codex` CLI。
|
|
33
41
|
|
|
42
|
+
npm レジストリからインストールします。
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
npm install -g cueline@0.1.1
|
|
46
|
+
cueline install
|
|
47
|
+
cueline doctor
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
フォールバックとして、[v0.1.1 リリース](https://github.com/Seraphim0916/cueline/releases/tag/v0.1.1) のパッケージ済み tarball をインストールすることもできます。同じリリースに `.sha256` チェックサムも置いてあります。
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
npm install -g https://github.com/Seraphim0916/cueline/releases/download/v0.1.1/cueline-0.1.1.tgz
|
|
54
|
+
cueline install
|
|
55
|
+
cueline doctor
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
`cueline install` が作るシンボリックリンクは 1 つだけ、同梱スキルを `$CODEX_HOME/skills/cueline`(既定では `~/.codex/skills/cueline`)に張ります。自分が所有していないパスの置き換えは拒否し、二度実行しても何も変わりません。`cueline uninstall` はそのリンクだけを外します。そこに他人のファイルがあれば、削除せず保持します。
|
|
59
|
+
|
|
60
|
+
### ソースからインストールする
|
|
61
|
+
|
|
34
62
|
```bash
|
|
35
63
|
git clone https://github.com/Seraphim0916/cueline.git
|
|
36
64
|
cd cueline
|
|
@@ -45,8 +73,8 @@ cueline doctor
|
|
|
45
73
|
次に、Codex で:
|
|
46
74
|
|
|
47
75
|
1. Codex の組み込みブラウザーで `https://chatgpt.com` を開き、サインインします。
|
|
48
|
-
2.
|
|
49
|
-
3. Codex にこう頼みます:*「CueLine
|
|
76
|
+
2. 主導させたい会話を選択したままにします。そのページがコントローラーです。そのコンポーザーは `Pro` モデルでなければなりません。そうでない場合、CueLine が `Pro` を選び、選べなければ送信を拒否します。
|
|
77
|
+
3. Codex にこう頼みます:*「CueLine を使って、開いている ChatGPT Pro の会話にこのタスクを指揮させて。」*
|
|
50
78
|
4. 返ってきた `runId` を控えておきます。中断した実行を再開する手がかりになります。
|
|
51
79
|
|
|
52
80
|
同梱の `cueline` スキルは、Codex 自身の Node ランタイムからこのパッケージを駆動します。組み込みブラウザーのオブジェクトはそこに存在するためです。別に起動したプレーンな `node` プロセスはそれを継承しません。
|
|
@@ -67,21 +95,29 @@ if (result.status === "complete") {
|
|
|
67
95
|
}
|
|
68
96
|
```
|
|
69
97
|
|
|
98
|
+
Codex のランタイムでは、`cueline api path` が出力する絶対パスのモジュールを import します。それがインストールしたパッケージのビルド済み API です。
|
|
99
|
+
|
|
70
100
|
`startCueLineRun` が明示的な開始点です(`runCueLine` はその別名)。`continueCueLineRun({ runId })` は中断した実行を同じ会話で再開し、新しいアダプターを渡さないかぎり保存済みの会話 URL を再利用します。`loadCueLineRunState(runId)` は永続化された状態を読むだけで、何も駆動しません。すでに `complete` または `blocked` に達した実行はそのまま返され、二度とディスパッチされません。
|
|
71
101
|
|
|
72
102
|
## CLI
|
|
73
103
|
|
|
74
|
-
CLI
|
|
104
|
+
CLI はブラウザーを駆動しません。スキルのリンクを管理し、ローカル側が健全かどうかを教えます。
|
|
75
105
|
|
|
76
106
|
```console
|
|
107
|
+
$ cueline install
|
|
108
|
+
CueLine skill installed: /Users/you/.codex/skills/cueline
|
|
109
|
+
|
|
77
110
|
$ cueline doctor
|
|
78
|
-
CueLine 0.1.
|
|
111
|
+
CueLine 0.1.1
|
|
79
112
|
status ok
|
|
80
113
|
node 22.14.0 ok
|
|
81
|
-
config /
|
|
114
|
+
config /usr/local/lib/node_modules/cueline/config/routing.default.json valid
|
|
82
115
|
home /Users/you/.cueline
|
|
83
116
|
available_lanes 1
|
|
84
117
|
|
|
118
|
+
$ cueline api path
|
|
119
|
+
/usr/local/lib/node_modules/cueline/dist/src/api.js
|
|
120
|
+
|
|
85
121
|
$ cueline routing
|
|
86
122
|
default codex-default available
|
|
87
123
|
|
|
@@ -89,10 +125,13 @@ $ cueline jobs
|
|
|
89
125
|
No jobs.
|
|
90
126
|
|
|
91
127
|
$ cueline config path
|
|
92
|
-
/
|
|
128
|
+
/usr/local/lib/node_modules/cueline/config/routing.default.json
|
|
129
|
+
|
|
130
|
+
$ cueline uninstall
|
|
131
|
+
CueLine skill removed: /Users/you/.codex/skills/cueline
|
|
93
132
|
```
|
|
94
133
|
|
|
95
|
-
Node が古すぎる場合、あるいは解決できるレーンが一つもない場合、`cueline doctor` は非ゼロで終了します。そのため事前チェックとしてそのまま使えます。`cueline routing` は、黙って別のものを選ぶのではなく、そのレーンがなぜ使えないのかを示します。`cueline help` ですべて一覧できます。
|
|
134
|
+
Node が古すぎる場合、あるいは解決できるレーンが一つもない場合、`cueline doctor` は非ゼロで終了します。そのため事前チェックとしてそのまま使えます。`cueline routing` は、黙って別のものを選ぶのではなく、そのレーンがなぜ使えないのかを示します。`cueline api path` が出すのはスキルが import するモジュールなので、パッケージ導入ならリポジトリの取得は不要です。`cueline help` ですべて一覧できます。
|
|
96
135
|
|
|
97
136
|
## 設定
|
|
98
137
|
|
|
@@ -110,6 +149,8 @@ jobs/<job-id>.json ジョブごとの実行証拠
|
|
|
110
149
|
|
|
111
150
|
記録そのものはイベントログです。コントローラーのターンは送信する前に書かれ、ジョブはプロセスが起動する前に登録されます。だからこそ、意図と副作用のあいだで中断が起きても痕跡が残ります。壊れたスナップショットは信用されず、無視されてイベント 1 番から再構築されます。
|
|
112
151
|
|
|
152
|
+
復帰は、その実行が記録したまさにその会話 URL にだけ再接続します。よく似たタブにつなぐことはありません。送信の状態が不確定なあいだにタブが消えた場合、CueLine は `TAB_RECOVERY_UNSAFE` を投げて停止します。最初の送信がすでに届いたかどうかを証明できない以上、自動でプロンプトを送り直すことは決してありません。
|
|
153
|
+
|
|
113
154
|
## 検証
|
|
114
155
|
|
|
115
156
|
```bash
|
|
@@ -125,7 +166,7 @@ npm pack --dry-run
|
|
|
125
166
|
|
|
126
167
|
## 0.1 の制限
|
|
127
168
|
|
|
128
|
-
テキストのみ。1 回の実行につき会話は 1
|
|
169
|
+
テキストのみ。1 回の実行につき会話は 1 つ。CueLine が行うモデル切り替えは `Pro` の選択だけです。画像、ファイルアップロード、Deep Research、Projects、Apps には対応しません。ワーカーが起動したあとの自動リトライやフォールバックはありません。失敗した `work` ジョブは、どこまで進んだか CueLine には証明できないため、副作用が不確定であるという印つきで報告されます。主なデスクトップ対象は macOS、CI 対象は Linux です。Windows は未検証で、`install.sh` は Windows 用インストーラーではありません。アダプターは現行の ChatGPT ウェブ UI に依存するため、UI が変わった場合は `COMPOSER_MISSING`、`SEND_BUTTON_MISSING`、あるいは応答タイムアウトとして明示的に表面化します——でっち上げの回答になることは決してありません。
|
|
129
170
|
|
|
130
171
|
完全な対応表は [compatibility](docs/compatibility.md) を参照してください。
|
|
131
172
|
|
package/README.ko.md
CHANGED
|
@@ -27,10 +27,38 @@ CueLine은 독립적인 구현이며 **런타임 npm 의존성이 전혀 없습
|
|
|
27
27
|
|
|
28
28
|
이것은 허용 목록(allow-list)이지 샌드박스가 아닙니다. 등록된 워커는 CueLine 프로세스 자신과 동일한 권한으로 실행됩니다. `advise`는 Codex의 읽기 전용 샌드박스에, `work`는 `workspace-write`에 대응하지만, 당신이 등록한 것이 곧 당신이 승인한 것입니다.
|
|
29
29
|
|
|
30
|
+
## 컨트롤러는 반드시 Pro 모델이어야 합니다
|
|
31
|
+
|
|
32
|
+
컴포저의 모델 선택기가 `Pro`를 가리키지 않으면 CueLine은 전송을 거부합니다. 대화가 다른 모델에 머물러 있으면 CueLine이 먼저 컴포저를 `Pro`로 전환합니다 — 이것이 CueLine에게 허용된 유일한 모델 전환입니다. 검증된 실제 실행에서 CueLine은 Instant를 Pro로 전환했고, 응답은 `gpt-5-6-pro`로 돌아왔습니다.
|
|
33
|
+
|
|
34
|
+
고르는 것과 증명하는 것은 다릅니다. 응답이 올 때마다 CueLine은 완료된 어시스턴트 메시지의 모델 slug를 읽고 그것이 Pro slug이기를 요구합니다. 전송과 응답 사이에 등급이 낮아지더라도 신뢰하지 않고 잡아냅니다. 실패는 `MODEL_SELECTOR_MISSING`, `PRO_MODEL_UNAVAILABLE`, `PRO_MODEL_SELECTION_FAILED`, `PRO_MODEL_MISMATCH`로 드러나며, 받아들여진 답으로 둔갑하는 일은 결코 없습니다.
|
|
35
|
+
|
|
36
|
+
ChatGPT Pro 구독과 선택된 Pro 모델은 서로 다른 것입니다. 계정이나 프로필 라벨에 `Pro`가 들어 있어도 그것은 구독의 증거일 뿐, 결코 모델의 증거가 되지 않습니다. 모델의 증거가 되는 것은 응답의 모델 slug뿐입니다. 실제 턴마다 `controller_response_received`가 `selected_model_label`, `response_model_slug`, `model_evidence_source`와 함께 저장되므로, 어느 증거가 모델을 입증했는지는 나중에도 감사할 수 있습니다.
|
|
37
|
+
|
|
30
38
|
## 빠른 시작
|
|
31
39
|
|
|
32
40
|
필요한 것: Node.js 22 이상, 내장 브라우저를 갖춘 Codex, 그리고 — 기본 제공 레인을 쓴다면 — `PATH` 위의 `codex` CLI.
|
|
33
41
|
|
|
42
|
+
npm 레지스트리에서 설치합니다:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
npm install -g cueline@0.1.1
|
|
46
|
+
cueline install
|
|
47
|
+
cueline doctor
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
대안으로, [v0.1.1 릴리스](https://github.com/Seraphim0916/cueline/releases/tag/v0.1.1)의 패키지 tarball을 설치할 수도 있습니다. 같은 릴리스에 `.sha256` 체크섬도 함께 있습니다.
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
npm install -g https://github.com/Seraphim0916/cueline/releases/download/v0.1.1/cueline-0.1.1.tgz
|
|
54
|
+
cueline install
|
|
55
|
+
cueline doctor
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
`cueline install`이 만드는 심볼릭 링크는 하나뿐입니다. 번들된 스킬을 `$CODEX_HOME/skills/cueline`(기본값 `~/.codex/skills/cueline`)에 연결합니다. 자신이 소유하지 않은 경로는 덮어쓰기를 거부하고, 두 번 실행해도 아무것도 달라지지 않습니다. `cueline uninstall`은 그 링크만 제거하며, 그 자리에 다른 파일이 있으면 지우지 않고 보존합니다.
|
|
59
|
+
|
|
60
|
+
### 소스에서 설치하기
|
|
61
|
+
|
|
34
62
|
```bash
|
|
35
63
|
git clone https://github.com/Seraphim0916/cueline.git
|
|
36
64
|
cd cueline
|
|
@@ -45,8 +73,8 @@ cueline doctor
|
|
|
45
73
|
그다음 Codex에서:
|
|
46
74
|
|
|
47
75
|
1. Codex의 내장 브라우저로 `https://chatgpt.com`을 열고 로그인합니다.
|
|
48
|
-
2. 지휘를 맡길 대화를 선택한 상태로 둡니다. 그
|
|
49
|
-
3. Codex에게 CueLine으로 처리해 달라고 요청합니다: *"CueLine
|
|
76
|
+
2. 지휘를 맡길 대화를 선택한 상태로 둡니다. 그 페이지가 컨트롤러입니다. 그 컴포저는 반드시 `Pro` 모델이어야 하며, 그렇지 않으면 CueLine이 `Pro`를 대신 선택하고, 선택하지 못하면 전송을 거부합니다.
|
|
77
|
+
3. Codex에게 CueLine으로 처리해 달라고 요청합니다: *"CueLine을 써서, 열려 있는 ChatGPT Pro 대화가 이 작업을 지휘하게 해 줘."*
|
|
50
78
|
4. 반환된 `runId`를 보관하세요. 중단된 실행을 이어서 진행하는 열쇠입니다.
|
|
51
79
|
|
|
52
80
|
기본 제공 `cueline` 스킬은 Codex 자체의 Node 런타임에서 이 패키지를 구동합니다. 내장 브라우저 객체가 바로 그곳에 있기 때문입니다. 옆에서 따로 띄운 평범한 `node` 프로세스는 그것을 물려받지 못합니다.
|
|
@@ -67,21 +95,29 @@ if (result.status === "complete") {
|
|
|
67
95
|
}
|
|
68
96
|
```
|
|
69
97
|
|
|
98
|
+
Codex 런타임에서는 `cueline api path`가 출력하는 절대 경로 모듈을 import하세요. 그것이 설치한 패키지의 빌드된 API입니다.
|
|
99
|
+
|
|
70
100
|
`startCueLineRun`이 명시적인 시작점입니다(`runCueLine`은 그 별칭). `continueCueLineRun({ runId })`은 중단된 실행을 같은 대화에서 재개하며, 새 어댑터를 넘기지 않는 한 저장된 대화 URL을 재사용합니다. `loadCueLineRunState(runId)`는 저장된 상태를 읽기만 하고 아무것도 구동하지 않습니다. 이미 `complete`나 `blocked`에 도달한 실행은 그대로 반환되며, 두 번 디스패치되지 않습니다.
|
|
71
101
|
|
|
72
102
|
## CLI
|
|
73
103
|
|
|
74
|
-
CLI는 브라우저를 구동하지 않습니다. 로컬 쪽이 멀쩡한지
|
|
104
|
+
CLI는 브라우저를 구동하지 않습니다. 스킬 링크를 관리하고, 로컬 쪽이 멀쩡한지 알려줍니다.
|
|
75
105
|
|
|
76
106
|
```console
|
|
107
|
+
$ cueline install
|
|
108
|
+
CueLine skill installed: /Users/you/.codex/skills/cueline
|
|
109
|
+
|
|
77
110
|
$ cueline doctor
|
|
78
|
-
CueLine 0.1.
|
|
111
|
+
CueLine 0.1.1
|
|
79
112
|
status ok
|
|
80
113
|
node 22.14.0 ok
|
|
81
|
-
config /
|
|
114
|
+
config /usr/local/lib/node_modules/cueline/config/routing.default.json valid
|
|
82
115
|
home /Users/you/.cueline
|
|
83
116
|
available_lanes 1
|
|
84
117
|
|
|
118
|
+
$ cueline api path
|
|
119
|
+
/usr/local/lib/node_modules/cueline/dist/src/api.js
|
|
120
|
+
|
|
85
121
|
$ cueline routing
|
|
86
122
|
default codex-default available
|
|
87
123
|
|
|
@@ -89,10 +125,13 @@ $ cueline jobs
|
|
|
89
125
|
No jobs.
|
|
90
126
|
|
|
91
127
|
$ cueline config path
|
|
92
|
-
/
|
|
128
|
+
/usr/local/lib/node_modules/cueline/config/routing.default.json
|
|
129
|
+
|
|
130
|
+
$ cueline uninstall
|
|
131
|
+
CueLine skill removed: /Users/you/.codex/skills/cueline
|
|
93
132
|
```
|
|
94
133
|
|
|
95
|
-
Node 버전이 너무 낮거나 해석 가능한 레인이 하나도 없으면 `cueline doctor`는 0이 아닌 코드로 종료합니다. 그래서 사전 점검용으로 그대로 쓸 수 있습니다. `cueline routing`은 조용히 다른 것을 고르는 대신, 그 레인이 왜 사용 불가인지 보여줍니다. `cueline help`가 전부를 나열합니다.
|
|
134
|
+
Node 버전이 너무 낮거나 해석 가능한 레인이 하나도 없으면 `cueline doctor`는 0이 아닌 코드로 종료합니다. 그래서 사전 점검용으로 그대로 쓸 수 있습니다. `cueline routing`은 조용히 다른 것을 고르는 대신, 그 레인이 왜 사용 불가인지 보여줍니다. `cueline api path`가 출력하는 것이 곧 스킬이 import하는 모듈이므로, 패키지로 설치했다면 저장소를 받을 필요가 없습니다. `cueline help`가 전부를 나열합니다.
|
|
96
135
|
|
|
97
136
|
## 설정
|
|
98
137
|
|
|
@@ -110,6 +149,8 @@ jobs/<job-id>.json 작업별 실행 증거
|
|
|
110
149
|
|
|
111
150
|
기록 그 자체는 이벤트 로그입니다. 컨트롤러의 턴은 보내기 전에 기록되고, 작업은 프로세스가 시작되기 전에 등록됩니다. 그래서 의도와 부작용 사이에서 중단이 일어나도 흔적이 남습니다. 손상된 스냅샷은 신뢰되지 않고, 무시된 뒤 이벤트 1번부터 다시 만들어집니다.
|
|
112
151
|
|
|
152
|
+
복구는 그 실행이 기록해 둔 바로 그 대화 URL에만 다시 연결하며, 비슷해 보이는 탭에는 결코 붙지 않습니다. 제출 상태가 불확실한 사이에 탭이 사라지면 CueLine은 `TAB_RECOVERY_UNSAFE`를 던지고 멈춥니다. 첫 번째 전송이 이미 도착했는지 증명할 수 없기 때문에, 프롬프트를 스스로 다시 보내는 일은 결코 없습니다.
|
|
153
|
+
|
|
113
154
|
## 검증
|
|
114
155
|
|
|
115
156
|
```bash
|
|
@@ -125,7 +166,7 @@ npm pack --dry-run
|
|
|
125
166
|
|
|
126
167
|
## 0.1의 한계
|
|
127
168
|
|
|
128
|
-
텍스트 전용. 실행 하나당 대화 하나. 모델
|
|
169
|
+
텍스트 전용. 실행 하나당 대화 하나. CueLine이 수행하는 모델 전환은 `Pro` 선택뿐입니다. 이미지, 파일 업로드, Deep Research, Projects, Apps는 지원하지 않습니다. 워커가 시작된 뒤의 자동 재시도나 폴백도 없습니다. 실패한 `work` 작업은 어디까지 진행됐는지 CueLine이 증명할 수 없으므로, 부작용이 불확실하다는 표시와 함께 보고됩니다. 주력 데스크톱 대상은 macOS이고 CI 대상은 Linux입니다. Windows는 검증되지 않았으며 `install.sh`는 Windows용 설치 프로그램이 아닙니다. 어댑터는 현재의 ChatGPT 웹 UI에 의존하므로, UI가 바뀌면 `COMPOSER_MISSING`, `SEND_BUTTON_MISSING`, 또는 응답 타임아웃으로 명시적으로 드러납니다 — 지어낸 답으로 둔갑하는 일은 결코 없습니다.
|
|
129
170
|
|
|
130
171
|
전체 표는 [compatibility](docs/compatibility.md)를 보세요.
|
|
131
172
|
|
package/README.md
CHANGED
|
@@ -27,10 +27,38 @@ The controller chooses *what should happen*. The local side chooses *whether and
|
|
|
27
27
|
|
|
28
28
|
That is an allow-list, not a sandbox. A registered worker runs with the same permissions as the CueLine process itself; `advise` maps to a read-only Codex sandbox and `work` to `workspace-write`, but what you register is what you have authorized.
|
|
29
29
|
|
|
30
|
+
## The controller must be a Pro model
|
|
31
|
+
|
|
32
|
+
CueLine refuses to send unless the composer's model selector reads `Pro`. If the conversation sits on another model, CueLine switches the composer to `Pro` first — that is the only model switch it is allowed to make. In a verified live run it switched Instant to Pro and the reply came back as `gpt-5-6-pro`.
|
|
33
|
+
|
|
34
|
+
Selecting is not the same as proving. After each response CueLine reads the completed assistant message's model slug and requires it to be a Pro slug, so a downgrade between send and reply is caught rather than trusted. A failure surfaces as `MODEL_SELECTOR_MISSING`, `PRO_MODEL_UNAVAILABLE`, `PRO_MODEL_SELECTION_FAILED`, or `PRO_MODEL_MISMATCH` — never as an accepted answer.
|
|
35
|
+
|
|
36
|
+
A ChatGPT Pro subscription and the selected Pro model are two different things. An account or profile label containing `Pro` is subscription evidence only and never counts as model evidence; only the response's model slug does. Every live turn persists `controller_response_received` with `selected_model_label`, `response_model_slug`, and `model_evidence_source`, so which evidence proved the model stays auditable afterwards.
|
|
37
|
+
|
|
30
38
|
## Quick start
|
|
31
39
|
|
|
32
40
|
You need Node.js 22+, Codex with its built-in Browser, and — for the bundled default lane — the `codex` CLI on `PATH`.
|
|
33
41
|
|
|
42
|
+
Install from the npm registry:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
npm install -g cueline@0.1.1
|
|
46
|
+
cueline install
|
|
47
|
+
cueline doctor
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
As a fallback, install the packaged tarball from the [v0.1.1 release](https://github.com/Seraphim0916/cueline/releases/tag/v0.1.1), which also carries its `.sha256` checksum:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
npm install -g https://github.com/Seraphim0916/cueline/releases/download/v0.1.1/cueline-0.1.1.tgz
|
|
54
|
+
cueline install
|
|
55
|
+
cueline doctor
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
`cueline install` creates one symlink, the bundled skill at `$CODEX_HOME/skills/cueline` (`~/.codex/skills/cueline` by default). It refuses to replace a path it does not own, and running it twice is a no-op. `cueline uninstall` removes that link and nothing else; a foreign path in its place is preserved, not deleted.
|
|
59
|
+
|
|
60
|
+
### Install from source
|
|
61
|
+
|
|
34
62
|
```bash
|
|
35
63
|
git clone https://github.com/Seraphim0916/cueline.git
|
|
36
64
|
cd cueline
|
|
@@ -45,8 +73,8 @@ cueline doctor
|
|
|
45
73
|
Then, in Codex:
|
|
46
74
|
|
|
47
75
|
1. Open `https://chatgpt.com` in Codex's built-in Browser and sign in.
|
|
48
|
-
2. Leave the conversation you want to be in charge selected — that page
|
|
49
|
-
3. Ask Codex to use CueLine for the task: *"Use CueLine
|
|
76
|
+
2. Leave the conversation you want to be in charge selected — that page is the controller. Its composer must be on a `Pro` model; CueLine selects `Pro` for you if it is not, and refuses to send otherwise.
|
|
77
|
+
3. Ask Codex to use CueLine for the task: *"Use CueLine and let the open ChatGPT Pro conversation direct this task."*
|
|
50
78
|
4. Keep the returned `runId`. It is how an interrupted run is resumed.
|
|
51
79
|
|
|
52
80
|
The bundled `cueline` skill drives the package from Codex's own Node runtime, which is where the in-app Browser object lives. A plain `node` process started on the side does not inherit it.
|
|
@@ -69,19 +97,27 @@ if (result.status === "complete") {
|
|
|
69
97
|
|
|
70
98
|
`startCueLineRun` is the explicit start (`runCueLine` is its alias). `continueCueLineRun({ runId })` resumes an interrupted run in the same conversation, and reuses the stored conversation URL unless you hand it a new adapter. `loadCueLineRunState(runId)` reads persisted state without driving anything. A run that already reached `complete` or `blocked` is returned as-is, never dispatched twice.
|
|
71
99
|
|
|
100
|
+
Inside Codex's runtime, import the absolute module that `cueline api path` prints — that is the built API of the package you installed.
|
|
101
|
+
|
|
72
102
|
## The CLI
|
|
73
103
|
|
|
74
|
-
The CLI does not drive the browser. It tells you whether the local half is sound.
|
|
104
|
+
The CLI does not drive the browser. It manages the skill link and tells you whether the local half is sound.
|
|
75
105
|
|
|
76
106
|
```console
|
|
107
|
+
$ cueline install
|
|
108
|
+
CueLine skill installed: /Users/you/.codex/skills/cueline
|
|
109
|
+
|
|
77
110
|
$ cueline doctor
|
|
78
|
-
CueLine 0.1.
|
|
111
|
+
CueLine 0.1.1
|
|
79
112
|
status ok
|
|
80
113
|
node 22.14.0 ok
|
|
81
|
-
config /
|
|
114
|
+
config /usr/local/lib/node_modules/cueline/config/routing.default.json valid
|
|
82
115
|
home /Users/you/.cueline
|
|
83
116
|
available_lanes 1
|
|
84
117
|
|
|
118
|
+
$ cueline api path
|
|
119
|
+
/usr/local/lib/node_modules/cueline/dist/src/api.js
|
|
120
|
+
|
|
85
121
|
$ cueline routing
|
|
86
122
|
default codex-default available
|
|
87
123
|
|
|
@@ -89,10 +125,13 @@ $ cueline jobs
|
|
|
89
125
|
No jobs.
|
|
90
126
|
|
|
91
127
|
$ cueline config path
|
|
92
|
-
/
|
|
128
|
+
/usr/local/lib/node_modules/cueline/config/routing.default.json
|
|
129
|
+
|
|
130
|
+
$ cueline uninstall
|
|
131
|
+
CueLine skill removed: /Users/you/.codex/skills/cueline
|
|
93
132
|
```
|
|
94
133
|
|
|
95
|
-
`cueline doctor` exits non-zero when Node is too old or no lane can resolve, which makes it usable as a preflight check. `cueline routing` shows why a lane is unavailable instead of quietly selecting something else. `cueline help` lists everything.
|
|
134
|
+
`cueline doctor` exits non-zero when Node is too old or no lane can resolve, which makes it usable as a preflight check. `cueline routing` shows why a lane is unavailable instead of quietly selecting something else. `cueline api path` is what the skill imports, so a packaged install needs no repository checkout. `cueline help` lists everything.
|
|
96
135
|
|
|
97
136
|
## Configuration
|
|
98
137
|
|
|
@@ -110,6 +149,8 @@ jobs/<job-id>.json per-job execution evidence
|
|
|
110
149
|
|
|
111
150
|
The event log is the record: the controller turn is written before it is sent, and a job is registered before its process starts, so an interruption between intent and side effect leaves a trace. A corrupt snapshot is ignored and rebuilt from event 1 rather than trusted.
|
|
112
151
|
|
|
152
|
+
Recovery reattaches only to the exact conversation URL the run recorded — never to a lookalike tab. If a tab disappears while a submission's status is ambiguous, CueLine throws `TAB_RECOVERY_UNSAFE` and stops. It never resends the prompt on its own, because it cannot prove whether the first one already landed.
|
|
153
|
+
|
|
113
154
|
## Verify
|
|
114
155
|
|
|
115
156
|
```bash
|
|
@@ -125,7 +166,7 @@ npm pack --dry-run
|
|
|
125
166
|
|
|
126
167
|
## Limits in 0.1
|
|
127
168
|
|
|
128
|
-
Text only. One conversation per run.
|
|
169
|
+
Text only. One conversation per run. Selecting `Pro` is the only model switch CueLine makes; no images, no file upload, no Deep Research, Projects, or Apps. No automatic retry or fallback once a worker has started — a failed `work` job is reported with its side effects flagged as ambiguous, because CueLine cannot prove how far it got. macOS is the primary desktop target and Linux is the CI target; Windows is unverified, and `install.sh` is not a Windows installer. The adapter depends on the current ChatGPT web UI, so a UI change surfaces as an explicit `COMPOSER_MISSING`, `SEND_BUTTON_MISSING`, or response timeout — never as a fabricated answer.
|
|
129
170
|
|
|
130
171
|
See [compatibility](docs/compatibility.md) for the full matrix.
|
|
131
172
|
|
package/README.zh-CN.md
CHANGED
|
@@ -27,10 +27,38 @@ CueLine 是独立实现,**没有任何运行时 npm 依赖**,也不是 Omnil
|
|
|
27
27
|
|
|
28
28
|
这是白名单(allow-list),不是沙箱。已注册的 worker 拥有与 CueLine 进程本身相同的权限;`advise` 对应 Codex 的只读沙箱、`work` 对应 `workspace-write`,但你注册了什么,就等于你授权了什么。
|
|
29
29
|
|
|
30
|
+
## 控制器必须是 Pro 模型
|
|
31
|
+
|
|
32
|
+
除非输入框的模型选择器显示 `Pro`,否则 CueLine 拒绝发送。会话若停在别的模型,CueLine 会先把输入框切换到 `Pro`——这是它唯一被允许做的模型切换。在一次已验证的实机运行中,它把 Instant 切换为 Pro,返回的响应是 `gpt-5-6-pro`。
|
|
33
|
+
|
|
34
|
+
选中不等于证明。每次响应之后,CueLine 会读取该条已完成助手消息的模型 slug,并要求它是 Pro 的 slug;发送与回复之间若发生降级,会被抓出来,而不是被信任。失败会以 `MODEL_SELECTOR_MISSING`、`PRO_MODEL_UNAVAILABLE`、`PRO_MODEL_SELECTION_FAILED` 或 `PRO_MODEL_MISMATCH` 暴露出来——绝不会变成一个被接受的答案。
|
|
35
|
+
|
|
36
|
+
ChatGPT Pro 订阅套餐与“选定的 Pro 模型”是两回事。账号或个人资料标签上出现 `Pro`,只是订阅套餐的证据,永远不算模型证据;只有响应的模型 slug 才算。每一轮实机回合都会持久化 `controller_response_received`,携带 `selected_model_label`、`response_model_slug` 与 `model_evidence_source`,因此“是哪一种证据证明了模型”事后依然可审计。
|
|
37
|
+
|
|
30
38
|
## 五分钟上手
|
|
31
39
|
|
|
32
40
|
你需要 Node.js 22 以上、带内置浏览器的 Codex,以及——若使用内置的默认通道——`PATH` 上有 `codex` CLI。
|
|
33
41
|
|
|
42
|
+
从 npm registry 安装:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
npm install -g cueline@0.1.1
|
|
46
|
+
cueline install
|
|
47
|
+
cueline doctor
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
作为后备,也可以安装 [v0.1.1 release](https://github.com/Seraphim0916/cueline/releases/tag/v0.1.1) 上的打包 tarball,该 release 同时附带它的 `.sha256` 校验值:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
npm install -g https://github.com/Seraphim0916/cueline/releases/download/v0.1.1/cueline-0.1.1.tgz
|
|
54
|
+
cueline install
|
|
55
|
+
cueline doctor
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
`cueline install` 只创建一个软链接:把内置的 skill 接到 `$CODEX_HOME/skills/cueline`(默认 `~/.codex/skills/cueline`)。它拒绝覆盖不属于自己的路径,重复执行也不会产生副作用。`cueline uninstall` 只移除那一个链接;若该位置换成了别人的文件,它会保留而不删除。
|
|
59
|
+
|
|
60
|
+
### 从源码安装
|
|
61
|
+
|
|
34
62
|
```bash
|
|
35
63
|
git clone https://github.com/Seraphim0916/cueline.git
|
|
36
64
|
cd cueline
|
|
@@ -45,8 +73,8 @@ cueline doctor
|
|
|
45
73
|
然后,在 Codex 里:
|
|
46
74
|
|
|
47
75
|
1. 用 Codex 的内置浏览器打开 `https://chatgpt.com` 并登录。
|
|
48
|
-
2.
|
|
49
|
-
3. 让 Codex 用 CueLine 处理任务:*“用 CueLine
|
|
76
|
+
2. 让你想让它当控制器的那个会话保持选中——该页面就是控制器。它的输入框必须停在 `Pro` 模型;若不是,CueLine 会替你选成 `Pro`,否则就拒绝发送。
|
|
77
|
+
3. 让 Codex 用 CueLine 处理任务:*“用 CueLine,让那个打开的 ChatGPT Pro 会话来指挥这项任务。”*
|
|
50
78
|
4. 保留返回的 `runId`。被中断的运行要续跑,就靠它。
|
|
51
79
|
|
|
52
80
|
内置的 `cueline` skill 是从 Codex 自身的 Node runtime 驱动这个包的——内置浏览器对象就存在于那里。另外单独启动的 `node` 进程不会继承它。
|
|
@@ -67,21 +95,29 @@ if (result.status === "complete") {
|
|
|
67
95
|
}
|
|
68
96
|
```
|
|
69
97
|
|
|
98
|
+
在 Codex 的 runtime 里,import `cueline api path` 打印出的那个绝对路径模块——那就是你安装的那份包构建出来的 API。
|
|
99
|
+
|
|
70
100
|
`startCueLineRun` 是显式的启动入口(`runCueLine` 是它的别名)。`continueCueLineRun({ runId })` 会在同一个会话中续跑被中断的运行,并复用已保存的会话链接,除非你传入新的 adapter。`loadCueLineRunState(runId)` 只读取已持久化的状态,不驱动任何东西。已经到达 `complete` 或 `blocked` 的运行会原样返回,绝不会被再次派发。
|
|
71
101
|
|
|
72
102
|
## CLI
|
|
73
103
|
|
|
74
|
-
CLI
|
|
104
|
+
CLI 不驱动浏览器。它负责管理 skill 链接,并告诉你本地这一半是否健康。
|
|
75
105
|
|
|
76
106
|
```console
|
|
107
|
+
$ cueline install
|
|
108
|
+
CueLine skill installed: /Users/you/.codex/skills/cueline
|
|
109
|
+
|
|
77
110
|
$ cueline doctor
|
|
78
|
-
CueLine 0.1.
|
|
111
|
+
CueLine 0.1.1
|
|
79
112
|
status ok
|
|
80
113
|
node 22.14.0 ok
|
|
81
|
-
config /
|
|
114
|
+
config /usr/local/lib/node_modules/cueline/config/routing.default.json valid
|
|
82
115
|
home /Users/you/.cueline
|
|
83
116
|
available_lanes 1
|
|
84
117
|
|
|
118
|
+
$ cueline api path
|
|
119
|
+
/usr/local/lib/node_modules/cueline/dist/src/api.js
|
|
120
|
+
|
|
85
121
|
$ cueline routing
|
|
86
122
|
default codex-default available
|
|
87
123
|
|
|
@@ -89,10 +125,13 @@ $ cueline jobs
|
|
|
89
125
|
No jobs.
|
|
90
126
|
|
|
91
127
|
$ cueline config path
|
|
92
|
-
/
|
|
128
|
+
/usr/local/lib/node_modules/cueline/config/routing.default.json
|
|
129
|
+
|
|
130
|
+
$ cueline uninstall
|
|
131
|
+
CueLine skill removed: /Users/you/.codex/skills/cueline
|
|
93
132
|
```
|
|
94
133
|
|
|
95
|
-
当 Node 版本过旧、或没有任何通道可解析时,`cueline doctor` 会以非零状态退出,因此可直接用作预检。`cueline routing` 会说明某个通道为何不可用,而不是悄悄改选别的。`cueline help` 会列出全部。
|
|
134
|
+
当 Node 版本过旧、或没有任何通道可解析时,`cueline doctor` 会以非零状态退出,因此可直接用作预检。`cueline routing` 会说明某个通道为何不可用,而不是悄悄改选别的。`cueline api path` 打印的就是 skill 会 import 的模块,所以使用打包安装时完全不需要 clone 源码。`cueline help` 会列出全部。
|
|
96
135
|
|
|
97
136
|
## 配置
|
|
98
137
|
|
|
@@ -110,6 +149,8 @@ jobs/<job-id>.json 每个作业的执行证据
|
|
|
110
149
|
|
|
111
150
|
事件日志才是记录本身:控制器这一轮在发送之前先写入、作业在进程启动之前先注册,因此“意图”与“副作用”之间若被中断,会留下痕迹。损坏的快照会被忽略并从第 1 号事件重建,而不是被信任。
|
|
112
151
|
|
|
152
|
+
续跑只会重新接回该次运行记录下来的那个会话 URL,绝不接到长得像的标签页。若某个标签页在“提交状态未明”的当下消失,CueLine 会抛出 `TAB_RECOVERY_UNSAFE` 并停下。它绝不自行重发提示,因为它无法证明第一次究竟发出去了没有。
|
|
153
|
+
|
|
113
154
|
## 验证
|
|
114
155
|
|
|
115
156
|
```bash
|
|
@@ -125,7 +166,7 @@ npm pack --dry-run
|
|
|
125
166
|
|
|
126
167
|
## 0.1 的限制
|
|
127
168
|
|
|
128
|
-
|
|
169
|
+
仅支持纯文本。一次运行只对应一个会话。选成 `Pro` 是 CueLine 唯一会做的模型切换;不支持图片、不支持文件上传,也不支持 Deep Research、Projects 或 Apps。worker 一旦启动便没有自动重试或回退——失败的 `work` 作业会在副作用被标记为不确定后回报,因为 CueLine 无法证明它执行到了哪一步。macOS 是主要的桌面目标、Linux 是 CI 目标;Windows 未经验证,且 `install.sh` 不是 Windows 安装程序。adapter 依赖 ChatGPT 网页当前的界面,因此界面变更会以明确的 `COMPOSER_MISSING`、`SEND_BUTTON_MISSING` 或响应超时暴露出来——绝不会变成编造的答案。
|
|
129
170
|
|
|
130
171
|
完整矩阵见 [compatibility](docs/compatibility.md)。
|
|
131
172
|
|
package/README.zh-TW.md
CHANGED
|
@@ -27,10 +27,38 @@ CueLine 是獨立實作,**沒有任何 runtime npm 相依套件**,也不是
|
|
|
27
27
|
|
|
28
28
|
這是允許清單(allow-list),不是沙箱。已註冊的工作行程擁有跟 CueLine 行程本身相同的權限;`advise` 對應 Codex 的唯讀沙箱、`work` 對應 `workspace-write`,但你註冊了什麼,就等於你授權了什麼。
|
|
29
29
|
|
|
30
|
+
## 主控端必須是 Pro 模型
|
|
31
|
+
|
|
32
|
+
除非輸入框的模型選單顯示 `Pro`,否則 CueLine 拒絕送出。對話若停在別的模型,CueLine 會先把輸入框切成 `Pro`——這是它唯一被允許做的模型切換。在一次已驗證的實機執行中,它把 Instant 切成 Pro,回應回來的是 `gpt-5-6-pro`。
|
|
33
|
+
|
|
34
|
+
選了不等於證明了。每次回應之後,CueLine 會讀取該則已完成助理訊息的模型 slug,並要求它是 Pro 的 slug;送出與回覆之間若被降級,會被抓出來,而不是被信任。失敗會以 `MODEL_SELECTOR_MISSING`、`PRO_MODEL_UNAVAILABLE`、`PRO_MODEL_SELECTION_FAILED` 或 `PRO_MODEL_MISMATCH` 浮現——絕不會變成一個被接受的答案。
|
|
35
|
+
|
|
36
|
+
ChatGPT Pro 訂閱方案與「選定的 Pro 模型」是兩回事。帳號或個人資料標籤上出現 `Pro`,只是訂閱方案的證據,永遠不算模型證據;只有回應的模型 slug 才算。每一輪實機回合都會保存 `controller_response_received`,帶著 `selected_model_label`、`response_model_slug` 與 `model_evidence_source`,因此「是哪一種證據證明了模型」事後仍可稽核。
|
|
37
|
+
|
|
30
38
|
## 五分鐘上手
|
|
31
39
|
|
|
32
40
|
你需要 Node.js 22 以上、帶內建瀏覽器的 Codex,以及——若要用內建的預設通道——`PATH` 上有 `codex` CLI。
|
|
33
41
|
|
|
42
|
+
從 npm registry 安裝:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
npm install -g cueline@0.1.1
|
|
46
|
+
cueline install
|
|
47
|
+
cueline doctor
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
作為備援,也可以安裝 [v0.1.1 release](https://github.com/Seraphim0916/cueline/releases/tag/v0.1.1) 上的打包 tarball,該 release 同時附上它的 `.sha256` 校驗碼:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
npm install -g https://github.com/Seraphim0916/cueline/releases/download/v0.1.1/cueline-0.1.1.tgz
|
|
54
|
+
cueline install
|
|
55
|
+
cueline doctor
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
`cueline install` 只建立一個符號連結:把內建的 skill 接到 `$CODEX_HOME/skills/cueline`(預設 `~/.codex/skills/cueline`)。它拒絕覆寫不屬於自己的路徑,重複執行也不會有副作用。`cueline uninstall` 只移除那一個連結;若該位置換成了別人的檔案,它會保留而不刪除。
|
|
59
|
+
|
|
60
|
+
### 從原始碼安裝
|
|
61
|
+
|
|
34
62
|
```bash
|
|
35
63
|
git clone https://github.com/Seraphim0916/cueline.git
|
|
36
64
|
cd cueline
|
|
@@ -45,8 +73,8 @@ cueline doctor
|
|
|
45
73
|
接著,在 Codex 裡:
|
|
46
74
|
|
|
47
75
|
1. 用 Codex 的內建瀏覽器開啟 `https://chatgpt.com` 並登入。
|
|
48
|
-
2.
|
|
49
|
-
3. 請 Codex 用 CueLine 處理這件事:*「用 CueLine
|
|
76
|
+
2. 讓你要當主控的那個對話保持選取狀態——該頁面就是主控端。它的輸入框必須停在 `Pro` 模型;若不是,CueLine 會替你選成 `Pro`,否則就拒絕送出。
|
|
77
|
+
3. 請 Codex 用 CueLine 處理這件事:*「用 CueLine,讓那個開著的 ChatGPT Pro 對話來指揮這項任務。」*
|
|
50
78
|
4. 留著回傳的 `runId`。中斷的執行要續跑,就靠它。
|
|
51
79
|
|
|
52
80
|
內建的 `cueline` skill 是從 Codex 自己的 Node runtime 驅動這個套件的——內建瀏覽器的物件就活在那裡。另外開一個單獨的 `node` 行程並不會繼承它。
|
|
@@ -67,21 +95,29 @@ if (result.status === "complete") {
|
|
|
67
95
|
}
|
|
68
96
|
```
|
|
69
97
|
|
|
98
|
+
在 Codex 的 runtime 裡,import `cueline api path` 印出的那個絕對路徑模組——那就是你安裝的那份套件建置出來的 API。
|
|
99
|
+
|
|
70
100
|
`startCueLineRun` 是明確的啟動入口(`runCueLine` 是它的別名)。`continueCueLineRun({ runId })` 會在同一個對話裡續跑被中斷的執行,並沿用已保存的對話網址,除非你另外傳入新的 adapter。`loadCueLineRunState(runId)` 只讀取已保存的狀態,不驅動任何東西。已經走到 `complete` 或 `blocked` 的執行會原樣回傳,絕不會被再派工一次。
|
|
71
101
|
|
|
72
102
|
## CLI
|
|
73
103
|
|
|
74
|
-
CLI
|
|
104
|
+
CLI 不驅動瀏覽器。它負責管理 skill 連結,並告訴你本機這一半健不健康。
|
|
75
105
|
|
|
76
106
|
```console
|
|
107
|
+
$ cueline install
|
|
108
|
+
CueLine skill installed: /Users/you/.codex/skills/cueline
|
|
109
|
+
|
|
77
110
|
$ cueline doctor
|
|
78
|
-
CueLine 0.1.
|
|
111
|
+
CueLine 0.1.1
|
|
79
112
|
status ok
|
|
80
113
|
node 22.14.0 ok
|
|
81
|
-
config /
|
|
114
|
+
config /usr/local/lib/node_modules/cueline/config/routing.default.json valid
|
|
82
115
|
home /Users/you/.cueline
|
|
83
116
|
available_lanes 1
|
|
84
117
|
|
|
118
|
+
$ cueline api path
|
|
119
|
+
/usr/local/lib/node_modules/cueline/dist/src/api.js
|
|
120
|
+
|
|
85
121
|
$ cueline routing
|
|
86
122
|
default codex-default available
|
|
87
123
|
|
|
@@ -89,10 +125,13 @@ $ cueline jobs
|
|
|
89
125
|
No jobs.
|
|
90
126
|
|
|
91
127
|
$ cueline config path
|
|
92
|
-
/
|
|
128
|
+
/usr/local/lib/node_modules/cueline/config/routing.default.json
|
|
129
|
+
|
|
130
|
+
$ cueline uninstall
|
|
131
|
+
CueLine skill removed: /Users/you/.codex/skills/cueline
|
|
93
132
|
```
|
|
94
133
|
|
|
95
|
-
Node 版本太舊、或沒有任何通道解析得出來時,`cueline doctor` 會以非零狀態結束,因此可以直接拿來當前置檢查。`cueline routing` 會告訴你某個通道為什麼不可用,而不是安靜地改選別的。`cueline help` 會列出全部。
|
|
134
|
+
Node 版本太舊、或沒有任何通道解析得出來時,`cueline doctor` 會以非零狀態結束,因此可以直接拿來當前置檢查。`cueline routing` 會告訴你某個通道為什麼不可用,而不是安靜地改選別的。`cueline api path` 印出的就是 skill 會 import 的模組,所以用打包安裝時完全不需要 clone 原始碼。`cueline help` 會列出全部。
|
|
96
135
|
|
|
97
136
|
## 設定
|
|
98
137
|
|
|
@@ -110,6 +149,8 @@ jobs/<job-id>.json 每個工作的執行證據
|
|
|
110
149
|
|
|
111
150
|
事件日誌才是紀錄本身:主控端的這一輪在送出之前就先寫下、工作在行程啟動之前就先註冊,所以「意圖」與「副作用」之間若被中斷,會留下痕跡。壞掉的快照會被忽略、從第 1 號事件重建,而不是硬信它。
|
|
112
151
|
|
|
152
|
+
續跑只會重新接回該次執行記錄下來的那個對話網址,絕不接到長得像的分頁。若某個分頁在「送出狀態未明」的當下消失,CueLine 會丟出 `TAB_RECOVERY_UNSAFE` 並停下。它絕不自行重送提示,因為它無法證明第一次到底送出去了沒有。
|
|
153
|
+
|
|
113
154
|
## 驗證
|
|
114
155
|
|
|
115
156
|
```bash
|
|
@@ -125,7 +166,7 @@ npm pack --dry-run
|
|
|
125
166
|
|
|
126
167
|
## 0.1 的限制
|
|
127
168
|
|
|
128
|
-
|
|
169
|
+
只支援純文字。一次執行只對應一個對話。選成 `Pro` 是 CueLine 唯一會做的模型切換;不支援圖片、不支援檔案上傳,也不支援 Deep Research、Projects 或 Apps。工作行程一旦啟動就沒有自動重試或改道——失敗的 `work` 工作會被標記為副作用不明確後回報,因為 CueLine 無法證明它做到哪裡。macOS 是主要的桌面目標、Linux 是 CI 目標;Windows 未經驗證,而且 `install.sh` 不是 Windows 安裝程式。adapter 依賴 ChatGPT 網頁目前的介面,所以介面一改,會以明確的 `COMPOSER_MISSING`、`SEND_BUTTON_MISSING` 或回應逾時浮現——絕不會變成捏造的答案。
|
|
129
170
|
|
|
130
171
|
完整矩陣見 [compatibility](docs/compatibility.md)。
|
|
131
172
|
|
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;
|