@tocca-systems/twp-cli 0.48.0 → 0.49.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 (62) hide show
  1. package/CHANGELOG.public.md +8 -0
  2. package/README.md +55 -4
  3. package/dist/analysis-NCD6YTJM.js +4 -0
  4. package/dist/{api-command-26MLBIZC.js → api-command-IBK6R4XU.js} +3 -3
  5. package/dist/{app-Y7MAQAPC.js → app-7I767FND.js} +4 -4
  6. package/dist/{attendance-correct-5SFXA4DC.js → attendance-correct-M6KD6PSN.js} +1 -1
  7. package/dist/{backlog-F4EWY7MT.js → backlog-IXUASOE3.js} +1 -1
  8. package/dist/{budget-QFUGQIPZ.js → budget-EJIZFFB7.js} +1 -1
  9. package/dist/{chunk-FZWRYJVM.js → chunk-36TEJJ5S.js} +1 -1
  10. package/dist/{chunk-KS2ZUQFC.js → chunk-4QKACT6A.js} +1 -1
  11. package/dist/{chunk-4OSCQLZT.js → chunk-5ALOH2TR.js} +1 -1
  12. package/dist/{chunk-IO5SMECE.js → chunk-5YXEGJU7.js} +1 -1
  13. package/dist/{chunk-Y5EN7RYN.js → chunk-67JAB5QG.js} +1 -1
  14. package/dist/{chunk-XQRSX2RH.js → chunk-6KB2R3S2.js} +33 -8
  15. package/dist/{chunk-OYDF57NH.js → chunk-6WNPHORR.js} +1 -1
  16. package/dist/{chunk-MY2U3CD6.js → chunk-74SXPFUT.js} +50 -26
  17. package/dist/{chunk-BN26WHLS.js → chunk-AC6G5UPA.js} +1 -1
  18. package/dist/{chunk-4F2ONF4P.js → chunk-BS2ACFJA.js} +56 -54
  19. package/dist/{chunk-JKL6NUVV.js → chunk-BSEPVMVA.js} +1 -1
  20. package/dist/{chunk-VYT6JAXQ.js → chunk-FC2SFCKD.js} +2 -2
  21. package/dist/{chunk-A65V3K75.js → chunk-HJPIGVGD.js} +1 -1
  22. package/dist/{chunk-6TPGATAG.js → chunk-QHNZUMRK.js} +1 -1
  23. package/dist/{chunk-GOZCJLRA.js → chunk-QYWYZG73.js} +1 -1
  24. package/dist/{chunk-VB2CSFRO.js → chunk-SPGS7DHD.js} +1 -1
  25. package/dist/{chunk-LAXINIDA.js → chunk-VWNFYFLA.js} +1 -1
  26. package/dist/chunk-ZVJXYKRY.js +9 -0
  27. package/dist/cli.js +65 -10
  28. package/dist/{commands-EIWS357Q.js → commands-DJIQE34F.js} +2 -2
  29. package/dist/{company-77JEESSV.js → company-VCPUUYVV.js} +2 -2
  30. package/dist/{completion-YSP6UE25.js → completion-XFXG7RPT.js} +1 -1
  31. package/dist/{contract-26SKL7XT.js → contract-SMIPLH7R.js} +1 -1
  32. package/dist/{department-IZAR2LZ4.js → department-4RCU4E27.js} +1 -1
  33. package/dist/{deposit-MYTKRIEX.js → deposit-UF7OKRG2.js} +1 -1
  34. package/dist/{estimate-KLS7XJLD.js → estimate-HE5H6XXY.js} +2 -2
  35. package/dist/{inquiry-52OT4HKJ.js → inquiry-SCPVERFM.js} +1 -1
  36. package/dist/{invoice-D77PS3WU.js → invoice-CF2TPYSA.js} +2 -2
  37. package/dist/{job-title-U67Z25ZO.js → job-title-W2EKNKTY.js} +1 -1
  38. package/dist/{knowledge-Q3QLSNDX.js → knowledge-ZZEHU744.js} +1 -1
  39. package/dist/{leave-OSIABEFV.js → leave-5VY2IK7K.js} +1 -1
  40. package/dist/{media-HDG4VHAR.js → media-4MASY32I.js} +86 -26
  41. package/dist/{notification-MEOHWBXH.js → notification-AOSKQX3Z.js} +1 -1
  42. package/dist/{oneshot-ACV6XH5A.js → oneshot-Y4A2ZC3E.js} +1 -1
  43. package/dist/{position-N7SRF3CF.js → position-TPKLP2SP.js} +1 -1
  44. package/dist/{project-YMJJDSTP.js → project-JFZCKGYY.js} +1 -1
  45. package/dist/{prospect-3JD7STGT.js → prospect-3ALNTGPY.js} +1 -1
  46. package/dist/{purchase-2SLZBDD6.js → purchase-SEHUEXE5.js} +2 -2
  47. package/dist/{receivable-6ZRAUHC3.js → receivable-QYSSI7TB.js} +1 -1
  48. package/dist/{registry-GQ3L7PZ2.js → registry-BA7RGQ2R.js} +1 -1
  49. package/dist/{report-TUSP7RRF.js → report-RV7DOZFB.js} +1 -1
  50. package/dist/{run-ZPB23AZX.js → run-ZXMGPUUK.js} +2 -2
  51. package/dist/{sales-ai-review-7NPG7KV6.js → sales-ai-review-AXZKRXKB.js} +1 -1
  52. package/dist/{sales-master-W5MXNZQ2.js → sales-master-RC77V74V.js} +1 -1
  53. package/dist/{sales-numbering-RQV2I5G5.js → sales-numbering-WU5FAPCO.js} +1 -1
  54. package/dist/{supplier-payment-TDL3IE4H.js → supplier-payment-OCAK6N3S.js} +1 -1
  55. package/dist/{task-2SHYSZBZ.js → task-7QESG57Q.js} +2 -2
  56. package/dist/{user-YEIHSVVN.js → user-67X5FJTN.js} +2 -2
  57. package/dist/worker-agent-MKXRTVBM.js +81 -0
  58. package/dist/{workflow-USG3ZKW6.js → workflow-KHNGCPQB.js} +1 -1
  59. package/package.json +1 -1
  60. package/dist/analysis-GAU2A3FU.js +0 -3
  61. package/dist/chunk-6ZB7A6VD.js +0 -9
  62. /package/dist/{commands-SWR442MR.js → commands-UMKI65IW.js} +0 -0
@@ -11,6 +11,14 @@
11
11
  `CHANGELOG.md` に残してあります。顧客向けの履歴は public 公開以降を対象とします。
12
12
  -->
13
13
 
14
+ ## 0.49.0
15
+
16
+ メディアライブラリのファイルを1件ずつ CLI で管理できるようになりました。詳細の確認(`twp media get`)、名前・説明・タグの変更(`twp media update`)、移動(`twp media move`)、公開・非公開・アーカイブ(`twp media publish` / `unpublish` / `archive`)、日時を決めた予約公開(`twp media schedule`)、ゴミ箱からの復元(`twp media restore`)と完全削除(`twp media delete --permanent`)に対応しています。あわせて、ゴミ箱の一覧と空にする操作(`twp media trash`)、タグの一覧・登録・統合・削除(`twp media tag`)、最近閲覧したファイル(`twp media recent list`)も使えます。
17
+
18
+ プロジェクトのリスク分析(`twp project risk`)・収支分析(`twp project profit`)・工程の一覧と登録(`twp project process list` / `create`)、全社の収支分析(`twp analysis profit list`)・人材KPI(`twp analysis staff-kpi list` / `estimates` / `settings`)を CLI から読めるようになりました。権限が無いときは、どの権限が足りないかを案内します。
19
+
20
+ ワーカーエージェント(AIエージェント)の一覧・詳細・ツールのカタログ・実行回数の上限と、実行履歴・実行結果・ステップログを CLI から読めるようになりました(`twp worker-agent`)。実行結果は最終要約を先頭に出します。
21
+
14
22
  ## 0.48.0
15
23
 
16
24
  `twp attendance record create` で過去の時刻での打刻を、`twp attendance record update` / `delete` / `move` で打刻のメモの変更・取り消し・プロジェクトの付け替えができるようになりました。送る前に締め済みの月でないこと、前後の打刻との整合(二重の出勤など)を確かめ、問題があれば `--yes` を付けない限り送りません。`--dry-run` で確認結果だけを見ることもできます。
package/README.md CHANGED
@@ -24,11 +24,12 @@ 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 worker-agent` によるワーカーエージェント(AIエージェント)の参照(一覧・詳細・スケジュールと次回実行予定・許可できるツールのカタログ・実行回数の上限と今日の使用数)と、実行履歴・実行結果(最終要約を先頭に)・ステップログ・ステップの集計の読み取り。作成・更新・実行はまだありません |
27
28
  | **できる** | `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 での一括登録と書き出し・重複確認・顧客への昇格と対応履歴の記録、`twp estimate|invoice|contract ai-review` による申請前AIチェックの実行(`--wait` で完了まで待つ)・結果の表示・指摘への確認済みの理由の登録と取消、`twp ai-review-reason` による理由の横断一覧・社内ナレッジへの追記文案の生成と追記PRの作成(販売管理の管理者)。販売管理・顧客管理の権限が要ります |
28
- | **できる** | `twp media` によるメディアライブラリのファイルのアップロード・一覧・ダウンロード・削除(ゴミ箱へ移す)・一括操作(公開・非公開・アーカイブ・移動・削除・復元・ZIP ダウンロード)、`twp media folder` によるフォルダの一覧・ツリー表示・作成・名前変更・移動・削除・ゴミ箱からの復元と完全削除(`--folder` はフォルダID のほか「親/子」形式のパスでも指定可)、`twp storage get` によるストレージ使用量の確認(管理者) |
29
+ | **できる** | `twp media` によるメディアライブラリのファイルのアップロード・一覧・ダウンロード・詳細・名前/説明/タグの変更・移動・公開・非公開・アーカイブ・予約公開・削除(ゴミ箱へ移す・`--permanent` で完全削除)・復元・一括操作(公開・非公開・アーカイブ・移動・削除・復元・ZIP ダウンロード)、`twp media folder` によるフォルダの一覧・ツリー表示・作成・名前変更・移動・削除・ゴミ箱からの復元と完全削除(`--folder` はフォルダID のほか「親/子」形式のパスでも指定可)、`twp media trash` によるゴミ箱の一覧と空にする操作、`twp media tag` によるタグの一覧・登録・統合・削除(統合と削除は管理者)、`twp media recent list` による最近閲覧したファイル、`twp storage get` によるストレージ使用量の確認(管理者) |
29
30
  | **できる** | `twp attendance` による自分の勤怠の参照(いまの打刻状態・打刻の履歴・月の勤怠表)と打刻・打刻修正(過去の時刻での打刻・メモの変更・取り消し・プロジェクトの付け替え)、管理者向けの残業サマリ(36協定を含む)・締め状況の参照 |
30
31
  | **できる** | `twp leave` による有給の残日数・取得履歴・付与履歴の参照と有給の申請(`twp leave request`)、`twp workchange list` / `twp shift list` による月の勤務変更・シフトの参照(`--me` で自分の分・無ければ全員分=勤怠の管理者) |
31
- | **できる** | `twp analysis` による分析の読み取り(稼働分析・プロジェクトアサイン・人材別アサインを月ごとの列で、今週のキャパシティと過負荷アラート・再分配候補・標準勤務時間の設定、負荷のリスク判定、プロジェクト健全性スコアの一覧・推移と AI の所見)、`twp project manhours` / `twp task manhours` による工数の集計、`twp project workload` によるメンバーごとのタスク件数。分析の権限と、ページごとの閲覧対象への登録が要ります |
32
+ | **できる** | `twp analysis` による分析の読み取り(稼働分析・プロジェクトアサイン・人材別アサインを月ごとの列で、今週のキャパシティと過負荷アラート・再分配候補・標準勤務時間の設定、負荷のリスク判定、プロジェクト健全性スコアの一覧・推移と AI の所見)、`twp project manhours` / `twp task manhours` による工数の集計、`twp project workload` によるメンバーごとのタスク件数、収支分析(`twp analysis profit`・`twp project profit`)・人材KPI(`twp analysis staff-kpi`)・プロジェクトのリスク分析(`twp project risk`)の読み取りと工程の一覧・登録(`twp project process`)。分析の権限と、ページごとの閲覧対象への登録が要ります |
32
33
  | **できる** | `twp budget` による予実管理(年度の予実ダッシュボード・サマリー・部署行の内訳と未割当・CSV 出力、目標の一覧・JSON でのまとめ登録・前年度からのコピー・CSV の取り込みと雛形、プロジェクトの部署按分の参照と全件置換)。分析の権限と予実管理ページの閲覧対象への登録が要り、目標の書き込みは全体管理者か分析の権限が「管理者」の人です |
33
34
  | **できる** | `twp workflow` による、自分が申請できる申請書・申請書の定義(管理者)・自分の申請・承認履歴・自分の承認待ちの参照(申請書は名前でも指定できます)と、申請の起票・提出・更新・削除、承認・却下・差し戻し・取下げ |
34
35
  | **できる** | `twp report` による自分のレポート(日報)の一覧(フォーマット・状態・語で絞り込み)・詳細と、下書きの作成(フォーマットの入力項目から雛形を出せます)・更新・提出・AI アドバイス、使えるレポートフォーマットの一覧。確認者としての一覧(未読・書いた人・作成日で絞り込み)・既読・コメント・確認済み・確認の取り消し・差し戻し |
