@tocca-systems/twp-cli 0.64.0 → 0.65.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 +12 -0
- package/README.md +69 -4
- package/dist/{agent-UAOZYMQM.js → agent-HM4FHCJT.js} +1 -1
- package/dist/{agent-loop-GPPUR2WD.js → agent-loop-VC47FGPR.js} +2 -2
- package/dist/{ai-dispatch-FZDFJ4TN.js → ai-dispatch-GN5ZQPHC.js} +2 -2
- package/dist/analysis-NEZXCJGT.js +5 -0
- package/dist/{announcement-ASKS53LL.js → announcement-BEPIDOMO.js} +1 -1
- package/dist/{api-command-N2OJNJBC.js → api-command-HP3ABNDG.js} +4 -4
- package/dist/{app-QA2HKG6E.js → app-C4TUNEAO.js} +4 -4
- package/dist/{attendance-correct-KBNPGFGR.js → attendance-correct-ZEWRXHUU.js} +2 -2
- package/dist/{attendance-lists-C7TO3GQ2.js → attendance-lists-BXAHFZYY.js} +2 -2
- package/dist/{backlog-AWOTTGPB.js → backlog-UD226SVD.js} +38 -28
- package/dist/{budget-Z6ILL7AU.js → budget-6HOZNG3E.js} +2 -2
- package/dist/capacity-report-command-A6RYG2NV.js +15 -0
- package/dist/{chunk-234WHKGS.js → chunk-2G6ZZPME.js} +2 -2
- package/dist/{chunk-LAAKI3GS.js → chunk-5AQ2JPIS.js} +1 -1
- package/dist/{chunk-RWR7OHVP.js → chunk-AYE4DF6J.js} +1 -1
- package/dist/{chunk-4CR64SNH.js → chunk-BTN4M7Y5.js} +2 -2
- package/dist/{chunk-S5DEP2HA.js → chunk-BXTAAF5F.js} +1 -1
- package/dist/{chunk-2B7A3OY7.js → chunk-CGHGQAEM.js} +14 -52
- package/dist/{chunk-XPPT3MUY.js → chunk-ENVASCZU.js} +2 -2
- package/dist/{chunk-PIB6MGG5.js → chunk-FAHDBWW2.js} +1 -1
- package/dist/{chunk-NQWTPHUO.js → chunk-FBBKRVVS.js} +1 -1
- package/dist/{chunk-RROCQRRY.js → chunk-FTAKYID7.js} +1 -1
- package/dist/{chunk-JYCJ4N6T.js → chunk-G26GIBRL.js} +1 -1
- package/dist/chunk-G4TZFGNN.js +41 -0
- package/dist/{chunk-5LPELULJ.js → chunk-G6RLNOIZ.js} +1 -1
- package/dist/{chunk-NXWXTUU6.js → chunk-RSATLT5H.js} +1 -1
- package/dist/{chunk-VV4GTQ2L.js → chunk-SCU74Z4U.js} +16 -13
- package/dist/chunk-SPZ3GBYC.js +16 -0
- package/dist/{chunk-QEWCTKPV.js → chunk-UODNIEO2.js} +1 -1
- package/dist/chunk-UUP4X3WH.js +97 -0
- package/dist/{chunk-RZ2NZE4U.js → chunk-WG6NCT4L.js} +18 -17
- package/dist/{chunk-FITASHOM.js → chunk-WHCMWXLC.js} +2 -2
- package/dist/{chunk-UIHNYBME.js → chunk-XNOZJ6T2.js} +1 -1
- package/dist/{chunk-6PQO3AYP.js → chunk-Y2J4M2MG.js} +1 -1
- package/dist/chunk-YASL34FY.js +11 -0
- package/dist/chunk-YYURQG4E.js +4 -0
- package/dist/{chunk-FDRXS6ZU.js → chunk-Z2I5BGXV.js} +1 -1
- package/dist/{chunk-YKI7NYBD.js → chunk-ZJW3GBE5.js} +57 -18
- package/dist/{chunk-ITRTFBV3.js → chunk-ZSPWHEBL.js} +52 -49
- package/dist/cli.js +72 -10
- package/dist/{commands-HK7DUMUJ.js → commands-2FOGOL65.js} +97 -149
- package/dist/{commands-WIQVCMQE.js → commands-EK3EYLQH.js} +1 -1
- package/dist/{company-YPDJZ3SE.js → company-MUGKJNY3.js} +2 -2
- package/dist/{completion-7RHQKR5U.js → completion-DGPGHQNL.js} +4 -3
- package/dist/{contract-2Y5VN3TR.js → contract-DJJQBAWX.js} +2 -2
- package/dist/{department-K4EFC6NW.js → department-RMZ72N6B.js} +1 -1
- package/dist/{deposit-NTLHIMJL.js → deposit-45Y3POXT.js} +1 -1
- package/dist/{estimate-C5LUNIWR.js → estimate-HTAF6FZT.js} +3 -3
- package/dist/{evaluation-ZWUHSENB.js → evaluation-J634U7JQ.js} +1 -1
- package/dist/{expense-BXJ7QYMP.js → expense-EVNQ653C.js} +1 -1
- package/dist/fiscal-year-MVOGDAIP.js +17 -0
- package/dist/{inquiry-KHPPTYN6.js → inquiry-XO5R47OO.js} +1 -1
- package/dist/{invoice-VV2NT4A3.js → invoice-WE2SOMYN.js} +3 -3
- package/dist/{job-title-RCSL5Y2Z.js → job-title-3CGRQILF.js} +1 -1
- package/dist/{knowledge-BLU6RHS5.js → knowledge-X3FGXIBL.js} +1 -1
- package/dist/{leave-RJBCHZCQ.js → leave-IFYBLQBF.js} +3 -3
- package/dist/{logout-guard-GQBF3GQH.js → logout-guard-S2PVXK4V.js} +1 -1
- package/dist/{media-OIAOW546.js → media-X32Y2MOY.js} +3 -3
- package/dist/{notification-KPMGELOR.js → notification-MHYSQKYZ.js} +1 -1
- package/dist/{oneshot-OWEBFX5O.js → oneshot-VL45DNR7.js} +1 -1
- package/dist/{outlook-AAS5DXYQ.js → outlook-YG7GFF44.js} +1 -1
- package/dist/{plan-submit-AWMD7XOY.js → plan-submit-CUVVYDTN.js} +2 -1
- package/dist/{position-NY5LRELH.js → position-6UC7X2BJ.js} +1 -1
- package/dist/{project-4MEGZ326.js → project-LG47ZCEZ.js} +1 -1
- package/dist/{prospect-7D2WK56K.js → prospect-FEU3WQYN.js} +2 -2
- package/dist/{purchase-S7W67LJP.js → purchase-44B2NOOB.js} +3 -3
- package/dist/{receivable-GFJTEELC.js → receivable-NQNZ2B6B.js} +1 -1
- package/dist/{redmine-P3EMFFHY.js → redmine-T3JDIH37.js} +1 -1
- package/dist/{registry-GRRRT3I6.js → registry-LBL4AOZW.js} +1 -1
- package/dist/{report-FUIVLC7B.js → report-GJK2YXVO.js} +1 -1
- package/dist/{run-LSWFO4IY.js → run-RLV6W5JA.js} +2 -2
- package/dist/{sales-ai-review-P36TTQRO.js → sales-ai-review-PUJCOMP6.js} +1 -1
- package/dist/{sales-master-3CGHEFKF.js → sales-master-GRR4WKLO.js} +3 -3
- package/dist/{sales-numbering-3M2C2MAI.js → sales-numbering-IUYAABSM.js} +1 -1
- package/dist/{schedule-command-R5KTFAVZ.js → schedule-command-ZX5WNSAC.js} +1 -1
- package/dist/{search-U3QNPR4D.js → search-N5UE5CUL.js} +1 -1
- package/dist/segment-FQHY6DVH.js +6 -0
- package/dist/server-settings-77MPN3UN.js +3 -0
- package/dist/{server-skills-IFTDV3IQ.js → server-skills-KX236POI.js} +1 -1
- package/dist/{setup-MUPUY2AX.js → setup-PF2VH2TW.js} +1 -1
- package/dist/{skill-C4TGG7SH.js → skill-PWCJCIQO.js} +1 -1
- package/dist/{supplier-payment-KG57PNWJ.js → supplier-payment-HTENSEXJ.js} +2 -2
- package/dist/{support-BRVAJ7IH.js → support-DOWAY63P.js} +1 -1
- package/dist/{task-RYBYPM4N.js → task-OMYFPWQZ.js} +3 -3
- package/dist/{teams-GPJ6HMIX.js → teams-AUFHZRDH.js} +1 -1
- package/dist/{user-3DE46776.js → user-C7UKUPGT.js} +2 -2
- package/dist/user-contract-type-DO576EHJ.js +32 -0
- package/dist/{worker-agent-XCJGZHMT.js → worker-agent-OBYRYPLC.js} +1 -1
- package/dist/{workflow-MMEOWZJC.js → workflow-C2BEVHQ2.js} +1 -1
- package/package.json +1 -1
- package/dist/analysis-RKWGO7UY.js +0 -4
- package/dist/chunk-4P7EYEL5.js +0 -4
- package/dist/chunk-AT432SCP.js +0 -15
- package/dist/chunk-QHX5YFMM.js +0 -23
- package/dist/chunk-THOBFX2S.js +0 -10
- package/dist/server-settings-3YD7RR3A.js +0 -3
package/CHANGELOG.public.md
CHANGED
|
@@ -11,6 +11,18 @@
|
|
|
11
11
|
`CHANGELOG.md` に残してあります。顧客向けの履歴は public 公開以降を対象とします。
|
|
12
12
|
-->
|
|
13
13
|
|
|
14
|
+
## 0.65.0
|
|
15
|
+
|
|
16
|
+
組織設定「各種マスタ設定」のセグメント・契約形態・事業年度設定を CLI から一覧・取得・作成・更新・削除できるようになりました(`twp segment` / `twp user-contract-type` / `twp fiscal-year`)。作成・更新・削除は管理者の権限が要ります。
|
|
17
|
+
|
|
18
|
+
`twp attendance report-category` / `report-reason` / `report-reason-detail` で、勤怠連絡の連絡区分・連絡理由・連絡理由詳細のマスタを一覧・作成・変更・削除できるようになりました(作成・変更・削除はテナント管理者)。紐づける区分・理由は名前で指定できます。
|
|
19
|
+
|
|
20
|
+
ループを回さない機からも、AIアカウント枠の利用状況と再ログイン期限をエージェントループ画面へ送れるようになりました(`twp task-loop capacity report`)。1回送って終わるので、systemd timer や cron で定期実行してください。claude-auto-switch を使っていない場合も、正準スキーマ(`twp.capacity/v1`)を標準出力へ出すラッパを `capacity_probe.command` に指定すれば使えます。
|
|
21
|
+
|
|
22
|
+
Backlog へのコメント投稿・課題更新で、通知先のユーザーを指定できるようになりました(`--notify`)。
|
|
23
|
+
|
|
24
|
+
エージェントループの計画AIが `plan submit` で計画を提出したとき、他の実行機が処理中のタスクや既にキューにあるタスクもその場で理由つきで返るようになりました。計画ごとに、何件積んで何をなぜ積まなかったかがログの `PLAN_RESULT:` 行で読めます。
|
|
25
|
+
|
|
14
26
|
## 0.64.0
|
|
15
27
|
|
|
16
28
|
`twp redmine` を追加しました。TWP の個人設定(外部システム連携)に登録した Redmine のチケット本文・コメント・添付を読めます(`issue get` / `attachment download` など)。書き込みはできません。
|
package/README.md
CHANGED
|
@@ -22,7 +22,7 @@ TWP(Tocca Working Platform)を、ターミナルから使うための CLI
|
|
|
22
22
|
| **できる** | `twp project` / `twp task` によるプロジェクト・タスクの読み書き(一覧・取得・作成・更新・削除・コメント) |
|
|
23
23
|
| **できる** | `twp user` によるテナントのユーザーの作成・更新・失効(退社)と招待(1件・CSV 一括・再送・取消)、ユーザーと所属(部署・役職)の参照(一覧・取得・所属の履歴)、所属の付け替え(異動)・作成・更新・終了・削除、在籍者の棚卸と人事台帳 CSV との突き合わせ。作成・更新・招待と取得、所属の書き込み、他人の所属の参照、棚卸は組織管理者の権限が要ります |
|
|
24
24
|
| **できる** | `twp skill` / `twp qualification` によるスキルマスタ・資格マスタの一覧、スキルマップの表示(部署で絞り込める)とスキル保有者の横断検索(所属付き)、自分のスキルプロファイルへの自己評価の提出(`--yes` が要ります)、`twp user skills` / `qualifications` / `trainings` / `contracts` によるユーザーのスキル評価・保有資格・研修受講履歴・雇用契約の参照。スキルマップと横断検索は HR管理者、雇用契約は原価管理者か管理者、研修履歴は人事管理の権限が要ります |
|
|
25
|
-
| **できる** | `twp department` / `twp position` / `twp job-title`
|
|
25
|
+
| **できる** | `twp department` / `twp position` / `twp job-title` / `twp segment` / `twp user-contract-type` / `twp fiscal-year` による組織マスタ(部署・役職・職位・セグメント・契約形態・事業年度設定)の一覧・取得・作成・更新・削除と、部署ツリー・部署の所属者の表示。作成・更新・削除は管理者の権限が要ります |
|
|
26
26
|
| **できる** | `twp inquiry category` による問い合わせカテゴリの一覧・取得・作成・更新(通知先の設定・末尾への並べ替えを含む)。取得・作成・更新は問い合わせ機能の管理者の権限が要ります |
|
|
27
27
|
| **できる** | `twp evaluation` / `twp goal-sheet` による人事評価と目標シートの読み取り(評価期間・見てよい範囲の評価と目標シートの一覧・部下の評価の状況・評価の詳細とプロジェクト別評価・自分の目標シート・受け取ったフィードバック)。書き込みはまだありません |
|
|
28
28
|
| **できる** | `twp support` によるシステムサポートへの依頼(依頼者側)の一覧・詳細(コメントの経過を含む)・起票(添付3件まで)・コメント・完了・再問い合わせ・取り下げと、カテゴリの一覧。運営側(回答・ステータス変更)は扱いません |
|
|
@@ -370,7 +370,7 @@ leader@example.com,admin
|
|
|
370
370
|
- `twp user invite list` に出るのは**期限内の未受諾の招待だけ**です。期限が切れた招待は再送も取消もできないので、`twp user invite create` で招待し直してください
|
|
371
371
|
- `resend` / `delete` はメールアドレスで指定します(未受諾の招待が1件に絞れたときだけ受け付けます)。トークンは招待を受諾できる秘密なので、`twp user invite list` では伏字で出ます(`--no-redact` で表示)
|
|
372
372
|
|
|
373
|
-
###
|
|
373
|
+
### 組織マスタ(部署・役職・職位・セグメント・契約形態・事業年度設定)を扱う
|
|
374
374
|
|
|
375
375
|
作成・更新・削除は管理者向けです。一覧・取得・ツリー・所属者は、ログインしていれば使えます。
|
|
376
376
|
|
|
@@ -385,6 +385,19 @@ twp department delete <部署> --yes
|
|
|
385
385
|
|
|
386
386
|
twp position list | get <役職> | create --code <コード> --name <役職名> [--rank <0〜9999>] [--manager true|false] … | update <役職> … | delete <役職> --yes
|
|
387
387
|
twp job-title list | get <職位> | create --code <コード> --name <職位名> [--position <役職>] … | update <職位> [--position <役職> | --no-position] … | delete <職位> --yes
|
|
388
|
+
twp segment list | get <セグメント> | create --code <コード> --name <セグメント名> [--sort-order <0〜9999>] [--status active|inactive] … | update <セグメント> … | delete <セグメント> --yes
|
|
389
|
+
|
|
390
|
+
twp user-contract-type list [--active true|false]
|
|
391
|
+
twp user-contract-type get <契約形態>
|
|
392
|
+
twp user-contract-type create --name <名前> --calculation-type <計算区分> [--code <コード>] [--monthly-hours <1〜744>] [--daily-hours <1〜24>] [--work-schedule 0111110] …
|
|
393
|
+
twp user-contract-type update <契約形態> [--active false] …
|
|
394
|
+
twp user-contract-type delete <契約形態> --yes
|
|
395
|
+
|
|
396
|
+
twp fiscal-year list
|
|
397
|
+
twp fiscal-year get <年度>
|
|
398
|
+
twp fiscal-year create <年度> --indirect-cost-rate <0〜100> --target-profit-rate <0〜100> [--description <説明>]
|
|
399
|
+
twp fiscal-year update <年度> [--indirect-cost-rate <0〜100>] [--target-profit-rate <0〜100>] [--description <説明>]
|
|
400
|
+
twp fiscal-year delete <年度> --yes
|
|
388
401
|
```
|
|
389
402
|
|
|
390
403
|
- **`<部署>` / `<役職>` / `<職位>`、`--parent`、`--position` は名前・コード・ID のどれでも指定できます。** 名前が複数に一致すれば候補を出して止まります。一覧は10分キャッシュするので、作成・改名の直後に名前で指定するときは `--refresh` を付けてください(ID ならそのまま通ります)
|
|
@@ -394,7 +407,10 @@ twp job-title list | get <職位> | create --code <コード> --name <職位名>
|
|
|
394
407
|
- `twp department tree` は現在有効な部署だけを親子の順に出します(table / text / tsv では `depth` と字下げした名前、`--output json` はサーバの木構造のまま)。無効な部署も含めた全件は `twp department list` です
|
|
395
408
|
- 一覧は API がページングを持たず、`--limit` 件(既定 1000)で打ち切ります。打ち切ったときは stderr で知らせます
|
|
396
409
|
- **所属者がいる(過去の所属履歴を含む)・子部署がある部署、所属から参照されている役職・職位は削除できません**(サーバが断ります)。そのときはサーバの理由に続けて、次に打つコマンドを案内します(部署は `--valid-to` で無効化、子部署は `--parent` で移す、役職・職位は `--status inactive` で無効化)。終了コードは 3 です
|
|
397
|
-
-
|
|
410
|
+
- **契約形態**は状態を `--active true|false` で切り替えます(役職・職位・セグメントの `--status` ではありません)。コードは任意なので、コードの無い契約形態は名前か ID で指定してください。計算区分(`--calculation-type`)は `salary_based`(一般従業員)/ `salary_executive`(役員)/ `salary_manager`(管理監督者)/ `hourly_based`(時給制)/ `contract_based`(業務委託)/ `other_exempt`(計算対象外)です。`--work-schedule` は**日曜始まり**(日月火水木金土)の 0 / 1 を7桁で指定します(月〜金なら `0111110`)。契約形態の一覧は全件を返します
|
|
411
|
+
- **事業年度設定**は年度(4桁の数字)で指定します。同じ年度の設定が既にあると `create` は断られるので `update` を使ってください。設定を消した年度はシステムの既定値で計算されます
|
|
412
|
+
- **プロジェクトから参照されているセグメント、契約(終了済みの履歴を含む)から参照されている契約形態も削除できません。** サーバの理由に続けて無効化のコマンド(セグメントは `--status inactive`、契約形態は `--active false`)を案内します
|
|
413
|
+
- ヘルプは `twp department help` / `twp position help` / `twp job-title help` / `twp segment help` / `twp user-contract-type help` / `twp fiscal-year help`
|
|
398
414
|
|
|
399
415
|
### スキル・資格・研修履歴を見る
|
|
400
416
|
|
|
@@ -991,6 +1007,27 @@ twp attendance flex-settlement [--month <YYYY-MM>] [--user <ユーザー>]
|
|
|
991
1007
|
- `team` は画面の「チームの勤怠」と同じ集計で、一人ずつのいまの打刻状態と今日の勤怠連絡・休暇を出します
|
|
992
1008
|
- `flex-settlement` はフレックス勤務制の人の清算期間の所定・実労働・過不足です。フレックス制でない人は `is_flex: false` を返します。他の人の分は勤怠の管理者か上長だけが見られます
|
|
993
1009
|
|
|
1010
|
+
### 勤怠連絡のマスタ(連絡区分・連絡理由・連絡理由詳細。テナント管理者)
|
|
1011
|
+
|
|
1012
|
+
```bash
|
|
1013
|
+
twp attendance report-category list [--status active|inactive] [--keyword <語>] [--limit <件数>]
|
|
1014
|
+
twp attendance report-category get <区分>
|
|
1015
|
+
twp attendance report-category create --code <コード> --name <名前> [--name-short <略称>] [--sort <0-9999>] [--status active|inactive] [--admin-only true|false] [--description <説明>]
|
|
1016
|
+
twp attendance report-category update <区分> [項目…]
|
|
1017
|
+
twp attendance report-category delete <区分> --yes
|
|
1018
|
+
twp attendance report-reason list [--category <区分>] [--status …] [--keyword <語>]
|
|
1019
|
+
twp attendance report-reason create --code <コード> --name <名前> [--category <区分>]… [--sort …] [--status …] [--admin-only …] [--description …]
|
|
1020
|
+
twp attendance report-reason get | update | delete <理由>
|
|
1021
|
+
twp attendance report-reason-detail list [--reason <理由>] [--status …] [--keyword <語>]
|
|
1022
|
+
twp attendance report-reason-detail create --code <コード> --name <名前> [--reason <理由>]… [--yearly-count true|false] [--sort …] [--status …] [--admin-only …] [--description …]
|
|
1023
|
+
twp attendance report-reason-detail get | update | delete <理由詳細>
|
|
1024
|
+
```
|
|
1025
|
+
|
|
1026
|
+
- 画面「各種マスタ設定 > 連絡区分/連絡理由/連絡理由詳細」と同じものです。作成・変更・削除はテナント管理者だけができます(閲覧は誰でもできます)
|
|
1027
|
+
- 対象と紐づけ先(`--category` / `--reason`)は名前・コード・ID の完全一致で指定します。無効にしたものも候補に入ります。一致しない・複数当たるときは候補を出して終了コード 2 で止まります。作った直後の区分も名前で指定できます
|
|
1028
|
+
- 紐づけ先は繰り返して複数指定できます。**`create` で省くと、サーバがその時点で有効な区分(理由)すべてに紐づけます。** `update` で指定すると紐づけを置き換えます(足すのではありません)
|
|
1029
|
+
- 削除は子 → 親の順です(理由詳細 → 理由 → 区分)。子が紐づいているとサーバが断り、その文面と、紐づく子を確かめるコマンドを出します。今後使わないだけなら `update <対象> --status inactive` で無効にできます
|
|
1030
|
+
|
|
994
1031
|
### 残業・締め状況を見る(勤怠の管理者)
|
|
995
1032
|
|
|
996
1033
|
```bash
|
|
@@ -1846,7 +1883,35 @@ twp task-loop plan submit --file plan.json --check # 検査だけ(提出し
|
|
|
1846
1883
|
|
|
1847
1884
|
- **計画フェーズの中でだけ使えます。** ループが計画AIを起動するときにだけ鍵(環境変数 `TWP_LOOP_PLAN_TOKEN` / `TWP_LOOP_PLAN_DIR`)を渡し、計画フェーズが終わると無効にします。それ以外で打つと終了コード `2` で拒否します
|
|
1848
1885
|
- 計画の形は応答の文章に書く場合と同じ `{"steps": [{"skill": "...", "args": "...", "label": "...", "priority": "P2"}]}` です。step ごとに受理/棄却と理由(存在しないスキル・`/twp-` 付きのスキル名・雛形のままのタスクキー・同じタスクキーの重複・型の誤り)を表と JSON で表示し、棄却が1件でもあれば何も提出せず終了コード `1` で終わります。直して出し直すと、最後に受理された提出が有効です
|
|
1849
|
-
-
|
|
1886
|
+
- **他ランナーが処理中・キュー待ち・直近に同じスキルが状態を進めたタスクキーも、提出時に棄却します。** 判定はループが計画AIを起動する直前に取った実測の写しで行います。写しを取れなかった検査は「提出時には効いていません」と表示します(「直近に状態を進めた」は台帳に契約行が記録された実行だけを見ます。それ以外はエンキュー時に判定されます)
|
|
1887
|
+
- **提出しただけではキューに積まれません。** 計画AIの終了後にループが一度に登録します(計画AIが走る間に状態が変わるので、上の検査はこのとき改めて行います)。提出が無いときは、従来どおり応答の文章から計画を取り出します
|
|
1888
|
+
- 計画1回ごとに、ループのログと計画のログ(`plan-<時刻>-<サイクル>.log`)の末尾へ `PLAN_RESULT: {...}` の1行を残します。`source`(`submit`=提出 / `text`=文章から取り出し / `none`)・`planned`・`enqueued`・`dropped`(積まなかった step とその理由)・`unchecked`(提出時に効いていなかった検査)・`rejected_submissions`(`plan submit` で棄却された提出と理由。新しい順に最大5件)が読めます。計画AIが失敗した・中断したサイクルには出ません
|
|
1889
|
+
|
|
1890
|
+
### ループを回さない機から枠情報だけを送る(`capacity report`)
|
|
1891
|
+
|
|
1892
|
+
```bash
|
|
1893
|
+
twp task-loop capacity report --project <キー|UUID>
|
|
1894
|
+
```
|
|
1895
|
+
|
|
1896
|
+
- **AI アカウント枠の観測値を1回だけ送って終わります(常駐しません)。** 自前のループを使っていて `twp task-loop run` を回さない機でも、エージェントループ画面に枠の利用状況・再ログイン期限を出せます。定期実行は systemd timer / cron / launchd に任せてください(目安は300秒ごと)
|
|
1897
|
+
- 設定はループと同じ `~/.twp/loops/<プロジェクトUUID>.json` の `capacity_probe` を読みます(任意のコマンドを実行するため、サーバ側の設定には置けません)。claude-auto-switch を使っていない場合も、**正準スキーマ `twp.capacity/v1` の JSON を標準出力へ出すラッパ**を `command` に指定し、`format` を既定のままにすれば使えます
|
|
1898
|
+
|
|
1899
|
+
```json
|
|
1900
|
+
{
|
|
1901
|
+
"capacity_probe": {
|
|
1902
|
+
"command": ["claude-auto-switch", "status", "--json"],
|
|
1903
|
+
"format": "claude_auto_switch/v1"
|
|
1904
|
+
}
|
|
1905
|
+
}
|
|
1906
|
+
```
|
|
1907
|
+
|
|
1908
|
+
ラッパを使う場合は `{"capacity_probe": {"command": ["/path/to/my-capacity-wrapper"]}}` のように `format` を省略します(既定 `twp.capacity/v1`)。`generated_at` には出力した時刻ではなく実測した時刻を入れてください
|
|
1909
|
+
- **timer / cron にはループと同じ環境を渡してください。** 実行機の識別子(runner_id)は状態ディレクトリ(`TWP_OPS_STATE_DIR`、未指定なら `~/.twp-task-loop`、それが無く `~/.twp-ops` があればそちら)の `runner-id` か `RUNNER_ID` から決まります。対話シェルと timer で `HOME` や `TWP_OPS_STATE_DIR` が違うと別の実行機として登録されます。状態ディレクトリへ書けない場合は送らずに終了コード `1` で終わります
|
|
1910
|
+
|
|
1911
|
+
- 画面には「枠報告のみ」の実行機として表示され、ループの台数上限・稼働台数には数えられません
|
|
1912
|
+
- プローブが失敗したときは、直前の成功から30分以内ならその値を送り、それより古ければ失敗を送ります(ループと同じ規則。直前の成功値は伏字済みの送信値だけを状態ディレクトリに控えます。実行間隔を30分以上にすると使い回しは効きません)
|
|
1913
|
+
- `twp task-loop` の他のサブコマンドと違い、自動アップデートの対象です(ループを回さない機には専用の更新経路が無いため)
|
|
1914
|
+
- 終了コード: 送れたら `0`(プローブが失敗して失敗を送れた場合も `0`)。`capacity_probe` が未設定なら何もせず `0`。**同じ機が同じプロジェクトでループとして登録済みなら送らずに `0`**(ループが動いている間は heartbeat で送られます。止めたループの登録が残っている間も同じです)。送信自体に失敗したら `1`
|
|
1850
1915
|
|
|
1851
1916
|
### 必要なもの
|
|
1852
1917
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-MI6HVYR2.js";import{readBody}from"./chunk-6LSQCOCJ.js";import{AGENT_REPOSITORIES_PATH,AGENT_SESSIONS_PATH}from"./chunk-
|
|
3
|
+
import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-MI6HVYR2.js";import{readBody}from"./chunk-6LSQCOCJ.js";import{AGENT_REPOSITORIES_PATH,AGENT_SESSIONS_PATH}from"./chunk-ZSPWHEBL.js";import{isSafePathSegment}from"./chunk-HVZUXLQ4.js";import{ApiError}from"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import{requireResolved,withResolved}from"./chunk-PS5QFKHB.js";import"./chunk-II5RVJQN.js";import{isRecord,pick}from"./chunk-3ZRMMBP5.js";
|
|
4
4
|
import{ApiRejectedError,ApiResponseError,NetworkError,UsageError,WaitTimeoutError}from"./chunk-VFPY2A23.js";import{NotLoggedInError,SessionExpiredError}from"./chunk-XNLIEUAW.js";import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var SESSION_COLUMNS=["sessionId","status","repositoryFullName","baseBranch","workBranch","prUrl","aiModel","myRole","createdAt"];var SESSION_GET_COLUMNS=["sessionId","status","repositoryFullName","repositoryId","baseBranch","workBranch","branchName","prUrl","errorMessage","aiProvider","aiModel","sessionMode","executionMode","masterUserName","myRole","createdAt","updatedAt","completedAt","instructions"];var CHAT_COLUMNS=["timestamp","role","user_name","content"];var REPOSITORY_COLUMNS=["id","full\
|
|
5
5
|
_name","default_branch","private"];var BRANCH_COLUMNS=["name","protected"];var DIFF_COLUMNS=["path","status","additions","deletions"];var INSTRUCTION_MAX_CHARS=1e4;var ACTIVE=new Set(["created","pending","provisioning","running"]);var FAILED=new Set(["failed","cancelled","expired"]);var WAIT_POLL_INTERVAL_MS=5e3;var WAIT_DEFAULT_SECONDS=300;var WAIT_MAX_SECONDS=540;var WAIT_CHAT_SCAN_LIMIT=2e3;var sleep=ms=>new Promise(resolve=>setTimeout(resolve,ms));var SESSION_REF_HELP="<\u30BB\u30C3\u30B7\u30E7\u30F3> \u306F\u30BB\u30C3\u30B7\u30E7\u30F3 ID\uFF08twp \
|
|
6
6
|
agent session list \u306E sessionId \u5217\uFF09\u3067\u3059\u3002";var CREDIT_CONFIRMATION="AI \u30AF\u30EC\u30B8\u30C3\u30C8\u3092\u6D88\u8CBB\u3059\u308B\u64CD\u4F5C";function usageOf(op){return`twp agent ${op} help`}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(" ")}`,usageOf(op))}function single(input,op,label,hint){const values=input.args.map(arg=>arg.trim());if(values.length>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{stepToItem}from"./chunk-
|
|
4
|
-
import{acknowledgement,isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import"./chunk-PMOUHEJQ.js";import"./chunk-J7QYPKVK.js";import"./chunk-5WGOHFAS.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var LABEL="\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u30EB\u30FC\u30D7\u306E\u30A2\u30A4\u30C6\u30E0";var STATUSES=["pending","processing","completed","failed"];var AI_TYPES=["claude","gemini","codex","copilot"];var EFFORTS=["low","medium","high","xhigh","max"];var PRIORITIES=["P0","P1","P2","P3"];var LIST_COLUMNS=["item_id","status","task_key","label","ai_type","ai_effort","runner_id","created_at"];var GET_COLUMNS=["item_id","status","task_key","label","prompt","ai_type","ai_model","ai_effort","runn\
|
|
3
|
+
import{stepToItem}from"./chunk-UODNIEO2.js";import"./chunk-DXUFECE7.js";import{loadLocalConfig}from"./chunk-CGHGQAEM.js";import{loadAiConfig}from"./chunk-AEJHDFXB.js";import"./chunk-G4TZFGNN.js";import"./chunk-N2UVRM3Z.js";import"./chunk-SPZ3GBYC.js";import"./chunk-GY7KI5E5.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-MI6HVYR2.js";import{requireResolved,singleRef,withResolved}from"./chunk-PS5QFKHB.js";
|
|
4
|
+
import"./chunk-II5RVJQN.js";import{acknowledgement,isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import"./chunk-PMOUHEJQ.js";import"./chunk-J7QYPKVK.js";import"./chunk-5WGOHFAS.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var LABEL="\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u30EB\u30FC\u30D7\u306E\u30A2\u30A4\u30C6\u30E0";var STATUSES=["pending","processing","completed","failed"];var AI_TYPES=["claude","gemini","codex","copilot"];var EFFORTS=["low","medium","high","xhigh","max"];var PRIORITIES=["P0","P1","P2","P3"];var LIST_COLUMNS=["item_id","status","task_key","label","ai_type","ai_effort","runner_id","created_at"];var GET_COLUMNS=["item_id","status","task_key","label","prompt","ai_type","ai_model","ai_effort","runn\
|
|
5
5
|
er_id","attempt_count","reclaim_count","error_message","created_by_name","created_at","started_at","completed_at"];var HISTORY_COLUMNS=["item_id","status","task_key","skill","ai_type","runner_id","duration_ms","cost_usd","created_at"];var PROJECT_FLAG={name:"--project",summary:"\u30AD\u30E5\u30FC\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\uFF08\u30B3\u30FC\u30C9\u307E\u305F\u306F ID\u3002\u7701\u7565\u6642\u306F TWP_PROJECT / .twp/config.json / ~/.twp/config.json\uFF09",takesValue:true,placeholder:"\
|
|
6
6
|
<\u30B3\u30FC\u30C9|ID>"};var ITEM_FLAG={name:"--item",summary:"\u30A2\u30A4\u30C6\u30E0\u306E ID\uFF08item_id\uFF09\u3002\u4F4D\u7F6E\u5F15\u6570\u3068\u540C\u3058\u610F\u5473\uFF08\u4E21\u65B9\u6307\u5B9A\u306F\u30A8\u30E9\u30FC\uFF09",takesValue:true,placeholder:"<\u30A2\u30A4\u30C6\u30E0ID>"};var FORBIDDEN_CORE="\u30C6\u30CA\u30F3\u30C8\u306E\u7BA1\u7406\u8005\uFF08admin \u30ED\u30FC\u30EB\uFF09\u306E\u6A29\u9650\u304C\u5FC5\u8981\u3067\u3059\uFF08\u500B\u4EBA\u30AD\u30E5\u30FC\u3092\u9664\u304F\uFF09";
|
|
7
7
|
var CREATE_HINT="\u30A2\u30A4\u30C6\u30E0\u306E\u6295\u5165\uFF08twp agent-loop create\uFF09\u306F\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30E1\u30F3\u30D0\u30FC\u306A\u3089\u7BA1\u7406\u8005\u3067\u306A\u304F\u3066\u3082\u884C\u3048\u307E\u3059";var FORBIDDEN_UPDATE=`\u30AD\u30E5\u30FC\u306E\u30A2\u30A4\u30C6\u30E0\u306E\u66F4\u65B0\u306B\u306F${FORBIDDEN_CORE}\u3002\u5B9F\u884C\u4E2D\u306E\u30A2\u30A4\u30C6\u30E0\u3078\u306E\u66F8\u304D\u623B\u3057\u3060\u3051\u306F\u3001\u305D\u306E\u30A2\u30A4\u30C6\u30E0\u3092 claim \u3057\u305F\u30EB\u30FC\u30D7\u81EA\u8EAB\u304C run_id \u3092\u6DFB\u3048\u3066\u884C\u3048\u307E\u3059\u3002`+
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{failureHint,isAuthError,isCliFatalText,isRateLimited,isServerAiType,isUntrusted,maxTurnsReached,rateLimitWaitSeconds,tailForScan}from"./chunk-ZOOEH7ZE.js";import{
|
|
4
|
-
detectClaudeAutoSwitch,isClaudeAi,isUsableModelId,modelFitsRoute,resolveSpawnTarget,usesBedrock,wrapWithAutoSwitch}from"./chunk-AEJHDFXB.js";import{isForceOnly,killProcessTree,system32}from"./chunk-N2UVRM3Z.js";import"./chunk-
|
|
3
|
+
import{failureHint,isAuthError,isCliFatalText,isRateLimited,isServerAiType,isUntrusted,maxTurnsReached,rateLimitWaitSeconds,tailForScan}from"./chunk-ZOOEH7ZE.js";import{expandServerSkills,prepareSkillOverlay}from"./chunk-FAHDBWW2.js";import"./chunk-YJZT3UD3.js";import{detectAiClis}from"./chunk-T4QZO6RQ.js";import"./chunk-A4LFG7MW.js";import"./chunk-VRBI2NPI.js";import{ClaudeStreamRenderer}from"./chunk-DXUFECE7.js";import{DEFAULT_CLAUDE_LAUNCHER,activeSlotPath,
|
|
4
|
+
detectClaudeAutoSwitch,isClaudeAi,isUsableModelId,modelFitsRoute,resolveSpawnTarget,usesBedrock,wrapWithAutoSwitch}from"./chunk-AEJHDFXB.js";import{isForceOnly,killProcessTree,system32}from"./chunk-N2UVRM3Z.js";import"./chunk-SPZ3GBYC.js";import"./chunk-GY7KI5E5.js";import"./chunk-VFPY2A23.js";import{findExecutable,isWindowsDriveAbsolute}from"./chunk-PMOUHEJQ.js";import"./chunk-J7QYPKVK.js";import"./chunk-5WGOHFAS.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";
|
|
5
5
|
import"./chunk-VSJBJXZO.js";import{spawnSync}from"child_process";import fs2 from"fs";import path2 from"path";import{spawn}from"child_process";import fs from"fs";import path from"path";var DEFAULT_AI_TIMING={abortGraceMs:5e3,abortReapMs:2e3,pollIntervalMs:5e3};function resolveTiming(over){return{abortGraceMs:over?.abortGraceMs??DEFAULT_AI_TIMING.abortGraceMs,abortReapMs:over?.abortReapMs??DEFAULT_AI_TIMING.abortReapMs,pollIntervalMs:over?.pollIntervalMs??DEFAULT_AI_TIMING.pollIntervalMs}}var MAX_RETAINED_BYTES=4*1024*1024;function closeStream(stream){return new Promise(resolve=>{if(stream===null)return resolve();stream.once("error",()=>resolve());stream.end(()=>resolve())})}function buildArgs(req,cfg,env,workspace){
|
|
6
6
|
const warnings=[];const requested=(req.model??"").trim();const usable=requested!==""&&isUsableModelId(requested);if(requested!==""&&!usable){warnings.push(`ai_model '${requested}' \u306F\u4F7F\u3048\u306A\u3044\u5F62\u3067\u3059 \u2192 \u30AB\u30C6\u30B4\u30EA\u65E2\u5B9A\u306E\u30E2\u30C7\u30EB\u3092\u4F7F\u3044\u307E\u3059`)}const fitsRoute=!usable||!isClaudeAi(req.ai)||modelFitsRoute(requested,env);if(usable&&!fitsRoute){warnings.push(`ai_model '${requested}' \u306F\u73FE\u5728\u306E\u5B9F\u884C\u7D4C\u8DEF\u3067\u306F\u89E3\u6C7A\u3067\u304D\u307E\u305B\u3093\uFF08\u3053\u306E\u6A5F\u4F53\u306F ${usesBedrock(
|
|
7
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`)}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
|
+
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
+
import{FROM_FLAG,MANHOUR_DESCRIPTION,MANHOUR_FROM_FLAG,MANHOUR_TO_FLAG,MONTH_FLAG,TO_FLAG,analysisDomain,analysisForbidden,currentMonth,dataOf,listIn,manhourNotes,manhourQuery,manhourRows,monthRange,monthsBetween,noArgs,profitRows,rangeNotes,recordOf,staffKpiRows,workloadDistributionNotes,workloadDistributionRows}from"./chunk-5AQ2JPIS.js";import"./chunk-ZJW3GBE5.js";import"./chunk-EXT4AIDF.js";import"./chunk-SCU74Z4U.js";import"./chunk-JJSBBWJ5.js";import"./chunk-MI6HVYR2.js";
|
|
4
|
+
import"./chunk-RX5HWI4L.js";import"./chunk-6LSQCOCJ.js";import"./chunk-ZSPWHEBL.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import"./chunk-PS5QFKHB.js";import"./chunk-II5RVJQN.js";import"./chunk-3ZRMMBP5.js";import"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.js";import"./chunk-RZVI6PMW.js";import"./chunk-QQRJLH6B.js";import"./chunk-NHYMHCAT.js";
|
|
5
|
+
import"./chunk-VSJBJXZO.js";export{FROM_FLAG,MANHOUR_DESCRIPTION,MANHOUR_FROM_FLAG,MANHOUR_TO_FLAG,MONTH_FLAG,TO_FLAG,analysisDomain,analysisForbidden,currentMonth,dataOf,listIn,manhourNotes,manhourQuery,manhourRows,monthRange,monthsBetween,noArgs,profitRows,rangeNotes,recordOf,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-QSXS5SB2.js";import{boundedText}from"./chunk-JJSBBWJ5.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,positiveInteger}from"./chunk-MI6HVYR2.js";import{readBody}from"./chunk-6LSQCOCJ.js";import{ANNOUNCEMENTS_PATH}from"./chunk-
|
|
3
|
+
import{composeDocument,htmlToText,metaLine}from"./chunk-QSXS5SB2.js";import{boundedText}from"./chunk-JJSBBWJ5.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,positiveInteger}from"./chunk-MI6HVYR2.js";import{readBody}from"./chunk-6LSQCOCJ.js";import{ANNOUNCEMENTS_PATH}from"./chunk-ZSPWHEBL.js";import{isSafePathSegment}from"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import{requireResolved,withResolved}from"./chunk-PS5QFKHB.js";
|
|
4
4
|
import"./chunk-II5RVJQN.js";import{isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.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,9 +1,9 @@
|
|
|
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{describeWaitResult,parseWaitOptions,waitUntilTerminal}from"./chunk-WVCEKC7V.js";import{NO_REDACT_FLAG,NO_REDACT_NOTICE,exitCodeFor,fetchAllPages,reportError}from"./chunk-
|
|
4
|
-
import{redactSecretValues,redactSecrets,withDebug}from"./chunk-UFGJSWKU.js";import
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
import{CommandModelMissingError,MAX_REPORTED_VIOLATIONS,loadCommandModelDomain,loadCommandModelRoutes,validateBody,validateQuery}from"./chunk-NZ7WI4RZ.js";import{describeWaitResult,parseWaitOptions,waitUntilTerminal}from"./chunk-WVCEKC7V.js";import{NO_REDACT_FLAG,NO_REDACT_NOTICE,exitCodeFor,fetchAllPages,reportError}from"./chunk-2G6ZZPME.js";import"./chunk-YASL34FY.js";import"./chunk-Q3B65OFC.js";import{evaluateQuery}from"./chunk-GFLGXGWE.js";import{renderOutput}from"./chunk-YXVN6OCH.js";
|
|
4
|
+
import{redactSecretValues,redactSecrets,withDebug}from"./chunk-UFGJSWKU.js";import{DEFAULT_MAX_ITEMS,DEFAULT_MAX_PAGES,envelopePaging,isPageNumberEnvelope,pageRangeNotes,positiveInteger,readEnvelopeCursor,readPageNumberCursor,shellQuote}from"./chunk-MI6HVYR2.js";import{parseOperationArgs,repeatedValues}from"./chunk-RX5HWI4L.js";import{readBody}from"./chunk-6LSQCOCJ.js";import"./chunk-ZSPWHEBL.js";import"./chunk-HVZUXLQ4.js";import{ApiError,TwpApiClient,appendQuery}from"./chunk-JA5A6UJ2.js";
|
|
5
|
+
import"./chunk-H4CDX4TX.js";import"./chunk-II5RVJQN.js";import"./chunk-3ZRMMBP5.js";import{ApiResponseError,EXIT_OK,EXIT_WAIT_TIMEOUT,NetworkError,UsageError}from"./chunk-VFPY2A23.js";import{GLOBAL_OPTIONS_HELP}from"./chunk-PECIBNFD.js";import{AuthSession,NotLoggedInError,SessionExpiredError,loadCredentials}from"./chunk-XNLIEUAW.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import{effectiveApiUrl,resolveConfiguredOutput,resolveProfile}from"./chunk-4VZKNEVN.js";
|
|
6
|
+
import"./chunk-RZVI6PMW.js";import{HELP_TOKEN}from"./chunk-YYURQG4E.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.
|
|
8
8
|
segments[i]!==null;if(aLiteral!==bLiteral)return aLiteral?-1:1}return 0}function lookupRoute(routes,method,path){const segments=splitSegments(path);const hits=parseRoutes(routes).filter(route=>matches(route,segments));const sameMethod=hits.filter(route=>route.method===method).sort(compareSpecificity);const best=sameMethod[0];if(best!==void 0)return{kind:"matched",domain:best.domain,template:best.template};if(hits.length>0){const[top]=[...hits].sort(compareSpecificity);const template=top.template;
|
|
9
9
|
const methods=[...new Set(hits.filter(route=>route.template===template).map(route=>route.method))].sort();return{kind:"method-mismatch",template,methods}}return{kind:"unknown"}}function pickOperation(operations,method,template){return operations.find(op=>op.method===method&&op.path===template)??null}async function suggestRoutes(routes,path,limit=5){const{default:fuzzysort}=await import("./fuzzysort-DFVKV4B4.js");const parsed=parseRoutes(routes);const templates=[...new Set(parsed.map(route=>route.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{RESIDENT_TOKEN_CAP,activateModeFiles,activatePermissionSettings,buildResidentSet,buildSystemPrompt,createAuditLogger,createTwpToolkit,currentBranch,describeAuditLog,describeToolCatalog,displayCwd,executeTool,findProjectTwpSubdir,localTools,lstatOrNull,parseFrontMatter,parseRule,persistProjectAllow,projectPermissionsPath,projectRootFor,readFileTool,residentInputs,resolveGitExecutable,runTurn,secretReason}from"./chunk-7PDUN5MS.js";import"./chunk-
|
|
4
|
-
|
|
5
|
-
import"./chunk-XNLIEUAW.js";import{proxyDiagnostics}from"./chunk-J7QYPKVK.js";import{checkMinSupportedVersion,isBelowMinSupported,minSupportedBlockMessage}from"./chunk-DXXFUNYN.js";import"./chunk-4VZKNEVN.js";import{configReadDirs,twpHomeDir}from"./chunk-RZVI6PMW.js";import{parseArgv}from"./chunk-
|
|
3
|
+
import{RESIDENT_TOKEN_CAP,activateModeFiles,activatePermissionSettings,buildResidentSet,buildSystemPrompt,createAuditLogger,createTwpToolkit,currentBranch,describeAuditLog,describeToolCatalog,displayCwd,executeTool,findProjectTwpSubdir,localTools,lstatOrNull,parseFrontMatter,parseRule,persistProjectAllow,projectPermissionsPath,projectRootFor,readFileTool,residentInputs,resolveGitExecutable,runTurn,secretReason}from"./chunk-7PDUN5MS.js";import{buildDiffLines,diffStat}from"./chunk-VRBI2NPI.js";
|
|
4
|
+
import"./chunk-NZ7WI4RZ.js";import"./chunk-UFGJSWKU.js";import"./chunk-N2UVRM3Z.js";import"./chunk-ZSPWHEBL.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import"./chunk-II5RVJQN.js";import"./chunk-VFPY2A23.js";import{RelayError,builtinCatalog,createRuntime,loadCachedCatalog,modelLabel,pickModel,toModelInfos}from"./chunk-5WTFZJT7.js";import"./chunk-D233KKXW.js";import"./chunk-PMOUHEJQ.js";
|
|
5
|
+
import"./chunk-XNLIEUAW.js";import{proxyDiagnostics}from"./chunk-J7QYPKVK.js";import{checkMinSupportedVersion,isBelowMinSupported,minSupportedBlockMessage}from"./chunk-DXXFUNYN.js";import"./chunk-4VZKNEVN.js";import{configReadDirs,twpHomeDir}from"./chunk-RZVI6PMW.js";import{parseArgv}from"./chunk-WG6NCT4L.js";import{applyPermissionMode,checkPermission,describePermissionMode,getMode,isModeId,modeSource,nextMode}from"./chunk-2LOT54OO.js";import"./chunk-YYURQG4E.js";
|
|
6
6
|
import"./chunk-QQRJLH6B.js";import{isFullWidth,isWide,stringWidth,stripAnsi}from"./chunk-UREA4ZIG.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import{require_fuzzysort}from"./chunk-DIMZRTLE.js";import{__commonJS,__export,__require,__toESM}from"./chunk-VSJBJXZO.js";var require_react_production=__commonJS({"node_modules/react/cjs/react.production.js"(exports){"use strict";var REACT_ELEMENT_TYPE=Symbol.for("react.transitional.element");var REACT_PORTAL_TYPE=Symbol.for("react.portal");var REACT_FRAGMENT_TYPE=Symbol.for("react.fragment");var REACT_STRICT_MODE_TYPE=Symbol.for("react.strict_mode");var REACT_PROFILER_TYPE=Symbol.for("react.profiler");var REACT_CONSUMER_TYPE=Symbol.for("react.consumer");var REACT_CONTEXT_TYPE=Symbol.for("react.context");var REACT_FORWARD_REF_TYPE=Symbol.
|
|
7
7
|
for("react.forward_ref");var REACT_SUSPENSE_TYPE=Symbol.for("react.suspense");var REACT_MEMO_TYPE=Symbol.for("react.memo");var REACT_LAZY_TYPE=Symbol.for("react.lazy");var REACT_ACTIVITY_TYPE=Symbol.for("react.activity");var REACT_VIEW_TRANSITION_TYPE=Symbol.for("react.view_transition");var MAYBE_ITERATOR_SYMBOL=Symbol.iterator;function getIteratorFn(maybeIterable){if(null===maybeIterable||"object"!==typeof maybeIterable)return null;maybeIterable=MAYBE_ITERATOR_SYMBOL&&maybeIterable[MAYBE_ITERATOR_SYMBOL]||
|
|
8
8
|
maybeIterable["@@iterator"];return"function"===typeof maybeIterable?maybeIterable:null}var ReactNoopUpdateQueue={isMounted:function(){return false},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}};var assign=Object.assign;var emptyObject={};function Component(props,context,updater){this.props=props;this.context=context;this.refs=emptyObject;this.updater=updater||ReactNoopUpdateQueue}Component.prototype.isReactComponent={};Component.prototype.setState=
|
|
@@ -1212,7 +1212,7 @@ cwd()){const listed=await gitListFiles(cwd2);const raw=listed??await walkFiles(c
|
|
|
1212
1212
|
1;const after=/^[^\s]*/.exec(text.slice(cursor))?.[0]??"";return{query,start,end:cursor+after.length}}var TWP_SLASH_ROUTES={"/tasks":{domain:"task",operation:"list"},"/task":{domain:"task",operation:"get"},"/projects":{domain:"project",operation:"list"}};function isTwpSlashCommand(name){return Object.hasOwn(TWP_SLASH_ROUTES,name)}async function runTwpSlashCommand(name,args,deps){const route=TWP_SLASH_ROUTES[name];if(!Object.hasOwn(TWP_SLASH_ROUTES,name)||route===void 0){return{code:2,out:"",err:`\u4E0D\u660E\u306A\u30B3\u30DE\u30F3\u30C9: ${name}
|
|
1213
1213
|
`}}const parsed=parseArgv([route.domain,route.operation,...args]);if(parsed.command!=="domain"||parsed.domain!==route.domain){return{code:2,out:"",err:`${name}: \u3053\u306E\u5F15\u6570\u306F\u4F7F\u3048\u307E\u305B\u3093\uFF08${args.join(" ")}\uFF09
|
|
1214
1214
|
`}}if(parsed.unknown.length>0){return{code:2,out:"",err:`\u4E0D\u660E\u306A\u5F15\u6570: ${parsed.unknown.join(" ")}
|
|
1215
|
-
`}}let out="";let err="";const io={out:text=>void(out+=text),err:text=>void(err+=text),isTty:true};const globals={profile:parsed.profile??deps.profile,...parsed.output!==void 0?{output:parsed.output}:{},...parsed.query!==void 0?{query:parsed.query}:{},dryRun:parsed.dryRun,debug:parsed.debug,yes:parsed.yes,refresh:parsed.refresh};const{runDomain}=await import("./run-
|
|
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-RLV6W5JA.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,7 +1,7 @@
|
|
|
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-
|
|
4
|
-
ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.js";import"./chunk-RZVI6PMW.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\
|
|
3
|
+
import{PUNCH_TYPES,assertMonthOpen,attendanceDomain}from"./chunk-ZJW3GBE5.js";import{dateFlag,monthFlag}from"./chunk-EXT4AIDF.js";import"./chunk-SCU74Z4U.js";import"./chunk-JJSBBWJ5.js";import"./chunk-MI6HVYR2.js";import"./chunk-RX5HWI4L.js";import"./chunk-6LSQCOCJ.js";import"./chunk-ZSPWHEBL.js";import{isSafePathSegment}from"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import{requireResolved,withResolved}from"./chunk-PS5QFKHB.js";
|
|
4
|
+
import"./chunk-II5RVJQN.js";import{isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiRejectedError,ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.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\
|
|
7
7
|
ask_id","memo","is_manual","deleted_at"];var LABELS={clock_in:"\u51FA\u52E4",clock_out:"\u9000\u52E4",break_start:"\u4F11\u61A9\u958B\u59CB",break_end:"\u4F11\u61A9\u7D42\u4E86",switch:"\u5207\u66FF"};var TYPE_ORDER={break_start:1,break_end:2,switch:3,clock_out:4,clock_in:5};function zonedParts(epochMs,timeZone){const parts=new Intl.DateTimeFormat("en-US",{timeZone,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hourCycle:"h23"}).formatToParts(new Date(
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{hoursMinutes}from"./chunk-
|
|
4
|
-
import"./chunk-RZVI6PMW.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";
|
|
3
|
+
import{hoursMinutes}from"./chunk-ZJW3GBE5.js";import{monthFlag}from"./chunk-EXT4AIDF.js";import"./chunk-SCU74Z4U.js";import"./chunk-JJSBBWJ5.js";import"./chunk-MI6HVYR2.js";import"./chunk-RX5HWI4L.js";import"./chunk-6LSQCOCJ.js";import"./chunk-ZSPWHEBL.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import"./chunk-PS5QFKHB.js";import"./chunk-II5RVJQN.js";import{isRecord,pick}from"./chunk-3ZRMMBP5.js";
|
|
4
|
+
import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.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
|
|
7
7
|
--month \u304C\u7121\u3051\u308C\u3070\u4ECA\u6708\u3067\u3059\uFF08\u30C6\u30CA\u30F3\u30C8\u306E\u696D\u52D9\u65E5\u306E\u533A\u5207\u308A\u3067\u30B5\u30FC\u30D0\u304C\u6C7A\u3081\u307E\u3059\uFF09\u3002
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{readBody}from"./chunk-6LSQCOCJ.js";import{BACKLOG_BASE_PATH,BACKLOG_PROJECT_SCOPE_LABEL,BACKLOG_SCOPE_LABEL,backlogSpacePath,isExactNumericId,resolveNamed}from"./chunk-
|
|
4
|
-
import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var DEFAULT_COUNT=20;var MAX_COUNT=100;var NUMERIC=/^[0-9]+$/;var ISSUE_REF=/^(?:[A-Za-z0-9_]+-[0-9]+|[0-9]+)$/;var DATE=/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/;var SPACE_COLUMNS=["id","space_url"];var PROJECT_COLUMNS=["id","projectKey","name"];var ISSUE_LIST_COLUMNS=["issueKey","summary","status","assignee","priority","dueDate","updated","descriptionTruncated"];var ISSUE_GET_COLUMNS=["id","issueKey","projectId","summary","description","descriptionTruncated","status","issueType","priority","assignee","cr\
|
|
3
|
+
import{repeatedValues}from"./chunk-RX5HWI4L.js";import{readBody}from"./chunk-6LSQCOCJ.js";import{BACKLOG_BASE_PATH,BACKLOG_PROJECT_SCOPE_LABEL,BACKLOG_SCOPE_LABEL,backlogSpacePath,isExactNumericId,resolveNamed}from"./chunk-ZSPWHEBL.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import{requireResolved,singleRef,withResolved}from"./chunk-PS5QFKHB.js";import"./chunk-II5RVJQN.js";import{isRecord,pick}from"./chunk-3ZRMMBP5.js";
|
|
4
|
+
import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.js";import"./chunk-RZVI6PMW.js";import"./chunk-QQRJLH6B.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var DEFAULT_COUNT=20;var MAX_COUNT=100;var NUMERIC=/^[0-9]+$/;var ISSUE_REF=/^(?:[A-Za-z0-9_]+-[0-9]+|[0-9]+)$/;var DATE=/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/;var SPACE_COLUMNS=["id","space_url"];var PROJECT_COLUMNS=["id","projectKey","name"];var ISSUE_LIST_COLUMNS=["issueKey","summary","status","assignee","priority","dueDate","updated","descriptionTruncated"];var ISSUE_GET_COLUMNS=["id","issueKey","projectId","summary","description","descriptionTruncated","status","issueType","priority","assignee","cr\
|
|
5
5
|
eatedUser","parentIssueId","startDate","dueDate","estimatedHours","actualHours","created","updated"];var ISSUE_JSON_SHAPE_HELP='--output json \u306E\u5F62\uFF08Backlog API \u306E\u5F62\u3067\u306F\u3042\u308A\u307E\u305B\u3093\uFF09:\n TWP \u30B5\u30FC\u30D0\u304C\u6574\u3048\u305F\u5F62\u3067\u8FD4\u308A\u307E\u3059\u3002Backlog API \u306E\u8AB2\u984C\u3092\u305D\u306E\u307E\u307E\u8AAD\u3080\u524D\u63D0\u3067\u66F8\u304F\u3068\u58CA\u308C\u307E\u3059\u3002\n - status / priority / resolution / issueType / assignee / createdUser / updatedUser \u306F\n \u540D\u524D\u306E\u6587\u5B57\u5217\u3067\u3059\uFF08{id, name} \u3067\u306F\u3042\u308A\u307E\u305B\u3093\uFF09\u3002ID \u306F statusId / issueTypeId /\n assigneeId \u2026 \u306E\u3088\u3046\u306B\u672B\u5C3E Id \u306E\u5225\u30AD\u30FC\u306B\u3042\u308A\u307E\u3059\u3002\u672A\u8A2D\u5B9A\u306A\u3089\u4E21\u65B9 null \u3067\u3059\u3002\n - category / versions / milestone \u306F {id, name} \u306E\u914D\u5217\u306E\u307E\u307E\u3067\u3059\uFF08\u8907\u6570\u4ED8\u3051\u3089\u308C\u308B\u305F\u3081\u3001\n \
|
|
6
6
|
\u540D\u524D\u3068 ID \u3092\u5225\u30AD\u30FC\u3078\u5206\u3051\u308B\u3068\u5BFE\u5FDC\u304C\u5D29\u308C\u307E\u3059\uFF09\u3002customFields \u3082\u914D\u5217\u3067\u3059\u3002\n \u4F8B\uFF081\u4EF6\u30FB\u629C\u7C8B\uFF09:\n {"id": 1234, "issueKey": "PRJ-12", "summary": "\u2026",\n "statusId": 1, "status": "\u672A\u5BFE\u5FDC", "issueTypeId": 56, "issueType": "\u30BF\u30B9\u30AF",\n "assigneeId": 91, "assignee": "\u8C37 \u6A39",\n "category": [{"id": 7, "name": "\u8A2D\u8A08"}], "milestone": [], ...}\n --query \u3082\u3053\u306E\u5F62\u306B\u5F53\u305F\u308A\u307E\u3059\uFF08issue list \u306E\u4F8B: --query "[].{key: issueKey, type: issueType}"\uFF09\u3002';
|
|
7
7
|
var COMMENT_COLUMNS=["id","created","createdUserId","createdUser","content","changeLog"];function commentRow(row){const source=isRecord(row)?row:{};const user=isRecord(source["createdUser"])?source["createdUser"]:{};return pick({...source,createdUserId:user["id"]??null,createdUser:user["name"]??null},COMMENT_COLUMNS)}var ATTACHMENT_COLUMNS=["id","name","size","contentType","createdUserId","createdUser","created"];var STATUS_COLUMNS=["id","name","color"];var USER_COLUMNS=["id","userId","name","ma\
|
|
@@ -27,20 +27,23 @@ throw new UsageError(`${name} \u306F yyyy-MM-dd \u306E\u5F62\u3067\u6307\u5B9A\u
|
|
|
27
27
|
void 0){const space=await ctx.resolver.backlogDefaultSpace();return{id:space.id,defaulted:space.name}}if(ref.trim()===""){throw new UsageError("--space \u306B\u7A7A\u306E\u5024\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093","--space <ID|\u30B9\u30DA\u30FC\u30B9URL> \u3092\u6307\u5B9A\u3059\u308B\u304B\u3001--space \u3054\u3068\u5916\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return{id:(await ctx.resolver.backlogSpace(ref)).id,defaulted:null}}function withSpace(input,space){return withResolved(
|
|
28
28
|
input,{spaceId:space.id,...space.defaulted!==null?{spaceDefaulted:space.defaulted}:{}})}async function resolveNumericRefs(refs,flag,label,scope,load){if(refs.every(ref=>NUMERIC.test(ref)))return[...refs];const candidates=await load();const resolved=[];for(const ref of refs){resolved.push(NUMERIC.test(ref)?ref:(await resolveNamed(ref,candidates,{flag,label,scope})).id)}return resolved}function requireProjectForNames(refs,flag,projectIds){if(projectIds.length===1)return projectIds[0];throw new UsageError(
|
|
29
29
|
projectIds.length===0?`${flag} \u3092\u540D\u524D\u3067\u6307\u5B9A\u3059\u308B\u306B\u306F --project \u304C\u5FC5\u8981\u3067\u3059`:`${flag} \u3092\u540D\u524D\u3067\u6307\u5B9A\u3067\u304D\u308B\u306E\u306F --project \u304C1\u3064\u306E\u3068\u304D\u3060\u3051\u3067\u3059\uFF08\u3044\u307E\u306F ${projectIds.length} \u4EF6\uFF09`,`${flag} \u306E\u5019\u88DC\uFF08${refs.join(" / ")}\uFF09\u306F Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u914D\u4E0B\u306B\u3057\u304B\u3042\u308A\u307E\u305B\u3093\u3002\u6570\u5024\u306E ID \u3092\u76F4\u63A5\u6E21\u305B\u3070 --project \u306F\u8981\u308A\u307E\u305B\u3093\u3002`)}
|
|
30
|
-
function issueRef(input,usage){const ref=singleRef(input,{flag:"--issue",label:"\u8AB2\u984C\u30AD\u30FC",usage});if(!ISSUE_REF.test(ref)){throw new UsageError(`\u8AB2\u984C\u30AD\u30FC\u306E\u5F62\u5F0F\u304C\u9055\u3044\u307E\u3059: ${ref}`,"Backlog \u306E\u8AB2\u984C\u30AD\u30FC\uFF08HC_FM_ID-19171\uFF09\u304B\u8AB2\u984CID\uFF08\u6570\u5024\uFF09\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return ref}var UPDATE_PROJECT_FLAG={name:"--project",summary:"--status / --assignee
|
|
31
|
-
\u540D\u524D\u3067\u6307\u5B9A\u3059\u308B\u3068\u304D\u306B\u8981\u308B Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\uFF08\u30AD\u30FC / \u540D\u79F0 / \u6570\u5024ID\uFF09",takesValue:true,placeholder:"<\u30AD\u30FC|ID>"};function requireUpdateProject(input,flag,value){const ref=input.flags.get("--project")?.trim();if(ref===void 0||ref===""){throw new UsageError(`${flag} \u3092\u540D\u524D\uFF08${value}\uFF09\u3067\u6307\u5B9A\u3059\u308B\u306B\u306F --project \u304C\u5FC5\u8981\u3067\u3059
|
|
32
|
-
\u306E\u5019\u88DC\u306F Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u914D\u4E0B\u306B\u3057\u304B\u306A\u304F\u3001\u8AB2\u984C\u30AD\u30FC\u304B\u3089\u306F\u5F15\u3051\u307E\u305B\u3093\u3002twp backlog status list --project <\u30AD\u30FC> / twp backlog user list --project <\u30AD\u30FC> \u306E id \u3092 ${flag} \u306B\u76F4\u63A5\u6E21\u305B\u3070 --project \u306F\u8981\u308A\u307E\u305B\u3093\u3002`)}return ref}function readUpdateRef(input,flag,label){const raw=input.flags.get(flag);
|
|
33
|
-
void 0
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
{
|
|
38
|
-
\
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
30
|
+
function issueRef(input,usage){const ref=singleRef(input,{flag:"--issue",label:"\u8AB2\u984C\u30AD\u30FC",usage});if(!ISSUE_REF.test(ref)){throw new UsageError(`\u8AB2\u984C\u30AD\u30FC\u306E\u5F62\u5F0F\u304C\u9055\u3044\u307E\u3059: ${ref}`,"Backlog \u306E\u8AB2\u984C\u30AD\u30FC\uFF08HC_FM_ID-19171\uFF09\u304B\u8AB2\u984CID\uFF08\u6570\u5024\uFF09\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return ref}var UPDATE_PROJECT_FLAG={name:"--project",summary:"--status / --assignee /\
|
|
31
|
+
--notify \u3092\u540D\u524D\u3067\u6307\u5B9A\u3059\u308B\u3068\u304D\u306B\u8981\u308B Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\uFF08\u30AD\u30FC / \u540D\u79F0 / \u6570\u5024ID\uFF09",takesValue:true,placeholder:"<\u30AD\u30FC|ID>"};function requireUpdateProject(input,flag,value){const ref=input.flags.get("--project")?.trim();if(ref===void 0||ref===""){throw new UsageError(`${flag} \u3092\u540D\u524D\uFF08${value}\uFF09\u3067\u6307\u5B9A\u3059\u308B\u306B\u306F --project \u304C\u5FC5\u8981\u3067\u3059`,
|
|
32
|
+
`${flag} \u306E\u5019\u88DC\u306F Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u914D\u4E0B\u306B\u3057\u304B\u306A\u304F\u3001\u8AB2\u984C\u30AD\u30FC\u304B\u3089\u306F\u5F15\u3051\u307E\u305B\u3093\u3002twp backlog status list --project <\u30AD\u30FC> / twp backlog user list --project <\u30AD\u30FC> \u306E id \u3092 ${flag} \u306B\u76F4\u63A5\u6E21\u305B\u3070 --project \u306F\u8981\u308A\u307E\u305B\u3093\u3002`)}return ref}function readUpdateRef(input,flag,label){const raw=input.flags.get(flag);
|
|
33
|
+
return raw===void 0?void 0:updateRefOf(input,flag,label,raw)}function updateRefOf(input,flag,label,raw){const value=raw.trim();if(value===""){throw new UsageError(`${flag} \u306B\u7A7A\u306E\u5024\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,flag===NOTIFY_FLAG.name?`${flag} \u3054\u3068\u5916\u305B\u3070\u3001\u901A\u77E5\u5148\u3092\u6307\u5B9A\u305B\u305A\u306B\u9001\u308A\u307E\u3059\u3002`:`${flag} \u3054\u3068\u5916\u305B\u3070\u3001\u305D\u306E\u9805\u76EE\u306F\u5909\u66F4\u3057\u307E\u305B\u3093\u3002`)}
|
|
34
|
+
if(value.includes(",")){throw new UsageError(`${flag} \u306B\u8907\u6570\u306E\u5024\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093\uFF08\u53D7\u3051\u53D6\u3063\u305F\u5024: ${value}\uFF09`,flag===NOTIFY_FLAG.name?`\u8907\u6570\u4EBA\u306B\u901A\u77E5\u3059\u308B\u3068\u304D\u306F ${flag} \u3092\u91CD\u306D\u3066\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08${flag} 91 ${flag} 92\uFF09\u3002`:`\u66F4\u65B0\u306F1\u3064\u306E\u5024\u3060\u3051\u3092\u53D7\u3051\u307E\u3059\uFF08\u7D5E\u308A\u8FBC\u307F\u306E twp backlog issue list \u3068\u306F\u9055\u3044\u307E\u3059\uFF09\u3002`)}
|
|
35
|
+
if(NUMERIC.test(value)&&!isExactNumericId(value)){throw new UsageError(`${flag} \u306E ID \u304C\u6570\u5024\u3068\u3057\u3066\u6271\u3048\u308B\u7BC4\u56F2\u3092\u8D85\u3048\u3066\u3044\u307E\u3059: ${value}`,`Backlog \u306E ID \u3092\u305D\u306E\u307E\u307E\u6E21\u3057\u3066\u304F\u3060\u3055\u3044\uFF08twp backlog status list / user list \u306E id \u5217\uFF09\u3002`)}return{flag,label,value,projectRef:NUMERIC.test(value)?null:requireUpdateProject(input,flag,value)}}async function resolveUpdateProject(ref,load){
|
|
36
|
+
if(isExactNumericId(ref))return ref;const resolved=await resolveNamed(ref,await load(),{flag:"--project",label:"Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8",scope:BACKLOG_SCOPE_LABEL});if(!isExactNumericId(resolved.id)){throw new ApiResponseError(`Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u300C${ref}\u300D\u306E ID \u3092\u6570\u5024\u3068\u3057\u3066\u9001\u308C\u307E\u305B\u3093: ${JSON.stringify(resolved.id)}\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}
|
|
37
|
+
return resolved.id}async function resolveUpdateRef(ref,projectId,load){if(ref.projectRef===null)return ref.value;if(projectId===void 0){throw new ApiResponseError(`${ref.flag} \u306E\u89E3\u6C7A\u5148\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u304C\u89E3\u6C7A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\uFF08\u5185\u90E8\u30A8\u30E9\u30FC\uFF09\u3002`)}const resolved=await resolveNamed(ref.value,await load(projectId),{flag:ref.flag,label:ref.label,scope:BACKLOG_PROJECT_SCOPE_LABEL});if(!isExactNumericId(
|
|
38
|
+
resolved.id)){throw new ApiResponseError(`${ref.label}\u300C${ref.value}\u300D\u306E ID \u3092\u6570\u5024\u3068\u3057\u3066\u9001\u308C\u307E\u305B\u3093: ${JSON.stringify(resolved.id)}\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return resolved.id}var NOTIFY_FLAG={name:"--notify",summary:"\u30B3\u30E1\u30F3\u30C8\u306E\u901A\u77E5\u5148\uFF08Backlog \u306E\u300C\u304A\u77E5\u3089\u305B\u3057\u305F\u3044\u30E6\u30FC\u30B6\u30FC\u300D\uFF09\u3002\u8907\u6570\u306A\u3089\u91CD\u306D\u3066\u6307\u5B9A\u3002\u6570\u5B57\u3060\u3051\u306E\u5024\u306F ID \u3068\u3057\u3066\u9001\u308A\u307E\u3059\uFF08\u540D\u524D\u306A\u3089 --project \u304C\u8981\u308B\uFF09",
|
|
39
|
+
takesValue:true,repeatable:true,placeholder:"<\u540D\u524D|ID>"};var NOTIFY_HELP="--notify <\u540D\u524D|ID> \u3067\u3001\u30B3\u30E1\u30F3\u30C8\u306E\u901A\u77E5\u5148\uFF08Backlog \u306E\u300C\u304A\u77E5\u3089\u305B\u3057\u305F\u3044\u30E6\u30FC\u30B6\u30FC\u300D\uFF09\u3092\u6307\u5B9A\u3067\u304D\u307E\u3059\u3002\n \u26A0 \u6307\u5B9A\u3057\u306A\u3044\u3068\u3001\u62C5\u5F53\u8005\u4EE5\u5916\u3078\u306F\u901A\u77E5\u304C\u5C4A\u304B\u306A\u3044\u3053\u3068\u304C\u3042\u308A\u307E\u3059\u3002\u62C5\u5F53\u3092\u5909\u3048\u305A\u306B\u76F8\u624B\u3078\u805E\u304D\u305F\u3044\u3068\u304D\u306F\n \u62C5\u5F53\u5909\u66F4\u3067\u4EE3\u7528\u305B\u305A --notify \u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\u3002\u8907\u6570\u4EBA\u306A\u3089 --notify \u3092\u91CD\u306D\u3066\u6307\u5B9A\u3057\u307E\u3059\u3002\n \u6570\u5B57\u3060\u3051\u306E\u5024\u306F ID \u3068\u3057\u3066\u9001\u308A\u307E\u3059\u3002\u540D\u524D\u30FB\u30ED\u30B0\u30A4\u30F3ID\u30FB\u30E1\u30FC\u30EB\u3067\u6307\u3059\u306B\u306F --project \u304C\u5FC5\u8981\u3067\u3001\n \u7167\u5408\u306F\u5B8C\u5168\u4E00\u81F4\u3060\u3051\u3067\u3059\uFF08\u4E00\u81F4\u3057\u306A\u3051\u308C\u3070\u5019\u88DC\u3092\u51FA\u3057\u3066\u7D42\u4E86\u30B3\u30FC\u30C9 2 \u3067\u6B62\u307E\u308A\u3001\u4F55\u3082\u9001\u308A\u307E\u305B\u3093\uFF09\u3002";
|
|
40
|
+
function readNotifyRefs(input){return repeatedValues(input,NOTIFY_FLAG.name).map(raw=>updateRefOf(input,NOTIFY_FLAG.name,"Backlog \u30E6\u30FC\u30B6\u30FC",raw))}async function resolveNotifyRefs(refs,projectId,load){if(refs.length===0)return void 0;const ids=[];for(const ref of refs){const id=await resolveUpdateRef(ref,projectId,load);if(!ids.includes(id))ids.push(id)}return ids.join(",")}function notifyBody(input,body){const ids=resolvedList(input,"notifiedUserId");if(ids!==void 0)body["notifie\
|
|
41
|
+
dUserId"]=ids.map(Number)}function spaceNotes(input){const defaulted=input.resolved?.["spaceDefaulted"];return defaulted===void 0?[]:[`--space \u3092\u7701\u7565\u3057\u305F\u305F\u3081\u3001\u767B\u9332\u3055\u308C\u3066\u3044\u308B\u552F\u4E00\u306E Backlog \u30B9\u30DA\u30FC\u30B9 ${defaulted} \u3092\u4F7F\u3044\u307E\u3057\u305F\u3002`]}function updateNotes(input){const notes=[...spaceNotes(input)];const usedForName=input.resolved?.["projectUsed"]!==void 0;if(input.flags.get("--project")!==void 0&&
|
|
42
|
+
!usedForName){notes.push("--project \u306F\u4F7F\u3044\u307E\u305B\u3093\u3067\u3057\u305F\uFF08\u540D\u524D\u3067\u6307\u5B9A\u3057\u305F\u5024\u304C\u7121\u304F\u3001\u3059\u3079\u3066\u6570\u5024 ID \u3060\u3063\u305F\u305F\u3081\u3001\u540D\u524D\u306E\u89E3\u6C7A\u304C\u8981\u308A\u307E\u305B\u3093\uFF09\u3002")}return notes}function offsetNotes(input,received,offsetFlag="--offset"){const count=integerFlag(input.flags,"--count",{min:1,max:MAX_COUNT})??DEFAULT_COUNT;if(received<count)return[];
|
|
43
|
+
const offset=integerFlag(input.flags,offsetFlag,{min:0})??0;return[`${received} \u4EF6\uFF08--count \u306E\u4E0A\u9650\u3061\u3087\u3046\u3069\uFF09\u3092\u53D6\u5F97\u3057\u307E\u3057\u305F\u3002\u7D9A\u304D\u304C\u3042\u308B\u304B\u3082\u3057\u308C\u307E\u305B\u3093: ${offsetFlag} ${offset+received} \u3092\u4ED8\u3051\u3066\u7D9A\u304D\u3092\u53D6\u5F97\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u3053\u306E API \u306F\u30AB\u30FC\u30BD\u30EB\u3092\u8FD4\u3055\u306A\u3044\u305F\u3081 --all \u306F\u3042\u308A\u307E\u305B\u3093\uFF09\u3002`]}
|
|
44
|
+
var spaceResource={name:"space",summary:"\u9023\u643A\u6E08\u307F Backlog \u30B9\u30DA\u30FC\u30B9",operations:[{name:"list",summary:"\u9023\u643A\u6E08\u307F\u306E Backlog \u30B9\u30DA\u30FC\u30B9\u3092\u4E00\u89A7\u3059\u308B",usage:"twp backlog space list",description:"TWP \u306E\u5916\u90E8\u9023\u643A\u8A2D\u5B9A\u306B\u767B\u9332\u3055\u308C\u3066\u3044\u308B Backlog \u30B9\u30DA\u30FC\u30B9\u3092\u4E00\u89A7\u3057\u307E\u3059\u3002\n\u30B9\u30DA\u30FC\u30B9\u306F**\u30ED\u30B0\u30A4\u30F3\u3057\u3066\u3044\u308B\u30E6\u30FC\u30B6\u30FC\u3054\u3068**\u306E\u8A2D\u5B9A\u3067\u3059\uFF08\u30C6\u30CA\u30F3\u30C8\u5171\u901A\u3067\u306F\u3042\u308A\u307E\u305B\u3093\uFF09\u3002\n\u3053\u3053\u306B\u51FA\u308B id / space_url \u306F\u3001\u4ED6\u306E backlog \u30B3\u30DE\u30F3\u30C9\u306E --space \u306B\u305D\u306E\u307E\u307E\u6E21\u305B\u307E\u3059\u3002\nAPI \u30AD\u30FC\u306F\u8FD4\u308A\u307E\u305B\u3093\uFF08\u30B5\u30FC\u30D0\u5074\u3067\u30DE\u30B9\u30AF\u3055\u308C\u3066\u3044\u307E\u3059\uFF09\u3002",
|
|
45
|
+
flags:[],plan(input){if(input.args.length>0){throw new UsageError(`list \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,"twp backlog space list help")}return{method:"GET",path:`${BACKLOG_BASE_PATH}/spaces`}},summarize:body=>listOf(body,"spaces","Backlog \u30B9\u30DA\u30FC\u30B9\u4E00\u89A7").map(row=>pick(row,SPACE_COLUMNS)),raw:body=>listOf(body,"spaces","Backlog \u30B9\u30DA\u30FC\u30B9\u4E00\u89A7")}]};var projectResource={name:"project",summary:"B\
|
|
46
|
+
acklog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8",operations:[{name:"list",summary:"Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u4E00\u89A7\u3059\u308B",usage:"twp backlog project list [--space <ID|URL>]",description:"\u3053\u3053\u306B\u51FA\u308B id\uFF08\u6570\u5024\uFF09\u306F backlog issue list --project \u306B\u3001projectKey \u306F\nbacklog status list / backlog user list \u306E --project \u306B\u6E21\u305B\u307E\u3059\u3002\n\u3053\u306E API \u306F\u30DA\u30FC\u30B8\u30F3\u30B0\u3092\u6301\u305F\u305A\u3001\u5E38\u306B\u5168\u4EF6\u3092\u8FD4\u3057\u307E\u3059\u3002",
|
|
44
47
|
flags:[SPACE_FLAG],async prepare(input,ctx){if(input.args.length>0){throw new UsageError(`list \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,"twp backlog project list help")}return withSpace(input,await resolveSpace(input,ctx))},plan(input){return{method:"GET",path:backlogSpacePath(requireSpace(input),"/projects")}},plannedNotes:spaceNotes,summarize:body=>listOf(body,"projects","Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u4E00\u89A7").map(row=>pick(
|
|
45
48
|
row,PROJECT_COLUMNS)),raw:body=>listOf(body,"projects","Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u4E00\u89A7")}]};var issueResource={name:"issue",summary:"Backlog \u8AB2\u984C",operations:[{name:"list",summary:"Backlog \u8AB2\u984C\u3092\u4E00\u89A7\u30FB\u691C\u7D22\u3059\u308B",usage:"twp backlog issue list [--space <ID|URL>] [--project <\u30AD\u30FC|ID>] [--status <\u540D\u524D|ID>] [--assignee <\u540D\u524D|ID>] [--updated-since <yyyy-MM-dd>] [--count <\u4EF6\u6570>] [--offset <\u4EF6\u6570>]",
|
|
46
49
|
description:"\u26A0 \u3053\u306E\u4E00\u89A7\u306E description\uFF08\u672C\u6587\uFF09\u306F\u65E2\u5B9A\u3067 1000 \u6587\u5B57\u306B\u5207\u3089\u308C\u307E\u3059\u3002\n \u5207\u3089\u308C\u305F\u8AB2\u984C\u306B\u306F descriptionTruncated: true \u304C\u4ED8\u304D\u307E\u3059\uFF08\u9ED9\u3063\u3066\u5207\u308A\u307E\u305B\u3093\uFF09\u3002\n \u5168\u6587\u304C\u8981\u308B\u306A\u3089 --description-max 0 \u3092\u4ED8\u3051\u308B\u304B\u3001twp backlog issue get \u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\n \uFF08get \u306F\u5E38\u306B\u5168\u6587\u3092\u8FD4\u3057\u307E\u3059\uFF09\u3002\n\n\u7D5E\u308A\u8FBC\u307F\u306E\u8907\u6570\u6307\u5B9A\u306F\u30AB\u30F3\u30DE\u533A\u5207\u308A\u3067\u3059\uFF08--status \u672A\u5BFE\u5FDC,\u51E6\u7406\u4E2D\uFF09\u3002\n--project / --status / --assignee / --created-user \u306F\u540D\u524D\u3067\u3082\u6570\u5024 ID \u3067\u3082\u6307\u5B9A\u3067\u304D\u307E\u3059\u3002\n \u540D\u524D\u3067\u6307\u5B9A\u3059\u308B\u5834\u5408\u3001--status / --assignee / --created-user \u306B\u306F --project \u304C\u5FC5\u8981\u3067\u3059\n \uFF08\u5019\u88DC\u304C Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u914D\u4E0B\u306B\u3057\u304B\u306A\u3044\u305F\u3081\uFF09\u3002\u6570\u5024 ID \u306A\u3089 --project \u306F\u8981\u308A\u307E\u305B\u3093\u3002\n\n\u30DA\u30FC\u30B8\u30F3\u30B0:\n \u3053\u306E API \u306F\u30AA\u30D5\u30BB\u30C3\u30C8\u65B9\u5F0F\u3067\u3059\uFF08\u30AB\u30FC\u30BD\u30EB\u3092\u8FD4\u3055\u306A\u3044\u305F\u3081 --all / --cursor \u306F\u3042\u308A\u307E\u305B\
|
|
@@ -58,8 +61,8 @@ word");query["updatedSince"]=dateFlag(input.flags,"--updated-since");query["coun
|
|
|
58
61
|
"issues","\u8AB2\u984C\u4E00\u89A7").map(row=>pick(row,ISSUE_LIST_COLUMNS)),raw:body=>listOf(body,"issues","\u8AB2\u984C\u4E00\u89A7"),notes(body,input){const issues=listOf(body,"issues","\u8AB2\u984C\u4E00\u89A7");const truncated=issues.filter(row=>isRecord(row)&&row["descriptionTruncated"]===true).length;const notes=[...offsetNotes(input,issues.length)];if(truncated>0){notes.push(`${truncated} \u4EF6\u306E\u672C\u6587\u304C\u9014\u4E2D\u3067\u5207\u3089\u308C\u3066\u3044\u307E\u3059\uFF08descriptionTruncated: true\uFF09\u3002\u5168\u6587\u304C\u8981\u308B\u306A\u3089 --description-max 0 \u304B twp backlog issue get \u3092\u4F7F\u3063\u3066\u304F\
|
|
59
62
|
\u3060\u3055\u3044\u3002`)}return notes}},{name:"get",summary:"Backlog \u8AB2\u984C1\u4EF6\u306E\u8A73\u7D30\u3092\u8868\u793A\u3059\u308B\uFF08\u672C\u6587\u306F\u5168\u6587\uFF09",usage:"twp backlog issue get <\u8AB2\u984C\u30AD\u30FC|\u8AB2\u984CID> [--space <ID|URL>]",description:"\u672C\u6587\uFF08description\uFF09\u306F\u5E38\u306B\u5168\u6587\u304C\u8FD4\u308A\u307E\u3059\uFF08descriptionTruncated \u306F\u5FC5\u305A false\uFF09\u3002\n\u4E00\u89A7\uFF08twp backlog issue list\uFF09\u306F\u65E2\u5B9A\u3067 1000 \u6587\u5B57\u306B\u5207\u308B\u306E\u3067\u3001\u305D\u3053\u304C\u9055\u3044\u307E\u3059\u3002\n\u8AB2\u984C\u30AD\u30FC\uFF08HC_FM_ID-19171\uFF09\u3067\u3082\u8AB2\u984CID\uFF08\u6570\u5024\uFF09\u3067\u3082\u5F15\u3051\u307E\u3059\u3002\n\n"+
|
|
60
63
|
ISSUE_JSON_SHAPE_HELP,flags:[SPACE_FLAG,{name:"--issue",summary:"\u8AB2\u984C\u30AD\u30FC\uFF08\u4F4D\u7F6E\u5F15\u6570\u3068\u540C\u3058\u610F\u5473\uFF09",takesValue:true,placeholder:"<\u30AD\u30FC|ID>"}],async prepare(input,ctx){const ref=issueRef(input,"twp backlog issue get help");return withResolved(withSpace(input,await resolveSpace(input,ctx)),{issueRef:ref})},plan(input){const ref=requireResolved(input,"issueRef");return{method:"GET",path:backlogSpacePath(requireSpace(input),`/issues/${encodeURIComponent(
|
|
61
|
-
ref)}`)}},plannedNotes:spaceNotes,summarize:body=>pick(issueObject(body),ISSUE_GET_COLUMNS),raw:body=>issueObject(body)},{name:"update",summary:"Backlog \u8AB2\u984C\u306E\u62C5\u5F53\u30FB\u30B9\u30C6\u30FC\u30BF\u30B9\u3092\u5909\u66F4\u3059\u308B\uFF08--yes \u304C\u5FC5\u8981\uFF09",usage:"twp backlog issue update <\u8AB2\u984C\u30AD\u30FC|\u8AB2\u984CID> [--assignee <\u540D\u524D|ID>] [--status <\u540D\u524D|ID>] [--comment-file <\u30D1\u30B9>] [--project <\u30AD\u30FC|ID>] --yes",
|
|
62
|
-
|
|
64
|
+
ref)}`)}},plannedNotes:spaceNotes,summarize:body=>pick(issueObject(body),ISSUE_GET_COLUMNS),raw:body=>issueObject(body)},{name:"update",summary:"Backlog \u8AB2\u984C\u306E\u62C5\u5F53\u30FB\u30B9\u30C6\u30FC\u30BF\u30B9\u3092\u5909\u66F4\u3059\u308B\uFF08--yes \u304C\u5FC5\u8981\uFF09",usage:"twp backlog issue update <\u8AB2\u984C\u30AD\u30FC|\u8AB2\u984CID> [--assignee <\u540D\u524D|ID>] [--status <\u540D\u524D|ID>] [--comment-file <\u30D1\u30B9>] [--notify <\u540D\u524D|ID>]... [--project <\u30AD\u30FC|ID>] --yes",
|
|
65
|
+
description:`${EXTERNAL_WRITE_HELP}
|
|
63
66
|
|
|
64
67
|
--assignee / --status / --comment-file\uFF08--comment\uFF09\u306E\u3046\u3061\u3001\u5C11\u306A\u304F\u3068\u30821\u3064\u304C\u5FC5\u8981\u3067\u3059\u3002
|
|
65
68
|
\u6307\u5B9A\u3057\u305F\u9805\u76EE\u3060\u3051\u3092\u9001\u308A\u307E\u3059\uFF08\u6307\u5B9A\u3057\u306A\u304B\u3063\u305F\u9805\u76EE\u306F\u5909\u66F4\u3057\u307E\u305B\u3093\uFF09\u3002
|
|
@@ -81,14 +84,17 @@ ref)}`)}},plannedNotes:spaceNotes,summarize:body=>pick(issueObject(body),ISSUE_G
|
|
|
81
84
|
--comment-file \u3067\u6E21\u3057\u305F\u672C\u6587\u306F\u3001\u3053\u306E\u5909\u66F4\u306E\u7406\u7531\u3068\u3057\u3066\u540C\u3058\u30EA\u30AF\u30A8\u30B9\u30C8\u3067\u6295\u7A3F\u3055\u308C\u307E\u3059\u3002
|
|
82
85
|
${bodyHelp("--comment-file","--comment")}
|
|
83
86
|
|
|
87
|
+
${NOTIFY_HELP}
|
|
88
|
+
|
|
84
89
|
${ORDER_HELP}`,destructive:true,flags:[SPACE_FLAG,{name:"--issue",summary:"\u8AB2\u984C\u30AD\u30FC\uFF08\u4F4D\u7F6E\u5F15\u6570\u3068\u540C\u3058\u610F\u5473\uFF09",takesValue:true,placeholder:"<\u30AD\u30FC|ID>"},UPDATE_PROJECT_FLAG,{name:"--assignee",summary:"\u62C5\u5F53\u8005\u3002\u6570\u5B57\u3060\u3051\u306E\u5024\u306F ID \u3068\u3057\u3066\u9001\u308A\u307E\u3059\uFF08\u540D\u524D\u30FB\u30ED\u30B0\u30A4\u30F3ID\u30FB\u30E1\u30FC\u30EB\u306A\u3089 --project \u304C\u8981\u308B\uFF09",takesValue:true,
|
|
85
90
|
placeholder:"<\u540D\u524D|ID>"},{name:"--status",summary:"\u30B9\u30C6\u30FC\u30BF\u30B9\uFF08\u6570\u5024ID\u3001\u307E\u305F\u306F\u540D\u524D\u3002\u540D\u524D\u306A\u3089 --project \u304C\u8981\u308B\uFF09",takesValue:true,placeholder:"<\u540D\u524D|ID>"},{name:"--comment-file",summary:"\u5909\u66F4\u306E\u7406\u7531\u3092\u672C\u6587\u3068\u3057\u3066\u30D5\u30A1\u30A4\u30EB\u304B\u3089\u8AAD\u307F\u3001\u540C\u3058\u30EA\u30AF\u30A8\u30B9\u30C8\u3067\u6295\u7A3F\u3059\u308B\uFF08- \u3067\u6A19\u6E96\u5165\u529B\uFF09",
|
|
86
|
-
takesValue:true,placeholder:"<\u30D1\u30B9|->"},{name:"--comment",summary:"\u5909\u66F4\u306E\u7406\u7531\u3092\u76F4\u63A5\u6307\u5B9A\u3059\u308B\uFF08\u4E00\u884C\u5411\u3051\u3002--comment-file \u3068\u306E\u4F75\u7528\u306F\u30A8\u30E9\u30FC\uFF09",takesValue:true,placeholder:"<\u6587\u5B57\u5217>"}],async prepare(input,ctx){const ref=issueRef(input,"twp backlog issue update help");const assigneeRef=readUpdateRef(input,"--assignee","Backlog \u30E6\u30FC\u30B6\u30FC");const statusRef=readUpdateRef(
|
|
87
|
-
input,"--status","Backlog \u30B9\u30C6\u30FC\u30BF\u30B9");const comment=await readBody(input,{flag:"--comment",fileFlag:"--comment-file",label:"\u5909\u66F4\u30B3\u30E1\u30F3\u30C8",maxChars:BODY_MAX_CHARS,usage:"twp backlog issue update help"});if(comment===void 0&&assigneeRef===void 0&&statusRef===void 0){throw new UsageError("\u5909\u66F4\u3059\u308B\u9805\u76EE\u304C\u3042\u308A\u307E\u305B\u3093","--assignee <\u540D\u524D|ID> / --status <\u540D\u524D|ID> / --comment-file
|
|
88
|
-
const space=await resolveSpace(input,ctx);const resolved={issueRef:ref};const projectRef=assigneeRef?.projectRef??statusRef?.projectRef??
|
|
89
|
-
await
|
|
90
|
-
|
|
91
|
-
|
|
91
|
+
takesValue:true,placeholder:"<\u30D1\u30B9|->"},{name:"--comment",summary:"\u5909\u66F4\u306E\u7406\u7531\u3092\u76F4\u63A5\u6307\u5B9A\u3059\u308B\uFF08\u4E00\u884C\u5411\u3051\u3002--comment-file \u3068\u306E\u4F75\u7528\u306F\u30A8\u30E9\u30FC\uFF09",takesValue:true,placeholder:"<\u6587\u5B57\u5217>"},NOTIFY_FLAG],async prepare(input,ctx){const ref=issueRef(input,"twp backlog issue update help");const assigneeRef=readUpdateRef(input,"--assignee","Backlog \u30E6\u30FC\u30B6\u30FC");const statusRef=readUpdateRef(
|
|
92
|
+
input,"--status","Backlog \u30B9\u30C6\u30FC\u30BF\u30B9");const notifyRefs=readNotifyRefs(input);const comment=await readBody(input,{flag:"--comment",fileFlag:"--comment-file",label:"\u5909\u66F4\u30B3\u30E1\u30F3\u30C8",maxChars:BODY_MAX_CHARS,usage:"twp backlog issue update help"});if(comment===void 0&&assigneeRef===void 0&&statusRef===void 0){throw new UsageError("\u5909\u66F4\u3059\u308B\u9805\u76EE\u304C\u3042\u308A\u307E\u305B\u3093","--assignee <\u540D\u524D|ID> / --status <\u540D\u524D|ID> / --comment-file\
|
|
93
|
+
<\u30D1\u30B9> \u306E\u3046\u3061\u3001\u5C11\u306A\u304F\u3068\u30821\u3064\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08--notify \u306F\u901A\u77E5\u5148\u306E\u6307\u5B9A\u3067\u3001\u305D\u308C\u3060\u3051\u3067\u306F\u5909\u66F4\u306B\u306A\u308A\u307E\u305B\u3093\uFF09\u3002")}const space=await resolveSpace(input,ctx);const resolved={issueRef:ref};const projectRef=assigneeRef?.projectRef??statusRef?.projectRef??notifyRefs.find(ref2=>ref2.projectRef!==null)?.projectRef??null;
|
|
94
|
+
const projectId=projectRef===null?void 0:await resolveUpdateProject(projectRef,()=>ctx.resolver.backlogProjects(space.id));if(projectId!==void 0)resolved["projectUsed"]=projectId;if(assigneeRef!==void 0){resolved["assigneeId"]=await resolveUpdateRef(assigneeRef,projectId,id=>ctx.resolver.backlogUsers(space.id,id))}if(statusRef!==void 0){resolved["statusId"]=await resolveUpdateRef(statusRef,projectId,id=>ctx.resolver.backlogStatuses(space.id,id))}const notified=await resolveNotifyRefs(notifyRefs,
|
|
95
|
+
projectId,id=>ctx.resolver.backlogUsers(space.id,id));if(notified!==void 0)resolved["notifiedUserId"]=notified;if(comment!==void 0)resolved["comment"]=comment;return withSpace(withResolved(input,resolved),space)},plan(input){const body={};for(const key of["assigneeId","statusId"]){const value=input.resolved?.[key];if(value!==void 0)body[key]=Number(value)}const comment=input.resolved?.["comment"];if(comment!==void 0)body["comment"]=comment;notifyBody(input,body);return{method:"PATCH",path:backlogSpacePath(
|
|
96
|
+
requireSpace(input),`/issues/${encodeURIComponent(requireResolved(input,"issueRef"))}`),body}},plannedNotes:updateNotes,summarize:body=>pick(issueObject(body),ISSUE_GET_COLUMNS),raw:body=>issueObject(body)}]};var commentResource={name:"comment",summary:"Backlog \u8AB2\u984C\u306E\u30B3\u30E1\u30F3\u30C8\uFF08\u4E00\u89A7\u30FB\u6295\u7A3F\uFF09",operations:[{name:"list",summary:"Backlog \u8AB2\u984C\u306E\u30B3\u30E1\u30F3\u30C8\u3092\u4E00\u89A7\u3059\u308B",usage:"twp backlog comment list <\u8AB2\u984C\u30AD\
|
|
97
|
+
\u30FC|\u8AB2\u984CID> [--space <ID|URL>] [--count <\u4EF6\u6570>] [--order <\u9806\u5E8F>]",description:`\u5404\u30B3\u30E1\u30F3\u30C8\u306B\u306F changeLog\uFF08\u30B9\u30C6\u30FC\u30BF\u30B9\u30FB\u62C5\u5F53\u306E\u5909\u66F4\u5C65\u6B74\uFF09\u304C\u5FC5\u305A\u542B\u307E\u308C\u307E\u3059\u3002
|
|
92
98
|
\u300C\u3044\u3064\u30FB\u8AB0\u304C\u30FB\u8AB0\u306B\u632F\u3063\u305F\u304B\u300D\u306F Backlog \u3067\u306F\u3053\u3053\u306B\u3057\u304B\u7121\u3044\u306E\u3067\u3001\u8981\u7D04\u5217\u304B\u3089\u3082\u843D\u3068\u3057\u307E\u305B\u3093\u3002
|
|
93
99
|
|
|
94
100
|
\u30DA\u30FC\u30B8\u30F3\u30B0:
|
|
@@ -98,13 +104,17 @@ placeholder:"<\u4EF6\u6570>"},{name:"--order",summary:"\u4E26\u3073\u9806\uFF08a
|
|
|
98
104
|
placeholder:"<ID>"}],async prepare(input,ctx){const ref=issueRef(input,"twp backlog comment list help");return withResolved(withSpace(input,await resolveSpace(input,ctx)),{issueRef:ref})},plan(input){const ref=requireResolved(input,"issueRef");return{method:"GET",path:backlogSpacePath(requireSpace(input),`/issues/${encodeURIComponent(ref)}/comments`),query:{count:integerFlag(input.flags,"--count",{min:1,max:MAX_COUNT}),order:order(input.flags.get("--order")),minId:integerFlag(input.flags,"--min-\
|
|
99
105
|
id",{min:0}),maxId:integerFlag(input.flags,"--max-id",{min:0})}}},plannedNotes:spaceNotes,summarize:body=>listOf(body,"comments","\u30B3\u30E1\u30F3\u30C8\u4E00\u89A7").map(commentRow),raw:body=>listOf(body,"comments","\u30B3\u30E1\u30F3\u30C8\u4E00\u89A7"),notes(body,input){const received=listOf(body,"comments","\u30B3\u30E1\u30F3\u30C8\u4E00\u89A7").length;const count=integerFlag(input.flags,"--count",{min:1,max:MAX_COUNT})??DEFAULT_COUNT;return received<count?[]:[`${received} \u4EF6\uFF08--count \u306E\u4E0A\u9650\u3061\u3087\u3046\
|
|
100
106
|
\u3069\uFF09\u3092\u53D6\u5F97\u3057\u307E\u3057\u305F\u3002\u7D9A\u304D\u304C\u3042\u308B\u304B\u3082\u3057\u308C\u307E\u305B\u3093: --min-id / --max-id \u3067\u7D9A\u304D\u3092\u53D6\u5F97\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u3053\u306E API \u306F\u30AB\u30FC\u30BD\u30EB\u3092\u8FD4\u3055\u306A\u3044\u305F\u3081 --all \u306F\u3042\u308A\u307E\u305B\u3093\uFF09\u3002`]}},{name:"create",summary:"Backlog \u8AB2\u984C\u306B\u30B3\u30E1\u30F3\u30C8\u3092\u6295\u7A3F\u3059\u308B\uFF08--yes \u304C\u5FC5\u8981\uFF09",
|
|
101
|
-
usage:"twp backlog comment create <\u8AB2\u984C\u30AD\u30FC|\u8AB2\u984CID> --body-file <\u30D1\u30B9> [--space <ID|URL>] --yes",description:`${EXTERNAL_WRITE_HELP}
|
|
107
|
+
usage:"twp backlog comment create <\u8AB2\u984C\u30AD\u30FC|\u8AB2\u984CID> --body-file <\u30D1\u30B9> [--notify <\u540D\u524D|ID>]... [--project <\u30AD\u30FC|ID>] [--space <ID|URL>] --yes",description:`${EXTERNAL_WRITE_HELP}
|
|
102
108
|
|
|
103
109
|
${bodyHelp("--body-file","--body")}
|
|
104
110
|
|
|
105
|
-
${
|
|
106
|
-
|
|
107
|
-
|
|
111
|
+
${NOTIFY_HELP}
|
|
112
|
+
|
|
113
|
+
${ORDER_HELP}`,destructive:true,flags:[...BODY_FLAGS,SPACE_FLAG,{name:"--issue",summary:"\u8AB2\u984C\u30AD\u30FC\uFF08\u4F4D\u7F6E\u5F15\u6570\u3068\u540C\u3058\u610F\u5473\uFF09",takesValue:true,placeholder:"<\u30AD\u30FC|ID>"},NOTIFY_FLAG,{...UPDATE_PROJECT_FLAG,summary:"--notify \u3092\u540D\u524D\u3067\u6307\u5B9A\u3059\u308B\u3068\u304D\u306B\u8981\u308B Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\uFF08\u30AD\u30FC / \u540D\u79F0 / \u6570\u5024ID\uFF09"}],async prepare(input,ctx){const ref=issueRef(
|
|
114
|
+
input,"twp backlog comment create help");const notifyRefs=readNotifyRefs(input);const content=await readBody(input,{flag:"--body",fileFlag:"--body-file",label:"\u30B3\u30E1\u30F3\u30C8\u672C\u6587",maxChars:BODY_MAX_CHARS,usage:"twp backlog comment create help"});if(content===void 0){throw new UsageError("\u30B3\u30E1\u30F3\u30C8\u672C\u6587\u3092 --body-file <\u30D1\u30B9> \u304B --body <\u6587\u5B57\u5217> \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044","twp backlog comment create help")}
|
|
115
|
+
const space=await resolveSpace(input,ctx);const resolved={issueRef:ref,content};const projectRef=notifyRefs.find(notify=>notify.projectRef!==null)?.projectRef??null;const projectId=projectRef===null?void 0:await resolveUpdateProject(projectRef,()=>ctx.resolver.backlogProjects(space.id));if(projectId!==void 0)resolved["projectUsed"]=projectId;const notified=await resolveNotifyRefs(notifyRefs,projectId,id=>ctx.resolver.backlogUsers(space.id,id));if(notified!==void 0)resolved["notifiedUserId"]=notified;
|
|
116
|
+
return withSpace(withResolved(input,resolved),space)},plan(input){const body={content:requireResolved(input,"content")};notifyBody(input,body);return{method:"POST",path:backlogSpacePath(requireSpace(input),`/issues/${encodeURIComponent(requireResolved(input,"issueRef"))}/comments`),body}},plannedNotes:updateNotes,summarize:body=>commentRow(commentObject(body)),raw:commentObject}]};function projectMasterResource(spec){return{name:spec.name,summary:spec.summary,operations:[{name:"list",summary:spec.
|
|
117
|
+
operationSummary,usage:`twp backlog ${spec.name} list --project <\u30AD\u30FC|ID> [--space <ID|URL>]`,description:`${spec.description}
|
|
108
118
|
\u3053\u306E API \u306F\u30DA\u30FC\u30B8\u30F3\u30B0\u3092\u6301\u305F\u305A\u3001\u5E38\u306B\u5168\u4EF6\u3092\u8FD4\u3057\u307E\u3059\u3002`,flags:[SPACE_FLAG,{name:"--project",summary:"Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30AD\u30FC\uFF08HC_FM_ID\uFF09\u304B\u6570\u5024ID\u3002\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u540D\u3067\u306F\u5F15\u3051\u307E\u305B\u3093",takesValue:true,placeholder:"<\u30AD\u30FC|ID>"}],async prepare(input,ctx){if(input.args.length>0){throw new UsageError(`l\
|
|
109
119
|
ist \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,`twp backlog ${spec.name} list help`)}const space=await resolveSpace(input,ctx);const refs=commaList(input.flags,"--project");if(refs===void 0){throw new UsageError("--project \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",`twp backlog ${spec.name} list help`)}if(refs.length>1){throw new UsageError(`--project \u306B\u8907\u6570\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093\uFF08\u53D7\u3051\u53D6\u3063\u305F\u5024: ${refs.
|
|
110
120
|
join(" / ")}\uFF09`,"\u3053\u306E\u4E00\u89A7\u306F1\u3064\u306E Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306B\u5C5E\u3057\u307E\u3059\u3002")}const ref=refs[0];return withResolved(withSpace(input,space),{projectRef:ref})},plan(input){const ref=requireResolved(input,"projectRef");if(!/^[A-Za-z0-9_]+$/.test(ref)){throw new UsageError(`--project \u306E\u5F62\u5F0F\u304C\u9055\u3044\u307E\u3059: ${ref}`,"Backlog \u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30AD\u30FC\uFF08HC_FM_ID\uFF09\u304B\u6570\u5024 ID \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u540D\u3067\u306F\u5F15\u3051\u307E\u305B\u3093\uFF08twp backlog project list \u3067 proj\
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{analysisForbidden}from"./chunk-
|
|
4
|
-
import{isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiRejectedError,ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.js";import"./chunk-RZVI6PMW.js";import"./chunk-QQRJLH6B.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";import fs from"fs";import path from"path";var PATH="/api/v2/budget";var ANALYSIS_FORBIDDEN=analysisForbidden("");function budgetForbidden(body){if(body?.error==="forbidden")return"\u3053\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u95B2\u89A7\u3067\u304D\u307E\u305B\u3093\uFF08\u30E1\u30F3\u30D0\u30FC\u3067\u306A\u3044\u304B\u3001\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u6A29\u9650\u304C\u8DB3\u308A\u307E\u305B\u3093\uFF09\u3002\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u7BA1\u7406\u8005\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002";
|
|
3
|
+
import{analysisForbidden}from"./chunk-5AQ2JPIS.js";import"./chunk-ZJW3GBE5.js";import"./chunk-EXT4AIDF.js";import"./chunk-SCU74Z4U.js";import"./chunk-JJSBBWJ5.js";import{nonEmpty}from"./chunk-MI6HVYR2.js";import{repeatedValues}from"./chunk-RX5HWI4L.js";import"./chunk-6LSQCOCJ.js";import"./chunk-ZSPWHEBL.js";import"./chunk-HVZUXLQ4.js";import{ApiError,MultipartBody}from"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import{
|
|
4
|
+
requireResolved,withResolved}from"./chunk-PS5QFKHB.js";import"./chunk-II5RVJQN.js";import{isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiRejectedError,ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.js";import"./chunk-RZVI6PMW.js";import"./chunk-QQRJLH6B.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";import fs from"fs";import path from"path";var PATH="/api/v2/budget";var ANALYSIS_FORBIDDEN=analysisForbidden("");function budgetForbidden(body){if(body?.error==="forbidden")return"\u3053\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u95B2\u89A7\u3067\u304D\u307E\u305B\u3093\uFF08\u30E1\u30F3\u30D0\u30FC\u3067\u306A\u3044\u304B\u3001\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u6A29\u9650\u304C\u8DB3\u308A\u307E\u305B\u3093\uFF09\u3002\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u7BA1\u7406\u8005\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002";
|
|
5
5
|
return ANALYSIS_FORBIDDEN(body)}var FORBIDDEN=budgetForbidden;var EDIT_HINT="\u76EE\u6A19\u306E\u8A2D\u5B9A\u30FB\u30B3\u30D4\u30FC\u30FB\u53D6\u308A\u8FBC\u307F\u306F\u3001\u5168\u4F53\u7BA1\u7406\u8005\u304B\u5206\u6790\u306E\u6A29\u9650\u304C\u300C\u7BA1\u7406\u8005\u300D\u306E\u4EBA\u3060\u3051\u304C\u3067\u304D\u307E\u3059\u3002\u6309\u5206\u306F\u305D\u308C\u306B\u52A0\u3048\u3066\u3001\u305D\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u7BA1\u7406\u8005\u3082\u3067\u304D\u307E\u3059\n\uFF08\u3069\u3061\u3089\u3082\u5206\u6790\u306E\u6A29\u9650\u304C\u300C\u306A\u3057\u300D\u3067\u306F\u4F7F\u3048\u307E\u305B\u3093\uFF09\u3002";
|
|
6
6
|
var YEAR_MIN=2e3;var YEAR_MAX=2100;var IMPORT_MAX_BYTES=2048*1024;var SET_FILE_MAX_BYTES=4*1024*1024;var AMOUNT_MAX=999999999999;var SHOWN_OVERWRITES=24;var BOM=new RegExp(`^${String.fromCharCode(65279)}`);function usageOf(op){return`twp budget ${op} help`}function text(value){return typeof value==="string"||typeof value==="number"?String(value):""}function yen(value){return typeof value==="number"?`${value.toLocaleString("ja-JP")} \u5186`:"\uFF08\u306A\u3057\uFF09"}function noArgs(input,op){if(input.
|
|
7
7
|
args.length>0)throw new UsageError(`${op} \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,usageOf(op))}function envelope(body,what){if(!isRecord(body)||body["result"]!==true)throw new ApiResponseError(`${what}\u306E\u5FDC\u7B54\u306E\u5F62\u304C\u60F3\u5B9A\u3068\u9055\u3044\u307E\u3059\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`);return body}function dataRecord(body,what){const data=envelope(body,what)["data"];
|