@tocca-systems/twp-cli 0.10.0 → 0.12.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 (32) hide show
  1. package/CHANGELOG.public.md +80 -0
  2. package/README.md +53 -1
  3. package/dist/ai-dispatch-AAV7BYPB.js +77 -0
  4. package/dist/{app-S33SNSH5.js → app-XMSO3KWO.js} +2 -2
  5. package/dist/backlog-D7PL5FLC.js +124 -0
  6. package/dist/{chunk-KCXVV45F.js → chunk-2SGDY6YP.js} +2 -2
  7. package/dist/{chunk-N3B737KO.js → chunk-56TC423T.js} +1 -1
  8. package/dist/{chunk-VSQXY2VX.js → chunk-EOFANBVM.js} +2 -2
  9. package/dist/{chunk-FQDYLZV3.js → chunk-GFC2ASHE.js} +1 -1
  10. package/dist/{chunk-7ZVTACQS.js → chunk-JKSXUBND.js} +4 -3
  11. package/dist/chunk-M3GWY6NT.js +3 -0
  12. package/dist/chunk-MZHTRHZS.js +40 -0
  13. package/dist/{chunk-ZZ5EYKCK.js → chunk-N56AWWTM.js} +6 -6
  14. package/dist/chunk-NAQ7OCUV.js +17 -0
  15. package/dist/chunk-O52CUEDO.js +6 -0
  16. package/dist/chunk-QQRJLH6B.js +3 -0
  17. package/dist/chunk-QVXZEUKN.js +8 -0
  18. package/dist/{chunk-IM4H52FC.js → chunk-R7T4VOIN.js} +1 -1
  19. package/dist/cli.js +25 -7
  20. package/dist/{commands-T47RY6EH.js → commands-HYHUXQZT.js} +44 -39
  21. package/dist/{commands-QKNOQRWT.js → commands-YPT6RK74.js} +1 -1
  22. package/dist/{oneshot-JD5LINMX.js → oneshot-MRU4IY7W.js} +1 -1
  23. package/dist/{project-BEY4CNSF.js → project-KIPSH5GP.js} +1 -1
  24. package/dist/run-TCAJZMNJ.js +63 -0
  25. package/dist/{schedule-command-LWUBXHBQ.js → schedule-command-YPKIO3FK.js} +1 -1
  26. package/dist/{setup-GY674TII.js → setup-X7ATZG5U.js} +1 -1
  27. package/dist/{task-MQYRE4QC.js → task-ZYBI6Z4U.js} +50 -18
  28. package/package.json +1 -1
  29. package/dist/ai-dispatch-T6PJ4DUG.js +0 -82
  30. package/dist/chunk-4QI5NX4C.js +0 -6
  31. package/dist/chunk-Q7YSSWTR.js +0 -33
  32. package/dist/run-EDV5273K.js +0 -58
@@ -11,6 +11,86 @@
11
11
  `CHANGELOG.md` に残してあります。顧客向けの履歴は public 公開以降を対象とします。
12
12
  -->
13
13
 
14
+ ## 0.12.0
15
+
16
+ `twp task comment create` で、クリックで回答できる質問を投稿できるようになりました。
17
+
18
+ ```
19
+ twp task comment create ACME-123 --body-file ./背景.md \
20
+ --ask-question --question "どちらで進めますか" \
21
+ --option ok=このまま進める --option back=差し戻す --mention 谷
22
+ twp task comment create ACME-123 --body-file ./回答.md --answer-to <コメントID> --select ok
23
+ ```
24
+
25
+ あわせて次を追加しました。
26
+
27
+ - `--mention`(`me` / 名前 / メール / ID で指定。`--assignee` と同じ解決規則)
28
+ - `--attachment`(アップロード済みの添付 ID をコメントへ紐づける)
29
+ - `--content-html-file`(リッチテキスト本文を明示的に送る)
30
+ - `twp task comment list` の要約に `question` / `answer` 列(**同じページにある回答を質問の行へ突き合わせる**ので、回答済みかどうかが `--output json` を読まなくても分かります)
31
+
32
+ 選択肢のキーが10文字を超える・選択肢が5個を超える・`--ask-question` 無しで `--option` を渡した、といった誤りは
33
+ **サーバへ送る前に**終了コード 2 で止まります。
34
+
35
+ Backlog の添付ファイルを CLI から扱えるようになりました。
36
+
37
+ - `twp backlog attachment list <課題キー>` — 添付の一覧(`id` / `name` / `size` / `contentType` / `created`)。
38
+ 落とす前に大きさを判断できます。
39
+ - `twp backlog attachment download <課題キー> <添付ID> --out <パス>` — 実体をファイルへ書き出します。
40
+
41
+ 添付ID は `attachment list` の `id` です(ファイル名では指定できません)。
42
+ 標準出力に出るのは書いた場所・バイト数・種別だけなので、`--output json` でそのまま読めます。
43
+ **既存ファイルは上書きしません**(`--force` を付けたときだけ上書きします)。書き出し先のディレクトリは自動で作りません。
44
+
45
+ 終了コードの扱いも変わりました。Backlog が拒んだ(存在しないステータスID・課題キーなど)ときは
46
+ **終了コード 3(引数や対象を直さないと通らない)** になります。以前は 4(サーバ側の問題)として返っていたため、
47
+ 終了コードだけで自動リトライを組むと通らないリクエストを繰り返していました。
48
+ レート制限(429)は引き続き 4(時間をおいて再試行する価値がある)です。
49
+
50
+ AI CLI が起動直後に失敗し続けるとき、その失敗を大量に積み上げずに次の AI へ引き継ぐようになりました。
51
+
52
+ - 利用量・支出上限に達したときのメッセージを取りこぼしていたため、上限到達が「作業の失敗」として
53
+ 記録され、他の AI が試されないまま終わっていました。上限として扱い、次の AI へフォールバックします。
54
+ - メッセージが未知の形でも、**数十秒で失敗が続く AI は一定時間だけ自動でフォールバック先から外れます**。
55
+ 上限や障害が解消すれば自動的に戻ります。
56
+ - 失敗したときの記録に、AI CLI がエラーとして出力した行が残るようになりました。実行ログ全体を開かなくても
57
+ 原因の当たりが付けられます(コマンドの出力や作業内容は載せません)。
58
+
59
+ ## 0.11.0
60
+
61
+ Backlog の課題・コメントを CLI から読めるようになりました(`twp backlog`)。
62
+
63
+ - `twp backlog issue list --project <キー> --status <名前> --assignee <名前>` — 課題の一覧・検索。
64
+ プロジェクト・ステータス・担当者は名前でも数値 ID でも指定できます。
65
+ - `twp backlog issue get <課題キー>` — 課題1件の詳細。本文は常に全文です。
66
+ - `twp backlog comment list <課題キー>` — コメント一覧。担当・ステータスの変更履歴(`changeLog`)を含みます。
67
+ - `twp backlog space list` / `project list` / `status list` / `user list` — 指定に使う ID の調べ先。
68
+
69
+ 一覧の本文は既定で 1000 文字に切られます(切られた課題には `descriptionTruncated: true` が付き、
70
+ 何件切られたかを実行のたびにお知らせします)。全文が要るときは `--description-max 0` か `issue get` を使ってください。
71
+
72
+ Backlog スペースの登録が1件だけなら `--space` は省略できます(そのとき、どのスペースを使ったかを必ず表示します)。
73
+ この API はカーソルを返さないため `--all` はありません。続きは `--offset` で取得してください。
74
+
75
+ Backlog の課題へ CLI から書けるようになりました(`twp backlog`)。
76
+
77
+ - `twp backlog comment create <課題キー> --body-file <パス> --yes` — 課題にコメントを投稿します。
78
+ - `twp backlog issue update <課題キー> --assignee <名前|ID> --status <名前|ID> --comment-file <パス> --yes`
79
+ — 担当者・ステータスを変更します。`--comment-file` を付けると、その本文が変更の理由として
80
+ 同じリクエストで投稿されるので、「理由だけ届いて担当は変わっていない」状態が起きません。
81
+
82
+ **外部サービスへ実際に書く操作なので、`--yes` を付けないと実行しません**(対話でも同じです)。
83
+ 送る内容は `--dry-run` で送信せずに確認できます(`--dry-run` に `--yes` は要りません)。
84
+
85
+ 本文は `--body-file` / `--comment-file` からの読み込みを主経路にしてください。改行・Markdown の見出し・
86
+ 引用符をそのまま送れます(`-` を渡すと標準入力から読みます)。本文は加工せず、落とすのは先頭の
87
+ UTF-8 BOM だけです。
88
+
89
+ `--assignee` / `--status` は数値 ID でも名前でも指定できます。名前で指定するときは
90
+ `--project <プロジェクトキー>` を一緒に渡してください。名前の照合は完全一致だけなので、
91
+ 「完了」で「完了待ち」が選ばれることはありません(一致しなければ候補を表示して止まります)。
92
+ ID は `twp backlog status list --project <キー>` / `twp backlog user list --project <キー>` で調べられます。
93
+
14
94
  ## 0.10.0
15
95
 
16
96
  `twp task-loop` がプロンプト先頭へ前置する憲章について、囲み文(前文・後文)を
