@tocca-systems/twp-cli 0.39.0 → 0.41.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/CHANGELOG.public.md +16 -0
  2. package/README.md +96 -1
  3. package/dist/{agent-loop-4U5RLC4L.js → agent-loop-RCMZ7IGV.js} +2 -2
  4. package/dist/{ai-dispatch-KRMDHQEF.js → ai-dispatch-2ZV4XL5D.js} +2 -2
  5. package/dist/{api-command-IO572BZ4.js → api-command-6FEY6MHV.js} +4 -4
  6. package/dist/{app-Y2RIXLS4.js → app-G6Y2XVST.js} +5 -5
  7. package/dist/{auto-update-JNSBIQM6.js → auto-update-PS5HUWVH.js} +1 -1
  8. package/dist/{auto-update-worker-Y44TD6FD.js → auto-update-worker-ZKODJ45K.js} +2 -2
  9. package/dist/{backlog-67JSQYOH.js → backlog-JVHWVL6N.js} +2 -2
  10. package/dist/{charter-command-ULFOEZWE.js → charter-command-OQQHBAPS.js} +1 -1
  11. package/dist/{chunk-4ZT5LTRX.js → chunk-43OMEGNH.js} +1 -1
  12. package/dist/{chunk-PWXXCLVZ.js → chunk-6QOT7CHX.js} +1 -1
  13. package/dist/{chunk-QDTYD5PY.js → chunk-7ACENLLZ.js} +4 -4
  14. package/dist/{chunk-HAIZHSNZ.js → chunk-7HVVKEOA.js} +2 -3
  15. package/dist/{chunk-C7UDUHQZ.js → chunk-ANK43U5E.js} +22 -20
  16. package/dist/{chunk-BJLXXRSY.js → chunk-B7YCG2T7.js} +1 -1
  17. package/dist/{chunk-MHRGKUMK.js → chunk-BPCK5RAB.js} +1 -1
  18. package/dist/{chunk-RZ54TCQU.js → chunk-BZ7ULFR3.js} +1 -1
  19. package/dist/{chunk-ELXDRPDV.js → chunk-BZAXQOLB.js} +24 -19
  20. package/dist/chunk-EOSSFTNG.js +4 -0
  21. package/dist/chunk-FKS2Z34P.js +70 -0
  22. package/dist/chunk-G2THOTBW.js +15 -0
  23. package/dist/{chunk-QQLWMHGR.js → chunk-H54MGGHB.js} +1 -1
  24. package/dist/{chunk-L52XJFJR.js → chunk-HBH5V2CP.js} +1 -1
  25. package/dist/chunk-L25UV7DE.js +13 -0
  26. package/dist/{chunk-REPGG75N.js → chunk-LNZTJI64.js} +1 -1
  27. package/dist/{chunk-RFBFR567.js → chunk-N6AXAGS2.js} +5 -5
  28. package/dist/chunk-O44ZKSD2.js +8 -0
  29. package/dist/chunk-PEM3HR7L.js +58 -0
  30. package/dist/{chunk-VECUCVIY.js → chunk-PKWMJIBM.js} +1 -1
  31. package/dist/{chunk-VBX44RKP.js → chunk-QEWI75KI.js} +1 -1
  32. package/dist/{chunk-BUZKNZ45.js → chunk-UT4FACHN.js} +5 -3
  33. package/dist/chunk-V3GQEUYI.js +16 -0
  34. package/dist/{chunk-FEOST3GF.js → chunk-VK5T7ULK.js} +1 -1
  35. package/dist/{chunk-VK2Z4QGC.js → chunk-VUHKLW66.js} +1 -1
  36. package/dist/{chunk-Y5YDL3MC.js → chunk-X5IVIOGL.js} +1 -1
  37. package/dist/{receivable-AE44YIJO.js → chunk-XN5TUZOT.js} +2 -3
  38. package/dist/{chunk-2NKVGAAE.js → chunk-YM7TKMNO.js} +1 -1
  39. package/dist/cli.js +148 -9
  40. package/dist/{commands-MLYGGSUE.js → commands-QIBFWWIT.js} +13 -13
  41. package/dist/{commands-K6DQ3O35.js → commands-VT7AVSSL.js} +4 -4
  42. package/dist/{company-3KUWW7QA.js → company-KHZVPKHH.js} +3 -3
  43. package/dist/{completion-6R5D5TQQ.js → completion-EFGQJDIU.js} +1 -1
  44. package/dist/{configure-PIOFJFL5.js → configure-XH33RB27.js} +1 -1
  45. package/dist/{contract-FGRHTOGI.js → contract-O3FIBHDY.js} +2 -2
  46. package/dist/{department-PN5DCCRL.js → department-I25NAPWU.js} +2 -2
  47. package/dist/deposit-U4AVQH5O.js +4 -0
  48. package/dist/estimate-SW43VOLO.js +173 -0
  49. package/dist/{inquiry-3VOJASJH.js → inquiry-5HSK4FPD.js} +2 -2
  50. package/dist/{invoice-KY3BYTHQ.js → invoice-RGOI2H4L.js} +50 -49
  51. package/dist/{job-title-EM6RKGQ6.js → job-title-G7MIYWVA.js} +1 -1
  52. package/dist/{knowledge-F4FZ4MLH.js → knowledge-ZPMPS6WK.js} +2 -2
  53. package/dist/{leave-D2S7NMJC.js → leave-6QI2RNO2.js} +2 -2
  54. package/dist/{logout-guard-XYVKR47G.js → logout-guard-BIF2B7JE.js} +1 -1
  55. package/dist/{media-SQVQVX2E.js → media-OV26FYD2.js} +2 -2
  56. package/dist/{notification-NTFUPUMY.js → notification-FL5GTW5S.js} +2 -2
  57. package/dist/{oneshot-TMGTEN3S.js → oneshot-XW6YVNOY.js} +2 -2
  58. package/dist/{position-D52LXRDT.js → position-UY33ETLX.js} +2 -2
  59. package/dist/{prospect-AQ7EUU4N.js → prospect-VN42J236.js} +3 -3
  60. package/dist/purchase-VQZOO3QL.js +214 -0
  61. package/dist/receivable-TNH4KCUO.js +4 -0
  62. package/dist/{registry-3WV46K26.js → registry-3236ULYR.js} +1 -1
  63. package/dist/{render-MTSSHDAZ.js → render-F4MRN2FQ.js} +1 -1
  64. package/dist/{report-TI2DOJGX.js → report-BTF5Q4F3.js} +2 -2
  65. package/dist/run-33WHOIOO.js +4 -0
  66. package/dist/sales-master-RYZKGURE.js +71 -0
  67. package/dist/sales-numbering-MBFKVR2C.js +4 -0
  68. package/dist/{schedule-command-IGTMCOA7.js → schedule-command-7JGQMTQY.js} +1 -1
  69. package/dist/{server-settings-MVZEW2QI.js → server-settings-326MD7T4.js} +1 -1
  70. package/dist/{server-skills-NXSUDHBD.js → server-skills-NJG7JP77.js} +1 -1
  71. package/dist/{setup-CVXGKBTY.js → setup-JGGFVRUW.js} +1 -1
  72. package/dist/{skill-command-4U7HB7XU.js → skill-command-DFRORWO6.js} +1 -1
  73. package/dist/supplier-payment-ZBN2QZRW.js +110 -0
  74. package/dist/{task-VKVZSF7J.js → task-CXHPLZHT.js} +3 -3
  75. package/dist/update-EYFT7STE.js +3 -0
  76. package/dist/{user-KEFI7XZI.js → user-MCDORJTG.js} +3 -3
  77. package/dist/workflow-2YL2OF2Y.js +4 -0
  78. package/package.json +1 -1
  79. package/dist/chunk-QWSXHHFT.js +0 -15
  80. package/dist/chunk-TLN3JSEC.js +0 -7
  81. package/dist/chunk-UVUVEL3B.js +0 -3
  82. package/dist/chunk-VCZVITWG.js +0 -13
  83. package/dist/deposit-XQER6PMG.js +0 -4
  84. package/dist/estimate-IXBEQVGI.js +0 -164
  85. package/dist/run-KNZ43HFF.js +0 -4
  86. package/dist/update-MAQJ6VWV.js +0 -3
  87. package/dist/workflow-4FHTOQZZ.js +0 -4
@@ -11,6 +11,22 @@
11
11
  `CHANGELOG.md` に残してあります。顧客向けの履歴は public 公開以降を対象とします。
12
12
  -->
13
13
 
14
+ ## 0.41.0
15
+
16
+ エージェントループの定期実行や計画された作業にも、実行できるプラットフォームを指定できるようになりました。
17
+
18
+ ## 0.40.0
19
+
20
+ 仕入を CLI から扱えるようになりました。仕入(注文書)の一覧・詳細・作成・更新・削除・複製・一覧のメモ、見積書・注文書・注文請書の添付(登録・版の差替え・ダウンロード)、添付した見積書からの AI 読み取り(`twp purchase`)に対応しました。
21
+
22
+ 支払を CLI から扱えるようになりました。支払(仕入先へ払うお金の台帳)の一覧・詳細・登録・更新・削除とステータスの一括変更、毎月の支払を生成する支払先マスタの一覧・詳細・登録・更新・削除に対応しました(`twp supplier-payment`)。
23
+
24
+ 見積書・注文書・注文請書・請求書・納品書・検収書と、仕入の注文書・注文請書を CLI から PDF で書き出せるようになりました。画面の「PDF出力」と同じ帳票で、`--kind` で書類の種類を選べます。
25
+
26
+ 見積・請求・仕入の番号の振り方(番号ルール)、見積フォーマット、金額の端数処理(四捨五入・切り上げ・切り捨て)を CLI から設定できるようになりました。番号ルールの一覧には次に発行される番号が出て、変更するときは変更前と変更後の番号を確かめてから実行できます。
27
+
28
+ 見積書・請求書に載る自社情報を CLI から設定できるようになりました。事業所・振込先・印影(画像の登録を含む)の一覧・詳細・登録・更新・削除と、見積書を AI で読み取るときの項目の対応表(`twp purchase ai-mapping`)に対応しました。振込先の一覧では口座番号を伏字で表示します。
29
+
14
30
  ## 0.39.0
15
31
 
16
32
  見積を CLI から作成・更新・削除できるようになりました(`twp estimate create` / `update` / `delete`)。社内共有メモ・請求の紐づけ・関連入金・部署按分・案件書類(注文書・個別契約書など)の登録と差替え・ダウンロード、注文書からの注文書番号の読み取りにも対応しました。
package/README.md CHANGED
@@ -24,7 +24,7 @@ TWP(Tocca Working Platform)を、ターミナルから使うための CLI
24
24
  | **できる** | `twp department` / `twp position` / `twp job-title` による組織マスタ(部署・役職・職位)の一覧・取得・作成・更新・削除と、部署ツリー・部署の所属者の表示。作成・更新・削除は管理者の権限が要ります |
25
25
  | **できる** | `twp inquiry category` による問い合わせカテゴリの一覧・取得・作成・更新(通知先の設定・末尾への並べ替えを含む)。取得・作成・更新は問い合わせ機能の管理者の権限が要ります |
26
26
  | **できる** | `twp notification` による自分宛ての通知の一覧(未読・カテゴリ・語で絞り込み)・詳細・未読件数・カテゴリ一覧と、1件ずつ・まとめての既読化 |
27
- | **できる** | `twp estimate` / `twp invoice` による販売管理の見積・請求の一覧(語・ステータス・取引先・プロジェクト・担当者・日付・回収状況で絞り込み)と詳細、`twp estimate` による見積の作成・更新・削除・社内共有メモ・既存の請求の紐づけ・関連入金・部署按分・案件書類(注文書・個別契約書など)の登録・版の差替え・ダウンロードと、注文書からの注文書番号の読み取り、`twp invoice` による請求の作成・更新・削除・取消と取消解除・統合請求書の作成・社内共有メモ・CSV/MF 会計仕訳の書き出し・請求書メールの送信・支払いリンクの作成、`twp contract` による取引契約(見積から作る販売管理の契約)の一覧・詳細・作成・更新・削除、`twp invoice auto-template` による自動請求テンプレートの一覧・詳細・作成・更新・削除と発行履歴の参照(販売管理の管理者)、`twp deposit` による入金の一覧・詳細・登録・更新・削除・CSV 書き出し、請求への引当(CSV での一括を含む)・解除・手数料分の引き上げ、入金予定からの入金と引当のまとめ登録、`twp receivable` による売掛金残高の表示と CSV 書き出し・月次の締めと締めの解除(どちらも販売管理の管理者)、`twp company` / `twp customer` による取引先企業・顧客の一覧と詳細(名前でも指定できます)、`twp customer` による顧客の登録・更新・削除(担当者・対応履歴ごと。ID を並べたファイルでの一括削除を含む)と担当者・対応履歴の一覧・詳細・登録・更新・削除、全顧客の最近の対応、名刺画像の登録・裏面メモ・削除、企業をまたいだ人物の一覧・詳細・CSV 書き出し、登録前の類似企業検索、`twp company` による取引先企業(仕入先を含む)の登録・更新・削除、`twp prospect` によるアプローチ先(見込客)の一覧・登録・更新・削除・CSV での一括登録と書き出し・重複確認・顧客への昇格と対応履歴の記録。販売管理・顧客管理の権限が要ります |
27
+ | **できる** | `twp estimate` / `twp invoice` による販売管理の見積・請求の一覧(語・ステータス・取引先・プロジェクト・担当者・日付・回収状況で絞り込み)と詳細、`twp estimate` による見積の作成・更新・削除・社内共有メモ・既存の請求の紐づけ・関連入金・部署按分・案件書類(注文書・個別契約書など)の登録・版の差替え・ダウンロードと、注文書からの注文書番号の読み取り・見積書/注文書/注文請書の PDF の書き出し、`twp invoice` による請求の作成・更新・削除・取消と取消解除・統合請求書の作成・社内共有メモ・CSV/MF 会計仕訳の書き出し・請求書メールの送信・支払いリンクの作成・請求書/納品書/検収書の PDF の書き出し、`twp contract` による取引契約(見積から作る販売管理の契約)の一覧・詳細・作成・更新・削除、`twp invoice auto-template` による自動請求テンプレートの一覧・詳細・作成・更新・削除と発行履歴の参照(販売管理の管理者)、`twp deposit` による入金の一覧・詳細・登録・更新・削除・CSV 書き出し、請求への引当(CSV での一括を含む)・解除・手数料分の引き上げ、入金予定からの入金と引当のまとめ登録、`twp receivable` による売掛金残高の表示と CSV 書き出し・月次の締めと締めの解除(どちらも販売管理の管理者)、`twp purchase` による仕入(注文書)の一覧・詳細・作成・更新・削除・複製・一覧のメモ・注文書/注文請書の PDF の書き出しと、添付書類(見積書・注文書・注文請書)の登録・版の差替え・ダウンロード、添付した見積書からの AI 読み取り(候補を出すだけで仕入は変えません)、`twp supplier-payment` による支払(仕入先へ払うお金の台帳)の一覧・詳細・登録・更新・削除・ID を並べたファイルでのステータスの一括変更と、毎月の支払を生成する支払先マスタの一覧・詳細・登録・更新・削除(どちらも販売管理の管理者)、`twp business-place` / `twp payee` / `twp seal-impression` による帳票に載る自社の事業所・振込先・印影(画像の登録を含む)の一覧・詳細・登録・更新・削除(書き込みは販売管理の管理者。振込先の一覧は口座番号を伏字にします)、`twp purchase ai-mapping` による見積書 AI 読み取りのマッピング表の一覧・詳細・登録・更新・削除と反映先の選択肢、`twp estimate no-rule` / `twp invoice no-rule` / `twp purchase no-rule` による見積・請求・仕入の番号ルールの一覧(次に発行される番号つき)・詳細・登録・更新・削除と、`twp estimate format` による見積フォーマット(書類を作るときの既定値の組)の一覧・詳細・作成・更新・削除、`twp rounding-setting` による端数処理(金額の丸め方)の表示と変更(番号ルールと端数処理の変更は `--yes` が要り、変更前・変更後を出します)、`twp company` / `twp customer` による取引先企業・顧客の一覧と詳細(名前でも指定できます)、`twp customer` による顧客の登録・更新・削除(担当者・対応履歴ごと。ID を並べたファイルでの一括削除を含む)と担当者・対応履歴の一覧・詳細・登録・更新・削除、全顧客の最近の対応、名刺画像の登録・裏面メモ・削除、企業をまたいだ人物の一覧・詳細・CSV 書き出し、登録前の類似企業検索、`twp company` による取引先企業(仕入先を含む)の登録・更新・削除、`twp prospect` によるアプローチ先(見込客)の一覧・登録・更新・削除・CSV での一括登録と書き出し・重複確認・顧客への昇格と対応履歴の記録。販売管理・顧客管理の権限が要ります |
28
28
  | **できる** | `twp media` によるメディアライブラリのファイルのアップロード・一覧・ダウンロード・削除(ゴミ箱へ移す)・一括操作(公開・非公開・アーカイブ・移動・削除・復元・ZIP ダウンロード)、`twp storage get` によるストレージ使用量の確認(管理者) |
