codexteer 0.18.1 → 0.19.0
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/CHANGELOG.md +16 -0
- package/README.md +6 -0
- package/docs/distribution.md +4 -0
- package/package.json +1 -1
- package/src/app-server.mjs +4 -4
- package/src/checkpoint.mjs +10 -10
- package/src/cli.mjs +79 -75
- package/src/cloud-cli.mjs +25 -12
- package/src/connection-error.mjs +7 -0
- package/src/desktop-cloud-id.mjs +9 -1
- package/src/desktop-cloud-project.mjs +37 -4
- package/src/desktop-cloud.mjs +10 -2
- package/src/desktop.mjs +9 -9
- package/src/directive.mjs +4 -4
- package/src/evidence.mjs +3 -3
- package/src/findings.mjs +6 -3
- package/src/help-cloud-remote.mjs +399 -0
- package/src/help-errors.mjs +10 -0
- package/src/help-intervention.mjs +492 -0
- package/src/help-local.mjs +508 -0
- package/src/help-observation.mjs +200 -0
- package/src/help-supervision.mjs +253 -0
- package/src/help.mjs +58 -304
- package/src/journal.mjs +22 -7
- package/src/launcher.mjs +6 -6
- package/src/monitor.mjs +2 -2
- package/src/notify.mjs +3 -3
- package/src/observe.mjs +4 -4
- package/src/paged-read.mjs +2 -2
- package/src/resource.mjs +6 -6
- package/src/runner.mjs +5 -5
- package/src/store.mjs +2 -2
- package/src/supervise.mjs +1 -1
- package/src/supervision.mjs +58 -16
- package/src/task-id.mjs +5 -4
- package/src/thread-id.mjs +5 -5
- package/src/wrapper.mjs +2 -2
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { DUPLICATE_INTERVENTION, NODE_VERSION_MISMATCH, OPTIONS_INVALID, RUNTIME_NOT_READY, RUNTIME_UNAVAILABLE, SUPERVISOR_NOT_REGISTERED, SUPERVISOR_ORPHANED, SUPERVISOR_PAUSED, SUPERVISOR_STOPPED } from "./help-errors.mjs";
|
|
2
|
+
import { supervisionSteps, DIGEST_GUIDANCE } from "./prompt.mjs";
|
|
3
|
+
|
|
4
|
+
const THREAD_OPTION = { name: "<THREAD>", text: "DesktopのUUIDかcodex://threads/…、Web Cloudのtask_IDか公式タスクURL、Desktop Cloudのdurable_IDかhostId=durable付きリンク。hostId付きリンクはそのホストを観測する。" };
|
|
5
|
+
const SINCE_OPTION = { name: "--since CURSOR", text: "自分が最後に読了したcursor。その後の新規・更新項目だけを古い順に扱う。readで省略すると直近--limit件、watchで省略すると開始時点が基準。" };
|
|
6
|
+
const READ_PAGE_OPTIONS = [
|
|
7
|
+
{ name: "--limit N", default: "50", text: "1回に返すイベント数の上限。1〜1000。" },
|
|
8
|
+
{ name: "--max-chars N", default: "2000", text: "text・command・出力・差分を項目ごとにこの文字数で切り、[truncated]を付ける。100〜20000。" },
|
|
9
|
+
{ name: "--include-output", text: "コマンド出力と差分本文を含める。省略時は含めない。" },
|
|
10
|
+
{ name: "--full-history", text: "毎回全履歴を取得し、過去の書き換えも検出する。表示件数は同じで遅い。得られるcursorはv1で、続きも--full-historyで読む。v2 cursorとは併用不可。" },
|
|
11
|
+
];
|
|
12
|
+
const STREAM_OPTIONS = [
|
|
13
|
+
{ name: "--stream", text: "止めるまで動く継続監視。--jsonの有無にかかわらずJSON Linesを出す。--until・--timeout-msとは併用不可。" },
|
|
14
|
+
{ name: "--notify all|digest", default: "--stream時はdigest", text: "digestは保留したイベントをまとめて1行で出す。allは変化した読み取りごとに1行出す。digestは--stream専用。" },
|
|
15
|
+
{ name: "--settle-ms N", default: "20000", text: "--notify digest専用。最後の通常イベントからこの時間たつと保留分を出す。1000〜120000。" },
|
|
16
|
+
{ name: "--max-hold-ms N", default: "600000", text: "--notify digest専用。保留を始めてからこの時間たつと必ず出す。10000〜1800000。" },
|
|
17
|
+
{ name: "--poll-ms N", default: "1000。Cloud・Desktop Cloudは5000", text: "照会間隔。250〜10000。単発watchと--streamの両方に効く。" },
|
|
18
|
+
];
|
|
19
|
+
const WATCH_OPTIONS = [
|
|
20
|
+
SINCE_OPTION,
|
|
21
|
+
{ name: "--until change|idle|attention", default: "change", text: "change=--since(省略時は開始時点)以降の変化。idle=statusがidleかnotLoaded。attention=attentionが空でないかsystemError。--streamでは使えない。" },
|
|
22
|
+
{ name: "--timeout-ms N", default: "30000", text: "単発watchの最大待ち時間。0〜60000。--streamでは使えない。" },
|
|
23
|
+
...STREAM_OPTIONS,
|
|
24
|
+
...READ_PAGE_OPTIONS,
|
|
25
|
+
];
|
|
26
|
+
|
|
27
|
+
const STREAM_RETURNS = "--streamはJSON Linesを出す。data.type=observationは差分(events・cursor・has_more。digest時はdigest.reason・held_ms・counts・from_cursor付き)。data.type=connectionは接続状態(watching・reconnecting・recovered)とresume_cursor。異常終了時は最終行がok:falseでdata.stateがneeds_reviewかfailed、終了コード1。SIGINT/SIGTERMでの停止は終了コード0。";
|
|
28
|
+
|
|
29
|
+
const CURSOR_TOO_LARGE_ERROR = { code: "CURSOR_TOO_LARGE", when: "高速方式のcursorに入れる実行中項目が多すぎて上限(1 MiB)を超えた", action: "--full-historyを付けて読む(v1 cursorになり、続きも--full-historyで読む)。" };
|
|
30
|
+
const OBSERVATION_CHANGED_ERROR = { code: "OBSERVATION_CHANGED", when: "読み取り中に新しいターンが始まり、自動の再試行1回でも揃わなかった", action: "同じコマンド(同じ--since)をもう一度実行する。--sinceを外して履歴を飛ばさない。" };
|
|
31
|
+
const CURSOR_ERRORS = [
|
|
32
|
+
{ code: "STALE_CURSOR", when: "cursorが壊れている、別のタスク・ホスト・transportのもの、または履歴の巻き戻しや追跡位置の不一致を検出した", action: "原因を確認し、--sinceを外して現状を読み直す。送信前に再評価する。" },
|
|
33
|
+
{ code: "CURSOR_UPGRADE_REQUIRED", when: "高速方式のタスクに旧v1 cursorを--full-historyなしで渡した", action: "未読差分を続けるなら--full-historyを付ける。高速方式へ移るなら--sinceなしで読み直して新しいcursorを保存する。" },
|
|
34
|
+
OBSERVATION_CHANGED_ERROR,
|
|
35
|
+
CURSOR_TOO_LARGE_ERROR,
|
|
36
|
+
OPTIONS_INVALID,
|
|
37
|
+
];
|
|
38
|
+
const STREAM_ERRORS = [
|
|
39
|
+
{ code: "WATCH_RECONNECT_TIMEOUT", when: "--streamで観測成功後の一時切断が60秒以内に復帰しなかった(data.state=failed)", action: "doctorで接続を確認し、自分が読了したcursorを--sinceに指定して明示的に再開する。" },
|
|
40
|
+
];
|
|
41
|
+
const SUPERVISOR_ERRORS = [
|
|
42
|
+
SUPERVISOR_NOT_REGISTERED,
|
|
43
|
+
SUPERVISOR_STOPPED,
|
|
44
|
+
{ code: "SUPERVISOR_MISMATCH", when: "別の監督セッションがタスクを持つ、または登録時と接続・remote transportが違う", action: "監督を終了してユーザーに知らせる。--supervisorや接続を変えて続けない。" },
|
|
45
|
+
SUPERVISOR_ORPHANED,
|
|
46
|
+
];
|
|
47
|
+
const RUNTIME_ERRORS = [
|
|
48
|
+
RUNTIME_UNAVAILABLE,
|
|
49
|
+
RUNTIME_NOT_READY,
|
|
50
|
+
{ code: "PERMISSION_DENIED", when: "sandbox等でApp Serverのプロセスや実行記録を確認できない", action: "利用者のコマンド承認に同じコマンドと理由を提示できる。拒否されたら停止し、sandbox無効化や別経路での回避はしない。" },
|
|
51
|
+
];
|
|
52
|
+
const TARGET_ERRORS = [
|
|
53
|
+
{ code: "CLOUD_TARGET_CONFLICT", when: "--connectionとタスクIDの種類が合わない", action: "error.expected_connectionの接続で実行し直す。" },
|
|
54
|
+
];
|
|
55
|
+
|
|
56
|
+
const SUPERVISOR_NOTE = "--supervisor付きでは登録済みの監督か確認してから観測し、観測時刻を監督記録に残す。pausedでも観測はできる。";
|
|
57
|
+
const HAS_MORE_NOTE = "has_more:trueならchanged:falseでも、返されたcursorで続きを読み切ってから判断・送信する。";
|
|
58
|
+
const NOTIFICATION_NOTES = [
|
|
59
|
+
"単発watchで--notify digest・--settle-ms・--max-hold-msを指定するとOPTIONS_INVALIDになる。",
|
|
60
|
+
"digestで即時に出すもの: ユーザー入力、ターンの追加と状態変化、plan、最終回答、質問、空でないか変化したattention、タスク状態の変化、読み取り専用以外のコマンド失敗、ファイル変更の失敗。",
|
|
61
|
+
"途中の発言や成功したコマンド・ファイル変更などの通常イベントは、最後の通常イベントから--settle-ms後に出す。",
|
|
62
|
+
"通常イベントが続いても、保留を始めてから--max-hold-msで出す。",
|
|
63
|
+
"読み取り専用コマンド、状態の変わらない実行中コマンド、文脈圧縮・Web検索・画像表示はquietとして--max-hold-msまで保留し、他の理由で出すときに同じ行へ含める。",
|
|
64
|
+
"quietのイベントはcommandとtextも200文字に切る。",
|
|
65
|
+
"読み取り専用の判定はcat・ls・grep・rg・sed -n・find(-exec等なし)・git status/log/diff等の許可リストで行い、リダイレクト・変数展開・コマンド置換を含むと通常扱い。",
|
|
66
|
+
"排出の判定はページを読み切った後のポーリングごとに行うため、処理時間とポーリング間隔ぶん遅れることがある。",
|
|
67
|
+
"接続状態の行と失敗は選別しない。reconnectingの前には保留分を先に出す。",
|
|
68
|
+
"digest.reasonはwake:<種類>・settle・max-hold・capacity・reconnecting・stopped・failedのいずれか。",
|
|
69
|
+
];
|
|
70
|
+
const STREAM_NOTES = [
|
|
71
|
+
"最初の読み取りが成功するとwatchingを出す。--since以降の差分が既にあれば、その差分行がwatchingより先に出ることがある。",
|
|
72
|
+
"観測成功後の接続失敗・タイムアウト・App Server未起動/未準備だけ、reconnectingを出して1→2→4→8→10秒間隔(retry_after_msが長ければそれ)で同じタスクへ再接続する。",
|
|
73
|
+
"再接続は接続・初期化・読み取りを含めて合計60秒まで。復帰するとrecoveredを出し、超えるとWATCH_RECONNECT_TIMEOUTで終了する。",
|
|
74
|
+
"初回の読み取り失敗と、権限・プロトコル・cursor・監督状態などの失敗は再試行せずに終了する。",
|
|
75
|
+
"STALE_CURSOR・CURSOR_UPGRADE_REQUIRED・OBSERVATION_CHANGEDによる終了はdata.state=needs_review、それ以外はfailed。",
|
|
76
|
+
"SIGINT/SIGTERM(Monitorのキャンセルを含む)で接続中・復帰待ちでも止まり、保留分はdigest.reason=stoppedで出してから終了する。",
|
|
77
|
+
"観測の再接続は送信を再試行しない。",
|
|
78
|
+
];
|
|
79
|
+
|
|
80
|
+
export const topics = {
|
|
81
|
+
monitor: {
|
|
82
|
+
title: "Codexタスクを観測・介入・結果確認の順で監督する",
|
|
83
|
+
when: "監督役が指定の監督方針に従って対象タスクを継続観測し、送信が許される場合だけ介入と結果確認をするときの共通手順。手順入りの本文が欲しいならsupervise prompt。",
|
|
84
|
+
usage: [
|
|
85
|
+
"supervise prompt <THREAD> [MESSAGE]",
|
|
86
|
+
"watch <THREAD> --stream [--notify all|digest] [--settle-ms N] [--max-hold-ms N] [--since CURSOR] [--poll-ms N] [--limit N] [--max-chars N] [--include-output] [--full-history]",
|
|
87
|
+
"watch <THREAD> --since CURSOR --until change --timeout-ms N [--include-output]",
|
|
88
|
+
"read <THREAD> [--since CURSOR] [--limit N] [--include-output]",
|
|
89
|
+
],
|
|
90
|
+
options: WATCH_OPTIONS,
|
|
91
|
+
returns: STREAM_RETURNS,
|
|
92
|
+
errors: [
|
|
93
|
+
...CURSOR_ERRORS, ...STREAM_ERRORS, ...SUPERVISOR_ERRORS,
|
|
94
|
+
SUPERVISOR_PAUSED,
|
|
95
|
+
DUPLICATE_INTERVENTION,
|
|
96
|
+
NODE_VERSION_MISMATCH,
|
|
97
|
+
...RUNTIME_ERRORS,
|
|
98
|
+
],
|
|
99
|
+
examples: [
|
|
100
|
+
"codexteer watch <THREAD> --stream --notify digest --since <CURSOR> --include-output --json",
|
|
101
|
+
"codexteer read <THREAD> --since <LAST-CURSOR> --include-output --json",
|
|
102
|
+
"codexteer send <THREAD> '失敗箇所を先に確認してください' --source claude-code --kind review --finding <FINDING-ID> --based-on <CURSOR> --json",
|
|
103
|
+
"codexteer history check <THREAD> <MESSAGE-ID> --json",
|
|
104
|
+
],
|
|
105
|
+
procedure: supervisionSteps(),
|
|
106
|
+
notes: [
|
|
107
|
+
...NOTIFICATION_NOTES,
|
|
108
|
+
...STREAM_NOTES,
|
|
109
|
+
"既存のログ監視を続け、その通知後にread --sinceを呼ぶ運用もできる。",
|
|
110
|
+
],
|
|
111
|
+
see: ["supervise", "supervise prompt", "watch", "read", "send", "findings", "checkpoint", "history", "instructions", "resource"],
|
|
112
|
+
},
|
|
113
|
+
watch: {
|
|
114
|
+
title: "変化・完了・ユーザー対応待ちまで待つ(--streamは止めるまで差分を流す)",
|
|
115
|
+
when: "同じログを繰り返し読まず、次のレビューが必要な時点まで待つとき。1回待つなら単発watch、Claude CodeのMonitor等で継続監視するならwatch --stream。今すぐ読むならread。",
|
|
116
|
+
usage: [
|
|
117
|
+
"watch <THREAD> [--since CURSOR] [--until change|idle|attention] [--timeout-ms N] [--poll-ms N] [--limit N] [--max-chars N] [--include-output] [--full-history]",
|
|
118
|
+
"watch <THREAD> --stream [--notify all|digest] [--settle-ms N] [--max-hold-ms N] [--since CURSOR] [--poll-ms N] [--limit N] [--max-chars N] [--include-output] [--full-history]",
|
|
119
|
+
],
|
|
120
|
+
options: [THREAD_OPTION, ...WATCH_OPTIONS],
|
|
121
|
+
returns: `単発watchは条件成立か時間切れで1回返す。readのdataにreason(change・idle・attention・timeout)とtimed_outを加える。--sinceなしの時間切れはevents:[]・changed:false。${STREAM_RETURNS}`,
|
|
122
|
+
errors: [...CURSOR_ERRORS, ...STREAM_ERRORS, ...SUPERVISOR_ERRORS, ...RUNTIME_ERRORS, ...TARGET_ERRORS],
|
|
123
|
+
procedure: [DIGEST_GUIDANCE],
|
|
124
|
+
examples: [
|
|
125
|
+
"codexteer watch <THREAD> --stream --notify digest --since <CURSOR> --include-output --json",
|
|
126
|
+
"codexteer watch <THREAD> --since <CURSOR> --json",
|
|
127
|
+
"codexteer watch <THREAD> --until idle --timeout-ms 60000 --json",
|
|
128
|
+
],
|
|
129
|
+
notes: [
|
|
130
|
+
"--sinceなしのchangeは開始時点を基準に次の変化を待つ。idle・attentionは既に成立していればすぐ返す。",
|
|
131
|
+
HAS_MORE_NOTE,
|
|
132
|
+
"readと同じ差分取得を使う。--full-historyは毎回の全取得になるので、通常の監視では使わない。cursorの種類と移行はhelp read。",
|
|
133
|
+
"単発watchは接続失敗を再試行せず、そのままエラーで終わる。",
|
|
134
|
+
"--until・--timeout-ms・--poll-msの値は接続前に検査し、範囲外ならOPTIONS_INVALIDで止まる。",
|
|
135
|
+
...NOTIFICATION_NOTES,
|
|
136
|
+
...STREAM_NOTES,
|
|
137
|
+
"平常時は差分行だけを出し、定期的な生存通知は出さない。",
|
|
138
|
+
"接続行のresume_cursorはCLIが出力を終えた位置か開始時の基準で、AIが読了した証明ではない。",
|
|
139
|
+
"watchが終了したら、自分が最後に読了したcursorを--sinceに指定して明示的に再開する。",
|
|
140
|
+
"recovered後もhas_more:trueなら差分を読み切ってから判断する。",
|
|
141
|
+
SUPERVISOR_NOTE,
|
|
142
|
+
"読み取り専用のポーリングで、自動送信・タスク再開・承認回答・常駐登録はしない。",
|
|
143
|
+
],
|
|
144
|
+
see: ["read", "monitor", "status", "connection"],
|
|
145
|
+
},
|
|
146
|
+
read: {
|
|
147
|
+
title: "直近の発言・コマンド・変更ファイルを読む",
|
|
148
|
+
when: "レビューや送信の前、または前回のcursorから何が変わったかを1回確認するとき。変化を待つならwatch、状態だけならstatus。",
|
|
149
|
+
usage: ["read <THREAD> [--since CURSOR] [--limit N] [--max-chars N] [--include-output] [--full-history]"],
|
|
150
|
+
options: [THREAD_OPTION, SINCE_OPTION, ...READ_PAGE_OPTIONS],
|
|
151
|
+
returns: "data.events(各項目にchange: added|updated)、status・active_turn_id・attention、running_commands、次回用cursor、changed、has_more、omitted_older_events、history_scope、observed_at。高速方式ではrunning_commands_completeも返す。--jsonなしは状態行・イベント行・cursor行。",
|
|
152
|
+
errors: [...CURSOR_ERRORS, ...SUPERVISOR_ERRORS, ...RUNTIME_ERRORS, ...TARGET_ERRORS],
|
|
153
|
+
examples: [
|
|
154
|
+
"codexteer read <THREAD> --json",
|
|
155
|
+
"codexteer read <THREAD> --since <CURSOR> --include-output --json",
|
|
156
|
+
"codexteer read <THREAD> --full-history --since <V1-CURSOR> --json",
|
|
157
|
+
],
|
|
158
|
+
notes: [
|
|
159
|
+
HAS_MORE_NOTE,
|
|
160
|
+
"既定の高速方式は直近のページと追跡中の実行項目だけを取得し、長いタスクでも毎回の全取得を避ける。",
|
|
161
|
+
"--sinceなしの初回だけ実行中ターンを調べ、表示範囲より前の実行中コマンドも追跡する。",
|
|
162
|
+
"running_commands_complete:falseは読み残しがあり、running_commandsが不完全な状態(高速方式のみ)。",
|
|
163
|
+
"history_scope=tail-and-tracked-itemsは高速方式で、ターン列・末尾・追跡項目だけを確認する。過去全文の書き換え検出には--full-historyを使う。",
|
|
164
|
+
"history_scope=fullは全取得。ページ化されていない古い形式のタスクとCloud・Desktop Cloudのタスクは常に全取得になる。",
|
|
165
|
+
"リモートのnative経路ではhistory_scope=desktop-native-public-historyになる。",
|
|
166
|
+
"v1 cursor(全取得)とv2 cursor(高速方式)は混在できない。",
|
|
167
|
+
"v2 cursorに--full-historyを付けるとOPTIONS_INVALID。--full-historyを外して続けるか、--sinceなしで全取得を始める。",
|
|
168
|
+
"omitted_older_events:nullは省略した古い項目の件数が未集計という意味。件数のための全取得はしない。",
|
|
169
|
+
"cursorは対象タスク・ホスト・remote transportに結び付く。別の対象に渡すとSTALE_CURSOR。",
|
|
170
|
+
"観測対象は履歴APIに現れた項目だけ。",
|
|
171
|
+
"Codexの版によっては、実行開始の通知後、コマンドが完了してから履歴に現れる場合がある。",
|
|
172
|
+
"内部推論は出力しない。",
|
|
173
|
+
"観測でタスクを再開・送信・前面化しない。",
|
|
174
|
+
SUPERVISOR_NOTE,
|
|
175
|
+
],
|
|
176
|
+
see: ["watch", "status", "monitor", "connection"],
|
|
177
|
+
},
|
|
178
|
+
status: {
|
|
179
|
+
title: "実行中・停止中・承認待ちを確認する",
|
|
180
|
+
when: "今ステアできるか、新規ターンが必要か、ユーザーの応答が必要かを判断するとき。発言やコマンドの中身が要るならread。",
|
|
181
|
+
usage: ["status <THREAD> [--full-history]"],
|
|
182
|
+
options: [
|
|
183
|
+
THREAD_OPTION,
|
|
184
|
+
{ name: "--full-history", text: "readの--full-historyと同じ全取得方式で状態とcursorを得る。返るcursorはv1。" },
|
|
185
|
+
],
|
|
186
|
+
returns: "data.status(active・idle・notLoaded・systemErrorなど。取得できなければunknown)、active_turn_id、attention、running_commands、cursor、history_scope。eventsは返さない。--jsonなしは状態行・実行中ターン・cursor行。",
|
|
187
|
+
errors: [OBSERVATION_CHANGED_ERROR, CURSOR_TOO_LARGE_ERROR, ...SUPERVISOR_ERRORS, ...RUNTIME_ERRORS, ...TARGET_ERRORS, OPTIONS_INVALID],
|
|
188
|
+
examples: ["codexteer status <THREAD> --json"],
|
|
189
|
+
notes: [
|
|
190
|
+
"--sinceなしのreadと同じ取得方式で状態だけを返す。返したcursorからread --sinceへ進める。",
|
|
191
|
+
"statusで指定できるのは--full-historyだけ。差分や本文はreadで読む。",
|
|
192
|
+
"notLoadedは保存済みタスクが未ロードという意味。statusはタスクをロードしない。",
|
|
193
|
+
"attentionはApp Serverが報告した値で、本文から推測しない。nullはactiveでフラグ未報告、[]は該当なし。",
|
|
194
|
+
"Web Cloudのタスクではattentionは常に[]で、承認待ちを表さない。",
|
|
195
|
+
"承認や質問には回答しない。",
|
|
196
|
+
SUPERVISOR_NOTE,
|
|
197
|
+
],
|
|
198
|
+
see: ["read", "watch", "send"],
|
|
199
|
+
},
|
|
200
|
+
};
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
import { NODE_VERSION_MISMATCH, OPTIONS_INVALID, STORE_UNSAFE, SUPERVISOR_NOT_REGISTERED, SUPERVISOR_ORPHANED, SUPERVISOR_PAUSED, SUPERVISOR_STOPPED } from "./help-errors.mjs";
|
|
2
|
+
const THREAD_OPTION = { name: "THREAD", text: "対象タスク。ローカルUUID、codex://threads/<UUID>[?hostId=...]、Cloudのtask_ IDか公式タスクURL、Desktop Cloudのdurable_ IDかhostId=durableのリンク。正規化して本文に埋め込む。" };
|
|
3
|
+
const MESSAGE_OPTION = { name: "MESSAGE", default: "標準方針", text: "監督方針。指定すると標準方針全体を置き換える。引用して一つの引数で渡す。空白だけはINVALID_SUPERVISION_POLICY、--で始まる文はOPTIONS_INVALID。" };
|
|
4
|
+
const AGENT_IDENTITY = "監督IDのowner(register --owner)と本文のsend --source(claudeはclaude-code)にもなる。claude/codex以外は生成前にOPTIONS_INVALIDで拒否する。";
|
|
5
|
+
const CONNECTION_OPTION = { name: "--connection shared|desktop|cloud|desktop-cloud", default: "shared", text: "本文の全コマンドに埋め込む接続。sharedは既存wrapper、desktopは既存の共有制御ソケットで観測専用。省略時、task_ IDはcloud、durable_ IDはdesktop-cloudを選び、同じ監督・送信・観測を使う。明示値がIDと合わなければ拒否し、切り替えない。詳細はhelp connection・help cloud。" };
|
|
6
|
+
const PATH_CLI_TEXT = "本文のコマンドをPATH上のcodexteerにする。CLIの保存・Nodeの固定・CODEX_HOMEの埋め込みをせず、各コマンドは実行環境のPATHとCODEX_HOMEを使う。CLIの更新は次の実行から反映される。";
|
|
7
|
+
const AGENT_ARGS_OPTION = { name: "-- <AGENT-ARGS...>", text: "最初の -- 以降はすべて起動するエージェントの引数。codexteerは--help/--version/--jsonも解釈しない。MESSAGE/GOALとcodexteer自身のオプションは -- より前に置く。" };
|
|
8
|
+
const REMOTE_OPTIONS = [
|
|
9
|
+
{ name: "--host HOST-ID", text: "リモートの対象を選ぶ。hostId付きリンクでも選べ、両方が違えばHOST_MISMATCH。リモートでは--connectionはsharedだけ。詳細はhelp remote。" },
|
|
10
|
+
{ name: "--remote-transport native|control|paired", default: "native", text: "nativeは観測専用の監督を生成する。controlはRemote Control v3で既存activeターンへexpectedTurnId付きで介入する(help remote-control)。pairedは専用鍵の経路(help remote-device)。" },
|
|
11
|
+
{ name: "--context-thread LOCAL-THREAD", default: "CODEX_THREAD_ID", text: "ローカルの呼出し元タスク。nativeでは必須で、どちらもなければREMOTE_CONTEXT_REQUIRED。値があれば全コマンドに埋め込む。" },
|
|
12
|
+
];
|
|
13
|
+
const PROJECT_OPTION = { name: "--project ID|NAME", text: "必須。対象プロジェクトのIDか完全一致名。生成時は照合せず、本文を受けたオーケストレーターがprojects listで照合する。" };
|
|
14
|
+
const GOAL_TEXT = "達成したい目標。引用した一つの引数か、標準入力を読む -。改行・引用符・プレースホルダーは評価せずそのまま本文に入れる。";
|
|
15
|
+
|
|
16
|
+
const LAUNCH_RETURNS = "起動したエージェントの標準入力・標準出力・標準エラーと終了コードをそのまま引き継ぎ、codexteerの出力は混ぜない。シグナル終了は128+シグナル番号。起動失敗と引数エラーは標準エラーに「codexteer: 理由」だけを出し(エラーコードは出ない)、終了コード1。--jsonを付けた場合だけ、その拒否をJSONのOPTIONS_INVALIDで返す。";
|
|
17
|
+
|
|
18
|
+
const SESSION_ERRORS = [
|
|
19
|
+
{ code: "SUPERVISOR_CONFLICT", when: "registerした対象に別のactive/paused監督がいる(異常終了で残った登録を含む)。または同じ監督IDが別タスクに登録済み。", action: "置き換えずユーザーに知らせる。不要な旧監督はユーザーがsupervise stopしてから、新しい本文で始める。" },
|
|
20
|
+
SUPERVISOR_STOPPED,
|
|
21
|
+
{ code: "SUPERVISOR_MISMATCH", when: "コマンドの監督ID・--connection・remote transportが登録と違う(古い本文や別セッション)。", action: "その監督を終了する。生成されたコマンドを変えずに使っていたか確認する。" },
|
|
22
|
+
SUPERVISOR_NOT_REGISTERED,
|
|
23
|
+
SUPERVISOR_PAUSED,
|
|
24
|
+
{ code: "SUPERVISOR_CONTROL_FORBIDDEN", when: "監督ID付きでsupervise list/pause/resume/stop、またはsupervise・supervise promptを実行した。", action: "制御と新しい監督の生成はユーザーが端末から--supervisorなしで行う。監督は自分の状態を変えず、代わりのセッションを作らない。" },
|
|
25
|
+
{ code: "SUPERVISOR_INVALID", when: "監督IDがUUID形式でない、--ownerが「英数字で始まる英数字._-の1〜80文字」でない、または保存された監督記録が不正。", action: "生成された値をそのまま使う。記録が不正なら介入を止めてユーザーに報告する。" },
|
|
26
|
+
{ code: "RECORD_BUSY", when: "送信などで同じタスクの監督記録がロック中にpause/resume/stopした。", action: "配送結果を確認してから制御を再実行する。成功するまで停止済みと扱わない。" },
|
|
27
|
+
OPTIONS_INVALID,
|
|
28
|
+
STORE_UNSAFE,
|
|
29
|
+
];
|
|
30
|
+
const LAUNCHER_ERRORS = [
|
|
31
|
+
SUPERVISOR_ORPHANED,
|
|
32
|
+
{ code: "PERMISSION_DENIED", when: "sandboxが起動元プロセスの生存確認を拒否した(status/list・監督ID付きコマンド)。", action: "生存を推測しない。ユーザーの端末か、通常のコマンド承認で同じコマンドを実行する。" },
|
|
33
|
+
];
|
|
34
|
+
const GENERATION_ERRORS = [
|
|
35
|
+
{ code: "INVALID_SUPERVISION_POLICY", when: "MESSAGEが空、または空白だけ。", action: "方針文を入れるか、MESSAGEを省略して標準方針を使う。" },
|
|
36
|
+
{ code: "CLOUD_TARGET_CONFLICT", when: "明示した--connectionがタスクIDの種類と合わない(例: task_ IDにshared/desktop)。Cloudタスクに--host等を付けた場合も。", action: "error.expected_connectionの接続で指定し直すか、--connectionを省略する。Cloudタスクには--host・--remote-transport・--context-threadを付けない。自動では切り替わらない。" },
|
|
37
|
+
{ code: "CLOUD_OPTIONS_INVALID", when: "ローカルUUIDかdurable_ IDに--connection cloudを付けた。Cloud経路での引数の不足・過剰も同じコード。", action: "error.expected_connectionがあればその接続で指定し直す。なければusageどおりに引数を直す。" },
|
|
38
|
+
{ code: "REMOTE_CONTEXT_REQUIRED", when: "nativeリモートの生成で--context-threadもCODEX_THREAD_IDもない。", action: "Codex内で実行するか、--context-thread <ローカルUUID>を付ける。" },
|
|
39
|
+
{ code: "REMOTE_CONTEXT_INVALID", when: "--context-threadが別ホストのリンク。読取り時は保存済みターンのあるローカルタスクでない場合も。", action: "保存済みターンを持つローカルタスクを指定し直す。" },
|
|
40
|
+
{ code: "HOST_CONNECTION_MISMATCH", when: "リモート対象にshared以外の--connectionを指定した。", action: "--connectionを省略する(shared)。" },
|
|
41
|
+
];
|
|
42
|
+
const SAVED_CLI_ERRORS = [
|
|
43
|
+
{ code: "DEPLOYMENT_BUSY", when: "同じ版の保存処理のロック(runtimes/.install-<id>)が約5秒たっても解放されない。", action: "同時実行の終了を待って再実行する。残り続けるならユーザーにロックの確認を求める。自動では奪わない。" },
|
|
44
|
+
{ code: "DEPLOYMENT_MODIFIED", when: "保存済みCLIの中身が実行中の配布物と一致しない、または不完全。", action: "本文は出力されない。自動で上書き・削除しないため、ユーザーに報告する。" },
|
|
45
|
+
{ code: "DEPLOYMENT_UNSAFE", when: "CODEX_HOME・保存先・配布物の所有者・権限・リンク・種類が安全条件を満たさない。", action: "権限等を直してから再実行する。自動修復はしない。" },
|
|
46
|
+
{ code: "SUPERVISION_PATH_UNSAFE", when: "埋め込むパス(CODEX_HOME・Node・保存先など)に制御文字がある。", action: "制御文字のないパスの環境から生成し直す。" },
|
|
47
|
+
NODE_VERSION_MISMATCH,
|
|
48
|
+
];
|
|
49
|
+
const ORCHESTRATION_ERRORS = [
|
|
50
|
+
{ code: "PROJECT_REQUIRED", when: "--projectがない、または空白だけ。", action: "プロジェクトIDか完全一致名を指定する(一覧はprojects list)。" },
|
|
51
|
+
{ code: "INVALID_ORCHESTRATION_PROJECT", when: "--projectに制御文字がある。", action: "制御文字のないIDか名前を指定する。" },
|
|
52
|
+
{ code: "INVALID_ORCHESTRATION_GOAL", when: "GOALが空、または空白だけ。", action: "目標を一つの引数か標準入力の - で渡す。" },
|
|
53
|
+
{ code: "INVALID_ORCHESTRATION_AGENT", when: "--agentがclaude/codex以外。", action: "claudeかcodexを指定する。orchestrate promptでは省略もできる。" },
|
|
54
|
+
{ ...OPTIONS_INVALID, when: "未知のオプション、GOALが1つでない、orchestrate(promptなし)に--jsonを付けた。" },
|
|
55
|
+
{ code: "SUPERVISOR_CONTROL_FORBIDDEN", when: "--supervisor付きで実行した。監督IDは既存の1タスクに束縛されている。", action: "監督IDを外し、ユーザーの端末から実行する。" },
|
|
56
|
+
{ code: "DESKTOP_READ_ONLY", when: "--connection desktopを指定した。", action: "--connectionを省略する(shared)。" },
|
|
57
|
+
{ code: "CLOUD_CAPABILITY_UNSUPPORTED", when: "--connection cloudかdesktop-cloudを指定した。Cloud経路にorchestrateはない。", action: "--connectionを省略する。Cloudの作業はhelp cloud / help desktop-cloud。" },
|
|
58
|
+
{ code: "REMOTE_READ_ONLY", when: "既定のnative経路で--hostを指定した。", action: "リモートでは--remote-transport pairedを明示する(help remote)。" },
|
|
59
|
+
];
|
|
60
|
+
|
|
61
|
+
const LAUNCH_NOTES = [
|
|
62
|
+
"PATH上のclaudeまたはcodexを、現在の作業ディレクトリ・環境変数・端末入出力のまま起動する。シェルのalias・functionは使わない。",
|
|
63
|
+
"エージェント引数は順序・空文字・空白・改行を保ち、シェルで再展開しない。必要な引用は呼び出し元のシェルで行う。",
|
|
64
|
+
"エージェント引数の後ろに、エージェント側の -- と生成本文を一つの引数として追加する。引数の意味と組み合わせの妥当性はエージェントが判断する。",
|
|
65
|
+
"SIGINT/SIGTERM/SIGHUPは起動したエージェントへ転送する。",
|
|
66
|
+
"起動側はDesktopへ接続しない。接続と対象の確認は、起動したエージェントが本文の開始手順で行う。",
|
|
67
|
+
];
|
|
68
|
+
const SESSION_NOTES = [
|
|
69
|
+
"生成のたびに新しい監督ID(--supervisor)を作り、--connectionとともに本文の全コマンドへ埋め込む。",
|
|
70
|
+
"superviseは起動前にregisterし、エージェント終了時にstopする。supervise promptは未登録で、受け取った側が本文のregisterを実行して開始する。",
|
|
71
|
+
"同じ監督IDの再registerは状態を変えない(pausedは解除しない)。停止済みIDは復活しない。",
|
|
72
|
+
"pauseは送信だけを止め、read/watchは続けられる。resumeで送信を再開する。stopはその監督IDの観測と送信を止める。",
|
|
73
|
+
"pause/stopはCodexタスクもエージェントのプロセスも止めない。エージェントを終えるには、そのエージェントに終了を指示する。",
|
|
74
|
+
"list/pause/resume/stopはユーザーの端末から--supervisorなしで実行する。監督IDを付けられる監督サブコマンドはregisterとstatusだけ。",
|
|
75
|
+
"監督IDを付けたsupervise/supervise promptはSUPERVISOR_CONTROL_FORBIDDENで拒否する。監督は代わりのセッションを作れない。",
|
|
76
|
+
"activeは登録状態であり、AIが読んだことや監視を続けていることの証明ではない。",
|
|
77
|
+
"--supervisorのないコマンド(以前の版の本文を含む)にはpause/stopが効かない。監督IDは秘密ではなく、同じOSユーザーの別操作は防がない。",
|
|
78
|
+
"desktop接続とnativeリモートの本文は観測専用。送信手順を含まず、方針に送信の指示があっても送信しない。",
|
|
79
|
+
"観測専用の本文では、MESSAGE省略時の方針も観測と報告だけになる(介入しない)。",
|
|
80
|
+
"標準方針は、目的・制約の範囲での必要最小限の介入と結果確認、簡潔な報告。",
|
|
81
|
+
"MESSAGEを指定しても、対象ID・実行コマンド・開始/観測/介入/停止の手順は本文に残る。手順はhelp monitorと共通。",
|
|
82
|
+
"MESSAGEは改行等もそのまま本文に入れ、プレースホルダー展開やシェル実行はしない。今回の生成だけに使い、既定設定や保存済みCLIは変えない。",
|
|
83
|
+
"controlの本文は既存activeターンへの介入だけで、new-turn・UI送信・自動再送はしない。端末鍵を使えなければ接続前に止まる(help remote-control)。",
|
|
84
|
+
"リモートの本文は全コマンドで同じ--host・--remote-transport・--context-threadを保持する。",
|
|
85
|
+
];
|
|
86
|
+
const SAVED_CLI_NOTES = [
|
|
87
|
+
"既定ではCLI一式と依存をCODEX_HOME/codex-steer/runtimes/<version>-<sha256>へ検証して保存し、そのコピーを本文のコマンドに使う。",
|
|
88
|
+
"同じ内容の保存先があれば検証して再利用する。既存のコピーは上書き・自動削除しない。",
|
|
89
|
+
"保存・検証に失敗すると本文を出力せず、エージェントも起動しない。",
|
|
90
|
+
"本文の各コマンドは、生成時に検証したCODEX_HOMEの実体パス、Nodeの実体の絶対パス、--require-node-versionを含む。",
|
|
91
|
+
"監督役のCODEX_HOMEや作業ディレクトリが違っても、生成元の接続先と履歴を使う。別のプロファイルを監督するときはそこで生成し直す。",
|
|
92
|
+
"Node本体はコピーしない。版が変わるとNODE_VERSION_MISMATCHで操作前に止まる。同じ版のNodeの差し替えや共有ライブラリは固定しない。",
|
|
93
|
+
"元のnpxキャッシュやチェックアウトを更新・削除しても、保存したコピーを使い続ける。",
|
|
94
|
+
"監督中は同じPCで、保存したコピーと元のNodeを残す。使えなくなったら介入を止めて報告し、意図した環境から生成し直す。",
|
|
95
|
+
"本文を受けたAIは、ヘルプ中のcodexteerを本文の実行コマンド(先頭のCODEX_HOME指定・引用・オプションを含む)に置き換える。",
|
|
96
|
+
];
|
|
97
|
+
|
|
98
|
+
const ORCH_SHARED_NOTES = [
|
|
99
|
+
"オーケストレーターの役割はモデルに依存せず、Codex自身も担当できる。",
|
|
100
|
+
"入力(--supervisor・--connection・--project・GOAL・--agent)が不正なら、CLIの保存より前に止まる。",
|
|
101
|
+
"保存済みCLI方式(既定)の保存・検証・Nodeの固定はsupervise promptと同じ。",
|
|
102
|
+
"リモートは--host HOST-ID --remote-transport pairedのときだけ使える(help remote)。",
|
|
103
|
+
];
|
|
104
|
+
|
|
105
|
+
export const topics = {
|
|
106
|
+
supervise: {
|
|
107
|
+
title: "指定したCodexタスクの監督役としてClaudeまたはCodex CLIを起動し、監督状態を確認・制御する",
|
|
108
|
+
when: "対象タスクIDを決めて、Claude CodeまたはCodex CLIを監督役の対話セッションとして起動するとき。起動せず本文だけ欲しいときはsupervise prompt、プロジェクト単位で担当の作成から任せるときはorchestrate。",
|
|
109
|
+
usage: [
|
|
110
|
+
"supervise <THREAD> [MESSAGE] [--agent claude|codex] [--connection shared|desktop|cloud|desktop-cloud] [--use-path-cli] [-- <AGENT-ARGS...>]",
|
|
111
|
+
"supervise status <THREAD>",
|
|
112
|
+
"supervise list",
|
|
113
|
+
"supervise pause|resume|stop <THREAD>",
|
|
114
|
+
"--supervisor <SESSION-ID> supervise register <THREAD> [--owner NAME]",
|
|
115
|
+
],
|
|
116
|
+
options: [
|
|
117
|
+
THREAD_OPTION,
|
|
118
|
+
MESSAGE_OPTION,
|
|
119
|
+
{ name: "--agent claude|codex", default: "claude", text: `起動する監督エージェント。${AGENT_IDENTITY}` },
|
|
120
|
+
CONNECTION_OPTION,
|
|
121
|
+
{ name: "--use-path-cli", text: `${PATH_CLI_TEXT}--supervisor・--connectionと監督制御は維持する。直接起動でもCODEX_HOMEの所有者と権限は検証する。` },
|
|
122
|
+
AGENT_ARGS_OPTION,
|
|
123
|
+
...REMOTE_OPTIONS,
|
|
124
|
+
{ name: "--supervisor <SESSION-ID>", text: "生成本文の監督ID。registerには必須(ないと引数エラー)。statusに付けると自分の登録か照合し、違えばSUPERVISOR_MISMATCH。" },
|
|
125
|
+
{ name: "--owner NAME", default: "external", text: "registerで記録する監督名。本文のregisterには--agentの値が入っている。" },
|
|
126
|
+
],
|
|
127
|
+
returns: `直接起動: ${LAUNCH_RETURNS}--jsonは使えない。status/list/pause/resume/stop/register(--jsonなしは要約行): 監督記録(thread_id、session_id、owner、connection、state=active|paused|stopped、launcher_pid、last_delivery、last_error)。statusは加えてlauncher_alive(コピーした本文はnull)、observation(connection・last_observed_at)、observation_age_ms、未解決の指摘(unresolved_findings、最大20件とtotal)を返し、未登録ならstate=unregistered。listは全登録の配列で、同じ監督IDの重複はsession_conflict.thread_idsで示す。`,
|
|
128
|
+
errors: [...SESSION_ERRORS, ...LAUNCHER_ERRORS, ...GENERATION_ERRORS, ...SAVED_CLI_ERRORS],
|
|
129
|
+
examples: [
|
|
130
|
+
"codexteer supervise <THREAD>",
|
|
131
|
+
"codexteer supervise <THREAD> --use-path-cli",
|
|
132
|
+
"codexteer supervise <THREAD> \"セキュリティの問題だけを私へ報告し、Codexへは送信しないでください。\"",
|
|
133
|
+
"codexteer supervise <THREAD> \"テスト失敗を優先して監督してください。\" --agent claude -- --model <MODEL> --effort <LEVEL>",
|
|
134
|
+
"codexteer supervise status <THREAD> --json",
|
|
135
|
+
"codexteer supervise stop <THREAD> --json",
|
|
136
|
+
],
|
|
137
|
+
notes: [
|
|
138
|
+
...LAUNCH_NOTES,
|
|
139
|
+
"引数エラー(ID形式・空のMESSAGE・--agentの値・-- より前の未知や過剰な引数)は、CLI保存・登録・起動の前に止まる。",
|
|
140
|
+
"終了時のstopに失敗すると「Supervisor cleanup failed」を標準エラーに出す。supervise statusで確認してから次を始める。",
|
|
141
|
+
"本文をJSONで取得するにはsupervise prompt --json、このヘルプのJSONはhelp supervise --json。",
|
|
142
|
+
...SESSION_NOTES,
|
|
143
|
+
...SAVED_CLI_NOTES,
|
|
144
|
+
],
|
|
145
|
+
see: ["supervise prompt", "orchestrate", "monitor", "connection", "cloud", "desktop-cloud", "remote", "remote-control", "remote-device", "send", "findings"],
|
|
146
|
+
},
|
|
147
|
+
|
|
148
|
+
"supervise prompt": {
|
|
149
|
+
title: "監督役(オーケストレーター)向けの初期プロンプトを出力する(起動・登録はしない)",
|
|
150
|
+
when: "対象タスク入りの監督用本文を、エージェントを起動せずに取得・確認するとき(既存のエージェントへ貼り付ける、orchestrateの子監督を作るなど)。起動まで行うときはsupervise。",
|
|
151
|
+
usage: ["supervise prompt <THREAD> [MESSAGE] [--agent claude|codex] [--connection shared|desktop|cloud|desktop-cloud] [--use-path-cli]"],
|
|
152
|
+
options: [
|
|
153
|
+
THREAD_OPTION,
|
|
154
|
+
MESSAGE_OPTION,
|
|
155
|
+
{ name: "--agent claude|codex", default: "claude", text: `本文を実行する監督CLIの識別。エージェントは起動しない。${AGENT_IDENTITY}` },
|
|
156
|
+
CONNECTION_OPTION,
|
|
157
|
+
{ name: "--use-path-cli", text: `${PATH_CLI_TEXT}--supervisor・--connectionと監督制御は維持する。生成時は何も書き込まない。` },
|
|
158
|
+
...REMOTE_OPTIONS,
|
|
159
|
+
],
|
|
160
|
+
returns: "通常は本文だけを標準出力へ返す。--json: data.thread_id、data.prompt、data.cli_mode(saved|path)、data.deployment(codex_home・directory・wrapper_path・version・sha256・reused)、data.node(path・version)、data.supervisor(session_id・owner・connection)。--use-path-cliではdeploymentとnodeはnull。リモートではhost_id・remote_transport・observation_onlyも返す。",
|
|
161
|
+
errors: [...GENERATION_ERRORS, ...SAVED_CLI_ERRORS, ...SESSION_ERRORS],
|
|
162
|
+
examples: [
|
|
163
|
+
"codexteer supervise prompt <THREAD>",
|
|
164
|
+
"codexteer supervise prompt <THREAD> --use-path-cli",
|
|
165
|
+
"codexteer supervise prompt <THREAD> \"進捗を観測し、完了時だけ私へ報告してください。Codexへの送信は不要です。\"",
|
|
166
|
+
"codexteer supervise prompt codex://threads/<UUID> --json",
|
|
167
|
+
"codexteer --host <HOST-ID> --context-thread <LOCAL-UUID> supervise prompt <UUID> --use-path-cli --json",
|
|
168
|
+
],
|
|
169
|
+
notes: [
|
|
170
|
+
"生成時はDesktopへの接続・履歴取得・送信・エージェント起動・監督登録をしない。書き込むのは既定方式のCLI保存だけ。",
|
|
171
|
+
"タスクの存在と接続は、本文の開始手順(doctor --thread・register・read)で確かめる。",
|
|
172
|
+
"生成した本文は既存のエージェントへ貼り付けて使える。停止はユーザーの端末からのsupervise stopか、そのセッションへの指示で行う。",
|
|
173
|
+
"本文の監督中、Monitorツールが使えなければ短いwatch(--until change --timeout-ms 30000)を繰り返す。",
|
|
174
|
+
"本文はCLIやOSの権限設定を変更しない。",
|
|
175
|
+
...SESSION_NOTES,
|
|
176
|
+
...SAVED_CLI_NOTES,
|
|
177
|
+
],
|
|
178
|
+
see: ["supervise", "monitor", "orchestrate prompt", "connection", "cloud", "desktop-cloud", "remote", "remote-control", "remote-device"],
|
|
179
|
+
},
|
|
180
|
+
|
|
181
|
+
orchestrate: {
|
|
182
|
+
title: "プロジェクトと目標を渡してオーケストレーター(ClaudeまたはCodex CLI)を起動する",
|
|
183
|
+
when: "既存タスクを指定せず、Codex担当の作成・監督・検収・統合までオーケストレーターに任せるとき。本文だけ欲しいときはorchestrate prompt、既存の1タスクを監督するときはsupervise。",
|
|
184
|
+
usage: [
|
|
185
|
+
"orchestrate --project ID|NAME <GOAL> [--agent claude|codex] [--use-path-cli] [-- <AGENT-ARGS...>]",
|
|
186
|
+
"orchestrate prompt --project ID|NAME <GOAL> [--agent claude|codex] [--use-path-cli]",
|
|
187
|
+
],
|
|
188
|
+
options: [
|
|
189
|
+
PROJECT_OPTION,
|
|
190
|
+
{ name: "GOAL", text: `${GOAL_TEXT}--で始まる目標は - で標準入力から渡す。` },
|
|
191
|
+
{ name: "--agent claude|codex", default: "claude", text: "起動するオーケストレーターのCLI。本文で作る子の監督IDのownerにもなる。" },
|
|
192
|
+
{ name: "--use-path-cli", text: `${PATH_CLI_TEXT}起動するエージェント自体はどちらの方式でもPATHから選ぶ。CODEX_HOMEの所有者と権限は起動前に検証する。` },
|
|
193
|
+
AGENT_ARGS_OPTION,
|
|
194
|
+
],
|
|
195
|
+
returns: `${LAUNCH_RETURNS}--jsonは使えない。本文のJSONはorchestrate prompt --json。`,
|
|
196
|
+
errors: [...ORCHESTRATION_ERRORS, ...SAVED_CLI_ERRORS],
|
|
197
|
+
examples: [
|
|
198
|
+
"codexteer orchestrate --project 'My Project' '達成したい目標' --use-path-cli",
|
|
199
|
+
"codexteer orchestrate --project 'My Project' '達成したい目標' --agent codex -- --model <MODEL>",
|
|
200
|
+
"codexteer orchestrate --project 'My Project' - < goal.txt",
|
|
201
|
+
"codexteer orchestrate prompt --project 'My Project' '利用者が動作を確認し、変更を指示できる状態にする'",
|
|
202
|
+
"codexteer help orchestrate prompt",
|
|
203
|
+
],
|
|
204
|
+
notes: [
|
|
205
|
+
...LAUNCH_NOTES,
|
|
206
|
+
...ORCH_SHARED_NOTES,
|
|
207
|
+
"GOALを - で標準入力から読むと、起動前に標準入力を読み切る。",
|
|
208
|
+
"プロジェクト照合・担当作成・各子の監督登録と監視は、起動したオーケストレーターが本文に従って行う。",
|
|
209
|
+
"プロジェクト用の監督IDは作らない。子ごとにsupervise promptで生成・登録し、pause/stopも子ごとに行う。",
|
|
210
|
+
"本文の委任範囲と役割分担はhelp orchestrate prompt、手順の詳細はdocs/orchestration.md。",
|
|
211
|
+
],
|
|
212
|
+
see: ["orchestrate prompt", "supervise", "supervise prompt", "projects", "thread", "remote"],
|
|
213
|
+
},
|
|
214
|
+
|
|
215
|
+
"orchestrate prompt": {
|
|
216
|
+
title: "プロジェクト・目標・技術判断の分担を委任するオーケストレーター向け初期プロンプトを出力する(起動しない)",
|
|
217
|
+
when: "Codexスレッドの作成から目的達成までを委任する本文を、エージェントを起動せずに取得・確認するとき。起動まで行うときはorchestrate、既存の1タスクを監督するときはsupervise prompt。",
|
|
218
|
+
usage: ["orchestrate prompt --project ID|NAME <GOAL> [--agent claude|codex] [--use-path-cli]"],
|
|
219
|
+
options: [
|
|
220
|
+
PROJECT_OPTION,
|
|
221
|
+
{ name: "GOAL", text: `${GOAL_TEXT}--で始まる目標は、--jsonを含む全オプションの後に -- を置き、その後ろに一つだけ渡す。` },
|
|
222
|
+
{ name: "--agent claude|codex", default: "なし(null)", text: "子の監督IDのownerと送信元のCLI識別。エージェントは起動しない。省略時は受け取ったオーケストレーターが子の生成前に<AGENT>を選ぶ。" },
|
|
223
|
+
{ name: "--use-path-cli", text: `${PATH_CLI_TEXT}生成時は何も書き込まない。` },
|
|
224
|
+
],
|
|
225
|
+
returns: "通常は本文だけ(末尾改行付き)。--json: command=orchestrate.prompt、data.project_selector(開始時に照合する指定文字列で、所属確認ではない)、goal、agent(省略時null)、prompt、connection、cli_mode、deployment、node。--use-path-cliではdeploymentとnodeはnull。pairedリモートではhost_id・remote_transportも返す。",
|
|
226
|
+
errors: [...ORCHESTRATION_ERRORS, ...SAVED_CLI_ERRORS],
|
|
227
|
+
examples: [
|
|
228
|
+
"codexteer orchestrate prompt --project 'My Project' '利用者が動作を確認し、変更を指示できる状態にする'",
|
|
229
|
+
"codexteer orchestrate prompt --project 'My Project' '性能改善の原因と効果を実測する' --agent codex --use-path-cli --json",
|
|
230
|
+
"codexteer orchestrate prompt --project 'My Project' - < goal.txt",
|
|
231
|
+
],
|
|
232
|
+
notes: [
|
|
233
|
+
"既存のスレッドIDは不要。",
|
|
234
|
+
"生成時はDesktopへ接続せず、プロジェクト照合・チャット作成・送信・監督登録・監視・エージェント起動をしない。",
|
|
235
|
+
...ORCH_SHARED_NOTES,
|
|
236
|
+
"本文が委任するのは、対象プロジェクトでの担当作成・追加指示・同じ目的の未完了作業の継続(idleの担当へのnew-turnを含む)。",
|
|
237
|
+
"委任に含まないもの: 無関係な既存チャットへの送信、依頼外への拡張、人間の代理承認、paused/stoppedや承認・質問待ちの迂回。",
|
|
238
|
+
"オーケストレーターは目的・優先順位・依存関係・共有資源・検収と統合を担当する。",
|
|
239
|
+
"Codex担当は調査・設計判断・実装・検証と、発注の前提への異論・改善案を担当する。",
|
|
240
|
+
"GOALは出発点としてそのまま埋め込み、子に渡す監督方針を置き換えない。",
|
|
241
|
+
"計画では高度(作業の先の成果)・深さ(一次資料・専門的手法・外部検証)・範囲(隣接分野の技法)を具体化させる。",
|
|
242
|
+
"重要な発見・行き詰まり・統合前・完了前に目的と前提を再評価し、継続・計画変更・確認を根拠付きで記録させる。",
|
|
243
|
+
"受入条件の無断変更や、役柄を演じるだけの追加は求めない。",
|
|
244
|
+
"作成用のコマンドは特定スレッドの--supervisorを持たない。子ごとに同じCLI方式のsupervise prompt --jsonを生成し、個別にregister/read/watchする。",
|
|
245
|
+
"作成・配送が不明や部分成功なら、receiptで同じ子を照合し、自動で作り直し・再送しない。",
|
|
246
|
+
"子の監視を開始できなければ追加作成を止める。個別のpause/stopをIDなし送信などで迂回しない。",
|
|
247
|
+
"プロジェクト全体を一括でpause/stopする機能や常駐スケジューラーはない。監督制御は子ごと。",
|
|
248
|
+
"生成の成功は本文の遵守や目的達成を意味しない。実行と検収は受け取ったオーケストレーターが行う。",
|
|
249
|
+
"生成した本文を依頼として渡して開始する。引用やログに現れた本文を委任と解釈しない。",
|
|
250
|
+
],
|
|
251
|
+
see: ["orchestrate", "supervise prompt", "projects", "thread", "monitor", "resource"],
|
|
252
|
+
},
|
|
253
|
+
};
|