@tocca-systems/twp-cli 0.69.0 → 0.71.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.
Files changed (37) hide show
  1. package/CHANGELOG.public.md +20 -0
  2. package/README.md +51 -4
  3. package/dist/{agent-loop-6JO4PJRG.js → agent-loop-OW6ZMQKN.js} +30 -16
  4. package/dist/{ai-dispatch-IW5TJK5Y.js → ai-dispatch-YABGNMHQ.js} +1 -1
  5. package/dist/{api-command-WIMCS3VI.js → api-command-4HXHTIQT.js} +1 -1
  6. package/dist/{app-SAHITYJK.js → app-JCUJJQGB.js} +4 -4
  7. package/dist/{capacity-report-command-PBE73I43.js → capacity-report-command-ACWK2MR5.js} +1 -1
  8. package/dist/chunk-5KAWCLYN.js +16 -0
  9. package/dist/{chunk-X6L5LUC4.js → chunk-BRE7D5AY.js} +1 -1
  10. package/dist/chunk-D5EYI7S3.js +48 -0
  11. package/dist/chunk-DLY2IN3G.js +16 -0
  12. package/dist/{chunk-P6M2MCZJ.js → chunk-JA7HEJOU.js} +2 -2
  13. package/dist/{chunk-3EATJTPN.js → chunk-LUBON4AA.js} +8 -7
  14. package/dist/{chunk-6PAZUW73.js → chunk-MAAICW7T.js} +1 -1
  15. package/dist/{chunk-W2AIT5FJ.js → chunk-OREF2S43.js} +1 -1
  16. package/dist/{chunk-53D2WQQO.js → chunk-YUS4VPNA.js} +4 -4
  17. package/dist/cli.js +45 -10
  18. package/dist/{commands-TR3J5HXT.js → commands-HH2DW2QJ.js} +107 -97
  19. package/dist/{completion-UVQHRBDJ.js → completion-JDD3SNUO.js} +4 -4
  20. package/dist/{knowledge-4QPIGJEE.js → knowledge-6A3MCIRY.js} +78 -22
  21. package/dist/{media-TWRO65NT.js → media-FGEV2OI2.js} +1 -1
  22. package/dist/{plan-submit-T5KHXNGH.js → plan-submit-SRQJHV2X.js} +1 -1
  23. package/dist/{registry-WBDRVEUW.js → registry-DC75DVLY.js} +1 -1
  24. package/dist/{run-XZUJWTTZ.js → run-R5CU36O3.js} +1 -1
  25. package/dist/{schedule-command-2HCOGYJW.js → schedule-command-4UBCTNRI.js} +1 -1
  26. package/dist/schedule-def-command-OFCA5VH3.js +86 -0
  27. package/dist/search-OSV6TA6Q.js +29 -0
  28. package/dist/{server-settings-LJBDUOTV.js → server-settings-BGVJNHAV.js} +1 -1
  29. package/dist/server-skills-JEFNP63E.js +3 -0
  30. package/dist/settings-command-TEVH2MNY.js +43 -0
  31. package/dist/{task-O7K6725Y.js → task-AQSKV7VL.js} +1 -1
  32. package/package.json +1 -1
  33. package/dist/chunk-PVP3REVW.js +0 -15
  34. package/dist/chunk-SPZ3GBYC.js +0 -16
  35. package/dist/chunk-ZKS2F7C6.js +0 -42
  36. package/dist/search-GRAWP2LX.js +0 -26
  37. package/dist/server-skills-WC45Y62Y.js +0 -3
@@ -11,6 +11,26 @@
11
11
  `CHANGELOG.md` に残してあります。顧客向けの履歴は public 公開以降を対象とします。
12
12
  -->
13
13
 
14
+ ## 0.71.0
15
+
16
+ `twp agent-loop plan-history list` で、エージェントループの計画フェーズ1回ごとの記録(何を積み・何をなぜ見送ったか・AI のコスト)を期間を指定して引けるようになりました。
17
+
18
+ `twp wiki get` に ID を複数並べて、関連するページをまとめて読めるようになりました。読めないページがあっても他のページは表示し、読めなかったページと理由を知らせます。
19
+
20
+ `twp wiki list` / `tree` が本文を受け取らずに一覧を取得するようになり、ページの多い wiki でも速く表示されます。`wiki list --output json` には本文の代わりに冒頭の要約(summary)と文字数(content_length)が入ります。本文は `twp wiki get` で読めます。
21
+
22
+ `twp search` で `--project` と `--tag` を指定して、プロジェクト・タグ単位に検索結果を絞り込めるようになりました。
23
+
24
+ ## 0.70.0
25
+
26
+ `twp task-loop settings pull|push` で、AI の割当・注入文面・ループ間隔などのループ設定をファイルから確認・変更できるようになりました。
27
+
28
+ ループの定期実行の定義を CLI から一覧・登録・更新・削除できるようになりました(`twp task-loop schedule list|push|delete`)。上限やゲートなどの全体設定も `schedule config pull|push` で受け渡せます。書き込む操作は差分を確認してから `--yes` で確定します。
29
+
30
+ `twp wiki tree` / `tags` / `versions` / `version` / `diff` / `backlinks` / `linked-tasks` で、wiki の親子構造・タグ・版の履歴と差分・被リンク・関連タスクを読めるようになりました。
31
+
32
+ ループ用スキルをサーバに登録したとき、本文に `$ARGUMENTS` が無いと引数が渡らなかった問題を修正しました。
33
+
14
34
  ## 0.69.0
15
35
 
16
36
  `twp task-loop skill list` / `show` / `delete` で、サーバに登録したループ用スキルの一覧・本文の表示・削除ができるようになりました。
package/README.md CHANGED
@@ -28,7 +28,7 @@ TWP(Tocca Working Platform)を、ターミナルから使うための CLI
28
28
  | **できる** | `twp support` によるシステムサポートへの依頼(依頼者側)の一覧・詳細(コメントの経過を含む)・起票(添付3件まで)・コメント・完了・再問い合わせ・取り下げと、カテゴリの一覧。運営側(回答・ステータス変更)は扱いません |
29
29
  | **できる** | `twp notification` による自分宛ての通知の一覧(未読・カテゴリ・語で絞り込み)・詳細・未読件数・カテゴリ一覧と、1件ずつ・まとめての既読化 |
30
30
  | **できる** | `twp worker-agent` によるワーカーエージェント(AIエージェント)の参照(一覧・詳細・スケジュールと次回実行予定・許可できるツールのカタログ・実行回数の上限と今日の使用数)と、実行履歴・実行結果(最終要約を先頭に)・ステップログ・ステップの集計の読み取りと、作成・更新(スケジュール指定込み)・削除・有効化/無効化・今すぐ実行(`--wait` で終わるまで待つ)・実行の取消 |
31
- | **できる** | `twp search` による TWP 内のコンテンツ(タスク・Wiki・ノート・議事録・FAQ・サポート・ワークフロー等)の横断検索(通常検索と `--ai` の AI検索・種類/状態/カテゴリで絞り込み)と、検索できる種類の一覧。閲覧権限の無いものは出ません |
31
+ | **できる** | `twp search` による TWP 内のコンテンツ(タスク・Wiki・ノート・議事録・FAQ・サポート・ワークフロー等)の横断検索(通常検索と `--ai` の AI検索・種類/プロジェクト/タグ/状態/カテゴリで絞り込み)と、検索できる種類の一覧。閲覧権限の無いものは出ません |
32
32
  | **できる** | `twp announcement` による自分に届いているお知らせ(運営・組織)の一覧(未読・確認待ち・語で絞り込み)・本文と返信の表示・未読件数、既読化(1件ずつ・まとめて)・「確認しました」の記録・返信の一覧と投稿 |
33
33
  | **できる** | `twp agent session` によるコンテナエージェント(リポジトリで作業する AI セッション)の起動・追加の指示・再開・停止・削除と、状態・作業ブランチ・PR・会話・実行ログ・変更ファイル(差分)の参照、`twp agent repository` による起動できるリポジトリとブランチの一覧、`twp agent schedule` による定期実行の定義の作成・更新・有効化/無効化・削除・今すぐ実行と実行履歴の参照。`--wait` で作業が止まるまで待ち、最後のアシスタント発言・作業ブランチ・PR URL を出します。起動・指示・再開は AI クレジットを消費します |
34
34
  | **できる** | `twp estimate` / `twp invoice` による販売管理の見積・請求の一覧(語・ステータス・取引先・プロジェクト・担当者・日付・回収状況で絞り込み)と詳細。販売管理・顧客管理の権限が要ります |
@@ -68,7 +68,7 @@ TWP(Tocca Working Platform)を、ターミナルから使うための CLI
68
68
  | **できる** | `twp budget` による予実管理(年度の予実ダッシュボード・サマリー・部署行の内訳と未割当・CSV 出力、目標の一覧・JSON でのまとめ登録・前年度からのコピー・CSV の取り込みと雛形、プロジェクトの部署按分の参照と全件置換)。分析の権限と予実管理ページの閲覧対象への登録が要り、目標の書き込みは全体管理者か分析の権限が「管理者」の人です |
69
69
  | **できる** | `twp workflow` による、自分が申請できる申請書・申請書の定義(管理者)・自分の申請・承認履歴・自分の承認待ちの参照(申請書は名前でも指定できます)と、申請の起票・提出・更新・削除、承認・却下・差し戻し・取下げ、承認画面の AIチェックの結果の表示と承認者コメント |
70
70
  | **できる** | `twp report` による自分のレポート(日報)の一覧(フォーマット・状態・語で絞り込み)・詳細と、下書きの作成(フォーマットの入力項目から雛形を出せます)・更新・提出・AI アドバイス、使えるレポートフォーマットの一覧。確認者としての一覧(未読・書いた人・作成日で絞り込み)・既読・コメント・確認済み・確認の取り消し・差し戻し |
71
- | **できる** | `twp wiki` / `twp note` / `twp meeting` による、wiki ページ(親ページ直下の子の一覧を含む)・ノート・議事録(開催日の期間で絞り込み)の一覧と、本文を `--output text` で文書として読むこと。wiki ページの作成・更新・移動・削除 |
71
+ | **できる** | `twp wiki` / `twp note` / `twp meeting` による、wiki ページ(親ページ直下の子の一覧を含む)・ノート・議事録(開催日の期間で絞り込み)の一覧と、本文を `--output text` で文書として読むこと。wiki ページの作成・更新・移動・削除と、親子構造・タグ・版の履歴と差分・被リンク・関連タスクの読み取り |
72
72
  | **できる** | `twp outlook` / `twp teams` / `twp onedrive` による Microsoft 365 の読み取り(メール・添付・予定、Teams のチーム・チャネル・チャット・メッセージ・スレッド返信・自分宛てメンション、OneDrive のファイルの一覧・情報・ダウンロード)。TWP に Microsoft アカウントでログインしたことがあるユーザーが対象です。書き込みはメールの送信・返信・全員返信・転送(`twp outlook mail send` / `reply` / `reply-all` / `forward`)、Teams のチャット送信・チャネル投稿・スレッド返信(`twp teams message send` / `reply send`)、予定の作成・更新・削除(`twp outlook event create` / `update` / `delete`)、共有リンクの作成(`twp onedrive link create`)ができ(いずれも `--yes` が必要)、OneDrive へのアップロード(`twp onedrive item upload`)もできます |
73
73
  | **できる** | `twp task-loop` による、TWP のタスクキューを手元の AI CLI に実行させる常駐ループ |
74
74
  | **できる** | `twp agent-loop` による、エージェントループのキューの一覧・投入・更新・先頭への移動・削除と、期間を指定した実行履歴の参照。更新・移動・削除はテナントの管理者の権限が要ります |
@@ -1334,7 +1334,14 @@ twp report reject <レポートID> --comment-file reason.md --yes # 差し戻
1334
1334
  ```bash
1335
1335
  twp wiki list [--project <コード|ID>] [--status <draft|published>] [--tag <タグ>] [--keyword <語>] [--all]
1336
1336
  twp wiki list [--project <コード|ID>] --parent <ページID>|root # 親ページ直下の子(root で最上位)
1337
- twp wiki get <ページID> --output text
1337
+ twp wiki get <ページID> [<ページID> ...] --output text # 複数並べると1件ずつ取得
1338
+ twp wiki tree [--project <コード|ID>] # 親子構造(本文は出さない)
1339
+ twp wiki tags [--project <コード|ID>]
1340
+ twp wiki versions <ページID> [--limit <件数>] # 版の履歴(新しい順・最大100件)
1341
+ twp wiki version <ページID> <版> --output text
1342
+ twp wiki diff <ページID> <版1> [<版2>] # 版2を省くといまのページと比べる
1343
+ twp wiki backlinks <ページID> # このページへリンクしているページ(前後の抜粋つき)
1344
+ twp wiki linked-tasks <ページID> # このページに紐づいたタスク
1338
1345
  twp wiki create [--project <コード|ID>] --title <件名> --content-file <パス|-> [--content-format <html|markdown>] [--parent <ページID>] [--status <draft|published>] [--tag <タグ>]...
1339
1346
  twp wiki update <ページID> [--title <件名>] [--content-file <パス|->] [--content-format <html|markdown>] [--status <draft|published>] [--tag <タグ>]... [--clear-tags] [--if-version <版>]
1340
1347
  twp wiki move <ページID> [--parent <ページID>|root] [--sort-order <順>]
@@ -1348,6 +1355,8 @@ twp meeting get <議事録ID> --output text
1348
1355
  - `get --output text` は本文を読むための文書(見出し・メタ情報・本文)を出します。HTML と議事録エディタの内容は平文にし、見出し・箇条書き・リンクは Markdown 風に残します。サーバの原文は `--output json` で取れます
1349
1356
  - 議事録の文書にはアジェンダ・議事メモ・決定事項・アクションアイテム・AI 要約が入ります。文字起こしは長いので入れません(`--query transcript` で取れます)
1350
1357
  - wiki はプロジェクトごとです(`--project` を省くと既定のプロジェクト)。`--parent` は他の絞り込み・ページングと併用できません
1358
+ - `twp wiki get` に ID を複数並べると1件ずつ取得します。`--output json` はページの配列、`--output text` はページごとに `=== <n>/<件数> <件名>(ID: <ID>) ===` の区切り行を挟みます。見つからない・権限が無いページがあっても他のページは出し、取れなかった ID と理由を stderr に出して終了コード 3(サーバの 5xx が混じれば 4)で終わります(`--output json` では stderr のエラーに `target` として ID が入ります)。ログインの失効(401)と回数制限(429)のときは途中で止め、何も出しません
1359
+ - `wiki tree` は `--output json` でも本文を出しません(構造だけを1往復で読むため)。`wiki diff` は本文を平文にしてから行単位で比べるので、HTML のタグだけの違いは出ません。件名が変わっていれば件名の違いも出します
1351
1360
  - `twp meeting list` の `--from` / `--to` は開催日(日本時間の日付)の期間で、両端の日を含み、片方だけでも指定できます。`--keyword` はタイトルの語です
1352
1361
  - `twp note get` で開くと、画面で開いたときと同じくノートの閲覧数が1増えます
1353
1362
  - wiki の本文は `--content-file` のファイル(`-` で標準入力)から読み、加工せずに送ります。Markdown で書いた本文は `--content-format markdown` を付けて作成してください(画面で Markdown として表示されます)。省くと HTML のページになり(そのことを stderr で知らせます)、Markdown を渡しても変換されず記号のまま表示されます。`create` で `--status` を省くと下書きになります
@@ -1359,7 +1368,7 @@ twp meeting get <議事録ID> --output text
1359
1368
  ### TWP 内を横断して検索する
1360
1369
 
1361
1370
  ```bash
1362
- twp search "<語>" [--ai] [--type <種類>[,<種類>...]] [--status <状態>] [--category <カテゴリコード>] [--limit <件数>] [--cursor <ページ番号>]
1371
+ twp search "<語>" [--ai] [--type <種類>[,<種類>...]] [--project <コード|ID> ...] [--tag <タグ> ...] [--status <状態>] [--category <カテゴリコード>] [--limit <件数>] [--cursor <ページ番号>]
1363
1372
  twp search query "<語>" # 「types」など操作名と同じ語を検索するとき
1364
1373
  twp search types # --type に渡せる種類(doc_type とラベル)
