cueline 0.1.7 → 0.2.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/CHANGELOG.md +56 -0
- package/README.ja.md +77 -43
- package/README.ko.md +77 -43
- package/README.md +52 -70
- package/README.zh-CN.md +77 -43
- package/README.zh-TW.md +67 -41
- package/dist/src/api-contracts.d.ts +9 -0
- package/dist/src/api-controller-handoff.d.ts +5 -1
- package/dist/src/api-controller-handoff.js +148 -0
- package/dist/src/api-controller-handoff.js.map +1 -1
- package/dist/src/api.d.ts +9 -1
- package/dist/src/api.js +15 -2
- package/dist/src/api.js.map +1 -1
- package/dist/src/browser/browser-adapter.d.ts +26 -0
- package/dist/src/browser/codex-iab/bootstrap.d.ts +1 -0
- package/dist/src/browser/codex-iab/bootstrap.js +1 -0
- package/dist/src/browser/codex-iab/bootstrap.js.map +1 -1
- package/dist/src/browser/codex-iab/chatgpt-client.js +113 -21
- package/dist/src/browser/codex-iab/chatgpt-client.js.map +1 -1
- package/dist/src/cli/health-commands.js +74 -0
- package/dist/src/cli/health-commands.js.map +1 -1
- package/dist/src/cli/main.js +31 -10
- package/dist/src/cli/main.js.map +1 -1
- package/dist/src/cli/observation-commands.js +112 -1
- package/dist/src/cli/observation-commands.js.map +1 -1
- package/dist/src/cli/run-status-view.d.ts +8 -0
- package/dist/src/cli/run-status-view.js +9 -0
- package/dist/src/cli/run-status-view.js.map +1 -1
- package/dist/src/core/controller-evidence.d.ts +9 -0
- package/dist/src/core/controller-evidence.js +21 -0
- package/dist/src/core/controller-evidence.js.map +1 -0
- package/dist/src/core/controller-loop.d.ts +2 -1
- package/dist/src/core/controller-loop.js +83 -10
- package/dist/src/core/controller-loop.js.map +1 -1
- package/dist/src/core/controller-turn.d.ts +9 -1
- package/dist/src/core/controller-turn.js +98 -4
- package/dist/src/core/controller-turn.js.map +1 -1
- package/dist/src/core/controller-types.d.ts +2 -0
- package/dist/src/core/run-status.d.ts +9 -1
- package/dist/src/core/run-status.js +26 -0
- package/dist/src/core/run-status.js.map +1 -1
- package/dist/src/core/state-machine.d.ts +19 -1
- package/dist/src/core/state-machine.js +132 -1
- package/dist/src/core/state-machine.js.map +1 -1
- package/dist/src/observation/run-diff.d.ts +39 -0
- package/dist/src/observation/run-diff.js +67 -0
- package/dist/src/observation/run-diff.js.map +1 -0
- package/dist/src/observation/run-graph.d.ts +17 -0
- package/dist/src/observation/run-graph.js +77 -0
- package/dist/src/observation/run-graph.js.map +1 -0
- package/dist/src/observation/run-status-at.d.ts +41 -0
- package/dist/src/observation/run-status-at.js +65 -0
- package/dist/src/observation/run-status-at.js.map +1 -0
- package/dist/src/observation/run-timeline.js +2 -1
- package/dist/src/observation/run-timeline.js.map +1 -1
- package/dist/src/protocol/types.d.ts +4 -0
- package/dist/src/router/explain.d.ts +28 -0
- package/dist/src/router/explain.js +86 -0
- package/dist/src/router/explain.js.map +1 -0
- package/dist/src/router/resolver.d.ts +2 -1
- package/dist/src/router/resolver.js +3 -3
- package/dist/src/router/resolver.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/docs/assets/README.md +3 -1
- package/docs/assets/cueline-architecture-en.svg +63 -0
- package/docs/assets/cueline-architecture-ja.svg +63 -0
- package/docs/assets/cueline-architecture-ko.svg +63 -0
- package/docs/assets/cueline-architecture-zh-CN.svg +63 -0
- package/docs/assets/cueline-architecture-zh-TW.svg +63 -0
- package/docs/assets/cueline-states-en.svg +50 -0
- package/docs/assets/cueline-states-ja.svg +48 -0
- package/docs/assets/cueline-states-ko.svg +48 -0
- package/docs/assets/cueline-states-zh-CN.svg +48 -0
- package/docs/assets/cueline-states-zh-TW.svg +48 -0
- package/docs/controller-protocol.md +6 -0
- package/docs/multi-model-routing.md +256 -0
- package/docs/runner-contract.md +3 -0
- package/docs/state-and-recovery.md +30 -0
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cueline",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "Use a ChatGPT web conversation as the text controller for durable local advice or explicitly claimed work executed by the current Codex.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "CueLine contributors"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cueline",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "Use a ChatGPT web conversation as the text controller for durable local advice or explicitly claimed work executed by the current Codex.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "CueLine contributors"
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,61 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.2.1 - 2026-07-17
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
|
|
7
|
+
- Treat a manually confirmed retry request as authoritative for its newly
|
|
8
|
+
observed user message. The abandoned-message late-arrival guard still freezes
|
|
9
|
+
unconfirmed retries, but no longer misclassifies the operator-confirmed retry
|
|
10
|
+
itself as the abandoned request appearing late.
|
|
11
|
+
- Accept an already-completed manually confirmed Pro response when its exact
|
|
12
|
+
protocol, run, round, and request envelope matches even if the recorded
|
|
13
|
+
assistant-message baseline already includes that fast response. Non-exact
|
|
14
|
+
responses remain behind the assistant-count freshness gate.
|
|
15
|
+
- Add a durable, configurable per-job controller-evidence cap. Full runner
|
|
16
|
+
status remains local, while controller observations receive a deterministic
|
|
17
|
+
capped representation with an explicit marker and the true source length;
|
|
18
|
+
hashes and inspect offsets remain fenced to that representation.
|
|
19
|
+
- Warn when total unserved evidence exceeds the remaining-round delivery
|
|
20
|
+
capacity, and tell the controller it may decide from sufficient evidence or
|
|
21
|
+
request focused summarization instead of paging every omitted tail.
|
|
22
|
+
|
|
23
|
+
### Verification
|
|
24
|
+
|
|
25
|
+
- Verified 488/488 tests, TypeScript typecheck, plugin validation, and diff
|
|
26
|
+
whitespace checks.
|
|
27
|
+
- Verified the public API with the real process runner: two 75,762-character
|
|
28
|
+
advise outputs were each projected through a 4,000-character cap, retained
|
|
29
|
+
their true totals, emitted the remaining-capacity warning, completed, and
|
|
30
|
+
produced a verified run.
|
|
31
|
+
- Verified the real built-in Browser recovery path on the original CueLine run:
|
|
32
|
+
round 3 request `msg_f40d51990236834c1add1c5b6e7c5580` and round 4 request
|
|
33
|
+
`msg_d859cbe692ae7c70b5b9dc402ca6de49` were each accepted exactly once,
|
|
34
|
+
with no duplicate resend, job, or event.
|
|
35
|
+
|
|
36
|
+
## 0.2.0 - 2026-07-16
|
|
37
|
+
|
|
38
|
+
### Added
|
|
39
|
+
|
|
40
|
+
- Add `cueline run status-at <run-id> --sequence <n>` to reconstruct a
|
|
41
|
+
sanitized, event-derived historical run state without mutating durable data.
|
|
42
|
+
- Add `cueline run diff <left-run-id> <right-run-id>` to compare safe run
|
|
43
|
+
projections without exposing prompts, tasks, outputs, or conversation data.
|
|
44
|
+
- Add `cueline run graph <run-id>` to render a bounded Mermaid control-flow
|
|
45
|
+
graph from sanitized timeline entries and exact safe correlations.
|
|
46
|
+
- Add `cueline routing explain [lane]` to report pre-spawn runner selection,
|
|
47
|
+
availability, fallback, and rejection reasons without exposing runner argv.
|
|
48
|
+
|
|
49
|
+
### Fixed
|
|
50
|
+
|
|
51
|
+
- Add append-only recovery for an operator-confirmed unsent ambiguous controller request. `cueline run reconcile ... --not-sent-confirmed` validates the exact run, conversation, round, request, prompt hash, and Pro evidence; abandons the old identity; permits one same-prompt retry under a new deterministic request ID; and remains idempotent across command repetition or restart.
|
|
52
|
+
- Strengthen browser submission checkpoints with run/round/request/prompt identity, a user-message baseline, composer and click-attempt state, a bounded click error, and post-click DOM evidence. Late discovery of the abandoned message or response, prompt drift, extra pending turns, or identity/model/conversation mismatch now freezes the run for manual review instead of risking duplicate controller dispatch.
|
|
53
|
+
|
|
54
|
+
### Verification
|
|
55
|
+
|
|
56
|
+
- Verified 479/479 tests, TypeScript typecheck, plugin validation, build, and package-content checks.
|
|
57
|
+
- Verified the real built CLI for `run status-at`, `run diff`, `run graph`, and `routing explain`; confirmed `run reconcile` usage still exposes both `--manual-send-confirmed` and `--not-sent-confirmed`.
|
|
58
|
+
|
|
3
59
|
## 0.1.7 - 2026-07-16
|
|
4
60
|
|
|
5
61
|
### Added
|
package/README.ja.md
CHANGED
|
@@ -5,6 +5,9 @@
|
|
|
5
5
|
|
|
6
6
|
<p align="center">
|
|
7
7
|
<a href="https://github.com/Seraphim0916/cueline/actions/workflows/ci.yml"><img alt="ci" src="https://github.com/Seraphim0916/cueline/actions/workflows/ci.yml/badge.svg"></a>
|
|
8
|
+
<a href="https://www.npmjs.com/package/cueline"><img alt="npm" src="https://img.shields.io/npm/v/cueline"></a>
|
|
9
|
+
<a href="package.json"><img alt="node" src="https://img.shields.io/node/v/cueline"></a>
|
|
10
|
+
<a href="LICENSE"><img alt="license" src="https://img.shields.io/npm/l/cueline"></a>
|
|
8
11
|
</p>
|
|
9
12
|
|
|
10
13
|
<p align="center">
|
|
@@ -13,18 +16,21 @@
|
|
|
13
16
|
|
|
14
17
|
**CueLine は、開いている ChatGPT のウェブ会話に判断を任せます。会話側はテキストコマンドを出し、CueLine が検証し、現在の Codex が許可されたローカル作業を実行します。**
|
|
15
18
|
|
|
16
|
-
|
|
19
|
+
ウェブページはあなたのマシンに触れず、ローカルツールもありません。1 ラウンドに出すのはテキストコマンド 1 つだけです。既定の `caller` 実行では、`advise` は協調用の引き渡し、`work` は永続 claim と start が必要です。登録済みワーカーを起動する process executor には二重の明示的承認が必要です。
|
|
17
20
|
|
|
18
|
-
CueLine
|
|
21
|
+
<img alt="CueLine のアーキテクチャ:ChatGPT ウェブ会話が 1 ラウンドに 1 つのテキストコマンドを出し、CueLine が検証・記録し、現在の Codex が許可されたローカル作業を実行する。" src="docs/assets/cueline-architecture-ja.svg" width="100%">
|
|
19
22
|
|
|
20
|
-
|
|
23
|
+
CueLine は独立した実装で、**ランタイムの npm 依存はゼロ**です。Omnilane のラッパーではありません。
|
|
21
24
|
|
|
25
|
+
## 最新リリース:0.2.0
|
|
26
|
+
|
|
27
|
+
- 4 つの読み取り専用オブザーバビリティコマンドを追加し、「未送信確認」による送信復旧を強化しました。出力は fail-closed で秘匿化され、ルーティング説明はプロセス起動前だけを対象にします。
|
|
22
28
|
- 安全な run 一覧、doctor、watch、timeline、handoff、整合性検証、protocol lint、ブラウザー診断、inspect 証拠ページングを追加しました。
|
|
23
29
|
- タブ/ボタン証拠、コマンドとルーティング上限、原子的な job 状態、非公開の永続データ、workdir ID、runtime/cancel 記録、CLI の秘匿化を強化しました。
|
|
24
30
|
- 永続 `complete` 後に正確な会話だけをアーカイブする opt-in 機能を追加しました。クリック前 fence、Pro 再開/遷移チェック、曖昧後の再クリック禁止を備えます。
|
|
25
|
-
-
|
|
31
|
+
- 479/479 テストと使い捨ての実 ChatGPT Web Pro run を検証し、自然完了後に一度だけアーカイブし、既存のユーザー会話には触れませんでした。
|
|
26
32
|
|
|
27
|
-
詳細は [changelog](CHANGELOG.md#
|
|
33
|
+
詳細は [changelog](CHANGELOG.md#020---2026-07-16) またはバージョン指定の [v0.2.0 release](https://github.com/Seraphim0916/cueline/releases/tag/v0.2.0) を参照してください。
|
|
28
34
|
|
|
29
35
|
## 1 回の実行は実際にどう進むか
|
|
30
36
|
|
|
@@ -32,6 +38,8 @@ CueLine は独立した実装で、**ランタイムの npm 依存はゼロ**で
|
|
|
32
38
|
|
|
33
39
|
各ラウンドで CueLine は観測を送り、後で `<CueLineControl>` エンベロープを**ちょうど 1 つだけ**読み戻します。コントローラーは `dispatch`、`wait`、`inspect`、`complete`、`blocked` のいずれかを選びます。ループは 1 回の永続的な送信後に `awaiting_controller` で一時停止し、caller への引き渡し、`complete`、`blocked`、またはラウンド上限(既定 12 回)でも停止します。
|
|
34
40
|
|
|
41
|
+
コントローラーコマンドには fail-closed なリソース上限もあります:エンベロープあたり 131,072 文字、dispatch あたり最大 64 ジョブ、wait / inspect あたり最大 256 個の明示 job ID。これらの検査はジョブ登録やプロセス起動の前に行われます。
|
|
42
|
+
|
|
35
43
|
既定値以外の `maxRounds` は run 作成時に固定され、owner 不在の一時停止をまたいでコントローラーの総ラウンド数を数えます。後の続行では通常省略して永続値を再利用し、異なる値を渡すと予算を暗黙にリセットまたは拡張せず拒否します。
|
|
36
44
|
|
|
37
45
|
`startCueLineRun` と `runCueLine` の既定は `caller` です。送信後は `awaiting_controller` を返して lease を解放し、続行は 1 回の読み取り専用観測だけを行い、再送しません。`advise` は `awaiting_caller`、`work` は `awaiting_caller_work` を返します。work は現在の Codex が `claimCueLineCallerJob` と `startCueLineCallerJob` を成功させるまで開始されません。claim は run、job、task hash、絶対 workdir、caller identity、fencing token に結び付けられ、開始済み work は自動再試行されず、期限切れなら `ambiguous` になります。Pro はテキスト命令を提案・審査するだけで、ローカルツールは使いません。
|
|
@@ -42,6 +50,12 @@ Process モードは `executor: "process"` と `allowProcessExecution: true` の
|
|
|
42
50
|
|
|
43
51
|
これは許可リスト(allow-list)であって、サンドボックスではありません。登録されたワーカーは CueLine プロセス自身と同じ権限で動きます。`advise` は Codex の読み取り専用サンドボックスに、`work` は `workspace-write` に対応しますが、登録したものが、そのまま許可したものになります。
|
|
44
52
|
|
|
53
|
+
## run の状態
|
|
54
|
+
|
|
55
|
+
<img alt="CueLine の run 状態:ready、awaiting_controller、awaiting_caller、awaiting_caller_work、complete、blocked、cancelled と、それぞれの意味。" src="docs/assets/cueline-states-ja.svg" width="100%">
|
|
56
|
+
|
|
57
|
+
`cueline run status <run-id> --json` は永続状態と `safeNextAction` を報告し、`cueline run doctor <run-id> --json` は同じスナップショットを安定した finding コードと安全な次の一手に変換します。曖昧なもの——送信されたかもしれないクリック、期限切れの開始済み claim、手動の添付送信——に対して、CueLine は再送せず停止し、明示的な reconcile を求めます。復旧の完全な契約は [state and recovery](docs/state-and-recovery.md) を参照してください。
|
|
58
|
+
|
|
45
59
|
## コントローラーは Pro モデルでなければならない
|
|
46
60
|
|
|
47
61
|
コンポーザーのモデルセレクターが `Pro` を示していないかぎり、CueLine は送信を拒否します。会話が別のモデルにある場合、CueLine はまずコンポーザーを `Pro` に切り替えます——それが唯一許されたモデル切り替えです。検証済みのライブ実行では、Instant を Pro に切り替え、応答は `gpt-5-6-pro` として返りました。
|
|
@@ -57,15 +71,15 @@ ChatGPT Pro のサブスクリプションと、選択された Pro モデルは
|
|
|
57
71
|
npm レジストリからインストールします。
|
|
58
72
|
|
|
59
73
|
```bash
|
|
60
|
-
npm install -g cueline@0.
|
|
74
|
+
npm install -g cueline@0.2.0
|
|
61
75
|
cueline install
|
|
62
76
|
cueline doctor
|
|
63
77
|
```
|
|
64
78
|
|
|
65
|
-
フォールバックとして、[v0.
|
|
79
|
+
フォールバックとして、[v0.2.0 リリース](https://github.com/Seraphim0916/cueline/releases/tag/v0.2.0) のパッケージ済み tarball をインストールすることもできます。同じリリースに `.sha256` チェックサムも置いてあります。
|
|
66
80
|
|
|
67
81
|
```bash
|
|
68
|
-
npm install -g https://github.com/Seraphim0916/cueline/releases/download/v0.
|
|
82
|
+
npm install -g https://github.com/Seraphim0916/cueline/releases/download/v0.2.0/cueline-0.2.0.tgz
|
|
69
83
|
cueline install
|
|
70
84
|
cueline doctor
|
|
71
85
|
```
|
|
@@ -88,7 +102,7 @@ cueline doctor
|
|
|
88
102
|
次に、Codex で:
|
|
89
103
|
|
|
90
104
|
1. Codex の組み込みブラウザーで `https://chatgpt.com` を開き、サインインします。
|
|
91
|
-
2.
|
|
105
|
+
2. 主導させたい会話を選択したままにします。そのページがコントローラーです。選択中のタブがなく、一致する ChatGPT タブが複数ある場合、CueLine は先頭を勝手に選ばず `IAB_CHATGPT_TAB_AMBIGUOUS` を返します。そのコンポーザーは `Pro` モデルでなければなりません。そうでない場合、CueLine が `Pro` を選び、選べなければ送信を拒否します。
|
|
92
106
|
3. Codex にこう頼みます:*「CueLine を使って、開いている ChatGPT Pro の会話にこのタスクを指揮させて。」*
|
|
93
107
|
4. 返ってきた `runId` を控えておきます。中断した実行を再開する手がかりになります。
|
|
94
108
|
|
|
@@ -146,22 +160,33 @@ if (result.status === "complete") {
|
|
|
146
160
|
}
|
|
147
161
|
```
|
|
148
162
|
|
|
163
|
+
`archiveControllerConversationOnComplete` の既定は `false` で、run 作成時に固定されます。有効にすると、CueLine はまず `complete` を永続化し、その後 Pro がアイドルのあいだに、正確に結び付けられた会話だけをアーカイブします。永続クリックのチェックポイント前に証明された失敗は再試行できますが、その後のタイムアウト、再起動、遷移レース、証拠欠落はすべて `ambiguous` となり、CueLine が Archive を再クリックすることは二度とありません。`blocked` と `cancelled` の run は開いたまま残します。
|
|
164
|
+
|
|
149
165
|
`awaiting_controller` は再送なしの読み取り専用観測、`awaiting_caller` は advise の引き渡し、`awaiting_caller_work` は claim、start、実行、heartbeat、claim proof 付き提出の順です。Pro はローカルツールを直接使いません。
|
|
150
166
|
|
|
167
|
+
`listCueLineRuns()` は永続化された run ID を見つけるための、読み取り専用でサニタイズ済みの一覧です。コントローラー本文、会話 URL、job のタスク、worker 出力は含まれません。
|
|
168
|
+
|
|
169
|
+
`verifyCueLineRun(runId)` は作成 marker、イベント replay と authority fence、任意の snapshot、runtime lease、job status 証拠を対象とする読み取り専用の整合性検査です。永続 run の内容は返さず、安定した finding だけを返します。
|
|
170
|
+
|
|
171
|
+
`confirmManualControllerSubmission(runId, …)` と `confirmControllerTurnNotSent(runId, …)` は、2 種類の reconcile 確認のプログラム用インターフェースです。どちらも追記のみで冪等であり、ブラウザーを駆動することも、何かを再送することもありません。
|
|
172
|
+
|
|
151
173
|
Codex のランタイムでは、`cueline api path` が出力する絶対パスのモジュールを import します。それがインストールしたパッケージのビルド済み API です。
|
|
152
174
|
|
|
153
175
|
`startCueLineRun` は永続 run を作成して `ready` を返すだけです。`runCueLine` は作成後、永続 controller 観測待ち、caller 引き渡し、または終端まで進めます。owner 不在の `controller_response_pending` で通常送信済みターンが一つだけあり、`safeNextAction: observe` が示される場合、同じ Pro 応答を読み取り専用で観測する待機です。少し待って続行し、再送しません。`safeNextAction: reconcile` は曖昧、手動送信、または複数の保留ターンに使います。owner 不在の `caller_jobs_pending` は正常なローカル引き渡しであり、orphan や ChatGPT 待ちではありません。CLI の `run status` は引き渡しに必要な metadata だけを出力し、task 本文、caller identity、task hash、workdir、runtime owner ID を含めません。正式な claim 後にだけ、API が正確な task と workdir を認可された caller に返します。
|
|
154
176
|
|
|
155
177
|
## CLI
|
|
156
178
|
|
|
157
|
-
CLI
|
|
179
|
+
CLI はブラウザーを駆動しません。状態を書き込むコマンドの前に `cueline help` で完全な引数を確認してください。
|
|
158
180
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
181
|
+
| グループ | コマンド | 効果 |
|
|
182
|
+
| --- | --- | --- |
|
|
183
|
+
| 参照 | `doctor` · `routing` · `routing explain` · `jobs` · `runs` · `run status` · `run status-at` · `run diff` · `run doctor` · `run watch` · `run timeline` · `run graph` · `run verify` · `run handoff` · `protocol lint` · `api path` · `config path` | 読み取り専用 |
|
|
184
|
+
| インストール | `install` · `uninstall` | パッケージ所有のスキルリンクだけを作成・削除 |
|
|
185
|
+
| 復旧 | `run reconcile` · `run takeover` · `run reconcile-runtime` · `run cancel` / `run stop` · `job cancel` | 監査証拠の追記、または永続 run/job 状態の変更 |
|
|
162
186
|
|
|
187
|
+
```console
|
|
163
188
|
$ cueline doctor
|
|
164
|
-
CueLine 0.
|
|
189
|
+
CueLine 0.2.0
|
|
165
190
|
status ok
|
|
166
191
|
node 22.14.0 ok
|
|
167
192
|
config /usr/local/lib/node_modules/cueline/config/routing.default.json valid
|
|
@@ -170,52 +195,45 @@ caller_ready yes
|
|
|
170
195
|
caller_lanes 1
|
|
171
196
|
process_available_lanes 1
|
|
172
197
|
|
|
173
|
-
$ cueline doctor --json
|
|
174
|
-
{"version":"0.1.7","status":"ok","node":{"version":"22.14.0","ok":true,"requirement":">=22"},...}
|
|
175
|
-
|
|
176
|
-
$ cueline api path
|
|
177
|
-
/usr/local/lib/node_modules/cueline/dist/src/api.js
|
|
178
|
-
|
|
179
198
|
$ cueline routing
|
|
180
199
|
default codex-default available
|
|
181
200
|
|
|
182
|
-
$ cueline routing --json
|
|
183
|
-
{"version":"0.1.7","availableLanes":1,"lanes":[{"name":"default","status":"available","selectedRunnerId":"codex-default"}],...}
|
|
184
|
-
|
|
185
|
-
$ cueline jobs
|
|
186
|
-
No jobs.
|
|
187
|
-
|
|
188
|
-
$ cueline runs
|
|
189
|
-
No runs.
|
|
190
|
-
|
|
191
201
|
$ cueline run status run_... --json
|
|
192
202
|
{"status":"running","executor":"caller","phase":"caller_jobs_pending","runtime":{"ownership":"missing"},...}
|
|
193
203
|
|
|
194
|
-
$ cueline run
|
|
195
|
-
{"
|
|
204
|
+
$ cueline run doctor run_... --json
|
|
205
|
+
{"outcome":"action_required","phase":"caller_jobs_pending","nextAction":"execute_caller_jobs",...}
|
|
196
206
|
|
|
197
|
-
$ cueline run
|
|
198
|
-
|
|
207
|
+
$ cueline run reconcile run_... --request-id msg_... --manual-send-confirmed --conversation-url https://chatgpt.com/c/...
|
|
208
|
+
run_...\tmsg_...\tconfirmed
|
|
199
209
|
|
|
200
210
|
$ cueline run cancel run_...
|
|
201
211
|
run_... requested affected_jobs=0
|
|
202
|
-
|
|
203
|
-
$ cueline config path
|
|
204
|
-
/usr/local/lib/node_modules/cueline/config/routing.default.json
|
|
205
|
-
|
|
206
|
-
$ cueline uninstall
|
|
207
|
-
CueLine skill removed: /Users/you/.codex/skills/cueline
|
|
208
212
|
```
|
|
209
213
|
|
|
210
214
|
Node が古すぎる場合、または有効な caller レーンが一つもない場合、`cueline doctor` は非ゼロで終了します。`process_available_lanes` が 0 でも caller モードは劣化しません。process executor を明示的に選ぶ前だけ `cueline routing` で process の可用性を確認してください。`cueline api path` が出すのはスキルが import するモジュールなので、パッケージ導入ならリポジトリの取得は不要です。`cueline help` は `--json` と手動 reconcile の必須確認フラグを含む各コマンドの正確な構文を一覧します。
|
|
211
215
|
|
|
216
|
+
0.2.0 で追加された 4 つの可観測性コマンドは、すべて厳密に読み取り専用です。`run status-at` は単一の正確なイベント連番の時点にサニタイズ済み run 状態を再構築します——「その瞬間に CueLine が知っていたこと」です。`run diff` は 2 つのサニタイズ済み run サマリーをフィールド単位で比較し、生のプロンプトや出力は決して含めません。`run graph` はサニタイズ済み timeline エントリから有界の Mermaid 制御フロー図を描画します。`routing explain` はプロセス起動前に、レーン選択・可用性・却下理由を runner の引数を漏らさずに説明します([multi-model routing](docs/multi-model-routing.md) を参照)。
|
|
217
|
+
|
|
218
|
+
実験的な診断コマンドには、それぞれ専用のドキュメントがあります:
|
|
219
|
+
|
|
220
|
+
| コマンド | 役割 | ドキュメント |
|
|
221
|
+
| --- | --- | --- |
|
|
222
|
+
| `run doctor` | run スナップショットを安定した finding コード、有界な証拠、安全な次の一手に変換(状態は書き込まない) | [run-doctor](docs/experiments/run-doctor.md) |
|
|
223
|
+
| `run watch` | 永続イベント連番をカーソルにした、有界で lease を取らない観測 | [run-watch](docs/experiments/run-watch.md) |
|
|
224
|
+
| `protocol lint` | Pro エンベロープをオフラインで検証し、既知の契約修正を一括報告 | [protocol-lint](docs/experiments/protocol-lint.md) |
|
|
225
|
+
| `run handoff` | 正確な identity と絶対パスを備えた安全な再開パケットを生成 | [run-handoff](docs/experiments/run-handoff.md) |
|
|
226
|
+
| `run timeline` | 生イベントを含まない、サニタイズ済みカーソルページングの監査ビュー | [run-timeline](docs/experiments/run-timeline.md) |
|
|
227
|
+
|
|
212
228
|
`run takeover` は `run status` が exact stale owner を示す場合だけ使います。新しい active heartbeat は拒否されます。返された `next: continue` または `next: reconcile_runtime` に従い、推測で進めないでください。
|
|
213
229
|
|
|
214
230
|
## 設定
|
|
215
231
|
|
|
216
232
|
`CUELINE_CONFIG` はルーティング設定ファイルを選び、`CUELINE_HOME` はローカル状態の置き場所を移します(既定は `~/.cueline`)。
|
|
217
233
|
|
|
218
|
-
Caller はプロセスを起動しません。`executor: "process"` と `allowProcessExecution: true` を同時に指定した場合だけ、`default` レーンの `codex-default` が隔離された `codex exec --ignore-user-config` を実行します。独立した `advise` の既定同時実行数は全体/レーンごとに 2、`work`
|
|
234
|
+
Caller はプロセスを起動しません。`executor: "process"` と `allowProcessExecution: true` を同時に指定した場合だけ、`default` レーンの `codex-default` が隔離された `codex exec --ignore-user-config` を実行します。独立した `advise` の既定同時実行数は全体/レーンごとに 2、`work` を含むバッチは直列です。別の process worker を登録するには、[`config/routing.default.json`](config/routing.default.json) をコピーして候補を追加し、`CUELINE_CONFIG` をそこへ向けます。
|
|
235
|
+
|
|
236
|
+
モデル別の複数候補の登録方法と advise 専用ラッパーの例は、[multi-model routing](docs/multi-model-routing.md) を参照してください。
|
|
219
237
|
|
|
220
238
|
状態は `CUELINE_HOME` の下に置かれます:
|
|
221
239
|
|
|
@@ -231,7 +249,13 @@ jobs/<job-id>.json ジョブごとの実行証拠
|
|
|
231
249
|
|
|
232
250
|
記録そのものはイベントログです。コントローラーのターンは送信する前に書かれ、ジョブはプロセスが起動する前に登録されます。だからこそ、意図と副作用のあいだで中断が起きても痕跡が残ります。壊れたスナップショットは信用されず、無視されてイベント 1 番から再構築されます。
|
|
233
251
|
|
|
234
|
-
復帰は完全に同じ会話 URL にだけ接続します。ChatGPT が長文を添付に自動変換した場合は `attachment_ready` として認識し、送信クリックは最大 1 回です。曖昧なクリックは `possibly_sent`
|
|
252
|
+
復帰は完全に同じ会話 URL にだけ接続します。ChatGPT が長文を添付に自動変換した場合は `attachment_ready` として認識し、送信クリックは最大 1 回です。曖昧なクリックは `possibly_sent` となり再送しません。実際に見えて有効かつ操作可能な Stop コントロールがあるあいだだけ、応答は進行中とみなされます。隠れた残存ボタンが完了済みの Pro 応答を抑え込むことはありません。手動送信後は `cueline run reconcile RUN_ID --request-id REQUEST_ID --manual-send-confirmed` で正式に確認し、同一 conversation、Pro 証拠、protocol/run/round/request identity をすべて検証します。
|
|
253
|
+
|
|
254
|
+
逆方向の確認は「クリックが確実に届かなかった」場合のためのものです。操作者がその正確な会話を直接確認し、メッセージが存在しないことを確かめたうえで、`cueline run reconcile ... --not-sent-confirmed --conversation-url URL` を実行すると、旧 request identity を追記のみで放棄し、新しい決定的 request ID によるちょうど 1 回の同一プロンプト再試行を承認します。2 つのフラグは相互排他です。放棄したメッセージまたはその応答が後から現れた場合、CueLine は run を凍結して人手のレビューに回し、受理も再送も決して行いません。
|
|
255
|
+
|
|
256
|
+
Pro が回答しているあいだは、決して中断せず、`Answer now`、`Respond now`、`Stop` などの加速コントロールも使わないでください。Pro にはローカルツールがなく、リポジトリ構成やローカルパスの既定知識もありません。Caller の証拠には正確なコード/エラー識別子、関連コードの抜粋、絶対ローカルパスを含め、さらにローカル証拠が必要か Pro に明示的に尋ねてください。
|
|
257
|
+
|
|
258
|
+
コントローラー証拠は成功時の非空 stdout を優先し、全体 12,000 文字に制限します。完全な stdout/stderr はローカルに保持します。Pro が `inspect(job_ids)` を受理した場合、次のターンでは指定 job の証拠予算を先に確保してから無関係な証拠を扱います。
|
|
235
259
|
|
|
236
260
|
## 検証
|
|
237
261
|
|
|
@@ -248,13 +272,23 @@ npm pack --dry-run
|
|
|
248
272
|
|
|
249
273
|
## 0.1 の制限
|
|
250
274
|
|
|
251
|
-
|
|
275
|
+
テキストコマンドのみ。1 回の run につき会話は 1 つです。`Pro` の選択が CueLine が行う唯一のモデル切り替えです。長文の自動添付変換は対応しますが、意図的なファイルアップロード、画像、Deep Research、Projects、Apps は非対応です。Caller work は明示的な claim/start と、長時間作業では heartbeat が必要です。process 実行は二重承認が必要です。曖昧な送信や開始済みジョブを自動再試行しません。macOS が主要デスクトップターゲット、Linux が CI ターゲットで、Windows は未検証です。アダプターは現行の ChatGPT ウェブ UI に依存するため、UI 変更は捏造された回答ではなく明示的なエラーとして表面化します。
|
|
252
276
|
|
|
253
277
|
完全な対応表は [compatibility](docs/compatibility.md) を参照してください。
|
|
254
278
|
|
|
255
279
|
## ドキュメント
|
|
256
280
|
|
|
257
|
-
|
|
281
|
+
| ドキュメント | 内容 |
|
|
282
|
+
| --- | --- |
|
|
283
|
+
| [architecture](docs/architecture.md) | 各コンポーネントの構成と信頼境界の位置 |
|
|
284
|
+
| [controller protocol](docs/controller-protocol.md) | `<CueLineControl>` エンベロープ、5 つの動作、修正ルール |
|
|
285
|
+
| [runner contract](docs/runner-contract.md) | 登録済み process worker がすべきこと・してはならないこと |
|
|
286
|
+
| [state and recovery](docs/state-and-recovery.md) | 永続状態のレイアウト、ownership、すべての復旧経路 |
|
|
287
|
+
| [multi-model routing](docs/multi-model-routing.md) | 追加の process worker の登録方法と、コントローラーが実際に見えるもの |
|
|
288
|
+
| [compatibility](docs/compatibility.md) | 対応プラットフォーム、ランタイム、UI 前提 |
|
|
289
|
+
| [provenance](docs/provenance.md) | 設計の由来と、CueLine が何でないか |
|
|
290
|
+
|
|
291
|
+
(いずれも英語)
|
|
258
292
|
|
|
259
293
|
## 開発
|
|
260
294
|
|
package/README.ko.md
CHANGED
|
@@ -5,6 +5,9 @@
|
|
|
5
5
|
|
|
6
6
|
<p align="center">
|
|
7
7
|
<a href="https://github.com/Seraphim0916/cueline/actions/workflows/ci.yml"><img alt="ci" src="https://github.com/Seraphim0916/cueline/actions/workflows/ci.yml/badge.svg"></a>
|
|
8
|
+
<a href="https://www.npmjs.com/package/cueline"><img alt="npm" src="https://img.shields.io/npm/v/cueline"></a>
|
|
9
|
+
<a href="package.json"><img alt="node" src="https://img.shields.io/node/v/cueline"></a>
|
|
10
|
+
<a href="LICENSE"><img alt="license" src="https://img.shields.io/npm/l/cueline"></a>
|
|
8
11
|
</p>
|
|
9
12
|
|
|
10
13
|
<p align="center">
|
|
@@ -13,18 +16,21 @@
|
|
|
13
16
|
|
|
14
17
|
**CueLine은 열린 ChatGPT 웹 대화에 판단을 맡깁니다. 대화는 텍스트 명령을 내리고, CueLine이 검증하며, 현재 Codex가 허용된 로컬 작업을 수행합니다.**
|
|
15
18
|
|
|
16
|
-
웹
|
|
19
|
+
웹 페이지는 당신의 머신에 닿을 수 없고 로컬 도구도 없습니다. 라운드마다 텍스트 명령 하나만 내보냅니다. 기본 `caller` 실행에서 `advise`는 조정용 인계이며, `work`는 지속 claim과 start가 필요합니다. 등록된 워커를 띄우는 process executor는 이중 명시 승인이 필요합니다.
|
|
17
20
|
|
|
18
|
-
CueLine
|
|
21
|
+
<img alt="CueLine 아키텍처: ChatGPT 웹 대화가 라운드마다 텍스트 명령 하나를 내리고, CueLine이 검증·기록하며, 현재 Codex가 허용된 로컬 작업을 수행합니다." src="docs/assets/cueline-architecture-ko.svg" width="100%">
|
|
19
22
|
|
|
20
|
-
|
|
23
|
+
CueLine은 독립적인 구현이며 **런타임 npm 의존성이 전혀 없습니다**. Omnilane을 감싼 래퍼가 아닙니다.
|
|
21
24
|
|
|
25
|
+
## 최신 릴리스: 0.2.0
|
|
26
|
+
|
|
27
|
+
- 읽기 전용 관측 명령 4개를 추가하고 '전송되지 않음 확인' 제출 복구를 강화했습니다. 출력은 fail-closed 방식으로 비식별화되며 라우팅 설명은 프로세스 시작 전 상태만 다룹니다.
|
|
22
28
|
- 안전한 run 목록, doctor, watch, timeline, handoff, 무결성 검증, protocol lint, 브라우저 진단, inspect 증거 페이지 기능을 추가했습니다.
|
|
23
29
|
- 탭/버튼 증거, 명령과 라우팅 한도, 원자적 job 상태, 비공개 영속 데이터, workdir ID, runtime/cancel 레코드, CLI 비식별화를 강화했습니다.
|
|
24
30
|
- 영속 `complete` 뒤 정확한 대화만 보관하는 opt-in 기능을 추가했습니다. 클릭 전 fence, Pro 재개/탐색 검사, 모호해진 뒤 재클릭 금지를 적용합니다.
|
|
25
|
-
-
|
|
31
|
+
- 479/479 테스트와 일회용 실제 ChatGPT Web Pro run을 검증했으며, 자연 완료 뒤 한 번만 보관하고 기존 사용자 대화는 건드리지 않았습니다.
|
|
26
32
|
|
|
27
|
-
전체 내용은 [changelog](CHANGELOG.md#
|
|
33
|
+
전체 내용은 [changelog](CHANGELOG.md#020---2026-07-16) 또는 버전이 지정된 [v0.2.0 release](https://github.com/Seraphim0916/cueline/releases/tag/v0.2.0)에서 확인할 수 있습니다.
|
|
28
34
|
|
|
29
35
|
## 실행 한 번은 실제로 이렇게 흘러갑니다
|
|
30
36
|
|
|
@@ -32,6 +38,8 @@ CueLine은 독립적인 구현이며 **런타임 npm 의존성이 전혀 없습
|
|
|
32
38
|
|
|
33
39
|
매 라운드마다 CueLine은 관측 하나를 보내고 나중에 `<CueLineControl>` 엔벨로프를 **정확히 하나만** 읽습니다. 컨트롤러는 `dispatch`, `wait`, `inspect`, `complete`, `blocked` 중 하나를 고릅니다. 루프는 한 번의 영속적인 전송 뒤 `awaiting_controller`에서 일시 중지하며 caller 인계, `complete`, `blocked`, 또는 라운드 상한(기본 12회)에서도 멈춥니다.
|
|
34
40
|
|
|
41
|
+
컨트롤러 명령에는 fail-closed 자원 한도도 있습니다: 엔벨로프당 131,072자, dispatch당 최대 64개 작업, wait/inspect당 최대 256개의 명시적 job ID. 이 검사는 작업 등록이나 프로세스 시작 전에 수행됩니다.
|
|
42
|
+
|
|
35
43
|
기본값이 아닌 `maxRounds`는 run 생성 시 고정되며 owner가 없는 일시 중지를 가로질러 컨트롤러 총 라운드 수를 셉니다. 이후 계속하기에서는 보통 생략해 지속 값을 재사용하고, 다른 값을 전달하면 예산을 몰래 재설정하거나 늘리지 않고 거부합니다.
|
|
36
44
|
|
|
37
45
|
`startCueLineRun`과 `runCueLine`의 기본값은 `caller`입니다. 전송 뒤 `awaiting_controller`를 반환하고 lease를 해제하며, 계속하기는 재전송 없이 읽기 전용 관측 한 번만 수행합니다. `advise`는 `awaiting_caller`, `work`는 `awaiting_caller_work`를 반환합니다. work는 현재 Codex가 `claimCueLineCallerJob`과 `startCueLineCallerJob`을 성공시키기 전에는 시작되지 않습니다. claim은 run, job, task hash, 절대 workdir, caller identity, fencing token에 묶이며 시작된 work는 자동 재시도되지 않고 만료 시 `ambiguous`가 됩니다. Pro는 텍스트 명령을 제안하고 검토할 뿐 로컬 도구를 쓰지 않습니다.
|
|
@@ -42,6 +50,12 @@ Process 모드는 `executor: "process"`와 `allowProcessExecution: true`가 모
|
|
|
42
50
|
|
|
43
51
|
이것은 허용 목록(allow-list)이지 샌드박스가 아닙니다. 등록된 워커는 CueLine 프로세스 자신과 동일한 권한으로 실행됩니다. `advise`는 Codex의 읽기 전용 샌드박스에, `work`는 `workspace-write`에 대응하지만, 당신이 등록한 것이 곧 당신이 승인한 것입니다.
|
|
44
52
|
|
|
53
|
+
## run 상태
|
|
54
|
+
|
|
55
|
+
<img alt="CueLine run 상태: ready, awaiting_controller, awaiting_caller, awaiting_caller_work, complete, blocked, cancelled — 각 상태의 의미." src="docs/assets/cueline-states-ko.svg" width="100%">
|
|
56
|
+
|
|
57
|
+
`cueline run status <run-id> --json`은 지속 상태와 `safeNextAction`을 보고하고, `cueline run doctor <run-id> --json`은 같은 스냅샷을 안정적인 finding 코드와 안전한 다음 한 걸음으로 바꿔 줍니다. 모호한 것 — 보냈을 수도 있는 클릭, 만료된 시작 claim, 수동 첨부 전송 — 앞에서 CueLine은 재전송 대신 멈추고 명시적 reconcile을 요구합니다. 복구 계약 전문은 [state and recovery](docs/state-and-recovery.md)를 보세요.
|
|
58
|
+
|
|
45
59
|
## 컨트롤러는 반드시 Pro 모델이어야 합니다
|
|
46
60
|
|
|
47
61
|
컴포저의 모델 선택기가 `Pro`를 가리키지 않으면 CueLine은 전송을 거부합니다. 대화가 다른 모델에 머물러 있으면 CueLine이 먼저 컴포저를 `Pro`로 전환합니다 — 이것이 CueLine에게 허용된 유일한 모델 전환입니다. 검증된 실제 실행에서 CueLine은 Instant를 Pro로 전환했고, 응답은 `gpt-5-6-pro`로 돌아왔습니다.
|
|
@@ -57,15 +71,15 @@ ChatGPT Pro 구독과 선택된 Pro 모델은 서로 다른 것입니다. 계정
|
|
|
57
71
|
npm 레지스트리에서 설치합니다:
|
|
58
72
|
|
|
59
73
|
```bash
|
|
60
|
-
npm install -g cueline@0.
|
|
74
|
+
npm install -g cueline@0.2.0
|
|
61
75
|
cueline install
|
|
62
76
|
cueline doctor
|
|
63
77
|
```
|
|
64
78
|
|
|
65
|
-
대안으로, [v0.
|
|
79
|
+
대안으로, [v0.2.0 릴리스](https://github.com/Seraphim0916/cueline/releases/tag/v0.2.0)의 패키지 tarball을 설치할 수도 있습니다. 같은 릴리스에 `.sha256` 체크섬도 함께 있습니다.
|
|
66
80
|
|
|
67
81
|
```bash
|
|
68
|
-
npm install -g https://github.com/Seraphim0916/cueline/releases/download/v0.
|
|
82
|
+
npm install -g https://github.com/Seraphim0916/cueline/releases/download/v0.2.0/cueline-0.2.0.tgz
|
|
69
83
|
cueline install
|
|
70
84
|
cueline doctor
|
|
71
85
|
```
|
|
@@ -88,7 +102,7 @@ cueline doctor
|
|
|
88
102
|
그다음 Codex에서:
|
|
89
103
|
|
|
90
104
|
1. Codex의 내장 브라우저로 `https://chatgpt.com`을 열고 로그인합니다.
|
|
91
|
-
2. 지휘를 맡길 대화를 선택한 상태로 둡니다. 그 페이지가 컨트롤러입니다. 그 컴포저는 반드시 `Pro` 모델이어야 하며, 그렇지 않으면 CueLine이 `Pro`를 대신 선택하고, 선택하지 못하면 전송을 거부합니다.
|
|
105
|
+
2. 지휘를 맡길 대화를 선택한 상태로 둡니다. 그 페이지가 컨트롤러입니다. 선택된 탭이 없고 일치하는 ChatGPT 탭이 여러 개면, CueLine은 첫 번째 탭을 마음대로 고르는 대신 `IAB_CHATGPT_TAB_AMBIGUOUS`를 반환합니다. 그 컴포저는 반드시 `Pro` 모델이어야 하며, 그렇지 않으면 CueLine이 `Pro`를 대신 선택하고, 선택하지 못하면 전송을 거부합니다.
|
|
92
106
|
3. Codex에게 CueLine으로 처리해 달라고 요청합니다: *"CueLine을 써서, 열려 있는 ChatGPT Pro 대화가 이 작업을 지휘하게 해 줘."*
|
|
93
107
|
4. 반환된 `runId`를 보관하세요. 중단된 실행을 이어서 진행하는 열쇠입니다.
|
|
94
108
|
|
|
@@ -146,22 +160,33 @@ if (result.status === "complete") {
|
|
|
146
160
|
}
|
|
147
161
|
```
|
|
148
162
|
|
|
163
|
+
`archiveControllerConversationOnComplete`의 기본값은 `false`이며 run 생성 시 고정됩니다. 활성화하면 CueLine은 먼저 `complete`를 영속화한 뒤 Pro가 유휴 상태일 때 정확히 바인딩된 그 대화만 보관합니다. 지속 클릭 체크포인트 전에 증명된 실패는 재시도할 수 있지만, 그 이후의 타임아웃·재시작·탐색 경합·증거 누락은 모두 `ambiguous`가 되며 CueLine은 Archive를 다시 클릭하지 않습니다. `blocked`와 `cancelled` run은 열린 채로 둡니다.
|
|
164
|
+
|
|
149
165
|
`awaiting_controller`는 재전송 없는 읽기 전용 관측, `awaiting_caller`는 advise 인계, `awaiting_caller_work`는 claim, start, 실행, heartbeat, claim proof 제출 순서입니다. Pro는 로컬 도구를 직접 쓰지 않습니다.
|
|
150
166
|
|
|
167
|
+
`listCueLineRuns()`는 영속화된 run ID를 찾기 위한 읽기 전용·비식별화 목록입니다. 컨트롤러 텍스트, 대화 URL, job task, worker 출력은 포함하지 않습니다.
|
|
168
|
+
|
|
169
|
+
`verifyCueLineRun(runId)`는 생성 marker, 이벤트 replay와 authority fence, 선택적 snapshot, runtime lease, job status 증거를 검사하는 읽기 전용 무결성 검사입니다. 지속 run 내용은 반환하지 않고 안정적인 finding만 반환합니다.
|
|
170
|
+
|
|
171
|
+
`confirmManualControllerSubmission(runId, …)`과 `confirmControllerTurnNotSent(runId, …)`은 두 가지 reconcile 확인의 프로그래밍 인터페이스입니다. 둘 다 추가 전용이고 멱등이며, 브라우저를 구동하지도, 무언가를 재전송하지도 않습니다.
|
|
172
|
+
|
|
151
173
|
Codex 런타임에서는 `cueline api path`가 출력하는 절대 경로 모듈을 import하세요. 그것이 설치한 패키지의 빌드된 API입니다.
|
|
152
174
|
|
|
153
175
|
`startCueLineRun`은 지속 run을 만들고 `ready`만 반환합니다. `runCueLine`은 생성 후 지속 controller 관측 대기, caller 인계 또는 종료 상태까지 진행합니다. owner가 없는 `controller_response_pending`에 정상 전송된 턴이 정확히 하나이고 `safeNextAction: observe`가 표시되면 같은 Pro 응답을 읽기 전용으로 관측하기 위한 대기입니다. 잠시 뒤 계속하고 재전송하지 마세요. `safeNextAction: reconcile`은 모호하거나 수동 전송되었거나 보류 턴이 여러 개인 경우에 사용합니다. owner가 없는 `caller_jobs_pending`은 정상적인 로컬 인계이며 orphan이나 ChatGPT 대기가 아닙니다. CLI의 `run status`는 인계에 필요한 metadata만 출력하며 task 본문, caller identity, task hash, workdir, runtime owner ID를 포함하지 않습니다. 정식 claim 뒤에만 API가 정확한 task와 workdir를 승인된 caller에게 반환합니다.
|
|
154
176
|
|
|
155
177
|
## CLI
|
|
156
178
|
|
|
157
|
-
CLI는 브라우저를 구동하지 않습니다.
|
|
179
|
+
CLI는 브라우저를 구동하지 않습니다. 상태를 쓰는 명령 전에는 `cueline help`로 전체 인수를 확인하세요.
|
|
158
180
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
181
|
+
| 그룹 | 명령 | 효과 |
|
|
182
|
+
| --- | --- | --- |
|
|
183
|
+
| 조회 | `doctor` · `routing` · `routing explain` · `jobs` · `runs` · `run status` · `run status-at` · `run diff` · `run doctor` · `run watch` · `run timeline` · `run graph` · `run verify` · `run handoff` · `protocol lint` · `api path` · `config path` | 읽기 전용 |
|
|
184
|
+
| 설치 | `install` · `uninstall` | 패키지가 소유한 스킬 링크만 생성·제거 |
|
|
185
|
+
| 복구 | `run reconcile` · `run takeover` · `run reconcile-runtime` · `run cancel` / `run stop` · `job cancel` | 감사 증거 추가 또는 지속 run/job 상태 변경 |
|
|
162
186
|
|
|
187
|
+
```console
|
|
163
188
|
$ cueline doctor
|
|
164
|
-
CueLine 0.
|
|
189
|
+
CueLine 0.2.0
|
|
165
190
|
status ok
|
|
166
191
|
node 22.14.0 ok
|
|
167
192
|
config /usr/local/lib/node_modules/cueline/config/routing.default.json valid
|
|
@@ -170,52 +195,45 @@ caller_ready yes
|
|
|
170
195
|
caller_lanes 1
|
|
171
196
|
process_available_lanes 1
|
|
172
197
|
|
|
173
|
-
$ cueline doctor --json
|
|
174
|
-
{"version":"0.1.7","status":"ok","node":{"version":"22.14.0","ok":true,"requirement":">=22"},...}
|
|
175
|
-
|
|
176
|
-
$ cueline api path
|
|
177
|
-
/usr/local/lib/node_modules/cueline/dist/src/api.js
|
|
178
|
-
|
|
179
198
|
$ cueline routing
|
|
180
199
|
default codex-default available
|
|
181
200
|
|
|
182
|
-
$ cueline routing --json
|
|
183
|
-
{"version":"0.1.7","availableLanes":1,"lanes":[{"name":"default","status":"available","selectedRunnerId":"codex-default"}],...}
|
|
184
|
-
|
|
185
|
-
$ cueline jobs
|
|
186
|
-
No jobs.
|
|
187
|
-
|
|
188
|
-
$ cueline runs
|
|
189
|
-
No runs.
|
|
190
|
-
|
|
191
201
|
$ cueline run status run_... --json
|
|
192
202
|
{"status":"running","executor":"caller","phase":"caller_jobs_pending","runtime":{"ownership":"missing"},...}
|
|
193
203
|
|
|
194
|
-
$ cueline run
|
|
195
|
-
{"
|
|
204
|
+
$ cueline run doctor run_... --json
|
|
205
|
+
{"outcome":"action_required","phase":"caller_jobs_pending","nextAction":"execute_caller_jobs",...}
|
|
196
206
|
|
|
197
|
-
$ cueline run
|
|
198
|
-
|
|
207
|
+
$ cueline run reconcile run_... --request-id msg_... --manual-send-confirmed --conversation-url https://chatgpt.com/c/...
|
|
208
|
+
run_...\tmsg_...\tconfirmed
|
|
199
209
|
|
|
200
210
|
$ cueline run cancel run_...
|
|
201
211
|
run_... requested affected_jobs=0
|
|
202
|
-
|
|
203
|
-
$ cueline config path
|
|
204
|
-
/usr/local/lib/node_modules/cueline/config/routing.default.json
|
|
205
|
-
|
|
206
|
-
$ cueline uninstall
|
|
207
|
-
CueLine skill removed: /Users/you/.codex/skills/cueline
|
|
208
212
|
```
|
|
209
213
|
|
|
210
214
|
Node 버전이 너무 낮거나 활성화된 caller 레인이 하나도 없으면 `cueline doctor`는 0이 아닌 코드로 종료합니다. `process_available_lanes`가 0이어도 caller 모드는 저하되지 않습니다. process executor를 명시적으로 선택하기 전에만 `cueline routing`으로 process 가용성을 확인하세요. `cueline api path`가 출력하는 것이 곧 스킬이 import하는 모듈이므로, 패키지로 설치했다면 저장소를 받을 필요가 없습니다. `cueline help`는 `--json`과 수동 reconcile 필수 확인 플래그를 포함한 각 명령의 정확한 구문을 나열합니다.
|
|
211
215
|
|
|
216
|
+
0.2.0에서 추가된 네 가지 관측 명령은 모두 엄격히 읽기 전용입니다. `run status-at`은 하나의 정확한 이벤트 순번 시점으로 비식별화된 run 상태를 재구성합니다 — “그 순간 CueLine이 알고 있던 것”입니다. `run diff`는 두 개의 비식별화된 run 요약을 필드 단위로 비교하며 원본 프롬프트나 출력은 절대 포함하지 않습니다. `run graph`는 비식별화된 timeline 항목으로 제한된 Mermaid 제어 흐름 그래프를 그립니다. `routing explain`은 프로세스 시작 전에 레인 선택, 가용성, 탈락 사유를 runner 인수를 노출하지 않고 설명합니다([multi-model routing](docs/multi-model-routing.md) 참고).
|
|
217
|
+
|
|
218
|
+
실험적 진단 명령에는 각각 전용 문서가 있습니다:
|
|
219
|
+
|
|
220
|
+
| 명령 | 역할 | 문서 |
|
|
221
|
+
| --- | --- | --- |
|
|
222
|
+
| `run doctor` | run 스냅샷을 안정적 finding 코드, 제한된 증거, 안전한 다음 행동으로 변환(상태를 쓰지 않음) | [run-doctor](docs/experiments/run-doctor.md) |
|
|
223
|
+
| `run watch` | 지속 이벤트 순번을 커서로 삼는, 제한적이고 lease를 잡지 않는 관측 | [run-watch](docs/experiments/run-watch.md) |
|
|
224
|
+
| `protocol lint` | Pro 엔벨로프를 오프라인 검증하고 알려진 계약 수정 사항을 한 번에 보고 | [protocol-lint](docs/experiments/protocol-lint.md) |
|
|
225
|
+
| `run handoff` | 정확한 identity와 절대 경로를 갖춘 안전한 재시작 패킷 생성 | [run-handoff](docs/experiments/run-handoff.md) |
|
|
226
|
+
| `run timeline` | 원본 이벤트를 담지 않는, 비식별화·커서 페이지네이션 감사 뷰 | [run-timeline](docs/experiments/run-timeline.md) |
|
|
227
|
+
|
|
212
228
|
`run takeover`는 `run status`가 exact stale owner를 표시할 때만 사용합니다. 새로운 active heartbeat는 거부됩니다. 반환된 `next: continue` 또는 `next: reconcile_runtime`을 따르고 추측해서 진행하지 마세요.
|
|
213
229
|
|
|
214
230
|
## 설정
|
|
215
231
|
|
|
216
232
|
`CUELINE_CONFIG`는 라우팅 설정 파일을 고르고, `CUELINE_HOME`은 로컬 상태의 위치를 옮깁니다(기본값 `~/.cueline`).
|
|
217
233
|
|
|
218
|
-
Caller는 프로세스를 띄우지 않습니다. `executor: "process"`와 `allowProcessExecution: true`를 함께 지정한 경우에만 `default` 레인의 `codex-default`가 격리된 `codex exec --ignore-user-config`를 실행합니다. 독립 `advise`의 기본 동시 실행 상한은 전체/레인당 2이고, `work`가 포함된 배치는 직렬입니다.
|
|
234
|
+
Caller는 프로세스를 띄우지 않습니다. `executor: "process"`와 `allowProcessExecution: true`를 함께 지정한 경우에만 `default` 레인의 `codex-default`가 격리된 `codex exec --ignore-user-config`를 실행합니다. 독립 `advise`의 기본 동시 실행 상한은 전체/레인당 2이고, `work`가 포함된 배치는 직렬입니다. 다른 process worker를 등록하려면 [`config/routing.default.json`](config/routing.default.json)을 복사해 후보를 추가하고 `CUELINE_CONFIG`를 그쪽으로 지정하세요.
|
|
235
|
+
|
|
236
|
+
모델별 여러 후보를 등록하는 방법과 advise 전용 래퍼 예시는 [multi-model routing](docs/multi-model-routing.md)을 참고하세요.
|
|
219
237
|
|
|
220
238
|
상태는 `CUELINE_HOME` 아래에 놓입니다:
|
|
221
239
|
|
|
@@ -231,7 +249,13 @@ jobs/<job-id>.json 작업별 실행 증거
|
|
|
231
249
|
|
|
232
250
|
기록 그 자체는 이벤트 로그입니다. 컨트롤러의 턴은 보내기 전에 기록되고, 작업은 프로세스가 시작되기 전에 등록됩니다. 그래서 의도와 부작용 사이에서 중단이 일어나도 흔적이 남습니다. 손상된 스냅샷은 신뢰되지 않고, 무시된 뒤 이벤트 1번부터 다시 만들어집니다.
|
|
233
251
|
|
|
234
|
-
복구는 완전히 같은 대화 URL에만 연결합니다. ChatGPT가 긴 텍스트를 첨부로 자동 변환하면 `attachment_ready`로 인식하며 전송 클릭은 최대 한 번입니다. 모호한 클릭은 `possibly_sent`가 되고 재전송하지 않습니다. 수동 전송 뒤에는 `cueline run reconcile RUN_ID --request-id REQUEST_ID --manual-send-confirmed`로 정식 확인하고 동일 conversation, Pro 증거, protocol/run/round/request identity를 모두 검증합니다.
|
|
252
|
+
복구는 완전히 같은 대화 URL에만 연결합니다. ChatGPT가 긴 텍스트를 첨부로 자동 변환하면 `attachment_ready`로 인식하며 전송 클릭은 최대 한 번입니다. 모호한 클릭은 `possibly_sent`가 되고 재전송하지 않습니다. 실제로 보이고 활성화되어 조작 가능한 Stop 컨트롤이 있는 동안에만 응답이 진행 중으로 간주됩니다. 숨은 잔여 버튼이 완료된 Pro 응답을 가리는 일은 없습니다. 수동 전송 뒤에는 `cueline run reconcile RUN_ID --request-id REQUEST_ID --manual-send-confirmed`로 정식 확인하고 동일 conversation, Pro 증거, protocol/run/round/request identity를 모두 검증합니다.
|
|
253
|
+
|
|
254
|
+
반대 방향의 확인은 “클릭이 확실히 도달하지 않은” 경우를 다룹니다. 운영자가 그 정확한 대화를 직접 확인해 메시지가 없다는 것을 확인한 뒤 `cueline run reconcile ... --not-sent-confirmed --conversation-url URL`을 실행하면, 이전 request identity를 추가 전용으로 폐기하고 새 결정적 request ID로 정확히 한 번의 동일 프롬프트 재시도를 승인합니다. 두 플래그는 상호 배타적이며, 폐기한 메시지나 그 응답이 나중에라도 나타나면 CueLine은 run을 동결해 수동 검토로 넘기고 절대 수락하거나 재전송하지 않습니다.
|
|
255
|
+
|
|
256
|
+
Pro가 답하는 동안에는 절대 중단하지 말고, `Answer now`, `Respond now`, `Stop` 또는 그에 준하는 가속 컨트롤도 쓰지 마세요. Pro에는 로컬 도구가 없고 저장소 구조나 로컬 경로에 대한 기본 지식도 없습니다. Caller 증거에는 정확한 코드/오류 식별자, 관련 코드 발췌, 절대 로컬 경로를 담고, Pro에게 로컬 증거가 더 필요한지 명시적으로 물어보세요.
|
|
257
|
+
|
|
258
|
+
컨트롤러 증거는 성공한 비어 있지 않은 stdout을 우선하며 전체 12,000자로 제한하고, 전체 stdout/stderr는 로컬에 보존합니다. Pro가 `inspect(job_ids)`를 수락하면 다음 턴은 지정된 job의 증거 예산을 먼저 확보한 뒤 무관한 증거를 다룹니다.
|
|
235
259
|
|
|
236
260
|
## 검증
|
|
237
261
|
|
|
@@ -248,13 +272,23 @@ npm pack --dry-run
|
|
|
248
272
|
|
|
249
273
|
## 0.1의 한계
|
|
250
274
|
|
|
251
|
-
텍스트 명령 전용입니다. 긴 텍스트의 자동 첨부 변환은 지원하지만 의도적 파일 업로드, 이미지, Deep Research, Projects, Apps는 지원하지 않습니다. Caller work는 명시적 claim/start
|
|
275
|
+
텍스트 명령 전용입니다. run 하나당 대화는 하나입니다. `Pro` 선택이 CueLine이 하는 유일한 모델 전환입니다. 긴 텍스트의 자동 첨부 변환은 지원하지만 의도적 파일 업로드, 이미지, Deep Research, Projects, Apps는 지원하지 않습니다. Caller work는 명시적 claim/start와, 긴 작업에는 heartbeat가 필요합니다. process 실행은 이중 승인이 필요합니다. 모호한 전송이나 이미 시작된 작업은 자동 재시도하지 않습니다. macOS가 주 데스크톱 대상이고 Linux가 CI 대상이며 Windows는 검증되지 않았습니다. 어댑터는 현재 ChatGPT 웹 UI에 의존하므로, UI 변경은 지어낸 답이 아니라 명시적 오류로 드러납니다.
|
|
252
276
|
|
|
253
277
|
전체 표는 [compatibility](docs/compatibility.md)를 보세요.
|
|
254
278
|
|
|
255
279
|
## 문서
|
|
256
280
|
|
|
257
|
-
|
|
281
|
+
| 문서 | 내용 |
|
|
282
|
+
| --- | --- |
|
|
283
|
+
| [architecture](docs/architecture.md) | 구성 요소의 결합 방식과 신뢰 경계의 위치 |
|
|
284
|
+
| [controller protocol](docs/controller-protocol.md) | `<CueLineControl>` 엔벨로프, 다섯 동작, 수정 규칙 |
|
|
285
|
+
| [runner contract](docs/runner-contract.md) | 등록된 process worker가 해야 할 일과 해서는 안 될 일 |
|
|
286
|
+
| [state and recovery](docs/state-and-recovery.md) | 지속 상태 레이아웃, ownership, 모든 복구 경로 |
|
|
287
|
+
| [multi-model routing](docs/multi-model-routing.md) | 추가 process worker 등록 방법과 컨트롤러가 실제로 볼 수 있는 것 |
|
|
288
|
+
| [compatibility](docs/compatibility.md) | 지원 플랫폼, 런타임, UI 전제 |
|
|
289
|
+
| [provenance](docs/provenance.md) | 설계의 유래와 CueLine이 아닌 것 |
|
|
290
|
+
|
|
291
|
+
(모두 영어)
|
|
258
292
|
|
|
259
293
|
## 개발
|
|
260
294
|
|