@@ -702,7 +703,16 @@ twp prospect interaction list|create|update|delete [<対応履歴ID>] --prospect
702
703
  twp media list [--project <コード|ID>] [--folder <ID|パス>] [--keyword <語>] [--all]
703
704
  twp media upload --file <パス> [--project <コード|ID>] [--folder <ID|パス>] [--name <ファイル名>] [--content-type <型>]
704
705
  twp media download <ファイルID> --out <パス> [--force]
705
- twp media delete <ファイルID> --yes
706
+ twp media get <ファイルID>
707
+ twp media update <ファイルID> [--name <ファイル名>] [--description <説明> | --clear-description] [--tag <タグ>]... [--clear-tags]
708
+ twp media move <ファイルID> [--project <コード|ID> | --personal] [--folder <フォルダID>]
709
+ twp media publish | unpublish | archive | restore <ファイルID>
710
+ twp media schedule <ファイルID> --start <日時> [--end <日時>] [--archive-after-end] | --clear
711
+ twp media delete <ファイルID> --yes [--permanent]
712
+ twp media trash list [--project <コード|ID>] [--all]
713
+ twp media trash empty --yes [--project <コード|ID>]
714
+ twp media tag list [--with-count] | create <タグ> | merge <旧タグ> --into <新タグ> --yes | delete <タグ> --yes
715
+ twp media recent list [--limit <件数>]
706
716
  twp media bulk-publish | bulk-unpublish | bulk-archive | bulk-restore <ファイルID>...
707
717
  twp media bulk-move <ファイルID>... [--project <コード|ID>] [--folder <ID|パス>]
708
718
  twp media bulk-delete <ファイルID>... --yes [--permanent]
@@ -722,7 +732,12 @@ twp storage get
722
732
  - **`twp media folder delete` は送る前に中身(サブフォルダ・ファイルの件数)を確かめ、中身があるのに `--recursive` が無ければ止めます。** 既定はゴミ箱へ移すだけで `twp media folder restore` で戻せます。`--permanent` はゴミ箱にあるフォルダだけを完全に削除し、復元できません(ID で指定)。同名のフォルダの作成・自分の下位フォルダへの移動も送る前に止めます(サーバはこれらの理由を返さないため)
723
733
  - **`twp media upload` はアップロード用URLの発行・ファイルの転送・完了登録を1コマンドで行い、サーバが計算した sha256 をローカルのファイルと突き合わせます。** 一致しなければ失敗で終わります。`--dry-run` はURLの発行リクエストだけを表示します(その前に送る容量検査は注記で知らせます)
724
734
  - **転送や完了登録に失敗したときは、ファイルIDと再登録・破棄のコマンドを stderr に出して失敗で終わります。** タスク添付と違い、URLを発行した時点でファイルが仮登録され**自動では消えない**ので、表示されたコマンドのどちらかを実行してください
725
- - `twp media delete` はゴミ箱へ移すだけで、画面から復元できます
735
+ - `twp media delete` はゴミ箱へ移すだけで、`twp media restore` で戻せます。**`--permanent` はゴミ箱にあるファイルだけを完全に削除し、復元できません**(先に `--permanent` 無しでゴミ箱へ移してください)
736
+ - **`twp media update --tag` は指定したタグで置き換えます**(追加ではありません。今のタグは `twp media get` で確認)。タグを全部外すなら `--clear-tags`、説明を消すなら `--clear-description`
737
+ - `twp media move` は `--project` / `--personal` を付けなければ今のスコープのまま、`--folder` を付けなければ最上位へ移します
738
+ - **`twp media schedule` の日時はタイムゾーン付きの ISO 8601 で指定します**(例 `2026-12-01T09:00:00+09:00`)。オフセットの無い日時は受け付けません。送る値は `--dry-run` で確認できます。`--clear` で予約を外すと非公開(下書き)に戻ります
739
+ - **`twp media trash empty` はゴミ箱のファイルとフォルダをすべて完全に削除します。** 実行時は先に件数を表示し、1件でも消せなかったものがあれば終了コード 3 で終わります
740
+ - **`twp media tag merge` / `delete` はテナント全体のファイルのタグを書き換えます**(管理者のみ・`--yes` が要る)。実行時は先に使用数を表示し、存在しないタグは送らずに終了コード 2 で止まります(サーバは無いタグの削除にも成功を返すため)
726
741
  - **アップロードの前に、テナントのストレージ容量を確かめます**(`twp task attachment upload` も同じ)。容量を超えるなら何も登録せず終了コード 3 で止まり、警告の閾値を超えているときは stderr で知らせます
727
742
  - **一括操作(`bulk-*`)は1件でも失敗すると終了コード 3 で終わり、失敗したファイルと理由・適用済みのファイルを stderr に出します**(サーバは失敗があっても HTTP 200 を返すため)。`bulk-publish` / `bulk-unpublish` / `bulk-archive` は存在しないファイルIDが1件でもあると他も適用しません。`bulk-restore` / `bulk-move` / `bulk-delete` は1件ずつ処理するので、失敗したもの以外は適用されます。`bulk-download` は ZIP に入った件数が指定より少なければ書き出さずに終了コード 3 で終わります。件数は 100 件まで(`bulk-download` は 50 件)
728
743
  - `bulk-restore` はゴミ箱から戻す操作です(アーカイブの解除ではありません)。`bulk-delete --permanent` は**ゴミ箱にあるファイルだけ**を完全に削除します(先に `bulk-delete` でゴミ箱へ移してください)