29
29
  | **できる** | `twp attendance` による自分の勤怠の参照(いまの打刻状態・打刻の履歴・月の勤怠表)と打刻、管理者向けの残業サマリ(36協定を含む)・締め状況の参照 |
30
30
  | **できる** | `twp leave` による有給の残日数・取得履歴・付与履歴の参照と有給の申請(`twp leave request`)、`twp workchange list` / `twp shift list` による月の勤務変更・シフトの参照(`--me` で自分の分・無ければ全員分=勤怠の管理者) |
@@ -381,6 +381,7 @@ twp estimate delete <見積ID> --yes
381
381
  twp estimate memo <見積ID> (--text <本文> | --text-file <パス> | --clear)
382
382
  twp estimate link-invoice <見積ID> (--invoice <請求番号> | --invoice-id <請求ID>) --yes
383
383
  twp estimate deposits <見積ID>
384
+ twp estimate download <見積ID> --out <パス.pdf> [--kind estimate|order|order-acceptance] [--force]
384
385
  twp estimate allocation list <見積ID>
385
386
  twp estimate allocation set <見積ID> --split <部署>=<金額> [--split <部署>=<金額>]... --yes
386
387
  twp estimate allocation delete <見積ID> --yes
@@ -403,6 +404,7 @@ twp estimate scan-order-form --file <パス> --yes
403
404
  - **案件書類(`case-document`)は見積に紐づく注文書・個別契約書・その他の書類です。** PDF・画像(JPEG/PNG)・Office(Word/Excel)を登録でき、形式の合わないファイルは送る前に止めます。登録・差替え・更新は**顧客管理**の「編集者」以上、削除は「管理者」です(販売管理の権限ではありません)。容量検査・差替え・ダウンロードの扱いは顧客の契約書と同じです
404
405
  - **`scan-order-form` はテナントの AI クレジットを消費するので `--yes` が要ります。** 読み取った注文書番号は候補で、見積は変わりません(見積へ入れるなら `update` で `order_no` を送ります)
405
406
  - 見積の作成・更新・削除・メモ・紐づけ・按分・注文書の読み取りは販売管理の「メンバー」以上の権限が要ります
407
+ - **帳票の PDF(`twp estimate|invoice|purchase download`)は画面の「PDF出力」と同じものです。** `--kind` を省くと見積書・請求書・(仕入の)注文書を書き出します。見積の `order` は見積から作る注文書、仕入の `order` は仕入先へ出す注文書で、別の書類です。印影・押印の有無はサーバが書類ごとに決めます。既存のファイルは上書きしません(`--force`)。販売管理の「メンバー」以上で、その見積・請求・仕入を閲覧できる人が使えます
406
408
  - ヘルプは `twp estimate help` / `twp estimate allocation help` / `twp estimate case-document help`
407
409
 
408
410
  ### 請求を書く・出力する・送る
@@ -420,6 +422,7 @@ twp invoice memo <請求ID> (--text <本文> | --text-file <パス> | --clear)
420
422
  twp invoice export --out <パス.csv> [--force] [--format csv|mf-journal] [--debit-account <科目>] [--credit-account <科目>] [一覧と同じ絞り込み]
421
423
  twp invoice send <請求ID> --to <メール> [--to <メール>]... [--cc <メール>]... [--message <本文>] --yes
422
424
  twp invoice payment-link <請求ID> --yes
425
+ twp invoice download <請求ID> --out <パス.pdf> [--kind invoice|delivery|inspection] [--force]
423
426
  ```
424
427
 
425
428
  - **請求の内容は見積と同じく JSON ファイル(`--content-file`)で渡します。** `--generate-cli-skeleton` がひな形と各キーに渡せる値を出し、サーバに無いキーは送る前にすべて挙げて止めます。`estimate_id`(見積から作る)・`invoice_no_rule_id`(採番)・`direct_create`(見積を自動作成)は作成のときだけ指定できます
@@ -485,6 +488,98 @@ twp receivable closing reopen <YYYY-MM> --yes
485
488
  - **締め(`closing close`)はテナント全体の月次の確定値です。** 締めた月の入金は、登録・入金日の変更・削除・引当の変更をサーバが断ります(請求は締めの対象外)。締める前に、締める月の現在値と前月の締めとの差異を表示します(`--dry-run` でも出ます)。解除(`closing reopen`)すると確定値は消えます
486
489
  - 負の過不足金額は `--excess-amount=-500` のように `=` でつないで渡します。ヘルプは `twp deposit help` / `twp receivable help`
487
490
 
491
+ ### 仕入を扱う(販売管理のメンバー以上)
492
+
493
+ ```
494
+ twp purchase list [--keyword <語>] [--status <ステータス>] [--supplier <仕入先>] [--project <コード|ID>] [--contract-type single|continuous] [--from <日付>] [--to <日付>] [--all] [--limit <件数>]
495
+ twp purchase get <仕入ID>
496
+ twp purchase create --generate-cli-skeleton --output json > purchase.json
497
+ twp purchase create --content-file purchase.json
498
+ twp purchase update <仕入ID> (--generate-cli-skeleton | --content-file <パス>)
499
+ twp purchase delete <仕入ID> --yes
500
+ twp purchase duplicate <仕入ID>
501
+ twp purchase memo <仕入ID> (--text <本文> | --text-file <パス> | --clear)
502
+ twp purchase download <仕入ID> --out <パス.pdf> [--kind order|order-acceptance] [--force]
503
+ twp purchase document list --purchase <仕入ID>
504
+ twp purchase document create --purchase <仕入ID> --file <パス> --type quotation|order_form|order_acknowledgement --name <書類名>
505
+ twp purchase document get <書類ID> --purchase <仕入ID>
506
+ twp purchase document add-version <書類ID> --purchase <仕入ID> --file <パス>
507
+ twp purchase document update <書類ID> --purchase <仕入ID> [--name <書類名>] [--type <種別>]
508
+ twp purchase document delete <書類ID> --purchase <仕入ID> --yes
509
+ twp purchase document download <書類ID> --purchase <仕入ID> --out <パス> [--rev <版番号>] [--force]
510
+ twp purchase document scan <書類ID> --purchase <仕入ID> [--rev <版番号>] --yes
511
+ ```
512
+
513
+ - **承認申請中・正式承認済・取消の仕入は、備考・メモなど一部しか書き換えられません。** サーバはそれ以外の項目を黙って捨てるので、`update` は送る前に今の仕入を読み、捨てられる項目を挙げて止めます。`update --generate-cli-skeleton` は書き込める項目だけを出します。件名・部署はサーバが毎回必須とするので、書かなければ今の値を補って送ります
514
+ - **`document scan` は AI クレジットを消費します**(`--yes` が要ります)。読み取るのは見積書(`--type quotation`)の PDF・画像だけで、結果は候補です。仕入へ入れるなら `twp purchase update --content-file` で送ります
515
+ - `duplicate` は明細を写し、添付書類は写しません。`delete` は添付書類も一緒に削除します(販売管理の「管理者」の権限が要ります。添付書類の削除も同じ)。ヘルプは `twp purchase help`
516
+
517
+ ### 支払を扱う(販売管理の管理者)
518
+
519
+ ```
520
+ twp supplier-payment list [--keyword <語>] [--supplier <取引先>] [--user <ユーザー>] [--month <YYYY-MM>] [--status <ステータス>]... [--from <日付>] [--to <日付>] [--all] [--limit <件数>]
521
+ twp supplier-payment get <支払ID>
522
+ twp supplier-payment create (--supplier-name <支払先名> | --supplier <取引先>) --month <YYYY-MM> [--amount <円>] [--invoice-date <日付>] [--due-date <日付>] [--status <ステータス>]
523
+ twp supplier-payment update <支払ID> [--amount <円>] [--status <ステータス>] [--executed-date <日付>] [--clear <項目>]...
524
+ twp supplier-payment delete <支払ID> --yes
525
+ twp supplier-payment set-status --file <IDを1行に1つ書いたファイル> --status <ステータス> --yes
526
+ twp supplier-payment schedule list [--keyword <語>] [--active-month <YYYY-MM>]
527
+ twp supplier-payment schedule get <マスタID>
528
+ twp supplier-payment schedule create (--supplier-name <支払先名> | --supplier <取引先>) --start-month <YYYY-MM> [--end-month <YYYY-MM>] [--user <ユーザー>]
529
+ twp supplier-payment schedule update <マスタID> [--end-month <YYYY-MM>] [--clear <項目>]...
530
+ twp supplier-payment schedule delete <マスタID> --yes
531
+ ```
532
+
533
+ - **支払は注文書(`twp purchase`)とは別の記録です。** ステータスは 請求書未着 / 請求書受領 / 振込予約済 / 支払済 で、表示名でもコード(`invoice_pending` 等)でも指定できます
534
+ - **`set-status` は全件成功か全件失敗です**(100 件まで)。送る前に全件を読み、見つからない ID・重複・形の誤りが1つでもあれば行番号をすべて出して1件も変えません。`--dry-run` で1件ずつの「今のステータス → 変更後」を確かめられます
535
+ - 支払先マスタは毎月の支払の設定で、月初に開始月〜終了月の各月の支払(請求書未着)が作られます。生成を止めるなら `--end-month` を入れます。マスタを削除しても生成済みの支払は残ります。ヘルプは `twp supplier-payment help`
536
+
537
+ ### 帳票に載る自社情報を設定する(事業所・振込先・印影・読み取りのマッピング表)
538
+
539
+ ```
540
+ twp business-place list [--keyword <語>] | get <事業所ID> | delete <事業所ID> --yes
541
+ twp business-place create --name <事業所名> [--post-code <郵便番号>] [--address1 <住所>] [--tel <電話>] [--invoice-no <登録番号>] [--start-date <日付>] [--end-date <日付>] [--sort <整数>]
542
+ twp business-place update <事業所ID> [項目…] [--clear <項目>]...
543
+ twp payee list [--keyword <語>] | get <振込先ID> | delete <振込先ID> --yes
544
+ twp payee create --name <振込先名> (--content <振込先表示> | --content-file <ファイル>) [--start-date <日付>] [--end-date <日付>]
545
+ twp payee update <振込先ID> [--content-file <ファイル>] [--clear <項目>]...
546
+ twp seal-impression list [--keyword <語>] | get <印影ID> | delete <印影ID> --yes
547
+ twp seal-impression create --name <印影名> --file <画像>
548
+ twp seal-impression update <印影ID> [--name <印影名>] [--file <画像>]
549
+ twp purchase ai-mapping targets
550
+ twp purchase ai-mapping list [--target <反映先>] [--supplier <取引先> | --common] [--active true|false]
551
+ twp purchase ai-mapping create --source-label <見積書の項目名> --target <反映先> [--supplier <取引先>]
552
+ twp purchase ai-mapping update <マッピングID> [--target <反映先>] [--common] [--active false]
553
+ twp purchase ai-mapping delete <マッピングID> --yes
554
+ ```
555
+
556
+ - 事業所・振込先・印影は見積書・請求書の内容に効きます。参照は販売管理のメンバー以上、登録・更新・削除は販売管理の管理者です。**削除は使用中(見積・請求で選ばれている)でも止まりません**
557
+ - **振込先の一覧は、4桁以上の数字の連なりを末尾4桁以外 `*` にして出します**(`--output json` も同じ)。全文は `get` で見られます。`--debug` は振込先の送信・応答の本文を出しません。振込先表示は改行を含むので `--content-file` が便利です
558
+ - 印影の画像は PNG / JPEG / GIF・5MB まで(画面と同じ)。登録の後に画像が確定したことを確かめ、確定していなければ成功と言いません
559
+ - 読み取りのマッピング表は、見積書を AI で読み取るとき(`twp purchase document scan`)に、見積書の項目名を仕入のどの項目へ入れるかの対応です。`--target` はキー(`title` 等)でも表示名(`件名` 等)でも指定でき、選べる値は `targets` で見られます。仕入先を付けないものは全社共通です。削除だけ販売管理の管理者が要ります
560
+
561
+ ### 番号の振り方・見積フォーマット・端数処理を設定する
562
+
563
+ ```
564
+ twp estimate no-rule list | get <ルールID> # invoice no-rule / purchase no-rule も同じ形
565
+ twp estimate no-rule create --name <ルール名> --digit-count <桁数> [--prefix <文字>] [--current-number <整数>] [--count-up-num <整数>] [--sort <整数>]
566
+ twp estimate no-rule update <ルールID> [項目…] [--clear prefix] --yes
567
+ twp estimate no-rule delete <ルールID> --yes
568
+ twp purchase no-rule update <ルールID> --active false --yes
569
+ twp estimate format list [--keyword <語>] | get <フォーマットID> | delete <フォーマットID> --yes
570
+ twp estimate format create --generate-cli-skeleton --output json > format.json
571
+ twp estimate format create --content-file format.json
572
+ twp estimate format update <フォーマットID> --content-file <ファイル>
573
+ twp rounding-setting get
574
+ twp rounding-setting update --method <round|ceil|floor> --yes
575
+ ```
576
+
577
+ - **番号ルールは、これから作る見積・請求・仕入の番号そのものを決めます。** 次の番号は「今の連番+増分」を桁数でゼロ埋めして prefix を付けたもので、一覧・詳細の `next_number` に出ます。`update` / `delete` は `--yes` が要り、送る前に次に発行される番号を変更前・変更後で出します(`--dry-run` は `--yes` 無しで使えます)。今の連番を小さくすると、発行済みと同じ番号が再び振られます
578
+ - 空にできるのは prefix だけです(`--clear prefix`)。`--active` は仕入の番号ルールだけにあります。見積・請求の番号ルールを消すときは、それを既定に選んでいる見積フォーマットを注記します(削除は止まりません)
579
+ - 見積フォーマットは項目が多いので JSON ファイルで渡します。ひな形は `--generate-cli-skeleton` で出せ、サーバに無いキーは送る前に止めます。`*_manage_content` は送ると丸ごと置き換わります
580
+ - 端数処理(四捨五入・切り上げ・切り捨て)は `--method` に `round` / `ceil` / `floor` か表示名を渡します。変えると、これ以降に作る見積・請求・契約・仕入から効きます(作成済みのものの金額は変わりません)。支払だけは、金額・税率を書き換えるたびにその時点の方式で税抜額を計算し直します
581
+ - 参照は販売管理のメンバー以上、書き込みは販売管理の管理者です(仕入の番号ルールの登録・更新だけはメンバー以上)
582
+
488
583
  ### 顧客を登録・更新・削除する
489
584
 
490
585
  ```
