@tocca-systems/twp-cli 0.86.0 → 0.88.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.public.md +14 -0
- package/README.md +22 -0
- package/command-model/_routes.json +5 -0
- package/command-model/index.json +3 -2
- package/command-model/project-task-group.json +10 -0
- package/command-model/project-task.json +4 -4
- package/dist/{agent-YYDLDJJP.js → agent-SFDNPV24.js} +1 -1
- package/dist/{agent-loop-KNAIM7MN.js → agent-loop-XPV5PNE5.js} +1 -1
- package/dist/ai-dispatch-FTZKQHEL.js +80 -0
- package/dist/{analysis-3QDL4SFU.js → analysis-DPQN4BFG.js} +2 -2
- package/dist/{announcement-ITZHIPDQ.js → announcement-XAIC4CNE.js} +1 -1
- package/dist/{api-command-3ETVO5IN.js → api-command-XFQUUFDV.js} +2 -2
- package/dist/{app-PM4PZSKD.js → app-M56CCOE7.js} +4 -4
- package/dist/{attendance-correct-RI5SQW6G.js → attendance-correct-CJ3FJSVI.js} +1 -1
- package/dist/{attendance-lists-3IGZIBOR.js → attendance-lists-RRGFCDZR.js} +1 -1
- package/dist/{backlog-P5KPB76Q.js → backlog-L5VRYZGM.js} +1 -1
- package/dist/{budget-ZE5AMVSC.js → budget-T5YJTALN.js} +1 -1
- package/dist/capacity-list-command-LKOVLAY4.js +24 -0
- package/dist/{capacity-report-command-BUCAQ2P4.js → capacity-report-command-CENWVTKK.js} +1 -1
- package/dist/{chunk-RSSPNFSK.js → chunk-2AVQILQQ.js} +62 -62
- package/dist/{chunk-DR6BUZXT.js → chunk-3D734ED2.js} +1 -1
- package/dist/{chunk-QGRBZ2C2.js → chunk-3OCV6SOR.js} +1 -1
- package/dist/{chunk-3HOJI3X7.js → chunk-4VBSSXGA.js} +1 -1
- package/dist/{chunk-IIK77LSC.js → chunk-6M5NUVJJ.js} +1 -1
- package/dist/{chunk-KTQ7SK5O.js → chunk-E4FUHYC6.js} +1 -1
- package/dist/{chunk-VERYHAWV.js → chunk-EOXTDZTA.js} +4 -4
- package/dist/{chunk-2UWJVVXK.js → chunk-FBVSHQST.js} +1 -1
- package/dist/{chunk-NTT2QG3J.js → chunk-FJEGS55N.js} +1 -1
- package/dist/{chunk-ALKMLXOW.js → chunk-GO4KFSBE.js} +2 -2
- package/dist/chunk-GYB2R6BV.js +11 -0
- package/dist/{chunk-Y24FMUYU.js → chunk-INS77QHY.js} +4 -4
- package/dist/{chunk-LNIHJOXC.js → chunk-KPCVSILY.js} +1 -1
- package/dist/{chunk-VYIYENEU.js → chunk-LGJPXLMC.js} +1 -1
- package/dist/{chunk-WMFI4WG6.js → chunk-M7UEPYUQ.js} +1 -1
- package/dist/{chunk-2TWV2HRB.js → chunk-MUIN7OUW.js} +1 -1
- package/dist/{chunk-U3EMXP77.js → chunk-NMYHFVDR.js} +1 -1
- package/dist/{chunk-4FCPLEZN.js → chunk-OVV2PTZF.js} +1 -1
- package/dist/{chunk-5LFUD7K3.js → chunk-Q5NZXJNI.js} +28 -30
- package/dist/chunk-QLDKF6GK.js +49 -0
- package/dist/{chunk-4RNL462J.js → chunk-QUMDKN3U.js} +1 -1
- package/dist/{chunk-CZVQS3WP.js → chunk-RMU72S3D.js} +1 -1
- package/dist/{chunk-AQ5SHPHP.js → chunk-RTYJWZRA.js} +1 -1
- package/dist/{chunk-DED3IIC5.js → chunk-TJNM7PHZ.js} +1 -1
- package/dist/chunk-UZUV5FYG.js +16 -0
- package/dist/{chunk-V3RZ4RFP.js → chunk-VRJF6JLR.js} +1 -1
- package/dist/{chunk-CADCERVL.js → chunk-WDQMYRPE.js} +1 -1
- package/dist/{chunk-MUHAXMAT.js → chunk-WWDNWWPJ.js} +1 -1
- package/dist/{chunk-HYBXFEHH.js → chunk-XJ5EKWQY.js} +1 -1
- package/dist/{chunk-FED2BHMI.js → chunk-Y7QW7MHQ.js} +1 -1
- package/dist/cli.js +23 -11
- package/dist/{commands-GQBRPBFW.js → commands-2GRO356U.js} +44 -43
- package/dist/{commands-KKEZJCLF.js → commands-V7ZBTH7I.js} +1 -1
- package/dist/{company-2CRWKBJL.js → company-TF76Z3U5.js} +2 -2
- package/dist/{completion-C6ZQCDT2.js → completion-G54M3EFF.js} +1 -1
- package/dist/{contract-E523CMAL.js → contract-CFLPFV4I.js} +1 -1
- package/dist/{department-GPVHVFFP.js → department-T22PBYMP.js} +1 -1
- package/dist/{deposit-2HTM27AQ.js → deposit-PLQ7WHOX.js} +1 -1
- package/dist/{dispatch-HHWTJ3P4.js → dispatch-GSBMRWQ4.js} +1 -1
- package/dist/{domain-knowledge-VLLAEQEG.js → domain-knowledge-YFY5H6UB.js} +1 -1
- package/dist/{estimate-ADFAC72Y.js → estimate-DYPQ27KU.js} +2 -2
- package/dist/{evaluation-VP7OFTBS.js → evaluation-NG4DIIJM.js} +1 -1
- package/dist/{expense-3LLZQ4HE.js → expense-EA77QGLW.js} +1 -1
- package/dist/{fiscal-year-ZTCSF46U.js → fiscal-year-YSFASZEW.js} +1 -1
- package/dist/{holiday-E7N4ONKQ.js → holiday-E5WEZU6J.js} +1 -1
- package/dist/{inquiry-4Q4BRYM3.js → inquiry-LEYPOQWZ.js} +1 -1
- package/dist/{invoice-ZJM5Y7GE.js → invoice-CAYBEW65.js} +2 -2
- package/dist/{job-title-NCFHCA4M.js → job-title-RSDAHHVJ.js} +1 -1
- package/dist/{knowledge-VYQKSGQH.js → knowledge-GYLFDEXS.js} +1 -1
- package/dist/{leave-IZOHEIL3.js → leave-IG7SWPPB.js} +2 -2
- package/dist/{license-XSWDXSJE.js → license-I2SL53UI.js} +1 -1
- package/dist/{logout-guard-FCCJSF5V.js → logout-guard-PEETWT4A.js} +1 -1
- package/dist/{media-REBBHHCL.js → media-TKP7ONY4.js} +2 -2
- package/dist/{notification-WP7CH734.js → notification-IEANIYPD.js} +1 -1
- package/dist/{oneshot-S6T7VJNY.js → oneshot-3N2W247J.js} +1 -1
- package/dist/{plan-submit-F5VH3T37.js → plan-submit-WP25FEYE.js} +1 -1
- package/dist/{position-H3NSDVKQ.js → position-CRVEGXPL.js} +1 -1
- package/dist/{project-QAWTPSCR.js → project-JICUCXI5.js} +1 -1
- package/dist/{prospect-QY3NYP2A.js → prospect-A2YNQ4DE.js} +1 -1
- package/dist/{purchase-H4K66GDS.js → purchase-F3HUNCJE.js} +2 -2
- package/dist/{receivable-6H4W2OKM.js → receivable-K4UKS46G.js} +1 -1
- package/dist/{redmine-644RTL42.js → redmine-MC3RIB7W.js} +1 -1
- package/dist/{registry-XHUKN55J.js → registry-FAISFFZY.js} +1 -1
- package/dist/{report-HUJS6P5H.js → report-HUP2TXTK.js} +1 -1
- package/dist/{run-D5WEOH42.js → run-UH7QKMO3.js} +1 -1
- package/dist/{sales-ai-review-TAIEEDRM.js → sales-ai-review-5BJ3HNP5.js} +1 -1
- package/dist/{sales-master-THVBWI5T.js → sales-master-DUTB2DUX.js} +2 -2
- package/dist/{sales-numbering-E276FXQD.js → sales-numbering-WTEFGPOV.js} +1 -1
- package/dist/{schedule-command-ZOE3NYAA.js → schedule-command-4TFAFIAO.js} +1 -1
- package/dist/{search-BLMSVPIL.js → search-3ZPF7X5S.js} +7 -6
- package/dist/{segment-G4IPD43F.js → segment-ZKJYMOKV.js} +1 -1
- package/dist/{server-settings-GFWQ5ERV.js → server-settings-RNJ6RVTE.js} +1 -1
- package/dist/{server-skills-FVYYZ54O.js → server-skills-5JESWOTH.js} +1 -1
- package/dist/{setup-DW2H7BDN.js → setup-2KAICJYN.js} +1 -1
- package/dist/{skill-7NQZGSML.js → skill-5NCDQFDN.js} +1 -1
- package/dist/{skill-check-JBRUAUID.js → skill-check-VNUNX6IO.js} +2 -2
- package/dist/{staffing-board-PNTCS7NC.js → staffing-board-NWZLXYXJ.js} +2 -2
- package/dist/{status-command-PEL5GWIH.js → status-command-2FL2SVFR.js} +1 -1
- package/dist/{supplier-payment-T25C3NGB.js → supplier-payment-QKWONHRH.js} +2 -2
- package/dist/{support-UNJKXLAZ.js → support-MLNODDQT.js} +1 -1
- package/dist/{task-IIZRFCUR.js → task-7RLVDTK2.js} +80 -49
- package/dist/{user-DZV5ZMTP.js → user-FA2FIC47.js} +2 -2
- package/dist/{user-contract-type-HDA5TITL.js → user-contract-type-RELV4BV7.js} +1 -1
- package/dist/{worker-agent-5EKRFAD3.js → worker-agent-IPOLSJEA.js} +1 -1
- package/dist/{workflow-ZA3TDTIT.js → workflow-VJL4FV3U.js} +1 -1
- package/package.json +1 -1
- package/dist/ai-dispatch-QKGK4P7P.js +0 -78
- package/dist/chunk-IVFSEXD3.js +0 -48
- package/dist/chunk-O52RKZCC.js +0 -16
- package/dist/chunk-S5WBKXGY.js +0 -11
package/CHANGELOG.public.md
CHANGED
|
@@ -11,6 +11,20 @@
|
|
|
11
11
|
`CHANGELOG.md` に残してあります。顧客向けの履歴は public 公開以降を対象とします。
|
|
12
12
|
-->
|
|
13
13
|
|
|
14
|
+
## 0.88.0
|
|
15
|
+
|
|
16
|
+
ループが状態ディレクトリへ実行結果のローカルファイルを書かなくなりました。実行結果の履歴はサーバ側で全機体ぶんをまとめて参照できます。
|
|
17
|
+
|
|
18
|
+
twp search --ai で Wiki ページの一部が当たったとき、当たった見出しを表示し、その節だけを開く twp wiki get --section のコマンドを案内するようにしました。
|
|
19
|
+
|
|
20
|
+
`twp task-loop capacity list` で、ループ実行機と AI アカウント枠の利用状況(5時間枠・週間枠・再ログイン期限)を画面を開かずに確認できるようになりました。
|
|
21
|
+
|
|
22
|
+
ループがAIを1つも使えずに作業を見送ったとき、どのAIがなぜ使えなかったか(再ログインが必要な枠など)を実行履歴に残すようになりました。
|
|
23
|
+
|
|
24
|
+
## 0.87.0
|
|
25
|
+
|
|
26
|
+
タスクグループ(閲覧できる人を限定するタスクのまとまり)を、twp task group list / create / update / delete で一覧・作成・更新・削除できるようにしました。twp task create / update の --group でタスクをグループに入れ、--clear group で外せます。
|
|
27
|
+
|
|
14
28
|
## 0.86.0
|
|
15
29
|
|
|
16
30
|
タスク一覧(twp task list / twp task subtasks)に、本文を省いて出す --summary オプションを追加しました。
|
package/README.md
CHANGED
|
@@ -159,16 +159,25 @@ twp task type list [--project <コード>]
|
|
|
159
159
|
twp task category list [--project <コード>]
|
|
160
160
|
twp task milestone list [--project <コード>]
|
|
161
161
|
twp task label list [--project <コード>]
|
|
162
|
+
twp task group list [--project <コード>] # タスクグループ(閲覧メンバー限定)
|
|
162
163
|
|
|
163
164
|
# ステータスを追加・変更・削除する(個人タスクの面にはありません)
|
|
164
165
|
twp task status create --name <名前> [--color <色>] [--is-completed <true|false>] [--is-default <true|false>] [--sort-order <整数>] [--response-message <案内文>] [--project <コード>]
|
|
165
166
|
twp task status update <ステータス> [--name <名前>] [--color <色>] [--is-completed <true|false>] [--is-default <true|false>] [--sort-order <整数>] [--response-message <案内文>] [--project <コード>]
|
|
166
167
|
twp task status delete <ステータス> --yes [--project <コード>]
|
|
168
|
+
|
|
169
|
+
# タスクグループ(閲覧できる人を閲覧メンバー・作成者・担当者・管理者に限るまとまり)を追加・変更・削除する
|
|
170
|
+
twp task group create --name <名前> [--member <ユーザー>]... [--sort-order <整数>] [--project <コード>]
|
|
171
|
+
twp task group update <グループ> [--name <名前>] [--member <ユーザー>]... [--clear-members] [--sort-order <整数>] [--project <コード>]
|
|
172
|
+
twp task group delete <グループ> --yes [--project <コード>]
|
|
173
|
+
twp task create --subject <件名> --group <グループ> # グループに入れて作る
|
|
174
|
+
twp task update <キー|ID> --group <グループ> # 別のグループへ移す(外すときは --clear group)
|
|
167
175
|
```
|
|
168
176
|
|
|
169
177
|
- **個人タスク(プロジェクトに属さない自分だけのタスク)は `--project __private__` で操作します**(`twp task list --project __private__`)。キーは `PRIVATE-<番号>` です。担当者(`--assignee`)は個人タスクにはありません。コメント(`twp task comment`)は質問・回答を含めて `--project __private__` で使えます(`twp task comment list PRIVATE-<番号> --project __private__`)
|
|
170
178
|
- **`--status` / `--type` / `--assignee` は名前で指定できます**(`--assignee me` は自分)。候補が絞れないときは候補を出して止まります
|
|
171
179
|
- **渡せる名前は `twp task status list` / `type list` / `category list` / `milestone list` / `label list` で確認できます**(`name` 列の値をそのまま `--status` 等へ渡せます)。`is_default` が立っているものが、`twp task create` で省略したときに使われる値です。結果は名前解決と同じキャッシュ(既定10分)から返るので続けて打っても往復は増えません(最新にするなら `--refresh`)。個人タスク(`--project __private__`)にマイルストーンはありません。ステータスを作成・更新・削除すると手元の一覧キャッシュを捨てます(サーバ側の反映に時間がかかり新しい名前が見つからないときは、少し置いて `--refresh`)。標準ステータス(`default:*`)と、タスクが使っているステータスは削除できません
|
|
180
|
+
- **タスクグループ**: `--member` は「指定したものが全体」です(足すのではなく置き換えます。全員外すのは `--clear-members`)。名前・メールはプロジェクトメンバーから引きます。更新・削除できるのはそのグループの閲覧メンバーと管理者だけで、所属するタスクがあるグループは削除できません。閲覧メンバーでも管理者でもない人の一覧では `member_ids` が空で返ります。個人タスク(`--project __private__`)にはタスクグループがありません
|
|
172
181
|
- **設定時応答メッセージ**: ステータスに `--response-message "<案内文>"`(500字まで・`""` で解除)を設定すると、`twp task create` / `update` でタスクがそのステータスに変わったとき、結果の先頭に `⚠ 設定時メッセージ(status=<値>): <案内文>` が出ます(`--output json` ではキー `notices`)。種別・カテゴリ・マイルストーン・ラベルの案内文は TWP の画面のタスク設定から設定でき、設定されていれば同じように出ます
|
|
173
182
|
- **`delete` には `--yes` が必要です。** 対話中でも確認プロンプトには落ちません(自動実行と手動実行で必要な引数を変えないため)
|
|
174
183
|
- **本文は `--body-file` / `--description-file` を主経路にしてください**(`-` で標準入力)。引数に直接書くと改行と Markdown が壊れます
|
|
@@ -2170,6 +2179,19 @@ twp task-loop runner remove --project <キー|UUID> <runner_id> [--output json]
|
|
|
2170
2179
|
- `twp task-loop status` も `stale` の登録があるときにこのコマンドを案内します
|
|
2171
2180
|
- 終了コード: `0` 表示した/外した / `1` 対象が一覧に無い・`live` のため外せない(`--yes` なしの表示時) / `2` 引数の誤り・`--yes` なし / `3` サーバが 4xx を返した(`live` の 409・権限不足の 403 等) / `4` 5xx・通信失敗 / `5` 認証失敗
|
|
2172
2181
|
|
|
2182
|
+
### 実行機と AI アカウント枠の状態を読む(`capacity list`)
|
|
2183
|
+
|
|
2184
|
+
```bash
|
|
2185
|
+
twp task-loop capacity list [--project <キー|UUID>] [--include-stopped] [--output json|table|tsv] [--query <式>]
|
|
2186
|
+
```
|
|
2187
|
+
|
|
2188
|
+
- 画面「ループ実行機状態」と同じ内容を、**プロジェクト横断**(個人タスクのキューを含む)で読みます。どのプロジェクトが返るかはサーバの閲覧権限に従います
|
|
2189
|
+
- table / tsv は「プロジェクト × 実行機 × 枠」で1行です。枠の状態(使用可・除外中・要再ログイン)、5時間枠・週間枠の利用率とリセット時刻、再ログイン期限、観測時刻(30分より古ければ `(stale)`)を出します。使用中の枠は名前の後ろに `*` が付きます。枠を報告していない機・プローブが失敗した機も1行出します
|
|
2190
|
+
- **停止中の機は既定で出しません**(画面「アカウント別」表示の「停止中も表示」と同じ)。`--include-stopped` で出すと画面「機体別」表示と同じ全件になります。隠した台数と、サーバ側で一覧から外れている台数(N日以上応答なし)は stderr に出ます
|
|
2191
|
+
- 利用率は table / tsv では整数%に丸めます(画面と同じ)。`--output json` は生値です。`--query` は json では全体、table / tsv では展開した行の配列に対して評価します
|
|
2192
|
+
- `--project` はサーバが返した中から絞るだけです(`TWP_PROJECT` は読みません)
|
|
2193
|
+
- 終了コード: `0` 表示した(0件を含む) / `2` 引数の誤り / `3` サーバが 4xx を返した / `4` 5xx・通信失敗・応答の形が違う / `5` 認証失敗
|
|
2194
|
+
|
|
2173
2195
|
### ループを回さない機から枠情報だけを送る(`capacity report`)
|
|
2174
2196
|
|
|
2175
2197
|
```bash
|
|
@@ -129,6 +129,7 @@
|
|
|
129
129
|
"DELETE /v2/projects/{projectId}/revenues/{id}": "project-revenue",
|
|
130
130
|
"DELETE /v2/projects/{projectId}/saved-filters/{filterId}": "saved-task-filter",
|
|
131
131
|
"DELETE /v2/projects/{projectId}/task-categories/{id}": "project-task-category",
|
|
132
|
+
"DELETE /v2/projects/{projectId}/task-groups/{id}": "project-task-group",
|
|
132
133
|
"DELETE /v2/projects/{projectId}/task-labels/{id}": "project-task-label",
|
|
133
134
|
"DELETE /v2/projects/{projectId}/task-milestones/{id}": "project-task-milestone",
|
|
134
135
|
"DELETE /v2/projects/{projectId}/task-rules/{id}": "project-task-rule",
|
|
@@ -823,6 +824,8 @@
|
|
|
823
824
|
"GET /v2/projects/{projectId}/saved-filters": "saved-task-filter",
|
|
824
825
|
"GET /v2/projects/{projectId}/task-categories": "project-task-category",
|
|
825
826
|
"GET /v2/projects/{projectId}/task-categories/{id}": "project-task-category",
|
|
827
|
+
"GET /v2/projects/{projectId}/task-groups": "project-task-group",
|
|
828
|
+
"GET /v2/projects/{projectId}/task-groups/{id}": "project-task-group",
|
|
826
829
|
"GET /v2/projects/{projectId}/task-labels": "project-task-label",
|
|
827
830
|
"GET /v2/projects/{projectId}/task-labels/{id}": "project-task-label",
|
|
828
831
|
"GET /v2/projects/{projectId}/task-milestones": "project-task-milestone",
|
|
@@ -1496,6 +1499,7 @@
|
|
|
1496
1499
|
"POST /v2/projects/{projectId}/revenues": "project-revenue",
|
|
1497
1500
|
"POST /v2/projects/{projectId}/saved-filters": "saved-task-filter",
|
|
1498
1501
|
"POST /v2/projects/{projectId}/task-categories": "project-task-category",
|
|
1502
|
+
"POST /v2/projects/{projectId}/task-groups": "project-task-group",
|
|
1499
1503
|
"POST /v2/projects/{projectId}/task-labels": "project-task-label",
|
|
1500
1504
|
"POST /v2/projects/{projectId}/task-milestones": "project-task-milestone",
|
|
1501
1505
|
"POST /v2/projects/{projectId}/task-rules": "project-task-rule",
|
|
@@ -1841,6 +1845,7 @@
|
|
|
1841
1845
|
"PUT /v2/projects/{projectId}/revenues/{id}": "project-revenue",
|
|
1842
1846
|
"PUT /v2/projects/{projectId}/saved-filters/{filterId}": "saved-task-filter",
|
|
1843
1847
|
"PUT /v2/projects/{projectId}/task-categories/{id}": "project-task-category",
|
|
1848
|
+
"PUT /v2/projects/{projectId}/task-groups/{id}": "project-task-group",
|
|
1844
1849
|
"PUT /v2/projects/{projectId}/task-labels/{id}": "project-task-label",
|
|
1845
1850
|
"PUT /v2/projects/{projectId}/task-milestones/{id}": "project-task-milestone",
|
|
1846
1851
|
"PUT /v2/projects/{projectId}/task-rules/{id}": "project-task-rule",
|
package/command-model/index.json
CHANGED
|
@@ -183,6 +183,7 @@
|
|
|
183
183
|
{"domain":"project-task-category","summary":"","operationCount":5},
|
|
184
184
|
{"domain":"project-task-comment","summary":"タスクのコメント","operationCount":7},
|
|
185
185
|
{"domain":"project-task-form-options","summary":"","operationCount":1},
|
|
186
|
+
{"domain":"project-task-group","summary":"","operationCount":5},
|
|
186
187
|
{"domain":"project-task-label","summary":"","operationCount":5},
|
|
187
188
|
{"domain":"project-task-link","summary":"","operationCount":4},
|
|
188
189
|
{"domain":"project-task-milestone","summary":"","operationCount":5},
|
|
@@ -302,7 +303,7 @@
|
|
|
302
303
|
{"domain":"workload-alert","summary":"","operationCount":3}
|
|
303
304
|
],
|
|
304
305
|
"totals": {
|
|
305
|
-
"domains":
|
|
306
|
-
"operations":
|
|
306
|
+
"domains": 299,
|
|
307
|
+
"operations": 1948
|
|
307
308
|
}
|
|
308
309
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"domain": "project-task-group",
|
|
3
|
+
"operations": [
|
|
4
|
+
{"name":"create","domain":"project-task-group","operationId":"projectTaskGroup.store","method":"POST","path":"/v2/projects/{projectId}/task-groups","summary":"タスクグループ作成","pathParams":[{"name":"projectId","type":"string","required":true,"source":"spec"}],"queryParams":[],"body":{"schema":{"type":"object","properties":{"name":{"type":"string","maxLength":255},"member_ids":{"type":["array","null"],"items":{"type":["string","null"]},"maxItems":500},"sort_order":{"type":["integer","null"],"minimum":0}},"required":["name"],"title":"SaveTaskGroupRequest"}},"resultPath":null,"risk":"write","aliases":[]},
|
|
5
|
+
{"name":"delete","domain":"project-task-group","operationId":"projectTaskGroup.destroy","method":"DELETE","path":"/v2/projects/{projectId}/task-groups/{id}","summary":"タスクグループ削除","pathParams":[{"name":"projectId","type":"string","required":true,"source":"spec"},{"name":"id","type":"string","required":true,"source":"spec"}],"queryParams":[],"body":null,"resultPath":null,"risk":"destructive","aliases":[]},
|
|
6
|
+
{"name":"get","domain":"project-task-group","operationId":"projectTaskGroup.show","method":"GET","path":"/v2/projects/{projectId}/task-groups/{id}","summary":"タスクグループ詳細取得","pathParams":[{"name":"projectId","type":"string","required":true,"source":"spec"},{"name":"id","type":"string","required":true,"source":"spec"}],"queryParams":[{"name":"limit","type":"integer","required":false,"description":"1ページあたりの件数","source":"curation"},{"name":"cursor","type":"string","required":false,"description":"次ページの取得に使うカーソル","source":"curation"}],"body":null,"resultPath":null,"risk":"read","aliases":[]},
|
|
7
|
+
{"name":"list","domain":"project-task-group","operationId":"projectTaskGroup.index","method":"GET","path":"/v2/projects/{projectId}/task-groups","summary":"タスクグループ一覧取得","pathParams":[{"name":"projectId","type":"string","required":true,"source":"spec"}],"queryParams":[{"name":"limit","type":"integer","required":false,"description":"1ページあたりの件数","source":"curation"},{"name":"cursor","type":"string","required":false,"description":"次ページの取得に使うカーソル","source":"curation"}],"body":null,"resultPath":null,"risk":"read","aliases":[]},
|
|
8
|
+
{"name":"update","domain":"project-task-group","operationId":"projectTaskGroup.update","method":"PUT","path":"/v2/projects/{projectId}/task-groups/{id}","summary":"タスクグループ更新","pathParams":[{"name":"projectId","type":"string","required":true,"source":"spec"},{"name":"id","type":"string","required":true,"source":"spec"}],"queryParams":[],"body":{"schema":{"type":"object","properties":{"name":{"type":"string","maxLength":255},"member_ids":{"type":["array","null"],"items":{"type":["string","null"]},"maxItems":500},"sort_order":{"type":["integer","null"],"minimum":0}},"required":["name"],"title":"SaveTaskGroupRequest"}},"resultPath":null,"risk":"write","aliases":[]}
|
|
9
|
+
]
|
|
10
|
+
}
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
{"name":"activities","domain":"project-task","operationId":"projectTask.activities","method":"GET","path":"/v2/projects/{projectId}/tasks/{taskId}/activities","summary":"タスクのアクティビティログ一覧取得","pathParams":[{"name":"projectId","type":"string","required":true,"source":"spec"},{"name":"taskId","type":"string","required":true,"source":"spec"}],"queryParams":[{"name":"limit","type":"integer","required":false,"description":"1ページあたりの件数","source":"curation"},{"name":"cursor","type":"string","required":false,"description":"次ページの取得に使うカーソル","source":"curation"}],"body":null,"resultPath":"items","risk":"read","aliases":[]},
|
|
5
5
|
{"name":"bulk-create","domain":"project-task","operationId":"projectTask.bulkCreate","method":"POST","path":"/v2/projects/{projectId}/tasks/bulk-create","summary":"タスク一括作成(AI生成タスク用)","pathParams":[{"name":"projectId","type":"string","required":true,"source":"spec"}],"queryParams":[],"body":{"schema":{"type":"object","properties":{"tasks":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":50}},"required":["tasks"]}},"resultPath":null,"risk":"write","aliases":[]},
|
|
6
6
|
{"name":"bulk-destroy","domain":"project-task","operationId":"projectTask.bulkDestroy","method":"DELETE","path":"/v2/projects/{projectId}/tasks/bulk","summary":"タスク一括削除","pathParams":[{"name":"projectId","type":"string","required":true,"source":"spec"}],"queryParams":[{"name":"task_ids[]","type":"array","required":false,"source":"spec"}],"body":null,"resultPath":null,"risk":"destructive","aliases":[]},
|
|
7
|
-
{"name":"bulk-update","domain":"project-task","operationId":"projectTask.bulkUpdate","method":"PUT","path":"/v2/projects/{projectId}/tasks/bulk","summary":"タスク一括更新","pathParams":[{"name":"projectId","type":"string","required":true,"source":"spec"}],"queryParams":[],"body":{"schema":{"type":"object","properties":{"task_ids":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":100},"status_id":{"type":["string","null"]},"type_id":{"type":["string","null"]},"assignee_id":{"type":["string","null"]},"priority":{"type":["integer","null"],"enum":["1","2","3",null]},"due_date":{"type":["string","null"],"format":"date"},"clear_assignee":{"type":["boolean","null"]},"clear_due_date":{"type":["boolean","null"]}},"required":["task_ids"]}},"resultPath":null,"risk":"write","aliases":[]},
|
|
8
|
-
{"name":"create","domain":"project-task","operationId":"projectTask.store","method":"POST","path":"/v2/projects/{projectId}/tasks","summary":"タスク作成","pathParams":[{"name":"projectId","type":"string","required":true,"source":"spec"}],"queryParams":[],"body":{"schema":{"type":"object","properties":{"subject":{"type":"string","maxLength":500},"description_html":{"type":["string","null"],"maxLength":100000},"status_id":{"type":"string"},"type_id":{"type":"string"},"category_id":{"type":["string","null"]},"version_id":{"type":["string","null"]},"milestone_id":{"type":["string","null"]},"assignee_id":{"type":["string","null"]},"start_date":{"type":["string","null"],"format":"date"},"due_date":{"type":["string","null"],"format":"date"},"priority":{"type":["integer","null"],"enum":["1","2","3",null]},"attachment_ids":{"type":["array","null"],"items":{"type":"string"}},"label_ids":{"type":["array","null"],"items":{"type":"string"}},"estimated_hours":{"type":["number","null"],"minimum":0,"maximum":9999},"actual_hours":{"type":["number","null"],"minimum":0,"maximum":9999},"recurrence_type":{"type":["string","null"],"enum":["daily","weekly","monthly","quarterly","half_yearly","yearly",null]},"recurrence_interval":{"type":["integer","null"],"minimum":1,"maximum":365},"recurrence_end_date":{"type":["string","null"],"format":"date"},"recurrence_weekday":{"type":["integer","null"],"minimum":0,"maximum":6},"recurrence_week_of_month":{"type":["integer","null"],"minimum":1,"maximum":5},"recurrence_day_of_month":{"type":["integer","null"],"minimum":1,"maximum":31},"recurrence_day_mode":{"type":["string","null"],"enum":["last_day","first_business_day","last_business_day",null]},"recurrence_holiday_adjust":{"type":["boolean","null"]},"recurrence_auto_generate":{"type":["boolean","null"]},"recurrence_generate_before_days":{"type":["integer","null"],"minimum":0,"maximum":365},"custom_fields":{"type":["array","null"],"items":{"type":"string"}},"parent_id":{"type":["string","null"]},"parent_task_id":{"type":["string","null"]}},"required":["subject","status_id","type_id"]}},"resultPath":null,"risk":"write","aliases":[]},
|
|
7
|
+
{"name":"bulk-update","domain":"project-task","operationId":"projectTask.bulkUpdate","method":"PUT","path":"/v2/projects/{projectId}/tasks/bulk","summary":"タスク一括更新","pathParams":[{"name":"projectId","type":"string","required":true,"source":"spec"}],"queryParams":[],"body":{"schema":{"type":"object","properties":{"task_ids":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":100},"status_id":{"type":["string","null"]},"type_id":{"type":["string","null"]},"assignee_id":{"type":["string","null"]},"priority":{"type":["integer","null"],"enum":["1","2","3",null]},"due_date":{"type":["string","null"],"format":"date"},"clear_assignee":{"type":["boolean","null"]},"clear_due_date":{"type":["boolean","null"]},"task_group_id":{"type":["string","null"]},"clear_task_group":{"type":["boolean","null"]}},"required":["task_ids"]}},"resultPath":null,"risk":"write","aliases":[]},
|
|
8
|
+
{"name":"create","domain":"project-task","operationId":"projectTask.store","method":"POST","path":"/v2/projects/{projectId}/tasks","summary":"タスク作成","pathParams":[{"name":"projectId","type":"string","required":true,"source":"spec"}],"queryParams":[],"body":{"schema":{"type":"object","properties":{"subject":{"type":"string","maxLength":500},"description_html":{"type":["string","null"],"maxLength":100000},"status_id":{"type":"string"},"type_id":{"type":"string"},"category_id":{"type":["string","null"]},"version_id":{"type":["string","null"]},"milestone_id":{"type":["string","null"]},"assignee_id":{"type":["string","null"]},"start_date":{"type":["string","null"],"format":"date"},"due_date":{"type":["string","null"],"format":"date"},"priority":{"type":["integer","null"],"enum":["1","2","3",null]},"attachment_ids":{"type":["array","null"],"items":{"type":"string"}},"label_ids":{"type":["array","null"],"items":{"type":"string"}},"estimated_hours":{"type":["number","null"],"minimum":0,"maximum":9999},"actual_hours":{"type":["number","null"],"minimum":0,"maximum":9999},"recurrence_type":{"type":["string","null"],"enum":["daily","weekly","monthly","quarterly","half_yearly","yearly",null]},"recurrence_interval":{"type":["integer","null"],"minimum":1,"maximum":365},"recurrence_end_date":{"type":["string","null"],"format":"date"},"recurrence_weekday":{"type":["integer","null"],"minimum":0,"maximum":6},"recurrence_week_of_month":{"type":["integer","null"],"minimum":1,"maximum":5},"recurrence_day_of_month":{"type":["integer","null"],"minimum":1,"maximum":31},"recurrence_day_mode":{"type":["string","null"],"enum":["last_day","first_business_day","last_business_day",null]},"recurrence_holiday_adjust":{"type":["boolean","null"]},"recurrence_auto_generate":{"type":["boolean","null"]},"recurrence_generate_before_days":{"type":["integer","null"],"minimum":0,"maximum":365},"custom_fields":{"type":["array","null"],"items":{"type":"string"}},"parent_id":{"type":["string","null"]},"parent_task_id":{"type":["string","null"]},"task_group_id":{"type":["string","null"]}},"required":["subject","status_id","type_id"]}},"resultPath":null,"risk":"write","aliases":[]},
|
|
9
9
|
{"name":"delete","domain":"project-task","operationId":"projectTask.destroy","method":"DELETE","path":"/v2/projects/{projectId}/tasks/{id}","summary":"タスク削除","pathParams":[{"name":"projectId","type":"string","required":true,"source":"spec"},{"name":"id","type":"string","required":true,"source":"spec"}],"queryParams":[],"body":null,"resultPath":null,"risk":"destructive","aliases":[]},
|
|
10
10
|
{"name":"duplicate","domain":"project-task","operationId":"projectTask.duplicate","method":"POST","path":"/v2/projects/{projectId}/tasks/{id}/duplicate","summary":"タスク複製","pathParams":[{"name":"projectId","type":"string","required":true,"source":"spec"},{"name":"id","type":"string","required":true,"source":"spec"}],"queryParams":[],"body":{"schema":{"type":"object","properties":{"include_description":{"type":["boolean","null"]},"include_subtasks":{"type":["boolean","null"]},"include_attachments":{"type":["boolean","null"]}}}},"resultPath":null,"risk":"write","aliases":[]},
|
|
11
11
|
{"name":"export","domain":"project-task","operationId":"projectTask.export","method":"GET","path":"/v2/projects/{projectId}/tasks/export","summary":"タスク一覧エクスポート(CSV/Excel)","pathParams":[{"name":"projectId","type":"string","required":true,"source":"spec"}],"queryParams":[{"name":"format","type":"string","required":false,"description":"出力形式(csv / xlsx)","source":"spec"},{"name":"keyword","type":"string","required":false,"description":"キーワードで絞り込む","source":"spec"},{"name":"recurrence_type","type":"string","required":false,"description":"繰り返し周期で絞り込む(一覧と同じ値)","source":"spec"},{"name":"limit","type":"integer","required":false,"description":"1ページあたりの件数","source":"curation"},{"name":"cursor","type":"string","required":false,"description":"次ページの取得に使うカーソル","source":"curation"},{"name":"status_id","type":"string","required":false,"description":"ステータスIDで絞り込む","source":"curation"},{"name":"type_id","type":"string","required":false,"description":"種別IDで絞り込む","source":"curation"},{"name":"category_id","type":"string","required":false,"description":"カテゴリIDで絞り込む","source":"curation"},{"name":"version_id","type":"string","required":false,"description":"バージョンIDで絞り込む","source":"curation"},{"name":"milestone_id","type":"string","required":false,"description":"マイルストーンIDで絞り込む","source":"curation"},{"name":"label_ids","type":"string","required":false,"description":"ラベルIDで絞り込む(カンマ区切り)","source":"curation"},{"name":"assignee_id","type":"string","required":false,"description":"担当者のユーザーIDで絞り込む","source":"curation"},{"name":"created_by","type":"string","required":false,"description":"起票者のユーザーIDで絞り込む","source":"curation"}],"body":null,"resultPath":null,"risk":"read","aliases":[]},
|
|
@@ -20,8 +20,8 @@
|
|
|
20
20
|
{"name":"resolve-by-id","domain":"project-task","operationId":"projectTask.resolveById","method":"GET","path":"/v2/tasks/resolve-by-id/{taskId}","summary":"テナント内でタスクIDからタスクを解決","pathParams":[{"name":"taskId","type":"string","required":true,"source":"spec"}],"queryParams":[{"name":"limit","type":"integer","required":false,"description":"1ページあたりの件数","source":"curation"},{"name":"cursor","type":"string","required":false,"description":"次ページの取得に使うカーソル","source":"curation"}],"body":null,"resultPath":null,"risk":"read","aliases":[]},
|
|
21
21
|
{"name":"resolve-by-key","domain":"project-task","operationId":"projectTask.resolveByKey","method":"GET","path":"/v2/tasks/resolve-by-key/{key}","summary":"テナント内でタスクキーからタスクを解決","pathParams":[{"name":"key","type":"string","required":true,"source":"spec"}],"queryParams":[{"name":"limit","type":"integer","required":false,"description":"1ページあたりの件数","source":"curation"},{"name":"cursor","type":"string","required":false,"description":"次ページの取得に使うカーソル","source":"curation"}],"body":null,"resultPath":null,"risk":"read","aliases":[]},
|
|
22
22
|
{"name":"show-by-key","domain":"project-task","operationId":"projectTask.showByKey","method":"GET","path":"/v2/projects/{projectId}/tasks/by-key/{key}","summary":"タスクキーで詳細取得","pathParams":[{"name":"projectId","type":"string","required":true,"source":"spec"},{"name":"key","type":"string","required":true,"source":"spec"}],"queryParams":[{"name":"limit","type":"integer","required":false,"description":"1ページあたりの件数","source":"curation"},{"name":"cursor","type":"string","required":false,"description":"次ページの取得に使うカーソル","source":"curation"}],"body":null,"resultPath":null,"risk":"read","aliases":[]},
|
|
23
|
-
{"name":"store-subtask","domain":"project-task","operationId":"projectTask.storeSubtask","method":"POST","path":"/v2/projects/{projectId}/tasks/{taskId}/subtasks","summary":"サブタスク作成","pathParams":[{"name":"projectId","type":"string","required":true,"source":"spec"},{"name":"taskId","type":"string","required":true,"source":"spec"}],"queryParams":[],"body":{"schema":{"type":"object","properties":{"subject":{"type":"string","maxLength":500},"description_html":{"type":["string","null"],"maxLength":100000},"status_id":{"type":"string"},"type_id":{"type":"string"},"category_id":{"type":["string","null"]},"version_id":{"type":["string","null"]},"milestone_id":{"type":["string","null"]},"assignee_id":{"type":["string","null"]},"start_date":{"type":["string","null"],"format":"date"},"due_date":{"type":["string","null"],"format":"date"},"priority":{"type":["integer","null"],"enum":["1","2","3",null]},"attachment_ids":{"type":["array","null"],"items":{"type":"string"}},"label_ids":{"type":["array","null"],"items":{"type":"string"}},"estimated_hours":{"type":["number","null"],"minimum":0,"maximum":9999},"actual_hours":{"type":["number","null"],"minimum":0,"maximum":9999},"custom_fields":{"type":["array","null"],"items":{"type":"string"}}},"required":["subject","status_id","type_id"]}},"resultPath":null,"risk":"write","aliases":[]},
|
|
23
|
+
{"name":"store-subtask","domain":"project-task","operationId":"projectTask.storeSubtask","method":"POST","path":"/v2/projects/{projectId}/tasks/{taskId}/subtasks","summary":"サブタスク作成","pathParams":[{"name":"projectId","type":"string","required":true,"source":"spec"},{"name":"taskId","type":"string","required":true,"source":"spec"}],"queryParams":[],"body":{"schema":{"type":"object","properties":{"subject":{"type":"string","maxLength":500},"description_html":{"type":["string","null"],"maxLength":100000},"status_id":{"type":"string"},"type_id":{"type":"string"},"category_id":{"type":["string","null"]},"version_id":{"type":["string","null"]},"milestone_id":{"type":["string","null"]},"assignee_id":{"type":["string","null"]},"start_date":{"type":["string","null"],"format":"date"},"due_date":{"type":["string","null"],"format":"date"},"priority":{"type":["integer","null"],"enum":["1","2","3",null]},"attachment_ids":{"type":["array","null"],"items":{"type":"string"}},"label_ids":{"type":["array","null"],"items":{"type":"string"}},"estimated_hours":{"type":["number","null"],"minimum":0,"maximum":9999},"actual_hours":{"type":["number","null"],"minimum":0,"maximum":9999},"custom_fields":{"type":["array","null"],"items":{"type":"string"}},"task_group_id":{"type":["string","null"]}},"required":["subject","status_id","type_id"]}},"resultPath":null,"risk":"write","aliases":[]},
|
|
24
24
|
{"name":"subtasks","domain":"project-task","operationId":"projectTask.subtasks","method":"GET","path":"/v2/projects/{projectId}/tasks/{taskId}/subtasks","summary":"サブタスク一覧取得","pathParams":[{"name":"projectId","type":"string","required":true,"source":"spec"},{"name":"taskId","type":"string","required":true,"source":"spec"}],"queryParams":[{"name":"limit","type":"integer","required":false,"description":"1ページあたりの件数","source":"curation"},{"name":"cursor","type":"string","required":false,"description":"次ページの取得に使うカーソル","source":"curation"}],"body":null,"resultPath":"items","risk":"read","aliases":[]},
|
|
25
|
-
{"name":"update","domain":"project-task","operationId":"projectTask.update","method":"PUT","path":"/v2/projects/{projectId}/tasks/{id}","summary":"タスク更新","pathParams":[{"name":"projectId","type":"string","required":true,"source":"spec"},{"name":"id","type":"string","required":true,"source":"spec"}],"queryParams":[],"body":{"schema":{"type":"object","properties":{"subject":{"type":"string","maxLength":500},"description_html":{"type":["string","null"],"maxLength":100000},"status_id":{"type":"string"},"type_id":{"type":"string"},"category_id":{"type":["string","null"]},"version_id":{"type":["string","null"]},"milestone_id":{"type":["string","null"]},"assignee_id":{"type":["string","null"]},"start_date":{"type":["string","null"],"format":"date"},"due_date":{"type":["string","null"],"format":"date"},"priority":{"type":["integer","null"],"enum":["1","2","3",null]},"attachment_ids":{"type":["array","null"],"items":{"type":"string"}},"label_ids":{"type":["array","null"],"items":{"type":"string"}},"estimated_hours":{"type":["number","null"],"minimum":0,"maximum":9999},"actual_hours":{"type":["number","null"],"minimum":0,"maximum":9999},"skip_activity_log":{"type":["boolean","null"]},"recurrence_type":{"type":["string","null"],"enum":["daily","weekly","monthly","quarterly","half_yearly","yearly",null]},"recurrence_interval":{"type":["integer","null"],"minimum":1,"maximum":365},"recurrence_end_date":{"type":["string","null"],"format":"date"},"recurrence_weekday":{"type":["integer","null"],"minimum":0,"maximum":6},"recurrence_week_of_month":{"type":["integer","null"],"minimum":1,"maximum":5},"recurrence_day_of_month":{"type":["integer","null"],"minimum":1,"maximum":31},"recurrence_day_mode":{"type":["string","null"],"enum":["last_day","first_business_day","last_business_day",null]},"recurrence_holiday_adjust":{"type":["boolean","null"]},"recurrence_auto_generate":{"type":["boolean","null"]},"recurrence_generate_before_days":{"type":["integer","null"],"minimum":0,"maximum":365},"custom_fields":{"type":["array","null"],"items":{"type":"string"}},"parent_task_id":{"type":["string","null"]}}}},"resultPath":null,"risk":"write","aliases":[]}
|
|
25
|
+
{"name":"update","domain":"project-task","operationId":"projectTask.update","method":"PUT","path":"/v2/projects/{projectId}/tasks/{id}","summary":"タスク更新","pathParams":[{"name":"projectId","type":"string","required":true,"source":"spec"},{"name":"id","type":"string","required":true,"source":"spec"}],"queryParams":[],"body":{"schema":{"type":"object","properties":{"subject":{"type":"string","maxLength":500},"description_html":{"type":["string","null"],"maxLength":100000},"status_id":{"type":"string"},"type_id":{"type":"string"},"category_id":{"type":["string","null"]},"version_id":{"type":["string","null"]},"milestone_id":{"type":["string","null"]},"assignee_id":{"type":["string","null"]},"start_date":{"type":["string","null"],"format":"date"},"due_date":{"type":["string","null"],"format":"date"},"priority":{"type":["integer","null"],"enum":["1","2","3",null]},"attachment_ids":{"type":["array","null"],"items":{"type":"string"}},"label_ids":{"type":["array","null"],"items":{"type":"string"}},"estimated_hours":{"type":["number","null"],"minimum":0,"maximum":9999},"actual_hours":{"type":["number","null"],"minimum":0,"maximum":9999},"skip_activity_log":{"type":["boolean","null"]},"recurrence_type":{"type":["string","null"],"enum":["daily","weekly","monthly","quarterly","half_yearly","yearly",null]},"recurrence_interval":{"type":["integer","null"],"minimum":1,"maximum":365},"recurrence_end_date":{"type":["string","null"],"format":"date"},"recurrence_weekday":{"type":["integer","null"],"minimum":0,"maximum":6},"recurrence_week_of_month":{"type":["integer","null"],"minimum":1,"maximum":5},"recurrence_day_of_month":{"type":["integer","null"],"minimum":1,"maximum":31},"recurrence_day_mode":{"type":["string","null"],"enum":["last_day","first_business_day","last_business_day",null]},"recurrence_holiday_adjust":{"type":["boolean","null"]},"recurrence_auto_generate":{"type":["boolean","null"]},"recurrence_generate_before_days":{"type":["integer","null"],"minimum":0,"maximum":365},"custom_fields":{"type":["array","null"],"items":{"type":"string"}},"parent_task_id":{"type":["string","null"]},"task_group_id":{"type":["string","null"]}}}},"resultPath":null,"risk":"write","aliases":[]}
|
|
26
26
|
]
|
|
27
27
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{SCHEDULE_HELP,parseSchedule}from"./chunk-
|
|
3
|
+
import{SCHEDULE_HELP,parseSchedule}from"./chunk-WWDNWWPJ.js";import"./chunk-WVCEKC7V.js";import"./chunk-RX5HWI4L.js";import{charCount,readBody}from"./chunk-IWYJSQ5I.js";import"./chunk-W4NLJ2YK.js";import{AGENT_REPOSITORIES_PATH,AGENT_SCHEDULES_PATH,AGENT_SESSIONS_PATH}from"./chunk-2AVQILQQ.js";import{isSafePathSegment}from"./chunk-HVZUXLQ4.js";import{ApiError}from"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import"./chunk-IXT2X5BZ.js";
|
|
4
4
|
import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-MI6HVYR2.js";import"./chunk-II5RVJQN.js";import{requireResolved,withResolved}from"./chunk-PS5QFKHB.js";import{isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiRejectedError,ApiResponseError,NetworkError,UsageError,WaitTimeoutError}from"./chunk-VFPY2A23.js";import{NotLoggedInError,SessionExpiredError}from"./chunk-XNLIEUAW.js";import"./chunk-J7QYPKVK.js";import"./chunk-EDF4U5BT.js";
|
|
5
5
|
import"./chunk-RZVI6PMW.js";import"./chunk-QQRJLH6B.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var LABEL="\u5B9A\u671F\u5B9F\u884C";var LIST_COLUMNS=["schedule_id","name","enabled","schedule","repository_full_name","next_run_at","last_run_at","disabled_reason","owner_user_id"];var GET_COLUMNS=["schedule_id","name","enabled","schedule","repository_full_name","base_branch","ai_provider","ai_model","next_run_at","last_run_at","last_session_id","consecutive_failures","disabled_reason","owner_user_id","can_edit","can_disable","created_at","updated_at"];var RUN_COLUMNS=["run_id","created_at","t\
|
|
6
6
|
rigger","result","skip_reason","session_id","pr_url","error_message"];var NAME_MAX_CHARS=100;var INSTRUCTION_MAX_CHARS=1e4;var RUNS_MAX_LIMIT=100;var FORBIDDEN="AI\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u6A5F\u80FD\u306E\u30E9\u30A4\u30BB\u30F3\u30B9\uFF08agent\uFF09\u304C\u3042\u306A\u305F\u306E\u30A2\u30AB\u30A6\u30F3\u30C8\u306B\u5272\u308A\u5F53\u3066\u3089\u308C\u3066\u3044\u306A\u3044\u304B\u3001\u4ED6\u30E6\u30FC\u30B6\u30FC\u306E\u5B9A\u671F\u5B9F\u884C\u3092\u5909\u66F4\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u307E\u3059\u3002\u7DE8\u96C6\u30FB\u524A\u9664\u30FB\u6709\u52B9\u5316\u30FB\u4ECA\u3059\u3050\u5B9F\u884C\u306F\u30AA\u30FC\u30CA\u30FC\u672C\u4EBA\u3060\u3051\u3001\u7121\u52B9\u5316\u306F\u30AA\u30FC\u30CA\u30FC\u3068\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u7BA1\u7406\u8005\u304C\u3067\u304D\u307E\u3059\u3002";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{stepToItem}from"./chunk-
|
|
3
|
+
import{stepToItem}from"./chunk-3D734ED2.js";import"./chunk-NXPLTDN4.js";import{loadLocalConfig}from"./chunk-INS77QHY.js";import{parseOperations}from"./chunk-CVX2YWHC.js";import"./chunk-VYDPW2YO.js";import"./chunk-TTST7UDR.js";import{loadAiConfig}from"./chunk-FABDZBDZ.js";import{SKILL_PREFIX_RE,setSkillPrefix}from"./chunk-6CS5L24D.js";import"./chunk-N2UVRM3Z.js";import"./chunk-UZUV5FYG.js";import{PRIVATE_PROJECT_PREFIX,PRIVATE_PROJECT_REF,
|
|
4
4
|
isPrivateProjectRef}from"./chunk-RMFLTSOV.js";import"./chunk-IXT2X5BZ.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-MI6HVYR2.js";import"./chunk-II5RVJQN.js";import{requireResolved,singleRef,withResolved}from"./chunk-PS5QFKHB.js";import{acknowledgement,isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import"./chunk-PMOUHEJQ.js";import"./chunk-J7QYPKVK.js";
|
|
5
5
|
import"./chunk-5WGOHFAS.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var LABEL="\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u30EB\u30FC\u30D7\u306E\u30A2\u30A4\u30C6\u30E0";var STATUSES=["pending","processing","completed","failed"];var AI_TYPES=["claude","gemini","codex","copilot"];var EFFORTS=["low","medium","high","xhigh","max"];var PRIORITIES=["P0","P1","P2","P3"];var LIST_COLUMNS=["item_id","status","task_key","label","ai_type","ai_effort","runner_id","created_at"];var GET_COLUMNS=["item_id","status","task_key","label","prompt","ai_type","ai_model","ai_effort","runn\
|
|
6
6
|
er_id","attempt_count","reclaim_count","error_message","created_by_name","created_at","started_at","completed_at"];var HISTORY_COLUMNS=["item_id","status","task_key","skill","ai_type","runner_id","duration_ms","cost_usd","created_at"];var PLAN_RESULTS=["enqueued","empty","json_not_found","ai_failed","error","skipped","gated","locked","abandoned"];var PLAN_HISTORY_COLUMNS=["plan_run_id","result","runner_id","ai_type","duration_ms","cost_usd","step_count","started_at"];var PROJECT_FLAG={name:"--pr\
|
|
@@ -0,0 +1,80 @@
|
|
|
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-MBPJV745.js";import{expandServerSkills,prepareSkillOverlay}from"./chunk-3OCV6SOR.js";import{detectAiClis}from"./chunk-5SONMN6K.js";import"./chunk-MYBIPHZ7.js";import"./chunk-A4LFG7MW.js";import"./chunk-VRBI2NPI.js";import{ClaudeStreamRenderer}from"./chunk-NXPLTDN4.js";import{DEFAULT_CLAUDE_LAUNCHER,activeSlotPath,
|
|
4
|
+
detectClaudeAutoSwitch,isClaudeAi,isUsableModelId,modelFitsRoute,resolveSpawnTarget,usesBedrock,wrapWithAutoSwitch}from"./chunk-FABDZBDZ.js";import"./chunk-6CS5L24D.js";import{isForceOnly,killProcessTree,system32}from"./chunk-N2UVRM3Z.js";import"./chunk-UZUV5FYG.js";import"./chunk-RMFLTSOV.js";import"./chunk-IXT2X5BZ.js";import"./chunk-VFPY2A23.js";import{findExecutable,isWindowsDriveAbsolute}from"./chunk-PMOUHEJQ.js";import"./chunk-J7QYPKVK.js";
|
|
5
|
+
import"./chunk-5WGOHFAS.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";import{spawnSync}from"child_process";import fs2 from"fs";import path2 from"path";import{spawn}from"child_process";import fs from"fs";import path from"path";var DEFAULT_AI_TIMING={abortGraceMs:5e3,abortReapMs:2e3,pollIntervalMs:5e3};function resolveTiming(over){return{abortGraceMs:over?.abortGraceMs??DEFAULT_AI_TIMING.abortGraceMs,abortReapMs:over?.abortReapMs??DEFAULT_AI_TIMING.abortReapMs,pollIntervalMs:over?.pollIntervalMs??DEFAULT_AI_TIMING.pollIntervalMs}}var MAX_RETAINED_BYTES=4*1024*1024;function closeStream(stream){return new Promise(resolve=>{if(stream===null)return resolve();stream.once("error",()=>resolve());stream.end(()=>resolve())})}function buildArgs(req,cfg,env,workspace){
|
|
6
|
+
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(
|
|
7
|
+
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`)}
|
|
8
|
+
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]:[]],env:{GEMINI_CLI_TRUST_WORKSPACE:"true"},model,effort,maxTurns,warnings};case"codex":return{file:"codex",args:["exec","-s","danger-full-access",...model?["--model",model]:[]],env:{},model,effort,maxTurns,warnings};case"copilot":{const mcp=path.join(workspace,".copilot","mcp-config.json");const args=[
|
|
9
|
+
"--allow-all"];if(fs.existsSync(mcp))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,env:{},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,
|
|
10
|
+
req.skill,env,req.effort);if(e.warning!==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,env:{},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,
|
|
11
|
+
metrics}}async function runOnceCore(req,deps,onMetrics){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.
|
|
12
|
+
effort&&(req.effort??"").trim()===built.effort){deps.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?
|
|
13
|
+
new ClaudeStreamRenderer(deps.now):null;const lines=[];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}
|
|
14
|
+
`);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,
|
|
15
|
+
{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:{...env,...built.env},detached:process.platform!=="win32",stdio:["pipe","p\
|
|
16
|
+
ipe","pipe"]})}catch(e){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\
|
|
17
|
+
\u307E\u305B\u3093\uFF09`:"";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;
|
|
18
|
+
const signalTree=signal=>killProcessTree(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=
|
|
19
|
+
"aborted";if(isForceOnly(deps.platform)){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\
|
|
20
|
+
\u3093\u3067\u3057\u305F\u3002\u6B8B\u3063\u3066\u3044\u306A\u3044\u304B taskkill /FI \u3067\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044`: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`);
|
|
21
|
+
return}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`:
|
|
22
|
+
` ${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(
|
|
23
|
+
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`);
|
|
24
|
+
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}\
|
|
25
|
+
\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.
|
|
26
|
+
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(
|
|
27
|
+
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")}
|
|
28
|
+
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}
|
|
29
|
+
${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?.
|
|
30
|
+
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`);
|
|
31
|
+
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.
|
|
32
|
+
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??
|
|
33
|
+
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>
|
|
34
|
+
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 =====";
|
|
35
|
+
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 =====";function wrapCharter(prefix,body,suffix){const parts=[];if(prefix!=="")parts.push(prefix);parts.push(body);if(suffix!=="")parts.push(suffix);return parts.join("\n\n")}var UNKNOWN_SLOT="(unresolved)";var FAST_FAIL_SEC=60;var FAST_FAIL_STREAK=3;var HEALTH_PROBE_AIS=["codex","gemini","copilot"];var HEALTH_PROBE_TTL_MS=1800*
|
|
36
|
+
1e3;var HEALTH_PROBE_TIMEOUT_SEC=60;var HEALTH_PROBE_PROMPT="Health check. Do not read or modify any files and do not run any commands. Reply with exactly: OK";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;healthyAt=new Map;unusableWhy=new Map;launcherBin(){const v=this.
|
|
37
|
+
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 baseEnv=this.opts.env??process.env;const env=req.extraEnv===void 0?baseEnv:{...baseEnv,
|
|
38
|
+
...req.extraEnv};const skill=req.skill??"";const category=req.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"}}
|
|
39
|
+
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"}\
|
|
40
|
+
\uFF09`)}const tried=[];const reasons=new Map;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,(ai,why)=>reasons.set(ai,why));for(const ai of order){if(tried.includes(ai))continue;if(!this.cfg.isAllowed(ai,category,skill)){this.log(
|
|
41
|
+
` ${ai} \u306F category=${category} / skill=${skill||"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} \
|
|
42
|
+
\u306E\u67A0\u3092\u89E3\u6C7A\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08${this.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;reasons.set(ai,"rate-limited");this.log(` ${ai} \u306F\u30EC\u30FC\u30C8\u30EA\u30DF\u30C3\u30C8\u4E2D\u306E\u305F\u3081\u30B9\u30AD\u30C3\u30D7`);
|
|
43
|
+
continue}const isHead=tried.length===0&&ai===head;this.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,req.serverSkills);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}\
|
|
44
|
+
\u306F\u8D77\u52D5\u3057\u307E\u305B\u3093`);return{outcome:"aborted",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)
|
|
45
|
+
void abort()}});lastOutput=result.output;tried.push(ai);const elapsedMs=this.now()-startedAt;const elapsedSec=Math.round(elapsedMs/1e3);if(result.outcome==="failed"&&result.exitCode!==0&&elapsedMs>=0&&elapsedSec<FAST_FAIL_SEC){sawFastFail=true;reasons.set(ai,`fast-fail(${elapsedSec}s)`);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`);
|
|
46
|
+
if(streak>=FAST_FAIL_STREAK){const sec=this.markUnusable(ai,`fast-fail x${streak}`);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)"}\
|
|
47
|
+
\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`);
|
|
48
|
+
lastValidated=false;continue}}return this.finish(result.outcome,ai,result.output,result.metrics)}if(result.outcome==="rate-limited"){sawRateLimit=true;reasons.set(ai,"rate-limited");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}`}\
|
|
49
|
+
)`);await this.waitBeforeFallback(ai,env)}else if(result.outcome==="timeout"){sawTimeout=true;reasons.set(ai,"timeout");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 why=this.reasonLabel("not-startable",slotFor());reasons.set(ai,why);const sec=this.markUnusable(ai,why);this.log(` ${ai} \u3092\u8D77\u52D5\u3067\u304D\u307E\u305B\u3093 \u2192 \u6B21\u306EAI\u306B\u30D5\u30A9\u30FC\u30EB\u30D0\u30C3\u30AF\uFF08${sec}\
|
|
50
|
+
\u79D2\u9593\u306F\u9396\u304B\u3089\u5916\u3057\u307E\u3059\uFF09`)}else{sawUnavailable=true;const why=this.reasonLabel("auth-error",slotFor());reasons.set(ai,why);const sec=this.markUnusable(ai,why);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");
|
|
51
|
+
return{outcome:"ok",usedAi:tried[tried.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");
|
|
52
|
+
return this.unavailable("",lastOutput,reasons,requested)}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.log("\u26A0\uFE0F \u5168AI\u304C\u30EC\u30FC\u30C8\u30EA\u30DF\
|
|
53
|
+
\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\u306F\u306A\u304F\u672A\u5B9F\u884C\u3068\u3057\u3066\u6271\u3044\u307E\u3059\uFF09");
|
|
54
|
+
return this.unavailable(tried[tried.length-1]??"",lastOutput,reasons,requested)}unavailable(usedAi,output,reasons,order){const rank=ai=>{const i=order.indexOf(ai);return i<0?order.length:i};const aiReasons=[...reasons].sort(([a],[b])=>rank(a)-rank(b)).map(([ai,why])=>`${ai}=${why}`).join(" / ");if(aiReasons!=="")this.log(` \u4F7F\u3048\u306A\u304B\u3063\u305F\u7406\u7531: ${aiReasons}`);return{outcome:"unavailable",usedAi,serverAiType:null,output,...aiReasons===""?{}:{aiReasons}}}async healthCheck(ctx){
|
|
55
|
+
const results=[];if(this.aborting)return results;const targets=HEALTH_PROBE_AIS.flatMap(ai=>{const category=this.cfg.probeCategoryFor(ai);return category===null?[]:[{ai,category}]});if(targets.length===0)return results;if(!this.preflightOk()){for(const{ai}of targets)results.push({ai,verdict:"skipped",reason:"\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u5230\u9054\u4E0D\u80FD",elapsedSec:null});this.logHealth(results);return results}const env=this.opts.env??process.env;const detected=this.detectUnusable();
|
|
56
|
+
for(const{ai,category}of targets){const now=this.now();if(detected.get(ai)?.hard===true){results.push({ai,verdict:"skipped",reason:"\u672A\u5C0E\u5165",elapsedSec:null});continue}if(this.cfg.isAiUnusable(ai,now)||this.cfg.isRateLimited(ai,now)){results.push({ai,verdict:"skipped",reason:"\u9664\u5916\u4E2D\uFF08\u671F\u9650\u660E\u3051\u306B\u518D\u691C\u67FB\uFF09",elapsedSec:null});continue}const last=this.healthyAt.get(ai);if(last!==void 0&&now-last>=0&&now-last<HEALTH_PROBE_TTL_MS){results.push(
|
|
57
|
+
{ai,verdict:"skipped",reason:"\u76F4\u8FD1\u306B\u5065\u5168",elapsedSec:null});continue}if(this.aborting)break;const startedAt=this.now();let result;try{result=await(this.opts.runOnce??runOnce)({ai,prompt:HEALTH_PROBE_PROMPT,logFile:`${ctx.logFilePrefix}-${ai}.log`,cwd:ctx.cwd,timeoutSec:HEALTH_PROBE_TIMEOUT_SEC,category,skill:""},{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()}})}catch(err){results.
|
|
58
|
+
push({ai,verdict:"inconclusive",reason:`\u691C\u67FB\u304C\u4F8B\u5916\u3067\u7D42\u4E86\uFF08${err.message}\uFF09`,elapsedSec:null});continue}const elapsedMs=this.now()-startedAt;const elapsedSec=Math.round(elapsedMs/1e3);const hint=failureHint(result.output)||"(\u7406\u7531\u884C\u306A\u3057)";if(result.outcome==="ok"){this.healthyAt.set(ai,this.now());this.fastFailStreak.delete(ai);results.push({ai,verdict:"healthy",reason:"\u5FDC\u7B54\u3042\u308A",elapsedSec})}else if(result.outcome==="rate\
|
|
59
|
+
-limited"){const sec=this.cfg.markRateLimited(ai,result.cooldownSec??this.cfg.cooldownDefaultSec(ai,env),this.now());this.healthyAt.delete(ai);results.push({ai,verdict:"unhealthy",reason:`\u30EC\u30FC\u30C8\u30EA\u30DF\u30C3\u30C8\u30FB\u5229\u7528\u4E0A\u9650\uFF08${sec}\u79D2\u9593\u5916\u3057\u307E\u3059: ${hint}\uFF09`,elapsedSec})}else if(result.outcome==="auth-error"||result.outcome==="unavailable"){const sec=this.markUnusable(ai,result.outcome==="auth-error"?"auth-error":"not-startable");
|
|
60
|
+
this.healthyAt.delete(ai);results.push({ai,verdict:"unhealthy",reason:`${result.outcome==="auth-error"?"\u8A8D\u8A3C\u30A8\u30E9\u30FC":"\u8D77\u52D5\u4E0D\u80FD"}\uFF08${sec}\u79D2\u9593\u5916\u3057\u307E\u3059: ${hint}\uFF09`,elapsedSec})}else if(result.outcome==="failed"&&result.exitCode!==0&&elapsedMs>=0&&elapsedSec<FAST_FAIL_SEC){const sec=this.markUnusable(ai,`fast-fail(${elapsedSec}s)`);this.fastFailStreak.delete(ai);this.healthyAt.delete(ai);results.push({ai,verdict:"unhealthy",reason:`${elapsedSec}\
|
|
61
|
+
\u79D2\u3067\u7570\u5E38\u7D42\u4E86\uFF08${sec}\u79D2\u9593\u5916\u3057\u307E\u3059: ${hint}\uFF09`,elapsedSec})}else{results.push({ai,verdict:"inconclusive",reason:`${result.outcome}\uFF08\u5916\u3057\u307E\u305B\u3093\uFF09`,elapsedSec})}}this.activeAbort=null;this.logHealth(results);return results}logHealth(results){const label={healthy:"\u5065\u5168",unhealthy:"\u4E0D\u5065\u5168",skipped:"\u691C\u67FB\u7701\u7565",inconclusive:"\u5224\u5B9A\u4E0D\u80FD"};for(const r of results){this.log(` \
|
|
62
|
+
AI\u30D8\u30EB\u30B9\u30C1\u30A7\u30C3\u30AF: ${r.ai} ${label[r.verdict]}\uFF08${r.reason}${r.elapsedSec===null?"":`\u30FB${r.elapsedSec}\u79D2`}\uFF09`)}}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,note=()=>{}){const detected=this.detectUnusable();const unique=[...new Set(order)];const kept=[];const soft=[];const dropped=[];for(const ai of unique){
|
|
63
|
+
const cooled=this.cfg.isAiUnusable(ai,this.now());const hit=cooled?{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}note(ai,cooled?`excluded:${this.unusableWhy.get(ai)??"recent-failure"}`:hit.hard?"not-installed":"not-logged-in");dropped.push(`${ai}\uFF08${hit.why}\uFF09`);if(!hit.hard)soft.push(ai)}if(dropped.length===0)return unique;
|
|
64
|
+
const canRun=list=>list.some(ai=>this.cfg.isAllowed(ai,category,skill));if(!canRun(kept)&&canRun(soft)){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");
|
|
65
|
+
return unique.filter(ai=>kept.includes(ai)||soft.includes(ai))}this.log(` \u9396\u304B\u3089\u9664\u5916: ${dropped.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.
|
|
66
|
+
unusable;const map=new Map;this.unusable=map;this.unusableAt=now;try{for(const d of(this.opts.detectClis??detectAiClis)({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.
|
|
67
|
+
message}\uFF09\u3002\u9396\u306F\u305D\u306E\u307E\u307E\u4F7F\u3044\u307E\u3059`);map.clear()}return map}markUnusable(ai,why){this.unusableWhy.set(ai,why);return this.cfg.markAiUnusable(ai,this.now())}reasonLabel(code,slot){if(slot===null)return code;return`${code}(${slot===UNKNOWN_SLOT?slot:path2.basename(slot)})`}orderFor(category,skill,preferred){const chain=this.cfg.chainFor(category);const head=preferred&&preferred.trim()!==""?preferred.trim():this.cfg.selectPrimary(category,skill,"P2","");
|
|
68
|
+
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} \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`);
|
|
69
|
+
const sleep=this.opts.sleep??(ms=>new Promise(r=>setTimeout(r,ms)));await sleep(delay*1e3)}buildPrompt(body,promptPrefix,ai,tried,serverSkills){const expanded=this.expandSkills(body,ai,serverSkills);const parts=[];if(tried.length>0)parts.push(fallbackNote(tried));const charter=this.charter();if(charter!==null)parts.push(charter);if(promptPrefix!==void 0&&promptPrefix!=="")parts.push(promptPrefix);parts.push(expanded);return parts.join("\n\n")}expandSkills(prompt,ai,serverSkills){const skills=serverSkills??
|
|
70
|
+
new Map;const cmd=this.opts.compileCommand;if(ai==="claude"||cmd===void 0||cmd.length===0)return expandServerSkills(prompt,skills);if(skills.size===0)return this.expandForNonClaude(prompt,ai,this.opts.workspace);const overlay=this.opts.skillOverlayDir;if(overlay===void 0||overlay===""){this.log(` \u26A0\uFE0F ${ai} \u5411\u3051\u306E\u30AA\u30FC\u30D0\u30FC\u30EC\u30A4\u306E\u7F6E\u304D\u5834\u6240\u304C\u672A\u8A2D\u5B9A\u306E\u305F\u3081\u3001\u30B5\u30FC\u30D0\u7248\u30B9\u30AD\u30EB\u3092\u4F7F\u308F\u305A\u30D5\u30A1\u30A4\u30EB\u7248\u3067\u5B9F\u884C\u3057\u307E\u3059`);
|
|
71
|
+
return this.expandForNonClaude(prompt,ai,this.opts.workspace)}try{prepareSkillOverlay(overlay,this.opts.workspace,skills,ai)}catch(err){this.log(` \u26A0\uFE0F \u30B5\u30FC\u30D0\u7248\u30B9\u30AD\u30EB\u306E\u30AA\u30FC\u30D0\u30FC\u30EC\u30A4\u3092\u4F5C\u308C\u307E\u305B\u3093\uFF08${err.message}\uFF09\u3002\u30B5\u30FC\u30D0\u7248\u3092\u4F7F\u308F\u305A\u30D5\u30A1\u30A4\u30EB\u7248\u3067\u5B9F\u884C\u3057\u307E\u3059`);return this.expandForNonClaude(prompt,ai,this.opts.workspace)}return this.
|
|
72
|
+
expandForNonClaude(prompt,ai,overlay)}expandForNonClaude(prompt,ai,projectDir){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===null)return prompt;const r=spawnSync(resolved,[...args,"--provider",ai,"--p\
|
|
73
|
+
roject-dir",projectDir],{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}return out}charter(){if(this.opts.charterEnabled===false)return null;const server=this.
|
|
74
|
+
opts.serverPrompts?.()??{};const prefix=server.charter_prefix??this.opts.charterPrefix??DEFAULT_CHARTER_PREFIX;const suffix=server.charter_suffix??this.opts.charterSuffix??DEFAULT_CHARTER_SUFFIX;if(server.charter!==void 0){return server.charter===""?null:wrapCharter(prefix,server.charter,suffix)}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,
|
|
75
|
+
"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`);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")}
|
|
76
|
+
return null}return wrapCharter(prefix,body,suffix)}preflightOk(){const env=this.opts.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"?"\
|
|
77
|
+
NUL":"/dev/null";const curl=process.platform==="win32"?system32(process.env,"curl.exe"):"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",
|
|
78
|
+
`\u3053\u306E\u30BF\u30B9\u30AF\u306F\u5225\u306EAI\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\uFF08${tried.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:",
|
|
79
|
+
"- 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\
|
|
80
|
+
\u3060\u3055\u3044\u3002"].join("\n")}export{DEFAULT_CHARTER_PREFIX,DEFAULT_CHARTER_SUFFIX,DEFAULT_PREFLIGHT_HOSTS,DispatchEngine};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{DEPARTMENT_FLAG,FROM_FLAG,MANHOUR_DESCRIPTION,MANHOUR_FROM_FLAG,MANHOUR_TO_FLAG,MONTH_FLAG,TO_FLAG,USER_FLAG,analysisDomain,analysisForbidden,currentMonth,dataOf,levelGuidance,listIn,manhourNotes,manhourQuery,manhourRows,monthColumns,monthRange,monthsBetween,noArgs,periodNote,profitRows,rangeNotes,recordOf,resolveFilters,resolvedOrUndefined,responseMonths,staffKpiRows,workloadDistributionNotes,workloadDistributionRows}from"./chunk-
|
|
4
|
-
import"./chunk-
|
|
3
|
+
import{DEPARTMENT_FLAG,FROM_FLAG,MANHOUR_DESCRIPTION,MANHOUR_FROM_FLAG,MANHOUR_TO_FLAG,MONTH_FLAG,TO_FLAG,USER_FLAG,analysisDomain,analysisForbidden,currentMonth,dataOf,levelGuidance,listIn,manhourNotes,manhourQuery,manhourRows,monthColumns,monthRange,monthsBetween,noArgs,periodNote,profitRows,rangeNotes,recordOf,resolveFilters,resolvedOrUndefined,responseMonths,staffKpiRows,workloadDistributionNotes,workloadDistributionRows}from"./chunk-M7UEPYUQ.js";import"./chunk-MUIN7OUW.js";import"./chunk-EXT4AIDF.js";
|
|
4
|
+
import"./chunk-WDQMYRPE.js";import"./chunk-RX5HWI4L.js";import"./chunk-JJSBBWJ5.js";import"./chunk-IWYJSQ5I.js";import"./chunk-W4NLJ2YK.js";import"./chunk-2AVQILQQ.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import"./chunk-IXT2X5BZ.js";import"./chunk-MI6HVYR2.js";import"./chunk-II5RVJQN.js";import"./chunk-PS5QFKHB.js";import"./chunk-3ZRMMBP5.js";import"./chunk-VFPY2A23.js";
|
|
5
5
|
import"./chunk-J7QYPKVK.js";import"./chunk-EDF4U5BT.js";import"./chunk-RZVI6PMW.js";import"./chunk-QQRJLH6B.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";export{DEPARTMENT_FLAG,FROM_FLAG,MANHOUR_DESCRIPTION,MANHOUR_FROM_FLAG,MANHOUR_TO_FLAG,MONTH_FLAG,TO_FLAG,USER_FLAG,analysisDomain,analysisForbidden,currentMonth,dataOf,levelGuidance,listIn,manhourNotes,manhourQuery,manhourRows,monthColumns,monthRange,monthsBetween,noArgs,periodNote,profitRows,rangeNotes,recordOf,resolveFilters,resolvedOrUndefined,responseMonths,staffKpiRows,workloadDistributionNotes,workloadDistributionRows};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{composeDocument,htmlToText,metaLine}from"./chunk-C7MO3RHJ.js";import{boundedText}from"./chunk-JJSBBWJ5.js";import{readBody}from"./chunk-IWYJSQ5I.js";import"./chunk-W4NLJ2YK.js";import{ANNOUNCEMENTS_PATH}from"./chunk-
|
|
3
|
+
import{composeDocument,htmlToText,metaLine}from"./chunk-C7MO3RHJ.js";import{boundedText}from"./chunk-JJSBBWJ5.js";import{readBody}from"./chunk-IWYJSQ5I.js";import"./chunk-W4NLJ2YK.js";import{ANNOUNCEMENTS_PATH}from"./chunk-2AVQILQQ.js";import{isSafePathSegment}from"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import"./chunk-IXT2X5BZ.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,positiveInteger}from"./chunk-MI6HVYR2.js";
|
|
4
4
|
import"./chunk-II5RVJQN.js";import{requireResolved,withResolved}from"./chunk-PS5QFKHB.js";import{isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-EDF4U5BT.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var LABEL="\u304A\u77E5\u3089\u305B";var LIST_COLUMNS=["id","publish_start_at","sender_name","category_name","title","is_read","require_confirmation","is_confirmed"];var UNCONFIRMED_COLUMNS=["id","publish_start_at","publish_end_at","importance","title"];var GET_COLUMNS=["id","title","sender_name","category_name","importance_name","publish_start_at","publish_end_at","is_organization","is_read","require_confirmation","is_confirmed","allow_replies","link_url"];var REPLY_COLUMNS=["id","created_at","\
|
|
5
5
|
user_name","is_mine","content"];var REPLY_MAX_CHARS=2e3;function noArgs(input,op){if(input.args.length>0){throw new UsageError(`${op} \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,`twp announcement ${op} help`)}}function checkId(raw,help){const id=raw.trim();if(id==="")throw new UsageError("\u304A\u77E5\u3089\u305B\u306E ID \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",help);if(!isSafePathSegment(id)){throw new UsageError(`\u304A\u77E5\u3089\u305B\u306E ID \u3068\u3057\u3066\u4F7F\u3048\u306A\u3044\
|
|
6
6
|
\u5024\u3067\u3059: ${id}`,"\u304A\u77E5\u3089\u305B\u306E ID \u306F twp announcement list \u306E id \u5217\u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002")}return id}function announcementId(input,op){const help=`twp announcement ${op} help`;const[raw,...rest]=input.args;if(rest.length>0)throw new UsageError(`${op} \u304C\u53D7\u3051\u53D6\u308C\u308B\u304A\u77E5\u3089\u305B ID \u306F1\u3064\u3060\u3051\u3067\u3059: ${rest.join(" ")}`,help);return checkId(raw??"",help)}function announcementIds(input){
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{CommandModelMissingError,MAX_REPORTED_VIOLATIONS,loadCommandModelDomain,loadCommandModelRoutes,validateBody,validateQuery}from"./chunk-NZ7WI4RZ.js";import{exitCodeFor,fetchAllPages,reportError}from"./chunk-
|
|
4
|
-
import{parseOperationArgs,repeatedValues}from"./chunk-RX5HWI4L.js";import{readBody}from"./chunk-IWYJSQ5I.js";import{ALLOW_REDACTED_FLAG,NO_REDACT_FLAG,NO_REDACT_NOTICE}from"./chunk-W4NLJ2YK.js";import"./chunk-
|
|
3
|
+
import{CommandModelMissingError,MAX_REPORTED_VIOLATIONS,loadCommandModelDomain,loadCommandModelRoutes,validateBody,validateQuery}from"./chunk-NZ7WI4RZ.js";import{exitCodeFor,fetchAllPages,reportError}from"./chunk-TJNM7PHZ.js";import"./chunk-GYB2R6BV.js";import{renderOutput}from"./chunk-SZOEBJGI.js";import"./chunk-Q3B65OFC.js";import{evaluateQuery}from"./chunk-GFLGXGWE.js";import{describeWaitResult,parseWaitOptions,waitUntilTerminal}from"./chunk-WVCEKC7V.js";
|
|
4
|
+
import{parseOperationArgs,repeatedValues}from"./chunk-RX5HWI4L.js";import{readBody}from"./chunk-IWYJSQ5I.js";import{ALLOW_REDACTED_FLAG,NO_REDACT_FLAG,NO_REDACT_NOTICE}from"./chunk-W4NLJ2YK.js";import"./chunk-2AVQILQQ.js";import"./chunk-HVZUXLQ4.js";import{ApiError,TwpApiClient,appendQuery}from"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import{redactSecretValues,redactSecrets,withDebug}from"./chunk-IXT2X5BZ.js";import{DEFAULT_MAX_ITEMS,DEFAULT_MAX_PAGES,
|
|
5
5
|
envelopePaging,isPageNumberEnvelope,pageRangeNotes,positiveInteger,readEnvelopeCursor,readPageNumberCursor,shellQuote}from"./chunk-MI6HVYR2.js";import"./chunk-II5RVJQN.js";import"./chunk-3ZRMMBP5.js";import{ApiResponseError,EXIT_OK,EXIT_WAIT_TIMEOUT,NetworkError,UsageError}from"./chunk-VFPY2A23.js";import{GLOBAL_OPTIONS_HELP}from"./chunk-PECIBNFD.js";import{AuthSession,NotLoggedInError,SessionExpiredError,loadCredentials}from"./chunk-XNLIEUAW.js";import{httpFetch}from"./chunk-J7QYPKVK.js";
|
|
6
6
|
import{effectiveApiUrl,resolveConfiguredOutput,resolveProfile}from"./chunk-EDF4U5BT.js";import"./chunk-RZVI6PMW.js";import{HELP_TOKEN}from"./chunk-MLRBDF44.js";import"./chunk-QQRJLH6B.js";import{OUTPUT_FORMATS,resolveOutputFormat}from"./chunk-74BPZOKU.js";import"./chunk-UREA4ZIG.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var MIN_SEGMENT_CHARS=3;var parsedCache=new WeakMap;function splitSegments(path){return path.split("/").filter(segment=>segment!=="")}function parseRoutes(routes){const cached=parsedCache.get(routes);if(cached!==void 0)return cached;const parsed=[];for(const[key,domain]of Object.entries(routes.routes)){const space=key.indexOf(" ");if(space<=0)continue;const template=key.slice(space+1);parsed.push({method:key.slice(0,space),template,domain,segments:splitSegments(template).map(segment=>/^\{[^/{}]+\}$/.
|
|
7
7
|
test(segment)?null:segment)})}parsedCache.set(routes,parsed);return parsed}function matches(route,segments){if(route.segments.length!==segments.length)return false;return route.segments.every((literal,i)=>literal===null||literal===segments[i])}function compareSpecificity(a,b){const literals=route=>route.segments.filter(segment=>segment!==null).length;const diff=literals(b)-literals(a);if(diff!==0)return diff;for(let i=0;i<a.segments.length;i+=1){const aLiteral=a.segments[i]!==null;const bLiteral=b.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
3
|
import{RESIDENT_TOKEN_CAP,activateModeFiles,activatePermissionSettings,buildResidentSet,buildSystemPrompt,createAuditLogger,createTwpToolkit,currentBranch,describeAuditLog,describeToolCatalog,displayCwd,executeTool,findProjectTwpSubdir,localTools,lstatOrNull,parseFrontMatter,parseRule,persistProjectAllow,projectPermissionsPath,projectRootFor,readFileTool,residentInputs,resolveGitExecutable,runTurn,secretReason}from"./chunk-4DUZIRGL.js";import"./chunk-NZ7WI4RZ.js";import{buildDiffLines,
|
|
4
|
-
diffStat}from"./chunk-VRBI2NPI.js";import{require_fuzzysort}from"./chunk-DIMZRTLE.js";import"./chunk-N2UVRM3Z.js";import"./chunk-
|
|
5
|
-
import"./chunk-D233KKXW.js";import"./chunk-PMOUHEJQ.js";import"./chunk-XNLIEUAW.js";import{proxyDiagnostics}from"./chunk-J7QYPKVK.js";import{checkMinSupportedVersion,isBelowMinSupported,minSupportedBlockMessage}from"./chunk-DXXFUNYN.js";import"./chunk-EDF4U5BT.js";import{configReadDirs,twpHomeDir}from"./chunk-RZVI6PMW.js";import{parseArgv}from"./chunk-
|
|
6
|
-
nextMode}from"./chunk-2LOT54OO.js";import"./chunk-MLRBDF44.js";import"./chunk-
|
|
4
|
+
diffStat}from"./chunk-VRBI2NPI.js";import{require_fuzzysort}from"./chunk-DIMZRTLE.js";import"./chunk-N2UVRM3Z.js";import"./chunk-2AVQILQQ.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import"./chunk-IXT2X5BZ.js";import"./chunk-II5RVJQN.js";import"./chunk-VFPY2A23.js";import{RelayError,builtinCatalog,classifyModelSwitch,createRuntime,loadCachedCatalog,modelLabel,pickModel,specFor,toModelInfos}from"./chunk-LLBLGHHZ.js";
|
|
5
|
+
import"./chunk-D233KKXW.js";import"./chunk-PMOUHEJQ.js";import"./chunk-XNLIEUAW.js";import{proxyDiagnostics}from"./chunk-J7QYPKVK.js";import{checkMinSupportedVersion,isBelowMinSupported,minSupportedBlockMessage}from"./chunk-DXXFUNYN.js";import"./chunk-EDF4U5BT.js";import{configReadDirs,twpHomeDir}from"./chunk-RZVI6PMW.js";import{parseArgv}from"./chunk-QLDKF6GK.js";import{applyPermissionMode,checkPermission,describePermissionMode,getMode,isModeId,modeSource,
|
|
6
|
+
nextMode}from"./chunk-2LOT54OO.js";import"./chunk-MLRBDF44.js";import"./chunk-EOXTDZTA.js";import"./chunk-QQRJLH6B.js";import{isFullWidth,isWide,stringWidth,stripAnsi}from"./chunk-UREA4ZIG.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.
|
|
7
7
|
for("react.forward_ref");var REACT_SUSPENSE_TYPE=Symbol.for("react.suspense");var REACT_MEMO_TYPE=Symbol.for("react.memo");var REACT_LAZY_TYPE=Symbol.for("react.lazy");var REACT_ACTIVITY_TYPE=Symbol.for("react.activity");var REACT_VIEW_TRANSITION_TYPE=Symbol.for("react.view_transition");var MAYBE_ITERATOR_SYMBOL=Symbol.iterator;function getIteratorFn(maybeIterable){if(null===maybeIterable||"object"!==typeof maybeIterable)return null;maybeIterable=MAYBE_ITERATOR_SYMBOL&&maybeIterable[MAYBE_ITERATOR_SYMBOL]||
|
|
8
8
|
maybeIterable["@@iterator"];return"function"===typeof maybeIterable?maybeIterable:null}var ReactNoopUpdateQueue={isMounted:function(){return false},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}};var assign=Object.assign;var emptyObject={};function Component(props,context,updater){this.props=props;this.context=context;this.refs=emptyObject;this.updater=updater||ReactNoopUpdateQueue}Component.prototype.isReactComponent={};Component.prototype.setState=
|
|
9
9
|
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){
|
|
@@ -1212,7 +1212,7 @@ cwd()){const listed=await gitListFiles(cwd2);const raw=listed??await walkFiles(c
|
|
|
1212
1212
|
1;const after=/^[^\s]*/.exec(text.slice(cursor))?.[0]??"";return{query,start,end:cursor+after.length}}var TWP_SLASH_ROUTES={"/tasks":{domain:"task",operation:"list"},"/task":{domain:"task",operation:"get"},"/projects":{domain:"project",operation:"list"}};function isTwpSlashCommand(name){return Object.hasOwn(TWP_SLASH_ROUTES,name)}async function runTwpSlashCommand(name,args,deps){const route=TWP_SLASH_ROUTES[name];if(!Object.hasOwn(TWP_SLASH_ROUTES,name)||route===void 0){return{code:2,out:"",err:`\u4E0D\u660E\u306A\u30B3\u30DE\u30F3\u30C9: ${name}
|
|
1213
1213
|
`}}const parsed=parseArgv([route.domain,route.operation,...args]);if(parsed.command!=="domain"||parsed.domain!==route.domain){return{code:2,out:"",err:`${name}: \u3053\u306E\u5F15\u6570\u306F\u4F7F\u3048\u307E\u305B\u3093\uFF08${args.join(" ")}\uFF09
|
|
1214
1214
|
`}}if(parsed.unknown.length>0){return{code:2,out:"",err:`\u4E0D\u660E\u306A\u5F15\u6570: ${parsed.unknown.join(" ")}
|
|
1215
|
-
`}}let out="";let err="";const io={out:text=>void(out+=text),err:text=>void(err+=text),isTty:true};const globals={profile:parsed.profile??deps.profile,...parsed.output!==void 0?{output:parsed.output}:{},...parsed.query!==void 0?{query:parsed.query}:{},dryRun:parsed.dryRun,debug:parsed.debug,yes:parsed.yes,refresh:parsed.refresh};const{runDomain}=await import("./run-
|
|
1215
|
+
`}}let out="";let err="";const io={out:text=>void(out+=text),err:text=>void(err+=text),isTty:true};const globals={profile:parsed.profile??deps.profile,...parsed.output!==void 0?{output:parsed.output}:{},...parsed.query!==void 0?{query:parsed.query}:{},dryRun:parsed.dryRun,debug:parsed.debug,yes:parsed.yes,refresh:parsed.refresh};const{runDomain}=await import("./run-UH7QKMO3.js");try{const code=await runDomain({domain:route.domain,...parsed.operation!==void 0?{operation:parsed.operation}:
|
|
1216
1216
|
{},argv:parsed.domainArgv,help:parsed.domainHelp,globals,version:deps.version,io,...deps.fetchImpl!==void 0?{fetchImpl:deps.fetchImpl}:{}});return{code,out,err}}catch(e){return{code:1,out,err:`${err}${e.message}
|
|
1217
1217
|
`}}}var GIT_LOG_OUTPUT=["9f3c1a2 feat(ui): \u4E00\u89A7\u306E\u30D5\u30A3\u30EB\u30BF\u3092 URL \u30AF\u30A8\u30EA\u3068\u540C\u671F\u3059\u308B","4b8e0d7 fix(ui): \u4EEE\u60F3\u30B9\u30AF\u30ED\u30FC\u30EB\u306E\u884C\u9AD8\u3055\u3092\u5B9F\u6E2C\u5024\u306B\u5408\u308F\u305B\u308B","c15a99e refactor(api): \u4E00\u89A7\u53D6\u5F97\u306E\u30DA\u30FC\u30B8\u30F3\u30B0\u51E6\u7406\u3092\u5171\u901A\u5316\u3059\u308B","2d70f4b test: \u4E00\u89A7\u30D5\u30A3\u30EB\u30BF\u306E\u56DE\u5E30\u30C6\u30B9\u30C8\u3092\u8FFD\u52A0\u3059\u308B",
|
|
1218
1218
|
"a6e2b38 fix(api): \u7A7A\u306E\u691C\u7D22\u6761\u4EF6\u3067\u5168\u4EF6\u8FD4\u3089\u306A\u3044\u3088\u3046\u306B\u3059\u308B","7c40d51 chore(deps): \u958B\u767A\u4F9D\u5B58\u3092\u6700\u65B0\u3078\u66F4\u65B0\u3059\u308B","e83b1c6 docs: \u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u624B\u9806\u306B Node 22 \u306E\u524D\u63D0\u3092\u8FFD\u8A18\u3059\u308B","b91f7a4 fix(ui): \u30E2\u30FC\u30C0\u30EB\u306E\u91CD\u306A\u308A\u9806\u3092\u6307\u5B9A\u3059\u308B","5a2c8e0 perf(api): \u4E00\u89A7\u306E N+1 \u3092\u89E3\u6D88\u3059\u308B",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{PUNCH_TYPES,assertMonthOpen,attendanceDomain}from"./chunk-
|
|
3
|
+
import{PUNCH_TYPES,assertMonthOpen,attendanceDomain}from"./chunk-MUIN7OUW.js";import{dateFlag,monthFlag}from"./chunk-EXT4AIDF.js";import"./chunk-WDQMYRPE.js";import"./chunk-RX5HWI4L.js";import"./chunk-JJSBBWJ5.js";import"./chunk-IWYJSQ5I.js";import"./chunk-W4NLJ2YK.js";import"./chunk-2AVQILQQ.js";import{isSafePathSegment}from"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import"./chunk-IXT2X5BZ.js";
|
|
4
4
|
import"./chunk-MI6HVYR2.js";import"./chunk-II5RVJQN.js";import{requireResolved,withResolved}from"./chunk-PS5QFKHB.js";import{isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiRejectedError,ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-EDF4U5BT.js";import"./chunk-RZVI6PMW.js";import"./chunk-QQRJLH6B.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var CREATE_USAGE="twp attendance record create --date <YYYY-MM-DD> --time <HH:MM> --type <clock-in|clock-out|break-start|break-end|switch> [--project <\u30B3\u30FC\u30C9|ID>] [--task <\u30BF\u30B9\u30AFID>] [--memo <\u30E1\u30E2>]";var UPDATE_USAGE="twp attendance record update <\u8A18\u9332ID> --memo <\u30E1\u30E2> [--month <YYYY-MM>]";var DELETE_USAGE="twp attendance record delete <\u8A18\u9332ID> --reason <\u7406\u7531> --yes [--month <YYYY-MM>]";var MOVE_USAGE="twp attendance record move <\u8A18\u9332\
|
|
5
5
|
ID> --project <\u30B3\u30FC\u30C9|ID> [--month <YYYY-MM>]";var TEXT_MAX=500;var UUID_PATTERN=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;var TIME_PATTERN=/^(\d{2}):(\d{2})(?::(\d{2}))?$/;var CLOSED_REASON="\u30B5\u30FC\u30D0\u306F\u7DE0\u3081\u6E08\u307F\u306E\u6708\u3078\u306E\u4FEE\u6B63\u3092\u62D2\u5426\u305B\u305A\u7DE0\u3081\u306E\u96C6\u8A08\u3092\u6D17\u3044\u66FF\u3048\u308B\u306E\u3067\u3001CLI \u304C\u9001\u308B\u524D\u306B\u6B62\u3081\u3066\u3044\u307E\u3059\u3002";
|
|
6
6
|
var FORBIDDEN="\u81EA\u5206\u306E\u6253\u523B\u306E\u4FEE\u6B63\u306B\u306F\u6253\u523B\u4FEE\u6B63\u306E\u6A29\u9650\uFF08\u30E6\u30FC\u30B6\u30FC\u8A2D\u5B9A\u306E\u300C\u6253\u523B\u4FEE\u6B63\u300D\uFF09\u3068\u52E4\u6020\u306E\u5229\u7528\u6A29\u9650\u304C\u5FC5\u8981\u3067\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u306E\u7BA1\u7406\u8005\u306B\u4ED8\u4E0E\u3092\u4F9D\u983C\u3057\u3066\u304F\u3060\u3055\u3044";var RECORD_COLUMNS=["id","type","type_label","recorded_at","year_month","project_id","t\
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{hoursMinutes}from"./chunk-
|
|
3
|
+
import{hoursMinutes}from"./chunk-MUIN7OUW.js";import{monthFlag}from"./chunk-EXT4AIDF.js";import"./chunk-WDQMYRPE.js";import"./chunk-RX5HWI4L.js";import"./chunk-JJSBBWJ5.js";import"./chunk-IWYJSQ5I.js";import"./chunk-W4NLJ2YK.js";import"./chunk-2AVQILQQ.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import"./chunk-IXT2X5BZ.js";import"./chunk-MI6HVYR2.js";import"./chunk-II5RVJQN.js";
|
|
4
4
|
import"./chunk-PS5QFKHB.js";import{isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-EDF4U5BT.js";import"./chunk-RZVI6PMW.js";import"./chunk-QQRJLH6B.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var MONTH_FLAG={name:"--month",summary:"\u5BFE\u8C61\u306E\u5E74\u6708\uFF08YYYY-MM\uFF09",takesValue:true,placeholder:"<YYYY-MM>"};var ME_FLAG={name:"--me",summary:"\u81EA\u5206\u306E\u5206\u3060\u3051\u3092\u8868\u793A\u3059\u308B\uFF08\u7121\u3051\u308C\u3070\u5168\u54E1\u5206\u30FB\u7BA1\u7406\u8005\uFF09",takesValue:false};var FORBIDDEN_ADMIN="\u6A29\u9650\u304C\u8DB3\u308A\u307E\u305B\u3093\u3002\u5168\u54E1\u5206\uFF08--me \u306A\u3057\uFF09\u306F\u52E4\u6020\u306E\u7BA1\u7406\u8005\u6A29\u9650\uFF08\u52E4\u6020: \u7BA1\u7406\u8005\uFF09\u3001\u81EA\u5206\u306E\u5206\uFF08--me\uFF09\u306F\u52E4\u6020\u306E\u5229\u7528\u6A29\u9650\u304C\u8981\u308A\u307E\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u306E\u7BA1\u7406\u8005\u306B\u6A29\u9650\u306E\u4ED8\u4E0E\u3092\u4F9D\u983C\u3057\u3066\u304F\u3060\u3055\u3044";
|
|
5
5
|
function listBody(spec,body){if(!isRecord(body)||!Array.isArray(body[spec.key])){throw new ApiResponseError(`${spec.label}\u306E\u5FDC\u7B54\u306B ${spec.key} \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return body}function monthListOperation(spec){const usage=`twp ${spec.domain} list [--month <YYYY-MM>] [--me]`;return{name:"list",summary:`\u6708\u306E${spec.label}\u3092\u4E00\u89A7\u3059\u308B\uFF08--me \u3067\u81EA\u5206\u306E\u5206\u30FB\u7121\u3051\u308C\u3070\u5168\u54E1\u5206\uFF1D\u7BA1\u7406\u8005\uFF09`,
|
|
6
6
|
usage,description:`GET ${spec.path} \u3092\u8868\u793A\u3057\u307E\u3059\uFF08\u5168\u54E1\u5206\u30FB\u52E4\u6020\u306E\u7BA1\u7406\u8005\u6A29\u9650\u304C\u5FC5\u8981\uFF09\u3002--me \u3092\u4ED8\u3051\u308B\u3068 GET ${spec.path}/me\uFF08\u81EA\u5206\u306E\u5206\uFF09\u3067\u3059\u3002
|