@@ -810,6 +825,14 @@ twp analysis project-health insights [--project <コード>] [--date <YYYY-MM-DD
810
825
  twp project manhours [<コード>] [--from <YYYY-MM-DD>] [--to <YYYY-MM-DD>]
811
826
  twp task manhours <キー> [--from <YYYY-MM-DD>] [--to <YYYY-MM-DD>]
812
827
  twp project workload [<コード>]
828
+ twp analysis profit list --fiscal-year <YYYY> [--scope project|user] [--segment <ID>]
829
+ twp analysis staff-kpi list --department <部署> [--month <YYYY-MM>] [--user <ユーザー>]
830
+ twp analysis staff-kpi estimates --department <部署> [--month <YYYY-MM>]
831
+ twp analysis staff-kpi settings --department <部署>
832
+ twp project risk [<コード>]
833
+ twp project profit [<コード>] [--month <YYYY-MM> | --from <YYYY-MM> --to <YYYY-MM>]
834
+ twp project process list [<コード>] [--status active|inactive]
835
+ twp project process create [<コード>] --process <工程マスタ> [--description <説明>] [--sort-order <0〜9999>] [--status active|inactive]
813
836
  ```
814
837
 
815
838
  - 稼働分析・プロジェクトアサイン・人材別アサインは、期間を指定しなければ**当月(この端末の時計)**です。当月で埋めたときは stderr でそう言います。表は月ごとの値を `YYYY-MM` 列に並べ、値は画面と同じくサーバの集計のままです(内訳は `--output json`)
@@ -819,6 +842,11 @@ twp project workload [<コード>]
819
842
  - 分析の 403 は「分析の権限が無い」「そのページの閲覧対象に入っていない」「ページが要る機能(勤怠・プロジェクト・人事管理)の権限が無い」を分けて案内します
820
843
  - `project-health insights` は呼ぶたびにサーバが AI で所見を作り、テナントの AI クレジットを消費するので `--yes` が要ります
821
844
  - `project manhours`(プロジェクト管理者)と `task manhours` は、期間を省くと今月です(テナントの業務日の区切りでサーバが決めます)。応答にユーザー名は無いので、`user_id` は `twp project members` と突き合わせてください
845
+ - `project risk` はリスク分析(期限超過・滞留など)を高リスク → 中リスクの順に1タスク1行で出します。判定はサーバのままです
846
+ - `project profit` はプロジェクト管理者とテナント管理者だけが読めます。期間を省くと**当月**です(画面は会計年度で開くので、年度で見るなら `--from` / `--to`)。列は画面の月別表と同じです
847
+ - `analysis profit list` は会計年度でしか集計できないので `--fiscal-year` が必須です。売上は全確度(サーバの既定)で集計されます
848
+ - `analysis staff-kpi` は `--department` が必須で、`--month` を省くと当月です。`--user` はサーバに絞り込みの口が無いので CLI が行を絞ります。応答にユーザー名は無いので `user_id` で突き合わせてください
849
+ - `project process create` は `--process` に工程マスタの名前・コード・ID を渡します。工程の並び替え・更新・削除、人材KPIの設定・目標の登録は CLI では行えません
822
850
  - 標準勤務時間の変更・負荷判定の再実行・ページの閲覧対象の設定は CLI では行えません(画面か `twp api` を使ってください)
823
851
 
824
852
  ### 予実を見る・目標を入れる
@@ -847,6 +875,29 @@ twp budget allocation set [--project <コード>] --clear --yes
847
875
  - `target import` は雛形(`import-template`)の形の CSV を取り込みます。1行でも誤りがあればサーバが1件も書かず、行ごとの理由をすべて出して終了コード 3 です
848
876
  - `allocation set` は按分を**全件置き換え**ます(指定しなかった部署の按分は消えます)。`--clear` で按分をすべて消します。送る前に置換前と置換後の按分を出します。比率の合計(100%)はサーバも CLI も検査しないので、自分で確かめてください
849
877
 
878
+ ### ワーカーエージェント(AIエージェント)を見る
879
+
880
+ ```
881
+ twp worker-agent list [--owner <ユーザー>]
882
+ twp worker-agent get <エージェント>
883
+ twp worker-agent tools [--keyword <語>] [--category <カテゴリ>] [--all]
884
+ twp worker-agent tool get <ツール名>
885
+ twp worker-agent limits [--agent <エージェント>]
886
+ twp worker-agent run list <エージェント> [--all]
887
+ twp worker-agent run get <エージェント> <実行ID>
888
+ twp worker-agent run steps <エージェント> <実行ID> [--type <種別>] [--all]
889
+ twp worker-agent run stats <エージェント> <実行ID>
890
+ ```
891
+
892
+ - **`<エージェント>` はエージェント ID でも名前でも指定できます。** 名前は一覧と完全一致で照合します(同名が複数あれば候補を出して止まります)
893
+ - エージェント管理者はテナントの全エージェント、それ以外は自分のエージェントだけを見られます。参照できないエージェントは「見つかりません」になります
894
+ - `list` / `get` はスケジュールの説明(「毎日 03:00」等)・次回実行予定(`next_run_at`)・有効/無効・直近の実行を出します
895
+ - **`run get` は最終要約を先頭に出します。** 結果だけが欲しいときは `--query summary`、`--output text` は要約を本文として先に出します
896
+ - `run steps --type` は `thinking` / `tool_call` / `tool_result` / `error` / `budget_warning` / `final_summary`(カンマ区切りで複数)。ステップの保持期間は90日で、それより古い実行ではステップが0件です
897
+ - トークン数(`*_tokens`)はキー名が秘密の伏字化に当たるため `***(伏字)` で出ます。見るときは `--no-redact` を付けてください
898
+ - AIエージェント機能のライセンスが無いアカウントでは、どの操作も権限の案内を出して終了コード 3 になります
899
+ - 作成・更新・有効化・今すぐ実行・キャンセルはまだありません(`twp api /api/v2/worker-agents/...` で到達できます)
900
+
850
901
  ### ワークフロー(申請)を見る・出す・承認する
851
902
 
852
903
  ```bash
@@ -0,0 +1,4 @@
1
+ import { createRequire as __twpCreateRequire } from 'node:module';
2
+ const require = __twpCreateRequire(import.meta.url);
3
+ import{FROM_FLAG,MANHOUR_DESCRIPTION,MANHOUR_FROM_FLAG,MANHOUR_TO_FLAG,MONTH_FLAG,TO_FLAG,analysisDomain,analysisForbidden,currentMonth,dataOf,listIn,manhourNotes,manhourQuery,manhourRows,monthRange,monthsBetween,noArgs,profitRows,rangeNotes,recordOf,staffKpiRows,workloadDistributionNotes,workloadDistributionRows}from"./chunk-74SXPFUT.js";import"./chunk-QOUDJ7XO.js";import"./chunk-4B3T4UE7.js";import"./chunk-F7K37QG6.js";import"./chunk-QQRJLH6B.js";import"./chunk-LXIAOCUW.js";
4
+ import"./chunk-VTQAI52S.js";import"./chunk-UFND7FBC.js";import"./chunk-VSJBJXZO.js";export{FROM_FLAG,MANHOUR_DESCRIPTION,MANHOUR_FROM_FLAG,MANHOUR_TO_FLAG,MONTH_FLAG,TO_FLAG,analysisDomain,analysisForbidden,currentMonth,dataOf,listIn,manhourNotes,manhourQuery,manhourRows,monthRange,monthsBetween,noArgs,profitRows,rangeNotes,recordOf,staffKpiRows,workloadDistributionNotes,workloadDistributionRows};
@@ -1,8 +1,8 @@
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-VYT6JAXQ.js";import"./chunk-6ZB7A6VD.js";import{evaluateQuery}from"./chunk-ATYA6DG5.js";import{renderOutput}from"./chunk-MXKAEPXA.js";import{redactSecretValues,redactSecrets,withDebug}from"./chunk-AUAZP2G7.js";import"./chunk-Q3B65OFC.js";
4
- import{readBody}from"./chunk-ORUDW52G.js";import"./chunk-4F2ONF4P.js";import"./chunk-GMBJTG6A.js";import"./chunk-3HH5IYNO.js";import{parseOperationArgs,repeatedValues}from"./chunk-F7K37QG6.js";import{ApiError,TwpApiClient,appendQuery}from"./chunk-IF2K4PM5.js";import{GLOBAL_OPTIONS_HELP}from"./chunk-YLM54X35.js";import{AuthSession,NotLoggedInError,SessionExpiredError,loadCredentials}from"./chunk-XNLIEUAW.js";import{effectiveApiUrl,resolveConfiguredOutput,
5
- resolveProfile}from"./chunk-4VZKNEVN.js";import{HELP_TOKEN}from"./chunk-Y5EN7RYN.js";import"./chunk-QQRJLH6B.js";import{OUTPUT_FORMATS,resolveOutputFormat}from"./chunk-K2ONOH3L.js";import"./chunk-WVS4W5FY.js";import"./chunk-II5RVJQN.js";import{DEFAULT_MAX_ITEMS,DEFAULT_MAX_PAGES,envelopePaging,isPageNumberEnvelope,pageRangeNotes,positiveInteger,readEnvelopeCursor,readPageNumberCursor,shellQuote}from"./chunk-IOGMOXYF.js";import"./chunk-VTQAI52S.js";
3
+ import{CommandModelMissingError,MAX_REPORTED_VIOLATIONS,loadCommandModelDomain,loadCommandModelRoutes,validateBody,validateQuery}from"./chunk-NZ7WI4RZ.js";import{NO_REDACT_FLAG,NO_REDACT_NOTICE,exitCodeFor,fetchAllPages,reportError}from"./chunk-FC2SFCKD.js";import{renderOutput}from"./chunk-MXKAEPXA.js";import{redactSecretValues,redactSecrets,withDebug}from"./chunk-AUAZP2G7.js";import"./chunk-ZVJXYKRY.js";import{evaluateQuery}from"./chunk-ATYA6DG5.js";import"./chunk-Q3B65OFC.js";
4
+ import{readBody}from"./chunk-ORUDW52G.js";import"./chunk-BS2ACFJA.js";import"./chunk-GMBJTG6A.js";import"./chunk-3HH5IYNO.js";import{parseOperationArgs,repeatedValues}from"./chunk-F7K37QG6.js";import{ApiError,TwpApiClient,appendQuery}from"./chunk-IF2K4PM5.js";import{GLOBAL_OPTIONS_HELP}from"./chunk-YLM54X35.js";import{AuthSession,NotLoggedInError,SessionExpiredError,loadCredentials}from"./chunk-XNLIEUAW.js";import{effectiveApiUrl,resolveConfiguredOutput,
5
+ resolveProfile}from"./chunk-4VZKNEVN.js";import{HELP_TOKEN}from"./chunk-67JAB5QG.js";import"./chunk-QQRJLH6B.js";import{OUTPUT_FORMATS,resolveOutputFormat}from"./chunk-K2ONOH3L.js";import"./chunk-WVS4W5FY.js";import"./chunk-II5RVJQN.js";import{DEFAULT_MAX_ITEMS,DEFAULT_MAX_PAGES,envelopePaging,isPageNumberEnvelope,pageRangeNotes,positiveInteger,readEnvelopeCursor,readPageNumberCursor,shellQuote}from"./chunk-IOGMOXYF.js";import"./chunk-VTQAI52S.js";
6
6
  import{ApiRejectedError,ApiResponseError,EXIT_OK,EXIT_WAIT_TIMEOUT,NetworkError,UsageError}from"./chunk-UFND7FBC.js";import{httpFetch}from"./chunk-J7QYPKVK.js";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;
@@ -1,8 +1,8 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{RESIDENT_TOKEN_CAP,activateModeFiles,activatePermissionSettings,buildResidentSet,buildSystemPrompt,createAuditLogger,createTwpToolkit,currentBranch,describeAuditLog,describeToolCatalog,displayCwd,executeTool,findProjectTwpSubdir,localTools,lstatOrNull,parseFrontMatter,parseRule,persistProjectAllow,projectPermissionsPath,projectRootFor,readFileTool,residentInputs,resolveGitExecutable,runTurn,secretReason}from"./chunk-LKS7GANP.js";import"./chunk-NZ7WI4RZ.js";import{buildDiffLines,
4
- diffStat}from"./chunk-VRBI2NPI.js";import"./chunk-AUAZP2G7.js";import{require_fuzzysort}from"./chunk-DIMZRTLE.js";import"./chunk-4F2ONF4P.js";import"./chunk-GMBJTG6A.js";import"./chunk-3HH5IYNO.js";import"./chunk-IF2K4PM5.js";import{RelayError,builtinCatalog,createRuntime,loadCachedCatalog,modelLabel,pickModel,toModelInfos}from"./chunk-6QOT7CHX.js";import"./chunk-D233KKXW.js";import"./chunk-XNLIEUAW.js";import{checkMinSupportedVersion,isBelowMinSupported,
5
- minSupportedBlockMessage}from"./chunk-DXXFUNYN.js";import"./chunk-4VZKNEVN.js";import{parseArgv}from"./chunk-4OSCQLZT.js";import{applyPermissionMode,checkPermission,describePermissionMode,getMode,isModeId,modeSource,nextMode}from"./chunk-NAUH75MM.js";import"./chunk-Y5EN7RYN.js";import"./chunk-QQRJLH6B.js";import{isFullWidth,isWide,stringWidth,stripAnsi}from"./chunk-WVS4W5FY.js";import"./chunk-N2UVRM3Z.js";import"./chunk-II5RVJQN.js";import"./chunk-UFND7FBC.js";
3
+ import{RESIDENT_TOKEN_CAP,activateModeFiles,activatePermissionSettings,buildResidentSet,buildSystemPrompt,createAuditLogger,createTwpToolkit,currentBranch,describeAuditLog,describeToolCatalog,displayCwd,executeTool,findProjectTwpSubdir,localTools,lstatOrNull,parseFrontMatter,parseRule,persistProjectAllow,projectPermissionsPath,projectRootFor,readFileTool,residentInputs,resolveGitExecutable,runTurn,secretReason}from"./chunk-LKS7GANP.js";import"./chunk-NZ7WI4RZ.js";import"./chunk-AUAZP2G7.js";
4
+ import{buildDiffLines,diffStat}from"./chunk-VRBI2NPI.js";import{require_fuzzysort}from"./chunk-DIMZRTLE.js";import"./chunk-BS2ACFJA.js";import"./chunk-GMBJTG6A.js";import"./chunk-3HH5IYNO.js";import"./chunk-IF2K4PM5.js";import{RelayError,builtinCatalog,createRuntime,loadCachedCatalog,modelLabel,pickModel,toModelInfos}from"./chunk-6QOT7CHX.js";import"./chunk-D233KKXW.js";import"./chunk-XNLIEUAW.js";import{checkMinSupportedVersion,isBelowMinSupported,
5
+ minSupportedBlockMessage}from"./chunk-DXXFUNYN.js";import"./chunk-4VZKNEVN.js";import{parseArgv}from"./chunk-5ALOH2TR.js";import{applyPermissionMode,checkPermission,describePermissionMode,getMode,isModeId,modeSource,nextMode}from"./chunk-NAUH75MM.js";import"./chunk-67JAB5QG.js";import"./chunk-QQRJLH6B.js";import{isFullWidth,isWide,stringWidth,stripAnsi}from"./chunk-WVS4W5FY.js";import"./chunk-N2UVRM3Z.js";import"./chunk-II5RVJQN.js";import"./chunk-UFND7FBC.js";
6
6
  import"./chunk-PMOUHEJQ.js";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=
@@ -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-ZPB23AZX.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-ZXMGPUUK.js");try{const code=await runDomain({domain:route.domain,...parsed.operation!==void 0?{operation:parsed.operation}:
1216
1216
  {},argv:parsed.domainArgv,help:parsed.domainHelp,globals,version:deps.version,io,...deps.fetchImpl!==void 0?{fetchImpl:deps.fetchImpl}:{}});return{code,out,err}}catch(e){return{code:1,out,err:`${err}${e.message}
1217
1217
  `}}}var GIT_LOG_OUTPUT=["9f3c1a2 feat(ui): \u4E00\u89A7\u306E\u30D5\u30A3\u30EB\u30BF\u3092 URL \u30AF\u30A8\u30EA\u3068\u540C\u671F\u3059\u308B","4b8e0d7 fix(ui): \u4EEE\u60F3\u30B9\u30AF\u30ED\u30FC\u30EB\u306E\u884C\u9AD8\u3055\u3092\u5B9F\u6E2C\u5024\u306B\u5408\u308F\u305B\u308B","c15a99e refactor(api): \u4E00\u89A7\u53D6\u5F97\u306E\u30DA\u30FC\u30B8\u30F3\u30B0\u51E6\u7406\u3092\u5171\u901A\u5316\u3059\u308B","2d70f4b test: \u4E00\u89A7\u30D5\u30A3\u30EB\u30BF\u306E\u56DE\u5E30\u30C6\u30B9\u30C8\u3092\u8FFD\u52A0\u3059\u308B",
1218
1218
  "a6e2b38 fix(api): \u7A7A\u306E\u691C\u7D22\u6761\u4EF6\u3067\u5168\u4EF6\u8FD4\u3089\u306A\u3044\u3088\u3046\u306B\u3059\u308B","7c40d51 chore(deps): \u958B\u767A\u4F9D\u5B58\u3092\u6700\u65B0\u3078\u66F4\u65B0\u3059\u308B","e83b1c6 docs: \u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u624B\u9806\u306B Node 22 \u306E\u524D\u63D0\u3092\u8FFD\u8A18\u3059\u308B","b91f7a4 fix(ui): \u30E2\u30FC\u30C0\u30EB\u306E\u91CD\u306A\u308A\u9806\u3092\u6307\u5B9A\u3059\u308B","5a2c8e0 perf(api): \u4E00\u89A7\u306E N+1 \u3092\u89E3\u6D88\u3059\u308B",
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{PUNCH_TYPES,assertMonthOpen,attendanceDomain}from"./chunk-QOUDJ7XO.js";import{dateFlag,monthFlag}from"./chunk-4B3T4UE7.js";import"./chunk-4F2ONF4P.js";import{isSafePathSegment}from"./chunk-GMBJTG6A.js";import"./chunk-3HH5IYNO.js";import"./chunk-IF2K4PM5.js";import"./chunk-4VZKNEVN.js";import"./chunk-II5RVJQN.js";import{requireResolved,withResolved}from"./chunk-LXIAOCUW.js";import{isRecord,pick}from"./chunk-VTQAI52S.js";import{ApiRejectedError,
3
+ import{PUNCH_TYPES,assertMonthOpen,attendanceDomain}from"./chunk-QOUDJ7XO.js";import{dateFlag,monthFlag}from"./chunk-4B3T4UE7.js";import"./chunk-BS2ACFJA.js";import{isSafePathSegment}from"./chunk-GMBJTG6A.js";import"./chunk-3HH5IYNO.js";import"./chunk-IF2K4PM5.js";import"./chunk-4VZKNEVN.js";import"./chunk-II5RVJQN.js";import{requireResolved,withResolved}from"./chunk-LXIAOCUW.js";import{isRecord,pick}from"./chunk-VTQAI52S.js";import{ApiRejectedError,
4
4
  ApiResponseError,UsageError}from"./chunk-UFND7FBC.js";import"./chunk-J7QYPKVK.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var CREATE_USAGE="twp attendance record create --date <YYYY-MM-DD> --time <HH:MM> --type <clock-in|clock-out|break-start|break-end|switch> [--project <\u30B3\u30FC\u30C9|ID>] [--task <\u30BF\u30B9\u30AFID>] [--memo <\u30E1\u30E2>]";var UPDATE_USAGE="twp attendance record update <\u8A18\u9332ID> --memo <\u30E1\u30E2> [--month <YYYY-MM>]";var DELETE_USAGE="twp attendance record delete <\u8A18\u9332ID> --reason <\u7406\u7531> --yes [--month <YYYY-MM>]";var MOVE_USAGE="twp attendance record move <\u8A18\u9332\
5
5
  ID> --project <\u30B3\u30FC\u30C9|ID> [--month <YYYY-MM>]";var TEXT_MAX=500;var UUID_PATTERN=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;var TIME_PATTERN=/^(\d{2}):(\d{2})(?::(\d{2}))?$/;var CLOSED_REASON="\u30B5\u30FC\u30D0\u306F\u7DE0\u3081\u6E08\u307F\u306E\u6708\u3078\u306E\u4FEE\u6B63\u3092\u62D2\u5426\u305B\u305A\u7DE0\u3081\u306E\u96C6\u8A08\u3092\u6D17\u3044\u66FF\u3048\u308B\u306E\u3067\u3001CLI \u304C\u9001\u308B\u524D\u306B\u6B62\u3081\u3066\u3044\u307E\u3059\u3002";
6
6
  var FORBIDDEN="\u81EA\u5206\u306E\u6253\u523B\u306E\u4FEE\u6B63\u306B\u306F\u6253\u523B\u4FEE\u6B63\u306E\u6A29\u9650\uFF08\u30E6\u30FC\u30B6\u30FC\u8A2D\u5B9A\u306E\u300C\u6253\u523B\u4FEE\u6B63\u300D\uFF09\u3068\u52E4\u6020\u306E\u5229\u7528\u6A29\u9650\u304C\u5FC5\u8981\u3067\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u306E\u7BA1\u7406\u8005\u306B\u4ED8\u4E0E\u3092\u4F9D\u983C\u3057\u3066\u304F\u3060\u3055\u3044";var RECORD_COLUMNS=["id","type","type_label","recorded_at","year_month","project_id","t\
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{readBody}from"./chunk-ORUDW52G.js";import{BACKLOG_BASE_PATH,BACKLOG_PROJECT_SCOPE_LABEL,BACKLOG_SCOPE_LABEL,backlogSpacePath,isExactNumericId,resolveNamed}from"./chunk-4F2ONF4P.js";import"./chunk-GMBJTG6A.js";import"./chunk-3HH5IYNO.js";import"./chunk-IF2K4PM5.js";import"./chunk-4VZKNEVN.js";import"./chunk-II5RVJQN.js";import{requireResolved,singleRef,withResolved}from"./chunk-LXIAOCUW.js";import{isRecord,pick}from"./chunk-VTQAI52S.js";
3
+ import{readBody}from"./chunk-ORUDW52G.js";import{BACKLOG_BASE_PATH,BACKLOG_PROJECT_SCOPE_LABEL,BACKLOG_SCOPE_LABEL,backlogSpacePath,isExactNumericId,resolveNamed}from"./chunk-BS2ACFJA.js";import"./chunk-GMBJTG6A.js";import"./chunk-3HH5IYNO.js";import"./chunk-IF2K4PM5.js";import"./chunk-4VZKNEVN.js";import"./chunk-II5RVJQN.js";import{requireResolved,singleRef,withResolved}from"./chunk-LXIAOCUW.js";import{isRecord,pick}from"./chunk-VTQAI52S.js";
4
4
  import{ApiResponseError,UsageError}from"./chunk-UFND7FBC.js";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\
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{analysisForbidden}from"./chunk-MY2U3CD6.js";import"./chunk-QOUDJ7XO.js";import"./chunk-4B3T4UE7.js";import{repeatedValues}from"./chunk-F7K37QG6.js";import{ApiError,MultipartBody}from"./chunk-IF2K4PM5.js";import"./chunk-QQRJLH6B.js";import{nonEmpty}from"./chunk-IOGMOXYF.js";import{requireResolved,withResolved}from"./chunk-LXIAOCUW.js";import{isRecord,pick}from"./chunk-VTQAI52S.js";import{ApiRejectedError,ApiResponseError,UsageError}from"./chunk-UFND7FBC.js";
3
+ import{analysisForbidden}from"./chunk-74SXPFUT.js";import"./chunk-QOUDJ7XO.js";import"./chunk-4B3T4UE7.js";import{repeatedValues}from"./chunk-F7K37QG6.js";import{ApiError,MultipartBody}from"./chunk-IF2K4PM5.js";import"./chunk-QQRJLH6B.js";import{nonEmpty}from"./chunk-IOGMOXYF.js";import{requireResolved,withResolved}from"./chunk-LXIAOCUW.js";import{isRecord,pick}from"./chunk-VTQAI52S.js";import{ApiRejectedError,ApiResponseError,UsageError}from"./chunk-UFND7FBC.js";
4
4
  import"./chunk-J7QYPKVK.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";import fs from"fs";import path from"path";var PATH="/api/v2/budget";var ANALYSIS_FORBIDDEN=analysisForbidden("");function budgetForbidden(body){if(body?.error==="forbidden")return"\u3053\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u95B2\u89A7\u3067\u304D\u307E\u305B\u3093\uFF08\u30E1\u30F3\u30D0\u30FC\u3067\u306A\u3044\u304B\u3001\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u6A29\u9650\u304C\u8DB3\u308A\u307E\u305B\u3093\uFF09\u3002\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u7BA1\u7406\u8005\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002";
5
5
  return ANALYSIS_FORBIDDEN(body)}var FORBIDDEN=budgetForbidden;var EDIT_HINT="\u76EE\u6A19\u306E\u8A2D\u5B9A\u30FB\u30B3\u30D4\u30FC\u30FB\u53D6\u308A\u8FBC\u307F\u306F\u3001\u5168\u4F53\u7BA1\u7406\u8005\u304B\u5206\u6790\u306E\u6A29\u9650\u304C\u300C\u7BA1\u7406\u8005\u300D\u306E\u4EBA\u3060\u3051\u304C\u3067\u304D\u307E\u3059\u3002\u6309\u5206\u306F\u305D\u308C\u306B\u52A0\u3048\u3066\u3001\u305D\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u7BA1\u7406\u8005\u3082\u3067\u304D\u307E\u3059\n\uFF08\u3069\u3061\u3089\u3082\u5206\u6790\u306E\u6A29\u9650\u304C\u300C\u306A\u3057\u300D\u3067\u306F\u4F7F\u3048\u307E\u305B\u3093\uFF09\u3002";
6
6
  var YEAR_MIN=2e3;var YEAR_MAX=2100;var IMPORT_MAX_BYTES=2048*1024;var SET_FILE_MAX_BYTES=4*1024*1024;var AMOUNT_MAX=999999999999;var SHOWN_OVERWRITES=24;var BOM=new RegExp(`^${String.fromCharCode(65279)}`);function usageOf(op){return`twp budget ${op} help`}function text(value){return typeof value==="string"||typeof value==="number"?String(value):""}function yen(value){return typeof value==="number"?`${value.toLocaleString("ja-JP")} \u5186`:"\uFF08\u306A\u3057\uFF09"}function noArgs(input,op){if(input.
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{salesFeatureDenied}from"./chunk-VB2CSFRO.js";import{featureLicenseGuidance}from"./chunk-GOZCJLRA.js";import{charCount,readBody}from"./chunk-ORUDW52G.js";import{isExactNumericId}from"./chunk-4F2ONF4P.js";import{repeatedValues}from"./chunk-F7K37QG6.js";import{ApiError}from"./chunk-IF2K4PM5.js";import{NotLoggedInError,SessionExpiredError}from"./chunk-XNLIEUAW.js";import{LIST_PAGING_HELP,PAGE_NUMBER_LIST_FLAGS,envelopePaging,nonEmpty,positiveInteger}from"./chunk-IOGMOXYF.js";
3
+ import{salesFeatureDenied}from"./chunk-SPGS7DHD.js";import{featureLicenseGuidance}from"./chunk-QYWYZG73.js";import{charCount,readBody}from"./chunk-ORUDW52G.js";import{isExactNumericId}from"./chunk-BS2ACFJA.js";import{repeatedValues}from"./chunk-F7K37QG6.js";import{ApiError}from"./chunk-IF2K4PM5.js";import{NotLoggedInError,SessionExpiredError}from"./chunk-XNLIEUAW.js";import{LIST_PAGING_HELP,PAGE_NUMBER_LIST_FLAGS,envelopePaging,nonEmpty,positiveInteger}from"./chunk-IOGMOXYF.js";
4
4
  import{requireResolved,withResolved}from"./chunk-LXIAOCUW.js";import{isRecord,pick}from"./chunk-VTQAI52S.js";import{ApiRejectedError,ApiResponseError,NetworkError,UsageError}from"./chunk-UFND7FBC.js";var SALES_PATH="/api/v2/sales";var REASONS_PATH=`${SALES_PATH}/ai-review-reasons`;function documentForbidden(body){if(salesFeatureDenied(body))return featureLicenseGuidance("\u8CA9\u58F2\u7BA1\u7406");const reason=body?.error;if(typeof reason==="string"&&reason.endsWith("\u6A29\u9650\u304C\u3042\u308A\u307E\u305B\u3093")){return`${reason}\uFF08\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306B\u7D10\u3065\u304F\u66F8\u985E\u306F\u305D\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30E1\u30F3\u30D0\u30FC\u3001\u7D10\u3065\u304B\u306A\u3044\u66F8\u985E\u306F\u4F5C\u6210\u8005\u30FB\u62C5\u5F53\u8005\u3068\u7BA1\u7406\u8005\u3060\u3051\u304C\u6271\u3048\u307E\u3059\uFF09`}
5
5
  return void 0}function reasonsForbidden(body){if(body?.error==="permission_denied")return featureLicenseGuidance("\u8CA9\u58F2\u7BA1\u7406");return"\u7406\u7531\u306E\u6A2A\u65AD\u4E00\u89A7\u30FB\u6587\u6848\u751F\u6210\u30FBPR \u4F5C\u6210\u306F\u8CA9\u58F2\u7BA1\u7406\u306E\u7BA1\u7406\u8005\u3060\u3051\u304C\u4F7F\u3048\u307E\u3059\uFF08\u66F8\u985E\u3092\u8DE8\u3044\u3067\u7406\u7531\u3092\u8AAD\u3080\u305F\u3081\uFF09\u3002\u30C6\u30CA\u30F3\u30C8\u304C\u8CA9\u58F2\u7BA1\u7406\u3092\u5951\u7D04\u3057\u3066\u3044\u308B\u304B\u30FB\u3042\u306A\u305F\u306E\u8CA9\u58F2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u300C\u7BA1\u7406\u8005\u300D\u304B\u3092\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002"}
6
6
  var ESTIMATE={name:"estimate",label:"\u898B\u7A4D",segment:"estimates"};var INVOICE={name:"invoice",label:"\u8ACB\u6C42",segment:"invoices"};var CONTRACT={name:"contract",label:"\u53D6\u5F15\u5951\u7D04",segment:"contracts"};var JUDGMENTS={no_issue:"\u78BA\u8A8D\u3057\u305F\u304C\u554F\u984C\u306A\u3044\u3068\u5224\u65AD\u3057\u305F",corrected:"\u6307\u6458\u3092\u53D7\u3051\u3066\u66F8\u985E\u3092\u4FEE\u6B63\u3057\u305F",not_applicable:"\u3053\u306E\u6848\u4EF6\u306B\u306F\u5F53\u3066\u306F\u307E\u3089\u306A\u3044\u6307\u6458\u3060\u3068\u5224\u65AD\u3057\u305F"};
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{contentTypeFor,inspectLocalFile,issued}from"./chunk-HNUBM24L.js";import{createFlags,fieldBody,hasAnyField,updateFlags}from"./chunk-A65V3K75.js";import{checkUploadQuota}from"./chunk-2YNZ4MRT.js";import{readCsvFileText}from"./chunk-OHXZO5WK.js";import{featureLicenseGuidance}from"./chunk-GOZCJLRA.js";import{CUSTOMERS_PATH,SALES_COMPANIES_PATH,isExactNumericId}from"./chunk-4F2ONF4P.js";import{isSafePathSegment}from"./chunk-GMBJTG6A.js";import{ApiError,
3
+ import{contentTypeFor,inspectLocalFile,issued}from"./chunk-HNUBM24L.js";import{createFlags,fieldBody,hasAnyField,updateFlags}from"./chunk-HJPIGVGD.js";import{checkUploadQuota}from"./chunk-2YNZ4MRT.js";import{readCsvFileText}from"./chunk-OHXZO5WK.js";import{featureLicenseGuidance}from"./chunk-QYWYZG73.js";import{CUSTOMERS_PATH,SALES_COMPANIES_PATH,isExactNumericId}from"./chunk-BS2ACFJA.js";import{isSafePathSegment}from"./chunk-GMBJTG6A.js";import{ApiError,
4
4
  errorListMessages}from"./chunk-IF2K4PM5.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-IOGMOXYF.js";import{requireResolved,singleRef,withResolved}from"./chunk-LXIAOCUW.js";import{acknowledgement,isRecord,pick}from"./chunk-VTQAI52S.js";import{ApiRejectedError,ApiResponseError,UsageError}from"./chunk-UFND7FBC.js";import fs from"fs";import path from"path";function levelForbidden(licenseGuidance,levelGuidance){return body=>body?.error==="permission_denied"?licenseGuidance:levelGuidance}var COMPANY_LICENSE="\u53D6\u5F15\u5148\u3092\u6271\u3046\u306B\u306F\u8CA9\u58F2\u7BA1\u7406\u304B\u9867\u5BA2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u8981\u308A\u307E\u3059\u304C\u3001\u3069\u3061\u3089\u3082\u3042\u308A\u307E\u305B\u3093\u3002\u30C6\u30CA\u30F3\u30C8\u304C\u3069\u3061\u3089\u3082\u5951\u7D04\u3057\u3066\u3044\u306A\u3044\u304B\u3001\u3042\u306A\u305F\u306E\u6A29\u9650\u304C\u3069\u3061\u3089\u3082\u300C\u306A\u3057\u300D\u306B\u306A\u3063\u3066\u3044\u307E\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002";
5
5
  var CUSTOMER_LICENSE=featureLicenseGuidance("\u9867\u5BA2\u7BA1\u7406");var COMPANY_WRITE_FORBIDDEN=levelForbidden(COMPANY_LICENSE,"\u9867\u5BA2\u306E\u4F5C\u6210\u30FB\u66F4\u65B0\u306B\u306F\u3001\u9867\u5BA2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u300C\u7DE8\u96C6\u8005\u300D\u4EE5\u4E0A\u304B\u3001\u8CA9\u58F2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u300C\u30E1\u30F3\u30D0\u30FC\u300D\u4EE5\u4E0A\u306E\u3069\u3061\u3089\u304B\u304C\u8981\u308A\u307E\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002");
6
6
  var LEVEL_LABELS={admin:"\u7BA1\u7406\u8005",editor:"\u7DE8\u96C6\u8005",viewer:"\u95B2\u89A7\u8005",none:"\u306A\u3057"};var CHILD_DELETE_NEEDS="\u62C5\u5F53\u8005\u30FB\u5BFE\u5FDC\u5C65\u6B74\u306E\u524A\u9664\u306B\u306F\u9867\u5BA2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u300C\u7BA1\u7406\u8005\u300D\u3067\u3042\u308B\u3053\u3068\u304C\u8981\u308A\u307E\u3059";var CUSTOMER_DELETE_FORBIDDEN=levelForbidden(COMPANY_LICENSE,"\u9867\u5BA2\u306E\u524A\u9664\u306B\u306F\u3001\u4F01\u696D\u306E\u524A\u9664\u306B\u9867\u5BA2\u7BA1\u7406\u306E\u300C\u7BA1\u7406\u8005\u300D\u304B\u8CA9\u58F2\u7BA1\u7406\u306E\u300C\u30E1\u30F3\u30D0\u30FC\u300D\u4EE5\u4E0A\u3001\u62C5\u5F53\u8005\u30FB\u5BFE\u5FDC\u5C65\u6B74\u306E\u524A\u9664\u306B\u9867\u5BA2\u7BA1\u7406\u306E\u300C\u7BA1\u7406\u8005\u300D\u304C\u8981\u308A\u307E\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{isModeId,isPermissionModeId}from"./chunk-NAUH75MM.js";import{API_TOKEN,HELP_TOKEN,isDomainName}from"./chunk-Y5EN7RYN.js";import{splitFlagToken}from"./chunk-QQRJLH6B.js";var BUILTIN_COMMANDS=["login","logout","whoami","update","task-loop"];var TASK_LOOP_ACTIONS=["run","status","stop","schedule","setup","charter","skill"];var VALUE_FLAGS=new Set(["-p","--print","--profile","--tenant","--mode","--permission-mode","--model","--allowed-tools","--disallowed-tools","--project","--engine","--interval","--max-cycles","--ai","--workspace","--ai-config-file","--now","--counts","--gate","--file","--out","--revision","--dir","--output","--query"]);var BOOLEAN_FLAGS=new Set(
3
+ import{isModeId,isPermissionModeId}from"./chunk-NAUH75MM.js";import{API_TOKEN,HELP_TOKEN,isDomainName}from"./chunk-67JAB5QG.js";import{splitFlagToken}from"./chunk-QQRJLH6B.js";var BUILTIN_COMMANDS=["login","logout","whoami","update","task-loop"];var TASK_LOOP_ACTIONS=["run","status","stop","schedule","setup","charter","skill"];var VALUE_FLAGS=new Set(["-p","--print","--profile","--tenant","--mode","--permission-mode","--model","--allowed-tools","--disallowed-tools","--project","--engine","--interval","--max-cycles","--ai","--workspace","--ai-config-file","--now","--counts","--gate","--file","--out","--revision","--dir","--output","--query"]);var BOOLEAN_FLAGS=new Set(
4
4
  ["-h","--help","-v","--version","--no-tui","--doctor","--password","--token","--no-browser","--safe","--daemon","--force-runner","--force","--drain","--yes","-y","--no-ai-config-file","--verbose","--all","--dry-run","--debug","--refresh"]);function dispatch(argv,limit=2){const tokens=[];const indexes=[];let truncated=false;for(let i=0;i<argv.length;i++){const arg=argv[i];if(arg===void 0)continue;if(arg.startsWith("-")&&arg!=="-"){const{name,value:inline}=splitFlagToken(arg);if(BOOLEAN_FLAGS.has(
5
5
  name)){if(inline!==void 0){truncated=true;break}continue}if(VALUE_FLAGS.has(name)){if(inline!==void 0)continue;const next=argv[i+1];if(next!==void 0&&(!next.startsWith("-")||next==="-"))i++;continue}truncated=true;break}if(arg===""||arg==="-")continue;if(tokens.length>=limit)break;tokens.push(arg);indexes.push(i)}return{tokens,indexes,truncated}}function isBuiltin(token){return token!==void 0&&BUILTIN_COMMANDS.includes(token)}function isTaskLoopAction(token){return token!==void 0&&TASK_LOOP_ACTIONS.
6
6
  includes(token)}function resolveRoute(result){const{tokens,indexes}=result;const[first,second]=tokens;const firstIndex=indexes[0];if(first===void 0||firstIndex===void 0)return{kind:"none",consumed:[]};const consumed=[firstIndex];const secondIndex=indexes[1];if(isBuiltin(first)){if(first==="task-loop"&&isTaskLoopAction(second)){if(secondIndex!==void 0)consumed.push(secondIndex);return{kind:"builtin",command:first,action:second,consumed}}return{kind:"builtin",command:first,...first==="task-loop"?{
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{FORCE_FLAG,OUT_FLAG,REV_FLAG,revOf,singleId,uploadStaged}from"./chunk-JKL6NUVV.js";import{CUSTOMER_LICENSE,childForbidden,levelForbidden}from"./chunk-KS2ZUQFC.js";import{inspectLocalFile}from"./chunk-HNUBM24L.js";import{createFlags,fieldBody,hasAnyField,updateFlags}from"./chunk-A65V3K75.js";import{SALES_ESTIMATES_PATH,isExactNumericId}from"./chunk-4F2ONF4P.js";import{nonEmpty}from"./chunk-IOGMOXYF.js";import{requireResolved,withResolved}from"./chunk-LXIAOCUW.js";
3
+ import{FORCE_FLAG,OUT_FLAG,REV_FLAG,revOf,singleId,uploadStaged}from"./chunk-BSEPVMVA.js";import{CUSTOMER_LICENSE,childForbidden,levelForbidden}from"./chunk-4QKACT6A.js";import{inspectLocalFile}from"./chunk-HNUBM24L.js";import{createFlags,fieldBody,hasAnyField,updateFlags}from"./chunk-HJPIGVGD.js";import{SALES_ESTIMATES_PATH,isExactNumericId}from"./chunk-BS2ACFJA.js";import{nonEmpty}from"./chunk-IOGMOXYF.js";import{requireResolved,withResolved}from"./chunk-LXIAOCUW.js";
4
4
  import{acknowledgement,isRecord,pick}from"./chunk-VTQAI52S.js";import{ApiResponseError,UsageError}from"./chunk-UFND7FBC.js";import fs from"fs";import path from"path";var DOCUMENT_TYPES=["order_form","individual_contract","other"];var DOCUMENT_TYPE_HELP="order_form\uFF1D\u6CE8\u6587\u66F8 / individual_contract\uFF1D\u500B\u5225\u5951\u7D04\u66F8 / other\uFF1D\u305D\u306E\u4ED6\u6848\u4EF6\u66F8\u985E";var MAGIC_BYTES={pdf:["%PDF-"],jpg:["\xFF\xD8\xFF"],jpeg:["\xFF\xD8\xFF"],png:["\x89PNG\r\n\n"],xlsx:["PK","PK","PK\x07\b"],docx:["PK","PK","PK\x07\b"],xls:["\xD0\xCF\xE0\xA1\xB1\xE1"],doc:["\xD0\xCF\xE0\xA1\xB1\xE1"]};var FILE_NAME_MAX_CHARS=255;var FIELDS=[
5
5
  {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:"document_type",values:DOCUMENT_TYPES,summary:`\u66F8\u985E\u7A2E\u5225\uFF08${DOCUMENT_TYPE_HELP}\u30FBcreate \u3067\u306F\u5FC5\u9808\uFF09`}];var COLUMNS=["document_id","estimate_id","document_type","document_type_label","document_name","current_version","updated_by_name","updated_at"];var VERSION_COLUMNS=[
6
6
  "version_number","file_name","file_size","is_current","created_by_name","created_at"];var ESTIMATE_FLAG={name:"--estimate",summary:"\u898B\u7A4D\u306E ID\uFF08twp estimate list \u306E id \u5217\u306E\u6570\u5B57\u30FB\u5FC5\u9808\uFF09",takesValue:true,placeholder:"<\u898B\u7A4DID>"};var FILE_FLAG={name:"--file",summary:"\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3059\u308B\u30D5\u30A1\u30A4\u30EB\uFF08PDF\u30FBJPEG\u30FBPNG\u30FBWord\u30FBExcel\u3002\u5FC5\u9808\uFF09",takesValue:true,placeholder:"<\
@@ -1,4 +1,4 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- var DOMAIN_NAMES=["agent-loop","ai-review-reason","analysis","attendance","backlog","budget","business-place","company","contract","customer","department","deposit","estimate","inquiry","invoice","job-title","leave","media","meeting","note","notification","onedrive","outlook","payee","position","project","prospect","purchase","receivable","report","rounding-setting","seal-impression","shift","storage","supplier-payment","task","teams","user","wiki","workchange","workflow"];function isDomainName(value){
3
+ var DOMAIN_NAMES=["agent-loop","ai-review-reason","analysis","attendance","backlog","budget","business-place","company","contract","customer","department","deposit","estimate","inquiry","invoice","job-title","leave","media","meeting","note","notification","onedrive","outlook","payee","position","project","prospect","purchase","receivable","report","rounding-setting","seal-impression","shift","storage","supplier-payment","task","teams","user","wiki","workchange","worker-agent","workflow"];function isDomainName(value){
4
4
  return value!==void 0&&DOMAIN_NAMES.includes(value)}var HELP_TOKEN="help";var API_TOKEN="api";export{DOMAIN_NAMES,isDomainName,HELP_TOKEN,API_TOKEN};
@@ -1,7 +1,7 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{USER_REF_FLAG,USER_REF_HELP,userPath}from"./chunk-IXFMXUNT.js";import{MANHOUR_DESCRIPTION,MANHOUR_FROM_FLAG,MANHOUR_TO_FLAG,manhourNotes,manhourQuery,manhourRows,workloadDistributionNotes,workloadDistributionRows}from"./chunk-MY2U3CD6.js";import{boundedText,isoDate}from"./chunk-XDHLO54T.js";import{readBody}from"./chunk-ORUDW52G.js";import{PROJECT_MEMBERS_LIMIT,resolveNamed}from"./chunk-4F2ONF4P.js";import{collapsesInUrlPath,safeProjectIdPolicy}from"./chunk-GMBJTG6A.js";
4
- import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-IOGMOXYF.js";import{requireResolved,singleRef,withResolved}from"./chunk-LXIAOCUW.js";import{isRecord,pick}from"./chunk-VTQAI52S.js";import{ApiResponseError,UsageError}from"./chunk-UFND7FBC.js";var PROJECT_FLAG={name:"--project",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30B3\u30FC\u30C9\u307E\u305F\u306F ID\uFF08\u7701\u7565\u6642\u306F TWP_PROJECT / .twp/config.json / ~/.twp/config.json\uFF09",takesValue:true,placeholder:"<\u30B3\u30FC\u30C9|ID>"};var ROLE_FLAG={name:"--role",summary:"\u5F79\u5272\uFF08member / manager \u306A\u3069\u30FB\u5024\u306F\u30B5\u30FC\u30D0\u304C\u691C\u67FB\u3059\u308B\uFF09",takesValue:true,placeholder:"<\u5F79\u5272>"};var START_DATE_FLAG={name:"\
3
+ import{USER_REF_FLAG,USER_REF_HELP,userPath}from"./chunk-IXFMXUNT.js";import{FROM_FLAG,MANHOUR_DESCRIPTION,MANHOUR_FROM_FLAG,MANHOUR_TO_FLAG,MONTH_FLAG,TO_FLAG,dataOf,listIn,manhourNotes,manhourQuery,manhourRows,monthRange,rangeNotes,recordOf,workloadDistributionNotes,workloadDistributionRows}from"./chunk-74SXPFUT.js";import{boundedText,isoDate}from"./chunk-XDHLO54T.js";import{readBody}from"./chunk-ORUDW52G.js";import{PROJECT_MEMBERS_LIMIT,resolveNamed}from"./chunk-BS2ACFJA.js";
4
+ import{collapsesInUrlPath,safeProjectIdPolicy}from"./chunk-GMBJTG6A.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-IOGMOXYF.js";import{requireResolved,singleRef,withResolved}from"./chunk-LXIAOCUW.js";import{isRecord,pick}from"./chunk-VTQAI52S.js";import{ApiResponseError,UsageError}from"./chunk-UFND7FBC.js";var PROJECT_FLAG={name:"--project",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30B3\u30FC\u30C9\u307E\u305F\u306F ID\uFF08\u7701\u7565\u6642\u306F TWP_PROJECT / .twp/config.json / ~/.twp/config.json\uFF09",takesValue:true,placeholder:"<\u30B3\u30FC\u30C9|ID>"};var ROLE_FLAG={name:"--role",summary:"\u5F79\u5272\uFF08member / manager \u306A\u3069\u30FB\u5024\u306F\u30B5\u30FC\u30D0\u304C\u691C\u67FB\u3059\u308B\uFF09",takesValue:true,placeholder:"<\u5F79\u5272>"};var START_DATE_FLAG={name:"\
5
5
  --start-date",summary:"\u53C2\u753B\u958B\u59CB\u65E5\uFF08YYYY-MM-DD\uFF09",takesValue:true,placeholder:"<YYYY-MM-DD>"};var END_DATE_FLAG={name:"--end-date",summary:"\u53C2\u753B\u7D42\u4E86\u65E5\uFF08YYYY-MM-DD\uFF09",takesValue:true,placeholder:"<YYYY-MM-DD>"};var PERIOD_FILE_FLAG={name:"--period-file",summary:"\u7A3C\u50CD\u671F\u9593\uFF08assignment_periods\uFF09\u306E JSON \u914D\u5217\u30D5\u30A1\u30A4\u30EB\uFF08- \u3067\u6A19\u6E96\u5165\u529B\uFF09",takesValue:true,placeholder:"<\u30D1\u30B9>"};
6
6
  var MEMO_FLAG={name:"--memo",summary:"\u30E1\u30E2\uFF0810,000 \u6587\u5B57\u307E\u3067\uFF09",takesValue:true,placeholder:"<\u6587\u5B57\u5217>"};var CLEAR_FLAG={name:"--clear",summary:"\u5225\u540D\u3092\u6D88\u3059",takesValue:false};var MEMO_MAX_CHARS=1e4;var PERIOD_FILE_MAX_CHARS=2e5;var ALIAS_MAX_CHARS=255;var PERIOD_KEYS=["id","start_date","end_date","daily_hours","total_hours","input_mode"];var PERIOD_REQUIRED=["start_date","end_date","daily_hours"];var ROLE_HELP="--role \u306E\u5024\u306F\u30B5\u30FC\u30D0\u304C\u691C\u67FB\u3057\u307E\u3059\uFF08CLI\
7
7
  \u306F\u691C\u67FB\u3057\u307E\u305B\u3093\uFF09\u30022026-10-01 \u6642\u70B9\u306E\u5024\u306F\n member\uFF08\u30E1\u30F3\u30D0\u30FC\uFF09/ manager\uFF08\u7BA1\u7406\u8005\uFF09/ approver\uFF08\u7BA1\u7406\u8005\uFF08\u627F\u8A8D\u8005\uFF09\uFF09/ manager_no_punch\uFF08\u7BA1\u7406\u8005\uFF08\u6253\u523B\u7121\uFF09\uFF09\u3067\u3059\u3002\n \u5024\u306F\u5897\u3048\u308B\u3053\u3068\u304C\u3042\u308A\u307E\u3059\u3002\u4ECA\u306E\u30E1\u30F3\u30D0\u30FC\u306E\u5024\u306F twp project members \u306E role \u5217\u3067\u78BA\u304B\u3081\u3089\u308C\u307E\u3059\u3002";
@@ -58,10 +58,35 @@ T",path:membersPath(input,`/${userPath(input,`/${name}`)}`)}),plannedNotes:targe
58
58
  flags:[CLEAR_FLAG,PROJECT_FLAG],async prepare(input,ctx){const usage="twp project member alias help";if(input.args.length>1)throw new UsageError(`\u53D7\u3051\u53D6\u308C\u308B\u5225\u540D\u306F1\u3064\u3060\u3051\u3067\u3059: ${input.args.slice(1).join(" ")}`,usage);const alias=input.args[0];if(input.flags.has(CLEAR_FLAG.name)&&alias!==void 0)throw new UsageError(`\u5225\u540D\u3068 ${CLEAR_FLAG.name} \u306F\u540C\u6642\u306B\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,usage);if(!input.flags.has(
59
59
  CLEAR_FLAG.name)){if(alias===void 0||alias.trim()==="")throw new UsageError(`\u5225\u540D\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u6D88\u3059\u306A\u3089 ${CLEAR_FLAG.name}\uFF09`,usage);if([...alias].length>ALIAS_MAX_CHARS)throw new UsageError(`\u5225\u540D\u304C\u9577\u3059\u304E\u307E\u3059\uFF08${[...alias].length} \u6587\u5B57\u30FB\u4E0A\u9650 ${ALIAS_MAX_CHARS} \u6587\u5B57\uFF09`,usage)}return withResolved(input,{projectId:await ctx.projectId(nonEmpty(input.flags,PROJECT_FLAG.
60
60
  name))})},plan:input=>({method:"PATCH",path:membersPath(input,"/me/alias"),body:{alias:input.flags.has(CLEAR_FLAG.name)?null:input.args[0]}}),invalidates,summarize:body=>memberSummary(body,"\u5225\u540D\u306E\u66F4\u65B0"),raw:body=>memberResult(body,"\u5225\u540D\u306E\u66F4\u65B0")};var projectMemberResource={name:"member",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30E1\u30F3\u30D0\u30FC\u306E\u30A2\u30B5\u30A4\u30F3\uFF08\u8FFD\u52A0\u30FB\u5F79\u5272\u3068\u7A3C\u50CD\u671F\u9593\u306E\u5909\u66F4\u30FB\u524A\u9664\u30FB\u6607\u683C\u30FB\u964D\u683C\u30FB\u81EA\u5206\u306E\u5225\u540D\uFF09",
61
- operations:[createOperation,updateOperation,deleteOperation,roleChange("promote"),roleChange("demote"),aliasOperation]};var LIST_COLUMNS=["id","code","name","status","effective_status"];var GET_COLUMNS=["id","code","name","status","effective_status","display_flg","closed_flg","task_enabled_flg","start_date","end_date","created_at","updated_at"];var MEMBER_COLUMNS2=["user_id","user_name","user_email","role","alias","department_name"];function memberItems(body){const list=isRecord(body)?body["list"]:void 0;if(!Array.isArray(list)){throw new ApiResponseError("\u30E1\u30F3\u30D0\u30FC\u4E00\u89A7\u306E\u5FDC\u7B54\u306B list \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}
61
+ operations:[createOperation,updateOperation,deleteOperation,roleChange("promote"),roleChange("demote"),aliasOperation]};async function projectArg(input,ctx,usage){const[ref,...rest]=input.args;if(rest.length>0){throw new UsageError(`\u53D7\u3051\u53D6\u308C\u308B\u5F15\u6570\u306F\u30D7\u30ED\u30B8\u30A7\u30AF\u30C81\u3064\u3060\u3051\u3067\u3059: ${rest.join(" ")}`,usage)}return withResolved(input,{projectId:await ctx.projectId(ref)})}function projectPath(input,suffix){return`/api/v2/projects/${encodeURIComponent(requireResolved(input,"projectId"))}/${suffix}`}function managerOnly(what){return body=>body?.error===
62
+ "permission_denied"&&(body.error_description??"").includes("\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u7BA1\u7406\u8005")?`\u3053\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E${what}\u3092\u8AAD\u3080\u6A29\u9650\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u7BA1\u7406\u8005\uFF08manager\uFF09\u304B\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u3060\u3051\u304C\u8AAD\u3081\u307E\u3059\u3002`:void 0}var RISK_USAGE="twp project risk [<ID|\u30B3\u30FC\u30C9>]";function riskData(body){
63
+ const data=dataOf(body,"\u30EA\u30B9\u30AF\u5206\u6790");if(!isRecord(data))throw new ApiResponseError("\u30EA\u30B9\u30AF\u5206\u6790\u306E\u5FDC\u7B54\u306E data \u304C\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002");return data}function riskRows(body){const data=riskData(body);const rows=[];for(const[key,level]of[["high_risk_tasks","high"],["medium_risk_tasks","medium"]]){for(const task of listIn(
64
+ {result:true,[key]:data[key]},key,"\u30EA\u30B9\u30AF\u5206\u6790")){const risks=Array.isArray(task["risks"])?task["risks"].map(recordOf):[];rows.push({level,key:task["key"]??null,subject:task["subject"]??null,risks:risks.map(r=>String(r["detail"]??r["type"]??"?")).join(" / "),types:risks.map(r=>String(r["type"]??"?")).join(","),due_date:task["due_date"]??null,priority:task["priority"]??null,status_id:task["status_id"]??null,assignee_id:task["assignee_id"]??null,id:task["id"]??null})}}return rows}
65
+ var riskOperation={name:"risk",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30EA\u30B9\u30AF\u5206\u6790\uFF08\u671F\u9650\u8D85\u904E\u30FB\u671F\u9650\u9593\u8FD1\u30FB\u6EDE\u7559\u306A\u3069\u306E\u30BF\u30B9\u30AF\uFF09\u3092\u8868\u793A\u3059\u308B",usage:RISK_USAGE,description:"\u753B\u9762\u306E\u300C\u30EA\u30B9\u30AF\u5206\u6790\u300D\u3068\u540C\u3058 GET /api/v2/projects/{id}/risk-analysis \u3067\u3059\u3002\u7701\u7565\u3059\u308B\u3068\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306F\u65E2\u5B9A\u3067\u3059\u3002\n\u672A\u5B8C\u4E86\u30BF\u30B9\u30AF\u306E\u3046\u3061\u3001\u30EA\u30B9\u30AF\u306E\u3042\u308B\u3082\u306E\u3092\u9AD8\u30EA\u30B9\u30AF \u2192 \u4E2D\u30EA\u30B9\u30AF\u306E\u9806\u306B1\u30BF\u30B9\u30AF1\u884C\u3067\u4E26\u3079\u307E\u3059\u3002\nrisks \u306F\u30EA\u30B9\u30AF\u306E\u5185\u5BB9\uFF08\u4F8B: 38\u65E5\u8D85\u904E / 22\u65E5\u9593\u672A\u66F4\u65B0\uFF09\u3001types \u306F\u305D\u306E\u7A2E\u5225\uFF08overdue / stale \u7B49\uFF09\u3067\u3059\u3002\n\u5224\u5B9A\u306F\u30B5\u30FC\u30D0\u306E\u307E\u307E\u3067\u3001CLI \u306F\u518D\
66
+ \u8A08\u7B97\u3057\u307E\u305B\u3093\u3002",flags:[],prepare:(input,ctx)=>projectArg(input,ctx,RISK_USAGE),plan:input=>({method:"GET",path:projectPath(input,"risk-analysis")}),summarize:body=>riskRows(body),raw:body=>{riskRows(body);return riskData(body)},notes:body=>{const data=riskData(body);const summary=recordOf(data["summary"]);return[`\u672A\u5B8C\u4E86 ${String(summary["total_incomplete"]??"-")} \u4EF6 / \u9AD8\u30EA\u30B9\u30AF ${String(summary["high_risk_count"]??"-")} \u4EF6 / \u4E2D\u30EA\u30B9\u30AF ${String(
67
+ summary["medium_risk_count"]??"-")} \u4EF6\uFF08\u5206\u6790: ${String(data["analyzed_at"]??"-")}\uFF09`]}};var PROFIT_USAGE="twp project profit [<ID|\u30B3\u30FC\u30C9>] [--month <YYYY-MM> | --from <YYYY-MM> --to <YYYY-MM>]";function profitData(body){const data=dataOf(body,"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u53CE\u652F\u5206\u6790");if(!isRecord(data)||!isRecord(data["monthly"])){throw new ApiResponseError("\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u53CE\u652F\u5206\u6790\u306E\u5FDC\u7B54\u306B monthly \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}
68
+ return data}function numberAt(record,...path){let value=record;for(const key of path)value=isRecord(value)?value[key]:void 0;return value??null}function profitRows(body){const monthly=profitData(body)["monthly"];return Object.keys(monthly).sort().map(ym=>{const m=monthly[ym];return{year_month:ym,revenue_estimate:numberAt(m,"revenue","total"),revenue_invoice:numberAt(m,"revenue","invoice","total"),revenue_manual:numberAt(m,"revenue","manual","total"),labor_cost_plan:numberAt(m,"labor_cost","assig\
69
+ nment_plan"),labor_cost_actual:numberAt(m,"labor_cost","actual"),procurement_cost:numberAt(m,"procurement_cost","total"),landing_revenue:numberAt(m,"landing","revenue"),landing_cost:numberAt(m,"landing","cost"),landing_profit:numberAt(m,"landing","profit"),landing_profit_rate:numberAt(m,"landing","profit_rate")}})}var profitOperation={name:"profit",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u53CE\u652F\u5206\u6790\uFF08\u6708\u3054\u3068\u306E\u58F2\u4E0A\u30FB\u539F\u4FA1\u30FB\u7740\u5730\u5229\u76CA\uFF09\u3092\u8868\u793A\u3059\u308B\uFF08\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u7BA1\u7406\u8005\uFF09",
70
+ usage:PROFIT_USAGE,description:"\u753B\u9762\u306E\u300C\u53CE\u652F\u5206\u6790\u300D\u3068\u540C\u3058 GET /api/v2/projects/{id}/profit-analysis \u3067\u3059\u3002\u7701\u7565\u3059\u308B\u3068\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306F\u65E2\u5B9A\u3067\u3059\u3002\n\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u7BA1\u7406\u8005\uFF08manager\uFF09\u3068\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u3060\u3051\u304C\u8AAD\u3081\u307E\u3059\u3002\n\u671F\u9593\u3092\u6307\u5B9A\u3057\u306A\u3051\u308C\u3070\u5F53\u6708\uFF08\u3053\u306E\u7AEF\u672B\u306E\u6642\u8A08\uFF09\u3067\u3059\u3002\u753B\u9762\u306F\u4F1A\u8A08\u5E74\u5EA6\u3067\u958B\u304F\u306E\u3067\u3001\u5E74\u5EA6\u3067\u898B\u308B\u306A\u3089 --from / --to \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002\n\u58F2\u4E0A\u306F\u753B\u9762\u306E\u65E2\u5B9A\u3068\u540C\u3058\u78BA\u5EA6\uFF08\u78BA\u5B9A\u30FBA\uFF09\u3067\u96C6\u8A08\u3055\u308C\u307E\u3059\u3002\n--output table / text / tsv \u306F\u6708\u3054\u3068\u306B1\u884C\u3067\u3001\u5217\u306F\u753B\u9762\u306E\u6708\u5225\u8868\u3068\u540C\u3058\u3067\u3059\uFF08revenue_estimate\uFF1D\u898B\u7A4D\u58F2\u4E0A\u30FBrevenue_invoice\uFF1D\u8ACB\u6C42\u30FB\nrevenue_manual\uFF1D\u624B\u5165\u529B\u30FBlabor_cost_plan / actual\uFF1D\u4EBA\u4EF6\u8CBB\u306E\u8A08\u753B\u3068\u5B9F\u7E3E\u30FBprocurement_cost\uFF1D\u8ABF\u9054\u8CBB\u30FBlanding_*\uFF1D\u7740\u5730\uFF09\u3002\n\u898B\u7A4D\u306E\u5185\u8A33\u30FB\u30E6\u30FC\u30B6\u30FC\u5225\u306E\u7A3C\u50CD\uFF08actual_by_user\uFF09\u306F --output json \u304B --query \u3067\u8AAD\u3081\u307E\u3059\u3002\u5024\u306F\u30B5\u30FC\u30D0\u306E\u96C6\u8A08\u306E\u307E\u307E\u3067\u3059\u3002",
71
+ flags:[MONTH_FLAG,FROM_FLAG,TO_FLAG],forbidden:managerOnly("\u53CE\u652F\u5206\u6790"),async prepare(input,ctx){monthRange(input,PROFIT_USAGE);return projectArg(input,ctx,PROFIT_USAGE)},plan(input){const range=monthRange(input,PROFIT_USAGE);return{method:"GET",path:projectPath(input,"profit-analysis"),query:{start_ym:range.from,end_ym:range.to}}},plannedNotes:input=>rangeNotes(monthRange(input,PROFIT_USAGE)),summarize:body=>profitRows(body),raw:body=>profitData(body),notes:body=>{const data=profitData(
72
+ body);const s=recordOf(data["summary"]);const period=recordOf(data["period"]);return[`\u671F\u9593: ${String(period["start_ym"]??"-")} \u301C ${String(period["end_ym"]??"-")}`,`\u5408\u8A08: \u58F2\u4E0A ${String(s["total_revenue"]??"-")} / \u4EBA\u4EF6\u8CBB ${String(s["total_labor_cost"]??"-")} / \u8ABF\u9054\u8CBB ${String(s["total_procurement_cost"]??"-")} / \u539F\u4FA1 ${String(s["total_cost"]??"-")} / \u7C97\u5229 ${String(s["gross_profit"]??"-")}\uFF08${String(s["gross_profit_rate"]??"-")}\
73
+ %\uFF09`]}};var PROCESS_LIST_LIMIT=1e3;function processCreateForbidden(body){return body?.error==="forbidden"&&(body.error_description??"").includes("\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u7BA1\u7406\u8005")?"\u5DE5\u7A0B\u3092\u767B\u9332\u3067\u304D\u308B\u306E\u306F\u3001\u3053\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u7BA1\u7406\u8005\uFF08manager\uFF09\u3068\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u3060\u3051\u3067\u3059\uFF08\u30B5\u30FC\u30D0\u306E\u6587\u9762\u306F\u5171\u901A\u306E\u3082\u306E\u3067\u3059\uFF09\u3002":
74
+ void 0}var PROCESS_COLUMNS=["id","process_id","process_code","process_name","sort_order","status","description","updated_at"];var PROCESS_LIST_USAGE="twp project process list [<ID|\u30B3\u30FC\u30C9>] [--status active|inactive]";var PROCESS_CREATE_USAGE="twp project process create [<ID|\u30B3\u30FC\u30C9>] --process <\u5DE5\u7A0B\u30DE\u30B9\u30BF\u306E\u540D\u524D|\u30B3\u30FC\u30C9|ID> [--description <\u8AAC\u660E>] [--sort-order <0\u301C9999>] [--status active|inactive]";var STATUS_FLAG={name:"\
75
+ --status",summary:"\u72B6\u614B\uFF08active\uFF1D\u6709\u52B9 / inactive\uFF1D\u7121\u52B9\uFF09",takesValue:true,placeholder:"<active|inactive>"};var PROCESS_FLAG={name:"--process",summary:"\u5DE5\u7A0B\u30DE\u30B9\u30BF\uFF08\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u30FBID\uFF09",takesValue:true,placeholder:"<\u5DE5\u7A0B\u30DE\u30B9\u30BF>"};var DESCRIPTION_FLAG={name:"--description",summary:"\u8AAC\u660E\uFF081000\u6587\u5B57\u307E\u3067\uFF09",takesValue:true,placeholder:"<\u8AAC\u660E>"};var SORT_ORDER_FLAG={
76
+ name:"--sort-order",summary:"\u4E26\u3073\u9806\uFF080\u301C9999\u30FB\u65E2\u5B9A 0\uFF09",takesValue:true,placeholder:"<\u6570>"};function processStatus(input,usage){const raw=input.flags.get(STATUS_FLAG.name)?.trim();if(raw===void 0)return void 0;if(raw!=="active"&&raw!=="inactive"){throw new UsageError(`--status \u306F active \u304B inactive \u3067\u3059\uFF08\u53D7\u3051\u53D6\u3063\u305F\u5024: ${raw}\uFF09`,usage)}return raw}function sortOrder(input){const raw=input.flags.get(SORT_ORDER_FLAG.
77
+ name);if(raw===void 0)return void 0;const value=raw.trim();if(!/^\d+$/.test(value)||Number(value)>9999){throw new UsageError(`--sort-order \u306F 0\u301C9999 \u306E\u6574\u6570\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u53D7\u3051\u53D6\u3063\u305F\u5024: ${raw}\uFF09`,PROCESS_CREATE_USAGE)}return Number(value)}function createBody(input){const description=nonEmpty(input.flags,DESCRIPTION_FLAG.name);const length=description===void 0?0:[...description].length;if(length>1e3){throw new UsageError(
78
+ `--description \u306F1000\u6587\u5B57\u307E\u3067\u3067\u3059\uFF08${String(length)}\u6587\u5B57\uFF09`,PROCESS_CREATE_USAGE)}return{process_id:requireResolved(input,"processId"),sort_order:sortOrder(input),status:processStatus(input,PROCESS_CREATE_USAGE),description}}function processRows(body){return listIn(body,"list","\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u5DE5\u7A0B")}function processItem(body){const process=isRecord(body)?body["process"]:void 0;if(!isRecord(body)||body["result"]!==true||
79
+ !isRecord(process)){throw new ApiResponseError("\u5DE5\u7A0B\u306E\u4F5C\u6210\u306E\u5FDC\u7B54\u306B process \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return process}async function processMasterNames(ctx){try{const rows=await ctx.resolver.processMasters();return JSON.stringify(Object.fromEntries(rows.map(row=>[row.id,{name:row.name,code:row.code??null}])))}catch{return"{}"}}function withProcessNames(body,input){const raw=input.
80
+ resolved?.["processMasterNames"];if(raw===void 0||!isRecord(body)||!Array.isArray(body["list"]))return body;const names=JSON.parse(raw);return{...body,list:body["list"].map(row=>{if(!isRecord(row))return row;const hit=typeof row["process_id"]==="string"?names[row["process_id"]]:void 0;if(hit===void 0)return row;return{...row,process_name:row["process_name"]??hit.name,process_code:row["process_code"]??hit.code}})}}var projectProcessResource={name:"process",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u5DE5\u7A0B\uFF08\u4E00\u89A7\u30FB\u767B\u9332\uFF09",
81
+ operations:[{name:"list",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u5DE5\u7A0B\u3092\u8868\u793A\u3059\u308B",usage:PROCESS_LIST_USAGE,description:"GET /api/v2/projects/{id}/processes\u3002\u7701\u7565\u3059\u308B\u3068\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306F\u65E2\u5B9A\u3067\u3059\u3002\nprocess_id \u306F\u5DE5\u7A0B\u30DE\u30B9\u30BF\uFF08\u753B\u9762\u306E\u300C\u30DE\u30B9\u30BF\u8A2D\u5B9A > \u5DE5\u7A0B\u300D\uFF09\u306E ID \u3067\u3059\u3002\u30B5\u30FC\u30D0\u306E\u4E00\u89A7\u306F\u5DE5\u7A0B\u30DE\u30B9\u30BF\u306E\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u3092\u8FD4\u3055\u306A\u3044\u305F\u3081\u3001\nprocess_name / process_code \u306F\u5DE5\u7A0B\u30DE\u30B9\u30BF\u3092\u5F15\u3044\u3066\u88DC\u3044\u307E\u3059\uFF08\u5DE5\u7A0B\u30DE\u30B9\u30BF\u3092\u5F15\u3051\u306A\u304B\u3063\u305F\u3068\u304D\u306F\u7A7A\u306E\u307E\u307E\uFF09\u3002",
82
+ flags:[STATUS_FLAG],async prepare(input,ctx){processStatus(input,PROCESS_LIST_USAGE);const withProject=await projectArg(input,ctx,PROCESS_LIST_USAGE);return withResolved(withProject,{processMasterNames:await processMasterNames(ctx)})},plan:input=>({method:"GET",path:projectPath(input,"processes"),query:{status:processStatus(input,PROCESS_LIST_USAGE),limit:PROCESS_LIST_LIMIT}}),narrow:(body,input)=>withProcessNames(body,input),summarize:body=>processRows(body).map(row=>pick(row,PROCESS_COLUMNS)),
83
+ raw:body=>processRows(body),notes:body=>{const count=isRecord(body)?body["count"]:void 0;const shown=processRows(body).length;return typeof count==="number"&&count>shown?[`\u5DE5\u7A0B\u306F ${String(count)} \u4EF6\u3042\u308A\u307E\u3059\u304C\u3001${String(shown)} \u4EF6\u3060\u3051\u3092\u8868\u793A\u3057\u3066\u3044\u307E\u3059\uFF08\u30B5\u30FC\u30D0\u306E\u4E0A\u9650\uFF09\u3002`]:[]}},{name:"create",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306B\u5DE5\u7A0B\u3092\u767B\u9332\u3059\u308B\uFF08\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u7BA1\u7406\u8005\uFF09",
84
+ usage:PROCESS_CREATE_USAGE,description:"POST /api/v2/projects/{id}/processes\u3002\u7701\u7565\u3059\u308B\u3068\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306F\u65E2\u5B9A\u3067\u3059\u3002\n--process \u3067\u5DE5\u7A0B\u30DE\u30B9\u30BF\u3092\u6307\u5B9A\u3057\u307E\u3059\uFF08\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u30FBID\u3002\u5019\u88DC\u306F twp api /api/v2/project/processes \u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\uFF09\u3002\n\u767B\u9332\u3067\u304D\u308B\u306E\u306F\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u7BA1\u7406\u8005\u3068\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u3067\u3059\u3002\u72B6\u614B\u306E\u65E2\u5B9A\u306F active\u3001\u4E26\u3073\u9806\u306E\u65E2\u5B9A\u306F 0 \u3067\u3059\uFF08\u30B5\u30FC\u30D0\u304C\u6C7A\u3081\u307E\u3059\uFF09\u3002\n\u4E26\u3073\u66FF\u3048\uFF08reorder\uFF09\u30FB\u66F4\u65B0\u30FB\u524A\u9664\u306F\u3053\u306E\u30B3\u30DE\u30F3\u30C9\u306B\u306F\u3042\u308A\u307E\u305B\u3093\u3002\n\u767B\u9332\u306E\u5FDC\u7B54\u306B\u306F\u5DE5\u7A0B\u30DE\u30B9\u30BF\u306E\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u304C\u5165\u308A\u307E\u305B\u3093\uFF08process_id \u3060\u3051\u3002\u540D\u524D\u306F twp project process list \u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002\u4E00\u89A7\u306F\u5DE5\u7A0B\u30DE\u30B9\u30BF\u3092\u5F15\u3044\u3066\u88DC\u3044\u307E\u3059\uFF09\u3002",
85
+ flags:[PROCESS_FLAG,DESCRIPTION_FLAG,SORT_ORDER_FLAG,STATUS_FLAG],forbidden:processCreateForbidden,async prepare(input,ctx){const process=nonEmpty(input.flags,PROCESS_FLAG.name);if(process===void 0)throw new UsageError("--process \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",PROCESS_CREATE_USAGE);createBody(withResolved(input,{processId:"-"}));const withProject=await projectArg(input,ctx,PROCESS_CREATE_USAGE);return withResolved(withProject,{processId:(await ctx.resolver.processMaster(
86
+ process,PROCESS_FLAG.name)).id})},plan:input=>({method:"POST",path:projectPath(input,"processes"),body:createBody(input)}),summarize:body=>pick(processItem(body),PROCESS_COLUMNS),raw:body=>processItem(body)}]};var projectAnalysisOperations=[riskOperation,profitOperation];var LIST_COLUMNS=["id","code","name","status","effective_status"];var GET_COLUMNS=["id","code","name","status","effective_status","display_flg","closed_flg","task_enabled_flg","start_date","end_date","created_at","updated_at"];var MEMBER_COLUMNS2=["user_id","user_name","user_email","role","alias","department_name"];function memberItems(body){const list=isRecord(body)?body["list"]:void 0;if(!Array.isArray(list)){throw new ApiResponseError("\u30E1\u30F3\u30D0\u30FC\u4E00\u89A7\u306E\u5FDC\u7B54\u306B list \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}
62
87
  return list}var listPaging=envelopePaging({label:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u4E00\u89A7"});function listItems(body){return listPaging.items(body)}function projectObject(body){const project=isRecord(body)?body["project"]:void 0;if(!isRecord(project)){throw new ApiResponseError("\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u8A73\u7D30\u306E\u5FDC\u7B54\u306B project \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return project}
63
- var MANHOURS_USAGE="twp project manhours [<ID|\u30B3\u30FC\u30C9>] [--from <YYYY-MM-DD>] [--to <YYYY-MM-DD>]";var projectDomain={name:"project",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u4E00\u89A7\u30FB\u8A73\u7D30\u30FB\u30E1\u30F3\u30D0\u30FC\u306E\u30A2\u30B5\u30A4\u30F3",operations:[{name:"list",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u4E00\u89A7\u3059\u308B",usage:"twp project list [--all] [--limit <\u4EF6\u6570>] [--cursor <\u30AB\u30FC\u30BD\u30EB>] [--keyword <\u8A9E>] [--status <\u72B6\u614B>]",
64
- description:"--output json \u306F API \u304C\u8FD4\u3059\u5168\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u51FA\u3057\u307E\u3059\u3002\n--output table / text / tsv \u306F\u8981\u7D04\u5217\uFF08id / code / name / status / effective_status\uFF09\u3067\u3059\u3002\n\u6B32\u3057\u3044\u5217\u3060\u3051\u3092\u6A5F\u68B0\u51E6\u7406\u3057\u305F\u3044\u3068\u304D\u306F --query \u3067\u9078\u3093\u3067\u304F\u3060\u3055\u3044\uFF08--query \u306F\u751F\u30C7\u30FC\u30BF\u306B\u5BFE\u3057\u3066\u8A55\u4FA1\u3055\u308C\u307E\u3059\uFF09\u3002\n\n"+
88
+ var MANHOURS_USAGE="twp project manhours [<ID|\u30B3\u30FC\u30C9>] [--from <YYYY-MM-DD>] [--to <YYYY-MM-DD>]";var projectDomain={name:"project",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u4E00\u89A7\u30FB\u8A73\u7D30\u30FB\u30E1\u30F3\u30D0\u30FC\u306E\u30A2\u30B5\u30A4\u30F3\u30FB\u5DE5\u6570\u30FB\u30EA\u30B9\u30AF\u5206\u6790\u30FB\u53CE\u652F\u5206\u6790\u30FB\u5DE5\u7A0B",operations:[{name:"list",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u4E00\u89A7\u3059\u308B",usage:"tw\
89
+ p project list [--all] [--limit <\u4EF6\u6570>] [--cursor <\u30AB\u30FC\u30BD\u30EB>] [--keyword <\u8A9E>] [--status <\u72B6\u614B>]",description:"--output json \u306F API \u304C\u8FD4\u3059\u5168\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u51FA\u3057\u307E\u3059\u3002\n--output table / text / tsv \u306F\u8981\u7D04\u5217\uFF08id / code / name / status / effective_status\uFF09\u3067\u3059\u3002\n\u6B32\u3057\u3044\u5217\u3060\u3051\u3092\u6A5F\u68B0\u51E6\u7406\u3057\u305F\u3044\u3068\u304D\u306F --query \u3067\u9078\u3093\u3067\u304F\u3060\u3055\u3044\uFF08--query \u306F\u751F\u30C7\u30FC\u30BF\u306B\u5BFE\u3057\u3066\u8A55\u4FA1\u3055\u308C\u307E\u3059\uFF09\u3002\n\n"+
65
90
  LIST_PAGING_HELP,flags:[...LIST_FLAGS,{name:"--keyword",summary:"\u30B3\u30FC\u30C9\u30FB\u540D\u79F0\u306E\u90E8\u5206\u4E00\u81F4\u3067\u7D5E\u308A\u8FBC\u3080",takesValue:true,placeholder:"<\u8A9E>"},{name:"--status",summary:"\u30B9\u30C6\u30FC\u30BF\u30B9\u3067\u7D5E\u308A\u8FBC\u3080\uFF08\u4F8B: active\uFF09",takesValue:true,placeholder:"<\u72B6\u614B>"}],paging:listPaging,plan(input){if(input.args.length>0){throw new UsageError(`list \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.
66
91
  args.join(" ")}`,"twp project list help")}return{method:"GET",path:"/api/v2/projects",query:{limit:positiveInteger(input.flags,"--limit"),cursor:nonEmpty(input.flags,"--cursor"),keyword:nonEmpty(input.flags,"--keyword"),status:nonEmpty(input.flags,"--status")}}},summarize:body=>listItems(body).map(row=>pick(row,LIST_COLUMNS)),raw:body=>listItems(body)},{name:"get",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C81\u4EF6\u306E\u8A73\u7D30\u3092\u8868\u793A\u3059\u308B",usage:"twp project get <ID|\u30B3\u30FC\u30C9>",
67
92
  description:'ID\uFF08UUID / ULID\uFF09\u306A\u3089\u305D\u306E\u307E\u307E\u3001\u305D\u308C\u4EE5\u5916\u306F\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30B3\u30FC\u30C9\u3068\u3057\u3066\u89E3\u6C7A\u3057\u307E\u3059\uFF081\u5F80\u5FA9\uFF09\u3002\n\u30B3\u30FC\u30C9\u304C\u898B\u3064\u304B\u3089\u306A\u3044\u5834\u5408\u3001\u30B5\u30FC\u30D0\u306F\u300C\u5B58\u5728\u3057\u306A\u3044\u300D\u3068\u300C\u95B2\u89A7\u6A29\u9650\u304C\u7121\u3044\u300D\u3092\u610F\u56F3\u7684\u306B\u533A\u5225\u3057\u307E\u305B\u3093\u3002\n\u30B3\u30FC\u30C9\u304C literally "help" \u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u5F15\u304F\u3068\u304D\u3060\u3051 `twp project get -- help` \u3068\u66F8\u304D\u307E\u3059\n\uFF08\u5148\u982D\u306E help \u306F\u30D8\u30EB\u30D7\u8981\u6C42\u3068\u3057\u3066\u89E3\u91C8\u3055\u308C\u308B\u305F\u3081\uFF09\u3002',
@@ -76,6 +101,6 @@ usage:MANHOURS_USAGE,description:"GET /api/v2/projects/{id}/manhours\u3002\u7701
76
101
  MANHOUR_DESCRIPTION,flags:[MANHOUR_FROM_FLAG,MANHOUR_TO_FLAG],forbidden:body=>body?.error==="permission_denied"&&(body.error_description??"").includes("\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u7BA1\u7406\u8005")?"\u3053\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u5DE5\u6570\u3092\u8AAD\u3080\u6A29\u9650\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u7BA1\u7406\u8005\uFF08manager\uFF09\u304B\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u3060\u3051\u304C\u8AAD\u3081\u307E\u3059\u3002":
77
102
  void 0,prepare:(input,ctx)=>projectRefInput(input,ctx,"manhours"),plan(input){const projectId=requireResolved(input,"projectId");return{method:"GET",path:`/api/v2/projects/${encodeURIComponent(projectId)}/manhours`,query:manhourQuery(input,MANHOURS_USAGE)}},summarize:body=>manhourRows(body,"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u5DE5\u6570"),raw:body=>{manhourRows(body,"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u5DE5\u6570");return body},notes:body=>manhourNotes(body)},{name:"workload",summary:"\
78
103
  \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30E1\u30F3\u30D0\u30FC\u3054\u3068\u306E\u30BF\u30B9\u30AF\u4EF6\u6570\u30FB\u898B\u7A4D\u6642\u9593\u3092\u8868\u793A\u3059\u308B",usage:"twp project workload [<ID|\u30B3\u30FC\u30C9>]",description:"GET /api/v2/projects/{id}/analytics/workload\uFF08\u753B\u9762\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5206\u6790\u306E\u300C\u30E1\u30F3\u30D0\u30FC\u5225\u8CA0\u8377\u300D\uFF09\u3002\n\u7701\u7565\u3059\u308B\u3068\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306F\u65E2\u5B9A\u3067\u3059\u3002\u672A\u5B8C\u4E86\u306E\u30BF\u30B9\u30AF\u304C\u5BFE\u8C61\u3067\u3001\u62C5\u5F53\u8005\u306E\u7121\u3044\u30BF\u30B9\u30AF\u306F\u300C\uFF08\u672A\u5272\u308A\u5F53\u3066\uFF09\u300D\u306E\u884C\u306B\u5165\u308A\u307E\u3059\u3002\n--output table / text / tsv \u306E by_status \u306F\u300C\u30B9\u30C6\u30FC\u30BF\u30B9\u540D:\u4EF6\u6570\u300D\u3092\u7A7A\u767D\u533A\u5207\u308A\u3067\u4E26\u3079\u305F\u3082\u306E\u3067\u3059\uFF08\u5185\u8A33\u306F --output json\uFF09\u3002",
79
- flags:[],prepare:(input,ctx)=>projectRefInput(input,ctx,"workload"),plan(input){const projectId=requireResolved(input,"projectId");return{method:"GET",path:`/api/v2/projects/${encodeURIComponent(projectId)}/analytics/workload`}},summarize:body=>workloadDistributionRows(body),raw:body=>{workloadDistributionRows(body);return body},notes:body=>workloadDistributionNotes(body)}],subresources:[projectMemberResource]};var ASSIGNED_PROJECT_COLUMNS=["id","code","name","status","role","member_start_date",
80
- "member_end_date"];function assignedProjectItems(body){const list=isRecord(body)?body["list"]:void 0;if(!Array.isArray(list)){throw new ApiResponseError("\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u4E00\u89A7\u306E\u5FDC\u7B54\u306B list \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return list}async function projectRefInput(input,ctx,operation){const[ref,...rest]=input.args;if(rest.length>0){throw new UsageError(
81
- `${operation} \u304C\u53D7\u3051\u53D6\u308C\u308B\u5F15\u6570\u306F1\u3064\u3060\u3051\u3067\u3059: ${rest.join(" ")}`,`twp project ${operation} help`)}return withResolved(input,{projectId:await ctx.projectId(ref)})}export{projectDomain,ASSIGNED_PROJECT_COLUMNS,assignedProjectItems};
104
+ flags:[],prepare:(input,ctx)=>projectRefInput(input,ctx,"workload"),plan(input){const projectId=requireResolved(input,"projectId");return{method:"GET",path:`/api/v2/projects/${encodeURIComponent(projectId)}/analytics/workload`}},summarize:body=>workloadDistributionRows(body),raw:body=>{workloadDistributionRows(body);return body},notes:body=>workloadDistributionNotes(body)},...projectAnalysisOperations],subresources:[projectMemberResource,projectProcessResource]};var ASSIGNED_PROJECT_COLUMNS=["id",
105
+ "code","name","status","role","member_start_date","member_end_date"];function assignedProjectItems(body){const list=isRecord(body)?body["list"]:void 0;if(!Array.isArray(list)){throw new ApiResponseError("\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u4E00\u89A7\u306E\u5FDC\u7B54\u306B list \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return list}async function projectRefInput(input,ctx,operation){const[ref,...rest]=input.
106
+ args;if(rest.length>0){throw new UsageError(`${operation} \u304C\u53D7\u3051\u53D6\u308C\u308B\u5F15\u6570\u306F1\u3064\u3060\u3051\u3067\u3059: ${rest.join(" ")}`,`twp project ${operation} help`)}return withResolved(input,{projectId:await ctx.projectId(ref)})}export{projectDomain,ASSIGNED_PROJECT_COLUMNS,assignedProjectItems};
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{salesAdminForbidden}from"./chunk-BN26WHLS.js";import{featureLicenseGuidance,licenseForbidden}from"./chunk-GOZCJLRA.js";import{booleanText,boundedText}from"./chunk-XDHLO54T.js";import{SALES_ESTIMATE_FORMATS_PATH,SALES_ESTIMATE_NO_RULES_PATH,SALES_INVOICE_NO_RULES_PATH,SALES_PURCHASE_NO_RULES_PATH,SALES_ROUNDING_SETTING_PATH,isExactNumericId}from"./chunk-4F2ONF4P.js";import{repeatedValues}from"./chunk-F7K37QG6.js";import{LIST_PAGING_HELP,PAGE_NUMBER_LIST_FLAGS,
3
+ import{salesAdminForbidden}from"./chunk-AC6G5UPA.js";import{featureLicenseGuidance,licenseForbidden}from"./chunk-QYWYZG73.js";import{booleanText,boundedText}from"./chunk-XDHLO54T.js";import{SALES_ESTIMATE_FORMATS_PATH,SALES_ESTIMATE_NO_RULES_PATH,SALES_INVOICE_NO_RULES_PATH,SALES_PURCHASE_NO_RULES_PATH,SALES_ROUNDING_SETTING_PATH,isExactNumericId}from"./chunk-BS2ACFJA.js";import{repeatedValues}from"./chunk-F7K37QG6.js";import{LIST_PAGING_HELP,PAGE_NUMBER_LIST_FLAGS,
4
4
  nonEmpty,pageNumberPaging,pageNumberQuery,pageRangeNotes}from"./chunk-IOGMOXYF.js";import{requireResolved,withResolved}from"./chunk-LXIAOCUW.js";import{acknowledgement,isRecord,pick}from"./chunk-VTQAI52S.js";import{ApiResponseError,UsageError}from"./chunk-UFND7FBC.js";var INT_MAX=2147483647;var MEMBER_FORBIDDEN=licenseForbidden(featureLicenseGuidance("\u8CA9\u58F2\u7BA1\u7406"));function envelope(body,what){if(!isRecord(body)||body["result"]!==true)throw new ApiResponseError(`${what}\u306E\u5FDC\u7B54\u306E\u5F62\u304C\u60F3\u5B9A\u3068\u9055\u3044\u307E\u3059\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`);return body}function recordOf(body,what){const data=envelope(body,what)["data"];if(!isRecord(data)||typeof data["id"]!==
5
5
  "string")throw new ApiResponseError(`${what}\u306E\u5FDC\u7B54\u306B data.id \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`);return data}function serverMessage(body){const message=isRecord(body)?body["message"]:void 0;return typeof message==="string"&&message!==""?[message]:[]}function text(value){return typeof value==="string"||typeof value==="number"?String(value):""}function integerValue(flag,raw,min,max=INT_MAX){const trimmed=raw.
6
6
  trim();const value=/^\d+$/.test(trimmed)?Number(trimmed):Number.NaN;if(!Number.isSafeInteger(value)||value<min||value>max)throw new UsageError(`${flag} \u306F ${min} \u4EE5\u4E0A ${max} \u4EE5\u4E0B\u306E\u6574\u6570\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${raw}`);return value}var RULE_COLUMNS=["id","rule_name","prefix","digit_count","current_number","count_up_num","next_number","sort_order"];function nextNumber(rule,purchaseFormat){const current=rule["current_number"];const step=rule["\