@@ -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-VCZVITWG.js";import{loadLocalConfig}from"./chunk-QVPU4HHG.js";import"./chunk-N2UVRM3Z.js";import{loadAiConfig}from"./chunk-AEJHDFXB.js";import"./chunk-GY7KI5E5.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-5R4SEO3I.js";import"./chunk-II5RVJQN.js";import{requireResolved,singleRef,withResolved}from"./chunk-ZN5EFDH7.js";import{acknowledgement,isRecord,pick}from"./chunk-ZWVYVS2A.js";
4
- import{ApiResponseError,UsageError}from"./chunk-7WSNIXTQ.js";import"./chunk-PMOUHEJQ.js";import"./chunk-5WGOHFAS.js";import"./chunk-RZVI6PMW.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-L25UV7DE.js";import{loadLocalConfig}from"./chunk-QVPU4HHG.js";import"./chunk-N2UVRM3Z.js";import"./chunk-G2THOTBW.js";import{loadAiConfig}from"./chunk-AEJHDFXB.js";import"./chunk-GY7KI5E5.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-5R4SEO3I.js";import"./chunk-II5RVJQN.js";import{requireResolved,singleRef,withResolved}from"./chunk-ZN5EFDH7.js";import{acknowledgement,
4
+ isRecord,pick}from"./chunk-ZWVYVS2A.js";import{ApiResponseError,UsageError}from"./chunk-7WSNIXTQ.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{expandServerSkills,prepareSkillOverlay}from"./chunk-L52XJFJR.js";import"./chunk-QWSXHHFT.js";import"./chunk-VK2Z4QGC.js";import{detectAiClis}from"./chunk-T4QZO6RQ.js";import"./chunk-P4AEFKLM.js";import"./chunk-VRBI2NPI.js";import"./chunk-J7QYPKVK.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";
4
- import{isForceOnly,killProcessTree,system32}from"./chunk-N2UVRM3Z.js";import{DEFAULT_CLAUDE_LAUNCHER,activeSlotPath,detectClaudeAutoSwitch,isClaudeAi,isUsableModelId,modelFitsRoute,resolveSpawnTarget,usesBedrock,wrapWithAutoSwitch}from"./chunk-AEJHDFXB.js";import"./chunk-GY7KI5E5.js";import"./chunk-7WSNIXTQ.js";import{findExecutable,isWindowsDriveAbsolute}from"./chunk-PMOUHEJQ.js";import"./chunk-5WGOHFAS.js";import"./chunk-VSJBJXZO.js";import{spawnSync}from"child_process";import fs2 from"fs";import path2 from"path";import{spawn}from"child_process";import fs from"fs";import path from"path";var FINAL_REPORT_BEGIN="<<<AI_FINAL_REPORT>>>";var FINAL_REPORT_END="<<<END_AI_FINAL_REPORT>>>";var ClaudeStreamRenderer=class{constructor(now=()=>new Date){this.now=now}now;toolNames=new Map;toolCount=0;result={subtype:null,isError:null,numTurns:null,costUsd:null,durationMs:null,tokensIn:null,tokensOut:null,rateLimited:false,resetsAt:null,finalText:""};push(line){const trimmed=line.trim();if(trimmed==="")return[];let event;try{const parsed=JSON.parse(trimmed);if(parsed===null||typeof parsed!=="\
3
+ import{failureHint,isAuthError,isCliFatalText,isRateLimited,isServerAiType,isUntrusted,maxTurnsReached,rateLimitWaitSeconds,tailForScan}from"./chunk-ZOOEH7ZE.js";import{expandServerSkills,prepareSkillOverlay}from"./chunk-HBH5V2CP.js";import{detectAiClis}from"./chunk-T4QZO6RQ.js";import"./chunk-VUHKLW66.js";import"./chunk-P4AEFKLM.js";import"./chunk-VRBI2NPI.js";import{isForceOnly,killProcessTree,system32}from"./chunk-N2UVRM3Z.js";import"./chunk-G2THOTBW.js";
4
+ import{DEFAULT_CLAUDE_LAUNCHER,activeSlotPath,detectClaudeAutoSwitch,isClaudeAi,isUsableModelId,modelFitsRoute,resolveSpawnTarget,usesBedrock,wrapWithAutoSwitch}from"./chunk-AEJHDFXB.js";import"./chunk-GY7KI5E5.js";import"./chunk-7WSNIXTQ.js";import{findExecutable,isWindowsDriveAbsolute}from"./chunk-PMOUHEJQ.js";import"./chunk-J7QYPKVK.js";import"./chunk-5WGOHFAS.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";import{spawnSync}from"child_process";import fs2 from"fs";import path2 from"path";import{spawn}from"child_process";import fs from"fs";import path from"path";var FINAL_REPORT_BEGIN="<<<AI_FINAL_REPORT>>>";var FINAL_REPORT_END="<<<END_AI_FINAL_REPORT>>>";var ClaudeStreamRenderer=class{constructor(now=()=>new Date){this.now=now}now;toolNames=new Map;toolCount=0;result={subtype:null,isError:null,numTurns:null,costUsd:null,durationMs:null,tokensIn:null,tokensOut:null,rateLimited:false,resetsAt:null,finalText:""};push(line){const trimmed=line.trim();if(trimmed==="")return[];let event;try{const parsed=JSON.parse(trimmed);if(parsed===null||typeof parsed!=="\
5
5
  object"||Array.isArray(parsed)){return[line]}event=parsed}catch{return[line]}switch(event["type"]){case"rate_limit_event":return this.onRateLimit(event);case"assistant":return this.onAssistant(event);case"user":return this.onUser(event);case"result":return this.onResult(event);default:return event["type"]==="system"?[]:[line]}}sawRateLimit(){return this.result.rateLimited}lastRateLimitNote="";onRateLimit(event){const info=event["rate_limit_info"];if(info===null||typeof info!=="object")return[];const rec=info;
6
6
  const status=typeof rec["status"]==="string"?rec["status"]:"";const resets=typeof rec["resetsAt"]==="number"?rec["resetsAt"]:null;if(status==="")return[];const at=isSaneEpochSec(resets)?` resets=${new Date(resets*1e3).toISOString()}`:"";if(status.startsWith("allowed")){if(status==="allowed")return[];const seen=`${status}|${resets??""}`;if(seen===this.lastRateLimitNote)return[];this.lastRateLimitNote=seen;return[this.line(`\u2139\uFE0F \u4E0A\u9650\u306B\u63A5\u8FD1\uFF08status=${status}${at}\uFF09\u2014 \u5B9F\
7
7
  \u884C\u306F\u7D99\u7D9A\u3057\u307E\u3059`)]}if(resets!==null)this.result.resetsAt=resets;this.result.rateLimited=true;return[this.line(`\u26A0\uFE0F \u30EC\u30FC\u30C8\u30EA\u30DF\u30C3\u30C8\u901A\u77E5: status=${status}${at}`)]}onAssistant(event){const out=[];for(const block of contentBlocks(event)){if(block.type==="tool_use"){const name=typeof block.name==="string"?block.name:"tool";if(typeof block.id==="string")this.toolNames.set(block.id,name);this.toolCount+=1;out.push(this.line(`>> ${name}${toolDetail(
@@ -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{NO_REDACT_FLAG,NO_REDACT_NOTICE,exitCodeFor,fetchAllPages,reportError}from"./chunk-C7UDUHQZ.js";import"./chunk-TLN3JSEC.js";import{evaluateQuery}from"./chunk-GDM2QUBL.js";import{renderOutput}from"./chunk-FEOST3GF.js";import{redactSecretValues,withDebug}from"./chunk-BUZKNZ45.js";import{readBody}from"./chunk-HGTG5XQ7.js";
4
- import{parseOperationArgs,repeatedValues}from"./chunk-IOGVQVGD.js";import"./chunk-ELXDRPDV.js";import{ApiError,TwpApiClient,appendQuery}from"./chunk-IF2K4PM5.js";import"./chunk-GMBJTG6A.js";import{GLOBAL_OPTIONS_HELP}from"./chunk-I4ARX6NM.js";import{AuthSession,NotLoggedInError,SessionExpiredError,loadCredentials}from"./chunk-XNLIEUAW.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import{effectiveApiUrl,resolveConfiguredOutput,resolveProfile}from"./chunk-4VZKNEVN.js";
5
- import{HELP_TOKEN}from"./chunk-UVUVEL3B.js";import"./chunk-QQRJLH6B.js";import{OUTPUT_FORMATS,resolveOutputFormat}from"./chunk-K2ONOH3L.js";import"./chunk-WVS4W5FY.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import{DEFAULT_MAX_ITEMS,DEFAULT_MAX_PAGES,envelopePaging,isPageNumberEnvelope,pageRangeNotes,positiveInteger,readEnvelopeCursor,readPageNumberCursor,shellQuote}from"./chunk-5R4SEO3I.js";import"./chunk-II5RVJQN.js";import{ApiResponseError,
6
- EXIT_OK,NetworkError,UsageError}from"./chunk-7WSNIXTQ.js";import"./chunk-RZVI6PMW.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=>/^\{[^/{}]+\}$/.
3
+ import{CommandModelMissingError,MAX_REPORTED_VIOLATIONS,loadCommandModelDomain,loadCommandModelRoutes,validateBody,validateQuery}from"./chunk-NZ7WI4RZ.js";import{NO_REDACT_FLAG,NO_REDACT_NOTICE,exitCodeFor,fetchAllPages,reportError}from"./chunk-ANK43U5E.js";import{evaluateQuery}from"./chunk-GDM2QUBL.js";import{renderOutput}from"./chunk-VK5T7ULK.js";import{redactSecretValues,withDebug}from"./chunk-UT4FACHN.js";import"./chunk-O44ZKSD2.js";import{readBody}from"./chunk-HGTG5XQ7.js";
4
+ import{parseOperationArgs,repeatedValues}from"./chunk-IOGVQVGD.js";import"./chunk-BZAXQOLB.js";import{ApiError,TwpApiClient,appendQuery}from"./chunk-IF2K4PM5.js";import"./chunk-GMBJTG6A.js";import{GLOBAL_OPTIONS_HELP}from"./chunk-I4ARX6NM.js";import{AuthSession,NotLoggedInError,SessionExpiredError,loadCredentials}from"./chunk-XNLIEUAW.js";import{effectiveApiUrl,resolveConfiguredOutput,resolveProfile}from"./chunk-4VZKNEVN.js";import{HELP_TOKEN}from"./chunk-EOSSFTNG.js";
5
+ import"./chunk-QQRJLH6B.js";import{OUTPUT_FORMATS,resolveOutputFormat}from"./chunk-K2ONOH3L.js";import"./chunk-WVS4W5FY.js";import{DEFAULT_MAX_ITEMS,DEFAULT_MAX_PAGES,envelopePaging,isPageNumberEnvelope,pageRangeNotes,positiveInteger,readEnvelopeCursor,readPageNumberCursor,shellQuote}from"./chunk-5R4SEO3I.js";import"./chunk-II5RVJQN.js";import"./chunk-ZWVYVS2A.js";import{ApiResponseError,EXIT_OK,NetworkError,UsageError}from"./chunk-7WSNIXTQ.js";import{httpFetch}from"./chunk-J7QYPKVK.js";
6
+ import"./chunk-RZVI6PMW.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,9 +1,9 @@
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-HAIZHSNZ.js";import{buildDiffLines,diffStat}from"./chunk-VRBI2NPI.js";
4
- import"./chunk-NZ7WI4RZ.js";import"./chunk-BUZKNZ45.js";import{require_fuzzysort}from"./chunk-DIMZRTLE.js";import"./chunk-ELXDRPDV.js";import"./chunk-IF2K4PM5.js";import"./chunk-GMBJTG6A.js";import{RelayError,builtinCatalog,createRuntime,loadCachedCatalog,modelLabel,pickModel,toModelInfos}from"./chunk-PWXXCLVZ.js";import"./chunk-D233KKXW.js";import"./chunk-XNLIEUAW.js";import{proxyDiagnostics}from"./chunk-J7QYPKVK.js";import{checkMinSupportedVersion,
5
- isBelowMinSupported,minSupportedBlockMessage}from"./chunk-DXXFUNYN.js";import"./chunk-4VZKNEVN.js";import{parseArgv}from"./chunk-BJLXXRSY.js";import{applyPermissionMode,checkPermission,describePermissionMode,getMode,isModeId,modeSource,nextMode}from"./chunk-NAUH75MM.js";import"./chunk-UVUVEL3B.js";import"./chunk-QQRJLH6B.js";import{isFullWidth,isWide,stringWidth,stripAnsi}from"./chunk-WVS4W5FY.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";
6
- import"./chunk-N2UVRM3Z.js";import"./chunk-II5RVJQN.js";import"./chunk-7WSNIXTQ.js";import"./chunk-PMOUHEJQ.js";import{configReadDirs,twpHomeDir}from"./chunk-RZVI6PMW.js";import{__commonJS,__export,__require,__toESM}from"./chunk-VSJBJXZO.js";var require_react_production=__commonJS({"node_modules/react/cjs/react.production.js"(exports){"use strict";var REACT_ELEMENT_TYPE=Symbol.for("react.transitional.element");var REACT_PORTAL_TYPE=Symbol.for("react.portal");var REACT_FRAGMENT_TYPE=Symbol.for("react.fragment");var REACT_STRICT_MODE_TYPE=Symbol.for("react.strict_mode");var REACT_PROFILER_TYPE=Symbol.for("react.profiler");var REACT_CONSUMER_TYPE=Symbol.for("react.consumer");var REACT_CONTEXT_TYPE=Symbol.for("react.context");var REACT_FORWARD_REF_TYPE=Symbol.
3
+ import{RESIDENT_TOKEN_CAP,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-7HVVKEOA.js";import"./chunk-NZ7WI4RZ.js";import"./chunk-UT4FACHN.js";
4
+ import{buildDiffLines,diffStat}from"./chunk-VRBI2NPI.js";import{require_fuzzysort}from"./chunk-DIMZRTLE.js";import"./chunk-BZAXQOLB.js";import"./chunk-IF2K4PM5.js";import"./chunk-GMBJTG6A.js";import{RelayError,builtinCatalog,createRuntime,loadCachedCatalog,modelLabel,pickModel,toModelInfos}from"./chunk-6QOT7CHX.js";import"./chunk-D233KKXW.js";import"./chunk-XNLIEUAW.js";import{checkMinSupportedVersion,isBelowMinSupported,minSupportedBlockMessage}from"./chunk-DXXFUNYN.js";
5
+ import"./chunk-4VZKNEVN.js";import{parseArgv}from"./chunk-B7YCG2T7.js";import{applyPermissionMode,checkPermission,describePermissionMode,getMode,isModeId,modeSource,nextMode}from"./chunk-NAUH75MM.js";import"./chunk-EOSSFTNG.js";import"./chunk-QQRJLH6B.js";import{isFullWidth,isWide,stringWidth,stripAnsi}from"./chunk-WVS4W5FY.js";import"./chunk-N2UVRM3Z.js";import"./chunk-II5RVJQN.js";import"./chunk-7WSNIXTQ.js";import"./chunk-PMOUHEJQ.js";
6
+ import{proxyDiagnostics}from"./chunk-J7QYPKVK.js";import{configReadDirs,twpHomeDir}from"./chunk-RZVI6PMW.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import{__commonJS,__export,__require,__toESM}from"./chunk-VSJBJXZO.js";var require_react_production=__commonJS({"node_modules/react/cjs/react.production.js"(exports){"use strict";var REACT_ELEMENT_TYPE=Symbol.for("react.transitional.element");var REACT_PORTAL_TYPE=Symbol.for("react.portal");var REACT_FRAGMENT_TYPE=Symbol.for("react.fragment");var REACT_STRICT_MODE_TYPE=Symbol.for("react.strict_mode");var REACT_PROFILER_TYPE=Symbol.for("react.profiler");var REACT_CONSUMER_TYPE=Symbol.for("react.consumer");var REACT_CONTEXT_TYPE=Symbol.for("react.context");var REACT_FORWARD_REF_TYPE=Symbol.
7
7
  for("react.forward_ref");var REACT_SUSPENSE_TYPE=Symbol.for("react.suspense");var REACT_MEMO_TYPE=Symbol.for("react.memo");var REACT_LAZY_TYPE=Symbol.for("react.lazy");var REACT_ACTIVITY_TYPE=Symbol.for("react.activity");var REACT_VIEW_TRANSITION_TYPE=Symbol.for("react.view_transition");var MAYBE_ITERATOR_SYMBOL=Symbol.iterator;function getIteratorFn(maybeIterable){if(null===maybeIterable||"object"!==typeof maybeIterable)return null;maybeIterable=MAYBE_ITERATOR_SYMBOL&&maybeIterable[MAYBE_ITERATOR_SYMBOL]||
8
8
  maybeIterable["@@iterator"];return"function"===typeof maybeIterable?maybeIterable:null}var ReactNoopUpdateQueue={isMounted:function(){return false},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}};var assign=Object.assign;var emptyObject={};function Component(props,context,updater){this.props=props;this.context=context;this.refs=emptyObject;this.updater=updater||ReactNoopUpdateQueue}Component.prototype.isReactComponent={};Component.prototype.setState=
9
9
  function(partialState,callback){if("object"!==typeof partialState&&"function"!==typeof partialState&&null!=partialState)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,partialState,callback,"setState")};Component.prototype.forceUpdate=function(callback){this.updater.enqueueForceUpdate(this,callback,"forceUpdate")};function ComponentDummy(){}ComponentDummy.prototype=Component.prototype;function PureComponent2(props,context,updater){
@@ -1212,7 +1212,7 @@ cwd()){const listed=await gitListFiles(cwd2);const raw=listed??await walkFiles(c
1212
1212
  1;const after=/^[^\s]*/.exec(text.slice(cursor))?.[0]??"";return{query,start,end:cursor+after.length}}var TWP_SLASH_ROUTES={"/tasks":{domain:"task",operation:"list"},"/task":{domain:"task",operation:"get"},"/projects":{domain:"project",operation:"list"}};function isTwpSlashCommand(name){return Object.hasOwn(TWP_SLASH_ROUTES,name)}async function runTwpSlashCommand(name,args,deps){const route=TWP_SLASH_ROUTES[name];if(!Object.hasOwn(TWP_SLASH_ROUTES,name)||route===void 0){return{code:2,out:"",err:`\u4E0D\u660E\u306A\u30B3\u30DE\u30F3\u30C9: ${name}
1213
1213
  `}}const parsed=parseArgv([route.domain,route.operation,...args]);if(parsed.command!=="domain"||parsed.domain!==route.domain){return{code:2,out:"",err:`${name}: \u3053\u306E\u5F15\u6570\u306F\u4F7F\u3048\u307E\u305B\u3093\uFF08${args.join(" ")}\uFF09
1214
1214
  `}}if(parsed.unknown.length>0){return{code:2,out:"",err:`\u4E0D\u660E\u306A\u5F15\u6570: ${parsed.unknown.join(" ")}
1215
- `}}let out="";let err="";const io={out:text=>void(out+=text),err:text=>void(err+=text),isTty:true};const globals={profile:parsed.profile??deps.profile,...parsed.output!==void 0?{output:parsed.output}:{},...parsed.query!==void 0?{query:parsed.query}:{},dryRun:parsed.dryRun,debug:parsed.debug,yes:parsed.yes,refresh:parsed.refresh};const{runDomain}=await import("./run-KNZ43HFF.js");try{const code=await runDomain({domain:route.domain,...parsed.operation!==void 0?{operation:parsed.operation}:
1215
+ `}}let out="";let err="";const io={out:text=>void(out+=text),err:text=>void(err+=text),isTty:true};const globals={profile:parsed.profile??deps.profile,...parsed.output!==void 0?{output:parsed.output}:{},...parsed.query!==void 0?{query:parsed.query}:{},dryRun:parsed.dryRun,debug:parsed.debug,yes:parsed.yes,refresh:parsed.refresh};const{runDomain}=await import("./run-33WHOIOO.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,4 +1,4 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{CHECK_INTERVAL_MS,DISABLE_ENV,PARENT_PID_ENV,WORKER_ENV,autoUpdateDisabledReason,classifyInstall,describeAutoUpdate,isCheckDue,listRegisteredPids,lockFilePath,onStartup,pickNotice,readUpdateState,registerRunning,resolveCliPath,runDirPath,sameNpmPath,stateFilePath,workerEnv,writeUpdateState}from"./chunk-2NKVGAAE.js";import"./chunk-DXXFUNYN.js";import"./chunk-4VZKNEVN.js";import"./chunk-NHYMHCAT.js";import"./chunk-5WGOHFAS.js";import"./chunk-RZVI6PMW.js";
3
+ import{CHECK_INTERVAL_MS,DISABLE_ENV,PARENT_PID_ENV,WORKER_ENV,autoUpdateDisabledReason,classifyInstall,describeAutoUpdate,isCheckDue,listRegisteredPids,lockFilePath,onStartup,pickNotice,readUpdateState,registerRunning,resolveCliPath,runDirPath,sameNpmPath,stateFilePath,workerEnv,writeUpdateState}from"./chunk-YM7TKMNO.js";import"./chunk-DXXFUNYN.js";import"./chunk-4VZKNEVN.js";import"./chunk-5WGOHFAS.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";
4
4
  import"./chunk-VSJBJXZO.js";export{CHECK_INTERVAL_MS,DISABLE_ENV,PARENT_PID_ENV,WORKER_ENV,autoUpdateDisabledReason,classifyInstall,describeAutoUpdate,isCheckDue,listRegisteredPids,lockFilePath,onStartup,pickNotice,readUpdateState,registerRunning,resolveCliPath,runDirPath,sameNpmPath,stateFilePath,workerEnv,writeUpdateState};
@@ -1,7 +1,7 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{fetchLatestVersion,isBehindLatest,resolveNpmCommand}from"./chunk-REPGG75N.js";import"./chunk-PWXXCLVZ.js";import"./chunk-D233KKXW.js";import"./chunk-XNLIEUAW.js";import"./chunk-J7QYPKVK.js";import{PARENT_PID_ENV,WORKER_ENV,autoUpdateDisabledReason,classifyInstall,isCheckDue,listRegisteredPids,lockFilePath,readUpdateState,resolveCliPath,runDirPath,writeUpdateState}from"./chunk-2NKVGAAE.js";import{PACKAGE_NAME,parseVersionCore}from"./chunk-DXXFUNYN.js";
4
- import"./chunk-4VZKNEVN.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import"./chunk-PMOUHEJQ.js";import"./chunk-5WGOHFAS.js";import"./chunk-RZVI6PMW.js";import"./chunk-VSJBJXZO.js";import{execFile}from"child_process";import fs from"fs";import path from"path";var PARENT_WAIT_MAX_MS=12*60*60*1e3;var PARENT_POLL_MS=1e3;var LOCK_STALE_MS=PARENT_WAIT_MAX_MS+60*60*1e3;var INSTALL_TIMEOUT_MS=0;function childEnv(env){const next={...env};delete next[WORKER_ENV];delete next[PARENT_PID_ENV];return next}function createNpmRunner(env=process.env){const cmd=resolveNpmCommand({env});if(cmd===null)return null;return(args,timeoutMs)=>new Promise(resolve=>{execFile(cmd.file,[...cmd.prefix,...args],{timeout:timeoutMs,windowsHide:true,maxBuffer:8*1024*1024,cwd:path.dirname(lockFilePath(env)),env:childEnv(env)},(error,stdout,stderr)=>{if(error===null){resolve({ok:true,stdout:String(stdout),stderr:String(
3
+ import{fetchLatestVersion,isBehindLatest,resolveNpmCommand}from"./chunk-LNZTJI64.js";import"./chunk-6QOT7CHX.js";import"./chunk-D233KKXW.js";import"./chunk-XNLIEUAW.js";import{PARENT_PID_ENV,WORKER_ENV,autoUpdateDisabledReason,classifyInstall,isCheckDue,listRegisteredPids,lockFilePath,readUpdateState,resolveCliPath,runDirPath,writeUpdateState}from"./chunk-YM7TKMNO.js";import{PACKAGE_NAME,parseVersionCore}from"./chunk-DXXFUNYN.js";import"./chunk-4VZKNEVN.js";
4
+ import"./chunk-PMOUHEJQ.js";import"./chunk-J7QYPKVK.js";import"./chunk-5WGOHFAS.js";import"./chunk-RZVI6PMW.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";import{execFile}from"child_process";import fs from"fs";import path from"path";var PARENT_WAIT_MAX_MS=12*60*60*1e3;var PARENT_POLL_MS=1e3;var LOCK_STALE_MS=PARENT_WAIT_MAX_MS+60*60*1e3;var INSTALL_TIMEOUT_MS=0;function childEnv(env){const next={...env};delete next[WORKER_ENV];delete next[PARENT_PID_ENV];return next}function createNpmRunner(env=process.env){const cmd=resolveNpmCommand({env});if(cmd===null)return null;return(args,timeoutMs)=>new Promise(resolve=>{execFile(cmd.file,[...cmd.prefix,...args],{timeout:timeoutMs,windowsHide:true,maxBuffer:8*1024*1024,cwd:path.dirname(lockFilePath(env)),env:childEnv(env)},(error,stdout,stderr)=>{if(error===null){resolve({ok:true,stdout:String(stdout),stderr:String(
5
5
  stderr)});return}const e=error;resolve({ok:false,stdout:String(stdout??""),stderr:String(stderr??""),...e.killed?{error:"\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8\u3057\u307E\u3057\u305F"}:typeof e.code==="string"?{error:e.code}:{}})})})}function summarizeNpmFailure(result){const text=`${result.stderr}
6
6
  ${result.stdout}`;const code=/npm (?:ERR!|error) code (\S+)/.exec(text)?.[1]??result.error;let reason;if(code==="EACCES"||code==="EPERM"){reason=`\u30B0\u30ED\u30FC\u30D0\u30EB\u306E\u5C0E\u5165\u5148\u306B\u66F8\u304D\u8FBC\u3080\u6A29\u9650\u304C\u3042\u308A\u307E\u305B\u3093\uFF08${code}\uFF09`}else if(code!==void 0&&/^(ENOTFOUND|ETIMEDOUT|ECONNREFUSED|ECONNRESET|EAI_AGAIN|ENETUNREACH)$/.test(code)){reason=`npm registry \u306B\u63A5\u7D9A\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08${code}\
7
7
  \uFF09`}else if(code!==void 0){reason=`npm \u304C\u5931\u6557\u3057\u307E\u3057\u305F\uFF08${code}\uFF09`}else{const line=text.split("\n").map(l=>l.trim()).find(l=>l!=="")??"\u4E0D\u660E\u306A\u30A8\u30E9\u30FC";reason=`npm \u304C\u5931\u6557\u3057\u307E\u3057\u305F: ${line}`}return stripTerminalControls(reason).slice(0,200)}function readInstalledVersion(cliPath){try{const pkgRoot=path.dirname(path.dirname(cliPath));const pkg=JSON.parse(fs.readFileSync(path.join(pkgRoot,"package.json"),"utf8"));
@@ -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-HGTG5XQ7.js";import{BACKLOG_BASE_PATH,BACKLOG_PROJECT_SCOPE_LABEL,BACKLOG_SCOPE_LABEL,backlogSpacePath,isExactNumericId,resolveNamed}from"./chunk-ELXDRPDV.js";import"./chunk-IF2K4PM5.js";import"./chunk-GMBJTG6A.js";import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.js";import"./chunk-NHYMHCAT.js";import"./chunk-II5RVJQN.js";import{requireResolved,singleRef,withResolved}from"./chunk-ZN5EFDH7.js";import{isRecord,pick}from"./chunk-ZWVYVS2A.js";
4
- import{ApiResponseError,UsageError}from"./chunk-7WSNIXTQ.js";import"./chunk-RZVI6PMW.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{readBody}from"./chunk-HGTG5XQ7.js";import{BACKLOG_BASE_PATH,BACKLOG_PROJECT_SCOPE_LABEL,BACKLOG_SCOPE_LABEL,backlogSpacePath,isExactNumericId,resolveNamed}from"./chunk-BZAXQOLB.js";import"./chunk-IF2K4PM5.js";import"./chunk-GMBJTG6A.js";import"./chunk-4VZKNEVN.js";import"./chunk-II5RVJQN.js";import{requireResolved,singleRef,withResolved}from"./chunk-ZN5EFDH7.js";import{isRecord,pick}from"./chunk-ZWVYVS2A.js";import{ApiResponseError,UsageError}from"./chunk-7WSNIXTQ.js";
4
+ import"./chunk-J7QYPKVK.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\
5
5
  eatedUser","parentIssueId","startDate","dueDate","estimatedHours","actualHours","created","updated"];var COMMENT_COLUMNS=["id","created","createdUserId","createdUser","content","changeLog"];function commentRow(row){const source=isRecord(row)?row:{};const user=isRecord(source["createdUser"])?source["createdUser"]:{};return pick({...source,createdUserId:user["id"]??null,createdUser:user["name"]??null},COMMENT_COLUMNS)}var ATTACHMENT_COLUMNS=["id","name","size","contentType","createdUserId","create\
6
6
  dUser","created"];var STATUS_COLUMNS=["id","name","color"];var USER_COLUMNS=["id","userId","name","mailAddress","roleType"];var SPACE_FLAG={name:"--space",summary:"Backlog \u30B9\u30DA\u30FC\u30B9\uFF08ID / \u30B9\u30DA\u30FC\u30B9URL / \u30B5\u30D6\u30C9\u30E1\u30A4\u30F3\uFF09\u3002\u767B\u9332\u304C1\u4EF6\u306A\u3089\u7701\u7565\u3067\u304D\u307E\u3059",takesValue:true,placeholder:"<ID|URL>"};var BODY_MAX_CHARS=1e5;var BODY_FLAGS=[{name:"--body-file",summary:"\u672C\u6587\u3092\u30D5\u30A1\u30A4\u30EB\u304B\u3089\u8AAD\u3080\uFF08- \u3067\u6A19\u6E96\u5165\u529B\uFF09\u3002\u6539\u884C\u30FBMarkdown\
7
7
  \u3092\u58CA\u3055\u306A\u3044\u4E3B\u7D4C\u8DEF",takesValue:true,placeholder:"<\u30D1\u30B9|->"},{name:"--body",summary:"\u672C\u6587\u3092\u76F4\u63A5\u6307\u5B9A\u3059\u308B\uFF08\u4E00\u884C\u5411\u3051\u3002--body-file \u3068\u306E\u4F75\u7528\u306F\u30A8\u30E9\u30FC\uFF09",takesValue:true,placeholder:"<\u6587\u5B57\u5217>"}];function bodyHelp(fileFlag,inlineFlag){return`\u672C\u6587\u306F ${fileFlag} \u3092\u4E3B\u7D4C\u8DEF\u306B\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u30B7\u30A7\u30EB\u306E\u5F15\u6570\u306B\u8F09\u305B\u308B\u3068\u6539\u884C\u30FBMarkdown \u306E\u898B\u51FA\u3057\uFF08#\uFF09\u30FB
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{apiExit,currentRevisionOf,errorDetail,pickNumber,printDiff,readUtf8Strict,shellQuote}from"./chunk-P4AEFKLM.js";import"./chunk-VRBI2NPI.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import{EXIT_API_SERVER,EXIT_FAILURE,EXIT_OK,EXIT_USAGE}from"./chunk-7WSNIXTQ.js";import"./chunk-VSJBJXZO.js";import*as fs from"fs";var DEFAULT_CHARTER_FILE="CONSTITUTION.md";async function runCharterCommand(deps,opts){const out=deps.out??(t=>void process.stdout.write(stripTerminalControls(t)));const err=deps.err??(t=>void process.stderr.write(stripTerminalControls(t)));const readFile=deps.readFile??readUtf8Strict;const writeFile=deps.writeFile??((p,c)=>fs.writeFileSync(p,c,"utf8"));const exists=deps.exists??(p=>fs.existsSync(p));return opts.op==="push"?push(deps.api,opts,{out,err,readFile}):pull(deps.api,opts,{out,err,readFile,
3
+ import{apiExit,currentRevisionOf,errorDetail,pickNumber,printDiff,readUtf8Strict,shellQuote}from"./chunk-P4AEFKLM.js";import"./chunk-VRBI2NPI.js";import{EXIT_API_SERVER,EXIT_FAILURE,EXIT_OK,EXIT_USAGE}from"./chunk-7WSNIXTQ.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";import*as fs from"fs";var DEFAULT_CHARTER_FILE="CONSTITUTION.md";async function runCharterCommand(deps,opts){const out=deps.out??(t=>void process.stdout.write(stripTerminalControls(t)));const err=deps.err??(t=>void process.stderr.write(stripTerminalControls(t)));const readFile=deps.readFile??readUtf8Strict;const writeFile=deps.writeFile??((p,c)=>fs.writeFileSync(p,c,"utf8"));const exists=deps.exists??(p=>fs.existsSync(p));return opts.op==="push"?push(deps.api,opts,{out,err,readFile}):pull(deps.api,opts,{out,err,readFile,
4
4
  writeFile,exists})}async function push(api,opts,io){if(opts.file===void 0){io.err("--file <\u30D1\u30B9> \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u4F8B: --file CONSTITUTION.md\uFF09\n");return EXIT_USAGE}let expected;if(opts.revision!==void 0){if(!/^\d+$/.test(opts.revision)){io.err(`--revision \u306F0\u4EE5\u4E0A\u306E\u6574\u6570\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${opts.revision}
5
5
  `);return EXIT_USAGE}if(!opts.yes){io.err("--revision \u306F --yes \u3068\u4E00\u7DD2\u306B\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08--yes \u306A\u3057\u3067\u306F\u767B\u9332\u3057\u307E\u305B\u3093\uFF09\n");return EXIT_USAGE}expected=Number(opts.revision)}let local;try{local=io.readFile(opts.file)}catch(e){io.err(`\u30D5\u30A1\u30A4\u30EB\u3092\u8AAD\u3081\u307E\u305B\u3093: ${opts.file}\uFF08${e.message}\uFF09
6
6
  `);return EXIT_USAGE}const current=await fetchState(api,io.err);if(typeof current==="number")return current;const before=current.charter??"";if(current.charter!==null&&current.charter===local){io.out(`\u5DEE\u5206\u306F\u3042\u308A\u307E\u305B\u3093\uFF08revision ${current.revision}\uFF09\u3002\u767B\u9332\u3057\u307E\u305B\u3093\u3067\u3057\u305F\u3002
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{CUSTOMER_FLAG,CUSTOMER_LICENSE,childForbidden,levelForbidden,prepareCustomerFlag}from"./chunk-QQLWMHGR.js";import{inspectLocalFile}from"./chunk-VECUCVIY.js";import{checkUploadQuota}from"./chunk-DDKZ5IPT.js";import{createFlags,fieldBody,hasAnyField,updateFlags}from"./chunk-MHRGKUMK.js";import{booleanText}from"./chunk-UDPJ2IGK.js";import{CUSTOMERS_PATH,isExactNumericId}from"./chunk-ELXDRPDV.js";import{ApiError}from"./chunk-IF2K4PM5.js";import{isSafePathSegment}from"./chunk-GMBJTG6A.js";
3
+ import{CUSTOMER_FLAG,CUSTOMER_LICENSE,childForbidden,levelForbidden,prepareCustomerFlag}from"./chunk-H54MGGHB.js";import{createFlags,fieldBody,hasAnyField,updateFlags}from"./chunk-BPCK5RAB.js";import{inspectLocalFile}from"./chunk-PKWMJIBM.js";import{checkUploadQuota}from"./chunk-DDKZ5IPT.js";import{booleanText}from"./chunk-UDPJ2IGK.js";import{CUSTOMERS_PATH,isExactNumericId}from"./chunk-BZAXQOLB.js";import{ApiError}from"./chunk-IF2K4PM5.js";import{isSafePathSegment}from"./chunk-GMBJTG6A.js";
4
4
  import{NotLoggedInError,SessionExpiredError}from"./chunk-XNLIEUAW.js";import{nonEmpty}from"./chunk-5R4SEO3I.js";import{requireResolved,withResolved}from"./chunk-ZN5EFDH7.js";import{acknowledgement,isRecord,pick}from"./chunk-ZWVYVS2A.js";import{ApiResponseError,UsageError}from"./chunk-7WSNIXTQ.js";import fs from"fs";import path from"path";var CONTRACT_TYPES=["basic_contract","nda","other"];var CONTRACT_TYPE_HELP="basic_contract\uFF1D\u57FA\u672C\u5951\u7D04\u66F8 / nda\uFF1D\u6A5F\u5BC6\u4FDD\u6301\u5951\u7D04\u66F8 / other\uFF1D\u305D\u306E\u4ED6\u5951\u7D04\u66F8\u985E";var FILE_NAME_MAX_CHARS=255;var PDF_MAGIC="%PDF-";var CONTRACT_FIELDS=[{kind:"text",flag:"--name",key:"document_name",label:"\u66F8\u985E\u540D",maxChars:255,summary:"\u66F8\u985E\u540D\uFF08create \u3067\u306F\u5FC5\u9808\uFF09"},{kind:"enum",flag:"--type",key:"\
5
5
  document_type",values:CONTRACT_TYPES,summary:`\u66F8\u985E\u7A2E\u5225\uFF08${CONTRACT_TYPE_HELP}\u30FBcreate \u3067\u306F\u5FC5\u9808\uFF09`}];var CONTRACT_COLUMNS=["document_id","company_id","document_type","document_name","current_version","updated_by_name","updated_at"];var VERSION_COLUMNS=["version_number","file_name","file_size","is_current","created_by_name","created_at"];var CASE_COLUMNS=["document_id","document_type_label","document_name","estimate_no","estimate_title","project_name","c\
6
6
  urrent_version","updated_at"];var FILE_FLAG={name:"--file",summary:"\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3059\u308B PDF \u30D5\u30A1\u30A4\u30EB\u306E\u30D1\u30B9\uFF08\u5FC5\u9808\uFF09",takesValue:true,placeholder:"<\u30D1\u30B9.pdf>"};var OUT_FLAG={name:"--out",summary:"\u66F8\u304D\u51FA\u3057\u5148\u306E\u30D5\u30A1\u30A4\u30EB\u30D1\u30B9\uFF08\u5FC5\u9808\u3002\u6A19\u6E96\u51FA\u529B\u3078\u306F\u51FA\u3057\u307E\u305B\u3093\uFF09",takesValue:true,placeholder:"<\u30D1\u30B9>"};var FORCE_FLAG={
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{isTrustworthyCacheFile,writePrivateFileAtomic}from"./chunk-D233KKXW.js";import{AuthSession,loadCredentials,withFileLock}from"./chunk-XNLIEUAW.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import{parseVersionCore}from"./chunk-DXXFUNYN.js";import{effectiveApiUrl,effectiveRelayUrl,resolveConfiguredModel,resolveProfile}from"./chunk-4VZKNEVN.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import{ensureTwpHome,twpHomeDir}from"./chunk-RZVI6PMW.js";var MAX_EVENT_BYTES=8*1024*1024;var SseBufferOverflowError=class extends Error{constructor(limit){super(`SSE \u306E\u30A4\u30D9\u30F3\u30C8\u5883\u754C\uFF08\u7A7A\u884C\uFF09\u304C ${limit} \u30D0\u30A4\u30C8\u4EE5\u5185\u306B\u73FE\u308C\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u4E0A\u6D41\u306E\u5FDC\u7B54\u304C\u58CA\u308C\u3066\u3044\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002`)}};var SseParser=class{constructor(maxEventBytes=MAX_EVENT_BYTES){this.maxEventBytes=maxEventBytes}maxEventBytes;buffer="";pendingCr=false;push(chunk){
3
+ import{isTrustworthyCacheFile,writePrivateFileAtomic}from"./chunk-D233KKXW.js";import{AuthSession,loadCredentials,withFileLock}from"./chunk-XNLIEUAW.js";import{parseVersionCore}from"./chunk-DXXFUNYN.js";import{effectiveApiUrl,effectiveRelayUrl,resolveConfiguredModel,resolveProfile}from"./chunk-4VZKNEVN.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import{ensureTwpHome,twpHomeDir}from"./chunk-RZVI6PMW.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";var MAX_EVENT_BYTES=8*1024*1024;var SseBufferOverflowError=class extends Error{constructor(limit){super(`SSE \u306E\u30A4\u30D9\u30F3\u30C8\u5883\u754C\uFF08\u7A7A\u884C\uFF09\u304C ${limit} \u30D0\u30A4\u30C8\u4EE5\u5185\u306B\u73FE\u308C\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u4E0A\u6D41\u306E\u5FDC\u7B54\u304C\u58CA\u308C\u3066\u3044\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002`)}};var SseParser=class{constructor(maxEventBytes=MAX_EVENT_BYTES){this.maxEventBytes=maxEventBytes}maxEventBytes;buffer="";pendingCr=false;push(chunk){
4
4
  let pending=this.pendingCr?`\r${chunk}`:chunk;this.pendingCr=pending.endsWith("\r");if(this.pendingCr)pending=pending.slice(0,-1);this.buffer+=pending.replace(/\r\n/g,"\n").replace(/\r/g,"\n");if(this.buffer.length>this.maxEventBytes){this.buffer="";this.pendingCr=false;throw new SseBufferOverflowError(this.maxEventBytes)}const events=[];for(;;){const boundary=this.buffer.indexOf("\n\n");if(boundary===-1)break;const block=this.buffer.slice(0,boundary);this.buffer=this.buffer.slice(boundary+2);const parsed=parseBlock(
5
5
  block);if(parsed)events.push(parsed)}return events}flush(){const rest=(this.pendingCr?`${this.buffer}
6
6
  `:this.buffer).trim();this.buffer="";this.pendingCr=false;if(rest==="")return[];const parsed=parseBlock(rest);return parsed?[parsed]:[]}};function parseBlock(block){let event="message";const data=[];for(const line of block.split("\n")){if(line.startsWith(":"))continue;const colon=line.indexOf(":");const field=colon===-1?line:line.slice(0,colon);let value=colon===-1?"":line.slice(colon+1);if(value.startsWith(" "))value=value.slice(1);if(field==="event")event=value;else if(field==="data")data.push(
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{readCsvFileText}from"./chunk-I6DWJXPC.js";import{readBody}from"./chunk-HGTG5XQ7.js";import{featureLicenseGuidance,invoiceFilters}from"./chunk-RZ54TCQU.js";import{repeatedValues}from"./chunk-IOGVQVGD.js";import{boundedText,isoDate}from"./chunk-UDPJ2IGK.js";import{SALES_DEPOSITS_PATH,isExactNumericId,resolveNamed}from"./chunk-ELXDRPDV.js";import{ApiError}from"./chunk-IF2K4PM5.js";import{LIST_PAGING_HELP,PAGE_NUMBER_LIST_FLAGS,PAGE_NUMBER_PAGING_HELP,
3
+ import{readCsvFileText}from"./chunk-I6DWJXPC.js";import{readBody}from"./chunk-HGTG5XQ7.js";import{featureLicenseGuidance,invoiceFilters}from"./chunk-BZ7ULFR3.js";import{repeatedValues}from"./chunk-IOGVQVGD.js";import{boundedText,isoDate}from"./chunk-UDPJ2IGK.js";import{SALES_DEPOSITS_PATH,isExactNumericId,resolveNamed}from"./chunk-BZAXQOLB.js";import{ApiError}from"./chunk-IF2K4PM5.js";import{LIST_PAGING_HELP,PAGE_NUMBER_LIST_FLAGS,PAGE_NUMBER_PAGING_HELP,
4
4
  STABLE_PAGE_ORDER,nonEmpty,pageNumberPaging,pageNumberQuery,pageRangeNotes}from"./chunk-5R4SEO3I.js";import{requireResolved,withResolved}from"./chunk-ZN5EFDH7.js";import{acknowledgement,isRecord,pick}from"./chunk-ZWVYVS2A.js";import{ApiResponseError,UsageError}from"./chunk-7WSNIXTQ.js";var PATH=SALES_DEPOSITS_PATH;function salesAdminForbidden(what){return body=>body?.error==="permission_denied"?featureLicenseGuidance("\u8CA9\u58F2\u7BA1\u7406"):`${what}\u306B\u306F\u8CA9\u58F2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u300C\u7BA1\u7406\u8005\u300D\u3067\u3042\u308B\u3053\u3068\u304C\u8981\u308A\u307E\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`}var FORBIDDEN=salesAdminForbidden("\u5165\u91D1");var ALLOCATION_STATUSES={
5
5
  allocated:"\u5F15\u5F53\u6E08",shortage:"\u672A\u5165\u91D1\u6709",excess:"\u5165\u91D1\u8D85\u904E\u6709",transfer_fee_resolved:"\u624B\u6570\u6599\u51E6\u7406\u6E08"};var EXCESS_REASONS={transfer_fee:"\u632F\u8FBC\u624B\u6570\u6599",agency_fee:"\u4EE3\u884C\u624B\u6570\u6599\uFF08\u53E3\u5EA7\u632F\u66FF \u57FA\u672C\u5229\u7528\u6599\uFF09",partial:"\u4E00\u90E8\u5165\u91D1",offset:"\u76F8\u6BBA",overpayment:"\u904E\u5165\u91D1",other:"\u305D\u306E\u4ED6"};var EXCESS_TAX_CATEGORIES={taxable_purchase_10:"\
6
6
  \u8AB2\u7A0E\u4ED5\u5165 10%",not_applicable:"\u5BFE\u8C61\u5916"};var BULK_MAX_ROWS=100;var PLAN_MAX_ITEMS=50;var PLAN_MAX_ALLOCATIONS=100;var FILE_MAX_BYTES=1024*1024;var EXCESS_NOTE_MAX_CHARS=255;var PLAN_MEMO_MAX_CHARS=1e3;var CONTENT_MAX_CHARS=1e6;var LIST_COLUMNS=["id","deposit_date","company_name","payee_name","deposit_amount","allocated_amount","unallocated_amount","allocation_status"];var GET_COLUMNS=[...LIST_COLUMNS,"memo","excess_reason","excess_amount","excess_note","excess_tax_categ\
@@ -44,8 +44,8 @@ ax_category","excess-tax-amount":"excess_tax_amount"};var CLEAR_FLAG={name:"--cl
44
44
  \u3069\u3061\u3089\u3082\u30B3\u30FC\u30C9\u3067\u3082\u8868\u793A\u540D\u3067\u3082\u6307\u5B9A\u3067\u304D\u307E\u3059\u3002
45
45
  \u904E\u4E0D\u8DB3\u7406\u7531\u304C\u632F\u8FBC\u624B\u6570\u6599\u30FB\u4EE3\u884C\u624B\u6570\u6599\u3067\u904E\u4E0D\u8DB3\u91D1\u984D\u304C\u6B63\u306A\u3089\u3001\u305D\u306E\u91D1\u984D\u306E\u5206\u3060\u3051\u5165\u91D1\u984D\u3092\u8D85\u3048\u3066\u8ACB\u6C42\u3078\u5F15\u304D\u5F53\u3066\u3089\u308C\u307E\u3059\uFF08\u624B\u6570\u6599\u5DEE\u5F15\uFF09\u3002
46
46
  \u6D88\u8CBB\u7A0E\u984D\u3092\u7701\u304F\u3068\u3001\u30B5\u30FC\u30D0\u304C\u7A0E\u533A\u5206\u3068\u904E\u4E0D\u8DB3\u91D1\u984D\u304B\u3089\u88DC\u3044\u307E\u3059\u3002
47
- \u632F\u8FBC\u5148\u306E ID \u306F twp api /api/v2/sales/payees \u3067\u5F15\u3051\u307E\u3059\u3002`;function integerFlag(input,flag,min){const raw=input.flags.get(flag);if(raw===void 0)return void 0;const value=raw.trim();if(!/^-?(0|[1-9]\d*)$/.test(value)||!Number.isSafeInteger(Number(value)))throw new UsageError(`${flag} \u306F\u6574\u6570\uFF08\u5186\uFF09\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${raw}`,"\u4F8B: 110000");const n=Number(value);if(min!==void 0&&n<min)throw new UsageError(
48
- `${flag} \u306F ${min} \u4EE5\u4E0A\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${raw}`);return n}function idFlag(input,flag,label){const raw=input.flags.get(flag);if(raw===void 0)return void 0;if(!isExactNumericId(raw.trim()))throw new UsageError(`${flag} \u306E${label} ID \u306F\u5148\u982D\u306B 0 \u3092\u4ED8\u3051\u306A\u3044\u6570\u5B57\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${raw}`);return Number(raw.trim())}async function codeFlag(input,flag,table,label){const raw=nonEmpty(
47
+ \u632F\u8FBC\u5148\u306E ID \u306F twp payee list \u306E id \u5217\u3067\u3059\u3002`;function integerFlag(input,flag,min){const raw=input.flags.get(flag);if(raw===void 0)return void 0;const value=raw.trim();if(!/^-?(0|[1-9]\d*)$/.test(value)||!Number.isSafeInteger(Number(value)))throw new UsageError(`${flag} \u306F\u6574\u6570\uFF08\u5186\uFF09\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${raw}`,"\u4F8B: 110000");const n=Number(value);if(min!==void 0&&n<min)throw new UsageError(`${flag}\
48
+ \u306F ${min} \u4EE5\u4E0A\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${raw}`);return n}function idFlag(input,flag,label){const raw=input.flags.get(flag);if(raw===void 0)return void 0;if(!isExactNumericId(raw.trim()))throw new UsageError(`${flag} \u306E${label} ID \u306F\u5148\u982D\u306B 0 \u3092\u4ED8\u3051\u306A\u3044\u6570\u5B57\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${raw}`);return Number(raw.trim())}async function codeFlag(input,flag,table,label){const raw=nonEmpty(
49
49
  input.flags,flag);if(raw===void 0)return void 0;return(await resolveNamed(raw,refsOf(table),{flag,label,scope:"\u3053\u306E CLI"})).id}async function fieldsBody(input,ctx,mode){const body={};const payee=idFlag(input,"--payee","\u632F\u8FBC\u5148");if(payee!==void 0)body["payee_id"]=payee;const date=isoDate(input,"--date");if(date!==void 0)body["deposit_date"]=date;const amount=integerFlag(input,"--amount",1);if(amount!==void 0)body["deposit_amount"]=amount;const memo=await readBody(input,{flag:"\
50
50
  --memo",fileFlag:"--memo-file",label:"\u5099\u8003",maxChars:CONTENT_MAX_CHARS,usage:usageOf(mode)});if(memo!==void 0)body["memo"]=memo;const reason=await codeFlag(input,"--excess-reason",EXCESS_REASONS,"\u904E\u4E0D\u8DB3\u7406\u7531");if(reason!==void 0)body["excess_reason"]=reason;const excess=integerFlag(input,"--excess-amount");if(excess!==void 0)body["excess_amount"]=excess;const note=boundedText(input,"--excess-note",{maxChars:EXCESS_NOTE_MAX_CHARS,label:"\u904E\u4E0D\u8DB3\u306E\u88DC\u8DB3"});
51
51
  if(note!==void 0)body["excess_note"]=note;const category=await codeFlag(input,"--excess-tax-category",EXCESS_TAX_CATEGORIES,"\u7A0E\u533A\u5206");if(category!==void 0)body["excess_tax_category"]=category;const tax=integerFlag(input,"--excess-tax-amount");if(tax!==void 0)body["excess_tax_amount"]=tax;for(const raw of repeatedValues(input,"--clear")){const key=CLEARABLE[raw.trim()];if(key===void 0)throw new UsageError(`--clear \u306B\u6E21\u305B\u306A\u3044\u9805\u76EE\u3067\u3059: ${raw}`,`\u6E21\u305B\u308B\u9805\u76EE:\
@@ -144,4 +144,4 @@ name))return planSkeleton(await ctx.send(planRegisterPlan(input)),todayJst());re
144
144
  summarize:body=>isSkeletonResult(body)?body.skeleton:registeredDeposits(body).map(row=>withStatusName(row,LIST_COLUMNS)),raw:body=>isSkeletonResult(body)?body.skeleton:registeredDeposits(body),notes(body){if(isSkeletonResult(body)){const items=body.skeleton["items"].length;return[`\u3072\u306A\u5F62\u3067\u3059\uFF08\u767B\u9332\u3057\u3066\u3044\u307E\u305B\u3093\uFF09\u3002\u53D6\u5F15\u5148 ${items} \u4EF6\u30FB\u91D1\u984D\u306F\u5404\u8ACB\u6C42\u306E\u672A\u5165\u91D1\u6B8B\u306E\u5168\u984D\u3067\u3059\u3002\u7740\u91D1\u984D\u304C\u9055\u3046\u53D6\u5F15\u5148\u306F deposit_amount \u3068 excess_reason \u3092\u66F8\u304D\u8DB3\u3057\u3066\u304F\u3060\u3055\u3044\u3002`,
145
145
  ...body.missingPayee.length>0?[`\u524D\u56DE\u306E\u632F\u8FBC\u5148\u304C\u7121\u3044\u305F\u3081 payee_id \u304C null \u306E\u53D6\u5F15\u5148: ${body.missingPayee.join(" / ")}`]:[]]}return serverMessage(body)}};var planResource={name:"plan",summary:"\u5165\u91D1\u4E88\u5B9A\uFF08\u652F\u6255\u671F\u65E5\u3067\u7D5E\u3063\u305F\u672A\u56DE\u53CE\u8ACB\u6C42\u306E\u53D6\u5F15\u5148\u3054\u3068\u306E\u5408\u8A08\uFF09\u3068\u3001\u305D\u3053\u304B\u3089\u306E\u5165\u91D1\uFF0B\u5F15\u5F53\u306E\u4E00\u62EC\u767B\u9332",
146
146
  operations:[planListOperation,planRegisterOperation]};var depositDomain={name:"deposit",summary:"\u8CA9\u58F2\u7BA1\u7406\u306E\u5165\u91D1\uFF08\u4E00\u89A7\u30FB\u8A73\u7D30\u30FB\u767B\u9332\u30FB\u66F4\u65B0\u30FB\u524A\u9664\u30FBCSV\u30FB\u5F15\u5F53\u30FB\u5165\u91D1\u4E88\u5B9A\u304B\u3089\u306E\u4E00\u62EC\u767B\u9332\u3002\u8CA9\u58F2\u7BA1\u7406\u306E\u7BA1\u7406\u8005\uFF09",operations:[listOperation,getOperation,createOperation,updateOperation,deleteOperation,exportOperation],subresources:[
147
- allocationResource,planResource]};export{salesAdminForbidden,depositIdArg,describeDeposit,parseAllocationRows,parsePlanBody,planSkeleton,depositDomain};
147
+ allocationResource,planResource]};export{salesAdminForbidden,depositIdArg,describeDeposit,sendAtomic,excerpt,parseAllocationRows,parsePlanBody,planSkeleton,depositDomain};
@@ -1,8 +1,7 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{CommandModelMissingError,MAX_REPORTED_VIOLATIONS,loadCommandModelDomain,loadCommandModelIndex,validateBody,validateQuery}from"./chunk-NZ7WI4RZ.js";import{redactSecretValues,redactSecrets}from"./chunk-BUZKNZ45.js";import{ApiError,TwpApiClient,appendQuery}from"./chunk-IF2K4PM5.js";import{isSafePathSegment}from"./chunk-GMBJTG6A.js";import{DEFAULT_MAX_TOKENS,emptyUsage}from"./chunk-PWXXCLVZ.js";import{isPrivateTwpHome,isTrustworthyCacheFile,writePrivateFileAtomic}from"./chunk-D233KKXW.js";
4
- import{AuthSession,NotLoggedInError,SessionExpiredError,withFileLock}from"./chunk-XNLIEUAW.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import{MODES,applyPermissionMode,checkPermission,isModeId,setActiveModes}from"./chunk-NAUH75MM.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import{isForceOnly,killProcessTree,system32}from"./chunk-N2UVRM3Z.js";import{findExecutable,isWindowsDriveAbsolute}from"./chunk-PMOUHEJQ.js";import{configReadDirs,ensureTwpHome,
5
- twpHomeDir}from"./chunk-RZVI6PMW.js";import fs2 from"fs";import path3 from"path";import os2 from"os";import{realpathSync}from"fs";import{homedir}from"os";import{dirname,isAbsolute,relative,resolve,sep}from"path";var PathDeniedError=class extends Error{constructor(message){super(message);this.name="PathDeniedError"}};function resolveToolPath(input,cwd,home=homedir()){if(typeof input!=="string"||input.trim()===""){throw new PathDeniedError("path must be a non-empty string")}const expanded=expandHome(input,home);const abs=isAbsolute(expanded)?resolve(expanded):resolve(cwd,expanded);const root=realOrSelf(resolve(cwd));assertInside(abs,resolve(cwd),abs);assertNotSecret(abs,home);const real=realOrSelf(abs);if(real!==
3
+ import{CommandModelMissingError,MAX_REPORTED_VIOLATIONS,loadCommandModelDomain,loadCommandModelIndex,validateBody,validateQuery}from"./chunk-NZ7WI4RZ.js";import{redactSecretValues,redactSecrets}from"./chunk-UT4FACHN.js";import{ApiError,TwpApiClient,appendQuery}from"./chunk-IF2K4PM5.js";import{isSafePathSegment}from"./chunk-GMBJTG6A.js";import{DEFAULT_MAX_TOKENS,emptyUsage}from"./chunk-6QOT7CHX.js";import{isPrivateTwpHome,isTrustworthyCacheFile,writePrivateFileAtomic}from"./chunk-D233KKXW.js";
4
+ import{AuthSession,NotLoggedInError,SessionExpiredError,withFileLock}from"./chunk-XNLIEUAW.js";import{MODES,applyPermissionMode,checkPermission,isModeId,setActiveModes}from"./chunk-NAUH75MM.js";import{isForceOnly,killProcessTree,system32}from"./chunk-N2UVRM3Z.js";import{findExecutable,isWindowsDriveAbsolute}from"./chunk-PMOUHEJQ.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import{configReadDirs,ensureTwpHome,twpHomeDir}from"./chunk-RZVI6PMW.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import fs2 from"fs";import path3 from"path";import os2 from"os";import{realpathSync}from"fs";import{homedir}from"os";import{dirname,isAbsolute,relative,resolve,sep}from"path";var PathDeniedError=class extends Error{constructor(message){super(message);this.name="PathDeniedError"}};function resolveToolPath(input,cwd,home=homedir()){if(typeof input!=="string"||input.trim()===""){throw new PathDeniedError("path must be a non-empty string")}const expanded=expandHome(input,home);const abs=isAbsolute(expanded)?resolve(expanded):resolve(cwd,expanded);const root=realOrSelf(resolve(cwd));assertInside(abs,resolve(cwd),abs);assertNotSecret(abs,home);const real=realOrSelf(abs);if(real!==
6
5
  abs){assertInside(real,root,abs);assertNotSecret(real,home)}return abs}function realToolPath(input,cwd,home=homedir()){return realOrSelf(resolveToolPath(input,cwd,home))}function assertInside(target,root,reported){const rel=relative(root,target);const outside=rel===".."||rel.startsWith(`..${sep}`)||isAbsolute(rel);if(outside){throw new PathDeniedError(`path escapes the working directory (${reported}). Only paths under ${root} can be accessed.`)}}function realOrSelf(target){let current=target;const rest=[];
7
6
  for(;;){try{const real=realpathSync(current);return rest.length===0?real:resolve(real,...rest.reverse())}catch{const parent=dirname(current);if(parent===current)return target;rest.push(current.slice(parent.length+1));current=parent}}}function assertNotSecret(absPath,home=homedir(),env=process.env){const reason=secretReason(absPath,home,env);if(reason!==null)throw new PathDeniedError(`refusing to access ${absPath}: ${reason}`)}function secretReason(absPath,_home=homedir(),env=process.env){const lower=absPath.
8
7
  toLowerCase();const segments=lower.split(sep);const base=segments[segments.length-1]??"";const parent=segments[segments.length-2]??"";if(base===".env"||base.startsWith(".env."))return".env files are denied (design \xA77)";if(segments.includes(".ssh"))return"SSH key material is denied (design \xA77)";if(parent===".git"&&base==="config"){return".git/config is denied (it can hold a GitHub token in the remote URL)"}if(base===".netrc"||base==="_netrc"||base===".npmrc")return"credential files are deni\
@@ -1,8 +1,8 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{loadDomain}from"./chunk-TLN3JSEC.js";import{evaluateQuery}from"./chunk-GDM2QUBL.js";import{renderDocument,renderOutput}from"./chunk-FEOST3GF.js";import{redactSecretValues,redactSecrets,withDebug}from"./chunk-BUZKNZ45.js";import{parseOperationArgs}from"./chunk-IOGVQVGD.js";import{Resolver,requireDefaultProject}from"./chunk-ELXDRPDV.js";import{ApiError,MultipartBody,TwpApiClient,appendQuery}from"./chunk-IF2K4PM5.js";import{ResolveError}from"./chunk-GMBJTG6A.js";
4
- import{GLOBAL_OPTIONS_HELP}from"./chunk-I4ARX6NM.js";import{AuthSession,NotLoggedInError,SessionExpiredError,loadCredentials}from"./chunk-XNLIEUAW.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import{effectiveApiUrl,loadUserConfig,resolveConfiguredOutput,resolveProfile}from"./chunk-4VZKNEVN.js";import{HELP_TOKEN}from"./chunk-UVUVEL3B.js";import{OUTPUT_FORMATS,resolveOutputFormat}from"./chunk-K2ONOH3L.js";import{stringWidth}from"./chunk-WVS4W5FY.js";import{
5
- stripTerminalControls}from"./chunk-NHYMHCAT.js";import{DEFAULT_MAX_ITEMS,DEFAULT_MAX_PAGES,nextPageNotes,positiveInteger,shellQuote}from"./chunk-5R4SEO3I.js";import{ApiRejectedError,ApiResponseError,EXIT_API_CLIENT,EXIT_API_SERVER,EXIT_AUTH,EXIT_FAILURE,EXIT_OK,EXIT_USAGE,NetworkError,UsageError}from"./chunk-7WSNIXTQ.js";import fs from"fs";import path from"path";var NO_REDACT_FLAG={name:"--no-redact",summary:"\u5FDC\u7B54\u306E\u4F0F\u5B57\u5316\u3092\u89E3\u9664\u3057\u3066\u751F\u306E\u5024\u3092\u51FA\u3059\uFF08\u9375\u306E\u53D7\u3051\u53D6\u308A\u7B49\uFF09",takesValue:false};var NO_REDACT_NOTICE="\u6CE8\u8A18: --no-redact \u306E\u305F\u3081\u51FA\u529B\u3092\u4F0F\u5B57\u5316\u3057\u307E\u305B\u3093\uFF08\u7AEF\u672B\u3068\u30ED\u30B0\u306B\u5E73\u6587\u3067\u6B8B\u308A\u307E\u3059\uFF09\u3002";function withCommonFlags(flags){return flags.some(flag=>flag.
3
+ import{evaluateQuery}from"./chunk-GDM2QUBL.js";import{renderDocument,renderOutput}from"./chunk-VK5T7ULK.js";import{redactSecretValues,redactSecrets,withDebug}from"./chunk-UT4FACHN.js";import{loadDomain}from"./chunk-O44ZKSD2.js";import{parseOperationArgs}from"./chunk-IOGVQVGD.js";import{Resolver,requireDefaultProject}from"./chunk-BZAXQOLB.js";import{ApiError,MultipartBody,TwpApiClient,appendQuery}from"./chunk-IF2K4PM5.js";import{ResolveError}from"./chunk-GMBJTG6A.js";
4
+ import{GLOBAL_OPTIONS_HELP}from"./chunk-I4ARX6NM.js";import{AuthSession,NotLoggedInError,SessionExpiredError,loadCredentials}from"./chunk-XNLIEUAW.js";import{effectiveApiUrl,loadUserConfig,resolveConfiguredOutput,resolveProfile}from"./chunk-4VZKNEVN.js";import{HELP_TOKEN}from"./chunk-EOSSFTNG.js";import{OUTPUT_FORMATS,resolveOutputFormat}from"./chunk-K2ONOH3L.js";import{stringWidth}from"./chunk-WVS4W5FY.js";import{DEFAULT_MAX_ITEMS,DEFAULT_MAX_PAGES,nextPageNotes,
5
+ positiveInteger,shellQuote}from"./chunk-5R4SEO3I.js";import{isRecord}from"./chunk-ZWVYVS2A.js";import{ApiRejectedError,ApiResponseError,EXIT_API_CLIENT,EXIT_API_SERVER,EXIT_AUTH,EXIT_FAILURE,EXIT_OK,EXIT_USAGE,NetworkError,UsageError}from"./chunk-7WSNIXTQ.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import fs from"fs";import path from"path";var NO_REDACT_FLAG={name:"--no-redact",summary:"\u5FDC\u7B54\u306E\u4F0F\u5B57\u5316\u3092\u89E3\u9664\u3057\u3066\u751F\u306E\u5024\u3092\u51FA\u3059\uFF08\u9375\u306E\u53D7\u3051\u53D6\u308A\u7B49\uFF09",takesValue:false};var NO_REDACT_NOTICE="\u6CE8\u8A18: --no-redact \u306E\u305F\u3081\u51FA\u529B\u3092\u4F0F\u5B57\u5316\u3057\u307E\u305B\u3093\uFF08\u7AEF\u672B\u3068\u30ED\u30B0\u306B\u5E73\u6587\u3067\u6B8B\u308A\u307E\u3059\uFF09\u3002";function withCommonFlags(flags){return flags.some(flag=>flag.
6
6
  name===NO_REDACT_FLAG.name)?flags:[...flags,NO_REDACT_FLAG]}function alignedList(entries,indent=" "){const width=entries.reduce((max,[left])=>Math.max(max,stringWidth(left)),0);return entries.map(([left,right])=>`${indent}${left}${" ".repeat(Math.max(0,width-stringWidth(left)))} ${right}`).join("\n")}function subresourcesOf(resource){return resource.subresources??[]}function renderResourceHelp(resource,path2){const subresources=subresourcesOf(resource);const operationSection=resource.operations.length===0?"":`
7
7
  \u64CD\u4F5C:
8
8
  ${alignedList(resource.operations.map(op=>[op.name,op.summary]))}
@@ -24,18 +24,19 @@ return EXIT_AUTH;if(err instanceof ApiError)return exitCodeForStatus(err.status)
24
24
  Error?err.message:String(err));const rawHint=err instanceof UsageError?err.hint:void 0;const hint=rawHint!==void 0?safeText(rawHint):void 0;if(format==="json"){const body={code,message};if(err instanceof ApiError)body["status"]=err.status;if(err instanceof ResolveError&&err.status!==null)body["status"]=err.status;if(hint!==void 0)body["hint"]=hint;write(`${JSON.stringify({error:body},null,2)}
25
25
  `);return}write(`${message}
26
26
  `);if(hint!==void 0)write(`${hint}
27
- `)}function dryRunValue(apiUrl,plan){const value={method:plan.method,url:`${apiUrl}${appendQuery(plan.path,plan.query)}`};if(plan.body!==void 0)value["body"]=plan.body instanceof MultipartBody?plan.body.toJSON():plan.body;return value}async function send(client,apiUrl,plan){try{return await client.request(plan.method,appendQuery(plan.path,plan.query),plan.body)}catch(err){if(err instanceof ApiError||err instanceof NotLoggedInError||err instanceof SessionExpiredError){throw err}throw new NetworkError(
28
- `${apiUrl} \u3078\u306E\u901A\u4FE1\u306B\u5931\u6557\u3057\u307E\u3057\u305F: ${err.message}`,{cause:err})}}async function putSigned(fetchImpl,url,bytes,contentType){let res;try{res=await fetchImpl(url,{method:"PUT",headers:{"Content-Type":contentType},body:bytes})}catch(err){throw new NetworkError(`\u30B9\u30C8\u30EC\u30FC\u30B8\u3078\u306E\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u306B\u5931\u6557\u3057\u307E\u3057\u305F: ${err.message}`,{cause:err})}if(!res.ok){throw new NetworkError(`\u30B9\u30C8\u30EC\u30FC\u30B8\u3078\u306E\u30A2\u30C3\u30D7\u30ED\
29
- \u30FC\u30C9\u304C\u62D2\u5426\u3055\u308C\u307E\u3057\u305F\uFF08HTTP ${res.status}\uFF09`)}}async function getSigned(fetchImpl,url){let res;try{res=await fetchImpl(url,{method:"GET"})}catch(err){throw new NetworkError(`\u30B9\u30C8\u30EC\u30FC\u30B8\u304B\u3089\u306E\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u306B\u5931\u6557\u3057\u307E\u3057\u305F: ${err.message}`,{cause:err})}if(!res.ok){throw new NetworkError(`\u30B9\u30C8\u30EC\u30FC\u30B8\u304B\u3089\u306E\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u304C\u62D2\u5426\u3055\u308C\u307E\u3057\u305F\uFF08HTTP ${res.
30
- status}\uFF09`)}return{bytes:new Uint8Array(await res.arrayBuffer()),contentType:res.headers.get("content-type")}}function resolveDownloadTarget(spec,commandPath,operationName,input){const raw=input.flags.get(spec.outFlag);if(raw===void 0||raw.trim()===""){throw new UsageError(`${spec.outFlag} \u306F\u5FC5\u9808\u3067\u3059\uFF08twp ${commandPath} ${operationName}\uFF09`,`\u66F8\u304D\u51FA\u3057\u5148\u306E\u30D5\u30A1\u30A4\u30EB\u30D1\u30B9\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u6A19\u6E96\u51FA\u529B\u3078\u306F\u51FA\u3057\u307E\u305B\u3093\uFF09\u3002`)}
31
- return{out:path.resolve(raw.trim()),force:input.flags.has(spec.forceFlag)}}function assertWritableTarget(target,forceFlag){if(!target.force&&fs.existsSync(target.out)){throw new UsageError(`\u66F8\u304D\u51FA\u3057\u5148\u304C\u65E2\u306B\u3042\u308A\u307E\u3059: ${target.out}`,`\u4E0A\u66F8\u304D\u3059\u308B\u306A\u3089 ${forceFlag} \u3092\u4ED8\u3051\u3066\u304F\u3060\u3055\u3044\uFF08\u65E2\u5B9A\u3067\u306F\u4E0A\u66F8\u304D\u3057\u307E\u305B\u3093\uFF09\u3002`)}const dir=path.dirname(target.
32
- out);if(!fs.existsSync(dir)){throw new UsageError(`\u66F8\u304D\u51FA\u3057\u5148\u306E\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u304C\u3042\u308A\u307E\u305B\u3093: ${dir}`,"\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3092\u4F5C\u3063\u3066\u304B\u3089\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u81EA\u52D5\u3067\u306F\u4F5C\u6210\u3057\u307E\u305B\u3093\uFF09\u3002")}}async function download(args){let received;if(args.signed!==void 0){const url=args.signed.signedUrl(await send(args.client,args.
33
- apiUrl,args.plan),args.plan);received=await getSigned(args.signed.fetchImpl,url)}else{try{received=await args.client.requestBinary(args.plan.method,appendQuery(args.plan.path,args.plan.query))}catch(err){if(err instanceof ApiError||err instanceof NotLoggedInError||err instanceof SessionExpiredError)throw err;throw new NetworkError(`${args.apiUrl} \u3078\u306E\u901A\u4FE1\u306B\u5931\u6557\u3057\u307E\u3057\u305F: ${err.message}`,{cause:err})}}try{fs.writeFileSync(args.target.out,received.bytes,{
34
- flag:args.target.force?"w":"wx"})}catch(err){const code=err.code;if(code==="EEXIST"){throw new UsageError(`\u66F8\u304D\u51FA\u3057\u5148\u304C\u65E2\u306B\u3042\u308A\u307E\u3059: ${args.target.out}`,"\u4E0A\u66F8\u304D\u3059\u308B\u306A\u3089 --force \u3092\u4ED8\u3051\u3066\u304F\u3060\u3055\u3044\u3002")}throw new Error(`\u66F8\u304D\u51FA\u3057\u306B\u5931\u6557\u3057\u307E\u3057\u305F\uFF08${args.target.out}\uFF09: ${err.message}`,{cause:err})}const captured={};for(const name of args.captureHeaders??
35
- []){const value=received.headers?.get(name);if(typeof value==="string")captured[name]=value}return{path:args.target.out,size:received.bytes.byteLength,contentType:received.contentType,...Object.keys(captured).length>0?{headers:captured}:{}}}function resumeHint(vocabulary,cursor){return vocabulary.resume!==void 0?vocabulary.resume(cursor):`${vocabulary.resumeFlag} ${shellQuote(cursor)}`}var CURATED_PAGING_VOCABULARY={mode:"--all",resumeFlag:"--cursor",capAdvice:"--limit \u3092\u5927\u304D\u304F\u3057\u3066\u5F80\u5FA9\u3092\u6E1B\u3089\u3059\u304B\u3001--max-pages \
36
- / --max-items \u3092\u4E0A\u3052\u3066\u304F\u3060\u3055\u3044\u3002"};function capExceeded(vocabulary,reason,pages,count,cursor){return new UsageError(`${vocabulary.mode} \u304C\u4E0A\u9650\u306B\u9054\u3057\u305F\u305F\u3081\u4E2D\u65AD\u3057\u307E\u3057\u305F\uFF08${reason}\uFF0F${pages} \u30DA\u30FC\u30B8\u30FB${count} \u4EF6\u3092\u53D6\u5F97\u6E08\u307F\uFF09\u3002\u3053\u308C\u306F\u5168\u4EF6\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002`,`${vocabulary.capAdvice}\u7D9A\u304D\u3060\u3051\u3092\u53D6\u308B\u306A\u3089 ${resumeHint(
37
- vocabulary,cursor)} \u304B\u3089\u518D\u958B\u3067\u304D\u307E\u3059`)}async function fetchAllPages(args){const{paging,maxPages,maxItems}=args;const vocabulary=args.vocabulary??CURATED_PAGING_VOCABULARY;const merged=[];const first=args.plan.query?.[paging.cursorParam];let sent=typeof first==="string"?first:"";let scanTruncated=false;for(let page=1;;page+=1){const plan=page===1?args.plan:{...args.plan,query:{...args.plan.query,[paging.cursorParam]:sent}};let body;try{body=page===1&&"firstPage"in args?
38
- args.firstPage:await send(args.client,args.apiUrl,plan)}catch(err){if(page>1){(args.warn??writeErr)(`${vocabulary.mode} \u306F ${page} \u30DA\u30FC\u30B8\u76EE\u3067\u5931\u6557\u3057\u307E\u3057\u305F\uFF08${page-1} \u30DA\u30FC\u30B8\u30FB${merged.length} \u4EF6\u3092\u53D6\u5F97\u6E08\u307F\uFF09\u3002\u3053\u308C\u306F\u5168\u4EF6\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u7D9A\u304D\u306F ${resumeHint(vocabulary,stripTerminalControls(sent))} \u304B\u3089\u518D\u958B\u3067\u304D\u307E\u3059\u3002
27
+ `)}function dryRunValue(apiUrl,plan,sensitiveBody){const value={method:plan.method,url:`${apiUrl}${appendQuery(plan.path,plan.query)}`};if(plan.body!==void 0)value["body"]=plan.body instanceof MultipartBody?plan.body.toJSON():plan.body;if(sensitiveBody!==void 0&&isRecord(value["body"])){const hidden=`\uFF08${sensitiveBody}\u305F\u3081\u8868\u793A\u3057\u306A\u3044\u30FB--no-redact \u3067\u8868\u793A\uFF09`;value["body"]=Object.fromEntries(Object.keys(value["body"]).map(key=>[key,hidden]))}return value}
28
+ async function send(client,apiUrl,plan){try{return await client.request(plan.method,appendQuery(plan.path,plan.query),plan.body)}catch(err){if(err instanceof ApiError||err instanceof NotLoggedInError||err instanceof SessionExpiredError){throw err}throw new NetworkError(`${apiUrl} \u3078\u306E\u901A\u4FE1\u306B\u5931\u6557\u3057\u307E\u3057\u305F: ${err.message}`,{cause:err})}}async function putSigned(fetchImpl,url,bytes,contentType){let res;try{res=await fetchImpl(url,{method:"PUT",headers:{"Con\
29
+ tent-Type":contentType},body:bytes})}catch(err){throw new NetworkError(`\u30B9\u30C8\u30EC\u30FC\u30B8\u3078\u306E\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u306B\u5931\u6557\u3057\u307E\u3057\u305F: ${err.message}`,{cause:err})}if(!res.ok){throw new NetworkError(`\u30B9\u30C8\u30EC\u30FC\u30B8\u3078\u306E\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u304C\u62D2\u5426\u3055\u308C\u307E\u3057\u305F\uFF08HTTP ${res.status}\uFF09`)}}async function getSigned(fetchImpl,url){let res;try{res=await fetchImpl(url,{method:"\
30
+ GET"})}catch(err){throw new NetworkError(`\u30B9\u30C8\u30EC\u30FC\u30B8\u304B\u3089\u306E\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u306B\u5931\u6557\u3057\u307E\u3057\u305F: ${err.message}`,{cause:err})}if(!res.ok){throw new NetworkError(`\u30B9\u30C8\u30EC\u30FC\u30B8\u304B\u3089\u306E\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u304C\u62D2\u5426\u3055\u308C\u307E\u3057\u305F\uFF08HTTP ${res.status}\uFF09`)}return{bytes:new Uint8Array(await res.arrayBuffer()),contentType:res.headers.get("content-type")}}function resolveDownloadTarget(spec,commandPath,operationName,input){
31
+ const raw=input.flags.get(spec.outFlag);if(raw===void 0||raw.trim()===""){throw new UsageError(`${spec.outFlag} \u306F\u5FC5\u9808\u3067\u3059\uFF08twp ${commandPath} ${operationName}\uFF09`,`\u66F8\u304D\u51FA\u3057\u5148\u306E\u30D5\u30A1\u30A4\u30EB\u30D1\u30B9\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u6A19\u6E96\u51FA\u529B\u3078\u306F\u51FA\u3057\u307E\u305B\u3093\uFF09\u3002`)}return{out:path.resolve(raw.trim()),force:input.flags.has(spec.forceFlag)}}function assertWritableTarget(target,forceFlag){
32
+ if(!target.force&&fs.existsSync(target.out)){throw new UsageError(`\u66F8\u304D\u51FA\u3057\u5148\u304C\u65E2\u306B\u3042\u308A\u307E\u3059: ${target.out}`,`\u4E0A\u66F8\u304D\u3059\u308B\u306A\u3089 ${forceFlag} \u3092\u4ED8\u3051\u3066\u304F\u3060\u3055\u3044\uFF08\u65E2\u5B9A\u3067\u306F\u4E0A\u66F8\u304D\u3057\u307E\u305B\u3093\uFF09\u3002`)}const dir=path.dirname(target.out);if(!fs.existsSync(dir)){throw new UsageError(`\u66F8\u304D\u51FA\u3057\u5148\u306E\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u304C\u3042\u308A\u307E\u305B\u3093: ${dir}`,
33
+ "\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3092\u4F5C\u3063\u3066\u304B\u3089\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u81EA\u52D5\u3067\u306F\u4F5C\u6210\u3057\u307E\u305B\u3093\uFF09\u3002")}}async function download(args){let received;if(args.signed!==void 0){const url=args.signed.signedUrl(await send(args.client,args.apiUrl,args.plan),args.plan);received=await getSigned(args.signed.fetchImpl,url)}else{try{received=await args.client.requestBinary(args.plan.method,appendQuery(args.plan.
34
+ path,args.plan.query))}catch(err){if(err instanceof ApiError||err instanceof NotLoggedInError||err instanceof SessionExpiredError)throw err;throw new NetworkError(`${args.apiUrl} \u3078\u306E\u901A\u4FE1\u306B\u5931\u6557\u3057\u307E\u3057\u305F: ${err.message}`,{cause:err})}}try{fs.writeFileSync(args.target.out,received.bytes,{flag:args.target.force?"w":"wx"})}catch(err){const code=err.code;if(code==="EEXIST"){throw new UsageError(`\u66F8\u304D\u51FA\u3057\u5148\u304C\u65E2\u306B\u3042\u308A\u307E\u3059: ${args.
35
+ target.out}`,"\u4E0A\u66F8\u304D\u3059\u308B\u306A\u3089 --force \u3092\u4ED8\u3051\u3066\u304F\u3060\u3055\u3044\u3002")}throw new Error(`\u66F8\u304D\u51FA\u3057\u306B\u5931\u6557\u3057\u307E\u3057\u305F\uFF08${args.target.out}\uFF09: ${err.message}`,{cause:err})}const captured={};for(const name of args.captureHeaders??[]){const value=received.headers?.get(name);if(typeof value==="string")captured[name]=value}return{path:args.target.out,size:received.bytes.byteLength,contentType:received.contentType,
36
+ ...Object.keys(captured).length>0?{headers:captured}:{}}}function resumeHint(vocabulary,cursor){return vocabulary.resume!==void 0?vocabulary.resume(cursor):`${vocabulary.resumeFlag} ${shellQuote(cursor)}`}var CURATED_PAGING_VOCABULARY={mode:"--all",resumeFlag:"--cursor",capAdvice:"--limit \u3092\u5927\u304D\u304F\u3057\u3066\u5F80\u5FA9\u3092\u6E1B\u3089\u3059\u304B\u3001--max-pages / --max-items \u3092\u4E0A\u3052\u3066\u304F\u3060\u3055\u3044\u3002"};function capExceeded(vocabulary,reason,pages,count,cursor){
37
+ return new UsageError(`${vocabulary.mode} \u304C\u4E0A\u9650\u306B\u9054\u3057\u305F\u305F\u3081\u4E2D\u65AD\u3057\u307E\u3057\u305F\uFF08${reason}\uFF0F${pages} \u30DA\u30FC\u30B8\u30FB${count} \u4EF6\u3092\u53D6\u5F97\u6E08\u307F\uFF09\u3002\u3053\u308C\u306F\u5168\u4EF6\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002`,`${vocabulary.capAdvice}\u7D9A\u304D\u3060\u3051\u3092\u53D6\u308B\u306A\u3089 ${resumeHint(vocabulary,cursor)} \u304B\u3089\u518D\u958B\u3067\u304D\u307E\u3059`)}async function fetchAllPages(args){
38
+ const{paging,maxPages,maxItems}=args;const vocabulary=args.vocabulary??CURATED_PAGING_VOCABULARY;const merged=[];const first=args.plan.query?.[paging.cursorParam];let sent=typeof first==="string"?first:"";let scanTruncated=false;for(let page=1;;page+=1){const plan=page===1?args.plan:{...args.plan,query:{...args.plan.query,[paging.cursorParam]:sent}};let body;try{body=page===1&&"firstPage"in args?args.firstPage:await send(args.client,args.apiUrl,plan)}catch(err){if(page>1){(args.warn??writeErr)(`${vocabulary.
39
+ mode} \u306F ${page} \u30DA\u30FC\u30B8\u76EE\u3067\u5931\u6557\u3057\u307E\u3057\u305F\uFF08${page-1} \u30DA\u30FC\u30B8\u30FB${merged.length} \u4EF6\u3092\u53D6\u5F97\u6E08\u307F\uFF09\u3002\u3053\u308C\u306F\u5168\u4EF6\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u7D9A\u304D\u306F ${resumeHint(vocabulary,stripTerminalControls(sent))} \u304B\u3089\u518D\u958B\u3067\u304D\u307E\u3059\u3002
39
40
  `)}throw err}for(const item of paging.items(body))merged.push(item);if(typeof body==="object"&&body!==null&&body["scan_truncated"]===true)scanTruncated=true;const next=paging.nextCursor(body);if(next===null){const combined=paging.withItems(body,merged);const flagged=scanTruncated&&typeof combined==="object"&&combined!==null&&!Array.isArray(combined)?{...combined,scan_truncated:true}:combined;return{body:flagged,pages:page,count:merged.length}}if(merged.length>=maxItems)throw capExceeded(vocabulary,
40
41
  `\u6700\u5927\u4EF6\u6570 ${maxItems} \u4EF6`,page,merged.length,next);if(page>=maxPages)throw capExceeded(vocabulary,`\u6700\u5927\u30DA\u30FC\u30B8\u6570 ${maxPages}`,page,merged.length,next);if(next===sent){throw new ApiResponseError(`\u540C\u3058\u30AB\u30FC\u30BD\u30EB\uFF08${next}\uFF09\u304C\u7E70\u308A\u8FD4\u3057\u8FD4\u3055\u308C\u305F\u305F\u3081\u4E2D\u65AD\u3057\u307E\u3057\u305F\u3002${merged.length} \u4EF6\u3092\u53D6\u5F97\u3057\u305F\u6642\u70B9\u3067\u3001\u3053\u308C\u306F\u5168\u4EF6\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002`)}
41
42
  sent=next}}function resolvePaging(operation,path2,input){const all=input.flags.has("--all");const maxPages=positiveInteger(input.flags,"--max-pages")??DEFAULT_MAX_PAGES;const maxItems=positiveInteger(input.flags,"--max-items")??DEFAULT_MAX_ITEMS;positiveInteger(input.flags,"--limit");if(all&&operation.paging===void 0){throw new UsageError(`twp ${path2} ${operation.name} \u306F --all \u306B\u5BFE\u5FDC\u3057\u3066\u3044\u307E\u305B\u3093`)}for(const name of["--max-pages","--max-items"]){if(!all&&
@@ -46,12 +47,13 @@ null){throw new UsageError(`--output \u306B\u300C${globals.output??""}\u300D\u30
46
47
  name===extra);if(target===void 0||rest2.length>0){throw new UsageError(renderUnknownOperation(domain,domain.name,extra))}out(renderResourceHelp(target,`${domain.name} ${extra}`));return EXIT_OK}const sub=domain.subresources?.find(resource2=>resource2.name===options.operation);const resource=sub??domain;const path2=sub===void 0?domain.name:`${domain.name} ${sub.name}`;const operationName=sub===void 0?options.operation:options.argv[0];const rest=sub===void 0?options.argv:options.argv.slice(1);if(sub!==
47
48
  void 0&&(operationName===HELP_TOKEN||options.help&&operationName===void 0)){out(renderResourceHelp(sub,path2));return EXIT_OK}const operation=resource.operations.find(op=>op.name===operationName);if(operation===void 0){throw new UsageError(renderUnknownOperation(resource,path2,operationName))}forbidden=operation.forbidden;rejected=operation.rejected;if(options.help||rest[0]===HELP_TOKEN){out(renderOperationHelp(operation,path2));return EXIT_OK}const input=parseOperationArgs(rest,withCommonFlags(
48
49
  operation.flags));const noRedact=input.flags.has("--no-redact");if(!globals.dryRun&&requiresYes(operation,globals.yes)){throw new UsageError(`twp ${path2} ${operation.name} \u306F${operation.confirmation??"\u7834\u58CA\u7684\u306A\u64CD\u4F5C"}\u3067\u3059\u3002\u5B9F\u884C\u3059\u308B\u306B\u306F --yes \u3092\u4ED8\u3051\u3066\u304F\u3060\u3055\u3044\u3002`)}const paging=resolvePaging(operation,path2,input);const downloadTarget=operation.download===void 0?void 0:resolveDownloadTarget(operation.
49
- download,path2,operation.name,input);const stored=loadCredentials(profile.name);const apiUrl=effectiveApiUrl(profile,stored?.api_url);const transport=options.fetchImpl??httpFetch;const fetchImpl=globals.debug?withDebug(transport,{write:errOut}):transport;const session=new AuthSession(profile.name,apiUrl,process.env,fetchImpl);const client=new TwpApiClient(apiUrl,session,fetchImpl,options.version);const ctx=buildPrepareContext({resolver:new Resolver(client,{profile:profile.name,refresh:globals.refresh,
50
- ...profileAliases(profile.name)}),profileName:profile.name,env:process.env,cwd:process.cwd()});const prepared=operation.prepare===void 0?input:await operation.prepare(input,ctx);const plan=operation.plan(prepared);if(operation.execute!==void 0&&(operation.download!==void 0||operation.paging!==void 0||operation.fetchCached!==void 0)){throw new Error(`twp ${path2} ${operation.name}: execute \u306F download / paging / fetchCached \u3068\u540C\u6642\u306B\u5BA3\u8A00\u3067\u304D\u307E\u305B\u3093\uFF08\u914D\u7DDA\u306E\u8AA4\u308A\uFF09`)}
51
- if(operation.narrow!==void 0&&(operation.execute!==void 0||operation.download!==void 0||operation.fetchCached!==void 0)){throw new Error(`twp ${path2} ${operation.name}: narrow \u306F execute / download / fetchCached \u3068\u540C\u6642\u306B\u5BA3\u8A00\u3067\u304D\u307E\u305B\u3093\uFF08\u914D\u7DDA\u306E\u8AA4\u308A\uFF09`)}if(operation.invalidates!==void 0&&(operation.fetchCached!==void 0||plan.method==="GET")){throw new Error(`twp ${path2} ${operation.name}: invalidates \u306F\u66F8\u304D\u8FBC\u307F\u306E\u64CD\u4F5C\u306B\u3060\u3051\u5BA3\u8A00\u3067\u304D\u307E\u3059\uFF08\u914D\u7DDA\u306E\
52
- \u8AA4\u308A\uFF09`)}if(operation.fetchCached!==void 0&&(operation.download!==void 0||operation.paging!==void 0||operation.destructive===true||plan.method!=="GET")){throw new Error(`twp ${path2} ${operation.name}: fetchCached \u306F\u9001\u4FE1\u3057\u306A\u3044\u8AAD\u307F\u53D6\u308A\u5C02\u7528\u306E\u64CD\u4F5C\u306B\u3060\u3051\u5BA3\u8A00\u3067\u304D\u307E\u3059\uFF08\u914D\u7DDA\u306E\u8AA4\u308A\uFF09`)}for(const note of operation.plannedNotes?.(prepared)??[])errOut(`${safeText(note)}
50
+ download,path2,operation.name,input);const stored=loadCredentials(profile.name);const apiUrl=effectiveApiUrl(profile,stored?.api_url);const transport=options.fetchImpl??httpFetch;const fetchImpl=globals.debug?withDebug(transport,{write:errOut,...operation.sensitiveBody!==void 0?{omitBodies:operation.sensitiveBody}:{}}):transport;const session=new AuthSession(profile.name,apiUrl,process.env,fetchImpl);const client=new TwpApiClient(apiUrl,session,fetchImpl,options.version);const ctx=buildPrepareContext(
51
+ {resolver:new Resolver(client,{profile:profile.name,refresh:globals.refresh,...profileAliases(profile.name)}),profileName:profile.name,env:process.env,cwd:process.cwd()});const prepared=operation.prepare===void 0?input:await operation.prepare(input,ctx);const plan=operation.plan(prepared);if(operation.execute!==void 0&&(operation.download!==void 0||operation.paging!==void 0||operation.fetchCached!==void 0)){throw new Error(`twp ${path2} ${operation.name}: execute \u306F download / paging / fetchCache\
52
+ d \u3068\u540C\u6642\u306B\u5BA3\u8A00\u3067\u304D\u307E\u305B\u3093\uFF08\u914D\u7DDA\u306E\u8AA4\u308A\uFF09`)}if(operation.narrow!==void 0&&(operation.execute!==void 0||operation.download!==void 0||operation.fetchCached!==void 0)){throw new Error(`twp ${path2} ${operation.name}: narrow \u306F execute / download / fetchCached \u3068\u540C\u6642\u306B\u5BA3\u8A00\u3067\u304D\u307E\u305B\u3093\uFF08\u914D\u7DDA\u306E\u8AA4\u308A\uFF09`)}if(operation.invalidates!==void 0&&(operation.fetchCached!==
53
+ void 0||plan.method==="GET")){throw new Error(`twp ${path2} ${operation.name}: invalidates \u306F\u66F8\u304D\u8FBC\u307F\u306E\u64CD\u4F5C\u306B\u3060\u3051\u5BA3\u8A00\u3067\u304D\u307E\u3059\uFF08\u914D\u7DDA\u306E\u8AA4\u308A\uFF09`)}if(operation.fetchCached!==void 0&&(operation.download!==void 0||operation.paging!==void 0||operation.destructive===true||plan.method!=="GET")){throw new Error(`twp ${path2} ${operation.name}: fetchCached \u306F\u9001\u4FE1\u3057\u306A\u3044\u8AAD\u307F\u53D6\u308A\u5C02\u7528\u306E\u64CD\u4F5C\u306B\u3060\u3051\u5BA3\u8A00\u3067\u304D\u307E\u3059\uFF08\u914D\u7DDA\u306E\u8AA4\u308A\uFF09`)}
54
+ for(const note of operation.plannedNotes?.(prepared)??[])errOut(`${safeText(note)}
53
55
  `);if(noRedact)errOut(`${NO_REDACT_NOTICE}
54
- `);if(globals.dryRun){out(line(renderOutput(dryRunValue(apiUrl,plan),format,noRedact)));return EXIT_OK}let body;let paged;try{if(operation.execute!==void 0){const executeCtx={send:next=>send(client,apiUrl,next),putSigned:(url,bytes,contentType)=>putSigned(fetchImpl,url,bytes,contentType),warn:text=>errOut(`${safeText(text)}
56
+ `);if(globals.dryRun){out(line(renderOutput(dryRunValue(apiUrl,plan,noRedact?void 0:operation.sensitiveBody),format,noRedact)));return EXIT_OK}let body;let paged;try{if(operation.execute!==void 0){const executeCtx={send:next=>send(client,apiUrl,next),putSigned:(url,bytes,contentType)=>putSigned(fetchImpl,url,bytes,contentType),warn:text=>errOut(`${safeText(text)}
55
57
  `)};body=await operation.execute(prepared,executeCtx)}else if(operation.fetchCached!==void 0){body=await operation.fetchCached(prepared,ctx)}else if(operation.download!==void 0&&downloadTarget!==void 0){assertWritableTarget(downloadTarget,operation.download.forceFlag);const signedUrl=operation.download.signedUrl;body=await download({client,apiUrl,plan,target:downloadTarget,...signedUrl===void 0?{}:{signed:{fetchImpl,signedUrl}},...operation.download.captureHeaders===void 0?{}:{captureHeaders:operation.
56
58
  download.captureHeaders}})}else if(paging.all&&operation.paging!==void 0){paged=await fetchAllPages({client,apiUrl,plan,paging:operation.paging,maxPages:paging.maxPages,maxItems:paging.maxItems,warn:errOut});body=paged.body}else{body=await send(client,apiUrl,plan)}}finally{try{operation.invalidates?.(prepared,ctx)}catch{}}if(operation.narrow!==void 0){body=operation.narrow(body,prepared);if(paged!==void 0&&operation.paging!==void 0){paged={...paged,count:operation.paging.items(body).length}}}const visible=noRedact?
57
59
  body:redactSecretValues(body);const document=globals.query===void 0&&format==="text"&&operation.document!==void 0?operation.document(visible):void 0;const value=document!==void 0?void 0:globals.query!==void 0?await evaluateQuery(globals.query,operation.raw(visible)):outputValue(operation,format,visible);out(line(document!==void 0?renderDocument(document,noRedact):renderOutput(value,format,noRedact)));if(paged!==void 0){errOut(`--all: ${paged.pages} \u30DA\u30FC\u30B8\u3092\u8FBF\u3063\u3066 ${paged.