cueline 0.1.5 → 0.1.7
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 +2 -2
- package/.codex-plugin/plugin.json +2 -2
- package/CHANGELOG.md +49 -0
- package/README.ja.md +51 -15
- package/README.ko.md +51 -15
- package/README.md +109 -17
- package/README.zh-CN.md +53 -15
- package/README.zh-TW.md +70 -17
- package/config/routing.default.json +1 -0
- package/config/routing.schema.json +3 -0
- package/dist/src/api-caller-work.d.ts +18 -0
- package/dist/src/api-caller-work.js +441 -0
- package/dist/src/api-caller-work.js.map +1 -0
- package/dist/src/api-contracts.d.ts +86 -0
- package/dist/src/api-controller-handoff.d.ts +2 -2
- package/dist/src/api-controller-handoff.js +108 -41
- package/dist/src/api-controller-handoff.js.map +1 -1
- package/dist/src/api-run-verification.d.ts +3 -0
- package/dist/src/api-run-verification.js +174 -0
- package/dist/src/api-run-verification.js.map +1 -0
- package/dist/src/api-runtime-lifecycle.d.ts +6 -1
- package/dist/src/api-runtime-lifecycle.js +103 -9
- package/dist/src/api-runtime-lifecycle.js.map +1 -1
- package/dist/src/api.d.ts +19 -3
- package/dist/src/api.js +132 -36
- package/dist/src/api.js.map +1 -1
- package/dist/src/browser/browser-adapter.d.ts +15 -0
- package/dist/src/browser/codex-iab/bootstrap.d.ts +20 -0
- package/dist/src/browser/codex-iab/bootstrap.js +207 -9
- package/dist/src/browser/codex-iab/bootstrap.js.map +1 -1
- package/dist/src/browser/codex-iab/chatgpt-client.d.ts +3 -0
- package/dist/src/browser/codex-iab/chatgpt-client.js +115 -57
- package/dist/src/browser/codex-iab/chatgpt-client.js.map +1 -1
- package/dist/src/browser/codex-iab/probe.d.ts +36 -0
- package/dist/src/browser/codex-iab/probe.js +217 -0
- package/dist/src/browser/codex-iab/probe.js.map +1 -0
- package/dist/src/browser/codex-iab/recovery-evidence.d.ts +1 -1
- package/dist/src/browser/codex-iab/recovery-evidence.js +7 -10
- package/dist/src/browser/codex-iab/recovery-evidence.js.map +1 -1
- package/dist/src/browser/codex-iab/selectors.d.ts +1 -0
- package/dist/src/browser/codex-iab/selectors.js +1 -0
- package/dist/src/browser/codex-iab/selectors.js.map +1 -1
- package/dist/src/browser/codex-iab/send-button.d.ts +5 -0
- package/dist/src/browser/codex-iab/send-button.js +62 -0
- package/dist/src/browser/codex-iab/send-button.js.map +1 -0
- package/dist/src/browser/codex-iab/submission-url.js +6 -15
- package/dist/src/browser/codex-iab/submission-url.js.map +1 -1
- package/dist/src/browser/codex-iab/tab-discovery.js +45 -12
- package/dist/src/browser/codex-iab/tab-discovery.js.map +1 -1
- package/dist/src/browser/codex-iab/timing-options.d.ts +1 -0
- package/dist/src/browser/codex-iab/timing-options.js +5 -0
- package/dist/src/browser/codex-iab/timing-options.js.map +1 -0
- package/dist/src/cli/health-commands.d.ts +2 -0
- package/dist/src/cli/health-commands.js +191 -0
- package/dist/src/cli/health-commands.js.map +1 -0
- package/dist/src/cli/io.d.ts +4 -0
- package/dist/src/cli/io.js +2 -0
- package/dist/src/cli/io.js.map +1 -0
- package/dist/src/cli/main.d.ts +1 -5
- package/dist/src/cli/main.js +170 -77
- package/dist/src/cli/main.js.map +1 -1
- package/dist/src/cli/observation-commands.d.ts +2 -0
- package/dist/src/cli/observation-commands.js +239 -0
- package/dist/src/cli/observation-commands.js.map +1 -0
- package/dist/src/cli/run-status-view.d.ts +79 -0
- package/dist/src/cli/run-status-view.js +112 -0
- package/dist/src/cli/run-status-view.js.map +1 -0
- package/dist/src/core/controller-command-execution.d.ts +2 -2
- package/dist/src/core/controller-command-execution.js +108 -18
- package/dist/src/core/controller-command-execution.js.map +1 -1
- package/dist/src/core/controller-conversation-archive.d.ts +11 -0
- package/dist/src/core/controller-conversation-archive.js +109 -0
- package/dist/src/core/controller-conversation-archive.js.map +1 -0
- package/dist/src/core/controller-loop.d.ts +7 -1
- package/dist/src/core/controller-loop.js +173 -37
- package/dist/src/core/controller-loop.js.map +1 -1
- package/dist/src/core/controller-turn.d.ts +14 -2
- package/dist/src/core/controller-turn.js +114 -40
- package/dist/src/core/controller-turn.js.map +1 -1
- package/dist/src/core/controller-types.d.ts +5 -1
- package/dist/src/core/conversation-url.d.ts +3 -0
- package/dist/src/core/conversation-url.js +34 -0
- package/dist/src/core/conversation-url.js.map +1 -0
- package/dist/src/core/ids.d.ts +1 -0
- package/dist/src/core/ids.js +3 -0
- package/dist/src/core/ids.js.map +1 -1
- package/dist/src/core/run-status.d.ts +37 -3
- package/dist/src/core/run-status.js +147 -6
- package/dist/src/core/run-status.js.map +1 -1
- package/dist/src/core/state-machine.d.ts +49 -1
- package/dist/src/core/state-machine.js +335 -13
- package/dist/src/core/state-machine.js.map +1 -1
- package/dist/src/core/timing.d.ts +9 -0
- package/dist/src/core/timing.js +22 -0
- package/dist/src/core/timing.js.map +1 -0
- package/dist/src/diagnostics/run-doctor.d.ts +22 -0
- package/dist/src/diagnostics/run-doctor.js +197 -0
- package/dist/src/diagnostics/run-doctor.js.map +1 -0
- package/dist/src/jobs/status.d.ts +10 -2
- package/dist/src/jobs/status.js +172 -12
- package/dist/src/jobs/status.js.map +1 -1
- package/dist/src/jobs/supervisor.js +81 -6
- package/dist/src/jobs/supervisor.js.map +1 -1
- package/dist/src/observation/run-handoff.d.ts +86 -0
- package/dist/src/observation/run-handoff.js +309 -0
- package/dist/src/observation/run-handoff.js.map +1 -0
- package/dist/src/observation/run-timeline.d.ts +32 -0
- package/dist/src/observation/run-timeline.js +278 -0
- package/dist/src/observation/run-timeline.js.map +1 -0
- package/dist/src/observation/run-watch.d.ts +15 -0
- package/dist/src/observation/run-watch.js +82 -0
- package/dist/src/observation/run-watch.js.map +1 -0
- package/dist/src/protocol/limits.d.ts +3 -0
- package/dist/src/protocol/limits.js +4 -0
- package/dist/src/protocol/limits.js.map +1 -0
- package/dist/src/protocol/lint-command.d.ts +24 -0
- package/dist/src/protocol/lint-command.js +210 -0
- package/dist/src/protocol/lint-command.js.map +1 -0
- package/dist/src/protocol/parse-command.js +4 -0
- package/dist/src/protocol/parse-command.js.map +1 -1
- package/dist/src/protocol/types.d.ts +12 -0
- package/dist/src/protocol/validate-command.js +76 -3
- package/dist/src/protocol/validate-command.js.map +1 -1
- package/dist/src/router/config-loader.js +23 -2
- package/dist/src/router/config-loader.js.map +1 -1
- package/dist/src/router/materialize.js +1 -0
- package/dist/src/router/materialize.js.map +1 -1
- package/dist/src/router/resolver.js +8 -3
- package/dist/src/router/resolver.js.map +1 -1
- package/dist/src/runners/process-runner.js +108 -11
- package/dist/src/runners/process-runner.js.map +1 -1
- package/dist/src/runners/runner-adapter.d.ts +11 -0
- package/dist/src/runners/runner-adapter.js.map +1 -1
- package/dist/src/state/atomic-write.d.ts +6 -0
- package/dist/src/state/atomic-write.js +43 -2
- package/dist/src/state/atomic-write.js.map +1 -1
- package/dist/src/state/cancellation.js +38 -4
- package/dist/src/state/cancellation.js.map +1 -1
- package/dist/src/state/event-log.js +5 -4
- package/dist/src/state/event-log.js.map +1 -1
- package/dist/src/state/private-directory.d.ts +5 -0
- package/dist/src/state/private-directory.js +37 -0
- package/dist/src/state/private-directory.js.map +1 -0
- package/dist/src/state/runtime-lease.js +19 -39
- package/dist/src/state/runtime-lease.js.map +1 -1
- package/dist/src/state/runtime-record-validation.d.ts +6 -0
- package/dist/src/state/runtime-record-validation.js +44 -0
- package/dist/src/state/runtime-record-validation.js.map +1 -0
- package/dist/src/state/runtime-retirement.js +58 -18
- package/dist/src/state/runtime-retirement.js.map +1 -1
- package/dist/src/state/runtime-takeover-intent.js +2 -2
- package/dist/src/state/runtime-takeover-intent.js.map +1 -1
- package/dist/src/state/store.d.ts +1 -0
- package/dist/src/state/store.js +12 -6
- package/dist/src/state/store.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/docs/architecture.md +10 -9
- package/docs/assets/cueline-loop-en.svg +1 -1
- package/docs/assets/cueline-loop-ja.svg +1 -1
- package/docs/assets/cueline-loop-ko.svg +1 -1
- package/docs/assets/cueline-loop-zh-CN.svg +1 -1
- package/docs/assets/cueline-loop-zh-TW.svg +1 -1
- package/docs/compatibility.md +8 -8
- package/docs/controller-protocol.md +39 -8
- package/docs/experiments/protocol-lint.md +40 -0
- package/docs/experiments/run-doctor.md +39 -0
- package/docs/experiments/run-handoff.md +39 -0
- package/docs/experiments/run-timeline.md +35 -0
- package/docs/experiments/run-watch.md +31 -0
- package/docs/runner-contract.md +22 -8
- package/docs/state-and-recovery.md +24 -9
- package/package.json +2 -2
- package/schemas/controller-command.schema.json +89 -4
- package/skills/cueline/SKILL.md +58 -12
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cueline",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "Use a ChatGPT web conversation as the text controller for durable local advice executed by the current Codex.",
|
|
3
|
+
"version": "0.1.7",
|
|
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"
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cueline",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "Use a ChatGPT web conversation as the text controller for durable local advice executed by the current Codex.",
|
|
3
|
+
"version": "0.1.7",
|
|
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"
|
|
7
7
|
},
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,54 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.1.7 - 2026-07-16
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- Add read-only operational surfaces for safe handoff and diagnosis: sanitized `runs`, causal `run doctor`, bounded `run watch`, metadata-only `run timeline`, explicit `run handoff`, durable-evidence `run verify`, controller-response `protocol lint`, machine-readable doctor/routing reports, and a non-mutating built-in-browser probe. These surfaces are strict allowlists and do not expose controller prompts, conversation URLs, job tasks/output, caller identities, task hashes, workdirs, runtime owner IDs, or untrusted exception text.
|
|
8
|
+
- Add deterministic pagination for `inspect(job_ids)` evidence. Pro can request the next exact slice using a content hash and character offset without rerunning a job or allowing one job to consume every later evidence window.
|
|
9
|
+
- Add opt-in `archiveControllerConversationOnComplete`. After a durable `complete`, CueLine may archive only the exact bound ChatGPT conversation while Pro is idle. The browser writes a durable checkpoint immediately before one Archive click; proven pre-click failures remain retryable, while a timeout, restart, missing checkpoint, navigation race, or missing proof becomes `ambiguous` and is never clicked again. `blocked` and `cancelled` runs are never archived.
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
- Require visible, actionable send and stop controls. Hidden, disabled, inert, ancestor-hidden, zero-geometry, localized, or residual controls no longer prove that a prompt can be sent or that Pro is still answering.
|
|
14
|
+
- Refuse ambiguous ChatGPT tab discovery instead of selecting the first match. Exact conversation matching now canonicalizes only benign browser decoration and rejects lookalike hosts, credentials, nested paths, duplicate physical tabs, and navigation races.
|
|
15
|
+
- Accept a fast completed response as post-click proof after a send timeout, while preserving the one-click rule whenever completion cannot be proven. Browser timing options and all Node timer values are validated before they can schedule a spin, overflow, or unsafe delay.
|
|
16
|
+
- Preflight continuation, manual reconciliation, caller-result timestamps, runtime options, routing configuration, process workdirs, and controller commands before any durable mutation or browser/process action. Unknown fields, inherited object properties, invalid lanes/runners, unknown job targets, and action-incompatible fields now fail atomically.
|
|
17
|
+
- Bound controller envelopes, dispatch size, job references, process stdout/stderr, controller event evidence, and accumulated notices. Truncation is explicit and deterministic; full local job evidence remains in the private job status store.
|
|
18
|
+
- Make job status transitions durably atomic and terminally fenced. Concurrent, stale, status-first, event-first, and late-conflicting writers cannot regress or overwrite the first authoritative terminal result; process progress writes are coalesced without losing the final update.
|
|
19
|
+
- Strictly validate persisted job status, runtime lease, retirement, takeover, and cancellation records, including identity, chronology, filenames, unknown fields, canonical timestamps, and authoritative run-event agreement. Corrupt optional evidence degrades diagnosis instead of becoming trusted state.
|
|
20
|
+
- Keep CueLine state directories owner-only and refuse symlink/file substitutions. Caller work claims pin the canonical workdir identity; process jobs bind an absolute workdir before registration, so recovery cannot silently execute in another checkout.
|
|
21
|
+
- Normalize multiline recovery evidence without erasing meaningful indentation, and validate conversation identity consistently across submission, observation, manual reconciliation, and archive recovery.
|
|
22
|
+
- Fence runtime and lane-concurrency option records against caller mutation, and prevent unsafe process fallback or implicit route changes after a job has started.
|
|
23
|
+
- Correct terminal status reporting: a completed, blocked, or cancelled run now reports `continueAllowed: false`; a pending post-completion archive has its own explicit `controller_archive_pending` / `settle_controller_archive` state.
|
|
24
|
+
|
|
25
|
+
### Verification
|
|
26
|
+
|
|
27
|
+
- Integrated 42 independently developed branches one at a time, running adversarial review and the full suite after every merge. Final integration passes 454/454 tests, TypeScript typecheck, plugin validation, fake smoke tests, and package-content checks.
|
|
28
|
+
- Verified a disposable real ChatGPT Web Pro run without interruption or `Answer now`: one prompt, exact `complete` delivery `LIVE_CONTROLLER_ARCHIVE_ACCEPTANCE_PASS`, one durable archive-start event, one archived event, zero ambiguous/failed archive events, and the pre-existing user conversation remained open.
|
|
29
|
+
|
|
30
|
+
## 0.1.6 - 2026-07-15
|
|
31
|
+
|
|
32
|
+
### Added
|
|
33
|
+
|
|
34
|
+
- Add a durable caller-work claim protocol for local mutations. A `work` dispatch in caller mode now pauses as `caller_work_pending`; `claimCueLineCallerJob`, `startCueLineCallerJob`, heartbeat, release, and result submission bind the exact run, job, task hash, absolute workdir, caller identity, expiry, and monotonically increasing fencing token. An unstarted expired claim is safely reclaimable; started work that loses its claim becomes `ambiguous` and is never automatically retried.
|
|
35
|
+
- Expose separate controller, caller-work, and process-execution status surfaces. Process status includes the resolved runner, model, provider, PID, phase, and last-progress timestamp; model/provider discovery keeps the first valid Codex header instead of allowing later untrusted job output to spoof it. Caller work reports pending, claimed, and running phases without pretending that Pro used local tools.
|
|
36
|
+
|
|
37
|
+
### Fixed
|
|
38
|
+
|
|
39
|
+
- Ignore hidden, disabled, inert, ancestor-hidden, zero-geometry, or otherwise non-actionable residual `Stop answering` buttons. A completed Pro response can now reconcile even when ChatGPT retains a hidden stop control in the DOM.
|
|
40
|
+
- Preserve exact `inspect(job_ids)` targets and allocate the bounded controller-evidence budget to those jobs first, so Pro receives the requested stdout instead of repeatedly seeing only terminal status.
|
|
41
|
+
- Recover only one precisely fenced, normally submitted caller observation after an outer timeout, and release every observation lease in `finally`. Ambiguous/manual/multiple turns, URL mismatches, jobs, commands, and cancellations remain in explicit reconciliation paths.
|
|
42
|
+
- Make caller-work result submission crash-recoverable with a durable result-intent event; reject clock regression, invalid or reversed timestamps, forged or out-of-order claims, duplicate terminal results, and release-after-start. Any non-success result after work starts is normalized to `ambiguous`.
|
|
43
|
+
- Require both `executor: "process"` and `allowProcessExecution: true` at run creation and every nonterminal continuation. Process work never exposes a caller-claim surface, and a failing diagnostic progress hook cannot break process supervision.
|
|
44
|
+
- Launch the bundled `codex-default` process route with `--ignore-user-config`, preventing hidden inheritance of user-configured MCP commands and their process arguments. The runner still uses registered argv directly without a shell.
|
|
45
|
+
- Prefer the current injected built-in Browser binding before fallback discovery, while keeping all controller observation read-only and never invoking `Answer now`, `Respond now`, `Stop`, or equivalent interruption controls.
|
|
46
|
+
|
|
47
|
+
### Verification
|
|
48
|
+
|
|
49
|
+
- Added adversarial coverage for hidden stop controls and hidden ancestors, inspected-output prioritization, stale observer fencing, caller claim races/restarts/expiry/result crashes/clock attacks, process double authorization, caller-vs-process status separation, diagnostic-hook failure, and bundled route isolation.
|
|
50
|
+
- Verified the real ChatGPT Web Pro path with a new conversation and new caller run: each prompt was sent once, no process or work job was started, bounded local evidence was returned through caller advice, and Pro was allowed to finish every reasoning turn without interruption. The terminal Pro verdict was `complete`, with no additional evidence requested for the five scoped blockers.
|
|
51
|
+
|
|
3
52
|
## 0.1.5 - 2026-07-15
|
|
4
53
|
|
|
5
54
|
### Fixed
|
package/README.ja.md
CHANGED
|
@@ -13,10 +13,19 @@
|
|
|
13
13
|
|
|
14
14
|
**CueLine は、開いている ChatGPT のウェブ会話に判断を任せます。会話側はテキストコマンドを出し、CueLine が検証し、現在の Codex が許可されたローカル作業を実行します。**
|
|
15
15
|
|
|
16
|
-
ウェブページにローカルツールはありません。既定の `caller`
|
|
16
|
+
ウェブページにローカルツールはありません。既定の `caller` 実行では、`advise` は協調用の引き渡し、`work` は永続 claim と start が必要です。登録済みワーカーを起動する process executor には二重の明示的承認が必要です。
|
|
17
17
|
|
|
18
18
|
CueLine は独立した実装で、**ランタイムの npm 依存はゼロ**です。Omnilane や GPT Relay のラッパーではありません。
|
|
19
19
|
|
|
20
|
+
## 最新リリース:0.1.7
|
|
21
|
+
|
|
22
|
+
- 安全な run 一覧、doctor、watch、timeline、handoff、整合性検証、protocol lint、ブラウザー診断、inspect 証拠ページングを追加しました。
|
|
23
|
+
- タブ/ボタン証拠、コマンドとルーティング上限、原子的な job 状態、非公開の永続データ、workdir ID、runtime/cancel 記録、CLI の秘匿化を強化しました。
|
|
24
|
+
- 永続 `complete` 後に正確な会話だけをアーカイブする opt-in 機能を追加しました。クリック前 fence、Pro 再開/遷移チェック、曖昧後の再クリック禁止を備えます。
|
|
25
|
+
- 454/454 テストと使い捨ての実 ChatGPT Web Pro run を検証し、自然完了後に一度だけアーカイブし、既存のユーザー会話には触れませんでした。
|
|
26
|
+
|
|
27
|
+
詳細は [changelog](CHANGELOG.md#017---2026-07-16) または不変の [v0.1.7 release](https://github.com/Seraphim0916/cueline/releases/tag/v0.1.7) を参照してください。
|
|
28
|
+
|
|
20
29
|
## 1 回の実行は実際にどう進むか
|
|
21
30
|
|
|
22
31
|
<img alt="Caller-first CueLine:ChatGPT がテキストコマンドを出し、現在の Codex がローカル助言を実行し、CueLine が完了まで有界な証拠を返す。" src="docs/assets/cueline-loop-ja.svg" width="100%">
|
|
@@ -25,9 +34,9 @@ CueLine は独立した実装で、**ランタイムの npm 依存はゼロ**で
|
|
|
25
34
|
|
|
26
35
|
既定値以外の `maxRounds` は run 作成時に固定され、owner 不在の一時停止をまたいでコントローラーの総ラウンド数を数えます。後の続行では通常省略して永続値を再利用し、異なる値を渡すと予算を暗黙にリセットまたは拡張せず拒否します。
|
|
27
36
|
|
|
28
|
-
`startCueLineRun` と `runCueLine` の既定は `caller`
|
|
37
|
+
`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 はテキスト命令を提案・審査するだけで、ローカルツールは使いません。
|
|
29
38
|
|
|
30
|
-
|
|
39
|
+
Process モードは `executor: "process"` と `allowProcessExecution: true` の両方が必要で、非終端の続行でも第 2 の承認を再度渡します。組み込み route はさらに `--ignore-user-config` を使い、隠れた worker がユーザー設定の MCP server やそのコマンド引数を読み込まないようにします。レーンと候補は起動前に検証され、シェルも起動後の自動フォールバックも使いません。
|
|
31
40
|
|
|
32
41
|
コントローラープロトコルでは、ルーティングの階層を明確に区別します。`lane` に指定するのはレーン名の `default` であり、`codex-default` はそのレーン内の候補ランナーであって、レーンではありません。CueLine はジョブを一つでも登録する前に `dispatch` 全体を検証します。無効なレーンまたはランナーが一つでもあれば、途中まで実行せず、`dispatch` 全体を修正のために差し戻します。
|
|
33
42
|
|
|
@@ -48,15 +57,15 @@ ChatGPT Pro のサブスクリプションと、選択された Pro モデルは
|
|
|
48
57
|
npm レジストリからインストールします。
|
|
49
58
|
|
|
50
59
|
```bash
|
|
51
|
-
npm install -g cueline@0.1.
|
|
60
|
+
npm install -g cueline@0.1.7
|
|
52
61
|
cueline install
|
|
53
62
|
cueline doctor
|
|
54
63
|
```
|
|
55
64
|
|
|
56
|
-
フォールバックとして、[v0.1.
|
|
65
|
+
フォールバックとして、[v0.1.7 リリース](https://github.com/Seraphim0916/cueline/releases/tag/v0.1.7) のパッケージ済み tarball をインストールすることもできます。同じリリースに `.sha256` チェックサムも置いてあります。
|
|
57
66
|
|
|
58
67
|
```bash
|
|
59
|
-
npm install -g https://github.com/Seraphim0916/cueline/releases/download/v0.1.
|
|
68
|
+
npm install -g https://github.com/Seraphim0916/cueline/releases/download/v0.1.7/cueline-0.1.7.tgz
|
|
60
69
|
cueline install
|
|
61
70
|
cueline doctor
|
|
62
71
|
```
|
|
@@ -89,23 +98,27 @@ cueline doctor
|
|
|
89
98
|
|
|
90
99
|
```js
|
|
91
100
|
import {
|
|
101
|
+
claimCueLineCallerJob,
|
|
92
102
|
continueCueLineRun,
|
|
93
103
|
createCodexIabAdapter,
|
|
104
|
+
heartbeatCueLineCallerJob,
|
|
94
105
|
runCueLine,
|
|
106
|
+
startCueLineCallerJob,
|
|
95
107
|
submitCueLineCallerJobResult,
|
|
96
108
|
} from "cueline";
|
|
97
109
|
|
|
98
110
|
let result = await runCueLine({
|
|
99
111
|
request: "Inspect the repository, delegate an implementation plan, and report the evidence.",
|
|
100
|
-
browser: createCodexIabAdapter(),
|
|
112
|
+
browser: createCodexIabAdapter({ browser: globalThis.browser }),
|
|
113
|
+
// opt-in:archiveControllerConversationOnComplete: true,
|
|
101
114
|
// 任意:conversationUrl、routingConfig / routingConfigPath、home、cwd、
|
|
102
115
|
// runTimeoutMs、signal、ジョブごと/既定の期限。
|
|
103
116
|
}); // 既定は executor: "caller"
|
|
104
117
|
|
|
105
|
-
while (
|
|
118
|
+
while (["awaiting_controller", "awaiting_caller", "awaiting_caller_work"].includes(result.status)) {
|
|
106
119
|
if (result.status === "awaiting_controller") {
|
|
107
120
|
await waitBeforeNextObservation(); // 有界バックオフ。再送しない
|
|
108
|
-
} else {
|
|
121
|
+
} else if (result.status === "awaiting_caller") {
|
|
109
122
|
for (const job of result.pendingJobs ?? []) {
|
|
110
123
|
const stdout = await executeExactLocalAdvice(job.spec.task);
|
|
111
124
|
await submitCueLineCallerJobResult(result.runId, job.jobId, {
|
|
@@ -113,6 +126,17 @@ while (result.status === "awaiting_controller" || result.status === "awaiting_ca
|
|
|
113
126
|
stdout,
|
|
114
127
|
});
|
|
115
128
|
}
|
|
129
|
+
} else {
|
|
130
|
+
for (const job of result.pendingJobs ?? []) {
|
|
131
|
+
if (job.spec.mode !== "work") continue;
|
|
132
|
+
const claim = await claimCueLineCallerJob(result.runId, job.jobId, { callerId: "stable-codex-task-identity" });
|
|
133
|
+
const proof = { claimId: claim.claimId, callerId: claim.callerId, fencingToken: claim.fencingToken };
|
|
134
|
+
await startCueLineCallerJob(result.runId, job.jobId, proof);
|
|
135
|
+
const stdout = await executeExactLocalWork(job.spec.task, claim.resolvedWorkdir, {
|
|
136
|
+
heartbeat: () => heartbeatCueLineCallerJob(result.runId, job.jobId, proof),
|
|
137
|
+
});
|
|
138
|
+
await submitCueLineCallerJobResult(result.runId, job.jobId, { status: "succeeded", stdout }, { claim: proof });
|
|
139
|
+
}
|
|
116
140
|
}
|
|
117
141
|
result = await continueCueLineRun({ runId: result.runId });
|
|
118
142
|
}
|
|
@@ -122,22 +146,22 @@ if (result.status === "complete") {
|
|
|
122
146
|
}
|
|
123
147
|
```
|
|
124
148
|
|
|
125
|
-
`awaiting_controller`
|
|
149
|
+
`awaiting_controller` は再送なしの読み取り専用観測、`awaiting_caller` は advise の引き渡し、`awaiting_caller_work` は claim、start、実行、heartbeat、claim proof 付き提出の順です。Pro はローカルツールを直接使いません。
|
|
126
150
|
|
|
127
151
|
Codex のランタイムでは、`cueline api path` が出力する絶対パスのモジュールを import します。それがインストールしたパッケージのビルド済み API です。
|
|
128
152
|
|
|
129
|
-
`startCueLineRun` は永続 run を作成して `ready` を返すだけです。`runCueLine` は作成後、永続 controller 観測待ち、caller 引き渡し、または終端まで進めます。owner 不在の `controller_response_pending` で通常送信済みターンが一つだけあり、`safeNextAction: observe` が示される場合、同じ Pro 応答を読み取り専用で観測する待機です。少し待って続行し、再送しません。`safeNextAction: reconcile` は曖昧、手動送信、または複数の保留ターンに使います。owner 不在の `caller_jobs_pending` は正常なローカル引き渡しであり、orphan や ChatGPT 待ちではありません。
|
|
153
|
+
`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 に返します。
|
|
130
154
|
|
|
131
155
|
## CLI
|
|
132
156
|
|
|
133
|
-
CLI はブラウザーを駆動しません。`doctor`、`routing`、`jobs`、`run status`、`api path`、`config path` は読み取り専用です。`install`/`uninstall` はパッケージ所有のスキルリンクだけを変更します。`run reconcile`、`run takeover`、`run reconcile-runtime`、`run cancel`/`run stop`、`job cancel` は監査証拠を追記するか、永続 run/job 状態を変更します。状態を書き込むコマンドの前に `cueline help` で完全な引数を確認してください。
|
|
157
|
+
CLI はブラウザーを駆動しません。`doctor`、`routing`、`jobs`、`runs`、`run status`、`run verify`、`api path`、`config path` は読み取り専用です。`install`/`uninstall` はパッケージ所有のスキルリンクだけを変更します。`run reconcile`、`run takeover`、`run reconcile-runtime`、`run cancel`/`run stop`、`job cancel` は監査証拠を追記するか、永続 run/job 状態を変更します。状態を書き込むコマンドの前に `cueline help` で完全な引数を確認してください。
|
|
134
158
|
|
|
135
159
|
```console
|
|
136
160
|
$ cueline install
|
|
137
161
|
CueLine skill installed: /Users/you/.codex/skills/cueline
|
|
138
162
|
|
|
139
163
|
$ cueline doctor
|
|
140
|
-
CueLine 0.1.
|
|
164
|
+
CueLine 0.1.7
|
|
141
165
|
status ok
|
|
142
166
|
node 22.14.0 ok
|
|
143
167
|
config /usr/local/lib/node_modules/cueline/config/routing.default.json valid
|
|
@@ -146,18 +170,30 @@ caller_ready yes
|
|
|
146
170
|
caller_lanes 1
|
|
147
171
|
process_available_lanes 1
|
|
148
172
|
|
|
173
|
+
$ cueline doctor --json
|
|
174
|
+
{"version":"0.1.7","status":"ok","node":{"version":"22.14.0","ok":true,"requirement":">=22"},...}
|
|
175
|
+
|
|
149
176
|
$ cueline api path
|
|
150
177
|
/usr/local/lib/node_modules/cueline/dist/src/api.js
|
|
151
178
|
|
|
152
179
|
$ cueline routing
|
|
153
180
|
default codex-default available
|
|
154
181
|
|
|
182
|
+
$ cueline routing --json
|
|
183
|
+
{"version":"0.1.7","availableLanes":1,"lanes":[{"name":"default","status":"available","selectedRunnerId":"codex-default"}],...}
|
|
184
|
+
|
|
155
185
|
$ cueline jobs
|
|
156
186
|
No jobs.
|
|
157
187
|
|
|
188
|
+
$ cueline runs
|
|
189
|
+
No runs.
|
|
190
|
+
|
|
158
191
|
$ cueline run status run_... --json
|
|
159
192
|
{"status":"running","executor":"caller","phase":"caller_jobs_pending","runtime":{"ownership":"missing"},...}
|
|
160
193
|
|
|
194
|
+
$ cueline run verify run_... --json
|
|
195
|
+
{"runId":"run_...","outcome":"verified","marker":"valid",...}
|
|
196
|
+
|
|
161
197
|
$ cueline run takeover stale_run_... --json
|
|
162
198
|
{"runId":"stale_run_...","outcome":"taken_over","next":"continue",...}
|
|
163
199
|
|
|
@@ -179,7 +215,7 @@ Node が古すぎる場合、または有効な caller レーンが一つもな
|
|
|
179
215
|
|
|
180
216
|
`CUELINE_CONFIG` はルーティング設定ファイルを選び、`CUELINE_HOME` はローカル状態の置き場所を移します(既定は `~/.cueline`)。
|
|
181
217
|
|
|
182
|
-
Caller はプロセスを起動しません。`process`
|
|
218
|
+
Caller はプロセスを起動しません。`executor: "process"` と `allowProcessExecution: true` を同時に指定した場合だけ、`default` レーンの `codex-default` が隔離された `codex exec --ignore-user-config` を実行します。独立した `advise` の既定同時実行数は全体/レーンごとに 2、`work` を含むバッチは直列です。
|
|
183
219
|
|
|
184
220
|
状態は `CUELINE_HOME` の下に置かれます:
|
|
185
221
|
|
|
@@ -212,7 +248,7 @@ npm pack --dry-run
|
|
|
212
248
|
|
|
213
249
|
## 0.1 の制限
|
|
214
250
|
|
|
215
|
-
テキストコマンドのみ。長文の自動添付変換は対応しますが、意図的なファイルアップロード、画像、Deep Research、Projects、Apps は非対応です。Caller
|
|
251
|
+
テキストコマンドのみ。長文の自動添付変換は対応しますが、意図的なファイルアップロード、画像、Deep Research、Projects、Apps は非対応です。Caller work は明示的な claim/start、process 実行は二重承認が必要です。曖昧な送信や開始済みジョブを自動再試行しません。
|
|
216
252
|
|
|
217
253
|
完全な対応表は [compatibility](docs/compatibility.md) を参照してください。
|
|
218
254
|
|
package/README.ko.md
CHANGED
|
@@ -13,10 +13,19 @@
|
|
|
13
13
|
|
|
14
14
|
**CueLine은 열린 ChatGPT 웹 대화에 판단을 맡깁니다. 대화는 텍스트 명령을 내리고, CueLine이 검증하며, 현재 Codex가 허용된 로컬 작업을 수행합니다.**
|
|
15
15
|
|
|
16
|
-
웹 페이지에는 로컬 도구가 없습니다. 기본 `caller`
|
|
16
|
+
웹 페이지에는 로컬 도구가 없습니다. 기본 `caller` 실행에서 `advise`는 조정용 인계이며, `work`는 지속 claim과 start가 필요합니다. 등록된 워커를 띄우는 process executor는 이중 명시 승인이 필요합니다.
|
|
17
17
|
|
|
18
18
|
CueLine은 독립적인 구현이며 **런타임 npm 의존성이 전혀 없습니다**. Omnilane이나 GPT Relay를 감싼 래퍼가 아닙니다.
|
|
19
19
|
|
|
20
|
+
## 최신 릴리스: 0.1.7
|
|
21
|
+
|
|
22
|
+
- 안전한 run 목록, doctor, watch, timeline, handoff, 무결성 검증, protocol lint, 브라우저 진단, inspect 증거 페이지 기능을 추가했습니다.
|
|
23
|
+
- 탭/버튼 증거, 명령과 라우팅 한도, 원자적 job 상태, 비공개 영속 데이터, workdir ID, runtime/cancel 레코드, CLI 비식별화를 강화했습니다.
|
|
24
|
+
- 영속 `complete` 뒤 정확한 대화만 보관하는 opt-in 기능을 추가했습니다. 클릭 전 fence, Pro 재개/탐색 검사, 모호해진 뒤 재클릭 금지를 적용합니다.
|
|
25
|
+
- 454/454 테스트와 일회용 실제 ChatGPT Web Pro run을 검증했으며, 자연 완료 뒤 한 번만 보관하고 기존 사용자 대화는 건드리지 않았습니다.
|
|
26
|
+
|
|
27
|
+
전체 내용은 [changelog](CHANGELOG.md#017---2026-07-16) 또는 변경 불가능한 [v0.1.7 release](https://github.com/Seraphim0916/cueline/releases/tag/v0.1.7)에서 확인할 수 있습니다.
|
|
28
|
+
|
|
20
29
|
## 실행 한 번은 실제로 이렇게 흘러갑니다
|
|
21
30
|
|
|
22
31
|
<img alt="Caller-first CueLine: ChatGPT가 텍스트 명령을 내리고 현재 Codex가 로컬 조언 작업을 수행하며 CueLine이 완료까지 제한된 증거를 반환합니다." src="docs/assets/cueline-loop-ko.svg" width="100%">
|
|
@@ -25,9 +34,9 @@ CueLine은 독립적인 구현이며 **런타임 npm 의존성이 전혀 없습
|
|
|
25
34
|
|
|
26
35
|
기본값이 아닌 `maxRounds`는 run 생성 시 고정되며 owner가 없는 일시 중지를 가로질러 컨트롤러 총 라운드 수를 셉니다. 이후 계속하기에서는 보통 생략해 지속 값을 재사용하고, 다른 값을 전달하면 예산을 몰래 재설정하거나 늘리지 않고 거부합니다.
|
|
27
36
|
|
|
28
|
-
`startCueLineRun`과 `runCueLine`의 기본값은 `caller`입니다.
|
|
37
|
+
`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는 텍스트 명령을 제안하고 검토할 뿐 로컬 도구를 쓰지 않습니다.
|
|
29
38
|
|
|
30
|
-
|
|
39
|
+
Process 모드는 `executor: "process"`와 `allowProcessExecution: true`가 모두 필요하며, 비종료 계속하기에서도 두 번째 승인을 다시 전달해야 합니다. 번들 route는 `--ignore-user-config`도 사용하므로 숨은 worker가 사용자 설정 MCP server나 그 명령 인자를 로드하지 않습니다. 레인과 후보는 시작 전에 검증되고 셸이나 시작 후 자동 폴백은 사용하지 않습니다.
|
|
31
40
|
|
|
32
41
|
컨트롤러 프로토콜은 라우팅 계층을 명확히 구분합니다. `lane`에는 레인 이름인 `default`를 써야 하며, `codex-default`는 그 레인 안의 후보 러너이지 레인이 아닙니다. CueLine은 작업을 하나라도 등록하기 전에 `dispatch` 전체를 검증합니다. 잘못된 레인이나 러너가 하나라도 있으면 일부를 먼저 실행하지 않고 `dispatch` 전체를 수정하도록 돌려보냅니다.
|
|
33
42
|
|
|
@@ -48,15 +57,15 @@ ChatGPT Pro 구독과 선택된 Pro 모델은 서로 다른 것입니다. 계정
|
|
|
48
57
|
npm 레지스트리에서 설치합니다:
|
|
49
58
|
|
|
50
59
|
```bash
|
|
51
|
-
npm install -g cueline@0.1.
|
|
60
|
+
npm install -g cueline@0.1.7
|
|
52
61
|
cueline install
|
|
53
62
|
cueline doctor
|
|
54
63
|
```
|
|
55
64
|
|
|
56
|
-
대안으로, [v0.1.
|
|
65
|
+
대안으로, [v0.1.7 릴리스](https://github.com/Seraphim0916/cueline/releases/tag/v0.1.7)의 패키지 tarball을 설치할 수도 있습니다. 같은 릴리스에 `.sha256` 체크섬도 함께 있습니다.
|
|
57
66
|
|
|
58
67
|
```bash
|
|
59
|
-
npm install -g https://github.com/Seraphim0916/cueline/releases/download/v0.1.
|
|
68
|
+
npm install -g https://github.com/Seraphim0916/cueline/releases/download/v0.1.7/cueline-0.1.7.tgz
|
|
60
69
|
cueline install
|
|
61
70
|
cueline doctor
|
|
62
71
|
```
|
|
@@ -89,23 +98,27 @@ cueline doctor
|
|
|
89
98
|
|
|
90
99
|
```js
|
|
91
100
|
import {
|
|
101
|
+
claimCueLineCallerJob,
|
|
92
102
|
continueCueLineRun,
|
|
93
103
|
createCodexIabAdapter,
|
|
104
|
+
heartbeatCueLineCallerJob,
|
|
94
105
|
runCueLine,
|
|
106
|
+
startCueLineCallerJob,
|
|
95
107
|
submitCueLineCallerJobResult,
|
|
96
108
|
} from "cueline";
|
|
97
109
|
|
|
98
110
|
let result = await runCueLine({
|
|
99
111
|
request: "Inspect the repository, delegate an implementation plan, and report the evidence.",
|
|
100
|
-
browser: createCodexIabAdapter(),
|
|
112
|
+
browser: createCodexIabAdapter({ browser: globalThis.browser }),
|
|
113
|
+
// opt-in: archiveControllerConversationOnComplete: true,
|
|
101
114
|
// 선택: conversationUrl, routingConfig / routingConfigPath, home, cwd,
|
|
102
115
|
// runTimeoutMs, signal, 작업별/기본 제한 시간.
|
|
103
116
|
}); // 기본 executor: "caller"
|
|
104
117
|
|
|
105
|
-
while (
|
|
118
|
+
while (["awaiting_controller", "awaiting_caller", "awaiting_caller_work"].includes(result.status)) {
|
|
106
119
|
if (result.status === "awaiting_controller") {
|
|
107
120
|
await waitBeforeNextObservation(); // 제한된 백오프. 재전송 금지
|
|
108
|
-
} else {
|
|
121
|
+
} else if (result.status === "awaiting_caller") {
|
|
109
122
|
for (const job of result.pendingJobs ?? []) {
|
|
110
123
|
const stdout = await executeExactLocalAdvice(job.spec.task);
|
|
111
124
|
await submitCueLineCallerJobResult(result.runId, job.jobId, {
|
|
@@ -113,6 +126,17 @@ while (result.status === "awaiting_controller" || result.status === "awaiting_ca
|
|
|
113
126
|
stdout,
|
|
114
127
|
});
|
|
115
128
|
}
|
|
129
|
+
} else {
|
|
130
|
+
for (const job of result.pendingJobs ?? []) {
|
|
131
|
+
if (job.spec.mode !== "work") continue;
|
|
132
|
+
const claim = await claimCueLineCallerJob(result.runId, job.jobId, { callerId: "stable-codex-task-identity" });
|
|
133
|
+
const proof = { claimId: claim.claimId, callerId: claim.callerId, fencingToken: claim.fencingToken };
|
|
134
|
+
await startCueLineCallerJob(result.runId, job.jobId, proof);
|
|
135
|
+
const stdout = await executeExactLocalWork(job.spec.task, claim.resolvedWorkdir, {
|
|
136
|
+
heartbeat: () => heartbeatCueLineCallerJob(result.runId, job.jobId, proof),
|
|
137
|
+
});
|
|
138
|
+
await submitCueLineCallerJobResult(result.runId, job.jobId, { status: "succeeded", stdout }, { claim: proof });
|
|
139
|
+
}
|
|
116
140
|
}
|
|
117
141
|
result = await continueCueLineRun({ runId: result.runId });
|
|
118
142
|
}
|
|
@@ -122,22 +146,22 @@ if (result.status === "complete") {
|
|
|
122
146
|
}
|
|
123
147
|
```
|
|
124
148
|
|
|
125
|
-
`awaiting_controller
|
|
149
|
+
`awaiting_controller`는 재전송 없는 읽기 전용 관측, `awaiting_caller`는 advise 인계, `awaiting_caller_work`는 claim, start, 실행, heartbeat, claim proof 제출 순서입니다. Pro는 로컬 도구를 직접 쓰지 않습니다.
|
|
126
150
|
|
|
127
151
|
Codex 런타임에서는 `cueline api path`가 출력하는 절대 경로 모듈을 import하세요. 그것이 설치한 패키지의 빌드된 API입니다.
|
|
128
152
|
|
|
129
|
-
`startCueLineRun`은 지속 run을 만들고 `ready`만 반환합니다. `runCueLine`은 생성 후 지속 controller 관측 대기, caller 인계 또는 종료 상태까지 진행합니다. owner가 없는 `controller_response_pending`에 정상 전송된 턴이 정확히 하나이고 `safeNextAction: observe`가 표시되면 같은 Pro 응답을 읽기 전용으로 관측하기 위한 대기입니다. 잠시 뒤 계속하고 재전송하지 마세요. `safeNextAction: reconcile`은 모호하거나 수동 전송되었거나 보류 턴이 여러 개인 경우에 사용합니다. owner가 없는 `caller_jobs_pending`은 정상적인 로컬 인계이며 orphan이나 ChatGPT 대기가 아닙니다.
|
|
153
|
+
`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에게 반환합니다.
|
|
130
154
|
|
|
131
155
|
## CLI
|
|
132
156
|
|
|
133
|
-
CLI는 브라우저를 구동하지 않습니다. `doctor`, `routing`, `jobs`, `run status`, `api path`, `config path`는 읽기 전용입니다. `install`/`uninstall`은 패키지가 소유한 스킬 링크만 변경합니다. `run reconcile`, `run takeover`, `run reconcile-runtime`, `run cancel`/`run stop`, `job cancel`은 감사 증거를 추가하거나 지속 run/job 상태를 변경합니다. 상태를 쓰는 명령 전에는 `cueline help`로 전체 인수를 확인하세요.
|
|
157
|
+
CLI는 브라우저를 구동하지 않습니다. `doctor`, `routing`, `jobs`, `runs`, `run status`, `run verify`, `api path`, `config path`는 읽기 전용입니다. `install`/`uninstall`은 패키지가 소유한 스킬 링크만 변경합니다. `run reconcile`, `run takeover`, `run reconcile-runtime`, `run cancel`/`run stop`, `job cancel`은 감사 증거를 추가하거나 지속 run/job 상태를 변경합니다. 상태를 쓰는 명령 전에는 `cueline help`로 전체 인수를 확인하세요.
|
|
134
158
|
|
|
135
159
|
```console
|
|
136
160
|
$ cueline install
|
|
137
161
|
CueLine skill installed: /Users/you/.codex/skills/cueline
|
|
138
162
|
|
|
139
163
|
$ cueline doctor
|
|
140
|
-
CueLine 0.1.
|
|
164
|
+
CueLine 0.1.7
|
|
141
165
|
status ok
|
|
142
166
|
node 22.14.0 ok
|
|
143
167
|
config /usr/local/lib/node_modules/cueline/config/routing.default.json valid
|
|
@@ -146,18 +170,30 @@ caller_ready yes
|
|
|
146
170
|
caller_lanes 1
|
|
147
171
|
process_available_lanes 1
|
|
148
172
|
|
|
173
|
+
$ cueline doctor --json
|
|
174
|
+
{"version":"0.1.7","status":"ok","node":{"version":"22.14.0","ok":true,"requirement":">=22"},...}
|
|
175
|
+
|
|
149
176
|
$ cueline api path
|
|
150
177
|
/usr/local/lib/node_modules/cueline/dist/src/api.js
|
|
151
178
|
|
|
152
179
|
$ cueline routing
|
|
153
180
|
default codex-default available
|
|
154
181
|
|
|
182
|
+
$ cueline routing --json
|
|
183
|
+
{"version":"0.1.7","availableLanes":1,"lanes":[{"name":"default","status":"available","selectedRunnerId":"codex-default"}],...}
|
|
184
|
+
|
|
155
185
|
$ cueline jobs
|
|
156
186
|
No jobs.
|
|
157
187
|
|
|
188
|
+
$ cueline runs
|
|
189
|
+
No runs.
|
|
190
|
+
|
|
158
191
|
$ cueline run status run_... --json
|
|
159
192
|
{"status":"running","executor":"caller","phase":"caller_jobs_pending","runtime":{"ownership":"missing"},...}
|
|
160
193
|
|
|
194
|
+
$ cueline run verify run_... --json
|
|
195
|
+
{"runId":"run_...","outcome":"verified","marker":"valid",...}
|
|
196
|
+
|
|
161
197
|
$ cueline run takeover stale_run_... --json
|
|
162
198
|
{"runId":"stale_run_...","outcome":"taken_over","next":"continue",...}
|
|
163
199
|
|
|
@@ -179,7 +215,7 @@ Node 버전이 너무 낮거나 활성화된 caller 레인이 하나도 없으
|
|
|
179
215
|
|
|
180
216
|
`CUELINE_CONFIG`는 라우팅 설정 파일을 고르고, `CUELINE_HOME`은 로컬 상태의 위치를 옮깁니다(기본값 `~/.cueline`).
|
|
181
217
|
|
|
182
|
-
Caller는 프로세스를 띄우지 않습니다. `process`
|
|
218
|
+
Caller는 프로세스를 띄우지 않습니다. `executor: "process"`와 `allowProcessExecution: true`를 함께 지정한 경우에만 `default` 레인의 `codex-default`가 격리된 `codex exec --ignore-user-config`를 실행합니다. 독립 `advise`의 기본 동시 실행 상한은 전체/레인당 2이고, `work`가 포함된 배치는 직렬입니다.
|
|
183
219
|
|
|
184
220
|
상태는 `CUELINE_HOME` 아래에 놓입니다:
|
|
185
221
|
|
|
@@ -212,7 +248,7 @@ npm pack --dry-run
|
|
|
212
248
|
|
|
213
249
|
## 0.1의 한계
|
|
214
250
|
|
|
215
|
-
텍스트 명령 전용입니다. 긴 텍스트의 자동 첨부 변환은 지원하지만 의도적 파일 업로드, 이미지, Deep Research, Projects, Apps는 지원하지 않습니다. Caller
|
|
251
|
+
텍스트 명령 전용입니다. 긴 텍스트의 자동 첨부 변환은 지원하지만 의도적 파일 업로드, 이미지, Deep Research, Projects, Apps는 지원하지 않습니다. Caller work는 명시적 claim/start, process 실행은 이중 승인이 필요합니다. 모호한 전송이나 이미 시작된 작업은 자동 재시도하지 않습니다.
|
|
216
252
|
|
|
217
253
|
전체 표는 [compatibility](docs/compatibility.md)를 보세요.
|
|
218
254
|
|