1365
1374
  ```
@@ -1367,6 +1376,7 @@ twp search types # --type に渡せる種類(doc_type とラベル)
1367
1376
  - 画面のナビバー検索と同じです。`--ai` を付けると AI検索(意味の近いものを探す)になり、使った方式は stderr の「検索方式」に出ます
1368
1377
  - 語は1つの引数で渡します。空白を含む語は引用符で囲んでください(`twp search "経費 精算"`)
1369
1378
  - table / tsv / text は doc_type・ref(タスクはキー・プロジェクトはコード・それ以外は ID)・タイトル・プロジェクト・更新日時・抜粋・`next`(詳細を取るコマンド。取得コマンドがある種類だけ)を出します。`--output json` は応答の `data` です
1379
+ - `--project`(コード・ID)と `--tag` でプロジェクト・タグ単位に絞り込めます。どちらも複数指定でき、いずれかに一致すれば残ります(例: `twp search "障害対応" --type wiki --project FMID --tag 運用`)。`--project` を省いても既定のプロジェクトでは絞りません
1370
1380
  - 検索は読み取りなので `--yes` は要りません。会話中の AI も確認なしで呼べます
1371
1381
  - `--cursor` はページ番号です(`--all` はありません)。続きがあるときは次に打つ行を stderr に出します
1372
1382
  - 検索サービスが一時的に使えないときは終了コード 4 で失敗します(0件の終了コード 0 とは区別できます)
@@ -1880,6 +1890,24 @@ twp task-loop charter pull --project <キー|UUID> [--out CONSTITUTION.md] #
1880
1890
  - 終了コードは他のコマンドと同じ規約です: `0` 反映した/差分なし / `1` pull でサーバに憲章が無い・ファイルを書けない / `2` 引数の誤り・差分があり `--yes` なし / `3` サーバが 4xx を返した(403・409 等)/ `4` 5xx・通信失敗 / `5` 認証失敗
1881
1891
  - 個人タスクのキュー(`--project __private__`)には憲章の設定がありません
1882
1892
 
1893
+ ### 憲章以外のループ設定をファイルとサーバで受け渡す
1894
+
1895
+ AI 割当(`ai`)・注入文面(`prompts`。憲章を除く)・ループ間隔(`loop.interval_sec`)・契約結果の意味づけ(`outcomes`)を、JSON ファイルとの間で登録・展開できます。作法は憲章(`charter`)と同じです。
1896
+
1897
+ ```bash
1898
+ twp task-loop settings pull --project <キー|UUID> [--out loop-settings.json] # サーバ → ファイル
1899
+ twp task-loop settings push --project <キー|UUID> --file loop-settings.json # ファイル → サーバ
1900
+ ```
1901
+
1902
+ - **pull は全キーを書き出します**(未設定のキーは `null`)。取得時点の `revision` も書きます。憲章は含みません(`charter pull` を使います)。既存ファイルと違うときは差分を表示し、`--yes` を付けたときだけ上書きします
1903
+ - **push はファイルに書いたキーだけを変えます(部分更新)。** `ai.<キー>`・`prompts.<キー>`・`loop.<キー>` は書かれていれば置き換え、`null` なら未設定に戻します。書いていないキーと憲章は変えません。`outcomes` は書かれていれば配列全体を置き換えます
1904
+ - `prompts.charter` を書いたファイルは受け付けません(`charter push` を使います)。サーバが知らないキー(綴り間違い等)があるときも、送る前に止めます
1905
+ - **push は `--yes` なしでは登録しません。** 変わるキーごとの差分(注入文面は行単位)と revision を表示し、確定用のコマンド(`--yes --revision <番号>`)を案内します。その後サーバが更新されていれば 409 で止まります
1906
+ - **ファイルの `revision` より後にサーバが更新されていると、`--revision` なしの `--yes` では登録しません。** pull したファイルは全キーを持つので、そのまま送ると取得後に他で直されたキーを元に戻すためです。差分を確認して案内どおり `--revision` を付けるか、pull し直してください(`revision` を書いていないファイルはこの確認をしません)
1907
+ - 値の検証はサーバが行います(不正な値は 422・終了コード `3`)。サーバは `ai` / `prompts` を全体で受け取るため、**書いていないキーに現在の規則に合わない値が残っていると、その理由でも 422 になります**(エラーに該当キーが出ます)
1908
+ - `ai` の `_comment` で始まるキーは注記として無視します
1909
+ - 実行中のループは次のサイクルで新しい revision を読みます。書き込みの権限・終了コードは憲章と同じ規約です
1910
+
1883
1911
  ### スキル定義をファイルとサーバで受け渡す
1884
1912
 
1885
1913
  ループ用のスキル定義(`.claude/commands/<名前>.md` と同じ markdown)を、プロジェクト単位でサーバに登録・展開できます。サーバのスキル名 `<名前>` はファイル `<ディレクトリ>/<名前>.md` に対応します(既定のディレクトリは `.claude/commands`、`--dir` で変更)。
@@ -1907,6 +1935,25 @@ twp task-loop skill delete --project <キー|UUID> <名前> # サーバから削
1907
1935
  - **ループはキュー項目の `/<名前>` をサーバ版で実行します。** サーバに登録されたスキルはサーバ版が、登録されていないスキル(または本文を取得できなかったとき)は作業ディレクトリのファイルが使われます。サーバ版は作業ディレクトリへ書き出さずに実行します(claude にはプロンプト内で展開して渡します)
1908
1936
  - どちらで走ったかはループのログとステップログに `skill=server@rev<番号>` / `skill=file` として残ります。一覧はサイクルごとに1回だけ取得し、本文は内容が変わったスキルだけを取り直します
1909
1937
 
1938
+ ### 定期枠の定義をファイルとサーバで受け渡す
1939
+
1940
+ ループが定期的に投入する枠(定期スケジュール)の定義と、全体設定(1サイクルの上限 `max_per_cycle`・時間帯ゲート `gates`・件数ゲートが数えるステータス `require_zero_statuses`)を読み書きできます。引数なしの `twp task-loop schedule` はこれまでどおり「いま発火する枠」の表示です。
1941
+
1942
+ ```bash
1943
+ twp task-loop schedule list --project <キー|UUID> # 定義の一覧
1944
+ twp task-loop schedule push --project <キー|UUID> --file schedules.json # ファイル → サーバ(作成・更新)
1945
+ twp task-loop schedule delete --project <キー|UUID> <定義ID> # 定義の削除
1946
+ twp task-loop schedule config pull --project <キー|UUID> [--out config.json] # 全体設定 → ファイル(既定は標準出力)
1947
+ twp task-loop schedule config push --project <キー|UUID> --file config.json # ファイル → 全体設定
1948
+ ```
1949
+
1950
+ - ファイルは `{ "schedules": [ {定義}, ... ] }`(全体設定のキーを並べてもよい)・定義1件のオブジェクト・定義の配列のいずれかです。`_` で始まるキーは注釈として送りません。サーバが補う既定値は省略できます
1951
+ - **push・delete・config push は `--yes` なしでは書きません。** 差分(作成・更新する定義と変わる項目)と revision を表示し、確定用のコマンド(push は `--yes --revision <定義ID>=<番号>,...`・新規は 0、delete と config push は `--yes --revision <番号>`)を案内します。案内どおりに確定すると、差分を見た後に画面で更新された定義・設定があれば上書きも削除もせずに止まります(push は1件も書きません)。`--revision` を省いた `--yes` はその場で取得した revision で書きます
1952
+ - **push はサーバにだけある定義を削除しません**(「サーバにのみ存在」と表示します)。消すのは `delete` だけです。止めるだけなら `"enabled": false` を push してください
1953
+ - push は書いた後にサーバから取り直し、ファイルと差分が無いことを確かめてから「反映しました」と表示します。差分が残れば終了コード `1` です
1954
+ - config push はファイルに無いキーをサーバの現在値のまま保ちます(`max_per_cycle` は必須)
1955
+ - 書き込みはプロジェクトの管理者以上だけができます。権限が無ければサーバの 403 の理由をそのまま表示します。終了コードは憲章(`charter`)と同じ規約で、delete で対象が無いときは `1` です
1956
+
1910
1957
  ### サーバに残した版の履歴・差分・復元
1911
1958
 
1912
1959
  サーバは憲章(ループ設定)とスキル定義を更新するたびに、その版を残します(対象ごとに直近100版)。
@@ -1,21 +1,23 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{stepToItem}from"./chunk-6PAZUW73.js";import"./chunk-DXUFECE7.js";import"./chunk-SPZ3GBYC.js";import{loadLocalConfig,parseOperations}from"./chunk-LJVAOWZI.js";import"./chunk-G4TZFGNN.js";import{loadAiConfig}from"./chunk-FABDZBDZ.js";import{SKILL_PREFIX_RE,setSkillPrefix}from"./chunk-6CS5L24D.js";import"./chunk-N2UVRM3Z.js";import"./chunk-GY7KI5E5.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-MI6HVYR2.js";
3
+ import{stepToItem}from"./chunk-MAAICW7T.js";import"./chunk-DXUFECE7.js";import"./chunk-5KAWCLYN.js";import{loadLocalConfig,parseOperations}from"./chunk-LJVAOWZI.js";import"./chunk-G4TZFGNN.js";import{loadAiConfig}from"./chunk-FABDZBDZ.js";import{SKILL_PREFIX_RE,setSkillPrefix}from"./chunk-6CS5L24D.js";import"./chunk-N2UVRM3Z.js";import"./chunk-GY7KI5E5.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-MI6HVYR2.js";
4
4
  import{requireResolved,singleRef,withResolved}from"./chunk-PS5QFKHB.js";import"./chunk-II5RVJQN.js";import{acknowledgement,isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import"./chunk-PMOUHEJQ.js";import"./chunk-J7QYPKVK.js";import"./chunk-5WGOHFAS.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var LABEL="\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u30EB\u30FC\u30D7\u306E\u30A2\u30A4\u30C6\u30E0";var STATUSES=["pending","processing","completed","failed"];var AI_TYPES=["claude","gemini","codex","copilot"];var EFFORTS=["low","medium","high","xhigh","max"];var PRIORITIES=["P0","P1","P2","P3"];var LIST_COLUMNS=["item_id","status","task_key","label","ai_type","ai_effort","runner_id","created_at"];var GET_COLUMNS=["item_id","status","task_key","label","prompt","ai_type","ai_model","ai_effort","runn\
5
- er_id","attempt_count","reclaim_count","error_message","created_by_name","created_at","started_at","completed_at"];var HISTORY_COLUMNS=["item_id","status","task_key","skill","ai_type","runner_id","duration_ms","cost_usd","created_at"];var PROJECT_FLAG={name:"--project",summary:"\u30AD\u30E5\u30FC\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\uFF08\u30B3\u30FC\u30C9\u307E\u305F\u306F ID\u3002\u7701\u7565\u6642\u306F TWP_PROJECT / .twp/config.json / ~/.twp/config.json\uFF09",takesValue:true,placeholder:"\
6
- <\u30B3\u30FC\u30C9|ID>"};var ITEM_FLAG={name:"--item",summary:"\u30A2\u30A4\u30C6\u30E0\u306E ID\uFF08item_id\uFF09\u3002\u4F4D\u7F6E\u5F15\u6570\u3068\u540C\u3058\u610F\u5473\uFF08\u4E21\u65B9\u6307\u5B9A\u306F\u30A8\u30E9\u30FC\uFF09",takesValue:true,placeholder:"<\u30A2\u30A4\u30C6\u30E0ID>"};var FORBIDDEN_CORE="\u30C6\u30CA\u30F3\u30C8\u306E\u7BA1\u7406\u8005\uFF08admin \u30ED\u30FC\u30EB\uFF09\u306E\u6A29\u9650\u304C\u5FC5\u8981\u3067\u3059\uFF08\u500B\u4EBA\u30AD\u30E5\u30FC\u3092\u9664\u304F\uFF09";
7
- var CREATE_HINT="\u30A2\u30A4\u30C6\u30E0\u306E\u6295\u5165\uFF08twp agent-loop create\uFF09\u306F\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30E1\u30F3\u30D0\u30FC\u306A\u3089\u7BA1\u7406\u8005\u3067\u306A\u304F\u3066\u3082\u884C\u3048\u307E\u3059";var FORBIDDEN_UPDATE=`\u30AD\u30E5\u30FC\u306E\u30A2\u30A4\u30C6\u30E0\u306E\u66F4\u65B0\u306B\u306F${FORBIDDEN_CORE}\u3002\u5B9F\u884C\u4E2D\u306E\u30A2\u30A4\u30C6\u30E0\u3078\u306E\u66F8\u304D\u623B\u3057\u3060\u3051\u306F\u3001\u305D\u306E\u30A2\u30A4\u30C6\u30E0\u3092 claim \u3057\u305F\u30EB\u30FC\u30D7\u81EA\u8EAB\u304C run_id \u3092\u6DFB\u3048\u3066\u884C\u3048\u307E\u3059\u3002`+
8
- CREATE_HINT;var FORBIDDEN_MOVE=`\u30AD\u30E5\u30FC\u306E\u4E26\u3073\u66FF\u3048\u306B\u306F${FORBIDDEN_CORE}\u3002${CREATE_HINT}`;var FORBIDDEN_DELETE=`\u30AD\u30E5\u30FC\u306E\u30A2\u30A4\u30C6\u30E0\u306E\u524A\u9664\u306B\u306F${FORBIDDEN_CORE}\u3002${CREATE_HINT}`;var PROJECT_HELP="\u30AD\u30E5\u30FC\u306F\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3054\u3068\u306B\u3042\u308A\u307E\u3059\u3002--project \u3092\u7701\u304F\u3068\u65E2\u5B9A\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\uFF08TWP_PROJECT / .twp/config.json / ~/.twp/config.json\uFF09\u306E\u30AD\u30E5\u30FC\u3092\u64CD\u4F5C\u3057\u307E\u3059\u3002";
9
- function basePath(input){return`/api/v2/projects/${encodeURIComponent(requireResolved(input,"projectId"))}/agent-loop`}function itemPath(input){return`${basePath(input)}/${encodeURIComponent(requireResolved(input,"itemId"))}`}async function prepareProject(input,ctx){return withResolved(input,{projectId:await ctx.projectId(input.flags.get("--project"))})}async function prepareItem(input,ctx,usage){const itemId=singleRef(input,{flag:ITEM_FLAG.name,label:"\u30A2\u30A4\u30C6\u30E0",usage});return withResolved(
10
- await prepareProject(input,ctx),{itemId})}function rejectArgs(input,operation){if(input.args.length>0){throw new UsageError(`${operation} \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,`twp agent-loop ${operation} help`)}}function oneOf(flags,name,values){const raw=nonEmpty(flags,name);if(raw===void 0)return void 0;if(!values.includes(raw)){throw new UsageError(`${name} \u306B\u306F ${values.join(" / ")} \u306E\u3044\u305A\u308C\u304B\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u53D7\u3051\u53D6\u3063\u305F\u5024: ${raw}\
5
+ er_id","attempt_count","reclaim_count","error_message","created_by_name","created_at","started_at","completed_at"];var HISTORY_COLUMNS=["item_id","status","task_key","skill","ai_type","runner_id","duration_ms","cost_usd","created_at"];var PLAN_RESULTS=["enqueued","empty","json_not_found","ai_failed","error","skipped","gated","locked","abandoned"];var PLAN_HISTORY_COLUMNS=["plan_run_id","result","runner_id","ai_type","duration_ms","cost_usd","step_count","started_at"];var PROJECT_FLAG={name:"--pr\
6
+ oject",summary:"\u30AD\u30E5\u30FC\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\uFF08\u30B3\u30FC\u30C9\u307E\u305F\u306F ID\u3002\u7701\u7565\u6642\u306F TWP_PROJECT / .twp/config.json / ~/.twp/config.json\uFF09",takesValue:true,placeholder:"<\u30B3\u30FC\u30C9|ID>"};var ITEM_FLAG={name:"--item",summary:"\u30A2\u30A4\u30C6\u30E0\u306E ID\uFF08item_id\uFF09\u3002\u4F4D\u7F6E\u5F15\u6570\u3068\u540C\u3058\u610F\u5473\uFF08\u4E21\u65B9\u6307\u5B9A\u306F\u30A8\u30E9\u30FC\uFF09",takesValue:true,placeholder:"\
7
+ <\u30A2\u30A4\u30C6\u30E0ID>"};var FORBIDDEN_CORE="\u30C6\u30CA\u30F3\u30C8\u306E\u7BA1\u7406\u8005\uFF08admin \u30ED\u30FC\u30EB\uFF09\u306E\u6A29\u9650\u304C\u5FC5\u8981\u3067\u3059\uFF08\u500B\u4EBA\u30AD\u30E5\u30FC\u3092\u9664\u304F\uFF09";var CREATE_HINT="\u30A2\u30A4\u30C6\u30E0\u306E\u6295\u5165\uFF08twp agent-loop create\uFF09\u306F\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30E1\u30F3\u30D0\u30FC\u306A\u3089\u7BA1\u7406\u8005\u3067\u306A\u304F\u3066\u3082\u884C\u3048\u307E\u3059";var FORBIDDEN_UPDATE=`\
8
+ \u30AD\u30E5\u30FC\u306E\u30A2\u30A4\u30C6\u30E0\u306E\u66F4\u65B0\u306B\u306F${FORBIDDEN_CORE}\u3002\u5B9F\u884C\u4E2D\u306E\u30A2\u30A4\u30C6\u30E0\u3078\u306E\u66F8\u304D\u623B\u3057\u3060\u3051\u306F\u3001\u305D\u306E\u30A2\u30A4\u30C6\u30E0\u3092 claim \u3057\u305F\u30EB\u30FC\u30D7\u81EA\u8EAB\u304C run_id \u3092\u6DFB\u3048\u3066\u884C\u3048\u307E\u3059\u3002`+CREATE_HINT;var FORBIDDEN_MOVE=`\u30AD\u30E5\u30FC\u306E\u4E26\u3073\u66FF\u3048\u306B\u306F${FORBIDDEN_CORE}\u3002${CREATE_HINT}`;
9
+ var FORBIDDEN_DELETE=`\u30AD\u30E5\u30FC\u306E\u30A2\u30A4\u30C6\u30E0\u306E\u524A\u9664\u306B\u306F${FORBIDDEN_CORE}\u3002${CREATE_HINT}`;var PROJECT_HELP="\u30AD\u30E5\u30FC\u306F\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3054\u3068\u306B\u3042\u308A\u307E\u3059\u3002--project \u3092\u7701\u304F\u3068\u65E2\u5B9A\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\uFF08TWP_PROJECT / .twp/config.json / ~/.twp/config.json\uFF09\u306E\u30AD\u30E5\u30FC\u3092\u64CD\u4F5C\u3057\u307E\u3059\u3002";function basePath(input){
10
+ return`/api/v2/projects/${encodeURIComponent(requireResolved(input,"projectId"))}/agent-loop`}function itemPath(input){return`${basePath(input)}/${encodeURIComponent(requireResolved(input,"itemId"))}`}async function prepareProject(input,ctx){return withResolved(input,{projectId:await ctx.projectId(input.flags.get("--project"))})}async function prepareItem(input,ctx,usage){const itemId=singleRef(input,{flag:ITEM_FLAG.name,label:"\u30A2\u30A4\u30C6\u30E0",usage});return withResolved(await prepareProject(
11
+ input,ctx),{itemId})}function rejectArgs(input,operation){if(input.args.length>0){throw new UsageError(`${operation} \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,`twp agent-loop ${operation} help`)}}function oneOf(flags,name,values){const raw=nonEmpty(flags,name);if(raw===void 0)return void 0;if(!values.includes(raw)){throw new UsageError(`${name} \u306B\u306F ${values.join(" / ")} \u306E\u3044\u305A\u308C\u304B\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u53D7\u3051\u53D6\u3063\u305F\u5024: ${raw}\
11
12
  \uFF09`)}return raw}function oneOfOrNone(flags,name,values){if(flags.get(name)?.trim()==="none")return null;return oneOf(flags,name,values)}function itemObject(body){const item=isRecord(body)?body["item"]:void 0;if(!isRecord(item)){throw new ApiResponseError(`${LABEL}\u306E\u5FDC\u7B54\u306B item \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return item}var listPaging=envelopePaging({label:`${LABEL}\u4E00\u89A7`});var historyPaging=envelopePaging(
12
- {label:"\u5B9F\u884C\u5C65\u6B74"});function parseSkillPrompt(prompt,prefix=""){const m=/^\/([a-z0-9][a-z0-9-]*)(?:\s+([\s\S]*))?$/.exec(prompt.trim());if(!m){throw new UsageError(`--prompt \u306F /${prefix}<\u30B9\u30AD\u30EB\u540D> \u3067\u59CB\u3081\u3066\u304F\u3060\u3055\u3044\uFF08\u53D7\u3051\u53D6\u3063\u305F\u5024: ${prompt}\uFF09`,`\u4F8B: twp agent-loop create --prompt "/${prefix}fix-bug ABC-123"`)}const name=m[1]??"";if(prefix!==""&&(!name.startsWith(prefix)||name.length===prefix.length)){
13
- throw new UsageError(`\u3053\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30B9\u30AD\u30EB\u63A5\u982D\u8F9E\u306F '/${prefix}' \u3067\u3059\u3002--prompt \u306F /${prefix}<\u30B9\u30AD\u30EB\u540D> \u3067\u59CB\u3081\u3066\u304F\u3060\u3055\u3044\uFF08\u53D7\u3051\u53D6\u3063\u305F\u5024: ${prompt}\uFF09`,`\u4F8B: twp agent-loop create --prompt "/${prefix}fix-bug ABC-123"`)}return{skill:name.slice(prefix.length),args:(m[2]??"").trim()}}function skillPrefixFromLocalConfig(projectId){const local=loadLocalConfig(
14
- projectId);if(local.operations===void 0||local.operations===null)return"";const prefix=parseOperations(local.operations).operations.skillPrefix;setSkillPrefix(prefix);return prefix}function resolvedPrefix(input){const p=input.resolved?.["skillPrefix"]??"";return SKILL_PREFIX_RE.test(p)?p:""}function fixedAssignment(category,primary){return{categoryForSkill:()=>category,selectPrimary:()=>primary}}function assignFromLocalConfig(projectId,step,prefix){const local=loadLocalConfig(projectId);const configured=local.
15
- ai!==void 0||(local.ai_config_file??"").trim()!=="";const{config,warnings}=loadAiConfig(local.ai,local.ai_config_file,local.workspace??process.cwd());const category=config.categoryForSkill(step.skill);const item=stepToItem(step,{categoryForSkill:()=>category,selectPrimary:(c,s,p,display)=>config.selectPrimary(c,s,p,display)},prefix);return{category,primary:item?.ai_type??"",configured,warnings}}function createStep(input,prefix=resolvedPrefix(input)){const prompt=nonEmpty(input.flags,"--prompt");
16
- if(prompt===void 0){throw new UsageError("--prompt \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",'twp agent-loop create --prompt "/<\u30B9\u30AD\u30EB\u540D> <\u5F15\u6570>"')}const{skill,args}=parseSkillPrompt(prompt,prefix);return{skill,args,priority:oneOf(input.flags,"--priority",PRIORITIES)??"P2",label:nonEmpty(input.flags,"--label")??""}}function createBody(input){const step=createStep(input);const category=requireResolved(input,"category");const primary=input.resolved?.["primary"]??
17
- "";const item=stepToItem(step,fixedAssignment(category,primary),resolvedPrefix(input));if(item===null)throw new Error("\u5185\u90E8\u30A8\u30E9\u30FC: \u30B9\u30AD\u30EB\u540D\u304C\u7A7A\u306E\u307E\u307E stepToItem \u306B\u6E21\u308A\u307E\u3057\u305F");const body={label:item.label,prompt:item.prompt};if(item.task_key!=="")body["task_key"]=item.task_key;if(item.ai_type!==void 0)body["ai_type"]=item.ai_type;const effort=oneOf(input.flags,"--ai-effort",EFFORTS);if(effort!==void 0)body["ai_effort"]=
18
- effort;return body}var createOperation={name:"create",summary:"\u30AD\u30E5\u30FC\u306B\u30A2\u30A4\u30C6\u30E0\u3092\u6295\u5165\u3059\u308B",usage:'twp agent-loop create --prompt "/<\u63A5\u982D\u8F9E><\u30B9\u30AD\u30EB\u540D> <\u5F15\u6570>" [--priority P2] [--label <\u30E9\u30D9\u30EB>] [--ai-effort <effort>] [--project <\u30B3\u30FC\u30C9|ID>]',description:`\u30EB\u30FC\u30D7\u306E\u8A08\u753B\u6295\u5165\u3068\u540C\u3058\u898F\u5247\u3067\u30A2\u30A4\u30C6\u30E0\u3092\u4F5C\u308A\u307E\u3059\uFF08\u30E9\u30D9\u30EB\u66F8\u5F0F\u30FBtask_key \u306E\u62BD\u51FA\u306F\u8A08\u753B\u6295\u5165\u3068\u5171\u901A\uFF09:
13
+ {label:"\u5B9F\u884C\u5C65\u6B74"});var planHistoryPaging=envelopePaging({label:"\u8A08\u753B\u306E\u5B9F\u884C\u8A18\u9332"});function parseSkillPrompt(prompt,prefix=""){const m=/^\/([a-z0-9][a-z0-9-]*)(?:\s+([\s\S]*))?$/.exec(prompt.trim());if(!m){throw new UsageError(`--prompt \u306F /${prefix}<\u30B9\u30AD\u30EB\u540D> \u3067\u59CB\u3081\u3066\u304F\u3060\u3055\u3044\uFF08\u53D7\u3051\u53D6\u3063\u305F\u5024: ${prompt}\uFF09`,`\u4F8B: twp agent-loop create --prompt "/${prefix}fix-bug ABC-123\
14
+ "`)}const name=m[1]??"";if(prefix!==""&&(!name.startsWith(prefix)||name.length===prefix.length)){throw new UsageError(`\u3053\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30B9\u30AD\u30EB\u63A5\u982D\u8F9E\u306F '/${prefix}' \u3067\u3059\u3002--prompt \u306F /${prefix}<\u30B9\u30AD\u30EB\u540D> \u3067\u59CB\u3081\u3066\u304F\u3060\u3055\u3044\uFF08\u53D7\u3051\u53D6\u3063\u305F\u5024: ${prompt}\uFF09`,`\u4F8B: twp agent-loop create --prompt "/${prefix}fix-bug ABC-123"`)}return{skill:name.slice(
15
+ prefix.length),args:(m[2]??"").trim()}}function skillPrefixFromLocalConfig(projectId){const local=loadLocalConfig(projectId);if(local.operations===void 0||local.operations===null)return"";const prefix=parseOperations(local.operations).operations.skillPrefix;setSkillPrefix(prefix);return prefix}function resolvedPrefix(input){const p=input.resolved?.["skillPrefix"]??"";return SKILL_PREFIX_RE.test(p)?p:""}function fixedAssignment(category,primary){return{categoryForSkill:()=>category,selectPrimary:()=>primary}}
16
+ function assignFromLocalConfig(projectId,step,prefix){const local=loadLocalConfig(projectId);const configured=local.ai!==void 0||(local.ai_config_file??"").trim()!=="";const{config,warnings}=loadAiConfig(local.ai,local.ai_config_file,local.workspace??process.cwd());const category=config.categoryForSkill(step.skill);const item=stepToItem(step,{categoryForSkill:()=>category,selectPrimary:(c,s,p,display)=>config.selectPrimary(c,s,p,display)},prefix);return{category,primary:item?.ai_type??"",configured,
17
+ warnings}}function createStep(input,prefix=resolvedPrefix(input)){const prompt=nonEmpty(input.flags,"--prompt");if(prompt===void 0){throw new UsageError("--prompt \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",'twp agent-loop create --prompt "/<\u30B9\u30AD\u30EB\u540D> <\u5F15\u6570>"')}const{skill,args}=parseSkillPrompt(prompt,prefix);return{skill,args,priority:oneOf(input.flags,"--priority",PRIORITIES)??"P2",label:nonEmpty(input.flags,"--label")??""}}function createBody(input){const step=createStep(
18
+ input);const category=requireResolved(input,"category");const primary=input.resolved?.["primary"]??"";const item=stepToItem(step,fixedAssignment(category,primary),resolvedPrefix(input));if(item===null)throw new Error("\u5185\u90E8\u30A8\u30E9\u30FC: \u30B9\u30AD\u30EB\u540D\u304C\u7A7A\u306E\u307E\u307E stepToItem \u306B\u6E21\u308A\u307E\u3057\u305F");const body={label:item.label,prompt:item.prompt};if(item.task_key!=="")body["task_key"]=item.task_key;if(item.ai_type!==void 0)body["ai_type"]=item.
19
+ ai_type;const effort=oneOf(input.flags,"--ai-effort",EFFORTS);if(effort!==void 0)body["ai_effort"]=effort;return body}var createOperation={name:"create",summary:"\u30AD\u30E5\u30FC\u306B\u30A2\u30A4\u30C6\u30E0\u3092\u6295\u5165\u3059\u308B",usage:'twp agent-loop create --prompt "/<\u63A5\u982D\u8F9E><\u30B9\u30AD\u30EB\u540D> <\u5F15\u6570>" [--priority P2] [--label <\u30E9\u30D9\u30EB>] [--ai-effort <effort>] [--project <\u30B3\u30FC\u30C9|ID>]',description:`\u30EB\u30FC\u30D7\u306E\u8A08\u753B\u6295\u5165\u3068\u540C\u3058\u898F\u5247\u3067\u30A2\u30A4\u30C6\u30E0\u3092\u4F5C\u308A\u307E\u3059\uFF08\u30E9\u30D9\u30EB\u66F8\u5F0F\u30FBtask_\
20
+ key \u306E\u62BD\u51FA\u306F\u8A08\u753B\u6295\u5165\u3068\u5171\u901A\uFF09:
19
21
  \u30E9\u30D9\u30EB [<\u512A\u5148\u5EA6>] <\u30BF\u30B9\u30AF\u30AD\u30FC> <\u30E9\u30D9\u30EB> #ai:<\u30AB\u30C6\u30B4\u30EA>\uFF08200\u5B57\u3067\u5207\u308B\u3002--label \u7701\u7565\u6642\u306F\u30D7\u30ED\u30F3\u30D7\u30C8\uFF09
20
22
  task_key \u30D7\u30ED\u30F3\u30D7\u30C8\u306E\u5F15\u6570\u306E\u5148\u982D\u306B\u3042\u308B\u30BF\u30B9\u30AF\u30AD\u30FC\uFF08\u4F8B ABC-123\uFF09
21
23
  1\u756A\u624B \u3053\u306E\u6A5F\u4F53\u306E\u30EB\u30FC\u30D7\u8A2D\u5B9A\uFF08~/.twp/loops/<\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8ID>.json\uFF09\u306E\u30AB\u30C6\u30B4\u30EA\u8868\u3068 primary_rotation \u3067\u6C7A\u3081\u308B
@@ -66,7 +68,19 @@ ${PROJECT_HELP}
66
68
  join(" / ")}\uFF09`,takesValue:true,placeholder:"<\u72B6\u614B>"},{name:"--task-key",summary:"\u30BF\u30B9\u30AF\u30AD\u30FC\u3067\u7D5E\u308A\u8FBC\u3080\uFF08\u5B8C\u5168\u4E00\u81F4\uFF09",takesValue:true,placeholder:"<\u30AD\u30FC>"},{name:"--runner",summary:"\u5B9F\u884C\u6A5F\uFF08runner_id\uFF09\u3067\u7D5E\u308A\u8FBC\u3080",takesValue:true,placeholder:"<runner_id>"},{name:"--skill",summary:"\u30B9\u30AD\u30EB\uFF08\u63A5\u982D\u8F9E\u7121\u3057\uFF09\u3067\u7D5E\u308A\u8FBC\u3080",takesValue:true,
67
69
  placeholder:"<\u30B9\u30AD\u30EB>"},{name:"--ai-type",summary:"AI \u3067\u7D5E\u308A\u8FBC\u3080",takesValue:true,placeholder:"<AI>"},{name:"--full",summary:"result / prompt \u3082\u8FD4\u3059",takesValue:false},PROJECT_FLAG],paging:historyPaging,async prepare(input,ctx){rejectArgs(input,"history list");if(nonEmpty(input.flags,"--since")===void 0){throw new UsageError("--since \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044","twp agent-loop history list --since 2026-09-01")}oneOf(input.flags,
68
70
  "--status",STATUSES);return prepareProject(input,ctx)},plan(input){const until=nonEmpty(input.flags,"--until");return{method:"GET",path:`${basePath(input)}/history`,query:{from:historyBound(nonEmpty(input.flags,"--since")),to:until===void 0?void 0:historyBound(until),fields:input.flags.has("--full")?"full":void 0,status:oneOf(input.flags,"--status",STATUSES),task_key:nonEmpty(input.flags,"--task-key"),runner_id:nonEmpty(input.flags,"--runner"),skill:nonEmpty(input.flags,"--skill"),ai_type:nonEmpty(
69
- input.flags,"--ai-type"),limit:positiveInteger(input.flags,"--limit"),cursor:nonEmpty(input.flags,"--cursor")}}},summarize:body=>historyPaging.items(body).map(row=>pick(row,HISTORY_COLUMNS)),raw:body=>historyPaging.items(body)}]};var agentLoopDomain={name:"agent-loop",summary:"\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u30EB\u30FC\u30D7\u306E\u30AD\u30E5\u30FC\uFF08\u30A2\u30A4\u30C6\u30E0\u306E\u4E00\u89A7\u30FB\u6295\u5165\u30FB\u66F4\u65B0\u30FB\u4E26\u3073\u66FF\u3048\u30FB\u524A\u9664\u30FB\u5B9F\u884C\u5C65\u6B74\uFF09",
71
+ input.flags,"--ai-type"),limit:positiveInteger(input.flags,"--limit"),cursor:nonEmpty(input.flags,"--cursor")}}},summarize:body=>historyPaging.items(body).map(row=>pick(row,HISTORY_COLUMNS)),raw:body=>historyPaging.items(body)}]};var planHistoryResource={name:"plan-history",summary:"\u8A08\u753B\u30D5\u30A7\u30FC\u30BA\u306E\u5B9F\u884C\u8A18\u9332\uFF08\u671F\u9593\u6307\u5B9A\uFF09",operations:[{name:"list",summary:"\u671F\u9593\u3092\u6307\u5B9A\u3057\u3066\u8A08\u753B\u306E\u5B9F\u884C\u8A18\u9332\u3092\u4E00\u89A7\u3059\u308B",
72
+ usage:"twp agent-loop plan-history list --since <\u65E5\u4ED8|\u65E5\u6642> [--until <\u65E5\u4ED8|\u65E5\u6642>] [--result <\u7D50\u679C>] [--runner <ID>] [--full]",description:`\u8A08\u753B\u306E\u958B\u59CB\u6642\u523B\u3067\u671F\u9593\u3092\u5207\u308A\u307E\u3059\u3002--since \u306F\u305D\u306E\u6642\u523B\u3092\u542B\u307F\u3001--until \u306F\u542B\u307F\u307E\u305B\u3093\uFF08\u7701\u7565\u6642\u306F\u73FE\u5728\uFF09\u3002
73
+ YYYY-MM-DD \u306F UTC \u306E 0 \u6642\u3068\u3057\u3066\u6271\u3044\u307E\u3059\u3002ISO8601\uFF082026-09-01T09:00:00+09:00\uFF09\u3082\u6E21\u305B\u307E\u3059\u3002
74
+ --result \u306F ${PLAN_RESULTS.join(" / ")} \u306E\u3044\u305A\u308C\u304B\u3002
75
+ \u65E2\u5B9A\u3067\u306F\u6700\u7D42\u5831\u544A\u3068 steps \u306E\u672C\u6587\u3092\u8FD4\u3057\u307E\u305B\u3093\uFF08--full \u3067\u8FD4\u3057\u307E\u3059\uFF09\u3002
76
+ AI \u306E\u6570\u5024\uFF08cost_usd \u7B49\uFF09\u306F claude \u4EE5\u5916\u3067\u306F null \u3067\u3059\u3002\u5408\u8A08\u3059\u308B\u3068\u304D\u306F 0 \u3068\u3057\u3066\u8DB3\u3055\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002
77
+
78
+ ${PROJECT_HELP}
79
+
80
+ `+LIST_PAGING_HELP,flags:[...LIST_FLAGS,{name:"--since",summary:"\u671F\u9593\u306E\u958B\u59CB\uFF08\u3053\u306E\u6642\u523B\u3092\u542B\u3080\u30FB\u5FC5\u9808\uFF09",takesValue:true,placeholder:"<\u65E5\u4ED8|\u65E5\u6642>"},{name:"--until",summary:"\u671F\u9593\u306E\u7D42\u4E86\uFF08\u3053\u306E\u6642\u523B\u3092\u542B\u307E\u306A\u3044\u30FB\u7701\u7565\u6642\u306F\u73FE\u5728\uFF09",takesValue:true,placeholder:"<\u65E5\u4ED8|\u65E5\u6642>"},{name:"--result",summary:`\u7D50\u679C\u3067\u7D5E\u308A\u8FBC\u3080\uFF08${PLAN_RESULTS.
81
+ join(" / ")}\uFF09`,takesValue:true,placeholder:"<\u7D50\u679C>"},{name:"--runner",summary:"\u5B9F\u884C\u6A5F\uFF08runner_id\uFF09\u3067\u7D5E\u308A\u8FBC\u3080",takesValue:true,placeholder:"<runner_id>"},{name:"--full",summary:"\u6700\u7D42\u5831\u544A\u3068 steps \u306E\u672C\u6587\u3082\u8FD4\u3059",takesValue:false},PROJECT_FLAG],paging:planHistoryPaging,async prepare(input,ctx){rejectArgs(input,"plan-history list");if(nonEmpty(input.flags,"--since")===void 0){throw new UsageError("--since \
82
+ \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044","twp agent-loop plan-history list --since 2026-10-01")}oneOf(input.flags,"--result",PLAN_RESULTS);return prepareProject(input,ctx)},plan(input){const until=nonEmpty(input.flags,"--until");return{method:"GET",path:`${basePath(input)}/plan/history`,query:{from:historyBound(nonEmpty(input.flags,"--since")),to:until===void 0?void 0:historyBound(until),fields:input.flags.has("--full")?"full":void 0,result:oneOf(input.flags,"--result",PLAN_RESULTS),
83
+ runner_id:nonEmpty(input.flags,"--runner"),limit:positiveInteger(input.flags,"--limit"),cursor:nonEmpty(input.flags,"--cursor")}}},summarize:body=>planHistoryPaging.items(body).map(row=>pick(row,PLAN_HISTORY_COLUMNS)),raw:body=>planHistoryPaging.items(body)}]};var agentLoopDomain={name:"agent-loop",summary:"\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u30EB\u30FC\u30D7\u306E\u30AD\u30E5\u30FC\uFF08\u30A2\u30A4\u30C6\u30E0\u306E\u4E00\u89A7\u30FB\u6295\u5165\u30FB\u66F4\u65B0\u30FB\u4E26\u3073\u66FF\u3048\u30FB\u524A\u9664\u30FB\u5B9F\u884C\u5C65\u6B74\uFF09",
70
84
  operations:[{name:"list",summary:"\u30AD\u30E5\u30FC\u306E\u30A2\u30A4\u30C6\u30E0\u3092\u4E00\u89A7\u3059\u308B\uFF08\u65B0\u3057\u3044\u9806\uFF09",usage:"twp agent-loop list [--status <\u72B6\u614B>] [--limit <\u4EF6\u6570>] [--all] [--project <\u30B3\u30FC\u30C9|ID>]",description:`--status \u306F ${STATUSES.join(" / ")} \u306E\u3044\u305A\u308C\u304B\u3002\u7701\u7565\u3059\u308B\u3068\u5168\u72B6\u614B\u3092\u65B0\u3057\u3044\u9806\u306B\u8FD4\u3057\u307E\u3059\u3002
71
85
  \u671F\u9593\u3067\u5207\u3063\u305F\u5B9F\u884C\u5C65\u6B74\u306F twp agent-loop history list \u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\uFF08\u3053\u3061\u3089\u306F\u5B8C\u4E86\u6E08\u307F\u3092\u5927\u91CF\u306B\u6301\u3064\u3068\u9045\u304F\u306A\u308A\u307E\u3059\uFF09\u3002
72
86
 
@@ -75,4 +89,4 @@ ${PROJECT_HELP}
75
89
  `+LIST_PAGING_HELP,flags:[...LIST_FLAGS,{name:"--status",summary:`\u72B6\u614B\u3067\u7D5E\u308A\u8FBC\u3080\uFF08${STATUSES.join(" / ")}\uFF09`,takesValue:true,placeholder:"<\u72B6\u614B>"},PROJECT_FLAG],paging:listPaging,async prepare(input,ctx){rejectArgs(input,"list");oneOf(input.flags,"--status",STATUSES);return prepareProject(input,ctx)},plan(input){const status=oneOf(input.flags,"--status",STATUSES);return{method:"GET",path:basePath(input),query:{status,paginated:status===void 0?"1":void 0,
76
90
  limit:positiveInteger(input.flags,"--limit"),cursor:nonEmpty(input.flags,"--cursor")}}},summarize:body=>listPaging.items(body).map(row=>pick(row,LIST_COLUMNS)),raw:body=>listPaging.items(body)},{name:"get",summary:"\u30A2\u30A4\u30C6\u30E01\u4EF6\u306E\u8A73\u7D30\u3092\u8868\u793A\u3059\u308B",usage:"twp agent-loop get <\u30A2\u30A4\u30C6\u30E0ID> [--project <\u30B3\u30FC\u30C9|ID>]",description:`\u30B9\u30C6\u30C3\u30D7\u30ED\u30B0\u5168\u6587\uFF08result\uFF09\u306F --output json \u304B --query result \u3067\u8AAD\u3081\u307E\u3059\u3002
77
91
 
78
- ${PROJECT_HELP}`,flags:[ITEM_FLAG,PROJECT_FLAG],prepare:(input,ctx)=>prepareItem(input,ctx,"twp agent-loop get help"),plan:input=>({method:"GET",path:itemPath(input)}),summarize:body=>pick(itemObject(body),GET_COLUMNS),raw:itemObject},createOperation,updateOperation,moveOperation,deleteOperation],subresources:[historyResource]};export{agentLoopDomain,createBody,historyResource,parseSkillPrompt,updateBody};
92
+ ${PROJECT_HELP}`,flags:[ITEM_FLAG,PROJECT_FLAG],prepare:(input,ctx)=>prepareItem(input,ctx,"twp agent-loop get help"),plan:input=>({method:"GET",path:itemPath(input)}),summarize:body=>pick(itemObject(body),GET_COLUMNS),raw:itemObject},createOperation,updateOperation,moveOperation,deleteOperation],subresources:[historyResource,planHistoryResource]};export{agentLoopDomain,createBody,historyResource,parseSkillPrompt,planHistoryResource,updateBody};
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{failureHint,isAuthError,isCliFatalText,isRateLimited,isServerAiType,isUntrusted,maxTurnsReached,rateLimitWaitSeconds,tailForScan}from"./chunk-ZOOEH7ZE.js";import{expandServerSkills,prepareSkillOverlay}from"./chunk-PVP3REVW.js";import{detectAiClis}from"./chunk-5SONMN6K.js";import"./chunk-RRHAX7RK.js";import"./chunk-A4LFG7MW.js";import"./chunk-VRBI2NPI.js";import{ClaudeStreamRenderer}from"./chunk-DXUFECE7.js";import"./chunk-SPZ3GBYC.js";import{
3
+ import{failureHint,isAuthError,isCliFatalText,isRateLimited,isServerAiType,isUntrusted,maxTurnsReached,rateLimitWaitSeconds,tailForScan}from"./chunk-ZOOEH7ZE.js";import{expandServerSkills,prepareSkillOverlay}from"./chunk-DLY2IN3G.js";import{detectAiClis}from"./chunk-5SONMN6K.js";import"./chunk-RRHAX7RK.js";import"./chunk-A4LFG7MW.js";import"./chunk-VRBI2NPI.js";import{ClaudeStreamRenderer}from"./chunk-DXUFECE7.js";import"./chunk-5KAWCLYN.js";import{
4
4
  DEFAULT_CLAUDE_LAUNCHER,activeSlotPath,detectClaudeAutoSwitch,isClaudeAi,isUsableModelId,modelFitsRoute,resolveSpawnTarget,usesBedrock,wrapWithAutoSwitch}from"./chunk-FABDZBDZ.js";import"./chunk-6CS5L24D.js";import{isForceOnly,killProcessTree,system32}from"./chunk-N2UVRM3Z.js";import"./chunk-GY7KI5E5.js";import"./chunk-VFPY2A23.js";import{findExecutable,isWindowsDriveAbsolute}from"./chunk-PMOUHEJQ.js";import"./chunk-J7QYPKVK.js";import"./chunk-5WGOHFAS.js";
5
5
  import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";import{spawnSync}from"child_process";import fs2 from"fs";import path2 from"path";import{spawn}from"child_process";import fs from"fs";import path from"path";var DEFAULT_AI_TIMING={abortGraceMs:5e3,abortReapMs:2e3,pollIntervalMs:5e3};function resolveTiming(over){return{abortGraceMs:over?.abortGraceMs??DEFAULT_AI_TIMING.abortGraceMs,abortReapMs:over?.abortReapMs??DEFAULT_AI_TIMING.abortReapMs,pollIntervalMs:over?.pollIntervalMs??DEFAULT_AI_TIMING.pollIntervalMs}}var MAX_RETAINED_BYTES=4*1024*1024;function closeStream(stream){return new Promise(resolve=>{if(stream===null)return resolve();stream.once("error",()=>resolve());stream.end(()=>resolve())})}function buildArgs(req,cfg,env,workspace){
6
6
  const warnings=[];const requested=(req.model??"").trim();const usable=requested!==""&&isUsableModelId(requested);if(requested!==""&&!usable){warnings.push(`ai_model '${requested}' \u306F\u4F7F\u3048\u306A\u3044\u5F62\u3067\u3059 \u2192 \u30AB\u30C6\u30B4\u30EA\u65E2\u5B9A\u306E\u30E2\u30C7\u30EB\u3092\u4F7F\u3044\u307E\u3059`)}const fitsRoute=!usable||!isClaudeAi(req.ai)||modelFitsRoute(requested,env);if(usable&&!fitsRoute){warnings.push(`ai_model '${requested}' \u306F\u73FE\u5728\u306E\u5B9F\u884C\u7D4C\u8DEF\u3067\u306F\u89E3\u6C7A\u3067\u304D\u307E\u305B\u3093\uFF08\u3053\u306E\u6A5F\u4F53\u306F ${usesBedrock(
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{CommandModelMissingError,MAX_REPORTED_VIOLATIONS,loadCommandModelDomain,loadCommandModelRoutes,validateBody,validateQuery}from"./chunk-NZ7WI4RZ.js";import{NO_REDACT_FLAG,NO_REDACT_NOTICE,exitCodeFor,fetchAllPages,reportError}from"./chunk-3EATJTPN.js";import"./chunk-53D2WQQO.js";import"./chunk-Q3B65OFC.js";import{evaluateQuery}from"./chunk-GFLGXGWE.js";import{renderOutput}from"./chunk-YXVN6OCH.js";import{redactSecretValues,redactSecrets,withDebug}from"./chunk-UFGJSWKU.js";
3
+ import{CommandModelMissingError,MAX_REPORTED_VIOLATIONS,loadCommandModelDomain,loadCommandModelRoutes,validateBody,validateQuery}from"./chunk-NZ7WI4RZ.js";import{NO_REDACT_FLAG,NO_REDACT_NOTICE,exitCodeFor,fetchAllPages,reportError}from"./chunk-LUBON4AA.js";import"./chunk-YUS4VPNA.js";import"./chunk-Q3B65OFC.js";import{evaluateQuery}from"./chunk-GFLGXGWE.js";import{renderOutput}from"./chunk-YXVN6OCH.js";import{redactSecretValues,redactSecrets,withDebug}from"./chunk-UFGJSWKU.js";
4
4
  import{describeWaitResult,parseWaitOptions,waitUntilTerminal}from"./chunk-WVCEKC7V.js";import{DEFAULT_MAX_ITEMS,DEFAULT_MAX_PAGES,envelopePaging,isPageNumberEnvelope,pageRangeNotes,positiveInteger,readEnvelopeCursor,readPageNumberCursor,shellQuote}from"./chunk-MI6HVYR2.js";import{parseOperationArgs,repeatedValues}from"./chunk-RX5HWI4L.js";import{readBody}from"./chunk-6LSQCOCJ.js";import"./chunk-HNG6MF26.js";import"./chunk-HVZUXLQ4.js";import{ApiError,TwpApiClient,
5
5
  appendQuery}from"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import"./chunk-II5RVJQN.js";import"./chunk-3ZRMMBP5.js";import{ApiResponseError,EXIT_OK,EXIT_WAIT_TIMEOUT,NetworkError,UsageError}from"./chunk-VFPY2A23.js";import{GLOBAL_OPTIONS_HELP}from"./chunk-PECIBNFD.js";import{AuthSession,NotLoggedInError,SessionExpiredError,loadCredentials}from"./chunk-XNLIEUAW.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import{effectiveApiUrl,resolveConfiguredOutput,
6
6
  resolveProfile}from"./chunk-4VZKNEVN.js";import"./chunk-RZVI6PMW.js";import{HELP_TOKEN}from"./chunk-KDH3KWPO.js";import"./chunk-QQRJLH6B.js";import{OUTPUT_FORMATS,resolveOutputFormat}from"./chunk-74BPZOKU.js";import"./chunk-UREA4ZIG.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var MIN_SEGMENT_CHARS=3;var parsedCache=new WeakMap;function splitSegments(path){return path.split("/").filter(segment=>segment!=="")}function parseRoutes(routes){const cached=parsedCache.get(routes);if(cached!==void 0)return cached;const parsed=[];for(const[key,domain]of Object.entries(routes.routes)){const space=key.indexOf(" ");if(space<=0)continue;const template=key.slice(space+1);parsed.push({method:key.slice(0,space),template,domain,segments:splitSegments(template).map(segment=>/^\{[^/{}]+\}$/.
@@ -1,8 +1,8 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{RESIDENT_TOKEN_CAP,activateModeFiles,activatePermissionSettings,buildResidentSet,buildSystemPrompt,createAuditLogger,createTwpToolkit,currentBranch,describeAuditLog,describeToolCatalog,displayCwd,executeTool,findProjectTwpSubdir,localTools,lstatOrNull,parseFrontMatter,parseRule,persistProjectAllow,projectPermissionsPath,projectRootFor,readFileTool,residentInputs,resolveGitExecutable,runTurn,secretReason}from"./chunk-7PDUN5MS.js";import{buildDiffLines,diffStat}from"./chunk-VRBI2NPI.js";
4
- import"./chunk-NZ7WI4RZ.js";import"./chunk-UFGJSWKU.js";import"./chunk-N2UVRM3Z.js";import"./chunk-HNG6MF26.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import"./chunk-II5RVJQN.js";import"./chunk-VFPY2A23.js";import{RelayError,builtinCatalog,createRuntime,loadCachedCatalog,modelLabel,pickModel,toModelInfos}from"./chunk-5WTFZJT7.js";import"./chunk-D233KKXW.js";import"./chunk-PMOUHEJQ.js";
5
- import"./chunk-XNLIEUAW.js";import{proxyDiagnostics}from"./chunk-J7QYPKVK.js";import{checkMinSupportedVersion,isBelowMinSupported,minSupportedBlockMessage}from"./chunk-DXXFUNYN.js";import"./chunk-4VZKNEVN.js";import{configReadDirs,twpHomeDir}from"./chunk-RZVI6PMW.js";import{parseArgv}from"./chunk-ZKS2F7C6.js";import{applyPermissionMode,checkPermission,describePermissionMode,getMode,isModeId,modeSource,nextMode}from"./chunk-2LOT54OO.js";import"./chunk-KDH3KWPO.js";
3
+ import{RESIDENT_TOKEN_CAP,activateModeFiles,activatePermissionSettings,buildResidentSet,buildSystemPrompt,createAuditLogger,createTwpToolkit,currentBranch,describeAuditLog,describeToolCatalog,displayCwd,executeTool,findProjectTwpSubdir,localTools,lstatOrNull,parseFrontMatter,parseRule,persistProjectAllow,projectPermissionsPath,projectRootFor,readFileTool,residentInputs,resolveGitExecutable,runTurn,secretReason}from"./chunk-7PDUN5MS.js";import"./chunk-NZ7WI4RZ.js";import"./chunk-UFGJSWKU.js";
4
+ import{buildDiffLines,diffStat}from"./chunk-VRBI2NPI.js";import"./chunk-N2UVRM3Z.js";import"./chunk-HNG6MF26.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import"./chunk-II5RVJQN.js";import"./chunk-VFPY2A23.js";import{RelayError,builtinCatalog,createRuntime,loadCachedCatalog,modelLabel,pickModel,toModelInfos}from"./chunk-5WTFZJT7.js";import"./chunk-D233KKXW.js";import"./chunk-PMOUHEJQ.js";
5
+ import"./chunk-XNLIEUAW.js";import{proxyDiagnostics}from"./chunk-J7QYPKVK.js";import{checkMinSupportedVersion,isBelowMinSupported,minSupportedBlockMessage}from"./chunk-DXXFUNYN.js";import"./chunk-4VZKNEVN.js";import{configReadDirs,twpHomeDir}from"./chunk-RZVI6PMW.js";import{parseArgv}from"./chunk-D5EYI7S3.js";import{applyPermissionMode,checkPermission,describePermissionMode,getMode,isModeId,modeSource,nextMode}from"./chunk-2LOT54OO.js";import"./chunk-KDH3KWPO.js";
6
6
  import"./chunk-QQRJLH6B.js";import{isFullWidth,isWide,stringWidth,stripAnsi}from"./chunk-UREA4ZIG.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import{require_fuzzysort}from"./chunk-DIMZRTLE.js";import{__commonJS,__export,__require,__toESM}from"./chunk-VSJBJXZO.js";var require_react_production=__commonJS({"node_modules/react/cjs/react.production.js"(exports){"use strict";var REACT_ELEMENT_TYPE=Symbol.for("react.transitional.element");var REACT_PORTAL_TYPE=Symbol.for("react.portal");var REACT_FRAGMENT_TYPE=Symbol.for("react.fragment");var REACT_STRICT_MODE_TYPE=Symbol.for("react.strict_mode");var REACT_PROFILER_TYPE=Symbol.for("react.profiler");var REACT_CONSUMER_TYPE=Symbol.for("react.consumer");var REACT_CONTEXT_TYPE=Symbol.for("react.context");var REACT_FORWARD_REF_TYPE=Symbol.
7
7
  for("react.forward_ref");var REACT_SUSPENSE_TYPE=Symbol.for("react.suspense");var REACT_MEMO_TYPE=Symbol.for("react.memo");var REACT_LAZY_TYPE=Symbol.for("react.lazy");var REACT_ACTIVITY_TYPE=Symbol.for("react.activity");var REACT_VIEW_TRANSITION_TYPE=Symbol.for("react.view_transition");var MAYBE_ITERATOR_SYMBOL=Symbol.iterator;function getIteratorFn(maybeIterable){if(null===maybeIterable||"object"!==typeof maybeIterable)return null;maybeIterable=MAYBE_ITERATOR_SYMBOL&&maybeIterable[MAYBE_ITERATOR_SYMBOL]||
8
8
  maybeIterable["@@iterator"];return"function"===typeof maybeIterable?maybeIterable:null}var ReactNoopUpdateQueue={isMounted:function(){return false},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}};var assign=Object.assign;var emptyObject={};function Component(props,context,updater){this.props=props;this.context=context;this.refs=emptyObject;this.updater=updater||ReactNoopUpdateQueue}Component.prototype.isReactComponent={};Component.prototype.setState=
@@ -1212,7 +1212,7 @@ cwd()){const listed=await gitListFiles(cwd2);const raw=listed??await walkFiles(c
1212
1212
  1;const after=/^[^\s]*/.exec(text.slice(cursor))?.[0]??"";return{query,start,end:cursor+after.length}}var TWP_SLASH_ROUTES={"/tasks":{domain:"task",operation:"list"},"/task":{domain:"task",operation:"get"},"/projects":{domain:"project",operation:"list"}};function isTwpSlashCommand(name){return Object.hasOwn(TWP_SLASH_ROUTES,name)}async function runTwpSlashCommand(name,args,deps){const route=TWP_SLASH_ROUTES[name];if(!Object.hasOwn(TWP_SLASH_ROUTES,name)||route===void 0){return{code:2,out:"",err:`\u4E0D\u660E\u306A\u30B3\u30DE\u30F3\u30C9: ${name}
1213
1213
  `}}const parsed=parseArgv([route.domain,route.operation,...args]);if(parsed.command!=="domain"||parsed.domain!==route.domain){return{code:2,out:"",err:`${name}: \u3053\u306E\u5F15\u6570\u306F\u4F7F\u3048\u307E\u305B\u3093\uFF08${args.join(" ")}\uFF09
1214
1214
  `}}if(parsed.unknown.length>0){return{code:2,out:"",err:`\u4E0D\u660E\u306A\u5F15\u6570: ${parsed.unknown.join(" ")}
1215
- `}}let out="";let err="";const io={out:text=>void(out+=text),err:text=>void(err+=text),isTty:true};const globals={profile:parsed.profile??deps.profile,...parsed.output!==void 0?{output:parsed.output}:{},...parsed.query!==void 0?{query:parsed.query}:{},dryRun:parsed.dryRun,debug:parsed.debug,yes:parsed.yes,refresh:parsed.refresh};const{runDomain}=await import("./run-XZUJWTTZ.js");try{const code=await runDomain({domain:route.domain,...parsed.operation!==void 0?{operation:parsed.operation}:
1215
+ `}}let out="";let err="";const io={out:text=>void(out+=text),err:text=>void(err+=text),isTty:true};const globals={profile:parsed.profile??deps.profile,...parsed.output!==void 0?{output:parsed.output}:{},...parsed.query!==void 0?{query:parsed.query}:{},dryRun:parsed.dryRun,debug:parsed.debug,yes:parsed.yes,refresh:parsed.refresh};const{runDomain}=await import("./run-R5CU36O3.js");try{const code=await runDomain({domain:route.domain,...parsed.operation!==void 0?{operation:parsed.operation}:
1216
1216
  {},argv:parsed.domainArgv,help:parsed.domainHelp,globals,version:deps.version,io,...deps.fetchImpl!==void 0?{fetchImpl:deps.fetchImpl}:{}});return{code,out,err}}catch(e){return{code:1,out,err:`${err}${e.message}
1217
1217
  `}}}var GIT_LOG_OUTPUT=["9f3c1a2 feat(ui): \u4E00\u89A7\u306E\u30D5\u30A3\u30EB\u30BF\u3092 URL \u30AF\u30A8\u30EA\u3068\u540C\u671F\u3059\u308B","4b8e0d7 fix(ui): \u4EEE\u60F3\u30B9\u30AF\u30ED\u30FC\u30EB\u306E\u884C\u9AD8\u3055\u3092\u5B9F\u6E2C\u5024\u306B\u5408\u308F\u305B\u308B","c15a99e refactor(api): \u4E00\u89A7\u53D6\u5F97\u306E\u30DA\u30FC\u30B8\u30F3\u30B0\u51E6\u7406\u3092\u5171\u901A\u5316\u3059\u308B","2d70f4b test: \u4E00\u89A7\u30D5\u30A3\u30EB\u30BF\u306E\u56DE\u5E30\u30C6\u30B9\u30C8\u3092\u8FFD\u52A0\u3059\u308B",
1218
1218
  "a6e2b38 fix(api): \u7A7A\u306E\u691C\u7D22\u6761\u4EF6\u3067\u5168\u4EF6\u8FD4\u3089\u306A\u3044\u3088\u3046\u306B\u3059\u308B","7c40d51 chore(deps): \u958B\u767A\u4F9D\u5B58\u3092\u6700\u65B0\u3078\u66F4\u65B0\u3059\u308B","e83b1c6 docs: \u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u624B\u9806\u306B Node 22 \u306E\u524D\u63D0\u3092\u8FFD\u8A18\u3059\u308B","b91f7a4 fix(ui): \u30E2\u30FC\u30C0\u30EB\u306E\u91CD\u306A\u308A\u9806\u3092\u6307\u5B9A\u3059\u308B","5a2c8e0 perf(api): \u4E00\u89A7\u306E N+1 \u3092\u89E3\u6D88\u3059\u308B",
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{pick}from"./chunk-SPZ3GBYC.js";import{REUSE_LAST_SUCCESS_MS,capacityError,probeCapacityOutcome}from"./chunk-G4TZFGNN.js";import"./chunk-N2UVRM3Z.js";import{projectFileKey}from"./chunk-GY7KI5E5.js";import"./chunk-PMOUHEJQ.js";import"./chunk-J7QYPKVK.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";import fs from"fs";import os from"os";import path from"path";function lastSuccessPath(stateDir,projectId){return path.join(stateDir,`capacity-report-${projectFileKey(projectId)}.json`)}function readLastSuccess(file){try{const v=JSON.parse(fs.readFileSync(file,"utf8"));if(typeof v!=="object"||v===null)return null;const{payload,at}=v;if(typeof payload!=="string"||typeof at!=="number"||!Number.isFinite(at))return null;return{payload,at}}catch{return null}}function writeLastSuccess(file,value,stderr){try{fs.mkdirSync(path.dirname(file),{recursive:true,mode:448});
3
+ import{pick}from"./chunk-5KAWCLYN.js";import{REUSE_LAST_SUCCESS_MS,capacityError,probeCapacityOutcome}from"./chunk-G4TZFGNN.js";import"./chunk-N2UVRM3Z.js";import{projectFileKey}from"./chunk-GY7KI5E5.js";import"./chunk-PMOUHEJQ.js";import"./chunk-J7QYPKVK.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";import fs from"fs";import os from"os";import path from"path";function lastSuccessPath(stateDir,projectId){return path.join(stateDir,`capacity-report-${projectFileKey(projectId)}.json`)}function readLastSuccess(file){try{const v=JSON.parse(fs.readFileSync(file,"utf8"));if(typeof v!=="object"||v===null)return null;const{payload,at}=v;if(typeof payload!=="string"||typeof at!=="number"||!Number.isFinite(at))return null;return{payload,at}}catch{return null}}function writeLastSuccess(file,value,stderr){try{fs.mkdirSync(path.dirname(file),{recursive:true,mode:448});
4
4
  fs.writeFileSync(file,JSON.stringify(value),{mode:384})}catch(err){stderr(`\u26A0\uFE0F \u76F4\u524D\u306E\u6210\u529F\u5024\u3092 ${file} \u3078\u4FDD\u5B58\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08${err.message}\uFF09
5
5
  `)}}async function registeredAsLoop(api,runnerId){const res=await api.runners();if(!res.ok)return false;const runners=pick(res.json,"runners");if(!Array.isArray(runners))return false;return runners.some(r=>{if(typeof r!=="object"||r===null)return false;const row=r;return row["runner_id"]===runnerId&&(row["kind"]??"loop")==="loop"})}function loopRegisteredMessage(runnerId){return`\u3053\u306E\u30DE\u30B7\u30F3\uFF08runner_id: ${runnerId}\uFF09\u306F\u540C\u3058\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3067\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u30EB\u30FC\u30D7\u3068\u3057\u3066\u767B\u9332\u3055\u308C\u3066\u3044\u308B\u305F\u3081\u3001\u9001\u308A\u307E\u305B\u3093\u3067\u3057\u305F\u3002
6
6
  \u30EB\u30FC\u30D7\u304C\u52D5\u3044\u3066\u3044\u308B\u9593\u306F\u3001\u67A0\u60C5\u5831\u306F\u30EB\u30FC\u30D7\u306E heartbeat \u3067\u9001\u3089\u308C\u307E\u3059\uFF08capacity_probe \u306E\u8A2D\u5B9A\u306F\u30EB\u30FC\u30D7\u3068\u5171\u901A\u3067\u3059\uFF09
@@ -0,0 +1,16 @@
1
+ import { createRequire as __twpCreateRequire } from 'node:module';
2
+ const require = __twpCreateRequire(import.meta.url);
3
+ import{isPrivateProjectId}from"./chunk-GY7KI5E5.js";import{httpFetch}from"./chunk-J7QYPKVK.js";function describeError(res){if(res.status===null)return`transport_error=${res.transportError??"\u4E0D\u660E"}`;const body=res.json;const parts=[`http=${res.status}`];const reason=typeof body?.["reason"]==="string"?body["reason"]:"";if(reason)parts.push(`reason=${reason}`);const error=body?.["error"];const code=typeof error?.["code"]==="string"?error["code"]:"";if(code)parts.push(`code=${code}`);const message=(typeof body?.["message"]==="string"?body["message"]:"")||(typeof error?.["message"]==="\
4
+ string"?error["message"]:"");if(message)parts.push(message.slice(0,160));if(!reason&&!code&&!message)parts.push(`\u5FDC\u7B54\u306E\u5148\u982D: ${res.raw.slice(0,160)}`);return parts.join(" ")}function isPermanent(res){return res.status!==null&&res.status>=400&&res.status<500}var RUNNER_PLATFORMS=["mac","windows","linux"];function normalizeRequiredPlatforms(value){if(!Array.isArray(value))return[];const given=new Set(value.filter(v=>typeof v==="string").map(v=>v.trim().toLowerCase()));return RUNNER_PLATFORMS.
5
+ filter(p=>given.has(p))}function filterByStatus(items,status){return items.filter(item=>item.status===void 0||item.status===status)}var AgentLoopApi=class{constructor(opts){this.opts=opts;const root=opts.apiUrl.replace(/\/+$/,"");this.base=isPrivateProjectId(opts.projectId)?`${root}/api/v2/tasks/private/agent-loop`:`${root}/api/v2/projects/${opts.projectId}/agent-loop`}opts;base;get baseUrl(){return this.base}list(query){const qs=new URLSearchParams;for(const[k,v]of Object.entries(query)){if(v!==
6
+ void 0&&v!=="")qs.set(k,String(v))}const suffix=qs.toString()?`?${qs.toString()}`:"";return this.request("GET",suffix)}create(body){return this.request("POST","",body)}getItem(itemId){return this.request("GET",`/${encodeURIComponent(itemId)}`)}update(itemId,body,runId){return this.request("PUT",`/${encodeURIComponent(itemId)}`,{...body,run_id:runId})}updateUnowned(itemId,body){return this.request("PUT",`/${encodeURIComponent(itemId)}`,body)}logUploadUrl(itemId,runId){return this.request("POST",`\
7
+ /${encodeURIComponent(itemId)}/log-upload-url`,{run_id:runId})}async putPresigned(url,body,contentType){const fetchImpl=this.opts.fetchImpl??httpFetch;const controller=new AbortController;const timer=setTimeout(()=>controller.abort(),this.opts.timeoutMs??6e4);try{const res=await fetchImpl(url,{method:"PUT",headers:{"Content-Type":contentType},signal:controller.signal,body});await res.text().catch(()=>"");return{ok:res.ok,status:res.status,json:null,raw:"",transportError:null}}catch(err){const reason=err.
8
+ name==="AbortError"?"timeout":err.message;return{ok:false,status:null,json:null,raw:"",transportError:reason}}finally{clearTimeout(timer)}}reorder(itemIds){return this.request("PUT","/reorder",{item_ids:itemIds})}claim(runnerId,runId){return this.request("POST","/claim",{runner_id:runnerId,run_id:runId})}reclaim(){return this.request("POST","/reclaim",{})}runners(){return this.request("GET","/runners")}registerRunner(payload){return this.request("POST","/runners/register",payload)}capacityReport(payload){
9
+ return this.request("POST","/runners/capacity-report",payload)}heartbeatRunner(payload){return this.request("POST","/runners/heartbeat",payload)}deregisterRunner(payload){return this.request("POST","/runners/deregister",payload)}planStart(runnerId,runId){return this.request("POST","/plan/start",{runner_id:runnerId,run_id:runId})}planFinish(runnerId,runId,planStartedAt,result,record){return this.request("POST","/plan/finish",{runner_id:runnerId,run_id:runId,plan_started_at:planStartedAt,result,...record?
10
+ {record}:{}})}planRun(runnerId,runId,record){return this.request("POST","/plan/runs",{runner_id:runnerId,run_id:runId,record})}consumeCounter(key,date,limit){return this.request("POST","/counters/consume",{key,date,limit})}listCounters(date){return this.request("GET",`/counters?date=${encodeURIComponent(date)}`)}async queuedSnapshot(){return this.snapshotOf(["pending","processing"])}async processingSnapshot(){return this.snapshotOf(["processing"])}async pendingSnapshot(){return this.snapshotOf([
11
+ "pending"])}async completedSince(sinceMicros,maxPages=10){const all=[];let cursor=String(Math.trunc(sinceMicros));for(let page=0;page<maxPages;page++){const res=await this.list({status:"completed",limit:100,cursor});if(!res.ok)return null;const body=res.json;const items=body?.["items"];if(!Array.isArray(items))return null;all.push(...filterByStatus(items,"completed"));const pagination=body?.["pagination"];const hasMore=(pagination?.["has_more"]??body?.["has_more"])===true;const next=pagination?.["\
12
+ next_cursor"]??body?.["next_cursor"];if(!hasMore||!next)return all;cursor=next}return null}async snapshotOf(statuses){const all=[];for(const status of statuses){let cursor;for(let page=0;page<20;page++){const res=await this.list({status,limit:100,cursor});if(!res.ok)return null;const body=res.json;const items=body?.["items"];if(!Array.isArray(items))return null;all.push(...filterByStatus(items,status));const pagination=body?.["pagination"];const hasMore=(pagination?.["has_more"]??body?.["has_mor\
13
+ e"])===true;const next=pagination?.["next_cursor"]??body?.["next_cursor"];if(!hasMore||!next)break;cursor=next;if(page===19)return null}}return all}outcomes(skill,limit=5){return this.request("GET",`/outcomes?skill=${encodeURIComponent(skill)}&limit=${limit}`)}async request(method,suffix,body){let token;try{token=await this.opts.session.getAccessToken()}catch(err){return{ok:false,status:null,json:null,raw:"",transportError:err.message}}let res=await this.send(method,suffix,token,body);if(res.status===
14
+ 401){try{token=await this.opts.session.refresh(token);res=await this.send(method,suffix,token,body)}catch(err){return{ok:false,status:401,json:null,raw:res.raw,transportError:err.message}}}return res}async send(method,suffix,token,body){const fetchImpl=this.opts.fetchImpl??httpFetch;const controller=new AbortController;const timer=setTimeout(()=>controller.abort(),this.opts.timeoutMs??6e4);try{const res=await fetchImpl(`${this.base}${suffix}`,{method,headers:{Authorization:`Bearer ${token}`,"Con\
15
+ tent-Type":"application/json",Accept:"application/json"},signal:controller.signal,...body===void 0?{}:{body:JSON.stringify(body)}});const raw=await res.text();let json=null;if(raw.trim()!==""){try{json=JSON.parse(raw)}catch{json=null}}return{ok:res.ok,status:res.status,json,raw,transportError:null}}catch(err){const reason=err.name==="AbortError"?"timeout":err.message;return{ok:false,status:null,json:null,raw:"",transportError:reason}}finally{clearTimeout(timer)}}};function pick(json,path){let cur=json;
16
+ for(const part of path.split(".")){if(cur===null||typeof cur!=="object")return void 0;cur=cur[part]}return cur===null?void 0:cur}function pickString(json,path){const v=pick(json,path);if(typeof v==="string")return v;if(typeof v==="number")return String(v);if(typeof v==="boolean")return v?"true":"false";return""}export{describeError,isPermanent,RUNNER_PLATFORMS,normalizeRequiredPlatforms,filterByStatus,AgentLoopApi,pick,pickString};
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{describeError}from"./chunk-SPZ3GBYC.js";import{DEFAULT_INTERVAL_SEC}from"./chunk-LJVAOWZI.js";import{CHAIN_KEYS,reloadAiConfig}from"./chunk-FABDZBDZ.js";import{isPrivateProjectId}from"./chunk-GY7KI5E5.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import fs from"fs";import path from"path";var PROMPT_KEYS=["charter","charter_prefix","charter_suffix","plan_preamble","step_budget","non_interactive_note","safe_mode_note"];function parseServerSettings(res){const json=res.json;if(json===null||typeof json!=="object"||Array.isArray(json))return null;const top=json;const data=top["data"];const b=data!==null&&typeof data==="object"&&!Array.isArray(data)&&"revision"in data?data:top;const revision=b["revision"];if(typeof revision!=="number"||!Number.isInteger(revision)||revision<0)return null;
3
+ import{describeError}from"./chunk-5KAWCLYN.js";import{DEFAULT_INTERVAL_SEC}from"./chunk-LJVAOWZI.js";import{CHAIN_KEYS,reloadAiConfig}from"./chunk-FABDZBDZ.js";import{isPrivateProjectId}from"./chunk-GY7KI5E5.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import fs from"fs";import path from"path";var PROMPT_KEYS=["charter","charter_prefix","charter_suffix","plan_preamble","step_budget","non_interactive_note","safe_mode_note"];function parseServerSettings(res){const json=res.json;if(json===null||typeof json!=="object"||Array.isArray(json))return null;const top=json;const data=top["data"];const b=data!==null&&typeof data==="object"&&!Array.isArray(data)&&"revision"in data?data:top;const revision=b["revision"];if(typeof revision!=="number"||!Number.isInteger(revision)||revision<0)return null;
4
4
  const rawAi=b["ai"];const ai=rawAi!==null&&typeof rawAi==="object"&&!Array.isArray(rawAi)?Object.fromEntries(Object.entries(rawAi).filter(([,v])=>v!==null&&v!==void 0)):{};const prompts={};const rawPrompts=b["prompts"];if(rawPrompts!==null&&typeof rawPrompts==="object"&&!Array.isArray(rawPrompts)){for(const key of PROMPT_KEYS){const v=rawPrompts[key];if(typeof v==="string")prompts[key]=v}}const rawLoop=b["loop"];const rawInterval=rawLoop!==null&&typeof rawLoop==="object"&&!Array.isArray(rawLoop)?
5
5
  rawLoop["interval_sec"]:void 0;const intervalSec=typeof rawInterval==="number"&&Number.isInteger(rawInterval)&&rawInterval>0?rawInterval:null;const rawOutcomes=b["outcomes"];const outcomeSkills=Array.isArray(rawOutcomes)?[...new Set(rawOutcomes.map(r=>r!==null&&typeof r==="object"?r["skill"]:void 0).filter(v=>typeof v==="string"&&v.trim()!==""))]:[];return{revision,ai,prompts,intervalSec,outcomeSkills}}function formatConfigHash(aiHash,revision,ai,charter){return`${aiHash};r=${revision};ai=${ai};\
6
6
  charter=${charter}`}function renderStepBudget(template,vars){return template.replaceAll("{timeout_min}",String(vars.timeoutMin)).replaceAll("{soft_min}",String(vars.softMin)).replaceAll("{wrap_up_min}",String(vars.wrapUpMin))}var LoopSettingsApplier=class{constructor(deps){this.deps=deps}deps;last=null;lastWarning="";lastAiWarning="";lastSummary="";serverAiApplied=false;lastSafeWarning="";lastInterval="";async apply(){const{config,log}=this.deps;const outcome=await this.fetch();const warning=outcome.
@@ -0,0 +1,48 @@
1
+ import { createRequire as __twpCreateRequire } from 'node:module';
2
+ const require = __twpCreateRequire(import.meta.url);
3
+ import{isModeId,isPermissionModeId}from"./chunk-2LOT54OO.js";import{API_TOKEN,HELP_TOKEN,isDomainName}from"./chunk-KDH3KWPO.js";import{splitFlagToken}from"./chunk-QQRJLH6B.js";var BUILTIN_COMMANDS=["login","logout","whoami","update","task-loop"];var TASK_LOOP_ACTIONS=["run","status","stop","schedule","setup","charter","skill","settings","plan","capacity"];var VALUE_FLAGS=new Set(["-p","--print","--profile","--tenant","--mode","--permission-mode","--model","--allowed-tools","--disallowed-tools","--project","--engine","--interval","--max-cycles","--ai","--workspace","--ai-config-file","--now","--counts","--gate","--file","--out","--revision","--dir","--from","--to","--o\
4
+ utput","--query"]);var BOOLEAN_FLAGS=new Set(["-h","--help","-v","--version","--no-tui","--doctor","--password","--token","--no-browser","--safe","--daemon","--force-runner","--force","--drain","--yes","-y","--no-ai-config-file","--verbose","--all","--empty","--check","--dry-run","--debug","--refresh"]);function dispatch(argv,limit=2){const tokens=[];const indexes=[];let truncated=false;for(let i=0;i<argv.length;i++){const arg=argv[i];if(arg===void 0)continue;if(arg.startsWith("-")&&arg!=="-"){const{
5
+ name,value:inline}=splitFlagToken(arg);if(BOOLEAN_FLAGS.has(name)){if(inline!==void 0){truncated=true;break}continue}if(VALUE_FLAGS.has(name)){if(inline!==void 0)continue;const next=argv[i+1];if(next!==void 0&&(!next.startsWith("-")||next==="-"))i++;continue}truncated=true;break}if(arg===""||arg==="-")continue;if(tokens.length>=limit)break;tokens.push(arg);indexes.push(i)}return{tokens,indexes,truncated}}function isBuiltin(token){return token!==void 0&&BUILTIN_COMMANDS.includes(token)}function isTaskLoopAction(token){
6
+ return token!==void 0&&TASK_LOOP_ACTIONS.includes(token)}function resolveRoute(result){const{tokens,indexes}=result;const[first,second]=tokens;const firstIndex=indexes[0];if(first===void 0||firstIndex===void 0)return{kind:"none",consumed:[]};const consumed=[firstIndex];const secondIndex=indexes[1];if(isBuiltin(first)){if(first==="task-loop"&&isTaskLoopAction(second)){if(secondIndex!==void 0)consumed.push(secondIndex);return{kind:"builtin",command:first,action:second,consumed}}return{kind:"builti\
7
+ n",command:first,...first==="task-loop"?{action:"run"}:{},consumed}}if(second!==void 0&&secondIndex!==void 0)consumed.push(secondIndex);return{kind:"domain",domain:first,...second!==void 0?{operation:second}:{},consumed}}var GLOBAL_FLAGS=new Set(["-h","--help","-v","--version","--profile","--output","--query","--dry-run","--debug","--yes","-y","--refresh"]);function parseArgv(argv){const out={command:"tui",safe:false,daemon:false,forceRunner:false,stopForce:false,logoutForce:false,stopDrain:false,noTui:false,doctor:false,yes:false,skillAll:false,planEmpty:false,planCheck:false,noAiConfigFile:false,verbose:false,loginMethod:"browser",loginNoBrowser:false,promptFromStdin:false,domainArgv:[],domainHelp:false,dryRun:false,
8
+ debug:false,refresh:false,unknown:[],allowedTools:[],disallowedTools:[]};const route=resolveRoute(dispatch(argv));const consumed=new Set;const[firstIndex,secondIndex]=route.consumed;if(route.kind==="builtin"){out.command=route.command;if(route.action!==void 0)out.taskLoopAction=route.action;for(const index of route.consumed)consumed.add(index)}else if(route.kind==="domain"){if(route.domain===HELP_TOKEN){if(route.operation===void 0){out.command="help";if(firstIndex!==void 0)consumed.add(firstIndex)}else if(isDomainName(
9
+ route.operation)){out.command="domain";out.domain=route.operation;out.domainHelp=true;if(firstIndex!==void 0)consumed.add(firstIndex);if(secondIndex!==void 0)consumed.add(secondIndex)}else if(route.operation===API_TOKEN){out.command="api";out.domainHelp=true;if(firstIndex!==void 0)consumed.add(firstIndex);if(secondIndex!==void 0)consumed.add(secondIndex)}}else if(route.domain===API_TOKEN){out.command="api";if(firstIndex!==void 0)consumed.add(firstIndex)}else if(isDomainName(route.domain)){out.command=
10
+ "domain";out.domain=route.domain;if(route.operation!==void 0)out.operation=route.operation;for(const index of route.consumed)consumed.add(index)}}const hasSubcommandToken=route.kind==="builtin"||route.kind==="domain"&&(route.domain===HELP_TOKEN||route.domain===API_TOKEN||isDomainName(route.domain));const isDomainRoute=out.command==="domain"||out.command==="api";const takeValue=(i,flag,inline)=>{const value=inline??argv[i+1];if(value===void 0||inline===void 0&&value.startsWith("-")){out.unknown.push(
11
+ flag);return{step:0}}if(value.trim()===""){out.unknown.push(inline===void 0?`${flag} `:`${flag}=${inline}`);return{step:0}}return{value,step:inline===void 0?1:0}};let optionsClosed=false;for(let i=0;i<argv.length;i++){if(consumed.has(i))continue;const raw=argv[i];if(raw===void 0)continue;if(isDomainRoute&&raw==="--")optionsClosed=true;const{name:arg,value:inline}=splitFlagToken(raw);if(isDomainRoute&&(optionsClosed||!GLOBAL_FLAGS.has(arg))){out.domainArgv.push(raw);continue}if(inline!==void 0&&BOOLEAN_FLAGS.
12
+ has(arg)){out.unknown.push(raw);continue}switch(arg){case"-h":case"--help":if(isDomainRoute)out.domainHelp=true;else out.command="help";break;case"-v":case"--version":out.command="version";break;case"--no-tui":out.noTui=true;break;case"--doctor":out.doctor=true;break;case"--password":out.loginMethod="password";break;case"--token":out.loginMethod="token";break;case"--no-browser":out.loginNoBrowser=true;break;case"--profile":{const{value,step}=takeValue(i,"--profile",inline);if(value!==void 0){out.
13
+ profile=value;i+=step}break}case"-p":case"--print":{const next=inline??argv[i+1];const step=inline===void 0?1:0;if(hasSubcommandToken){out.unknown.push(raw)}else if(next==="-"){out.command="print";out.promptFromStdin=true;out.prompt="";i+=step}else if(next!==void 0&&(inline!==void 0||!next.startsWith("-"))){out.command="print";out.prompt=next;i+=step}else{out.unknown.push(raw)}break}case"--output":{const{value,step}=takeValue(i,"--output",inline);if(value!==void 0){out.output=value;i+=step}break}case"\
14
+ --query":{const{value,step}=takeValue(i,"--query",inline);if(value!==void 0){out.query=value;i+=step}break}case"--dry-run":out.dryRun=true;break;case"--debug":out.debug=true;break;case"--refresh":out.refresh=true;break;case"--tenant":{const{value,step}=takeValue(i,"--tenant",inline);if(value!==void 0){out.tenant=value;i+=step}break}case"--mode":{const next=inline??argv[i+1];const step=inline===void 0?1:0;if(isModeId(next)){out.mode=next;i+=step}else if(next!==void 0&&(inline!==void 0||!next.startsWith(
15
+ "-"))){out.unknown.push(inline!==void 0?raw:`--mode ${next}`);i+=step}else{out.unknown.push("--mode")}break}case"--permission-mode":{const next=inline??argv[i+1];const step=inline===void 0?1:0;if(isPermissionModeId(next)){out.permissionMode=next;i+=step}else if(next!==void 0&&(inline!==void 0||!next.startsWith("-"))){out.unknown.push(inline!==void 0?raw:`--permission-mode ${next}`);i+=step}else{out.unknown.push("--permission-mode")}break}case"--allowed-tools":case"--disallowed-tools":{const{value,
16
+ step}=takeValue(i,arg,inline);if(value!==void 0){(arg==="--allowed-tools"?out.allowedTools:out.disallowedTools).push(value);i+=step}break}case"--model":{const{value,step}=takeValue(i,"--model",inline);if(value!==void 0){out.model=value;i+=step}break}case"--safe":out.safe=true;break;case"--daemon":out.daemon=true;break;case"--force-runner":out.forceRunner=true;break;case"--force":out.stopForce=true;break;case"--drain":out.stopDrain=true;break;case"--project":{const{value,step}=takeValue(i,"--proj\
17
+ ect",inline);if(value!==void 0){out.project=value;i+=step}break}case"--engine":{const{value,step}=takeValue(i,"--engine",inline);if(value!==void 0){out.engine=value;i+=step}break}case"--interval":case"--max-cycles":{const{value,step}=takeValue(i,arg,inline);if(value!==void 0){const n=Number.parseInt(value,10);if(Number.isInteger(n)&&n>0){if(arg==="--interval")out.interval=n;else out.maxCycles=n}else{out.unknown.push(inline!==void 0?raw:`${arg} ${value}`)}i+=step}break}case"--yes":case"-y":out.yes=
18
+ true;break;case"--ai":{const{value:v,step}=takeValue(i,"--ai",inline);if(v!==void 0){out.ais=[...out.ais??[],v];i+=step}break}case"--no-ai-config-file":out.noAiConfigFile=true;break;case"--workspace":{const{value:v,step}=takeValue(i,"--workspace",inline);if(v!==void 0){out.workspace=v;i+=step}break}case"--ai-config-file":{const{value:v,step}=takeValue(i,"--ai-config-file",inline);if(v!==void 0){out.aiConfigFile=v;i+=step}break}case"--verbose":out.verbose=true;break;case"--now":{const{value:v,step}=takeValue(
19
+ i,"--now",inline);if(v!==void 0){out.scheduleNow=v;i+=step}break}case"--counts":{const{value:v,step}=takeValue(i,"--counts",inline);if(v!==void 0){out.scheduleCounts=v;i+=step}break}case"--gate":{const{value:v,step}=takeValue(i,"--gate",inline);if(v!==void 0){out.scheduleGate=v;i+=step}break}case"--file":{if(inline===void 0&&argv[i+1]==="-"){out.charterFile="-";i+=1;break}const{value:v,step}=takeValue(i,"--file",inline);if(v!==void 0){out.charterFile=v;i+=step}break}case"--out":{const{value:v,step}=takeValue(
20
+ i,"--out",inline);if(v!==void 0){out.charterOut=v;i+=step}break}case"--revision":{const{value:v,step}=takeValue(i,"--revision",inline);if(v!==void 0){out.charterRevision=v;i+=step}break}case"--from":{const{value:v,step}=takeValue(i,"--from",inline);if(v!==void 0){out.revisionFrom=v;i+=step}break}case"--to":{const{value:v,step}=takeValue(i,"--to",inline);if(v!==void 0){out.revisionTo=v;i+=step}break}case"--dir":{const{value:v,step}=takeValue(i,"--dir",inline);if(v!==void 0){out.skillDir=v;i+=step}
21
+ break}case"--all":out.skillAll=true;break;case"--empty":out.planEmpty=true;break;case"--check":out.planCheck=true;break;default:if(out.command==="task-loop"&&out.taskLoopAction==="charter"&&out.charterOp===void 0&&isRevisionAwareOp(raw)){out.charterOp=raw;break}if(out.command==="task-loop"&&out.taskLoopAction==="schedule"){if(out.scheduleOp===void 0&&isScheduleOp(raw)){out.scheduleOp=raw;break}if(out.scheduleOp==="config"&&out.scheduleConfigOp===void 0&&(raw==="pull"||raw==="push")){out.scheduleConfigOp=
22
+ raw;break}if(out.scheduleOp==="delete"&&out.scheduleId===void 0&&!raw.startsWith("-")){out.scheduleId=raw;break}}if(out.command==="task-loop"&&out.taskLoopAction==="settings"&&out.settingsOp===void 0&&(raw==="push"||raw==="pull")){out.settingsOp=raw;break}if(out.command==="task-loop"&&out.taskLoopAction==="plan"&&out.planOp===void 0&&raw==="submit"){out.planOp="submit";break}if(out.command==="task-loop"&&out.taskLoopAction==="capacity"&&out.capacityOp===void 0&&raw==="report"){out.capacityOp="re\
23
+ port";break}if(out.command==="task-loop"&&out.taskLoopAction==="skill"){if(out.skillOp===void 0&&(isRevisionAwareOp(raw)||isSkillManageOp(raw))){out.skillOp=raw;break}if(out.skillOp!==void 0&&out.skillName===void 0&&!raw.startsWith("-")){out.skillName=raw;break}}out.unknown.push(raw)}}if(out.command!=="login"&&out.loginMethod!=="browser"){out.unknown.push(out.loginMethod==="password"?"--password":"--token");out.loginMethod="browser"}if(out.permissionMode!==void 0&&out.command!=="tui"&&out.command!==
24
+ "print"){out.unknown.push("--permission-mode");delete out.permissionMode}if(out.command!=="tui"&&out.command!=="print"){if(out.allowedTools.length>0)out.unknown.push("--allowed-tools");if(out.disallowedTools.length>0)out.unknown.push("--disallowed-tools");out.allowedTools=[];out.disallowedTools=[]}if(out.loginNoBrowser&&!(out.command==="login"&&out.loginMethod==="browser")){out.unknown.push("--no-browser");out.loginNoBrowser=false}if(out.command==="logout"&&out.stopForce){out.logoutForce=true;out.
25
+ stopForce=false}if(out.command!=="task-loop"){if(out.safe)out.unknown.push("--safe");if(out.daemon)out.unknown.push("--daemon");if(out.forceRunner)out.unknown.push("--force-runner");if(out.stopForce)out.unknown.push("--force");if(out.stopDrain)out.unknown.push("--drain");if(out.engine!==void 0)out.unknown.push("--engine");if(out.interval!==void 0)out.unknown.push("--interval");if(out.maxCycles!==void 0)out.unknown.push("--max-cycles");if(out.project!==void 0)out.unknown.push("--project");if(out.
26
+ verbose)out.unknown.push("--verbose");if(out.scheduleNow!==void 0)out.unknown.push("--now");if(out.scheduleCounts!==void 0)out.unknown.push("--counts");if(out.scheduleGate!==void 0)out.unknown.push("--gate");if(out.ais!==void 0)out.unknown.push("--ai");if(out.workspace!==void 0)out.unknown.push("--workspace");if(out.aiConfigFile!==void 0)out.unknown.push("--ai-config-file");if(out.noAiConfigFile)out.unknown.push("--no-ai-config-file");if(out.charterFile!==void 0)out.unknown.push("--file");if(out.
27
+ charterOut!==void 0)out.unknown.push("--out");if(out.charterRevision!==void 0)out.unknown.push("--revision");if(out.skillDir!==void 0)out.unknown.push("--dir");if(out.skillAll)out.unknown.push("--all");if(out.revisionFrom!==void 0)out.unknown.push("--from");if(out.revisionTo!==void 0)out.unknown.push("--to");if(out.planEmpty)out.unknown.push("--empty");if(out.planCheck)out.unknown.push("--check")}if(out.yes&&out.command!=="task-loop"&&!isDomainRoute)out.unknown.push("--yes");const acceptsOutput=isDomainRoute||
28
+ out.command==="whoami"||out.command==="task-loop"&&out.taskLoopAction==="skill"&&(out.skillOp==="list"||out.skillOp==="show");if(!acceptsOutput){if(out.output!==void 0)out.unknown.push("--output");if(out.query!==void 0)out.unknown.push("--query")}if(!isDomainRoute){if(out.dryRun)out.unknown.push("--dry-run");if(out.debug)out.unknown.push("--debug");if(out.refresh)out.unknown.push("--refresh")}if(out.command==="api"&&out.refresh){out.unknown.push("--refresh");out.refresh=false}if(out.command==="t\
29
+ ask-loop"&&(out.taskLoopAction!=="schedule"||out.scheduleOp!==void 0)){if(out.verbose)out.unknown.push("--verbose");if(out.scheduleNow!==void 0)out.unknown.push("--now");if(out.scheduleCounts!==void 0)out.unknown.push("--counts");if(out.scheduleGate!==void 0)out.unknown.push("--gate")}if(out.command==="task-loop"&&out.taskLoopAction!=="stop"&&out.stopForce){out.unknown.push("--force")}if(out.command==="task-loop"&&out.taskLoopAction!=="stop"&&out.stopDrain){out.unknown.push("--drain")}if(out.command===
30
+ "task-loop"&&out.taskLoopAction==="stop"&&out.stopForce&&out.stopDrain){out.unknown.push("--force \u3068 --drain \u306F\u540C\u6642\u306B\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093");out.stopForce=false;out.stopDrain=false}if(out.command==="task-loop"&&out.taskLoopAction!=="setup"){const yesConfirms=out.taskLoopAction==="charter"||out.taskLoopAction==="skill"||out.taskLoopAction==="settings"||out.taskLoopAction==="schedule"&&out.scheduleOp!==void 0&&out.scheduleOp!=="list";if(out.yes&&!yesConfirms)
31
+ out.unknown.push("--yes");if(out.ais!==void 0)out.unknown.push("--ai");if(out.workspace!==void 0)out.unknown.push("--workspace");if(out.aiConfigFile!==void 0)out.unknown.push("--ai-config-file");if(out.noAiConfigFile)out.unknown.push("--no-ai-config-file")}if(out.command==="task-loop"&&(out.taskLoopAction==="stop"||out.taskLoopAction==="status")){if(out.safe)out.unknown.push("--safe");if(out.daemon)out.unknown.push("--daemon");if(out.forceRunner)out.unknown.push("--force-runner");if(out.engine!==
32
+ void 0)out.unknown.push("--engine");if(out.interval!==void 0)out.unknown.push("--interval");if(out.maxCycles!==void 0)out.unknown.push("--max-cycles")}if(out.command==="task-loop"&&out.taskLoopAction==="setup"){if(out.engine!==void 0)out.unknown.push("--engine");if(out.safe)out.unknown.push("--safe");if(out.daemon)out.unknown.push("--daemon");if(out.forceRunner)out.unknown.push("--force-runner");if(out.interval!==void 0)out.unknown.push("--interval");if(out.maxCycles!==void 0)out.unknown.push("-\
33
+ -max-cycles")}if(out.command==="task-loop"&&out.taskLoopAction==="charter"){if(out.charterOp===void 0){out.unknown.push("charter \u306B\u306F push / pull / history / diff / revert \u306E\u3044\u305A\u308C\u304B\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044")}if(out.charterOp!=="push"&&out.charterFile!==void 0)out.unknown.push("--file");if(out.charterOp!=="push"&&out.charterOp!=="revert"&&out.charterRevision!==void 0){out.unknown.push("--revision")}pushRevisionFlagErrors(out,out.charterOp);
34
+ if((out.charterOp==="history"||out.charterOp==="diff")&&out.yes)out.unknown.push("--yes");if(out.charterOp!=="pull"&&out.charterOut!==void 0)out.unknown.push("--out");if(out.safe)out.unknown.push("--safe");if(out.daemon)out.unknown.push("--daemon");if(out.forceRunner)out.unknown.push("--force-runner");if(out.engine!==void 0)out.unknown.push("--engine");if(out.interval!==void 0)out.unknown.push("--interval");if(out.maxCycles!==void 0)out.unknown.push("--max-cycles")}else if(out.command==="task-lo\
35
+ op"&&out.taskLoopAction==="skill"){if(out.skillOp===void 0){out.unknown.push(SKILL_OP_REQUIRED)}else if(out.skillOp==="list"&&out.skillAll){out.unknown.push("--all")}else if(out.skillOp==="list"&&out.skillName!==void 0){out.unknown.push(`skill list \u306F\u30B9\u30AD\u30EB\u540D\u3092\u53D7\u3051\u4ED8\u3051\u307E\u305B\u3093: ${out.skillName}`)}else if(out.skillOp==="list"){}else if(out.skillOp!=="push"&&out.skillOp!=="pull"&&out.skillAll){out.unknown.push(`skill ${out.skillOp} \u306F --all \u3092\u53D7\u3051\u4ED8\u3051\u307E\u305B\u3093\
36
+ \uFF08\u30B9\u30AD\u30EB\u540D\u30921\u3064\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF09`)}else if(out.skillName===void 0&&!out.skillAll){out.unknown.push(out.skillOp==="push"||out.skillOp==="pull"?`skill ${out.skillOp} \u306B\u306F\u30B9\u30AD\u30EB\u540D\u304B --all \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044`:`skill ${out.skillOp} \u306B\u306F\u30B9\u30AD\u30EB\u540D\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044`)}else if(out.skillName!==void 0&&out.skillAll){out.unknown.
37
+ push("\u30B9\u30AD\u30EB\u540D\u3068 --all \u306F\u540C\u6642\u306B\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093")}if(out.skillOp!=="push"&&out.skillOp!=="revert"&&out.skillOp!=="delete"&&out.charterRevision!==void 0){out.unknown.push("--revision")}pushRevisionFlagErrors(out,out.skillOp);if((out.skillOp==="history"||out.skillOp==="diff"||out.skillOp==="list"||out.skillOp==="show")&&out.yes){out.unknown.push("--yes")}if(out.skillOp!=="push"&&out.skillOp!=="pull"&&out.skillDir!==void 0)out.unknown.push(
38
+ "--dir");if(out.charterFile!==void 0)out.unknown.push("--file");if(out.charterOut!==void 0)out.unknown.push("--out");if(out.safe)out.unknown.push("--safe");if(out.daemon)out.unknown.push("--daemon");if(out.forceRunner)out.unknown.push("--force-runner");if(out.engine!==void 0)out.unknown.push("--engine");if(out.interval!==void 0)out.unknown.push("--interval");if(out.maxCycles!==void 0)out.unknown.push("--max-cycles")}else if(out.command==="task-loop"&&out.taskLoopAction==="settings"){if(out.settingsOp===
39
+ void 0)out.unknown.push("settings \u306B\u306F push / pull \u306E\u3044\u305A\u308C\u304B\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044");if(out.settingsOp!=="push"&&out.charterFile!==void 0)out.unknown.push("--file");if(out.settingsOp!=="push"&&out.charterRevision!==void 0)out.unknown.push("--revision");if(out.settingsOp!=="pull"&&out.charterOut!==void 0)out.unknown.push("--out");if(out.safe)out.unknown.push("--safe");if(out.daemon)out.unknown.push("--daemon");if(out.forceRunner)out.unknown.
40
+ push("--force-runner");if(out.engine!==void 0)out.unknown.push("--engine");if(out.interval!==void 0)out.unknown.push("--interval");if(out.maxCycles!==void 0)out.unknown.push("--max-cycles")}else if(out.command==="task-loop"&&out.taskLoopAction==="plan"){if(out.planOp===void 0)out.unknown.push("plan \u306B\u306F submit \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044");if(out.charterOut!==void 0)out.unknown.push("--out");if(out.charterRevision!==void 0)out.unknown.push("--revision");if(out.
41
+ safe)out.unknown.push("--safe");if(out.daemon)out.unknown.push("--daemon");if(out.forceRunner)out.unknown.push("--force-runner");if(out.engine!==void 0)out.unknown.push("--engine");if(out.interval!==void 0)out.unknown.push("--interval");if(out.maxCycles!==void 0)out.unknown.push("--max-cycles")}else if(out.command==="task-loop"&&out.taskLoopAction==="capacity"){if(out.capacityOp===void 0)out.unknown.push("capacity \u306B\u306F report \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044");if(out.
42
+ charterFile!==void 0)out.unknown.push("--file");if(out.charterOut!==void 0)out.unknown.push("--out");if(out.charterRevision!==void 0)out.unknown.push("--revision");if(out.safe)out.unknown.push("--safe");if(out.daemon)out.unknown.push("--daemon");if(out.forceRunner)out.unknown.push("--force-runner");if(out.engine!==void 0)out.unknown.push("--engine");if(out.interval!==void 0)out.unknown.push("--interval");if(out.maxCycles!==void 0)out.unknown.push("--max-cycles")}else if(out.command==="task-loop"&&
43
+ out.taskLoopAction==="schedule"&&out.scheduleOp!==void 0){const op=out.scheduleOp;const takesFile=op==="push"||op==="config"&&out.scheduleConfigOp==="push";if(op==="config"&&out.scheduleConfigOp===void 0){out.unknown.push("schedule config \u306B\u306F pull \u304B push \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044")}if(op==="delete"&&out.scheduleId===void 0)out.unknown.push("schedule delete \u306B\u306F\u5B9A\u7FA9ID\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044");if(takesFile&&out.
44
+ charterFile===void 0)out.unknown.push(`schedule ${op==="push"?"push":"config push"} \u306B\u306F --file <\u30D1\u30B9> \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044`);if(!takesFile&&out.charterFile!==void 0)out.unknown.push("--file");if(!(op==="config"&&out.scheduleConfigOp==="pull")&&out.charterOut!==void 0)out.unknown.push("--out");if((op==="list"||op==="config"&&out.scheduleConfigOp!=="push")&&out.charterRevision!==void 0){out.unknown.push("--revision")}if(out.safe)out.unknown.push("\
45
+ --safe");if(out.daemon)out.unknown.push("--daemon");if(out.forceRunner)out.unknown.push("--force-runner");if(out.engine!==void 0)out.unknown.push("--engine");if(out.interval!==void 0)out.unknown.push("--interval");if(out.maxCycles!==void 0)out.unknown.push("--max-cycles")}else if(out.command==="task-loop"){if(out.charterFile!==void 0)out.unknown.push("--file");if(out.charterOut!==void 0)out.unknown.push("--out");if(out.charterRevision!==void 0)out.unknown.push("--revision")}if(out.command==="tas\
46
+ k-loop"&&out.taskLoopAction!=="skill"){if(out.skillDir!==void 0)out.unknown.push("--dir");if(out.skillAll)out.unknown.push("--all")}if(out.command==="task-loop"&&out.taskLoopAction!=="skill"&&out.taskLoopAction!=="charter"){if(out.revisionFrom!==void 0)out.unknown.push("--from");if(out.revisionTo!==void 0)out.unknown.push("--to")}if(out.command==="task-loop"&&out.taskLoopAction!=="plan"){if(out.planEmpty)out.unknown.push("--empty");if(out.planCheck)out.unknown.push("--check")}return out}function isScheduleOp(raw){
47
+ return raw==="list"||raw==="push"||raw==="delete"||raw==="config"}function isSkillManageOp(raw){return raw==="list"||raw==="show"||raw==="delete"}var SKILL_OP_REQUIRED="skill \u306B\u306F push / pull / list / show / delete / history / diff / revert \u306E\u3044\u305A\u308C\u304B\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044";function isRevisionAwareOp(raw){return raw==="push"||raw==="pull"||raw==="history"||raw==="diff"||raw==="revert"}function pushRevisionFlagErrors(out,op){if(op!=="dif\
48
+ f"&&out.revisionFrom!==void 0)out.unknown.push("--from");if(op!=="diff"&&op!=="revert"&&out.revisionTo!==void 0)out.unknown.push("--to")}export{BUILTIN_COMMANDS,TASK_LOOP_ACTIONS,VALUE_FLAGS,GLOBAL_FLAGS,parseArgv};
@@ -0,0 +1,16 @@
1
+ import { createRequire as __twpCreateRequire } from 'node:module';
2
+ const require = __twpCreateRequire(import.meta.url);
3
+ import{isValidSkillName,skillDigest}from"./chunk-RRHAX7RK.js";import{describeError}from"./chunk-5KAWCLYN.js";import{isPrivateProjectId}from"./chunk-GY7KI5E5.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import fs from"fs";import path from"path";var SKILL_REF=/^([ \t]*)\/([a-z][a-z0-9-]*)(?=[ \t\n]|$)([ \t]+[^\n]*)?/gm;function stripFrontmatter(content){if(!content.startsWith("---"))return content;const m=/^---[ \t]*\r?\n[\s\S]*?\r?\n---[ \t]*(?:\r?\n)?/.exec(content);return m===null?content:content.slice(m[0].length)}function referencedSkills(prompt){const out=[];for(const m of prompt.matchAll(SKILL_REF)){const name=m[2]??"";if(!out.includes(name))out.push(name)}return out}function expandServerSkills(prompt,bodies){if(bodies.size===0)return prompt;
4
+ return prompt.replace(SKILL_REF,(whole,_indent,name,args)=>{const body=bodies.get(name);if(body===void 0)return whole;return applyArguments(stripFrontmatter(body),(args??"").trim())})}function applyArguments(body,args){if(body.includes("$ARGUMENTS")){return body.replaceAll("$ARGUMENTS",()=>args)}return args===""?body:`${body}
5
+
6
+ ARGUMENTS: ${args}`}function prepareSkillOverlay(root,workspace,bodies,provider){const commands=path.join(root,".claude","commands");fs.rmSync(root,{recursive:true,force:true});fs.mkdirSync(commands,{recursive:true});const src=path.join(workspace,".claude","commands");let names=[];try{names=fs.readdirSync(src).filter(f=>f.endsWith(".md"))}catch{}for(const f of names){const from=path.join(src,f);try{if(fs.statSync(from).isFile())fs.copyFileSync(from,path.join(commands,f))}catch{}}for(const[name,body]of bodies){
7
+ if(!isValidSkillName(name))continue;fs.writeFileSync(path.join(commands,`${name}.md`),body,"utf8")}if(/^[a-z0-9-]+$/.test(provider)){const rel=path.join("scripts","agent-adapters","providers",`${provider}.md`);const from=path.join(workspace,rel);if(fs.existsSync(from)){fs.mkdirSync(path.dirname(path.join(root,rel)),{recursive:true});fs.copyFileSync(from,path.join(root,rel))}}}function unwrap(json,key){if(json===null||typeof json!=="object"||Array.isArray(json))return null;const top=json;const data=top["\
8
+ data"];if(data!==null&&typeof data==="object"&&!Array.isArray(data)&&key in data){return data}return top}function isRevision(v){return typeof v==="number"&&Number.isInteger(v)&&v>=0}function parseSkillList(res){const b=unwrap(res.json,"skills");const raw=b?.["skills"];if(!Array.isArray(raw))return null;const out=new Map;for(const s of raw){if(s===null||typeof s!=="object")continue;const{name,revision,digest}=s;if(typeof name!=="string"||!isValidSkillName(name)||!isRevision(revision)||typeof digest!==
9
+ "string"){continue}out.set(name,{name,revision,digest})}return out}function parseSkillBody(res){const b=unwrap(res.json,"body");if(b===null)return null;const{name,revision,body}=b;if(typeof name!=="string"||!isRevision(revision)||typeof body!=="string")return null;const digest=skillDigest(body);if(b["digest"]!==digest)return null;return{name,revision,digest,body}}var ServerSkillCatalog=class{constructor(deps){this.deps=deps}deps;list=new Map;source="none";bodies=new Map;lastWarning="";names(){return[
10
+ ...this.list.keys()]}hashPart(){return this.source==="none"||this.list.size===0?"skills=file":`skills=${this.source}:${this.list.size}`}async refresh(){const{config,log}=this.deps;const warning=await this.fetchList();if(warning!==""&&warning!==this.lastWarning)log(` \u26A0\uFE0F ${warning}`);else if(warning===""&&this.lastWarning!=="")log("\u30B9\u30AD\u30EB\u5B9A\u7FA9\u306E\u4E00\u89A7\u3092\u30B5\u30FC\u30D0\u304B\u3089\u518D\u3073\u53D6\u5F97\u3067\u304D\u308B\u3088\u3046\u306B\u306A\u308A\u307E\u3057\u305F");
11
+ this.lastWarning=warning;for(const name of[...this.bodies.keys()])if(!this.list.has(name))this.bodies.delete(name);config.configHash=`${config.configHash};${this.hashPart()}`}async fetchList(){if(isPrivateProjectId(this.deps.config.projectId??"")){this.list=new Map;this.source="none";return""}const res=await this.deps.api.request("GET","/settings/skills");const parsed=res.ok?parseSkillList(res):null;if(parsed!==null){this.list=parsed;this.source="server";return""}const reason=stripTerminalControls(
12
+ res.ok?`\u5FDC\u7B54\u3092\u89E3\u91C8\u3067\u304D\u307E\u305B\u3093\uFF08\u5148\u982D: ${res.raw.slice(0,120)}\uFF09`:describeError(res));if(res.status===404){this.list=new Map;this.source="none";return""}const transient=res.status===null||res.status>=500||res.ok;if(transient&&this.source!=="none"){this.source="cached";return`\u30B9\u30AD\u30EB\u5B9A\u7FA9\u306E\u4E00\u89A7\u3092\u30B5\u30FC\u30D0\u304B\u3089\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\uFF08${reason}\uFF09\u3002\u76F4\u524D\u306B\u53D6\u5F97\u3057\u305F\u4E00\u89A7\uFF08${this.
13
+ list.size}\u4EF6\uFF09\u3067\u8D70\u308A\u307E\u3059`}this.list=new Map;this.source="none";return`\u30B9\u30AD\u30EB\u5B9A\u7FA9\u306E\u4E00\u89A7\u3092\u30B5\u30FC\u30D0\u304B\u3089\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\uFF08${reason}\uFF09\u3002\u4F5C\u696D\u30C4\u30EA\u30FC\u306E\u30B9\u30AD\u30EB\u30D5\u30A1\u30A4\u30EB\u3067\u8D70\u308A\u307E\u3059`}async resolve(prompt){const bodies=new Map;const origins=[];for(const name of referencedSkills(prompt)){const entry=this.list.get(name);if(entry===
14
+ void 0){if(fs.existsSync(path.join(this.deps.config.workspace,".claude","commands",`${name}.md`))){origins.push({name,origin:"skill=file"})}continue}const cached=this.bodies.get(name);let detail=cached!==void 0&&cached.digest===entry.digest?cached:null;if(detail===null){const res=await this.deps.api.request("GET",`/settings/skills/${encodeURIComponent(name)}`);detail=res.ok?parseSkillBody(res):null;if(detail===null||detail.name!==name){const why=stripTerminalControls(res.ok?"\u5FDC\u7B54\u3092\u89E3\u91C8\u3067\u304D\u307E\u305B\u3093":
15
+ describeError(res));if(cached!==void 0&&(res.status===null||res.status>=500)){this.deps.log(` \u26A0\uFE0F \u30B9\u30AD\u30EB ${name} \u306E\u672C\u6587\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\uFF08${why}\uFF09\u3002\u76F4\u524D\u306E revision ${cached.revision} \u3067\u8D70\u308A\u307E\u3059`);detail=cached}else{this.deps.log(` \u26A0\uFE0F \u30B9\u30AD\u30EB ${name} \u306E\u672C\u6587\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\uFF08${why}\uFF09\u3002\u4F5C\u696D\u30C4\u30EA\u30FC\u306E\u30D5\u30A1\u30A4\u30EB\u7248\u3067\u8D70\u308A\u307E\u3059`);
16
+ origins.push({name,origin:"skill=file"});continue}}else{this.bodies.set(name,detail)}}bodies.set(name,detail.body);origins.push({name,origin:`skill=server@rev${detail.revision}`})}return{bodies,origins}}};function formatSkillOrigins(origins){return origins.map(o=>`${o.origin} name=${o.name}`).join(" \uFF0F ")}export{stripFrontmatter,referencedSkills,expandServerSkills,applyArguments,prepareSkillOverlay,parseSkillList,parseSkillBody,ServerSkillCatalog,formatSkillOrigins};
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{placeholderTaskKey,stepToItem}from"./chunk-6PAZUW73.js";import{describeError,pick,pickString}from"./chunk-SPZ3GBYC.js";import{localDate}from"./chunk-LJVAOWZI.js";import{normalizeSkillName,skillOfItem}from"./chunk-FABDZBDZ.js";import{DEFAULT_SKILL_PREFIX,SKILL_PREFIX_RE,setSkillPrefix,skillCommand,skillPrefix}from"./chunk-6CS5L24D.js";import{isTaskKey}from"./chunk-II5RVJQN.js";import{createHash,randomBytes}from"crypto";import fs2 from"fs";import path2 from"path";var INFLIGHT_STALE_HOURS=3;function staleFloorHours(aiTimeoutSec){return Math.ceil(aiTimeoutSec*2/3600)}function inflightStaleHours(aiTimeoutSec,baseHours=INFLIGHT_STALE_HOURS){const base=Number.isFinite(baseHours)&&baseHours>0?baseHours:INFLIGHT_STALE_HOURS;return Math.max(base,staleFloorHours(aiTimeoutSec))}function ageMinutesOf(item,now){for(const raw of[item.started_at,item.updated_at,item.dequeued_at,item.created_at]){if(!raw)continue;const ts=Date.parse(raw);if(Number.isNaN(ts))continue;return Math.
3
+ import{placeholderTaskKey,stepToItem}from"./chunk-MAAICW7T.js";import{describeError,pick,pickString}from"./chunk-5KAWCLYN.js";import{localDate}from"./chunk-LJVAOWZI.js";import{normalizeSkillName,skillOfItem}from"./chunk-FABDZBDZ.js";import{DEFAULT_SKILL_PREFIX,SKILL_PREFIX_RE,setSkillPrefix,skillCommand,skillPrefix}from"./chunk-6CS5L24D.js";import{isTaskKey}from"./chunk-II5RVJQN.js";import{createHash,randomBytes}from"crypto";import fs2 from"fs";import path2 from"path";var INFLIGHT_STALE_HOURS=3;function staleFloorHours(aiTimeoutSec){return Math.ceil(aiTimeoutSec*2/3600)}function inflightStaleHours(aiTimeoutSec,baseHours=INFLIGHT_STALE_HOURS){const base=Number.isFinite(baseHours)&&baseHours>0?baseHours:INFLIGHT_STALE_HOURS;return Math.max(base,staleFloorHours(aiTimeoutSec))}function ageMinutesOf(item,now){for(const raw of[item.started_at,item.updated_at,item.dequeued_at,item.created_at]){if(!raw)continue;const ts=Date.parse(raw);if(Number.isNaN(ts))continue;return Math.
4
4
  floor((now.getTime()-ts)/6e4)}return null}function inflightEntries(items,now=new Date,staleHours=INFLIGHT_STALE_HOURS){const staleMinutes=staleHours*60;const byKey=new Map;for(const item of items){const key=(item.task_key??"").trim();if(!key)continue;const ageMinutes=ageMinutesOf(item,now);if(ageMinutes!==null&&ageMinutes>staleMinutes)continue;const entry={key,runner:item.runner_id??"-",ageMinutes,label:(item.label??"").slice(0,60)};const prev=byKey.get(key);if(!prev||(entry.ageMinutes??-1)>(prev.
5
5
  ageMinutes??-1))byKey.set(key,entry)}return[...byKey.values()].sort((a,b)=>a.key.localeCompare(b.key))}function formatInflightEntry(entry){const age=entry.ageMinutes===null?"\u4E0D\u660E":`${entry.ageMinutes}\u5206`;return`${entry.key} runner=${entry.runner} \u7D4C\u904E=${age}`}import fs from"fs";import path from"path";async function createItem(api,body){const res=await api.create(body);if(!res.ok)return{itemId:null,detail:describeError(res)};for(const p of["item_id","id","item.item_id","item.id","data.item_id","data.id"]){const v=pickString(res.json,p);if(v)return{itemId:v,detail:""}}return{itemId:null,detail:`item_id \u3092\u8AAD\u3081\u307E\u305B\u3093: ${res.raw.slice(0,200)}`}}function reorderSucceeded(targetId,json){if(pick(json,"result")===true)return true;const raw=Array.isArray(json)?json:pick(json,"i\
6
6
  tems");if(!Array.isArray(raw)||raw.length===0)return false;const items=raw;const orderOf=it=>typeof it.sort_order==="number"?it.sort_order:Number.POSITIVE_INFINITY;const hit=items.find(it=>(it.item_id??"")===targetId);if(!hit)return false;return orderOf(hit)===Math.min(...items.map(orderOf))}function queueContainsKey(items,key){const re=new RegExp(`${key.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}(?![0-9])`);return items.some(it=>re.test(`${it.label??""}
@@ -93,5 +93,5 @@ ${JSON.stringify(check,null,2)}
93
93
  `)}finally{setSkillPrefix(before)}if(!check.accepted){if(!opts.check)recordRejection(dir,token,check);deps.stderr("\u68C4\u5374\u304C\u3042\u308B\u305F\u3081\u63D0\u51FA\u3057\u3066\u3044\u307E\u305B\u3093\u3002\u7406\u7531\u3092\u76F4\u3057\u3066\u51FA\u3057\u76F4\u3057\u3066\u304F\u3060\u3055\u3044\n");if(readSubmission(submissionPath(dir,token))!==null){deps.stderr("\uFF08\u524D\u56DE\u53D7\u7406\u3057\u305F\u63D0\u51FA\u304C\u6709\u52B9\u306A\u307E\u307E\u3067\u3059\u3002\u51FA\u3057\u76F4\u3055\u306A\u3051\u308C\u3070\u30EB\u30FC\u30D7\u306F\u305D\u308C\u3092\u767B\u9332\u3057\u307E\u3059\uFF09\n")}
94
94
  return 1}plan=parsed}if(opts.check){deps.stdout(opts.empty?"\u691C\u67FB\u306E\u307F: \u7A7A\u306E\u8A08\u753B\uFF080\u4EF6\uFF09\n":"\u691C\u67FB\u306E\u307F: \u7F6E\u3044\u3066\u3044\u307E\u305B\u3093\uFF08--check\uFF09\n");return 0}const submitted={plan,empty:opts.empty,submitted_at:new Date().toISOString()};writeAtomic(submissionPath(dir,token),JSON.stringify(submitted));deps.stdout(opts.empty?"\u7A7A\u306E\u8A08\u753B\uFF080\u4EF6\uFF09\u3092\u63D0\u51FA\u3057\u307E\u3057\u305F\u3002\u8A08\u753B\u30D5\u30A7\u30FC\u30BA\u306E\u7D42\u4E86\u5F8C\u3001\u4F55\u3082\u7A4D\u307F\u307E\u305B\u3093\n":
95
95
  `\u8A08\u753B\uFF08${plan.steps.length}\u4EF6\uFF09\u3092\u63D0\u51FA\u3057\u307E\u3057\u305F\u3002\u8A08\u753B\u30D5\u30A7\u30FC\u30BA\u306E\u7D42\u4E86\u5F8C\u306B\u30EB\u30FC\u30D7\u304C\u4E00\u5EA6\u306B\u767B\u9332\u3057\u307E\u3059\uFF08\u51FA\u3057\u76F4\u3059\u3068\u6700\u5F8C\u306E\u63D0\u51FA\u304C\u6709\u52B9\uFF09
96
- `);return 0}export{staleFloorHours,inflightStaleHours,inflightEntries,formatInflightEntry,createItem,ReleaseOutcomeLog,parseReleaseResult,parseOutcomeCode,enqueueBlockerRecovery,enqueueReleasePhase5Recovery,enqueueReleasePartialMergeRerun,enqueueDevVerifyForMerged,RECENT_ADVANCE_WINDOW_HOURS,buildRecentCandidateIndex,findRecentCandidate,resolveRecentAdvance,formatRecentAdvance,windowStartMicros,parseTaskStatusSnapshot,shouldSuppressForStatus,pendingTaskKeys,buildDynamicBlocks,unavailableChecks,formatPlanResultLine,
96
+ `);return 0}export{createItem,ReleaseOutcomeLog,parseReleaseResult,parseOutcomeCode,enqueueBlockerRecovery,enqueueReleasePhase5Recovery,enqueueReleasePartialMergeRerun,enqueueDevVerifyForMerged,staleFloorHours,inflightStaleHours,inflightEntries,formatInflightEntry,RECENT_ADVANCE_WINDOW_HOURS,buildRecentCandidateIndex,findRecentCandidate,resolveRecentAdvance,formatRecentAdvance,windowStartMicros,parseTaskStatusSnapshot,shouldSuppressForStatus,pendingTaskKeys,buildDynamicBlocks,unavailableChecks,formatPlanResultLine,
97
97
  PLAN_TOKEN_ENV,PLAN_DIR_ENV,NO_PLAN_SESSION,fileSkillNames,openPlanSession,checkPlan,formatCheck,runPlanSubmit};