package/README.md CHANGED
@@ -71,9 +71,14 @@ twp task update <キー|ID> [--status <名前>] [--subject "<件名>"] [--assi
71
71
  twp task delete <キー|ID> --yes
72
72
 
73
73
  twp task comment list <キー|ID>
74
- twp task comment create <キー|ID> --body-file <パス>
74
+ twp task comment create <キー|ID> --body-file <パス> [--mention <相手>] [--attachment <添付ID>]
75
75
  twp task comment update <コメントID> --body-file <パス>
76
76
  twp task comment delete <コメントID> --yes
77
+
78
+ # クリックで回答できる質問を投稿する / 回答する
79
+ twp task comment create <キー|ID> --body-file <背景.md> \
80
+ --ask-question --question "<質問文>" --option ok=このまま進める --option back=差し戻す
81
+ twp task comment create <キー|ID> --body-file <回答.md> --answer-to <コメントID> --select ok
77
82
  ```
78
83
 
79
84
  - **個人タスク(プロジェクトに属さない自分だけのタスク)は `--project __private__` で操作します**(`twp task list --project __private__`)。キーは `PRIVATE-<番号>` です。担当者(`--assignee`)とコメント(`twp task comment`)は個人タスクにはありません
@@ -82,6 +87,8 @@ twp task comment delete <コメントID> --yes
82
87
  - **本文は `--body-file` / `--description-file` を主経路にしてください**(`-` で標準入力)。引数に直接書くと改行と Markdown が壊れます
83
88
  - 一覧は `--limit <件数>` / `--all` / `--cursor` で辿れます(`task subtasks` と `project members` はページングがありません)
84
89
  - **フラグの値は `--flag 値` でも `--flag=値` でも書けます。** 空白を含む値は `--keyword "山田 太郎"` のように引用し、`-` で始まる値は `--keyword=-foo` の形で渡します
90
+ - **質問(`--ask-question`)は質問文(`--question` / `--question-file`)と選択肢(`--option キー=表示文`・1〜5個)が要ります。** 選択肢のキーは10文字以内で、回答(`--select`)に使う識別子です。複数選択は `--multi-select`、自由記述を禁じるなら `--no-free-text`
91
+ - **`twp task comment list` の `question` / `answer` 列で、回答済みかどうかが分かります**(同じページにある回答を質問の行へ突き合わせます。ページをまたぐ場合は `--all` を付けてください)
85
92
  - ヘルプは `twp task help` / `twp task comment help` / `twp task create help`
86
93
 
87
94
  グローバルオプション: `--profile <名前>` / `--output <json|table|text|tsv>` / `--query <JMESPath>` / `--dry-run` / `--debug` / `--yes` / `--refresh`。**`--output json` は常に API の生のレスポンス**を返します(表示用に間引きません)。
@@ -90,6 +97,51 @@ twp task comment delete <コメントID> --yes
90
97
  twp task list --project ACME --status 進行中 --output json --query '[].{key:key,subject:subject}'
91
98
  ```
92
99
 
100
+ ### Backlog の課題を読む・書く
101
+
102
+ TWP に登録した Backlog スペースを通して、課題とコメントを読み、課題へ書きます。
103
+
104
+ ```
105
+ twp backlog space list # 連携済みスペース(--space に渡す ID)
106
+ twp backlog project list [--space <ID|URL>]
107
+ twp backlog status list --project <キー> # --status に渡す ID
108
+ twp backlog user list --project <キー> # --assignee / --created-user に渡す ID
109
+
110
+ twp backlog issue list [--project <キー>] [--status <名前>] [--assignee <名前>]
111
+ [--created-user <名前>] [--parent <課題ID>]
112
+ [--updated-since <yyyy-MM-dd>] [--keyword <語>]
113
+ [--count <件数>] [--offset <件数>]
114
+ [--sort <項目>] [--order <asc|desc>] [--description-max <文字数>]
115
+ twp backlog issue get <課題キー> # 例: twp backlog issue get ACME-123
116
+ twp backlog comment list <課題キー>
117
+
118
+ twp backlog attachment list <課題キー> # id / name / size / contentType
119
+ twp backlog attachment download <課題キー> <添付ID> --out <パス> # 実体をファイルへ書き出す
120
+
121
+ twp backlog comment create <課題キー> --body-file <パス> --yes
122
+ twp backlog issue update <課題キー> [--assignee <名前|ID>] [--status <名前|ID>]
123
+ [--comment-file <パス>] [--project <キー|名称|ID>] --yes
124
+ ```
125
+
126
+ - **Backlog スペースの登録が1件だけなら `--space` は省略できます**(そのとき、どのスペースを使ったかを必ず表示します)。2件以上なら `--space` で指定してください
127
+ - `--space` には ID のほか、スペースURL(`https://example.backlog.jp`)とサブドメイン(`example`)が使えます
128
+ - **`--project` / `--status` / `--assignee` / `--created-user` は名前でも数値 ID でも指定できます。** 複数指定はカンマ区切りです(`--status 未対応,処理中`)。名前で指定するときは、候補が Backlog プロジェクト配下にしかないため `--project` が要ります
129
+ - ⚠ **`twp backlog issue list` の本文は既定で 1000 文字に切られます**(切られた課題には `descriptionTruncated: true` が付き、何件切られたかを実行のたびにお知らせします)。全文が要るときは `--description-max 0` か `twp backlog issue get`(常に全文)を使ってください
130
+ - `twp backlog comment list` の出力には担当・ステータスの変更履歴(`changeLog`)が含まれます
131
+ - `twp backlog attachment download` は **`--out` のパスへ実体をそのまま書き出します**(標準出力には書いた場所・バイト数・種別だけが出ます)。既存ファイルは上書きしません(`--force` を付けたときだけ上書きします)。書き出し先のディレクトリは自動で作りません。添付ID は `twp backlog attachment list` の `id` で、ファイル名では指定できません。落とす前の大きさは同じ一覧の `size` で分かります
132
+ - **この API はカーソルを返さないため `--all` / `--cursor` はありません。** 続きは `--offset`(課題)/ `--min-id` / `--max-id`(コメント)で取得します。`--count` の上限は 100 です
133
+ - `--parent` には親課題の**数値 ID** を渡します(課題キーは使えません)。`--sort` の既定は `updated`、`--order` の既定は `desc` です
134
+ - `twp backlog status list` / `user list` の `--project` は **プロジェクトキー**(`ACME`)か数値 ID です(プロジェクト名では引けません)
135
+
136
+ **書き込み(`comment create` / `issue update`)について:**
137
+
138
+ - ⚠ **Backlog(外部)へ実際に書く操作なので、`--yes` が無いと実行しません**(対話でも同じです)。投稿・変更は取り消せず、相手へ通知が飛びます。送る内容は `--dry-run` で送信せずに確認できます(`--dry-run` に `--yes` は要りません)
139
+ - 本文は **`--body-file` / `--comment-file`**(`-` で標準入力)を主経路にしてください。改行・Markdown の見出し・引用符をそのまま送れます。本文は加工せず、落とすのは先頭の UTF-8 BOM だけです
140
+ - **`issue update --comment-file` は、担当・ステータスの変更と理由コメントを1リクエストで送ります。** 分けて実行すると「コメントは届いたが担当は変わっていない」状態が起きうるため、まとめられる場合はこちらを使ってください(分ける場合は必ず **コメント投稿 → 担当変更** の順に)
141
+ - `--assignee` / `--status` は数値 ID でも名前でも指定できます。名前のときは `--project` が要ります(候補が Backlog プロジェクト配下にしかないため)。**照合は完全一致だけ**なので、「完了」で「完了待ち」が選ばれることはありません(一致しなければ候補を表示して止まります)。**数字だけの値は常に ID として送ります**
142
+ - 担当の解除(未設定に戻す)はできません
143
+ - ⚠ **失敗しても機械的に再実行しないでください。** Backlog に冪等キーは無く、投稿が届いた後に応答の読み取りだけ失敗した場合、再実行すると同じコメントが二重に残ります(終了コードだけでは区別できません。`twp backlog comment list <課題キー>` で実物を確かめてください)
144
+
93
145
  ### エージェントループを回す
94
146
 
95
147
  ```
@@ -0,0 +1,77 @@
1
+ import { createRequire as __twpCreateRequire } from 'node:module';
2
+ const require = __twpCreateRequire(import.meta.url);
3
+ import{failureHint,isAuthError,isCliFatalText,isRateLimited,isServerAiType,isUntrusted,maxTurnsReached,rateLimitWaitSeconds,tailForScan}from"./chunk-NAQ7OCUV.js";import{DEFAULT_CLAUDE_LAUNCHER,activeSlotPath,detectAiClis,detectClaudeAutoSwitch,isClaudeAi,isUsableModelId,modelFitsRoute,resolveSpawnTarget,usesBedrock,wrapWithAutoSwitch}from"./chunk-3WJHTPOZ.js";import{isForceOnly,killProcessTree,system32}from"./chunk-N2UVRM3Z.js";import{findExecutable,isWindowsDriveAbsolute}from"./chunk-PMOUHEJQ.js";
4
+ 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 FINAL_REPORT_BEGIN="<<<AI_FINAL_REPORT>>>";var FINAL_REPORT_END="<<<END_AI_FINAL_REPORT>>>";var ClaudeStreamRenderer=class{constructor(now=()=>new Date){this.now=now}now;toolNames=new Map;toolCount=0;result={subtype:null,isError:null,numTurns:null,costUsd:null,durationMs:null,tokensIn:null,tokensOut:null,rateLimited:false,resetsAt:null,finalText:""};push(line){const trimmed=line.trim();if(trimmed==="")return[];let event;try{const parsed=JSON.parse(trimmed);if(parsed===null||typeof parsed!=="\
5
+ object"||Array.isArray(parsed)){return[line]}event=parsed}catch{return[line]}switch(event["type"]){case"rate_limit_event":return this.onRateLimit(event);case"assistant":return this.onAssistant(event);case"user":return this.onUser(event);case"result":return this.onResult(event);default:return event["type"]==="system"?[]:[line]}}sawRateLimit(){return this.result.rateLimited}lastRateLimitNote="";onRateLimit(event){const info=event["rate_limit_info"];if(info===null||typeof info!=="object")return[];const rec=info;
6
+ const status=typeof rec["status"]==="string"?rec["status"]:"";const resets=typeof rec["resetsAt"]==="number"?rec["resetsAt"]:null;if(status==="")return[];const at=isSaneEpochSec(resets)?` resets=${new Date(resets*1e3).toISOString()}`:"";if(status.startsWith("allowed")){if(status==="allowed")return[];const seen=`${status}|${resets??""}`;if(seen===this.lastRateLimitNote)return[];this.lastRateLimitNote=seen;return[this.line(`\u2139\uFE0F \u4E0A\u9650\u306B\u63A5\u8FD1\uFF08status=${status}${at}\uFF09\u2014 \u5B9F\
7
+ \u884C\u306F\u7D99\u7D9A\u3057\u307E\u3059`)]}if(resets!==null)this.result.resetsAt=resets;this.result.rateLimited=true;return[this.line(`\u26A0\uFE0F \u30EC\u30FC\u30C8\u30EA\u30DF\u30C3\u30C8\u901A\u77E5: status=${status}${at}`)]}onAssistant(event){const out=[];for(const block of contentBlocks(event)){if(block.type==="tool_use"){const name=typeof block.name==="string"?block.name:"tool";if(typeof block.id==="string")this.toolNames.set(block.id,name);this.toolCount+=1;out.push(this.line(`>> ${name}${toolDetail(
8
+ name,block.input)}`))}else if(block.type==="text"&&typeof block.text==="string"&&block.text.trim()!==""){for(const l of block.text.trim().split("\n"))out.push(this.line(` \u{1F4AC} ${l}`))}}return out}onUser(event){const out=[];for(const block of contentBlocks(event)){if(block.type!=="tool_result")continue;const id=typeof block.id==="string"?block.id:"";const useId=typeof block.tool_use_id==="string"?block.tool_use_id:id;const name=this.toolNames.get(useId)??"tool";this.toolNames.delete(useId);
9
+ const isError=block.is_error===true;const detail=isError?firstErrorLine(block):"";out.push(this.line(`${isError?"!!":"<<"} ${name}${detail}`))}return out}onResult(event){const r=this.result;r.subtype=typeof event["subtype"]==="string"?event["subtype"]:null;r.isError=typeof event["is_error"]==="boolean"?event["is_error"]:null;r.numTurns=typeof event["num_turns"]==="number"?event["num_turns"]:null;r.costUsd=typeof event["total_cost_usd"]==="number"?event["total_cost_usd"]:null;r.durationMs=typeof event["\
10
+ duration_ms"]==="number"?event["duration_ms"]:null;const usage=event["usage"];if(usage!==null&&typeof usage==="object"&&!Array.isArray(usage)){const u=usage;const num=key=>typeof u[key]==="number"?u[key]:0;const hasIn=["input_tokens","cache_creation_input_tokens","cache_read_input_tokens"].some(k=>typeof u[k]==="number");r.tokensIn=hasIn?num("input_tokens")+num("cache_creation_input_tokens")+num("cache_read_input_tokens"):null;r.tokensOut=typeof u["output_tokens"]==="number"?u["output_tokens"]:null}
11
+ const out=[this.line(`\u5B8C\u4E86 (turns: ${r.numTurns??0}, tools: ${this.toolCount}, ${Math.round((r.durationMs??0)/1e3)}s, $${(r.costUsd??0).toFixed(3)})`)];const text=typeof event["result"]==="string"?event["result"]:"";r.finalText=text;if(text!==""){out.push(FINAL_REPORT_BEGIN,text,FINAL_REPORT_END)}return out}line(msg){const d=this.now();const ts=`${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`;return` [${ts}] ${msg}`}};function firstErrorLine(block){const content=block.
12
+ content;const text=typeof content==="string"?content:Array.isArray(content)?content.map(c=>c!==null&&typeof c==="object"&&typeof c.text==="string"?c.text:"").join(" "):"";const first=text.trim().split("\n")[0]??"";return first===""?"":` | ${first.slice(0,120)}`}function contentBlocks(event){const message=event["message"];if(message===null||typeof message!=="object")return[];const content=message["content"];if(!Array.isArray(content))return[];return content.filter(b=>b!==null&&typeof b==="object")}
13
+ function toolDetail(name,input){if(input===void 0||input===null)return"";const str=k=>typeof input[k]==="string"?input[k]:"";if(name==="Bash"){const cmd=str("command");return cmd===""?"":` $ ${cmd.slice(0,80)}${cmd.length>80?"...":""}`}if(name==="Read"||name==="Write"||name==="Edit"){const p=str("file_path");return p===""?"":` ${p}`}if(name==="Grep"||name==="Glob"){const p=str("pattern");return p===""?"":` '${p}'`}if(name==="Skill"){const s=str("skill");return s===""?"":` /${s}`}if(name.includes(
14
+ "mcp__")){const args=[];for(const k of["task_id","project_id","status_id","issue_id"]){const v=str(k);if(v!=="")args.push(`${k}=${v.slice(0,16)}`)}return args.length===0?"":` (${args.slice(0,2).join(", ")})`}return""}function pad(n){return String(n).padStart(2,"0")}function isSaneEpochSec(v){return v!==null&&Number.isFinite(v)&&Math.abs(v)<864e10}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){
15
+ 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(
16
+ env)?"Bedrock":"Anthropic \u76F4"}\uFF09 \u2192 \u30AB\u30C6\u30B4\u30EA\u65E2\u5B9A\u306E\u30E2\u30C7\u30EB\u3092\u4F7F\u3044\u307E\u3059`)}const fallback=cfg.modelFor(req.ai,req.category,env);const safeFallback=fallback===""||!isClaudeAi(req.ai)||modelFitsRoute(fallback,env)?fallback:"";if(fallback!==""&&safeFallback===""){warnings.push(`CLAUDE_MODEL '${fallback}' \u3082\u73FE\u5728\u306E\u5B9F\u884C\u7D4C\u8DEF\u3067\u306F\u89E3\u6C7A\u3067\u304D\u307E\u305B\u3093 \u2192 \u30E2\u30C7\u30EB\u3092\u6307\u5B9A\u3057\u307E\u305B\u3093`)}
17
+ const model=usable&&fitsRoute?requested:safeFallback;const maxTurns=cfg.maxTurnsFor(req.category,env);let effort="";switch(req.ai){case"gemini":return{file:"gemini",args:["--yolo",...model?["--model",model]:[]],model,effort,maxTurns,warnings};case"codex":return{file:"codex",args:["exec","-s","danger-full-access",...model?["--model",model]:[]],model,effort,maxTurns,warnings};case"copilot":{const mcp=path.join(workspace,".copilot","mcp-config.json");const args=["--allow-all"];if(fs.existsSync(mcp))
18
+ args.push("--additional-mcp-config",`@${mcp}`);else warnings.push(`${mcp} \u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002copilot \u306F MCP \u306A\u3057\u3067\u5B9F\u884C\u3055\u308C\u307E\u3059`);if(model)args.push("--model",model);return{file:"copilot",args,model,effort,maxTurns,warnings}}default:{if(req.ai!=="claude")warnings.push(`\u672A\u77E5\u306E AI '${req.ai}'\u3002claude \u3067\u5B9F\u884C\u3057\u307E\u3059`);const e=cfg.effortFor(req.category,req.skill,env,req.effort);if(e.warning!==
19
+ null)warnings.push(e.warning);effort=e.value;const args=["-p","--max-turns",String(maxTurns),"--output-format","stream-json","--verbose","--dangerously-skip-permissions"];if(model)args.push("--model",model);if(effort)args.push("--effort",effort);return{file:"claude",args,model,effort,maxTurns,warnings}}}}async function runOnce(req,deps){let metrics=null;const result=await runOnceCore(req,deps,m=>{metrics=m});return metrics===null?result:{...result,metrics}}async function runOnceCore(req,deps,onMetrics){
20
+ const env=deps.env??process.env;const timing=resolveTiming(deps.timing);const isClaude=isClaudeAi(req.ai);const built=buildArgs(req,deps.config,env,req.cwd);for(const w of built.warnings)deps.log(` \u8B66\u544A: ${w}`);if(built.model)deps.log(` model: ${built.model} (ai_model=${req.model||"default"}, category=${req.category})`);if(built.effort)deps.log(` effort: ${built.effort} (category=${req.category}, skill=${req.skill||"none"})`);if(built.effort&&(req.effort??"").trim()===built.effort){deps.
21
+ log(` effort \u6307\u5B9A\u5143: item (ai_effort=${built.effort})`)}const launch=isClaude?wrapWithAutoSwitch(deps.cas,built.file,built.args):{file:built.file,args:built.args};const slot=req.slot!==void 0?req.slot:isClaude&&deps.cas!==null?activeSlotPath(deps.cas):null;if(slot!==null)deps.log(` claude \u67A0: ${slot}`);deps.log(`${req.ai} \u5B9F\u884C: ${firstLine(req.prompt)}`);deps.log(` \u30ED\u30B0: ${req.logFile}`);const renderer=isClaude?new ClaudeStreamRenderer(deps.now):null;const lines=[];
22
+ let retained=0;let truncated=false;let stream=null;try{fs.mkdirSync(path.dirname(req.logFile),{recursive:true,mode:448});stream=fs.createWriteStream(req.logFile,{flags:"w",mode:384})}catch{}const emit=line=>{const clean=stripTerminalControls(line);stream?.write(`${clean}
23
+ `);deps.log(clean);if(retained<MAX_RETAINED_BYTES){lines.push(clean);retained+=clean.length+1}else if(!truncated){truncated=true;lines.push("\u2026\uFF08\u51FA\u529B\u304C\u4E0A\u9650\u3092\u8D85\u3048\u305F\u305F\u3081\u3001\u4EE5\u964D\u306F\u30B9\u30C6\u30C3\u30D7\u30ED\u30B0\u306B\u306E\u307F\u8A18\u9332\u3057\u307E\u3059\uFF09")}};emit(` \u30D7\u30ED\u30F3\u30D7\u30C8: ${req.prompt.length} \u6587\u5B57\uFF08stdin \u7D4C\u7531\uFF09`);const target=resolveSpawnTarget(launch.file,launch.args,
24
+ {env,platform:deps.platform});if(!target.ok){emit(`[twp task-loop] ${launch.file} \u3092\u8D77\u52D5\u3067\u304D\u307E\u305B\u3093: ${target.reason}`);deps.onProcess?.(null);await closeStream(stream);return{outcome:"unavailable",output:lines.join("\n"),exitCode:null,cooldownSec:null,slot}}if(target.note!==null)deps.log(` \u8D77\u52D5: ${target.note}`);let spawned;try{spawned=spawn(target.file,target.args,{cwd:req.cwd,env,detached:process.platform!=="win32",stdio:["pipe","pipe","pipe"]})}catch(e){
25
+ const code=e.code??"";if(!["EINVAL","ENOENT","EACCES","ENAMETOOLONG"].includes(code))throw e;const hint=code==="ENAMETOOLONG"?`\uFF08\u30B3\u30DE\u30F3\u30C9\u30E9\u30A4\u30F3\u304C\u9577\u3059\u304E\u307E\u3059\u3002\u5B9F\u884C\u30D5\u30A1\u30A4\u30EB\uFF0B\u5F15\u6570\u3067 ${[target.file,...target.args].join(" ").length} \u6587\u5B57\u3002Windows \u306E\u4E0A\u9650\u306F 32,767 \u6587\u5B57\u3002\u30D7\u30ED\u30F3\u30D7\u30C8 ${req.prompt.length} \u6587\u5B57\u306F stdin \u7D4C\u7531\u306A\u306E\u3067\u539F\u56E0\u3067\u306F\u3042\u308A\u307E\u305B\u3093\uFF09`:
26
+ "";emit(`[twp task-loop] ${launch.file} \u3092\u8D77\u52D5\u3067\u304D\u307E\u305B\u3093: ${e.message}${hint}`);deps.onProcess?.(null);await closeStream(stream);return{outcome:"unavailable",output:lines.join("\n"),exitCode:null,cooldownSec:null,slot}}let stdinDelivered=false;let stdinError=null;spawned.stdin.on("error",e=>{if(stdinError===null)stdinError=e.code??e.message});spawned.stdin.on("finish",()=>{stdinDelivered=true});spawned.stdin.end(req.prompt);let killedFor=null;const signalTree=signal=>killProcessTree(
27
+ spawned,signal,{platform:deps.platform});const killTree=()=>{signalTree("SIGKILL")};let exited=false;let markExited=()=>{};const exitedPromise=new Promise(resolve=>{markExited=()=>{exited=true;deps.onProcess?.(null);resolve()}});const waitExit=ms=>Promise.race([exitedPromise,new Promise(resolve=>{const t=setTimeout(resolve,ms);t.unref?.()})]);const abort=async()=>{if(exited||spawned.exitCode!==null||spawned.signalCode!==null)return;if(killedFor===null)killedFor="aborted";if(isForceOnly(deps.platform)){
28
+ deps.log(`\u26A0\uFE0F \u4E2D\u65AD\u30B7\u30B0\u30CA\u30EB\u3092\u53D7\u3051\u305F\u305F\u3081 ${req.ai} \u3092\u505C\u6B62\u3057\u307E\u3059\uFF08Windows \u306F\u7336\u4E88\u3092\u7F6E\u3051\u306A\u3044\u305F\u3081 taskkill /T /F \u3067\u6728\u3054\u3068\u5F37\u5236\u7D42\u4E86\u3057\u307E\u3059\uFF09`);const how=signalTree("SIGKILL");await waitExit(timing.abortReapMs);deps.log(!exited?` \u26A0\uFE0F ${req.ai} \u304C ${timing.abortReapMs/1e3}\u79D2 \u4EE5\u5185\u306B\u6D88\u3048\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u6B8B\u3063\u3066\u3044\u306A\u3044\u304B taskkill /FI \u3067\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044`:
29
+ how==="taskkill"?` ${req.ai} \u306E\u30D7\u30ED\u30BB\u30B9\u6728\u3092\u5F37\u5236\u7D42\u4E86\u3057\u307E\u3057\u305F\uFF08\u5B6B\u307E\u3067 taskkill /T \u304C\u5C4A\u304D\u307E\u3057\u305F\uFF09`:` \u26A0\uFE0F ${req.ai} \u306E\u76F4\u4E0B\u306E\u30D7\u30ED\u30BB\u30B9\u3060\u3051\u3092\u7D42\u4E86\u3057\u307E\u3057\u305F\uFF08taskkill \u3092\u6483\u3066\u306A\u304B\u3063\u305F\u305F\u3081\u5B6B\u304C\u6B8B\u3063\u3066\u3044\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\uFF09`);return}
30
+ deps.log(`\u26A0\uFE0F \u4E2D\u65AD\u30B7\u30B0\u30CA\u30EB\u3092\u53D7\u3051\u305F\u305F\u3081 ${req.ai} \u3092\u505C\u6B62\u3057\u307E\u3059\uFF08SIGTERM \u2192 \u6700\u5927${timing.abortGraceMs/1e3}\u79D2 \u2192 SIGKILL\uFF09`);signalTree("SIGTERM");await waitExit(timing.abortGraceMs);deps.log(exited?` ${req.ai} \u306F\u81EA\u5206\u304B\u3089\u7D42\u4E86\u3057\u307E\u3057\u305F\u3002\u6B8B\u3063\u305F\u5B50\u5B6B\u3092\u30D7\u30ED\u30BB\u30B9\u30B0\u30EB\u30FC\u30D7\u3054\u3068\u6383\u304D\u307E\u3059`:
31
+ ` ${req.ai} \u304C\u7336\u4E88\u5185\u306B\u7D42\u4E86\u3057\u306A\u304B\u3063\u305F\u305F\u3081\u3001\u30D7\u30ED\u30BB\u30B9\u30B0\u30EB\u30FC\u30D7\u3092\u5F37\u5236\u7D42\u4E86\u3057\u307E\u3059`);signalTree("SIGKILL");await waitExit(timing.abortReapMs)};deps.onProcess?.(abort);const started=Date.now();const feed=lineFeeder(raw=>{if(renderer===null)emit(raw);else for(const l of renderer.push(raw))emit(l)});spawned.stdout.on("data",c=>feed(c.toString("utf8")));spawned.stderr.on("data",c=>feed(
32
+ c.toString("utf8")));const timer=setInterval(()=>{if((Date.now()-started)/1e3>=req.timeoutSec){deps.log(`\u26A0\uFE0F ${req.ai} \u30BF\u30A4\u30E0\u30A2\u30A6\u30C8 (${Math.trunc((Date.now()-started)/1e3)}s >= ${req.timeoutSec}s) \u2192 \u30D7\u30ED\u30BB\u30B9\u3092\u5F37\u5236\u7D42\u4E86`);killedFor="timeout";killTree();return}const limited=renderer!==null?renderer.sawRateLimit():isRateLimited(recentTail(lines),req.ai);if(limited){deps.log(`\u26A0\uFE0F ${req.ai} \u30EC\u30FC\u30C8\u30EA\u30DF\u30C3\u30C8\u691C\u77E5 \u2192 \u5373\u5EA7\u306B\u30D7\u30ED\u30BB\u30B9\u3092\u7D42\u4E86`);
33
+ killedFor="rate-limited";killTree()}},timing.pollIntervalMs);let notLaunched=false;const exitCode=await new Promise(resolve=>{spawned.on("error",e=>{notLaunched=true;emit(`[twp task-loop] ${launch.file} \u3092\u8D77\u52D5\u3067\u304D\u307E\u305B\u3093: ${e.message}`);markExited();resolve(null)});spawned.on("close",code=>{markExited();resolve(code)})});deps.onProcess?.(null);clearInterval(timer);feed(null);if(stdinError!==null||!stdinDelivered){const cause=killedFor!==null?`\u3053\u3061\u3089\u304C ${killedFor}\
34
+ \u3067\u505C\u6B62\u3055\u305B\u305F\u305F\u3081`:notLaunched?"\u8D77\u52D5\u3067\u304D\u306A\u304B\u3063\u305F\u305F\u3081":exitCode===null?`AI \u304C signal\uFF08${spawned.signalCode??"\u4E0D\u660E"}\uFF09\u3067\u843D\u3061\u305F\u305F\u3081`:exitCode!==0?`AI \u304C\u7D42\u4E86\u30B3\u30FC\u30C9 ${exitCode} \u3067\u5148\u306B\u7D42\u308F\u3063\u305F\u305F\u3081`:"AI \u304C stdin \u3092\u8AAD\u307F\u5207\u3089\u306A\u304B\u3063\u305F\u305F\u3081";emit(`[twp task-loop] ${req.ai} \u3078\u30D7\u30ED\u30F3\u30D7\u30C8 ${req.
35
+ prompt.length} \u6587\u5B57\u3092\u9001\u308A\u5207\u308C\u307E\u305B\u3093\u3067\u3057\u305F\uFF08${cause}${stdinError===null?"":`\u30FB${stdinError}`}\uFF09`)}await closeStream(stream);const output=lines.join("\n");const scan=tailForScan(output);onMetrics({turns:renderer?.result.numTurns??null,tokensIn:renderer?.result.tokensIn??null,tokensOut:renderer?.result.tokensOut??null,costUsd:renderer?.result.costUsd??null,effort:built.effort===""?null:built.effort});const fatalText=exitCode!==0&&isCliFatalText(
36
+ renderer?.result.finalText??"")?renderer?.result.finalText??"":"";if(killedFor==="aborted"){return{outcome:"aborted",output,exitCode,cooldownSec:null,slot}}const untrusted=isClaude&&isUntrusted(scan);if(untrusted){deps.log("\u26A0\uFE0F claude: \u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u672A\u30C8\u30E9\u30B9\u30C8\u306E\u8B66\u544A\u304C\u51FA\u3066\u3044\u307E\u3059\uFF08permissions.allow \u306F\u7121\u8996\u3055\u308C\u308B\u304C\u5B9F\u884C\u81EA\u4F53\u306F\u901A\u308B\u3002hasTrustDialogAccepted \u3092\u7ACB\u3066\u308B\u3053\u3068\uFF09")}
37
+ const structuredLimited=renderer?.result.rateLimited===true;const textLimited=renderer!==null?exitCode!==0&&isRateLimited(scan,req.ai):isRateLimited(scan,req.ai);const fatalLimited=fatalText!==""&&isRateLimited(fatalText,req.ai);if(killedFor==="rate-limited"||structuredLimited||textLimited||fatalLimited){return{outcome:"rate-limited",output,exitCode,cooldownSec:cooldownFrom(renderer,`${scan}
38
+ ${fatalText}`,deps.now?.()??new Date),slot}}if(killedFor==="timeout")return{outcome:"timeout",output,exitCode,cooldownSec:null,slot};if(exitCode!==0&&(isAuthError(scan)||fatalText!==""&&isAuthError(fatalText))){deps.log(`\u26A0\uFE0F ${req.ai} \u8A8D\u8A3C\u30A8\u30E9\u30FC\u3092\u691C\u77E5\u3057\u307E\u3057\u305F\uFF08\u30D5\u30A9\u30FC\u30EB\u30D0\u30C3\u30AF\u5BFE\u8C61\uFF09`);return{outcome:"auth-error",output,exitCode,cooldownSec:null,slot}}if(isClaude&&exitCode!==0){const byEvent=renderer?.
39
+ result.subtype==="error_max_turns";if(byEvent||maxTurnsReached(output,built.maxTurns)){deps.log(`\u26A0\uFE0F claude \u30BF\u30FC\u30F3\u4E0A\u9650(${built.maxTurns})\u5230\u9054\u3067\u6253\u3061\u5207\u3089\u308C\u307E\u3057\u305F\uFF08\u672A\u5B8C\u4E86\u306E\u53EF\u80FD\u6027\u304C\u9AD8\u3044\uFF09`);return{outcome:"max-turns",output,exitCode,cooldownSec:null,slot}}}if(notLaunched){deps.log(`\u26D4 ${req.ai} \u3092\u8D77\u52D5\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08\u672A\u5C0E\u5165\u30FB\u5B9F\u884C\u6A29\u30FB\u30E9\u30C3\u30D1\u306E\u7834\u640D\u306E\u3044\u305A\u308C\u304B\uFF09`);
40
+ return{outcome:"unavailable",output,exitCode,cooldownSec:null,slot}}if(untrusted&&exitCode!==0){deps.log("\u26D4 claude: \u672A\u30C8\u30E9\u30B9\u30C8\u306E\u307E\u307E\u5931\u6557\u3057\u307E\u3057\u305F\uFF08permissions.allow \u7121\u8996\u304C\u539F\u56E0\u306E\u53EF\u80FD\u6027\uFF09");return{outcome:"untrusted",output,exitCode,cooldownSec:null,slot}}if(exitCode===0&&!stdinDelivered){deps.log(`\u26D4 ${req.ai} \u306F\u7D42\u4E86\u30B3\u30FC\u30C90\u3067\u7D42\u308F\u308A\u307E\u3057\u305F\u304C\u3001\u30D7\u30ED\u30F3\u30D7\u30C8 ${req.
41
+ prompt.length} \u6587\u5B57\u3092\u9001\u308A\u5207\u308C\u3066\u3044\u307E\u305B\u3093\uFF08\u5207\u308A\u8A70\u307E\u3063\u305F\u6307\u793A\u3067\u8D70\u3063\u305F\u53EF\u80FD\u6027\u304C\u3042\u308B\u305F\u3081\u6210\u529F\u3068\u3057\u3066\u6271\u3044\u307E\u305B\u3093\uFF09`);return{outcome:"failed",output,exitCode,cooldownSec:null,slot}}return{outcome:exitCode===0?"ok":"failed",output,exitCode,cooldownSec:null,slot}}function cooldownFrom(renderer,scan,now){const resets=renderer?.result.resetsAt??
42
+ null;if(resets!==null){const wait=Math.trunc((resets*1e3-now.getTime())/1e3);if(wait>0)return wait+30}return rateLimitWaitSeconds(scan,now)}function lineFeeder(onLine){let buffer="";return chunk=>{if(chunk===null){if(buffer!=="")onLine(buffer);buffer="";return}buffer+=chunk;const parts=buffer.split("\n");buffer=parts.pop()??"";for(const p of parts)onLine(p)}}function firstLine(prompt){return(prompt.split("\n")[0]??"").slice(0,80)}function recentTail(lines){let size=0;let from=lines.length;while(from>
43
+ 0&&size<64*1024){from-=1;size+=(lines[from]??"").length+1}return lines.slice(from).join("\n")}function sleepSync(ms){const shared=new Int32Array(new SharedArrayBuffer(4));Atomics.wait(shared,0,0,ms)}var DEFAULT_CHARTER_PREFIX="===== \u4EE5\u4E0B\u306F\u958B\u767A\u61B2\u7AE0\u3067\u3059\u3002\u5168\u3066\u306E\u5224\u65AD\u306E\u6700\u4E0A\u4F4D\u57FA\u6E96\u3067\u3042\u308A\u3001\u500B\u5225\u30B9\u30AD\u30EB\u306E\u624B\u9806\u3068\u77DB\u76FE\u3059\u308B\u5834\u5408\u306F\u672C\u61B2\u7AE0\u304C\u512A\u5148\u3057\u307E\u3059\u3002\u884C\u52D5\u3059\u308B\u524D\u306B\u3001\u305D\u306E\u884C\u52D5\u304C\u61B2\u7AE0\u306E\u76EE\u7684\u306B\u5BC4\u4E0E\u3059\u308B\u304B\u3092\u81EA\u3089\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002 =====";
44
+ var DEFAULT_CHARTER_SUFFIX="===== \u958B\u767A\u61B2\u7AE0\u3053\u3053\u307E\u3067\u3002\u4EE5\u4E0B\u304C\u4ECA\u56DE\u306E\u30BF\u30B9\u30AF\u6307\u793A\u3067\u3059\u3002 =====";var UNKNOWN_SLOT="(unresolved)";var FAST_FAIL_SEC=60;var FAST_FAIL_STREAK=3;var DispatchEngine=class{constructor(cfg,log,opts){this.cfg=cfg;this.log=log;this.opts=opts}cfg;log;opts;name="cli";cas=null;casDetected=false;slotResolved=new Map;lastSlot=new Map;charterWarned=false;unusable=null;activeAbort=null;aborting=false;unusableAt=0;fastFailStreak=new Map;launcherBin(){
45
+ const v=this.opts.launcherBin?.trim();return v===void 0||v===""?DEFAULT_CLAUDE_LAUNCHER.bin:v}async run(req){this.slotResolved.clear();if(this.aborting){this.log("\u26D4 \u4E2D\u65AD\u30B7\u30B0\u30CA\u30EB\u3092\u53D7\u3051\u3066\u3044\u308B\u305F\u3081 AI \u3092\u8D77\u52D5\u3057\u307E\u305B\u3093");return{outcome:"aborted",usedAi:"",serverAiType:null,output:"\uFF08\u4E2D\u65AD\u306E\u305F\u3081\u672A\u5B9F\u884C\uFF09"}}const env=this.opts.env??process.env;const skill=req.skill??"";const category=req.
46
+ category??this.cfg.categoryForSkill(skill);if(!this.preflightOk()){this.log("\u26D4 \u30DB\u30B9\u30C8\u5074\u306E\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u304C\u5230\u9054\u4E0D\u80FD\u3067\u3059\uFF08\u5168\u30DB\u30B9\u30C8\uFF09\u3002\u3053\u306E\u30A2\u30A4\u30C6\u30E0\u3067\u306F AI \u3092\u8D77\u52D5\u3057\u307E\u305B\u3093");return{outcome:"network-down",usedAi:"",serverAiType:null,output:"\uFF08\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u5230\u9054\u4E0D\u80FD\u306E\u305F\u3081\u672A\u5B9F\u884C\uFF09"}}
47
+ if(!this.casDetected){this.cas=this.opts.detect!==void 0?this.opts.detect():detectClaudeAutoSwitch(this.launcherBin());this.casDetected=true;this.log(this.cas===null?` ${this.launcherBin()}: \u672A\u5C0E\u5165\uFF08claude \u3092\u7D20\u3067\u8D77\u52D5\u3057\u307E\u3059\uFF09`:` ${this.launcherBin()}: \u691C\u51FA\uFF08exec ${this.cas.hasExec?"\u3042\u308A \u2192 \u7D4C\u7531\u3057\u3066\u8D77\u52D5\u3057\u307E\u3059":"\u7121\u3057 \u2192 \u7D20\u3067\u8D77\u52D5\u3057\u307E\u3059\uFF08\u66F4\u65B0\u3092\u63A8\u5968\uFF09"}\
48
+ \uFF09`)}const tried=[];let sawRateLimit=false;let sawTimeout=false;let sawFastFail=false;let sawUnavailable=false;let ranAny=false;let skippedForCooldown=false;let lastOutput="";let lastValidated=true;const requested=this.orderFor(category,skill,req.aiType);const head=requested[0]??"";const order=this.usableOrder(requested,category,skill);for(const ai of order){if(tried.includes(ai))continue;if(!this.cfg.isAllowed(ai,category,skill)){this.log(` ${ai} \u306F category=${category} / skill=${skill||
49
+ "none"} \u306E\u5B9F\u884C\u5BFE\u8C61\u5916\u306E\u305F\u3081\u30B9\u30AD\u30C3\u30D7`);continue}const slotFor=()=>{if(!isClaudeAi(ai))return null;if(this.cas===null)return null;if(this.slotResolved.has(ai))return this.slotResolved.get(ai)??null;const resolved=(this.opts.activeSlot??activeSlotPath)(this.cas);const effective=resolved??this.lastSlot.get(ai)??UNKNOWN_SLOT;if(resolved!==null)this.lastSlot.set(ai,resolved);else this.log(` ${ai} \u306E\u67A0\u3092\u89E3\u6C7A\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08${this.
50
+ launcherBin()} ${DEFAULT_CLAUDE_LAUNCHER.activeArgs.join(" ")}\uFF09\u3002${effective} \u3068\u3057\u3066\u6271\u3044\u307E\u3059`);this.slotResolved.set(ai,effective);return effective};const slotNow=this.cfg.hasCooldownFor(ai,this.now())?slotFor():null;if(this.cfg.isRateLimited(ai,this.now(),slotNow)){skippedForCooldown=true;this.log(` ${ai} \u306F\u30EC\u30FC\u30C8\u30EA\u30DF\u30C3\u30C8\u4E2D\u306E\u305F\u3081\u30B9\u30AD\u30C3\u30D7`);continue}const isHead=tried.length===0&&ai===head;this.
51
+ log(isHead?` AI\u9078\u629E: ${ai} (preferred) [category=${category}]`:` \u30D5\u30A9\u30FC\u30EB\u30D0\u30C3\u30AF: ${ai} [category=${category}]`);const prompt=this.buildPrompt(req.prompt,req.promptPrefix,ai,tried);const logFile=tried.length===0?req.logFile:req.logFile.replace(/\.log$/,`-fallback-${ai}.log`);if(this.aborting){this.log(` \u4E2D\u65AD\u30B7\u30B0\u30CA\u30EB\u3092\u53D7\u3051\u3066\u3044\u308B\u305F\u3081 ${ai} \u306F\u8D77\u52D5\u3057\u307E\u305B\u3093`);return{outcome:"abort\
52
+ ed",usedAi:tried[tried.length-1]??"",serverAiType:null,output:lastOutput}}ranAny=true;const startedAt=this.now();const result=await(this.opts.runOnce??runOnce)({ai,prompt,logFile,cwd:req.cwd,timeoutSec:req.timeoutSec,category,skill,slot:slotFor(),model:isHead?req.aiModel:void 0,effort:req.aiEffort},{config:this.cfg,cas:this.cas,log:this.log,env,now:this.opts.now,onProcess:abort=>{this.activeAbort=abort;if(abort!==null&&this.aborting)void abort()}});lastOutput=result.output;tried.push(ai);const elapsedMs=this.
53
+ now()-startedAt;const elapsedSec=Math.round(elapsedMs/1e3);if(result.outcome==="failed"&&result.exitCode!==0&&elapsedMs>=0&&elapsedSec<FAST_FAIL_SEC){sawFastFail=true;const streak=(this.fastFailStreak.get(ai)??0)+1;this.fastFailStreak.set(ai,streak);this.log(` ${ai} \u304C ${elapsedSec}\u79D2\u3067\u5931\u6557\u3057\u307E\u3057\u305F\uFF08AI \u304C\u4ED5\u4E8B\u3092\u59CB\u3081\u308B\u524D\u306B\u843D\u3061\u305F\u53EF\u80FD\u6027\uFF09 \u2192 \u6B21\u306EAI\u306B\u30D5\u30A9\u30FC\u30EB\u30D0\u30C3\u30AF`);
54
+ if(streak>=FAST_FAIL_STREAK){const sec=this.cfg.markAiUnusable(ai,this.now());this.fastFailStreak.delete(ai);this.log(` ${ai} \u306F\u8D77\u52D5\u76F4\u5F8C\u306E\u5931\u6557\u304C${streak}\u56DE\u7D9A\u3044\u3066\u3044\u307E\u3059 \u2192 ${sec}\u79D2\u9593\u306F\u9396\u304B\u3089\u5916\u3057\u307E\u3059\uFF08\u540C\u3058\u58C1\u306B\u5F8C\u7D9A\u30A2\u30A4\u30C6\u30E0\u3092\u5F53\u3066\u306A\u3044\u305F\u3081\u3002\u76F4\u8FD1\u306E\u51FA\u529B: ${failureHint(result.output)||"(\u7406\u7531\u884C\u306A\u3057)"}\
55
+ \uFF09`)}continue}if(!["rate-limited","auth-error","unavailable"].includes(result.outcome)){this.fastFailStreak.delete(ai)}if(!["rate-limited","auth-error","timeout","unavailable"].includes(result.outcome)){if(result.outcome==="ok"&&req.validate!==void 0){if(req.validate(result.output)){this.log(` ${ai} \u304B\u3089\u5B9F\u884C\u8A08\u753BJSON\u3092\u53D6\u5F97\u3057\u307E\u3057\u305F`)}else{this.log(` ${ai}: \u5B9F\u884C\u8A08\u753B\u306EJSON\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093 \u2192 \u6B21\u306EAI\u306B\u30D5\u30A9\u30FC\u30EB\u30D0\u30C3\u30AF`);
56
+ lastValidated=false;continue}}return this.finish(result.outcome,ai,result.output,result.metrics)}if(result.outcome==="rate-limited"){sawRateLimit=true;const seconds=result.cooldownSec??this.cfg.cooldownDefaultSec(ai,env);const slotUsed=slotFor();const capped=this.cfg.markRateLimited(ai,seconds,this.now(),slotUsed);this.log(` ${ai} \u3092\u30EC\u30FC\u30C8\u30EA\u30DF\u30C3\u30C8\u3068\u3057\u3066\u30DE\u30FC\u30AF (${capped}\u79D2\u9593${slotUsed===null?"":` / \u67A0 ${slotUsed}`})`);await this.
57
+ waitBeforeFallback(ai,env)}else if(result.outcome==="timeout"){sawTimeout=true;this.log(` ${ai} \u304C\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8 \u2192 \u6B21\u306EAI\u306B\u30D5\u30A9\u30FC\u30EB\u30D0\u30C3\u30AF`)}else if(result.outcome==="unavailable"){sawUnavailable=true;const sec=this.cfg.markAiUnusable(ai,this.now());this.log(` ${ai} \u3092\u8D77\u52D5\u3067\u304D\u307E\u305B\u3093 \u2192 \u6B21\u306EAI\u306B\u30D5\u30A9\u30FC\u30EB\u30D0\u30C3\u30AF\uFF08${sec}\u79D2\u9593\u306F\u9396\u304B\u3089\u5916\u3057\u307E\u3059\uFF09`)}else{
58
+ sawUnavailable=true;const sec=this.cfg.markAiUnusable(ai,this.now());this.log(` ${ai} \u306E\u8A8D\u8A3C\u30A8\u30E9\u30FC \u2192 \u6B21\u306EAI\u306B\u30D5\u30A9\u30FC\u30EB\u30D0\u30C3\u30AF\uFF08${sec}\u79D2\u9593\u306F\u9396\u304B\u3089\u5916\u3057\u307E\u3059\uFF09`)}}if(!lastValidated&&!sawRateLimit&&ranAny){this.log("\u26A0\uFE0F \u3069\u306EAI\u304B\u3089\u3082\u5B9F\u884C\u8A08\u753BJSON\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F");return{outcome:"ok",usedAi:tried[tried.
59
+ length-1]??"",serverAiType:null,output:lastOutput}}if(!ranAny){if(skippedForCooldown){this.log("\u26A0\uFE0F \u5168AI\u304C\u30AF\u30FC\u30EB\u30C0\u30A6\u30F3\u4E2D\u30671\u3064\u3082\u5B9F\u884C\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08\u5F85\u6A5F\u3057\u3066\u518D\u8A66\u884C\u3057\u307E\u3059\uFF09");return{outcome:"rate-limited",usedAi:"",serverAiType:null,output:lastOutput}}this.log("\u26A0\uFE0F \u5B9F\u884C\u3067\u304D\u308BAI\u304C\u9396\u306B1\u3064\u3082\u3042\u308A\u307E\u305B\u3093\uFF08\u672A\u30ED\u30B0\u30A4\u30F3\u30FB\u30AB\u30C6\u30B4\u30EA\u8A2D\u5B9A\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\uFF09");
60
+ return{outcome:"unavailable",usedAi:"",serverAiType:null,output:lastOutput}}if(sawTimeout){this.log("\u26A0\uFE0F \u5168AI\u304C\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8\u307E\u305F\u306F\u8A8D\u8A3C\u30A8\u30E9\u30FC\u3067\u3059\uFF08\u30EC\u30FC\u30C8\u30EA\u30DF\u30C3\u30C8\u3067\u306F\u306A\u3044\u306E\u3067\u901A\u5E38\u5931\u6557\u3068\u3057\u3066\u6271\u3044\u307E\u3059\uFF09");return{outcome:"timeout",usedAi:tried[tried.length-1]??"",serverAiType:null,output:lastOutput}}if(sawRateLimit){this.
61
+ log("\u26A0\uFE0F \u5168AI\u304C\u30EC\u30FC\u30C8\u30EA\u30DF\u30C3\u30C8\u3067\u3059");return{outcome:"rate-limited",usedAi:"",serverAiType:null,output:lastOutput}}if(sawFastFail&&!sawUnavailable){this.log("\u26A0\uFE0F \u5168AI\u304C\u8D77\u52D5\u76F4\u5F8C\u306B\u5931\u6557\u3057\u307E\u3057\u305F\uFF08\u901A\u5E38\u5931\u6557\u3068\u3057\u3066\u6271\u3044\u307E\u3059\uFF09");return this.finish("failed",tried[tried.length-1]??"",lastOutput)}this.log("\u26A0\uFE0F \u5168AI\u304C\u8A8D\u8A3C\u30A8\u30E9\u30FC\u307E\u305F\u306F\u8D77\u52D5\u4E0D\u80FD\u3067\u3059\uFF081\u884C\u3082\u5B9F\u884C\u3057\u3066\u3044\u306A\u3044\u305F\u3081\u3001\u5931\u6557\u3067\
62
+ \u306F\u306A\u304F\u672A\u5B9F\u884C\u3068\u3057\u3066\u6271\u3044\u307E\u3059\uFF09");return{outcome:"unavailable",usedAi:tried[tried.length-1]??"",serverAiType:null,output:lastOutput}}async abort(){this.aborting=true;const abort=this.activeAbort;if(abort===null)return false;await abort();return true}now(){return(this.opts.now??(()=>new Date))().getTime()}usableOrder(order,category,skill){const detected=this.detectUnusable();const unique=[...new Set(order)];const kept=[];const soft=[];const dropped=[];
63
+ for(const ai of unique){const hit=this.cfg.isAiUnusable(ai,this.now())?{why:"\u76F4\u8FD1\u306E\u8A8D\u8A3C\u30A8\u30E9\u30FC\u30FB\u8D77\u52D5\u5931\u6557\u30FB\u8D77\u52D5\u76F4\u5F8C\u306E\u5931\u6557\u306E\u9023\u7D9A",hard:false}:detected.get(ai);if(hit===void 0){kept.push(ai);continue}dropped.push(`${ai}\uFF08${hit.why}\uFF09`);if(!hit.hard)soft.push(ai)}if(dropped.length===0)return unique;const canRun=list=>list.some(ai=>this.cfg.isAllowed(ai,category,skill));if(!canRun(kept)&&canRun(soft)){
64
+ this.log(` \u26A0\uFE0F \u9396\u306B\u5B9F\u884C\u3067\u304D\u308B AI \u304C\u6B8B\u308A\u307E\u305B\u3093\uFF08\u9664\u5916\u5019\u88DC: ${dropped.join(" / ")}\uFF09`);this.log(" \u63A8\u5B9A\u3067\u5916\u3057\u305F\u3082\u306E\u306F\u5224\u5B9A\u304C\u8AA4\u3063\u3066\u3044\u308B\u53EF\u80FD\u6027\u304C\u3042\u308B\u305F\u3081\u3001\u9396\u3078\u623B\u3057\u307E\u3059\uFF08fail-open\uFF09");return unique.filter(ai=>kept.includes(ai)||soft.includes(ai))}this.log(` \u9396\u304B\u3089\u9664\u5916: ${dropped.
65
+ join(" / ")}`);if(kept.length===0){this.log(" \u9396\u306B\u8D77\u52D5\u3067\u304D\u308B AI \u304C1\u3064\u3082\u6B8B\u308A\u307E\u305B\u3093\uFF08\u672A\u5C0E\u5165\u306E AI \u3092\u8D77\u52D5\u3057\u3066\u3082\u5FC5\u305A\u5931\u6557\u3057\u307E\u3059\uFF09")}return kept}detectUnusable(){const now=this.now();if(this.unusable!==null&&now-this.unusableAt<DETECT_CACHE_MS)return this.unusable;const map=new Map;this.unusable=map;this.unusableAt=now;try{for(const d of(this.opts.detectClis??detectAiClis)(
66
+ {env:this.opts.env??process.env,launcherBin:this.launcherBin()})){if(!d.installed)map.set(d.ai,{why:"PATH \u306B\u7121\u3044\uFF08\u672A\u5C0E\u5165\uFF09",hard:true});else if(d.auth==="unauthenticated")map.set(d.ai,{why:"\u672A\u30ED\u30B0\u30A4\u30F3",hard:false})}}catch(err){this.log(` \u26A0\uFE0F AI CLI \u306E\u691C\u51FA\u306B\u5931\u6557\u3057\u307E\u3057\u305F\uFF08${err.message}\uFF09\u3002\u9396\u306F\u305D\u306E\u307E\u307E\u4F7F\u3044\u307E\u3059`);map.clear()}return map}orderFor(category,skill,preferred){
67
+ const chain=this.cfg.chainFor(category);const head=preferred&&preferred.trim()!==""?preferred.trim():this.cfg.selectPrimary(category,skill,"P2","");return head===""?chain:[head,...chain]}finish(outcome,ai,output,metrics){const serverAiType=isServerAiType(ai)?ai:null;return metrics===void 0?{outcome,usedAi:ai,serverAiType,output}:{outcome,usedAi:ai,serverAiType,output,metrics}}async waitBeforeFallback(ai,env){const delay=this.cfg.fallbackDelaySec(ai,env);if(delay<=0)return;this.log(` \u23F3 ${ai}\
68
+ \u30EC\u30FC\u30C8\u30EA\u30DF\u30C3\u30C8 \u2192 \u30D5\u30A9\u30FC\u30EB\u30D0\u30C3\u30AF\u524D\u306B ${delay}\u79D2 \u5F85\u6A5F\uFF08\u4ED6AI\u3078\u306E\u8EE2\u5AC1\u3092\u6291\u5236\uFF09`);const sleep=this.opts.sleep??(ms=>new Promise(r=>setTimeout(r,ms)));await sleep(delay*1e3)}buildPrompt(body,promptPrefix,ai,tried){const expanded=this.expandForNonClaude(body,ai);const parts=[];if(tried.length>0)parts.push(fallbackNote(tried));const charter=this.charter();if(charter!==null)parts.push(
69
+ charter);if(promptPrefix!==void 0&&promptPrefix!=="")parts.push(promptPrefix);parts.push(expanded);return parts.join("\n\n")}expandForNonClaude(prompt,ai){const cmd=this.opts.compileCommand;if(ai==="claude"||cmd===void 0||cmd.length===0)return prompt;const[file,...args]=cmd;if(file===void 0)return prompt;const compileEnv={...this.opts.env??process.env};const resolved=process.platform!=="win32"||isWindowsDriveAbsolute(file)?file:findExecutable(file,{env:compileEnv,platform:"win32"});if(resolved===
70
+ null)return prompt;const r=spawnSync(resolved,[...args,"--provider",ai,"--project-dir",this.opts.workspace],{encoding:"utf8",env:{...this.opts.env??process.env,_AI_PROMPT:prompt},timeout:6e4,maxBuffer:32*1024*1024});const out=(r.stdout??"").trim();if(r.error!==void 0||r.status!==0||out===""){this.log(` \u26A0\uFE0F ${ai} \u5411\u3051\u306E\u30B9\u30AD\u30EB\u5C55\u958B\u306B\u5931\u6557\u3057\u307E\u3057\u305F\uFF08\u672A\u5C55\u958B\u306E\u307E\u307E\u5B9F\u884C\u3057\u307E\u3059\uFF09`);return prompt}
71
+ return out}charter(){if(this.opts.charterEnabled===false)return null;const file=this.opts.charterFile;if(file===void 0||file.trim()==="")return null;const resolved=path2.isAbsolute(file)?file:path2.resolve(this.opts.workspace,file);let body;try{body=fs2.readFileSync(resolved,"utf8")}catch{if(!this.charterWarned){this.charterWarned=true;this.log(` \u26A0\uFE0F\u26A0\uFE0F \u61B2\u7AE0\u3092\u6CE8\u5165\u3067\u304D\u307E\u305B\u3093\uFF08${resolved} \u304C\u8AAD\u3081\u306A\u3044\uFF09\u3002\u4EE5\u5F8C\u306E\u5B9F\u884C\u306F\u61B2\u7AE0\u306A\u3057\u3067\u9032\u307F\u307E\u3059`);
72
+ this.log(" \u30D5\u30A1\u30A4\u30EB\u306E\u79FB\u52D5\u30FB\u6539\u540D\u30FB\u6A29\u9650\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u8A2D\u5B9A: charter_file / CHARTER_FILE\uFF09")}return null}const prefix=this.opts.charterPrefix??DEFAULT_CHARTER_PREFIX;const suffix=this.opts.charterSuffix??DEFAULT_CHARTER_SUFFIX;const parts=[];if(prefix!=="")parts.push(prefix);parts.push(body);if(suffix!=="")parts.push(suffix);return parts.join("\n\n")}preflightOk(){const env=this.opts.
73
+ env??process.env;if((env.PREFLIGHT_ENABLED??"true")!=="true")return true;const hosts=this.opts.preflightHosts??DEFAULT_PREFLIGHT_HOSTS;if(hosts.length===0)return true;const timeout=Number.parseInt(env.PREFLIGHT_TIMEOUT??"",10);const sec=Number.isInteger(timeout)&&timeout>0?timeout:5;for(let attempt=0;attempt<2;attempt+=1){if(attempt>0)sleepSync(2e3);for(const host of hosts){const nul=process.platform==="win32"?"NUL":"/dev/null";const curl=process.platform==="win32"?system32(process.env,"curl.exe"):
74
+ "curl";if(curl===null)return false;const r=spawnSync(curl,["-sS","--max-time",String(sec),"-o",nul,`https://${host}/`],{encoding:"utf8",timeout:(sec+5)*1e3});if(r.error===void 0&&r.status===0)return true}}return false}};var DETECT_CACHE_MS=1800*1e3;var DEFAULT_PREFLIGHT_HOSTS=["api.anthropic.com","github.com"];function fallbackNote(tried){return["\u3010\u30D5\u30A9\u30FC\u30EB\u30D0\u30C3\u30AF\u5B9F\u884C\u306B\u3064\u3044\u3066\u306E\u6CE8\u610F\u3011",`\u3053\u306E\u30BF\u30B9\u30AF\u306F\u5225\u306EAI\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\uFF08${tried.
75
+ join(", ")}\uFF09\u304C\u5148\u306B\u8A66\u884C\u3057\u307E\u3057\u305F\u304C\u3001\u30EC\u30FC\u30C8\u30EA\u30DF\u30C3\u30C8\u3001\u8A8D\u8A3C\u30A8\u30E9\u30FC\u3001\u307E\u305F\u306F\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8\u306B\u3088\u308A\u5B8C\u4E86\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002`,"\u524D\u306EAI\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u304C\u30BF\u30B9\u30AF\u306E\u9014\u4E2D\u307E\u3067\u4F5C\u696D\u3092\u9032\u3081\u3066\u3044\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002\u7279\u306B\u4EE5\u4E0B\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044:",
76
+ "- TWP\u30BF\u30B9\u30AF\u306E\u30B9\u30C6\u30FC\u30BF\u30B9\u304C\u300C\u9032\u884C\u4E2D\u300D\u306B\u5909\u66F4\u3055\u308C\u3066\u3044\u306A\u3044\u304B\uFF08\u5909\u66F4\u3055\u308C\u3066\u3044\u308B\u5834\u5408\u306F\u305D\u306E\u307E\u307E\u7D99\u7D9A\uFF09","- \u30B3\u30E1\u30F3\u30C8\u304C\u9014\u4E2D\u307E\u3067\u6295\u7A3F\u3055\u308C\u3066\u3044\u306A\u3044\u304B","- \u30D6\u30E9\u30F3\u30C1\u3084PR\u304C\u4F5C\u6210\u9014\u4E2D\u3067\u306A\u3044\u304B","\u307E\u305A\u73FE\u72B6\u3092\u78BA\u8A8D\u3057\u3066\u304B\u3089\u3001\u4E2D\u65AD\u3055\u308C\u305F\u7B87\u6240\u304B\u3089\u4F5C\u696D\u3092\u518D\u958B\u3057\u3066\u304F\
77
+ \u3060\u3055\u3044\u3002"].join("\n")}export{DEFAULT_CHARTER_PREFIX,DEFAULT_CHARTER_SUFFIX,DEFAULT_PREFLIGHT_HOSTS,DispatchEngine};
@@ -1,7 +1,7 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{RESIDENT_TOKEN_CAP,buildResidentSet,buildSystemPrompt,createAuditLogger,currentBranch,displayCwd,runTurn}from"./chunk-IM4H52FC.js";import{applyPermissionMode,checkPermission,getMode,isModeId,nextMode}from"./chunk-NNOYO67O.js";import{require_fuzzysort}from"./chunk-DIMZRTLE.js";import{isFullWidth,isWide,stringWidth,stripAnsi}from"./chunk-WVS4W5FY.js";import{RelayError,builtinCatalog,createRuntime,loadCachedCatalog,modelLabel,pickModel,toModelInfos}from"./chunk-RQFG3OUL.js";
4
- import{checkMinSupportedVersion,isBelowMinSupported,minSupportedBlockMessage}from"./chunk-DXXFUNYN.js";import"./chunk-N2UVRM3Z.js";import"./chunk-PMOUHEJQ.js";import"./chunk-63LDNYGW.js";import"./chunk-NERYSBA4.js";import"./chunk-RZVI6PMW.js";import{proxyDiagnostics}from"./chunk-J7QYPKVK.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.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.
3
+ import{RESIDENT_TOKEN_CAP,buildResidentSet,buildSystemPrompt,createAuditLogger,currentBranch,displayCwd,runTurn}from"./chunk-R7T4VOIN.js";import"./chunk-N2UVRM3Z.js";import{applyPermissionMode,checkPermission,getMode,isModeId,nextMode}from"./chunk-NNOYO67O.js";import{require_fuzzysort}from"./chunk-DIMZRTLE.js";import{isFullWidth,isWide,stringWidth,stripAnsi}from"./chunk-WVS4W5FY.js";import{RelayError,builtinCatalog,createRuntime,loadCachedCatalog,modelLabel,pickModel,
4
+ toModelInfos}from"./chunk-RQFG3OUL.js";import{checkMinSupportedVersion,isBelowMinSupported,minSupportedBlockMessage}from"./chunk-DXXFUNYN.js";import"./chunk-PMOUHEJQ.js";import"./chunk-63LDNYGW.js";import"./chunk-NERYSBA4.js";import"./chunk-RZVI6PMW.js";import{proxyDiagnostics}from"./chunk-J7QYPKVK.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.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.
5
5
  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]||
6
6
  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=
7
7
  function(partialState,callback){if("object"!==typeof partialState&&"function"!==typeof partialState&&null!=partialState)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,partialState,callback,"setState")};Component.prototype.forceUpdate=function(callback){this.updater.enqueueForceUpdate(this,callback,"forceUpdate")};function ComponentDummy(){}ComponentDummy.prototype=Component.prototype;function PureComponent2(props,context,updater){
@@ -0,0 +1,124 @@
1
+ import { createRequire as __twpCreateRequire } from 'node:module';
2
+ const require = __twpCreateRequire(import.meta.url);
3
+ import{readBody}from"./chunk-QVXZEUKN.js";import{isRecord,pick,requireResolved,singleRef,withResolved}from"./chunk-GFC2ASHE.js";import{BACKLOG_BASE_PATH,BACKLOG_PROJECT_SCOPE_LABEL,BACKLOG_SCOPE_LABEL,backlogSpacePath,resolveNamed}from"./chunk-MZHTRHZS.js";import"./chunk-JKSXUBND.js";import"./chunk-II5RVJQN.js";import{ApiResponseError,UsageError}from"./chunk-M3GWY6NT.js";import"./chunk-5QCAIKFE.js";import"./chunk-NERYSBA4.js";import"./chunk-RZVI6PMW.js";
4
+ import"./chunk-J7QYPKVK.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var DEFAULT_COUNT=20;var MAX_COUNT=100;var NUMERIC=/^[0-9]+$/;function isExactNumericId(value){return NUMERIC.test(value)&&String(Number(value))===value}var ISSUE_REF=/^(?:[A-Za-z0-9_]+-[0-9]+|[0-9]+)$/;var DATE=/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/;var SPACE_COLUMNS=["id","space_url"];var PROJECT_COLUMNS=["id","projectKey","name"];var ISSUE_LIST_COLUMNS=["issueKey","summary","status","assignee","priority","dueDate","updated","descriptionTruncated"];var ISSUE_GET_COLUMNS=["id","issueKey","projectId","s\
5
+ ummary","description","descriptionTruncated","status","issueType","priority","assignee","createdUser","parentIssueId","startDate","dueDate","estimatedHours","actualHours","created","updated"];var COMMENT_COLUMNS=["id","created","createdUserId","createdUser","content","changeLog"];function commentRow(row){const source=isRecord(row)?row:{};const user=isRecord(source["createdUser"])?source["createdUser"]:{};return pick({...source,createdUserId:user["id"]??null,createdUser:user["name"]??null},COMMENT_COLUMNS)}
6
+ var ATTACHMENT_COLUMNS=["id","name","size","contentType","createdUserId","createdUser","created"];var STATUS_COLUMNS=["id","name","color"];var USER_COLUMNS=["id","userId","name","mailAddress","roleType"];var SPACE_FLAG={name:"--space",summary:"Backlog \u30B9\u30DA\u30FC\u30B9\uFF08ID / \u30B9\u30DA\u30FC\u30B9URL / \u30B5\u30D6\u30C9\u30E1\u30A4\u30F3\uFF09\u3002\u767B\u9332\u304C1\u4EF6\u306A\u3089\u7701\u7565\u3067\u304D\u307E\u3059",takesValue:true,placeholder:"<ID|URL>"};var BODY_MAX_CHARS=1e5;
7
+ var BODY_FLAGS=[{name:"--body-file",summary:"\u672C\u6587\u3092\u30D5\u30A1\u30A4\u30EB\u304B\u3089\u8AAD\u3080\uFF08- \u3067\u6A19\u6E96\u5165\u529B\uFF09\u3002\u6539\u884C\u30FBMarkdown \u3092\u58CA\u3055\u306A\u3044\u4E3B\u7D4C\u8DEF",takesValue:true,placeholder:"<\u30D1\u30B9|->"},{name:"--body",summary:"\u672C\u6587\u3092\u76F4\u63A5\u6307\u5B9A\u3059\u308B\uFF08\u4E00\u884C\u5411\u3051\u3002--body-file \u3068\u306E\u4F75\u7528\u306F\u30A8\u30E9\u30FC\uFF09",takesValue:true,placeholder:"<\u6587\u5B57\
8
+ \u5217>"}];function bodyHelp(fileFlag,inlineFlag){return`\u672C\u6587\u306F ${fileFlag} \u3092\u4E3B\u7D4C\u8DEF\u306B\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u30B7\u30A7\u30EB\u306E\u5F15\u6570\u306B\u8F09\u305B\u308B\u3068\u6539\u884C\u30FBMarkdown \u306E\u898B\u51FA\u3057\uFF08#\uFF09\u30FB
9
+ \u5F15\u7528\u7B26\u3067\u58CA\u308C\u307E\u3059\u3002${fileFlag} - \u3067\u6A19\u6E96\u5165\u529B\u304B\u3089\u8AAD\u3081\u307E\u3059\uFF08${inlineFlag} \u306F\u4E00\u884C\u5411\u3051\u3067\u3001\u4F75\u7528\u306F\u30A8\u30E9\u30FC\u3067\u3059\uFF09\u3002
10
+
11
+ \u672C\u6587\u306F\u52A0\u5DE5\u3057\u307E\u305B\u3093\uFF08\u6539\u884C\u30FB\u672B\u5C3E\u306E\u6539\u884C\u30FBCRLF \u306F\u305D\u306E\u307E\u307E\u9001\u308A\u307E\u3059\uFF09\u3002\u843D\u3068\u3059\u306E\u306F\u5148\u982D\u306E UTF-8 BOM \u3060\u3051\u3067\u3059\u3002
12
+ \u7A7A\u30FB\u7A7A\u767D\u306E\u307F\u306E\u672C\u6587\u306F\u6295\u7A3F\u3057\u307E\u305B\u3093\uFF08\u7D42\u4E86\u30B3\u30FC\u30C9 2\uFF09\u3002\u4E0A\u9650 ${BODY_MAX_CHARS} \u6587\u5B57\u306F Backlog \u306E\u5236\u7D04\u3067\u306F\u306A\u304F\u3001
13
+ \u672C\u6587\u3067\u306A\u3044\u30D5\u30A1\u30A4\u30EB\u3092\u8AA4\u3063\u3066\u6E21\u3057\u305F\u3068\u304D\u306B\u9001\u4FE1\u524D\u3067\u6B62\u3081\u308B\u305F\u3081\u306E CLI \u5074\u306E\u30AC\u30FC\u30C9\u3067\u3059\u3002
14
+
15
+ \u26A0 --dry-run \u304C\u8868\u793A\u3059\u308B\u672C\u6587\u306F\u3001\u30C8\u30FC\u30AF\u30F3\u3089\u3057\u3044\u6587\u5B57\u5217\uFF08Bearer \u2026\u30FBtoken=\u2026 \u7B49\uFF09\u3092\u4F0F\u5B57\u306B\u3057\u3066\u304B\u3089\u51FA\u3057\u307E\u3059\u3002
16
+ \u5B9F\u969B\u306B\u9001\u308B\u306E\u306F\u539F\u6587\u306A\u306E\u3067\u3001\u672C\u6587\u306B\u305D\u3046\u3057\u305F\u6587\u5B57\u5217\u304C\u542B\u307E\u308C\u308B\u5834\u5408\u3001\u8868\u793A\u3068\u9001\u4FE1\u5185\u5BB9\u306F\u4E00\u81F4\u3057\u307E\u305B\u3093
17
+ \uFF08CLI \u304C\u4F0F\u5B57\u5316\u3057\u3066\u6295\u7A3F\u3059\u308B\u308F\u3051\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u6295\u7A3F\u3057\u305F\u304F\u306A\u3044\u5024\u306F\u672C\u6587\u304B\u3089\u5916\u3057\u3066\u304F\u3060\u3055\u3044\uFF09\u3002`}var EXTERNAL_WRITE_HELP="\u26A0 \u3053\u308C\u306F Backlog\uFF08\u5916\u90E8\uFF09\u3078\u5B9F\u969B\u306B\u66F8\u304F\u64CD\u4F5C\u3067\u3059\u3002\u6295\u7A3F\u30FB\u5909\u66F4\u306F\u53D6\u308A\u6D88\u305B\u305A\u3001\u76F8\u624B\u3078\u901A\u77E5\u304C\u98DB\u3073\u307E\u3059\u3002\n \uFF08\u4E0A\u306E --yes \u306F\u5BFE\u8A71\u3067\u3082\u8981\u308A\u307E\u3059\u3002\u624B\u5143\u3068\u30EB\u30FC\u30D7\u3067\u8981\u4EF6\u3092\u5909\u3048\u306A\u3044\u305F\u3081\u3067\u3059\u3002\uFF09\n \u9001\u308B\u5185\u5BB9\u306F --dry-run \u3067\u9001\u4FE1\u305B\u305A\u306B\u78BA\u8A8D\u3067\u304D\u307E\u3059\uFF08--dry-run \u306F --yes \u3092\u8981\u308A\u307E\u305B\u3093\uFF09\u3002\n \u5931\u6557\u3057\u3066\u3082\u6A5F\u68B0\u7684\u306B\u518D\u5B9F\u884C\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002Backlog \u306B\u51AA\u7B49\u30AD\u30FC\u306F\u7121\u304F\u3001\u6295\u7A3F\u304C\u5C4A\u3044\u305F\u5F8C\u306B\n \u5FDC\u7B54\u306E\u8AAD\u307F\
18
+ \u53D6\u308A\u3060\u3051\u5931\u6557\u3057\u305F\u5834\u5408\u3001\u518D\u5B9F\u884C\u3059\u308B\u3068\u540C\u3058\u30B3\u30E1\u30F3\u30C8\u304C\u4E8C\u91CD\u306B\u6B8B\u308A\u307E\u3059\n \uFF08\u7D42\u4E86\u30B3\u30FC\u30C9\u3060\u3051\u3067\u306F\u533A\u5225\u3067\u304D\u307E\u305B\u3093\u3002twp backlog comment list <\u8AB2\u984C\u30AD\u30FC> \u3067\u5B9F\u7269\u3092\u78BA\u304B\u3081\u3066\u304F\u3060\u3055\u3044\uFF09\u3002";var ORDER_HELP="\u30B3\u30E1\u30F3\u30C8\u6295\u7A3F\u3068\u62C5\u5F53\u5909\u66F4\u3092\u5206\u3051\u3066\u884C\u3046\u5834\u5408\u306F\u3001\u5FC5\u305A\u300C\u30B3\u30E1\u30F3\u30C8\u6295\u7A3F \u2192 \u62C5\u5F53\u5909\u66F4\u300D\u306E\u9806\u306B\u3057\u3066\u304F\u3060\u3055\u3044\u3002\
19
+ \n \u9006\u306B\u3059\u308B\u3068\u3001\u76F8\u624B\u306B\u306F\u7406\u7531\u304C\u66F8\u304B\u308C\u3066\u3044\u306A\u3044\u62C5\u5F53\u5909\u66F4\u306E\u901A\u77E5\u3060\u3051\u304C\u5C4A\u304D\u307E\u3059\u3002\n twp backlog issue update --comment-file <\u30D1\u30B9> --assignee <ID> \u306A\u30891\u30EA\u30AF\u30A8\u30B9\u30C8\u3067\u4E21\u65B9\u3092\u884C\u3046\u306E\u3067\u3001\n \u300C\u30B3\u30E1\u30F3\u30C8\u306F\u51FA\u305F\u304C\u62C5\u5F53\u306F\u5909\u308F\u3063\u3066\u3044\u306A\u3044\u300D\u4E2D\u9593\u72B6\u614B\u304C\u8D77\u304D\u307E\u305B\u3093\uFF08Backlog \u5074\u3067\u306F\u5909\u66F4\u5C65\u6B74\u4ED8\u304D\u306E1\u30B3\u30E1\u30F3\u30C8\u306B\u306A\u308A\u307E\u3059\uFF09\u3002";
20
+ function commentObject(body){const comment=isRecord(body)?body["comment"]:void 0;if(!isRecord(comment)){throw new ApiResponseError("\u30B3\u30E1\u30F3\u30C8\u306E\u5FDC\u7B54\u306B comment \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return comment}function listOf(body,key,label){const value=isRecord(body)?body[key]:void 0;if(!Array.isArray(value)){throw new ApiResponseError(`${label}\u306E\u5FDC\u7B54\u306B ${key} \u914D\u5217\u304C\
21
+ \u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return value}function issueObject(body){const issue=isRecord(body)?body["issue"]:void 0;if(!isRecord(issue)){throw new ApiResponseError("\u8AB2\u984C\u8A73\u7D30\u306E\u5FDC\u7B54\u306B issue \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return issue}function integerFlag(flags,name,bounds){const raw=flags.
22
+ get(name);if(raw===void 0)return void 0;const trimmed=raw.trim();const n=Number.parseInt(trimmed,10);if(!Number.isInteger(n)||String(n)!==trimmed){throw new UsageError(`${name} \u306B\u306F\u6574\u6570\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u53D7\u3051\u53D6\u3063\u305F\u5024: ${raw}\uFF09`)}if(n<bounds.min){throw new UsageError(`${name} \u306B\u306F ${bounds.min} \u4EE5\u4E0A\u306E\u6574\u6570\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u53D7\u3051\u53D6\u3063\u305F\u5024: ${raw}\
23
+ \uFF09`)}if(bounds.max!==void 0&&n>bounds.max){throw new UsageError(`${name} \u306B\u6307\u5B9A\u3067\u304D\u308B\u306E\u306F ${bounds.max} \u307E\u3067\u3067\u3059\uFF08\u53D7\u3051\u53D6\u3063\u305F\u5024: ${raw}\uFF09`,`Backlog \u5074\u306E\u4E0A\u9650\u3067\u3059\u3002\u7D9A\u304D\u306F --offset \u3067\u53D6\u5F97\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return n}function dateFlag(flags,name){const raw=flags.get(name);if(raw===void 0)return void 0;const trimmed=raw.trim();if(!DATE.test(trimmed)){
24
+ throw new UsageError(`${name} \u306F yyyy-MM-dd \u306E\u5F62\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u53D7\u3051\u53D6\u3063\u305F\u5024: ${raw}\uFF09`)}return trimmed}function commaList(flags,name){const raw=flags.get(name);if(raw===void 0)return void 0;const parts=raw.split(",").map(part=>part.trim());if(parts.length===0||parts.some(part=>part==="")){throw new UsageError(`${name} \u306B\u7A7A\u306E\u5024\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093\uFF08\u53D7\u3051\u53D6\u3063\u305F\u5024: ${raw}\
25
+ \uFF09`,"\u8907\u6570\u6307\u5B9A\u306F\u30AB\u30F3\u30DE\u533A\u5207\u308A\u3067\u3059\uFF08--status \u672A\u5BFE\u5FDC,\u51E6\u7406\u4E2D\uFF09\u3002")}return parts}function resolvedList(input,key){const value=input.resolved?.[key];return value===void 0||value===""?void 0:value.split(",")}function indexedQuery(key,values,into){if(values===void 0)return;values.forEach((value,index)=>{into[`${key}[${index}]`]=value})}async function resolveSpace(input,ctx){const ref=input.flags.get("--space");if(ref===
26
+ void 0){const space=await ctx.resolver.backlogDefaultSpace();return{id:space.id,defaulted:space.name}}if(ref.trim()===""){throw new UsageError("--space \u306B\u7A7A\u306E\u5024\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093","--space <ID|\u30B9\u30DA\u30FC\u30B9URL> \u3092\u6307\u5B9A\u3059\u308B\u304B\u3001--space \u3054\u3068\u5916\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return{id:(await ctx.resolver.backlogSpace(ref)).id,defaulted:null}}function withSpace(input,space){return withResolved(
27
+ input,{spaceId:space.id,...space.defaulted!==null?{spaceDefaulted:space.defaulted}:{}})}async function resolveNumericRefs(refs,flag,label,scope,load){if(refs.every(ref=>NUMERIC.test(ref)))return[...refs];const candidates=await load();const resolved=[];for(const ref of refs){resolved.push(NUMERIC.test(ref)?ref:(await resolveNamed(ref,candidates,{flag,label,scope})).id)}return resolved}function requireProjectForNames(refs,flag,projectIds){if(projectIds.length===1)return projectIds[0];throw new UsageError(
28
+ projectIds.length===0?`${flag} \u3092\u540D\u524D\u3067\u6307\u5B9A\u3059\u308B\u306B\u306F --project \u304C\u5FC5\u8981\u3067\u3059`:`${flag} \u3092\u540D\u524D\u3067\u6307\u5B9A\u3067\u304D\u308B\u306E\u306F --project \u304C1\u3064\u306E\u3068\u304D\u3060\u3051\u3067\u3059\uFF08\u3044\u307E\u306F ${projectIds.length} \u4EF6\uFF09`,`${flag} \u306E\u5019\u88DC\uFF08${refs.join(" / ")}\uFF09\u306F Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u914D\u4E0B\u306B\u3057\u304B\u3042\u308A\u307E\u305B\u3093\u3002\u6570\u5024\u306E ID \u3092\u76F4\u63A5\u6E21\u305B\u3070 --project \u306F\u8981\u308A\u307E\u305B\u3093\u3002`)}
29
+ function issueRef(input,usage){const ref=singleRef(input,{flag:"--issue",label:"\u8AB2\u984C\u30AD\u30FC",usage});if(!ISSUE_REF.test(ref)){throw new UsageError(`\u8AB2\u984C\u30AD\u30FC\u306E\u5F62\u5F0F\u304C\u9055\u3044\u307E\u3059: ${ref}`,"Backlog \u306E\u8AB2\u984C\u30AD\u30FC\uFF08HC_FM_ID-19171\uFF09\u304B\u8AB2\u984CID\uFF08\u6570\u5024\uFF09\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return ref}var UPDATE_PROJECT_FLAG={name:"--project",summary:"--status / --assignee \u3092\
30
+ \u540D\u524D\u3067\u6307\u5B9A\u3059\u308B\u3068\u304D\u306B\u8981\u308B Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\uFF08\u30AD\u30FC / \u540D\u79F0 / \u6570\u5024ID\uFF09",takesValue:true,placeholder:"<\u30AD\u30FC|ID>"};function requireUpdateProject(input,flag,value){const ref=input.flags.get("--project")?.trim();if(ref===void 0||ref===""){throw new UsageError(`${flag} \u3092\u540D\u524D\uFF08${value}\uFF09\u3067\u6307\u5B9A\u3059\u308B\u306B\u306F --project \u304C\u5FC5\u8981\u3067\u3059`,`${flag}\
31
+ \u306E\u5019\u88DC\u306F Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u914D\u4E0B\u306B\u3057\u304B\u306A\u304F\u3001\u8AB2\u984C\u30AD\u30FC\u304B\u3089\u306F\u5F15\u3051\u307E\u305B\u3093\u3002twp backlog status list --project <\u30AD\u30FC> / twp backlog user list --project <\u30AD\u30FC> \u306E id \u3092 ${flag} \u306B\u76F4\u63A5\u6E21\u305B\u3070 --project \u306F\u8981\u308A\u307E\u305B\u3093\u3002`)}return ref}function readUpdateRef(input,flag,label){const raw=input.flags.get(flag);if(raw===
32
+ void 0)return void 0;const value=raw.trim();if(value===""){throw new UsageError(`${flag} \u306B\u7A7A\u306E\u5024\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,`${flag} \u3054\u3068\u5916\u305B\u3070\u3001\u305D\u306E\u9805\u76EE\u306F\u5909\u66F4\u3057\u307E\u305B\u3093\u3002`)}if(value.includes(",")){throw new UsageError(`${flag} \u306B\u8907\u6570\u306E\u5024\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093\uFF08\u53D7\u3051\u53D6\u3063\u305F\u5024: ${value}\uFF09`,`\u66F4\u65B0\u306F1\u3064\u306E\u5024\u3060\u3051\u3092\u53D7\u3051\u307E\u3059\uFF08\u7D5E\u308A\u8FBC\u307F\u306E twp\
33
+ backlog issue list \u3068\u306F\u9055\u3044\u307E\u3059\uFF09\u3002`)}if(NUMERIC.test(value)&&!isExactNumericId(value)){throw new UsageError(`${flag} \u306E ID \u304C\u6570\u5024\u3068\u3057\u3066\u6271\u3048\u308B\u7BC4\u56F2\u3092\u8D85\u3048\u3066\u3044\u307E\u3059: ${value}`,`Backlog \u306E ID \u3092\u305D\u306E\u307E\u307E\u6E21\u3057\u3066\u304F\u3060\u3055\u3044\uFF08twp backlog status list / user list \u306E id \u5217\uFF09\u3002`)}return{flag,label,value,projectRef:NUMERIC.test(value)?
34
+ null:requireUpdateProject(input,flag,value)}}async function resolveUpdateProject(ref,load){if(isExactNumericId(ref))return ref;const resolved=await resolveNamed(ref,await load(),{flag:"--project",label:"Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8",scope:BACKLOG_SCOPE_LABEL});if(!isExactNumericId(resolved.id)){throw new ApiResponseError(`Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u300C${ref}\u300D\u306E ID \u3092\u6570\u5024\u3068\u3057\u3066\u9001\u308C\u307E\u305B\u3093: ${JSON.stringify(resolved.
35
+ id)}\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return resolved.id}async function resolveUpdateRef(ref,projectId,load){if(ref.projectRef===null)return ref.value;if(projectId===void 0){throw new ApiResponseError(`${ref.flag} \u306E\u89E3\u6C7A\u5148\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u304C\u89E3\u6C7A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\uFF08\u5185\u90E8\u30A8\u30E9\u30FC\uFF09\u3002`)}const resolved=await resolveNamed(ref.value,await load(projectId),
36
+ {flag:ref.flag,label:ref.label,scope:BACKLOG_PROJECT_SCOPE_LABEL});if(!isExactNumericId(resolved.id)){throw new ApiResponseError(`${ref.label}\u300C${ref.value}\u300D\u306E ID \u3092\u6570\u5024\u3068\u3057\u3066\u9001\u308C\u307E\u305B\u3093: ${JSON.stringify(resolved.id)}\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return resolved.id}function spaceNotes(input){const defaulted=input.resolved?.["spaceDefaulted"];return defaulted===void 0?[]:[`--space \u3092\u7701\u7565\
37
+ \u3057\u305F\u305F\u3081\u3001\u767B\u9332\u3055\u308C\u3066\u3044\u308B\u552F\u4E00\u306E Backlog \u30B9\u30DA\u30FC\u30B9 ${defaulted} \u3092\u4F7F\u3044\u307E\u3057\u305F\u3002`]}function updateNotes(input){const notes=[...spaceNotes(input)];const usedForName=input.resolved?.["projectUsed"]!==void 0;if(input.flags.get("--project")!==void 0&&!usedForName){notes.push("--project \u306F\u4F7F\u3044\u307E\u305B\u3093\u3067\u3057\u305F\uFF08--status / --assignee \u3092\u6570\u5024 ID \u3067\u6E21\u3057\u305F\u305F\u3081\u3001\u540D\u524D\u306E\u89E3\u6C7A\u304C\u8981\u308A\u307E\u305B\u3093\uFF09\u3002")}
38
+ return notes}function offsetNotes(input,received,offsetFlag="--offset"){const count=integerFlag(input.flags,"--count",{min:1,max:MAX_COUNT})??DEFAULT_COUNT;if(received<count)return[];const offset=integerFlag(input.flags,offsetFlag,{min:0})??0;return[`${received} \u4EF6\uFF08--count \u306E\u4E0A\u9650\u3061\u3087\u3046\u3069\uFF09\u3092\u53D6\u5F97\u3057\u307E\u3057\u305F\u3002\u7D9A\u304D\u304C\u3042\u308B\u304B\u3082\u3057\u308C\u307E\u305B\u3093: ${offsetFlag} ${offset+received} \u3092\u4ED8\u3051\u3066\u7D9A\u304D\u3092\u53D6\u5F97\u3057\u3066\u304F\u3060\u3055\
39
+ \u3044\uFF08\u3053\u306E API \u306F\u30AB\u30FC\u30BD\u30EB\u3092\u8FD4\u3055\u306A\u3044\u305F\u3081 --all \u306F\u3042\u308A\u307E\u305B\u3093\uFF09\u3002`]}var spaceResource={name:"space",summary:"\u9023\u643A\u6E08\u307F Backlog \u30B9\u30DA\u30FC\u30B9",operations:[{name:"list",summary:"\u9023\u643A\u6E08\u307F\u306E Backlog \u30B9\u30DA\u30FC\u30B9\u3092\u4E00\u89A7\u3059\u308B",usage:"twp backlog space list",description:"TWP \u306E\u5916\u90E8\u9023\u643A\u8A2D\u5B9A\u306B\u767B\u9332\u3055\u308C\u3066\u3044\u308B Backlog \u30B9\u30DA\u30FC\u30B9\u3092\u4E00\u89A7\u3057\u307E\u3059\u3002\n\u30B9\u30DA\u30FC\u30B9\u306F**\u30ED\u30B0\u30A4\u30F3\u3057\u3066\u3044\u308B\u30E6\u30FC\u30B6\u30FC\u3054\u3068**\u306E\u8A2D\u5B9A\u3067\u3059\
40
+ \uFF08\u30C6\u30CA\u30F3\u30C8\u5171\u901A\u3067\u306F\u3042\u308A\u307E\u305B\u3093\uFF09\u3002\n\u3053\u3053\u306B\u51FA\u308B id / space_url \u306F\u3001\u4ED6\u306E backlog \u30B3\u30DE\u30F3\u30C9\u306E --space \u306B\u305D\u306E\u307E\u307E\u6E21\u305B\u307E\u3059\u3002\nAPI \u30AD\u30FC\u306F\u8FD4\u308A\u307E\u305B\u3093\uFF08\u30B5\u30FC\u30D0\u5074\u3067\u30DE\u30B9\u30AF\u3055\u308C\u3066\u3044\u307E\u3059\uFF09\u3002",flags:[],plan(input){if(input.args.length>0){throw new UsageError(
41
+ `list \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,"twp backlog space list help")}return{method:"GET",path:`${BACKLOG_BASE_PATH}/spaces`}},summarize:body=>listOf(body,"spaces","Backlog \u30B9\u30DA\u30FC\u30B9\u4E00\u89A7").map(row=>pick(row,SPACE_COLUMNS)),raw:body=>listOf(body,"spaces","Backlog \u30B9\u30DA\u30FC\u30B9\u4E00\u89A7")}]};var projectResource={name:"project",summary:"Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8",operations:[{name:"li\
42
+ st",summary:"Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u4E00\u89A7\u3059\u308B",usage:"twp backlog project list [--space <ID|URL>]",description:"\u3053\u3053\u306B\u51FA\u308B id\uFF08\u6570\u5024\uFF09\u306F backlog issue list --project \u306B\u3001projectKey \u306F\nbacklog status list / backlog user list \u306E --project \u306B\u6E21\u305B\u307E\u3059\u3002\n\u3053\u306E API \u306F\u30DA\u30FC\u30B8\u30F3\u30B0\u3092\u6301\u305F\u305A\u3001\u5E38\u306B\u5168\u4EF6\u3092\u8FD4\u3057\u307E\u3059\u3002",
43
+ flags:[SPACE_FLAG],async prepare(input,ctx){if(input.args.length>0){throw new UsageError(`list \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,"twp backlog project list help")}return withSpace(input,await resolveSpace(input,ctx))},plan(input){return{method:"GET",path:backlogSpacePath(requireSpace(input),"/projects")}},plannedNotes:spaceNotes,summarize:body=>listOf(body,"projects","Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u4E00\u89A7").map(row=>pick(
44
+ row,PROJECT_COLUMNS)),raw:body=>listOf(body,"projects","Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u4E00\u89A7")}]};var issueResource={name:"issue",summary:"Backlog \u8AB2\u984C",operations:[{name:"list",summary:"Backlog \u8AB2\u984C\u3092\u4E00\u89A7\u30FB\u691C\u7D22\u3059\u308B",usage:"twp backlog issue list [--space <ID|URL>] [--project <\u30AD\u30FC|ID>] [--status <\u540D\u524D|ID>] [--assignee <\u540D\u524D|ID>] [--updated-since <yyyy-MM-dd>] [--count <\u4EF6\u6570>] [--offset <\u4EF6\u6570>]",
45
+ description:"\u26A0 \u3053\u306E\u4E00\u89A7\u306E description\uFF08\u672C\u6587\uFF09\u306F\u65E2\u5B9A\u3067 1000 \u6587\u5B57\u306B\u5207\u3089\u308C\u307E\u3059\u3002\n \u5207\u3089\u308C\u305F\u8AB2\u984C\u306B\u306F descriptionTruncated: true \u304C\u4ED8\u304D\u307E\u3059\uFF08\u9ED9\u3063\u3066\u5207\u308A\u307E\u305B\u3093\uFF09\u3002\n \u5168\u6587\u304C\u8981\u308B\u306A\u3089 --description-max 0 \u3092\u4ED8\u3051\u308B\u304B\u3001twp backlog issue get \u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\n \uFF08get \u306F\u5E38\u306B\u5168\u6587\u3092\u8FD4\u3057\u307E\u3059\uFF09\u3002\n\n\u7D5E\u308A\u8FBC\u307F\u306E\u8907\u6570\u6307\u5B9A\u306F\u30AB\u30F3\u30DE\u533A\u5207\u308A\u3067\u3059\uFF08--status \u672A\u5BFE\u5FDC,\u51E6\u7406\u4E2D\uFF09\u3002\n--project / --status / --assignee / --created-user \u306F\u540D\u524D\u3067\u3082\u6570\u5024 ID \u3067\u3082\u6307\u5B9A\u3067\u304D\u307E\u3059\u3002\n \u540D\u524D\u3067\u6307\u5B9A\u3059\u308B\u5834\u5408\u3001--status / --assignee / --created-user \u306B\u306F --project \u304C\u5FC5\u8981\u3067\u3059\n \uFF08\u5019\u88DC\u304C Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u914D\u4E0B\u306B\u3057\u304B\u306A\u3044\u305F\u3081\uFF09\u3002\u6570\u5024 ID \u306A\u3089 --project \u306F\u8981\u308A\u307E\u305B\u3093\u3002\n\n\u30DA\u30FC\u30B8\u30F3\u30B0:\n \u3053\u306E API \u306F\u30AA\u30D5\u30BB\u30C3\u30C8\u65B9\u5F0F\u3067\u3059\uFF08\u30AB\u30FC\u30BD\u30EB\u3092\u8FD4\u3055\u306A\u3044\u305F\u3081 --all / --cursor \u306F\u3042\u308A\u307E\u305B\
46
+ \u3093\uFF09\u3002\n --count \u306E\u65E2\u5B9A\u306F 20\u30FB\u4E0A\u9650\u306F 100 \u3067\u3001\u7D9A\u304D\u306F --offset \u3067\u53D6\u5F97\u3057\u307E\u3059\u3002\n \u53D6\u5F97\u4EF6\u6570\u304C --count \u3061\u3087\u3046\u3069\u3060\u3063\u305F\u3068\u304D\u306F\u3001\u7D9A\u304D\u304C\u3042\u308B\u304B\u3082\u3057\u308C\u306A\u3044\u3053\u3068\u3092 stderr \u306B\u51FA\u3057\u307E\u3059\u3002",flags:[SPACE_FLAG,{name:"--project",summary:"Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\uFF08\u30AD\u30FC / \u540D\u79F0 / \u6570\u5024ID\uFF09\u3002\u30AB\u30F3\u30DE\u533A\u5207\u308A\u3067\u8907\u6570\u53EF",
47
+ takesValue:true,placeholder:"<\u30AD\u30FC|ID>"},{name:"--status",summary:"\u30B9\u30C6\u30FC\u30BF\u30B9\uFF08\u540D\u524D / \u6570\u5024ID\uFF09\u3002\u30AB\u30F3\u30DE\u533A\u5207\u308A\u3067\u8907\u6570\u53EF",takesValue:true,placeholder:"<\u540D\u524D|ID>"},{name:"--assignee",summary:"\u62C5\u5F53\u8005\uFF08\u540D\u524D / \u30ED\u30B0\u30A4\u30F3ID / \u30E1\u30FC\u30EB / \u6570\u5024ID\uFF09\u3002\u30AB\u30F3\u30DE\u533A\u5207\u308A\u3067\u8907\u6570\u53EF",takesValue:true,placeholder:"<\u540D\u524D\
48
+ |ID>"},{name:"--created-user",summary:"\u767B\u9332\u8005\uFF08\u540D\u524D / \u30ED\u30B0\u30A4\u30F3ID / \u30E1\u30FC\u30EB / \u6570\u5024ID\uFF09\u3002\u30AB\u30F3\u30DE\u533A\u5207\u308A\u3067\u8907\u6570\u53EF",takesValue:true,placeholder:"<\u540D\u524D|ID>"},{name:"--parent",summary:"\u89AA\u8AB2\u984C\u306E\u6570\u5024ID\u3002\u30AB\u30F3\u30DE\u533A\u5207\u308A\u3067\u8907\u6570\u53EF\uFF08\u8AB2\u984C\u30AD\u30FC\u306F\u4F7F\u3048\u307E\u305B\u3093\uFF09",takesValue:true,placeholder:"<\u8AB2\
49
+ \u984CID>"},{name:"--updated-since",summary:"\u3053\u306E\u65E5\u4EE5\u964D\u306B\u66F4\u65B0\u3055\u308C\u305F\u8AB2\u984C\u3060\u3051\u3092\u8FD4\u3059\uFF08yyyy-MM-dd\uFF09",takesValue:true,placeholder:"<yyyy-MM-dd>"},{name:"--keyword",summary:"\u4EF6\u540D\u30FB\u672C\u6587\u306E\u90E8\u5206\u4E00\u81F4\u3067\u7D5E\u308A\u8FBC\u3080",takesValue:true,placeholder:"<\u8A9E>"},{name:"--count",summary:`\u53D6\u5F97\u4EF6\u6570\uFF08\u65E2\u5B9A ${DEFAULT_COUNT}\u30FB\u4E0A\u9650 ${MAX_COUNT}\uFF09`,
50
+ takesValue:true,placeholder:"<\u4EF6\u6570>"},{name:"--offset",summary:"\u5148\u982D\u304B\u3089\u8AAD\u307F\u98DB\u3070\u3059\u4EF6\u6570\uFF08\u65E2\u5B9A 0\uFF09",takesValue:true,placeholder:"<\u4EF6\u6570>"},{name:"--sort",summary:"\u4E26\u3079\u66FF\u3048\u308B\u9805\u76EE\uFF08\u65E2\u5B9A updated\u3002\u4F8B: created / dueDate / priority\uFF09",takesValue:true,placeholder:"<\u9805\u76EE>"},{name:"--order",summary:"\u4E26\u3073\u9806\uFF08asc | desc\u30FB\u65E2\u5B9A desc\uFF09",takesValue:true,
51
+ placeholder:"<\u9806\u5E8F>"},{name:"--description-max",summary:"\u672C\u6587\u306E\u6700\u5927\u6587\u5B57\u6570\uFF080 \u3067\u5168\u6587\uFF09\u3002\u65E2\u5B9A\u306F 1000 \u6587\u5B57\u3067\u5207\u3089\u308C\u307E\u3059",takesValue:true,placeholder:"<\u6587\u5B57\u6570>"}],async prepare(input,ctx){if(input.args.length>0){throw new UsageError(`list \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,"twp backlog issue list help")}const space=await resolveSpace(
52
+ input,ctx);const resolved={};const projectRefs=commaList(input.flags,"--project");const projectIds=projectRefs===void 0?[]:await resolveNumericRefs(projectRefs,"--project","Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8",BACKLOG_SCOPE_LABEL,()=>ctx.resolver.backlogProjects(space.id));if(projectIds.length>0)resolved["projectId"]=projectIds.join(",");const statusRefs=commaList(input.flags,"--status");if(statusRefs!==void 0){resolved["statusId"]=(await resolveNumericRefs(statusRefs,"--status","Backlo\
53
+ g \u30B9\u30C6\u30FC\u30BF\u30B9",BACKLOG_PROJECT_SCOPE_LABEL,()=>ctx.resolver.backlogStatuses(space.id,requireProjectForNames(statusRefs,"--status",projectIds)))).join(",")}for(const[flag,key]of[["--assignee","assigneeId"],["--created-user","createdUserId"]]){const refs=commaList(input.flags,flag);if(refs===void 0)continue;resolved[key]=(await resolveNumericRefs(refs,flag,"Backlog \u30E6\u30FC\u30B6\u30FC",BACKLOG_PROJECT_SCOPE_LABEL,()=>ctx.resolver.backlogUsers(space.id,requireProjectForNames(
54
+ refs,flag,projectIds)))).join(",")}const parents=commaList(input.flags,"--parent");if(parents!==void 0){const bad=parents.filter(value=>!NUMERIC.test(value));if(bad.length>0){throw new UsageError(`--parent \u306B\u306F\u89AA\u8AB2\u984C\u306E\u6570\u5024 ID \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u53D7\u3051\u53D6\u3063\u305F\u5024: ${bad.join(" / ")}\uFF09`,"\u8AB2\u984C\u30AD\u30FC\uFF08HC_FM_ID-19171\uFF09\u306F\u4F7F\u3048\u307E\u305B\u3093\u3002twp backlog issue get <\u30AD\u30FC> \u306E id \u3092\u6E21\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}
55
+ resolved["parentIssueId"]=parents.join(",")}return withSpace(withResolved(input,resolved),space)},plan(input){const query={};indexedQuery("projectId",resolvedList(input,"projectId"),query);indexedQuery("statusId",resolvedList(input,"statusId"),query);indexedQuery("assigneeId",resolvedList(input,"assigneeId"),query);indexedQuery("createdUserId",resolvedList(input,"createdUserId"),query);indexedQuery("parentIssueId",resolvedList(input,"parentIssueId"),query);query["keyword"]=input.flags.get("--key\
56
+ word");query["updatedSince"]=dateFlag(input.flags,"--updated-since");query["count"]=integerFlag(input.flags,"--count",{min:1,max:MAX_COUNT});query["offset"]=integerFlag(input.flags,"--offset",{min:0});query["sort"]=input.flags.get("--sort");query["order"]=order(input.flags.get("--order"));query["description_max"]=integerFlag(input.flags,"--description-max",{min:0});return{method:"GET",path:backlogSpacePath(requireSpace(input),"/issues"),query}},plannedNotes:spaceNotes,summarize:body=>listOf(body,
57
+ "issues","\u8AB2\u984C\u4E00\u89A7").map(row=>pick(row,ISSUE_LIST_COLUMNS)),raw:body=>listOf(body,"issues","\u8AB2\u984C\u4E00\u89A7"),notes(body,input){const issues=listOf(body,"issues","\u8AB2\u984C\u4E00\u89A7");const truncated=issues.filter(row=>isRecord(row)&&row["descriptionTruncated"]===true).length;const notes=[...offsetNotes(input,issues.length)];if(truncated>0){notes.push(`${truncated} \u4EF6\u306E\u672C\u6587\u304C\u9014\u4E2D\u3067\u5207\u3089\u308C\u3066\u3044\u307E\u3059\uFF08descriptionTruncated: true\uFF09\u3002\u5168\u6587\u304C\u8981\u308B\u306A\u3089 --description-max 0 \u304B twp backlog issue get \u3092\u4F7F\u3063\u3066\u304F\
58
+ \u3060\u3055\u3044\u3002`)}return notes}},{name:"get",summary:"Backlog \u8AB2\u984C1\u4EF6\u306E\u8A73\u7D30\u3092\u8868\u793A\u3059\u308B\uFF08\u672C\u6587\u306F\u5168\u6587\uFF09",usage:"twp backlog issue get <\u8AB2\u984C\u30AD\u30FC|\u8AB2\u984CID> [--space <ID|URL>]",description:"\u672C\u6587\uFF08description\uFF09\u306F\u5E38\u306B\u5168\u6587\u304C\u8FD4\u308A\u307E\u3059\uFF08descriptionTruncated \u306F\u5FC5\u305A false\uFF09\u3002\n\u4E00\u89A7\uFF08twp backlog issue list\uFF09\u306F\u65E2\u5B9A\u3067 1000 \u6587\u5B57\u306B\u5207\u308B\u306E\u3067\u3001\u305D\u3053\u304C\u9055\u3044\u307E\u3059\u3002\n\u8AB2\u984C\u30AD\u30FC\uFF08HC_FM_ID-19171\uFF09\u3067\u3082\u8AB2\u984CID\uFF08\u6570\u5024\uFF09\u3067\u3082\u5F15\u3051\u307E\u3059\u3002",
59
+ flags:[SPACE_FLAG,{name:"--issue",summary:"\u8AB2\u984C\u30AD\u30FC\uFF08\u4F4D\u7F6E\u5F15\u6570\u3068\u540C\u3058\u610F\u5473\uFF09",takesValue:true,placeholder:"<\u30AD\u30FC|ID>"}],async prepare(input,ctx){const ref=issueRef(input,"twp backlog issue get help");return withResolved(withSpace(input,await resolveSpace(input,ctx)),{issueRef:ref})},plan(input){const ref=requireResolved(input,"issueRef");return{method:"GET",path:backlogSpacePath(requireSpace(input),`/issues/${encodeURIComponent(ref)}`)}},
60
+ plannedNotes:spaceNotes,summarize:body=>pick(issueObject(body),ISSUE_GET_COLUMNS),raw:body=>issueObject(body)},{name:"update",summary:"Backlog \u8AB2\u984C\u306E\u62C5\u5F53\u30FB\u30B9\u30C6\u30FC\u30BF\u30B9\u3092\u5909\u66F4\u3059\u308B\uFF08--yes \u304C\u5FC5\u8981\uFF09",usage:"twp backlog issue update <\u8AB2\u984C\u30AD\u30FC|\u8AB2\u984CID> [--assignee <\u540D\u524D|ID>] [--status <\u540D\u524D|ID>] [--comment-file <\u30D1\u30B9>] [--project <\u30AD\u30FC|ID>] --yes",description:`${EXTERNAL_WRITE_HELP}\
61
+
62
+
63
+ --assignee / --status / --comment-file\uFF08--comment\uFF09\u306E\u3046\u3061\u3001\u5C11\u306A\u304F\u3068\u30821\u3064\u304C\u5FC5\u8981\u3067\u3059\u3002
64
+ \u6307\u5B9A\u3057\u305F\u9805\u76EE\u3060\u3051\u3092\u9001\u308A\u307E\u3059\uFF08\u6307\u5B9A\u3057\u306A\u304B\u3063\u305F\u9805\u76EE\u306F\u5909\u66F4\u3057\u307E\u305B\u3093\uFF09\u3002
65
+
66
+ --assignee / --status \u306F\u6570\u5024 ID \u3067\u3082\u540D\u524D\u3067\u3082\u6307\u5B9A\u3067\u304D\u307E\u3059\u3002
67
+ \u540D\u524D\u3067\u6307\u5B9A\u3059\u308B\u5834\u5408\u306F --project <\u30AD\u30FC|\u540D\u79F0|ID> \u304C\u5FC5\u8981\u3067\u3059\uFF08\u5019\u88DC\u306F Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u914D\u4E0B\u306B
68
+ \u3057\u304B\u306A\u304F\u3001\u8AB2\u984C\u30AD\u30FC\u304B\u3089\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u5F15\u3051\u306A\u3044\u305F\u3081\uFF09\u3002\u6570\u5024 ID \u306A\u3089 --project \u306F\u8981\u308A\u307E\u305B\u3093
69
+ \uFF08\u6E21\u3057\u3066\u3082\u4F7F\u3044\u307E\u305B\u3093\u3002\u4F7F\u308F\u306A\u304B\u3063\u305F\u3053\u3068\u306F\u5B9F\u884C\u6642\u306B stderr \u3067\u304A\u77E5\u3089\u305B\u3057\u307E\u3059\uFF09\u3002
70
+ \u26A0 \u6570\u5B57\u3060\u3051\u306E\u5024\u306F\u5E38\u306B ID \u3068\u3057\u3066\u9001\u308A\u307E\u3059\u3002\u6570\u5B57\u3060\u3051\u306E\u30ED\u30B0\u30A4\u30F3ID\u30FB\u30B9\u30C6\u30FC\u30BF\u30B9\u540D\u306F\u6307\u305B\u307E\u305B\u3093
71
+ \uFF08\u305D\u306E\u5834\u5408\u306F twp backlog user list / status list \u3067 id \u3092\u8ABF\u3079\u3066\u6E21\u3057\u3066\u304F\u3060\u3055\u3044\uFF09\u3002
72
+ \u26A0 --project \u306F\u540D\u524D\u3092\u89E3\u6C7A\u3059\u308B\u305F\u3081\u3060\u3051\u306B\u4F7F\u3044\u3001\u5BFE\u8C61\u8AB2\u984C\u304C\u672C\u5F53\u306B\u305D\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306B\u5C5E\u3059\u308B\u304B\u306F
73
+ \u78BA\u304B\u3081\u307E\u305B\u3093\u3002\u53D6\u308A\u9055\u3048\u308B\u3068\u5225\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E ID \u306B\u89E3\u6C7A\u3055\u308C\u3001Backlog \u5074\u3067\u62D2\u5426\u3055\u308C\u307E\u3059\u3002
74
+
75
+ \u62C5\u5F53\u306E\u89E3\u9664\uFF08\u672A\u8A2D\u5B9A\u306B\u623B\u3059\uFF09\u306F\u3067\u304D\u307E\u305B\u3093\u3002\u3053\u306E\u64CD\u4F5C\u304C\u9001\u308C\u308B\u306E\u306F\u62C5\u5F53\u8005\u306E ID \u3060\u3051\u3067\u3059\u3002
76
+ \u540D\u524D\u306E\u7167\u5408\u306F\u5B8C\u5168\u4E00\u81F4\u3060\u3051\u3067\u3059\u3002\u524D\u65B9\u4E00\u81F4\u30FB\u90E8\u5206\u4E00\u81F4\u3067\u306F\u89E3\u6C7A\u3057\u307E\u305B\u3093\u2014\u2014\u305F\u3068\u3048\u3070\u300C\u5B8C\u4E86\u300D\u3067
77
+ \u300C\u5B8C\u4E86\u5F85\u3061\u300D\u3092\u9078\u3076\u3053\u3068\u306F\u306A\u304F\u3001\u4E00\u81F4\u3057\u306A\u3051\u308C\u3070\u5019\u88DC\u3092\u51FA\u3057\u3066\u7D42\u4E86\u30B3\u30FC\u30C9 2 \u3067\u6B62\u307E\u308A\u307E\u3059\u3002
78
+ ID \u306E\u8ABF\u3079\u5148: twp backlog status list --project <\u30AD\u30FC> / twp backlog user list --project <\u30AD\u30FC>
79
+
80
+ --comment-file \u3067\u6E21\u3057\u305F\u672C\u6587\u306F\u3001\u3053\u306E\u5909\u66F4\u306E\u7406\u7531\u3068\u3057\u3066\u540C\u3058\u30EA\u30AF\u30A8\u30B9\u30C8\u3067\u6295\u7A3F\u3055\u308C\u307E\u3059\u3002
81
+ ${bodyHelp("--comment-file","--comment")}
82
+
83
+ ${ORDER_HELP}`,destructive:true,flags:[SPACE_FLAG,{name:"--issue",summary:"\u8AB2\u984C\u30AD\u30FC\uFF08\u4F4D\u7F6E\u5F15\u6570\u3068\u540C\u3058\u610F\u5473\uFF09",takesValue:true,placeholder:"<\u30AD\u30FC|ID>"},UPDATE_PROJECT_FLAG,{name:"--assignee",summary:"\u62C5\u5F53\u8005\u3002\u6570\u5B57\u3060\u3051\u306E\u5024\u306F ID \u3068\u3057\u3066\u9001\u308A\u307E\u3059\uFF08\u540D\u524D\u30FB\u30ED\u30B0\u30A4\u30F3ID\u30FB\u30E1\u30FC\u30EB\u306A\u3089 --project \u304C\u8981\u308B\uFF09",takesValue:true,
84
+ placeholder:"<\u540D\u524D|ID>"},{name:"--status",summary:"\u30B9\u30C6\u30FC\u30BF\u30B9\uFF08\u6570\u5024ID\u3001\u307E\u305F\u306F\u540D\u524D\u3002\u540D\u524D\u306A\u3089 --project \u304C\u8981\u308B\uFF09",takesValue:true,placeholder:"<\u540D\u524D|ID>"},{name:"--comment-file",summary:"\u5909\u66F4\u306E\u7406\u7531\u3092\u672C\u6587\u3068\u3057\u3066\u30D5\u30A1\u30A4\u30EB\u304B\u3089\u8AAD\u307F\u3001\u540C\u3058\u30EA\u30AF\u30A8\u30B9\u30C8\u3067\u6295\u7A3F\u3059\u308B\uFF08- \u3067\u6A19\u6E96\u5165\u529B\uFF09",
85
+ takesValue:true,placeholder:"<\u30D1\u30B9|->"},{name:"--comment",summary:"\u5909\u66F4\u306E\u7406\u7531\u3092\u76F4\u63A5\u6307\u5B9A\u3059\u308B\uFF08\u4E00\u884C\u5411\u3051\u3002--comment-file \u3068\u306E\u4F75\u7528\u306F\u30A8\u30E9\u30FC\uFF09",takesValue:true,placeholder:"<\u6587\u5B57\u5217>"}],async prepare(input,ctx){const ref=issueRef(input,"twp backlog issue update help");const assigneeRef=readUpdateRef(input,"--assignee","Backlog \u30E6\u30FC\u30B6\u30FC");const statusRef=readUpdateRef(
86
+ input,"--status","Backlog \u30B9\u30C6\u30FC\u30BF\u30B9");const comment=await readBody(input,{flag:"--comment",fileFlag:"--comment-file",label:"\u5909\u66F4\u30B3\u30E1\u30F3\u30C8",maxChars:BODY_MAX_CHARS,usage:"twp backlog issue update help"});if(comment===void 0&&assigneeRef===void 0&&statusRef===void 0){throw new UsageError("\u5909\u66F4\u3059\u308B\u9805\u76EE\u304C\u3042\u308A\u307E\u305B\u3093","--assignee <\u540D\u524D|ID> / --status <\u540D\u524D|ID> / --comment-file <\u30D1\u30B9> \u306E\u3046\u3061\u3001\u5C11\u306A\u304F\u3068\u30821\u3064\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}
87
+ const space=await resolveSpace(input,ctx);const resolved={issueRef:ref};const projectRef=assigneeRef?.projectRef??statusRef?.projectRef??null;const projectId=projectRef===null?void 0:await resolveUpdateProject(projectRef,()=>ctx.resolver.backlogProjects(space.id));if(projectId!==void 0)resolved["projectUsed"]=projectId;if(assigneeRef!==void 0){resolved["assigneeId"]=await resolveUpdateRef(assigneeRef,projectId,id=>ctx.resolver.backlogUsers(space.id,id))}if(statusRef!==void 0){resolved["statusId"]=
88
+ await resolveUpdateRef(statusRef,projectId,id=>ctx.resolver.backlogStatuses(space.id,id))}if(comment!==void 0)resolved["comment"]=comment;return withSpace(withResolved(input,resolved),space)},plan(input){const body={};for(const key of["assigneeId","statusId"]){const value=input.resolved?.[key];if(value!==void 0)body[key]=Number(value)}const comment=input.resolved?.["comment"];if(comment!==void 0)body["comment"]=comment;return{method:"PATCH",path:backlogSpacePath(requireSpace(input),`/issues/${encodeURIComponent(
89
+ requireResolved(input,"issueRef"))}`),body}},plannedNotes:updateNotes,summarize:body=>pick(issueObject(body),ISSUE_GET_COLUMNS),raw:body=>issueObject(body)}]};var commentResource={name:"comment",summary:"Backlog \u8AB2\u984C\u306E\u30B3\u30E1\u30F3\u30C8\uFF08\u4E00\u89A7\u30FB\u6295\u7A3F\uFF09",operations:[{name:"list",summary:"Backlog \u8AB2\u984C\u306E\u30B3\u30E1\u30F3\u30C8\u3092\u4E00\u89A7\u3059\u308B",usage:"twp backlog comment list <\u8AB2\u984C\u30AD\u30FC|\u8AB2\u984CID> [--space <ID|URL>] [--count <\u4EF6\u6570>] [--order\
90
+ <\u9806\u5E8F>]",description:`\u5404\u30B3\u30E1\u30F3\u30C8\u306B\u306F changeLog\uFF08\u30B9\u30C6\u30FC\u30BF\u30B9\u30FB\u62C5\u5F53\u306E\u5909\u66F4\u5C65\u6B74\uFF09\u304C\u5FC5\u305A\u542B\u307E\u308C\u307E\u3059\u3002
91
+ \u300C\u3044\u3064\u30FB\u8AB0\u304C\u30FB\u8AB0\u306B\u632F\u3063\u305F\u304B\u300D\u306F Backlog \u3067\u306F\u3053\u3053\u306B\u3057\u304B\u7121\u3044\u306E\u3067\u3001\u8981\u7D04\u5217\u304B\u3089\u3082\u843D\u3068\u3057\u307E\u305B\u3093\u3002
92
+
93
+ \u30DA\u30FC\u30B8\u30F3\u30B0:
94
+ \u3053\u306E API \u306F\u30AA\u30D5\u30BB\u30C3\u30C8\u65B9\u5F0F\u3067\u3059\uFF08\u30AB\u30FC\u30BD\u30EB\u3092\u8FD4\u3055\u306A\u3044\u305F\u3081 --all / --cursor \u306F\u3042\u308A\u307E\u305B\u3093\uFF09\u3002
95
+ --count \u306E\u65E2\u5B9A\u306F ${DEFAULT_COUNT}\u30FB\u4E0A\u9650\u306F ${MAX_COUNT} \u3067\u3001\u7D9A\u304D\u306F --min-id / --max-id \u3067\u8FBF\u308A\u307E\u3059\u3002`,flags:[SPACE_FLAG,{name:"--issue",summary:"\u8AB2\u984C\u30AD\u30FC\uFF08\u4F4D\u7F6E\u5F15\u6570\u3068\u540C\u3058\u610F\u5473\uFF09",takesValue:true,placeholder:"<\u30AD\u30FC|ID>"},{name:"--count",summary:`\u53D6\u5F97\u4EF6\u6570\uFF08\u65E2\u5B9A ${DEFAULT_COUNT}\u30FB\u4E0A\u9650 ${MAX_COUNT}\uFF09`,takesValue:true,
96
+ placeholder:"<\u4EF6\u6570>"},{name:"--order",summary:"\u4E26\u3073\u9806\uFF08asc | desc\u30FB\u65E2\u5B9A desc\uFF09",takesValue:true,placeholder:"<\u9806\u5E8F>"},{name:"--min-id",summary:"\u3053\u306E\u30B3\u30E1\u30F3\u30C8ID \u3088\u308A\u5F8C\u306E\u30B3\u30E1\u30F3\u30C8\u3060\u3051\u3092\u8FD4\u3059",takesValue:true,placeholder:"<ID>"},{name:"--max-id",summary:"\u3053\u306E\u30B3\u30E1\u30F3\u30C8ID \u3088\u308A\u524D\u306E\u30B3\u30E1\u30F3\u30C8\u3060\u3051\u3092\u8FD4\u3059",takesValue:true,
97
+ placeholder:"<ID>"}],async prepare(input,ctx){const ref=issueRef(input,"twp backlog comment list help");return withResolved(withSpace(input,await resolveSpace(input,ctx)),{issueRef:ref})},plan(input){const ref=requireResolved(input,"issueRef");return{method:"GET",path:backlogSpacePath(requireSpace(input),`/issues/${encodeURIComponent(ref)}/comments`),query:{count:integerFlag(input.flags,"--count",{min:1,max:MAX_COUNT}),order:order(input.flags.get("--order")),minId:integerFlag(input.flags,"--min-\
98
+ id",{min:0}),maxId:integerFlag(input.flags,"--max-id",{min:0})}}},plannedNotes:spaceNotes,summarize:body=>listOf(body,"comments","\u30B3\u30E1\u30F3\u30C8\u4E00\u89A7").map(commentRow),raw:body=>listOf(body,"comments","\u30B3\u30E1\u30F3\u30C8\u4E00\u89A7"),notes(body,input){const received=listOf(body,"comments","\u30B3\u30E1\u30F3\u30C8\u4E00\u89A7").length;const count=integerFlag(input.flags,"--count",{min:1,max:MAX_COUNT})??DEFAULT_COUNT;return received<count?[]:[`${received} \u4EF6\uFF08--count \u306E\u4E0A\u9650\u3061\u3087\u3046\
99
+ \u3069\uFF09\u3092\u53D6\u5F97\u3057\u307E\u3057\u305F\u3002\u7D9A\u304D\u304C\u3042\u308B\u304B\u3082\u3057\u308C\u307E\u305B\u3093: --min-id / --max-id \u3067\u7D9A\u304D\u3092\u53D6\u5F97\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u3053\u306E API \u306F\u30AB\u30FC\u30BD\u30EB\u3092\u8FD4\u3055\u306A\u3044\u305F\u3081 --all \u306F\u3042\u308A\u307E\u305B\u3093\uFF09\u3002`]}},{name:"create",summary:"Backlog \u8AB2\u984C\u306B\u30B3\u30E1\u30F3\u30C8\u3092\u6295\u7A3F\u3059\u308B\uFF08--yes \u304C\u5FC5\u8981\uFF09",
100
+ usage:"twp backlog comment create <\u8AB2\u984C\u30AD\u30FC|\u8AB2\u984CID> --body-file <\u30D1\u30B9> [--space <ID|URL>] --yes",description:`${EXTERNAL_WRITE_HELP}
101
+
102
+ ${bodyHelp("--body-file","--body")}
103
+
104
+ ${ORDER_HELP}`,destructive:true,flags:[...BODY_FLAGS,SPACE_FLAG,{name:"--issue",summary:"\u8AB2\u984C\u30AD\u30FC\uFF08\u4F4D\u7F6E\u5F15\u6570\u3068\u540C\u3058\u610F\u5473\uFF09",takesValue:true,placeholder:"<\u30AD\u30FC|ID>"}],async prepare(input,ctx){const ref=issueRef(input,"twp backlog comment create help");const content=await readBody(input,{flag:"--body",fileFlag:"--body-file",label:"\u30B3\u30E1\u30F3\u30C8\u672C\u6587",maxChars:BODY_MAX_CHARS,usage:"twp backlog comment create help"});
105
+ if(content===void 0){throw new UsageError("\u30B3\u30E1\u30F3\u30C8\u672C\u6587\u3092 --body-file <\u30D1\u30B9> \u304B --body <\u6587\u5B57\u5217> \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044","twp backlog comment create help")}return withResolved(withSpace(input,await resolveSpace(input,ctx)),{issueRef:ref,content})},plan(input){return{method:"POST",path:backlogSpacePath(requireSpace(input),`/issues/${encodeURIComponent(requireResolved(input,"issueRef"))}/comments`),body:{content:requireResolved(
106
+ input,"content")}}},plannedNotes:spaceNotes,summarize:body=>commentRow(commentObject(body)),raw:commentObject}]};function projectMasterResource(spec){return{name:spec.name,summary:spec.summary,operations:[{name:"list",summary:spec.operationSummary,usage:`twp backlog ${spec.name} list --project <\u30AD\u30FC|ID> [--space <ID|URL>]`,description:`${spec.description}
107
+ \u3053\u306E API \u306F\u30DA\u30FC\u30B8\u30F3\u30B0\u3092\u6301\u305F\u305A\u3001\u5E38\u306B\u5168\u4EF6\u3092\u8FD4\u3057\u307E\u3059\u3002`,flags:[SPACE_FLAG,{name:"--project",summary:"Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30AD\u30FC\uFF08HC_FM_ID\uFF09\u304B\u6570\u5024ID\u3002\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u540D\u3067\u306F\u5F15\u3051\u307E\u305B\u3093",takesValue:true,placeholder:"<\u30AD\u30FC|ID>"}],async prepare(input,ctx){if(input.args.length>0){throw new UsageError(`l\
108
+ ist \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,`twp backlog ${spec.name} list help`)}const space=await resolveSpace(input,ctx);const refs=commaList(input.flags,"--project");if(refs===void 0){throw new UsageError("--project \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",`twp backlog ${spec.name} list help`)}if(refs.length>1){throw new UsageError(`--project \u306B\u8907\u6570\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093\uFF08\u53D7\u3051\u53D6\u3063\u305F\u5024: ${refs.
109
+ join(" / ")}\uFF09`,"\u3053\u306E\u4E00\u89A7\u306F1\u3064\u306E Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306B\u5C5E\u3057\u307E\u3059\u3002")}const ref=refs[0];return withResolved(withSpace(input,space),{projectRef:ref})},plan(input){const ref=requireResolved(input,"projectRef");if(!/^[A-Za-z0-9_]+$/.test(ref)){throw new UsageError(`--project \u306E\u5F62\u5F0F\u304C\u9055\u3044\u307E\u3059: ${ref}`,"Backlog \u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30AD\u30FC\uFF08HC_FM_ID\uFF09\u304B\u6570\u5024 ID \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u540D\u3067\u306F\u5F15\u3051\u307E\u305B\u3093\uFF08twp backlog project list \u3067 proj\
110
+ ectKey \u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\uFF09\u3002")}return{method:"GET",path:backlogSpacePath(requireSpace(input),`/projects/${encodeURIComponent(ref)}/${spec.envelope}`)}},plannedNotes:spaceNotes,summarize:body=>listOf(body,spec.envelope,spec.label).map(row=>pick(row,spec.columns)),raw:body=>listOf(body,spec.envelope,spec.label)}]}}function attachmentRefs(input){const usage="twp backlog attachment download help";const slots=[{flag:"--issue",label:"\u8AB2\u984C\u30AD\u30FC"},
111
+ {flag:"--attachment",label:"\u6DFB\u4ED8ID"}];const values=new Map;const open=[];for(const slot of slots){const fromFlag=input.flags.get(slot.flag);if(fromFlag===void 0){open.push(slot);continue}if(fromFlag.trim()==="")throw new UsageError(`${slot.flag} \u306B\u5024\u304C\u3042\u308A\u307E\u305B\u3093`,usage);values.set(slot.flag,fromFlag.trim())}const args=input.args.map(arg=>arg.trim()).filter(arg=>arg!=="");if(args.length>open.length){throw new UsageError(`\u4F4D\u7F6E\u5F15\u6570\u304C\u591A\u3059\u304E\u307E\u3059: ${args.
112
+ slice(open.length).join(" ")}`,open.length===0?"\u8AB2\u984C\u30AD\u30FC\u3068\u6DFB\u4ED8ID \u306F\u3069\u3061\u3089\u3082\u30D5\u30E9\u30B0\u3067\u6307\u5B9A\u6E08\u307F\u3067\u3059\u3002":`\u6B8B\u308A\u306E\u4F4D\u7F6E\u5F15\u6570\u3067\u6307\u5B9A\u3067\u304D\u308B\u306E\u306F ${open.map(slot=>slot.label).join(" \u2192 ")} \u3060\u3051\u3067\u3059\u3002`)}if(args.length<open.length){throw new UsageError(`${open[args.length]?.label}\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044`,usage)}
113
+ open.forEach((slot,index)=>values.set(slot.flag,args[index]));const issue=values.get("--issue");if(!ISSUE_REF.test(issue)){throw new UsageError(`\u8AB2\u984C\u30AD\u30FC\u306E\u5F62\u5F0F\u304C\u9055\u3044\u307E\u3059: ${issue}`,"Backlog \u306E\u8AB2\u984C\u30AD\u30FC\uFF08HC_FM_ID-19171\uFF09\u304B\u8AB2\u984CID\uFF08\u6570\u5024\uFF09\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}const attachment=values.get("--attachment");if(!isExactNumericId(attachment)){throw new UsageError(
114
+ `\u6DFB\u4ED8ID \u306E\u5F62\u5F0F\u304C\u9055\u3044\u307E\u3059: ${attachment}`,"twp backlog attachment list \u306E id\uFF08\u6570\u5024\uFF09\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u30D5\u30A1\u30A4\u30EB\u540D\u3067\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093\uFF09\u3002")}return{issue,attachment}}var attachmentResource={name:"attachment",summary:"Backlog \u8AB2\u984C\u306E\u6DFB\u4ED8\u30D5\u30A1\u30A4\u30EB\uFF08\u4E00\u89A7\u30FB\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\uFF09",
115
+ operations:[{name:"list",summary:"Backlog \u8AB2\u984C\u306E\u6DFB\u4ED8\u30D5\u30A1\u30A4\u30EB\u3092\u4E00\u89A7\u3059\u308B",usage:"twp backlog attachment list <\u8AB2\u984C\u30AD\u30FC|\u8AB2\u984CID> [--space <ID|URL>]",description:"download \u306B\u6E21\u3059 id \u3068\u3001\u843D\u3068\u3059\u524D\u306B\u5927\u304D\u3055\u3092\u5224\u65AD\u3059\u308B\u305F\u3081\u306E size \u3092\u8FD4\u3057\u307E\u3059\u3002\n\u3053\u306E API \u306F\u30DA\u30FC\u30B8\u30F3\u30B0\u3092\u6301\u3061\u307E\u305B\u3093\uFF08\u8AB2\u984C1\u4EF6\u3076\u3093\u306E\u6DFB\u4ED8\u3092\u3059\u3079\u3066\u8FD4\u3057\u307E\u3059\uFF09\u3002",
116
+ flags:[SPACE_FLAG,{name:"--issue",summary:"\u8AB2\u984C\u30AD\u30FC\uFF08\u4F4D\u7F6E\u5F15\u6570\u3068\u540C\u3058\u610F\u5473\uFF09",takesValue:true,placeholder:"<\u30AD\u30FC|ID>"}],async prepare(input,ctx){const ref=issueRef(input,"twp backlog attachment list help");return withResolved(withSpace(input,await resolveSpace(input,ctx)),{issueRef:ref})},plan(input){const ref=requireResolved(input,"issueRef");return{method:"GET",path:backlogSpacePath(requireSpace(input),`/issues/${encodeURIComponent(
117
+ ref)}/attachments`)}},plannedNotes:spaceNotes,summarize:body=>listOf(body,"attachments","\u6DFB\u4ED8\u4E00\u89A7").map(row=>pick(row,ATTACHMENT_COLUMNS)),raw:body=>listOf(body,"attachments","\u6DFB\u4ED8\u4E00\u89A7")},{name:"download",summary:"Backlog \u8AB2\u984C\u306E\u6DFB\u4ED8\u30D5\u30A1\u30A4\u30EB\u3092 --out \u3078\u66F8\u304D\u51FA\u3059",usage:"twp backlog attachment download <\u8AB2\u984C\u30AD\u30FC|\u8AB2\u984CID> <\u6DFB\u4ED8ID> --out <\u30D1\u30B9> [--force] [--space <ID|URL>]",
118
+ description:"\u6DFB\u4ED8\u306E\u5B9F\u4F53\u3092 --out \u306E\u30D1\u30B9\u3078\u305D\u306E\u307E\u307E\u66F8\u304D\u307E\u3059\uFF08\u6A19\u6E96\u51FA\u529B\u3078\u306F\u51FA\u3057\u307E\u305B\u3093\uFF09\u3002\n\u6A19\u6E96\u51FA\u529B\u306B\u51FA\u308B\u306E\u306F\u66F8\u3044\u305F\u5834\u6240\u30FB\u30D0\u30A4\u30C8\u6570\u30FBContent-Type \u3060\u3051\u3067\u3001--output json \u3067\u305D\u306E\u307E\u307E\u8AAD\u3081\u307E\u3059\u3002\n\n\u6DFB\u4ED8ID \u306F twp backlog attachment list \u306E id \u3067\u3059\uFF08\u30D5\u30A1\u30A4\u30EB\u540D\u3067\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093\uFF09\u3002\n\u65E2\u5B58\u30D5\u30A1\u30A4\u30EB\u306F\u4E0A\u66F8\u304D\u3057\u307E\u305B\u3093\uFF08--force \u3092\u4ED8\u3051\u305F\u3068\u304D\u3060\u3051\u4E0A\u66F8\u304D\u3057\u307E\u3059\uFF09\u3002\n\u66F8\u304D\u51FA\u3057\u5148\u306E\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306F\u81EA\u52D5\u3067\u4F5C\u308A\u307E\u305B\u3093\u3002\n\n\u30B5\u30A4\u30BA\u306E\u4E0A\u9650\u306F\u3042\u308A\u307E\u305B\u3093\u3002v1 \u306E\u516C\u958BAPI\uFF08api.tocca.systems\uFF09\u306B\u306F\u7D04 4.49MB \u306E\u4E0A\u9650\u304C\n\u3042\u308A\u307E\u3059\u304C\u3001\u3053\u306E CLI \u304C\u4F7F\u3046 v2 \u9762\u306F\u5225\u7D4C\u8DEF\u306A\u306E\u3067\u639B\u304B\u308A\u307E\u305B\u3093\u3002",
119
+ flags:[SPACE_FLAG,{name:"--issue",summary:"\u8AB2\u984C\u30AD\u30FC\uFF08\u7B2C1\u4F4D\u7F6E\u5F15\u6570\u3068\u540C\u3058\u610F\u5473\uFF09",takesValue:true,placeholder:"<\u30AD\u30FC|ID>"},{name:"--attachment",summary:"\u6DFB\u4ED8ID\uFF08\u7B2C2\u4F4D\u7F6E\u5F15\u6570\u3068\u540C\u3058\u610F\u5473\uFF09",takesValue:true,placeholder:"<ID>"},{name:"--out",summary:"\u66F8\u304D\u51FA\u3057\u5148\u306E\u30D5\u30A1\u30A4\u30EB\u30D1\u30B9\uFF08\u5FC5\u9808\uFF09",takesValue:true,placeholder:"<\u30D1\u30B9>"},
120
+ {name:"--force",summary:"\u65E2\u5B58\u30D5\u30A1\u30A4\u30EB\u3092\u4E0A\u66F8\u304D\u3059\u308B",takesValue:false}],download:{outFlag:"--out",forceFlag:"--force"},async prepare(input,ctx){const refs=attachmentRefs(input);return withResolved(withSpace(input,await resolveSpace(input,ctx)),{issueRef:refs.issue,attachmentId:refs.attachment})},plan(input){const ref=requireResolved(input,"issueRef");const attachmentId=requireResolved(input,"attachmentId");return{method:"GET",path:backlogSpacePath(requireSpace(
121
+ input),`/issues/${encodeURIComponent(ref)}/attachments/${encodeURIComponent(attachmentId)}`)}},plannedNotes:spaceNotes,summarize:body=>body,raw:body=>body}]};var backlogDomain={name:"backlog",summary:"Backlog \u9023\u643A\uFF08\u8AB2\u984C\u30FB\u30B3\u30E1\u30F3\u30C8\u306E\u8AAD\u307F\u53D6\u308A\u3068\u3001\u5916\u90E8\u3078\u51FA\u308B\u66F8\u304D\u8FBC\u307F\uFF09",operations:[],subresources:[spaceResource,projectResource,issueResource,commentResource,attachmentResource,projectMasterResource(
122
+ {name:"status",summary:"Backlog \u30B9\u30C6\u30FC\u30BF\u30B9",operationSummary:"Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30B9\u30C6\u30FC\u30BF\u30B9\u3092\u4E00\u89A7\u3059\u308B",envelope:"statuses",label:"\u30B9\u30C6\u30FC\u30BF\u30B9\u4E00\u89A7",columns:STATUS_COLUMNS,description:"\u3053\u3053\u306B\u51FA\u308B id \u306F backlog issue list --status \u306B\u305D\u306E\u307E\u307E\u6E21\u305B\u307E\u3059\uFF08\u540D\u524D\u3067\u3082\u6307\u5B9A\u3067\u304D\u307E\u3059\uFF09\u3002"}),
123
+ projectMasterResource({name:"user",summary:"Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30E1\u30F3\u30D0\u30FC",operationSummary:"Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30E1\u30F3\u30D0\u30FC\u3092\u4E00\u89A7\u3059\u308B",envelope:"users",label:"\u30E1\u30F3\u30D0\u30FC\u4E00\u89A7",columns:USER_COLUMNS,description:"\u3053\u3053\u306B\u51FA\u308B id \u306F backlog issue list --assignee / --created-user \u306B\u305D\u306E\u307E\u307E\u6E21\u305B\u307E\u3059\n\uFF08\u540D\u524D\u30FB\u30ED\u30B0\u30A4\u30F3ID\u30FB\u30E1\u30FC\u30EB\u3067\u3082\u6307\u5B9A\u3067\u304D\u307E\u3059\uFF09\u3002"})]};
124
+ function order(raw){if(raw===void 0)return void 0;const value=raw.trim().toLowerCase();if(value!=="asc"&&value!=="desc"){throw new UsageError(`--order \u306B\u6307\u5B9A\u3067\u304D\u308B\u306E\u306F asc / desc \u3067\u3059\uFF08\u53D7\u3051\u53D6\u3063\u305F\u5024: ${raw}\uFF09`)}return value}function requireSpace(input){return requireResolved(input,"spaceId")}export{backlogDomain};