@tocca-systems/twp-cli 0.112.0 → 0.114.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 (85) hide show
  1. package/CHANGELOG.public.md +16 -0
  2. package/README.md +45 -3
  3. package/dist/{agent-AYLGY3BB.js → agent-2BNIUX2U.js} +1 -1
  4. package/dist/{analysis-2537EFLH.js → analysis-IZJ7OGBS.js} +2 -2
  5. package/dist/{announcement-MIJPGHPT.js → announcement-6FE7ZS4Z.js} +1 -1
  6. package/dist/{api-command-5N3RMVHG.js → api-command-XRXZLIDF.js} +2 -2
  7. package/dist/{api-key-43ZSXW62.js → api-key-TRRJUKYE.js} +1 -1
  8. package/dist/{app-VVGTHBTP.js → app-IGRQAPNH.js} +2 -2
  9. package/dist/{attendance-correct-65ABGMLE.js → attendance-correct-2KTCXVJX.js} +1 -1
  10. package/dist/{attendance-lists-PAEWTI3V.js → attendance-lists-OIF5KYDQ.js} +1 -1
  11. package/dist/{backlog-2RACUD5K.js → backlog-MVI3DG5T.js} +1 -1
  12. package/dist/{budget-WZXVQWDV.js → budget-NA2SD5YD.js} +2 -2
  13. package/dist/{chunk-AJ3VYAJA.js → chunk-3MDBLYZF.js} +1 -1
  14. package/dist/{chunk-OB7UZWA3.js → chunk-4JF6M5X7.js} +1 -1
  15. package/dist/{chunk-K3GASXG6.js → chunk-56LHHEE2.js} +1 -1
  16. package/dist/{chunk-ODW2QKMP.js → chunk-6H5TPSXU.js} +1 -1
  17. package/dist/{chunk-MSQ4ZGMA.js → chunk-A7MM5WSC.js} +33 -30
  18. package/dist/{chunk-OFVBVG3B.js → chunk-B6VOXDMC.js} +1 -1
  19. package/dist/{chunk-WPYILRQL.js → chunk-CBQ6Y74J.js} +1 -1
  20. package/dist/{chunk-PMQDBTQH.js → chunk-DK77GMSP.js} +1 -1
  21. package/dist/{chunk-LOJ2CV36.js → chunk-G5YZ6JDI.js} +1 -1
  22. package/dist/{chunk-Y4YHARQA.js → chunk-HGM6DDYN.js} +1 -1
  23. package/dist/{chunk-NYQZVYU2.js → chunk-IKCXJBSF.js} +1 -1
  24. package/dist/{chunk-5ZTQEXXS.js → chunk-IOVZDBAD.js} +1 -1
  25. package/dist/{chunk-45JULJ2S.js → chunk-K2OFZL2O.js} +1 -1
  26. package/dist/{chunk-HO3PWICX.js → chunk-KPLC3UP7.js} +1 -1
  27. package/dist/{chunk-QXHS43NL.js → chunk-L4THNX4M.js} +1 -1
  28. package/dist/{chunk-O6AXI6DC.js → chunk-SEFV7AQB.js} +2 -2
  29. package/dist/{chunk-RIMZ26XK.js → chunk-VNQHZHV7.js} +5 -5
  30. package/dist/{chunk-XPZUORRN.js → chunk-VSVJQNIB.js} +1 -1
  31. package/dist/{chunk-656KBH24.js → chunk-VUHJJVA5.js} +1 -1
  32. package/dist/chunk-X7IBNJCH.js +13 -0
  33. package/dist/{chunk-BBIUAMTH.js → chunk-YAKWBS4M.js} +1 -1
  34. package/dist/{chunk-N3TO2KIZ.js → chunk-YPEEZXOX.js} +1 -1
  35. package/dist/cli.js +44 -6
  36. package/dist/{company-YI4OVANT.js → company-GYE4NSYY.js} +2 -2
  37. package/dist/content-FGCZHTIY.js +287 -0
  38. package/dist/{contract-RXVHSZJG.js → contract-J7IPD2IT.js} +1 -1
  39. package/dist/{corporate-AQ2LPSBG.js → corporate-2QRAGFZ4.js} +1 -1
  40. package/dist/{department-65REBZMP.js → department-PJOH2MXZ.js} +1 -1
  41. package/dist/{deposit-RLIULDRQ.js → deposit-BBDYJVOG.js} +1 -1
  42. package/dist/{domain-knowledge-OYT7POYP.js → domain-knowledge-G4NBJGWD.js} +1 -1
  43. package/dist/{estimate-7KT5IXH3.js → estimate-MDCQUAIA.js} +3 -3
  44. package/dist/{evaluation-44QSBVVH.js → evaluation-BVIVVRAX.js} +2 -2
  45. package/dist/{expense-23HWGLWY.js → expense-MQPJVLVB.js} +1 -1
  46. package/dist/{faq-CTOJOO6T.js → faq-MBW7SLC6.js} +2 -2
  47. package/dist/{fiscal-year-IUWEC5AA.js → fiscal-year-4GC3CLDB.js} +1 -1
  48. package/dist/{holiday-VWMRG4AH.js → holiday-GTYFPTAI.js} +2 -2
  49. package/dist/{inquiry-UG2E5ITT.js → inquiry-QECSQJWD.js} +1 -1
  50. package/dist/{invoice-LV2MJK4U.js → invoice-7PVEO7WG.js} +2 -2
  51. package/dist/{job-title-4B35R6ZE.js → job-title-T3EVIB5D.js} +1 -1
  52. package/dist/{knowledge-7VWTWBER.js → knowledge-5ZKO6N5X.js} +1 -1
  53. package/dist/{leave-KA3SGHYU.js → leave-WBZRI7ZO.js} +2 -2
  54. package/dist/{license-Q4RQ57DH.js → license-AMXSVUUX.js} +1 -1
  55. package/dist/{login-history-S6NKWDLL.js → login-history-ZF2QVJ4S.js} +1 -1
  56. package/dist/{media-ZOLX3RTZ.js → media-STTUSAOS.js} +2 -2
  57. package/dist/{notification-5UFR4FQN.js → notification-WVJ6V2UN.js} +1 -1
  58. package/dist/{oneshot-SXDITFOC.js → oneshot-BDKA2IGL.js} +1 -1
  59. package/dist/{position-XXLZAXVO.js → position-U56E7GX6.js} +1 -1
  60. package/dist/{project-GSHZGWIF.js → project-YAFIKH4Z.js} +2 -2
  61. package/dist/{prospect-7EBYOBRL.js → prospect-ROAE2JQ6.js} +1 -1
  62. package/dist/{purchase-FRJHJY4H.js → purchase-T3QS3EPW.js} +2 -2
  63. package/dist/{receivable-SVRIFJVZ.js → receivable-QGNV2FT7.js} +1 -1
  64. package/dist/{redmine-RC7KMVWT.js → redmine-ZJ2BQR6H.js} +1 -1
  65. package/dist/{registry-DQZRZNFP.js → registry-QNFSDORJ.js} +1 -1
  66. package/dist/{report-EY3KIRFT.js → report-TCFRJYL6.js} +1 -1
  67. package/dist/{run-KRBLCZRW.js → run-OZTTCFUR.js} +1 -1
  68. package/dist/{sales-ai-review-LZFRA6U4.js → sales-ai-review-2RBOUUYJ.js} +1 -1
  69. package/dist/{sales-master-DUR6YYIP.js → sales-master-SGT73CHC.js} +2 -2
  70. package/dist/{sales-numbering-HVMZBCNG.js → sales-numbering-GLWL3NOI.js} +1 -1
  71. package/dist/{search-CNOLTZTG.js → search-JP77X4JS.js} +1 -1
  72. package/dist/{segment-OSPMFLLA.js → segment-ZTWVP32K.js} +1 -1
  73. package/dist/{skill-JMK4VX3I.js → skill-HA3DBVJ3.js} +2 -2
  74. package/dist/{staffing-board-RVEMCX2L.js → staffing-board-PORZDQBF.js} +2 -2
  75. package/dist/{supplier-payment-JCQJZEEA.js → supplier-payment-FCIATDMY.js} +2 -2
  76. package/dist/{support-F2BLNOZC.js → support-ZSYBBO52.js} +1 -1
  77. package/dist/{task-FAUIKWDV.js → task-FLIYESKS.js} +3 -3
  78. package/dist/{user-OWL3YYLY.js → user-6ACQM4GJ.js} +3 -3
  79. package/dist/{user-contract-type-OEJML4L4.js → user-contract-type-I4KTAIZ3.js} +1 -1
  80. package/dist/{user-group-GEWEFEPQ.js → user-group-44DPCXVC.js} +1 -1
  81. package/dist/{worker-agent-P5GLTH3T.js → worker-agent-56PJ6YTR.js} +1 -1
  82. package/dist/{workflow-GHBK3DDT.js → workflow-ZWRPMTBR.js} +1 -1
  83. package/package.json +1 -1
  84. package/dist/chunk-HPORE33X.js +0 -13
  85. package/dist/content-T6VIKIOW.js +0 -66
@@ -11,6 +11,22 @@
11
11
  `CHANGELOG.md` に残してあります。顧客向けの履歴は public 公開以降を対象とします。
12
12
  -->
13
13
 
14
+ ## 0.114.0
15
+
16
+ `twp content publish` / `schedule` / `unpublish` / `archive` / `apply-workflow` / `preview-url` で、コンテンツの公開・公開予約・公開停止・アーカイブ・公開承認の申請・プレビュー URL の発行をコマンドから行えるようになりました。
17
+
18
+ `twp content category` / `twp content tag` で、コンテンツ管理のカテゴリ(フォーム定義・ワークフロー・プレビュー・公開通知)とタグを作成・変更・削除できるようになりました。
19
+
20
+ `twp content generate` と `twp content category design` で、画面の「AIで生成」「AIで設計」と同じ下書きをコマンドから作れるようになりました(保存は作成コマンドで行います)。
21
+
22
+ `twp content update` / `delete` が、読んだ後に入った他の人の更新を上書き・削除しないようになりました。
23
+
24
+ `twp content` の一部の操作で `--debug` を付けたとき、カテゴリの公開通知の認証ヘッダが出力に含まれていた問題を修正しました。
25
+
26
+ ## 0.113.0
27
+
28
+ `twp content create` / `update` / `delete` で、コンテンツ管理のコンテンツをコマンドから作成・更新・削除できるようになりました。
29
+
14
30
  ## 0.112.0
15
31
 
16
32
  `twp content` で、コンテンツ管理のコンテンツ・カテゴリ・タグの一覧と内容、変更履歴・差分・公開申請の状況をコマンドから確認できるようになりました。
package/README.md CHANGED
@@ -38,7 +38,7 @@ TWP(Tocca Working Platform)を、ターミナルから使うための CLI
38
38
  | **できる** | `twp search` による TWP 内のコンテンツ(タスク・Wiki・ノート・議事録・FAQ・サポート・ワークフロー等)の横断検索(通常検索と `--ai` の AI検索・種類/プロジェクト/タグ/状態/カテゴリで絞り込み)と、検索できる種類の一覧。閲覧権限の無いものは出ません |
39
39
  | **できる** | `twp announcement` による自分に届いているお知らせ(運営・組織)の一覧(未読・確認待ち・語で絞り込み)・本文と返信の表示・未読件数、既読化(1件ずつ・まとめて)・「確認しました」の記録・返信の一覧と投稿 |
40
40
  | **できる** | `twp faq` による社内FAQの一覧(語・カテゴリで絞り込み)・質問と回答の表示・質問文からの検索(根拠のFAQまで。回答文は作りません)・カテゴリの一覧と、登録・更新・削除・添付(添付ファイル欄・本文へ差し込む画像/PDF)・Notion データベースからの取り込み(`twp faq notion-import`)。公開対象に含まれるFAQだけが見え、書き込みは「社内FAQ管理」の管理者の権限が要ります |
41
- | **できる** | `twp content` によるコンテンツ管理(CMS)の読み取り: コンテンツの一覧(語・カテゴリ・状態・公開状態で絞り込み・列の並べ替え)・本文の表示(カテゴリのフォーム定義の項目名で並べる)・変更履歴・下書きと公開中の版の差分・公開申請(ワークフロー)の状況と、`twp content category` / `tag` によるカテゴリ(フォーム定義)とタグの参照。コンテンツ管理の権限が要ります。書き込み・公開はまだありません |
41
+ | **できる** | `twp content` によるコンテンツ管理(CMS)の読み取り: コンテンツの一覧(語・カテゴリ・状態・公開状態で絞り込み・列の並べ替え)・本文の表示(カテゴリのフォーム定義の項目名で並べる)・変更履歴・下書きと公開中の版の差分・公開申請(ワークフロー)の状況と、`twp content category` / `tag` によるカテゴリ(フォーム定義)とタグの参照、カテゴリ(フォーム定義・ワークフロー・プレビュー・公開Hook)とタグの作成・更新・削除と一覧プレビューの URL の発行(カテゴリの管理はテナント管理者)。`twp content create` / `update` / `delete` によるコンテンツの作成(カテゴリのフォーム定義から `--generate-cli-skeleton` でひな形を出し、必須・選択肢・型を送る前に検査。タグ・ファイル参照は名前/ID で指定)・書いた項目だけの更新(送る直前に版を読み直し、他の更新が先に入っていたら送らない)・削除。コンテンツ管理の権限が要ります。`twp content publish` / `schedule` / `unschedule` / `unpublish` / `archive` / `apply-workflow` / `preview-url` による公開操作(公開・公開停止・アーカイブは `--yes` が必要)。`twp content generate` / `twp content category design` で画面の「AIで生成」「AIで設計」と同じ下書きを作れます(保存はしません・AI クレジットを消費)。 |
42
42
  | **できる** | `twp agent session` によるコンテナエージェント(リポジトリで作業する AI セッション)の起動・追加の指示・再開・停止・削除と、状態・作業ブランチ・PR・会話・実行ログ・変更ファイル(差分)の参照、`twp agent repository` による起動できるリポジトリとブランチの一覧、`twp agent schedule` による定期実行の定義の作成・更新・有効化/無効化・削除・今すぐ実行と実行履歴の参照。`--wait` で作業が止まるまで待ち、最後のアシスタント発言・作業ブランチ・PR URL を出します。起動・指示・再開は AI クレジットを消費します |
43
43
  | **できる** | `twp estimate` / `twp invoice` による販売管理の見積・請求の一覧(語・ステータス・取引先・プロジェクト・担当者・日付・回収状況で絞り込み)と詳細。販売管理・顧客管理の権限が要ります |
44
44
  | **できる** | `twp estimate` による見積の作成・更新・削除・社内共有メモ・既存の請求の紐づけ・関連入金・部署按分・案件書類(注文書・個別契約書など)の登録・版の差替え・ダウンロードと、注文書からの注文書番号の読み取り・見積書/注文書/注文請書の PDF の書き出し。販売管理・顧客管理の権限が要ります |
@@ -1309,7 +1309,7 @@ twp faq attachment embed --file <パス> # 回答本文へ差し込む画
1309
1309
  - `--targets-file` は公開対象の JSON 配列です(`get --output json` の `visibility_targets` をそのまま使えます)
1310
1310
  - ヘルプは `twp faq help`
1311
1311
 
1312
- ### コンテンツ管理(CMS)を読む
1312
+ ### コンテンツ管理(CMS)を読む・公開する
1313
1313
 
1314
1314
  ```
1315
1315
  twp content list [--keyword <語>] [--category <カテゴリ>] [--status <状態>] [--publish-status <公開状態>] [--sort <列[:asc|desc]>,…] [--all]
@@ -1324,6 +1324,13 @@ twp content tag free
1324
1324
  twp content tag field <カテゴリ> <項目名>
1325
1325
  twp content tag search <語>
1326
1326
  twp content tag get <タグ>
1327
+ twp content publish <コンテンツID> --yes
1328
+ twp content schedule <コンテンツID> --at "2026-11-01 09:00" # 時差を省くと JST
1329
+ twp content unschedule <コンテンツID>
1330
+ twp content unpublish <コンテンツID> --yes
1331
+ twp content archive <コンテンツID> --yes
1332
+ twp content apply-workflow <コンテンツID> [--comment <コメント>] [--description <説明>]
1333
+ twp content preview-url <コンテンツID> --no-redact # URL の preview_token は既定で伏字
1327
1334
  ```
1328
1335
 
1329
1336
  - 画面の左メニュー「コンテンツ管理」と同じ API を読みます。テナントのライセンスと「コンテンツ管理」の機能権限が無いと 403(終了コード 3)で、権限が無いことを案内します
@@ -1331,9 +1338,44 @@ twp content tag get <タグ>
1331
1338
  - `get --output text` は本文の各項目をカテゴリのフォーム定義の項目名・順序で出します(定義に無い値も内部名のまま末尾に出します)
1332
1339
  - `--status` は draft / pending_review / approved / rejected / archived / published、`--publish-status` は unpublished / published / scheduled(画面の表示名でも指定できます)。`--sort` は title / category_name / publish_status / published_at / created_at / updated_at を最大3列
1333
1340
  - `--output json` は API の応答の中身そのもの、table / tsv / text は要約です。読み取りだけなので `twp -p` の会話中でも確認なしで呼べます
1334
- - 作成・更新・公開・カテゴリ/タグの管理・AI 生成はまだありません(`twp api` で到達できます)
1341
+ - 公開操作は送る前にコンテンツの状態を読み、サーバに断られると分かっているもの(承認待ち・作成者でも管理者でもない・公開中でないものの公開停止)は送らずに理由を出して止めます(終了コード 2)。ワークフロー(公開承認)が必要なカテゴリでの直接の公開・予約は、画面には出ない操作なので警告して `--yes` を求めます(承認を経るなら `apply-workflow`)。承認は `twp workflow` で行います
1342
+ - 送って断られたとき(アーカイブとの競合の 409 を含む)は、サーバの文面のあとにいまの状態(状態・公開・予約・ワークフロー要否)を添えます(終了コード 3)
1335
1343
  - ヘルプは `twp content help`
1336
1344
 
1345
+ ### コンテンツ管理のカテゴリ・タグを管理する
1346
+
1347
+ ```
1348
+ twp content category create --generate-cli-skeleton > category.json # ひな形
1349
+ twp content category create --content-file category.json
1350
+ twp content category update <カテゴリ> --generate-cli-skeleton > category.json
1351
+ twp content category update <カテゴリ> --content-file <パス> [--replace-fields]
1352
+ twp content category delete <カテゴリ> --yes
1353
+ twp content category preview-url <カテゴリ> [--no-redact]
1354
+ twp content tag create --value <値> --display-name <表示名> [--scope <スコープ>] [--color <色>] [--sort <整数>] [--inactive]
1355
+ twp content tag update <タグ> [--value <値>] [--display-name <表示名>] [--scope <スコープ>] [--color <色>] [--sort <整数>] [--active | --inactive]
1356
+ twp content tag delete <タグ> --yes
1357
+ ```
1358
+
1359
+ - カテゴリの内容(`--content-file`)は画面の入力項目と同じキーの JSON です(`code` / `name` / `description` / `schema.form_fields` / `sort` / `is_active` / `workflow_enabled` / `workflow_settings` / `preview_settings` / `publish_hook_settings`)。知らないキーは送る前に止めます。カテゴリの作成・変更・削除・プレビュー URL の発行はテナント管理者だけができます
1360
+ - `update` は書いたキーだけを送ります。**`schema.form_fields` は今のフォーム定義へ `name` で差し込みます**(同じ `name` の項目は書いたキーだけ変わり、新しい `name` は末尾に足され、書かなかった項目は残ります)。項目を消す・並べ替えるときは `--replace-fields` で書いた配列に丸ごと置き換えます。`workflow_settings` / `preview_settings` / `publish_hook_settings` は送ると丸ごと置き換わります。空の値(`null` / `{}`)はサーバが黙って無視するので送る前に止めます(無効にするなら `enabled: false`)。`form_fields: null` も止めます
1361
+ - **公開Hook のヘッダ値(`publish_hook_settings.headers[].value`)は秘密を含みうるので、`get` / `list` / ひな形 / 作成・更新の応答 / `--dry-run` のどれでも伏字にします**(`--output json` / `--query` でも同じ・キー名は残します)。伏字のまま送り返すと送る前に止めます——ヘッダを変えないなら `publish_hook_settings` ごとファイルから消してください
1362
+ - サーバはコード・タグ値・表示名の重複、コンテンツが残るカテゴリの削除、システムタグの削除を、理由を伏せた 400(「サーバーエラーが発生しました」)で断ります。CLI はそのとき一覧・件数・タグを読んで理由を言います(終了コード 3)。自由タグ(`free`)は値をテナントの全タグと、表示名を自由タグと重ねられません(それ以外は同じスコープの中で)
1363
+ - **コンテンツに付いているタグでもサーバは削除を断りません**(付いていたコンテンツからは参照先が消えます)。カテゴリはコンテンツが1件でも残っていれば断られます
1364
+ - `preview-url` の URL に入るトークンは出力の既定の伏字化で伏せます。開くために取り出すときは `--no-redact` を付けます(URL を知っている人は期限内に未公開の内容を見られます)
1365
+
1366
+ ### コンテンツ管理(CMS)の AI 生成
1367
+
1368
+ ```
1369
+ twp content generate --category <カテゴリ> --prompt-file <パス> [--title <タイトル>] --yes
1370
+ twp content category design --prompt-file <パス> [--code <コード>] [--name <名前>] --yes
1371
+ ```
1372
+
1373
+ - 画面の「AIで生成」「AIで設計」と同じ API です。**保存はしません**。出力(`--output json`)は `generate` が `{title, content}`、`category design` が `{code, name, schema: {form_fields}}` で、それぞれ `twp content create --category <カテゴリ> --content-file` / `twp content category create --content-file` にそのまま渡せます
1374
+ - タイトル・コード・名前は AI が作らないので `--title` / `--code` / `--name` で入れます(省略すると空のまま出します)
1375
+ - `generate` は AI がフォーム定義に無い項目を返したら出力から落とし、項目名を stderr に出します
1376
+ - AI クレジットを消費するため `--yes` が要ります(`--dry-run` は送るリクエストを表示するだけで消費しません)。指示は `--prompt <指示>` でも渡せます(2000字まで・`--prompt-file -` で標準入力)
1377
+ - クレジット不足(402)は終了コード 3、回数制限(429)は 4 で、どちらも理由を stderr に出します(終了コード 3 は他の 4xx、4 は 5xx・通信断と共有なので、理由の区別は stderr の文面で行います)。自動では打ち直しません
1378
+
1337
1379
  ### Notion から社内FAQを取り込む
1338
1380
 
1339
1381
  ```
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{SCHEDULE_HELP,parseSchedule}from"./chunk-LOJ2CV36.js";import"./chunk-WVCEKC7V.js";import{charCount,readBody}from"./chunk-HEH3PUW2.js";import"./chunk-W4NLJ2YK.js";import"./chunk-BD7O73GK.js";import"./chunk-VGT2EGH6.js";import{AGENT_REPOSITORIES_PATH,AGENT_SCHEDULES_PATH,AGENT_SESSIONS_PATH}from"./chunk-MSQ4ZGMA.js";import{isSafePathSegment}from"./chunk-HVZUXLQ4.js";import{ApiError}from"./chunk-JA5A6UJ2.js";import"./chunk-MMVXE2CJ.js";
3
+ import{SCHEDULE_HELP,parseSchedule}from"./chunk-G5YZ6JDI.js";import"./chunk-WVCEKC7V.js";import{charCount,readBody}from"./chunk-HEH3PUW2.js";import"./chunk-W4NLJ2YK.js";import"./chunk-BD7O73GK.js";import"./chunk-VGT2EGH6.js";import{AGENT_REPOSITORIES_PATH,AGENT_SCHEDULES_PATH,AGENT_SESSIONS_PATH}from"./chunk-A7MM5WSC.js";import{isSafePathSegment}from"./chunk-HVZUXLQ4.js";import{ApiError}from"./chunk-JA5A6UJ2.js";import"./chunk-MMVXE2CJ.js";
4
4
  import"./chunk-SBRTBKEZ.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-MI6HVYR2.js";import{requireResolved,withResolved}from"./chunk-PS5QFKHB.js";import{isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiRejectedError,ApiResponseError,NetworkError,UsageError,WaitTimeoutError}from"./chunk-VFPY2A23.js";import{NotLoggedInError,SessionExpiredError}from"./chunk-XNLIEUAW.js";import"./chunk-J7QYPKVK.js";import"./chunk-EDF4U5BT.js";
5
5
  import"./chunk-RZVI6PMW.js";import"./chunk-OKATZ4SN.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var LABEL="\u5B9A\u671F\u5B9F\u884C";var LIST_COLUMNS=["schedule_id","name","enabled","schedule","repository_full_name","next_run_at","last_run_at","disabled_reason","owner_user_id"];var GET_COLUMNS=["schedule_id","name","enabled","schedule","repository_full_name","base_branch","ai_provider","ai_model","next_run_at","last_run_at","last_session_id","consecutive_failures","disabled_reason","owner_user_id","can_edit","can_disable","created_at","updated_at"];var RUN_COLUMNS=["run_id","created_at","t\
6
6
  rigger","result","skip_reason","session_id","pr_url","error_message"];var NAME_MAX_CHARS=100;var INSTRUCTION_MAX_CHARS=1e4;var RUNS_MAX_LIMIT=100;var FORBIDDEN="AI\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u6A5F\u80FD\u306E\u30E9\u30A4\u30BB\u30F3\u30B9\uFF08agent\uFF09\u304C\u3042\u306A\u305F\u306E\u30A2\u30AB\u30A6\u30F3\u30C8\u306B\u5272\u308A\u5F53\u3066\u3089\u308C\u3066\u3044\u306A\u3044\u304B\u3001\u4ED6\u30E6\u30FC\u30B6\u30FC\u306E\u5B9A\u671F\u5B9F\u884C\u3092\u5909\u66F4\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u307E\u3059\u3002\u7DE8\u96C6\u30FB\u524A\u9664\u30FB\u6709\u52B9\u5316\u30FB\u4ECA\u3059\u3050\u5B9F\u884C\u306F\u30AA\u30FC\u30CA\u30FC\u672C\u4EBA\u3060\u3051\u3001\u7121\u52B9\u5316\u306F\u30AA\u30FC\u30CA\u30FC\u3068\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u7BA1\u7406\u8005\u304C\u3067\u304D\u307E\u3059\u3002";
@@ -1,5 +1,5 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{DEPARTMENT_FLAG,FROM_FLAG,MANHOUR_DESCRIPTION,MANHOUR_FROM_FLAG,MANHOUR_TO_FLAG,MONTH_FLAG,TO_FLAG,USER_FLAG,analysisDomain,analysisForbidden,currentMonth,dataOf,levelGuidance,listIn,manhourNotes,manhourQuery,manhourRows,monthColumns,monthRange,monthsBetween,noArgs,periodNote,profitRows,rangeNotes,recordOf,resolveFilters,resolvedOrUndefined,responseMonths,staffKpiRows,workloadDistributionNotes,workloadDistributionRows}from"./chunk-QXHS43NL.js";import"./chunk-HO3PWICX.js";import"./chunk-UVCJXHWN.js";
4
- import"./chunk-5ZTQEXXS.js";import"./chunk-EXT4AIDF.js";import"./chunk-JJSBBWJ5.js";import"./chunk-HEH3PUW2.js";import"./chunk-W4NLJ2YK.js";import"./chunk-BD7O73GK.js";import"./chunk-VGT2EGH6.js";import"./chunk-MSQ4ZGMA.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-MMVXE2CJ.js";import"./chunk-SBRTBKEZ.js";import"./chunk-MI6HVYR2.js";import"./chunk-PS5QFKHB.js";import"./chunk-3ZRMMBP5.js";
3
+ import{DEPARTMENT_FLAG,FROM_FLAG,MANHOUR_DESCRIPTION,MANHOUR_FROM_FLAG,MANHOUR_TO_FLAG,MONTH_FLAG,TO_FLAG,USER_FLAG,analysisDomain,analysisForbidden,currentMonth,dataOf,levelGuidance,listIn,manhourNotes,manhourQuery,manhourRows,monthColumns,monthRange,monthsBetween,noArgs,periodNote,profitRows,rangeNotes,recordOf,resolveFilters,resolvedOrUndefined,responseMonths,staffKpiRows,workloadDistributionNotes,workloadDistributionRows}from"./chunk-L4THNX4M.js";import"./chunk-KPLC3UP7.js";import"./chunk-UVCJXHWN.js";
4
+ import"./chunk-IOVZDBAD.js";import"./chunk-EXT4AIDF.js";import"./chunk-JJSBBWJ5.js";import"./chunk-HEH3PUW2.js";import"./chunk-W4NLJ2YK.js";import"./chunk-BD7O73GK.js";import"./chunk-VGT2EGH6.js";import"./chunk-A7MM5WSC.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-MMVXE2CJ.js";import"./chunk-SBRTBKEZ.js";import"./chunk-MI6HVYR2.js";import"./chunk-PS5QFKHB.js";import"./chunk-3ZRMMBP5.js";
5
5
  import"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-EDF4U5BT.js";import"./chunk-RZVI6PMW.js";import"./chunk-OKATZ4SN.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";export{DEPARTMENT_FLAG,FROM_FLAG,MANHOUR_DESCRIPTION,MANHOUR_FROM_FLAG,MANHOUR_TO_FLAG,MONTH_FLAG,TO_FLAG,USER_FLAG,analysisDomain,analysisForbidden,currentMonth,dataOf,levelGuidance,listIn,manhourNotes,manhourQuery,manhourRows,monthColumns,monthRange,monthsBetween,noArgs,periodNote,profitRows,rangeNotes,recordOf,resolveFilters,resolvedOrUndefined,responseMonths,staffKpiRows,workloadDistributionNotes,workloadDistributionRows};
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{composeDocument,htmlToText,metaLine}from"./chunk-62GRAKUD.js";import{boundedText}from"./chunk-JJSBBWJ5.js";import{readBody}from"./chunk-HEH3PUW2.js";import"./chunk-W4NLJ2YK.js";import"./chunk-BD7O73GK.js";import{ANNOUNCEMENTS_PATH}from"./chunk-MSQ4ZGMA.js";import{isSafePathSegment}from"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-MMVXE2CJ.js";import"./chunk-SBRTBKEZ.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,
3
+ import{composeDocument,htmlToText,metaLine}from"./chunk-62GRAKUD.js";import{boundedText}from"./chunk-JJSBBWJ5.js";import{readBody}from"./chunk-HEH3PUW2.js";import"./chunk-W4NLJ2YK.js";import"./chunk-BD7O73GK.js";import{ANNOUNCEMENTS_PATH}from"./chunk-A7MM5WSC.js";import{isSafePathSegment}from"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-MMVXE2CJ.js";import"./chunk-SBRTBKEZ.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,
4
4
  positiveInteger}from"./chunk-MI6HVYR2.js";import{requireResolved,withResolved}from"./chunk-PS5QFKHB.js";import{isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-EDF4U5BT.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var LABEL="\u304A\u77E5\u3089\u305B";var LIST_COLUMNS=["id","publish_start_at","sender_name","category_name","title","is_read","require_confirmation","is_confirmed"];var UNCONFIRMED_COLUMNS=["id","publish_start_at","publish_end_at","importance","title"];var GET_COLUMNS=["id","title","sender_name","category_name","importance_name","publish_start_at","publish_end_at","is_organization","is_read","require_confirmation","is_confirmed","allow_replies","link_url"];var REPLY_COLUMNS=["id","created_at","\
5
5
  user_name","is_mine","content"];var REPLY_MAX_CHARS=2e3;function noArgs(input,op){if(input.args.length>0){throw new UsageError(`${op} \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,`twp announcement ${op} help`)}}function checkId(raw,help){const id=raw.trim();if(id==="")throw new UsageError("\u304A\u77E5\u3089\u305B\u306E ID \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",help);if(!isSafePathSegment(id)){throw new UsageError(`\u304A\u77E5\u3089\u305B\u306E ID \u3068\u3057\u3066\u4F7F\u3048\u306A\u3044\
6
6
  \u5024\u3067\u3059: ${id}`,"\u304A\u77E5\u3089\u305B\u306E ID \u306F twp announcement list \u306E id \u5217\u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002")}return id}function announcementId(input,op){const help=`twp announcement ${op} help`;const[raw,...rest]=input.args;if(rest.length>0)throw new UsageError(`${op} \u304C\u53D7\u3051\u53D6\u308C\u308B\u304A\u77E5\u3089\u305B ID \u306F1\u3064\u3060\u3051\u3067\u3059: ${rest.join(" ")}`,help);return checkId(raw??"",help)}function announcementIds(input){
@@ -1,7 +1,7 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{CommandModelMissingError,MAX_REPORTED_VIOLATIONS,loadCommandModelDomain,loadCommandModelRoutes,validateBody,validateQuery}from"./chunk-CDAU3M7F.js";import{exitCodeFor,fetchAllPages,reportError}from"./chunk-RIMZ26XK.js";import"./chunk-HPORE33X.js";import"./chunk-Q3B65OFC.js";import{evaluateQuery}from"./chunk-GFLGXGWE.js";import{renderOutput}from"./chunk-P4QSPSOQ.js";import{describeWaitResult,parseWaitOptions,waitUntilTerminal}from"./chunk-WVCEKC7V.js";
4
- import{readBody}from"./chunk-HEH3PUW2.js";import{ALLOW_REDACTED_FLAG,NO_REDACT_FLAG,NO_REDACT_NOTICE}from"./chunk-W4NLJ2YK.js";import{redactSecretValues,redactSecrets,withDebug}from"./chunk-BD7O73GK.js";import{parseOperationArgs,repeatedValues}from"./chunk-VGT2EGH6.js";import"./chunk-MSQ4ZGMA.js";import"./chunk-HVZUXLQ4.js";import{ApiError,TwpApiClient,appendQuery}from"./chunk-JA5A6UJ2.js";import"./chunk-MMVXE2CJ.js";import"./chunk-SBRTBKEZ.js";
3
+ import{CommandModelMissingError,MAX_REPORTED_VIOLATIONS,loadCommandModelDomain,loadCommandModelRoutes,validateBody,validateQuery}from"./chunk-CDAU3M7F.js";import{exitCodeFor,fetchAllPages,reportError}from"./chunk-VNQHZHV7.js";import"./chunk-X7IBNJCH.js";import{evaluateQuery}from"./chunk-GFLGXGWE.js";import{renderOutput}from"./chunk-P4QSPSOQ.js";import"./chunk-Q3B65OFC.js";import{describeWaitResult,parseWaitOptions,waitUntilTerminal}from"./chunk-WVCEKC7V.js";
4
+ import{readBody}from"./chunk-HEH3PUW2.js";import{ALLOW_REDACTED_FLAG,NO_REDACT_FLAG,NO_REDACT_NOTICE}from"./chunk-W4NLJ2YK.js";import{redactSecretValues,redactSecrets,withDebug}from"./chunk-BD7O73GK.js";import{parseOperationArgs,repeatedValues}from"./chunk-VGT2EGH6.js";import"./chunk-A7MM5WSC.js";import"./chunk-HVZUXLQ4.js";import{ApiError,TwpApiClient,appendQuery}from"./chunk-JA5A6UJ2.js";import"./chunk-MMVXE2CJ.js";import"./chunk-SBRTBKEZ.js";
5
5
  import{DEFAULT_MAX_ITEMS,DEFAULT_MAX_PAGES,envelopePaging,isPageNumberEnvelope,pageRangeNotes,positiveInteger,readEnvelopeCursor,readPageNumberCursor,shellQuote}from"./chunk-MI6HVYR2.js";import"./chunk-3ZRMMBP5.js";import{ApiResponseError,EXIT_OK,EXIT_WAIT_TIMEOUT,NetworkError,UsageError}from"./chunk-VFPY2A23.js";import{GLOBAL_OPTIONS_HELP}from"./chunk-KIZIRVW6.js";import{AuthSession,NotLoggedInError,SessionExpiredError,loadCredentials}from"./chunk-XNLIEUAW.js";import{
6
6
  httpFetch}from"./chunk-J7QYPKVK.js";import{effectiveApiUrl,resolveConfiguredOutput,resolveProfile}from"./chunk-EDF4U5BT.js";import"./chunk-RZVI6PMW.js";import{HELP_TOKEN}from"./chunk-AAABT3AX.js";import"./chunk-OKATZ4SN.js";import{OUTPUT_FORMATS,resolveOutputFormat}from"./chunk-RKBUJKI5.js";import"./chunk-UREA4ZIG.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var MIN_SEGMENT_CHARS=3;var parsedCache=new WeakMap;function splitSegments(path){return path.split("/").filter(segment=>segment!=="")}function parseRoutes(routes){const cached=parsedCache.get(routes);if(cached!==void 0)return cached;const parsed=[];for(const[key,domain]of Object.entries(routes.routes)){const space=key.indexOf(" ");if(space<=0)continue;const template=key.slice(space+1);parsed.push({method:key.slice(0,space),template,domain,segments:splitSegments(template).map(segment=>/^\{[^/{}]+\}$/.
7
7
  test(segment)?null:segment)})}parsedCache.set(routes,parsed);return parsed}function matches(route,segments){if(route.segments.length!==segments.length)return false;return route.segments.every((literal,i)=>literal===null||literal===segments[i])}function compareSpecificity(a,b){const literals=route=>route.segments.filter(segment=>segment!==null).length;const diff=literals(b)-literals(a);if(diff!==0)return diff;for(let i=0;i<a.segments.length;i+=1){const aLiteral=a.segments[i]!==null;const bLiteral=b.
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{repeatedValues}from"./chunk-VGT2EGH6.js";import{API_KEYS_PATH}from"./chunk-MSQ4ZGMA.js";import{isSafePathSegment}from"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-MMVXE2CJ.js";import"./chunk-SBRTBKEZ.js";import{nonEmpty}from"./chunk-MI6HVYR2.js";import{requireResolved,singleRef,withResolved}from"./chunk-PS5QFKHB.js";import{isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";
3
+ import{repeatedValues}from"./chunk-VGT2EGH6.js";import{API_KEYS_PATH}from"./chunk-A7MM5WSC.js";import{isSafePathSegment}from"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-MMVXE2CJ.js";import"./chunk-SBRTBKEZ.js";import{nonEmpty}from"./chunk-MI6HVYR2.js";import{requireResolved,singleRef,withResolved}from"./chunk-PS5QFKHB.js";import{isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";
4
4
  import"./chunk-J7QYPKVK.js";import"./chunk-EDF4U5BT.js";import"./chunk-RZVI6PMW.js";import"./chunk-OKATZ4SN.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";import fs from"fs";import path from"path";var LABEL="API \u30AD\u30FC";var FORBIDDEN="\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u6A29\u9650\u304C\u5FC5\u8981\u3067\u3059\u3002\u30C6\u30CA\u30F3\u30C8 API \u30AD\u30FC\u306F\u7D44\u7E54\u7BA1\u7406\u8005\u3060\u3051\u304C\u6271\u3048\u307E\u3059";var LIST_COLUMNS=["id","name","key_prefix","status","permissions","expires_at","last_used_at","created_at"];var GET_COLUMNS=["id","name","description","key_prefix","status","permissions","expires_at","last_used_at","created_at","updated_at"];var PERMISSION_COLUMNS=[
5
5
  "value","label","category","description"];var STATUS_VALUES=["active","inactive"];var REF_HELP="<\u30AD\u30FC> \u306F API \u30AD\u30FC\u306E ID\u30FB\u540D\u524D\u30FB\u30AD\u30FC\u306E\u5148\u982D8\u6587\u5B57\uFF08key_prefix\u3002\u4F8B twpk_AbC\uFF09\u3067\u6307\u5B9A\u3067\u304D\u307E\u3059\u3002\nID \u4EE5\u5916\u306F\u4E00\u89A7\u3068\u7167\u5408\u3057\u307E\u3059\uFF08\u30AD\u30E3\u30C3\u30B7\u30E5\u3057\u306A\u3044\uFF09\u3002\u540D\u524D\u304C\u8907\u6570\u306B\u4E00\u81F4\u3059\u308C\u3070\u5019\u88DC\u3092\u51FA\u3057\u3066\u6B62\u307E\u308A\u307E\u3059\u3002";
6
6
  var CREATOR_NOTE="\u4F5C\u6210\u8005\u306F\u30B5\u30FC\u30D0\u306E\u5FDC\u7B54\u306B\u542B\u307E\u308C\u306A\u3044\u305F\u3081\u8868\u793A\u3067\u304D\u307E\u305B\u3093\u3002last_used_at \u306F\u5916\u90E8 API \u3067\u306E\u5229\u7528\u3067\u306F\u66F4\u65B0\u3055\u308C\u307E\u305B\u3093\uFF08\u30AD\u30FC\u3092\u4F7F\u3063\u3066\u3082 null \u306E\u307E\u307E\uFF09\u3002\u68DA\u5378\u3057\u306E\u6839\u62E0\u306B\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002";var PROPAGATION_NOTE="\u5916\u90E8 API \u306F\
@@ -1,7 +1,7 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
3
  import{RESIDENT_TOKEN_CAP,activateModeFiles,activatePermissionSettings,buildResidentSet,buildSystemPrompt,createAuditLogger,createTwpToolkit,currentBranch,describeAuditLog,describeToolCatalog,displayCwd,executeTool,findProjectTwpSubdir,localTools,lstatOrNull,parseFrontMatter,parseRule,persistProjectAllow,projectPermissionsPath,projectRootFor,readFileTool,residentInputs,resolveGitExecutable,runTurn,secretReason}from"./chunk-6R6CY6KM.js";import"./chunk-CDAU3M7F.js";import{buildDiffLines,
4
- diffStat}from"./chunk-VRBI2NPI.js";import{require_fuzzysort}from"./chunk-DIMZRTLE.js";import"./chunk-N2UVRM3Z.js";import"./chunk-BD7O73GK.js";import"./chunk-MSQ4ZGMA.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-MMVXE2CJ.js";import"./chunk-SBRTBKEZ.js";import"./chunk-VFPY2A23.js";import{RelayError,builtinCatalog,classifyModelSwitch,createRuntime,formatContextRemaining,loadCachedCatalog,modelLabel,pickModel,specFor,
4
+ diffStat}from"./chunk-VRBI2NPI.js";import{require_fuzzysort}from"./chunk-DIMZRTLE.js";import"./chunk-N2UVRM3Z.js";import"./chunk-BD7O73GK.js";import"./chunk-A7MM5WSC.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-MMVXE2CJ.js";import"./chunk-SBRTBKEZ.js";import"./chunk-VFPY2A23.js";import{RelayError,builtinCatalog,classifyModelSwitch,createRuntime,formatContextRemaining,loadCachedCatalog,modelLabel,pickModel,specFor,
5
5
  toModelInfos}from"./chunk-65SBCDVQ.js";import"./chunk-D233KKXW.js";import"./chunk-PMOUHEJQ.js";import"./chunk-XNLIEUAW.js";import{proxyDiagnostics}from"./chunk-J7QYPKVK.js";import{checkMinSupportedVersion,isBelowMinSupported,minSupportedBlockMessage}from"./chunk-DXXFUNYN.js";import"./chunk-EDF4U5BT.js";import{configReadDirs,twpHomeDir}from"./chunk-RZVI6PMW.js";import{parseArgv}from"./chunk-YNZZRPI3.js";import{applyPermissionMode,checkPermission,
6
6
  describePermissionMode,getMode,isModeId,modeSource,nextMode}from"./chunk-2LOT54OO.js";import"./chunk-NJL3H2BB.js";import"./chunk-AAABT3AX.js";import"./chunk-AH4KHEAC.js";import{formatUnknownArgs}from"./chunk-OKATZ4SN.js";import{isFullWidth,isWide,stringWidth,stripAnsi}from"./chunk-UREA4ZIG.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import{__commonJS,__export,__require,__toESM}from"./chunk-VSJBJXZO.js";var require_react_production=__commonJS({"node_modules/react/cjs/react.production.js"(exports){"use strict";var REACT_ELEMENT_TYPE=Symbol.for("react.transitional.element");var REACT_PORTAL_TYPE=Symbol.for("react.portal");var REACT_FRAGMENT_TYPE=Symbol.for("react.fragment");var REACT_STRICT_MODE_TYPE=Symbol.for("react.strict_mode");var REACT_PROFILER_TYPE=Symbol.for("react.profiler");var REACT_CONSUMER_TYPE=Symbol.for("react.consumer");var REACT_CONTEXT_TYPE=Symbol.for("react.context");var REACT_FORWARD_REF_TYPE=Symbol.
7
7
  for("react.forward_ref");var REACT_SUSPENSE_TYPE=Symbol.for("react.suspense");var REACT_MEMO_TYPE=Symbol.for("react.memo");var REACT_LAZY_TYPE=Symbol.for("react.lazy");var REACT_ACTIVITY_TYPE=Symbol.for("react.activity");var REACT_VIEW_TRANSITION_TYPE=Symbol.for("react.view_transition");var MAYBE_ITERATOR_SYMBOL=Symbol.iterator;function getIteratorFn(maybeIterable){if(null===maybeIterable||"object"!==typeof maybeIterable)return null;maybeIterable=MAYBE_ITERATOR_SYMBOL&&maybeIterable[MAYBE_ITERATOR_SYMBOL]||
@@ -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: ${formatUnknownArgs(parsed.unknown)}
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-KRBLCZRW.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-OZTTCFUR.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-HO3PWICX.js";import"./chunk-UVCJXHWN.js";import"./chunk-5ZTQEXXS.js";import{dateFlag,monthFlag}from"./chunk-EXT4AIDF.js";import"./chunk-JJSBBWJ5.js";import"./chunk-HEH3PUW2.js";import"./chunk-W4NLJ2YK.js";import"./chunk-BD7O73GK.js";import"./chunk-VGT2EGH6.js";import"./chunk-MSQ4ZGMA.js";import{isSafePathSegment}from"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";
3
+ import{PUNCH_TYPES,assertMonthOpen,attendanceDomain}from"./chunk-KPLC3UP7.js";import"./chunk-UVCJXHWN.js";import"./chunk-IOVZDBAD.js";import{dateFlag,monthFlag}from"./chunk-EXT4AIDF.js";import"./chunk-JJSBBWJ5.js";import"./chunk-HEH3PUW2.js";import"./chunk-W4NLJ2YK.js";import"./chunk-BD7O73GK.js";import"./chunk-VGT2EGH6.js";import"./chunk-A7MM5WSC.js";import{isSafePathSegment}from"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";
4
4
  import"./chunk-MMVXE2CJ.js";import"./chunk-SBRTBKEZ.js";import"./chunk-MI6HVYR2.js";import{requireResolved,withResolved}from"./chunk-PS5QFKHB.js";import{isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiRejectedError,ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-EDF4U5BT.js";import"./chunk-RZVI6PMW.js";import"./chunk-OKATZ4SN.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var CREATE_USAGE="twp attendance record create --date <YYYY-MM-DD> --time <HH:MM> --type <clock-in|clock-out|break-start|break-end|switch> [--project <\u30B3\u30FC\u30C9|ID>] [--task <\u30BF\u30B9\u30AFID>] [--memo <\u30E1\u30E2>]";var UPDATE_USAGE="twp attendance record update <\u8A18\u9332ID> --memo <\u30E1\u30E2> [--month <YYYY-MM>]";var DELETE_USAGE="twp attendance record delete <\u8A18\u9332ID> --reason <\u7406\u7531> --yes [--month <YYYY-MM>]";var MOVE_USAGE="twp attendance record move <\u8A18\u9332\
5
5
  ID> --project <\u30B3\u30FC\u30C9|ID> [--month <YYYY-MM>]";var TEXT_MAX=500;var UUID_PATTERN=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;var TIME_PATTERN=/^(\d{2}):(\d{2})(?::(\d{2}))?$/;var CLOSED_REASON="\u30B5\u30FC\u30D0\u306F\u7DE0\u3081\u6E08\u307F\u306E\u6708\u3078\u306E\u4FEE\u6B63\u3092\u62D2\u5426\u305B\u305A\u7DE0\u3081\u306E\u96C6\u8A08\u3092\u6D17\u3044\u66FF\u3048\u308B\u306E\u3067\u3001CLI \u304C\u9001\u308B\u524D\u306B\u6B62\u3081\u3066\u3044\u307E\u3059\u3002";
6
6
  var FORBIDDEN="\u81EA\u5206\u306E\u6253\u523B\u306E\u4FEE\u6B63\u306B\u306F\u6253\u523B\u4FEE\u6B63\u306E\u6A29\u9650\uFF08\u30E6\u30FC\u30B6\u30FC\u8A2D\u5B9A\u306E\u300C\u6253\u523B\u4FEE\u6B63\u300D\uFF09\u3068\u52E4\u6020\u306E\u5229\u7528\u6A29\u9650\u304C\u5FC5\u8981\u3067\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u306E\u7BA1\u7406\u8005\u306B\u4ED8\u4E0E\u3092\u4F9D\u983C\u3057\u3066\u304F\u3060\u3055\u3044";var RECORD_COLUMNS=["id","type","type_label","recorded_at","year_month","project_id","t\
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{hoursMinutes}from"./chunk-HO3PWICX.js";import"./chunk-UVCJXHWN.js";import"./chunk-5ZTQEXXS.js";import{monthFlag}from"./chunk-EXT4AIDF.js";import"./chunk-JJSBBWJ5.js";import"./chunk-HEH3PUW2.js";import"./chunk-W4NLJ2YK.js";import"./chunk-BD7O73GK.js";import"./chunk-VGT2EGH6.js";import"./chunk-MSQ4ZGMA.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-MMVXE2CJ.js";import"./chunk-SBRTBKEZ.js";
3
+ import{hoursMinutes}from"./chunk-KPLC3UP7.js";import"./chunk-UVCJXHWN.js";import"./chunk-IOVZDBAD.js";import{monthFlag}from"./chunk-EXT4AIDF.js";import"./chunk-JJSBBWJ5.js";import"./chunk-HEH3PUW2.js";import"./chunk-W4NLJ2YK.js";import"./chunk-BD7O73GK.js";import"./chunk-VGT2EGH6.js";import"./chunk-A7MM5WSC.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-MMVXE2CJ.js";import"./chunk-SBRTBKEZ.js";
4
4
  import"./chunk-MI6HVYR2.js";import"./chunk-PS5QFKHB.js";import{isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-EDF4U5BT.js";import"./chunk-RZVI6PMW.js";import"./chunk-OKATZ4SN.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var MONTH_FLAG={name:"--month",summary:"\u5BFE\u8C61\u306E\u5E74\u6708\uFF08YYYY-MM\uFF09",takesValue:true,placeholder:"<YYYY-MM>"};var ME_FLAG={name:"--me",summary:"\u81EA\u5206\u306E\u5206\u3060\u3051\u3092\u8868\u793A\u3059\u308B\uFF08\u7121\u3051\u308C\u3070\u5168\u54E1\u5206\u30FB\u7BA1\u7406\u8005\uFF09",takesValue:false};var FORBIDDEN_ADMIN="\u6A29\u9650\u304C\u8DB3\u308A\u307E\u305B\u3093\u3002\u5168\u54E1\u5206\uFF08--me \u306A\u3057\uFF09\u306F\u52E4\u6020\u306E\u7BA1\u7406\u8005\u6A29\u9650\uFF08\u52E4\u6020: \u7BA1\u7406\u8005\uFF09\u3001\u81EA\u5206\u306E\u5206\uFF08--me\uFF09\u306F\u52E4\u6020\u306E\u5229\u7528\u6A29\u9650\u304C\u8981\u308A\u307E\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u306E\u7BA1\u7406\u8005\u306B\u6A29\u9650\u306E\u4ED8\u4E0E\u3092\u4F9D\u983C\u3057\u3066\u304F\u3060\u3055\u3044";
5
5
  function listBody(spec,body){if(!isRecord(body)||!Array.isArray(body[spec.key])){throw new ApiResponseError(`${spec.label}\u306E\u5FDC\u7B54\u306B ${spec.key} \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return body}function monthListOperation(spec){const usage=`twp ${spec.domain} list [--month <YYYY-MM>] [--me]`;return{name:"list",summary:`\u6708\u306E${spec.label}\u3092\u4E00\u89A7\u3059\u308B\uFF08--me \u3067\u81EA\u5206\u306E\u5206\u30FB\u7121\u3051\u308C\u3070\u5168\u54E1\u5206\uFF1D\u7BA1\u7406\u8005\uFF09`,
6
6
  usage,description:`GET ${spec.path} \u3092\u8868\u793A\u3057\u307E\u3059\uFF08\u5168\u54E1\u5206\u30FB\u52E4\u6020\u306E\u7BA1\u7406\u8005\u6A29\u9650\u304C\u5FC5\u8981\uFF09\u3002--me \u3092\u4ED8\u3051\u308B\u3068 GET ${spec.path}/me\uFF08\u81EA\u5206\u306E\u5206\uFF09\u3067\u3059\u3002
@@ -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-HEH3PUW2.js";import"./chunk-W4NLJ2YK.js";import"./chunk-BD7O73GK.js";import{repeatedValues}from"./chunk-VGT2EGH6.js";import{BACKLOG_BASE_PATH,BACKLOG_PROJECT_SCOPE_LABEL,BACKLOG_SCOPE_LABEL,backlogSpacePath,isExactNumericId,resolveNamed}from"./chunk-MSQ4ZGMA.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-MMVXE2CJ.js";import"./chunk-SBRTBKEZ.js";import{LIST_FLAGS}from"./chunk-MI6HVYR2.js";
3
+ import{readBody}from"./chunk-HEH3PUW2.js";import"./chunk-W4NLJ2YK.js";import"./chunk-BD7O73GK.js";import{repeatedValues}from"./chunk-VGT2EGH6.js";import{BACKLOG_BASE_PATH,BACKLOG_PROJECT_SCOPE_LABEL,BACKLOG_SCOPE_LABEL,backlogSpacePath,isExactNumericId,resolveNamed}from"./chunk-A7MM5WSC.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-MMVXE2CJ.js";import"./chunk-SBRTBKEZ.js";import{LIST_FLAGS}from"./chunk-MI6HVYR2.js";
4
4
  import{requireResolved,singleRef,withResolved}from"./chunk-PS5QFKHB.js";import{isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-EDF4U5BT.js";import"./chunk-RZVI6PMW.js";import"./chunk-OKATZ4SN.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var DEFAULT_COUNT=20;var MAX_COUNT=100;var NUMERIC=/^[0-9]+$/;var ISSUE_REF=/^(?:[A-Za-z0-9_]+-[0-9]+|[0-9]+)$/;var DATE=/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/;var SPACE_COLUMNS=["id","space_url"];var PROJECT_COLUMNS=["id","projectKey","name"];var ISSUE_LIST_COLUMNS=["issueKey","summary","status","assignee","priority","dueDate","updated","descriptionTruncated"];var ISSUE_GET_COLUMNS=["id","issueKey","projectId","summary","description","descriptionTruncated","status","issueType","priority","assignee","cr\
5
5
  eatedUser","parentIssueId","startDate","dueDate","estimatedHours","actualHours","created","updated"];var ISSUE_JSON_SHAPE_HELP='--output json \u306E\u5F62\uFF08Backlog API \u306E\u5F62\u3067\u306F\u3042\u308A\u307E\u305B\u3093\uFF09:\n TWP \u30B5\u30FC\u30D0\u304C\u6574\u3048\u305F\u5F62\u3067\u8FD4\u308A\u307E\u3059\u3002Backlog API \u306E\u8AB2\u984C\u3092\u305D\u306E\u307E\u307E\u8AAD\u3080\u524D\u63D0\u3067\u66F8\u304F\u3068\u58CA\u308C\u307E\u3059\u3002\n - status / priority / resolution / issueType / assignee / createdUser / updatedUser \u306F\n \u540D\u524D\u306E\u6587\u5B57\u5217\u3067\u3059\uFF08{id, name} \u3067\u306F\u3042\u308A\u307E\u305B\u3093\uFF09\u3002ID \u306F statusId / issueTypeId /\n assigneeId \u2026 \u306E\u3088\u3046\u306B\u672B\u5C3E Id \u306E\u5225\u30AD\u30FC\u306B\u3042\u308A\u307E\u3059\u3002\u672A\u8A2D\u5B9A\u306A\u3089\u4E21\u65B9 null \u3067\u3059\u3002\n - category / versions / milestone \u306F {id, name} \u306E\u914D\u5217\u306E\u307E\u307E\u3067\u3059\uFF08\u8907\u6570\u4ED8\u3051\u3089\u308C\u308B\u305F\u3081\u3001\n \
6
6
  \u540D\u524D\u3068 ID \u3092\u5225\u30AD\u30FC\u3078\u5206\u3051\u308B\u3068\u5BFE\u5FDC\u304C\u5D29\u308C\u307E\u3059\uFF09\u3002customFields \u3082\u914D\u5217\u3067\u3059\u3002\n \u4F8B\uFF081\u4EF6\u30FB\u629C\u7C8B\uFF09:\n {"id": 1234, "issueKey": "PRJ-12", "summary": "\u2026",\n "statusId": 1, "status": "\u672A\u5BFE\u5FDC", "issueTypeId": 56, "issueType": "\u30BF\u30B9\u30AF",\n "assigneeId": 91, "assignee": "\u8C37 \u6A39",\n "category": [{"id": 7, "name": "\u8A2D\u8A08"}], "milestone": [], ...}\n --query \u3082\u3053\u306E\u5F62\u306B\u5F53\u305F\u308A\u307E\u3059\uFF08issue list \u306E\u4F8B: --query "[].{key: issueKey, type: issueType}"\uFF09\u3002';
@@ -1,4 +1,4 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{breakdownRows,budgetDomain,dashboardRows,fiscalYear,importRejection,overwriteLines,parseAllocationRows,parseSplit,parseTargetRows,periodsLabel}from"./chunk-NYQZVYU2.js";import"./chunk-QXHS43NL.js";import"./chunk-HO3PWICX.js";import"./chunk-UVCJXHWN.js";import"./chunk-5ZTQEXXS.js";import"./chunk-EXT4AIDF.js";import"./chunk-JJSBBWJ5.js";import"./chunk-HEH3PUW2.js";import"./chunk-W4NLJ2YK.js";import"./chunk-BD7O73GK.js";import"./chunk-VGT2EGH6.js";
4
- import"./chunk-MSQ4ZGMA.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-MMVXE2CJ.js";import"./chunk-SBRTBKEZ.js";import"./chunk-MI6HVYR2.js";import"./chunk-PS5QFKHB.js";import"./chunk-3ZRMMBP5.js";import"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-EDF4U5BT.js";import"./chunk-RZVI6PMW.js";import"./chunk-OKATZ4SN.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";export{breakdownRows,budgetDomain,dashboardRows,fiscalYear,importRejection,overwriteLines,parseAllocationRows,parseSplit,parseTargetRows,periodsLabel};
3
+ import{breakdownRows,budgetDomain,dashboardRows,fiscalYear,importRejection,overwriteLines,parseAllocationRows,parseSplit,parseTargetRows,periodsLabel}from"./chunk-IKCXJBSF.js";import"./chunk-L4THNX4M.js";import"./chunk-KPLC3UP7.js";import"./chunk-UVCJXHWN.js";import"./chunk-IOVZDBAD.js";import"./chunk-EXT4AIDF.js";import"./chunk-JJSBBWJ5.js";import"./chunk-HEH3PUW2.js";import"./chunk-W4NLJ2YK.js";import"./chunk-BD7O73GK.js";import"./chunk-VGT2EGH6.js";
4
+ import"./chunk-A7MM5WSC.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-MMVXE2CJ.js";import"./chunk-SBRTBKEZ.js";import"./chunk-MI6HVYR2.js";import"./chunk-PS5QFKHB.js";import"./chunk-3ZRMMBP5.js";import"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-EDF4U5BT.js";import"./chunk-RZVI6PMW.js";import"./chunk-OKATZ4SN.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";export{breakdownRows,budgetDomain,dashboardRows,fiscalYear,importRejection,overwriteLines,parseAllocationRows,parseSplit,parseTargetRows,periodsLabel};
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{CRITERION_RE,checkCounts,checksOf,envelope,hasReferencedReason,reasonsMap,reviewOf,withoutResult}from"./chunk-N3TO2KIZ.js";import{readBody}from"./chunk-HEH3PUW2.js";import{WORKFLOWS_PATH}from"./chunk-MSQ4ZGMA.js";import{UUID_RE,isSafePathSegment}from"./chunk-HVZUXLQ4.js";import{ApiError}from"./chunk-JA5A6UJ2.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-MI6HVYR2.js";import{requireResolved,singleRef,withResolved}from"./chunk-PS5QFKHB.js";
3
+ import{CRITERION_RE,checkCounts,checksOf,envelope,hasReferencedReason,reasonsMap,reviewOf,withoutResult}from"./chunk-YPEEZXOX.js";import{readBody}from"./chunk-HEH3PUW2.js";import{WORKFLOWS_PATH}from"./chunk-A7MM5WSC.js";import{UUID_RE,isSafePathSegment}from"./chunk-HVZUXLQ4.js";import{ApiError}from"./chunk-JA5A6UJ2.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-MI6HVYR2.js";import{requireResolved,singleRef,withResolved}from"./chunk-PS5QFKHB.js";
4
4
  import{acknowledgement,isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";var INSTANCES_PATH=`${WORKFLOWS_PATH}/instances`;var COMMENT_MAX_CHARS=2e3;var IN_FLIGHT=new Set(["pending","processing"]);var GET_USAGE="twp workflow ai-review get <\u7533\u8ACBID>";var UPDATE_USAGE="twp workflow ai-review-comment update <\u6307\u6458ID> --instance <\u7533\u8ACBID> (--text <\u672C\u6587> | --text-file <\u30D1\u30B9>)";var DELETE_USAGE="twp workflow ai-review-comment delete <\u6307\u6458ID> --instance <\u7533\u8ACBID> --yes";function instanceUuid(raw,usage,what){const id=raw?.trim()??
5
5
  "";if(id==="")throw new UsageError(`\u7533\u8ACBID \u3092${what}\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044`,usage);if(!UUID_RE.test(id))throw new UsageError(`\u7533\u8ACBID \u306F UUID \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${id}`,`${usage}
6
6
  \u7533\u8ACBID \u306F twp workflow approval pending \u306E id \u5217\u3067\u3059\u3002`);return id}function workflowReviewPath(instanceId){return`${INSTANCES_PATH}/${encodeURIComponent(instanceId)}/ai-review`}function reviewTarget(input){if(input.args.length>1)throw new UsageError(`\u4F59\u5206\u306A\u5F15\u6570\u304C\u3042\u308A\u307E\u3059: ${input.args.slice(1).join(" ")}`,GET_USAGE);return workflowReviewPath(instanceUuid(input.args[0],GET_USAGE,"\u4F4D\u7F6E\u5F15\u6570"))}function commentTarget(input,usage){
@@ -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-WPYILRQL.js";import{CUSTOMER_LICENSE,childForbidden,levelForbidden}from"./chunk-XPZUORRN.js";import{inspectLocalFile}from"./chunk-ODW2QKMP.js";import{createFlags,fieldBody,hasAnyField,updateFlags}from"./chunk-5ZTQEXXS.js";import{SALES_ESTIMATES_PATH,isExactNumericId}from"./chunk-MSQ4ZGMA.js";import{nonEmpty}from"./chunk-MI6HVYR2.js";import{requireResolved,withResolved}from"./chunk-PS5QFKHB.js";
3
+ import{FORCE_FLAG,OUT_FLAG,REV_FLAG,revOf,singleId,uploadStaged}from"./chunk-CBQ6Y74J.js";import{CUSTOMER_LICENSE,childForbidden,levelForbidden}from"./chunk-VSVJQNIB.js";import{inspectLocalFile}from"./chunk-6H5TPSXU.js";import{createFlags,fieldBody,hasAnyField,updateFlags}from"./chunk-IOVZDBAD.js";import{SALES_ESTIMATES_PATH,isExactNumericId}from"./chunk-A7MM5WSC.js";import{nonEmpty}from"./chunk-MI6HVYR2.js";import{requireResolved,withResolved}from"./chunk-PS5QFKHB.js";
4
4
  import{acknowledgement,isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.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,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-QLENN5DD.js";import{featureLicenseGuidance,invoiceFilters}from"./chunk-PMQDBTQH.js";import{boundedText,isoDate}from"./chunk-JJSBBWJ5.js";import{readBody}from"./chunk-HEH3PUW2.js";import{repeatedValues}from"./chunk-VGT2EGH6.js";import{SALES_DEPOSITS_PATH,isExactNumericId,resolveNamed}from"./chunk-MSQ4ZGMA.js";import{ApiError}from"./chunk-JA5A6UJ2.js";import{LIST_PAGING_HELP,PAGE_NUMBER_LIST_FLAGS,PAGE_NUMBER_PAGING_HELP,
3
+ import{readCsvFileText}from"./chunk-QLENN5DD.js";import{featureLicenseGuidance,invoiceFilters}from"./chunk-DK77GMSP.js";import{boundedText,isoDate}from"./chunk-JJSBBWJ5.js";import{readBody}from"./chunk-HEH3PUW2.js";import{repeatedValues}from"./chunk-VGT2EGH6.js";import{SALES_DEPOSITS_PATH,isExactNumericId,resolveNamed}from"./chunk-A7MM5WSC.js";import{ApiError}from"./chunk-JA5A6UJ2.js";import{LIST_PAGING_HELP,PAGE_NUMBER_LIST_FLAGS,PAGE_NUMBER_PAGING_HELP,
4
4
  STABLE_PAGE_ORDER,nonEmpty,pageNumberPaging,pageNumberQuery,pageRangeNotes}from"./chunk-MI6HVYR2.js";import{requireResolved,withResolved}from"./chunk-PS5QFKHB.js";import{acknowledgement,isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.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\
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{checkUploadQuota}from"./chunk-V64CGX7V.js";import{PRIVATE_PROJECT_REF,isPrivateProjectRef}from"./chunk-RMFLTSOV.js";import{rejectMultipleTaskKeys}from"./chunk-MSQ4ZGMA.js";import{isSafePathSegment,safeProjectIdPolicy}from"./chunk-HVZUXLQ4.js";import{PRIVATE_TASK_KEY_PREFIX,isPrivateTaskKey,isTaskKey}from"./chunk-SBRTBKEZ.js";import{requireResolved,singleRef,withResolved}from"./chunk-PS5QFKHB.js";import{acknowledgement,isRecord,pick}from"./chunk-3ZRMMBP5.js";
3
+ import{checkUploadQuota}from"./chunk-V64CGX7V.js";import{PRIVATE_PROJECT_REF,isPrivateProjectRef}from"./chunk-RMFLTSOV.js";import{rejectMultipleTaskKeys}from"./chunk-A7MM5WSC.js";import{isSafePathSegment,safeProjectIdPolicy}from"./chunk-HVZUXLQ4.js";import{PRIVATE_TASK_KEY_PREFIX,isPrivateTaskKey,isTaskKey}from"./chunk-SBRTBKEZ.js";import{requireResolved,singleRef,withResolved}from"./chunk-PS5QFKHB.js";import{acknowledgement,isRecord,pick}from"./chunk-3ZRMMBP5.js";
4
4
  import{ApiRejectedError,ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";function classifyTaskRef(ref){const value=ref.trim();if(safeProjectIdPolicy.isDirectId(value))return{kind:"id",value};rejectMultipleTaskKeys(value);if(isTaskKey(value))return{kind:"key",value};return{kind:"unknown",value}}function wantsPrivateSurface(input){const project=input.flags.get("--project");return project!==void 0&&isPrivateProjectRef(project)}function taskSurface(input,ref){const project=input.flags.get("--project");const{kind,value}=classifyTaskRef(ref);if(project!==void 0&&isPrivateProjectRef(
5
5
  project)){if(kind==="key"&&!isPrivateTaskKey(value)){throw new UsageError(`--project ${PRIVATE_PROJECT_REF}\uFF08\u500B\u4EBA\u30BF\u30B9\u30AF\uFF09\u306B ${value} \u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,`\u500B\u4EBA\u30BF\u30B9\u30AF\u306E\u30AD\u30FC\u306F ${PRIVATE_TASK_KEY_PREFIX}-<\u756A\u53F7> \u306E\u5F62\u3067\u3059\u3002ID\uFF08UUID / ULID\uFF09\u3067\u3082\u6307\u5B9A\u3067\u304D\u307E\u3059\u3002
6
6
  \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30BF\u30B9\u30AF\u3092\u6307\u3059\u306A\u3089 --project ${PRIVATE_PROJECT_REF} \u3092\u5916\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return"private"}if(kind==="key"&&isPrivateTaskKey(value)&&project===void 0){throw new UsageError(`${value} \u306F\u500B\u4EBA\u30BF\u30B9\u30AF\u306E\u30AD\u30FC\u306B\u3082\u3001\u30B3\u30FC\u30C9 ${PRIVATE_TASK_KEY_PREFIX} \u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30BF\u30B9\u30AF\u30AD\u30FC\u306B\u3082\u8AAD\u3081\u307E\u3059`,
@@ -129,36 +129,39 @@ id)}/promotion-preview`;const res=await this.get(path2);if(res.status===401||res
129
129
  status}\uFF09\u3002`,res.status);const body=res.json;if(!isRecord(body)||body["result"]!==true||typeof body["already_promoted"]!=="boolean"||!Array.isArray(body["customer_matches"])){throw new ResolveError("\u6607\u683C\u306E\u4E0B\u898B\u306E\u5FDC\u7B54\u306B already_promoted / customer_matches \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002",res.status)}return body}async agentRepository(input,flag="--repository"){const trimmed=input.
130
130
  trim();if(trimmed==="")throw new UsageError(`${flag} \u306B\u7A7A\u306E\u5024\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`);if(/^\d+$/.test(trimmed))return{id:trimmed,name:trimmed};const res=await this.get(AGENT_REPOSITORIES_PATH);if(res.status===401||res.status===403){throw new ApiError(res.status,isRecord(res.json)?res.json:null,"GET",AGENT_REPOSITORIES_PATH)}const rows=rawListFrom(res,"list","\u30EA\u30DD\u30B8\u30C8\u30EA");return resolveNamed(trimmed,namedFromRows(rows,"\u30EA\u30DD\u30B8\u30C8\u30EA",
131
131
  agentRepositoryRow),{flag,label:"\u30EA\u30DD\u30B8\u30C8\u30EA",scope:"\u3042\u306A\u305F\u304C\u53C2\u52A0\u3059\u308B\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306B\u7D10\u3065\u3044\u305F\u30EA\u30DD\u30B8\u30C8\u30EA"})}async inquiryCategory(input,flag="<\u30AB\u30C6\u30B4\u30EA>"){const rows=await this.inquiryCategoryRows();return resolveNamed(input,namedFromRows(rows,"\u554F\u3044\u5408\u308F\u305B\u30AB\u30C6\u30B4\u30EA",inquiryCategoryRow),{flag,label:"\u554F\u3044\u5408\u308F\u305B\u30AB\u30C6\u30B4\u30EA",
132
- scope:TENANT_SCOPE_LABEL})}async cmsCategory(input,flag="--category"){const rows=await this.cached("cms-categories",TENANT_CACHE_KEY,async()=>rawListFrom(await this.get(`${CMS_PATH}/categories`),"data","\u30B3\u30F3\u30C6\u30F3\u30C4\u306E\u30AB\u30C6\u30B4\u30EA"));return resolveNamed(input,namedFromRows(rows,"\u30B3\u30F3\u30C6\u30F3\u30C4\u306E\u30AB\u30C6\u30B4\u30EA",cmsCategoryRow),{flag,label:"\u30B3\u30F3\u30C6\u30F3\u30C4\u306E\u30AB\u30C6\u30B4\u30EA",scope:TENANT_SCOPE_LABEL})}async cmsTag(input,flag="\
133
- <\u30BF\u30B0>"){const rows=await this.cached("cms-tags",TENANT_CACHE_KEY,async()=>rawListFrom(await this.get(`${CMS_PATH}/tags`),"data","\u30B3\u30F3\u30C6\u30F3\u30C4\u306E\u30BF\u30B0"));return resolveNamed(input,namedFromRows(rows,"\u30B3\u30F3\u30C6\u30F3\u30C4\u306E\u30BF\u30B0",cmsTagRow),{flag,label:"\u30B3\u30F3\u30C6\u30F3\u30C4\u306E\u30BF\u30B0",scope:TENANT_SCOPE_LABEL})}async inquiryCategoryRows(options={}){const load=async()=>rawListFrom(await this.get(INQUIRY_CATEGORIES_PATH),"li\
134
- st","\u554F\u3044\u5408\u308F\u305B\u30AB\u30C6\u30B4\u30EA");if(options.fresh!==true)return this.cached("inquiry-categories",TENANT_CACHE_KEY,load);const rows=await load();writeCache({profile:this.options.profile,scope:"inquiry-categories",project:TENANT_CACHE_KEY},rows,{...this.options.env!==void 0?{env:this.options.env}:{},...this.options.ttlMs!==void 0?{ttlMs:this.options.ttlMs}:{},...this.options.now!==void 0?{now:this.options.now}:{}});return rows}async supportCategory(input,flag="--catego\
135
- ry"){const rows=await this.cached("support-categories",TENANT_CACHE_KEY,async()=>rawListFrom(await this.get(SUPPORT_CATEGORIES_PATH),"data","\u30B5\u30DD\u30FC\u30C8\u306E\u30AB\u30C6\u30B4\u30EA"));return resolveNamed(input,namedFromRows(rows,"\u30B5\u30DD\u30FC\u30C8\u306E\u30AB\u30C6\u30B4\u30EA",supportCategoryRow),{flag,label:"\u30B5\u30DD\u30FC\u30C8\u306E\u30AB\u30C6\u30B4\u30EA",scope:TENANT_SCOPE_LABEL})}async userGroup(input,flag="<\u30B0\u30EB\u30FC\u30D7>"){const rows=await this.cached(
136
- "user-groups",TENANT_CACHE_KEY,async()=>{const query=new URLSearchParams({search_page_limit:String(USER_GROUP_LIMIT)});const res=await this.get(`${USER_GROUPS_PATH}?${query.toString()}`);const list=rawListFrom(res,"list","\u30E6\u30FC\u30B6\u30FC\u30B0\u30EB\u30FC\u30D7");const sum=isRecord(res.json)?res.json["sum"]:void 0;if(typeof sum==="number"&&sum>list.length){throw new ResolveError(`\u30E6\u30FC\u30B6\u30FC\u30B0\u30EB\u30FC\u30D7\u4E00\u89A7\u304C ${sum} \u4EF6\u4E2D ${list.length} \u4EF6\u3067\u5207\u308A\u8A70\u3081\
137
- \u3089\u308C\u305F\u305F\u3081\u3001\u540D\u524D\u3067\u89E3\u6C7A\u3067\u304D\u307E\u305B\u3093\u3002ID \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002`,res.status)}return list});return resolveNamed(input,namedFromRows(rows,"\u30E6\u30FC\u30B6\u30FC\u30B0\u30EB\u30FC\u30D7",userGroupRow),{flag,label:"\u30E6\u30FC\u30B6\u30FC\u30B0\u30EB\u30FC\u30D7",scope:TENANT_SCOPE_LABEL})}async apiKey(input,flag="<\u30AD\u30FC>"){const trimmed=input.trim();if(trimmed==="")throw new UsageError(`${flag}\
138
- \u306B\u7A7A\u306E\u5024\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`);if(UUID_RE.test(trimmed))return{id:trimmed,name:trimmed};const res=await this.get(API_KEYS_PATH);if(res.status===401||res.status===403){throw new ApiError(res.status,isRecord(res.json)?res.json:null,"GET",API_KEYS_PATH)}const rows=rawListFrom(res,"list","API \u30AD\u30FC");return resolveNamed(trimmed,namedFromRows(rows,"API \u30AD\u30FC",apiKeyRow),{flag,label:"API \u30AD\u30FC",scope:TENANT_SCOPE_LABEL})}async apiKeyPermissions(){
139
- const path2=`${API_KEYS_PATH}/permissions`;const res=await this.get(path2);if(res.status===401||res.status===403){throw new ApiError(res.status,isRecord(res.json)?res.json:null,"GET",path2)}return rawListFrom(res,"permissions","API \u30AD\u30FC\u306E\u6A29\u9650")}async userGroupDetail(id){if(!isSafePathSegment(id)){throw new ResolveError(`\u30E6\u30FC\u30B6\u30FC\u30B0\u30EB\u30FC\u30D7 ID \u3092\u30D1\u30B9\u306B\u4F7F\u3048\u307E\u305B\u3093: ${id}\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}
140
- const res=await this.get(`${USER_GROUPS_PATH}/${encodeURIComponent(id)}`);if(!res.ok){throw new ResolveError(`\u30E6\u30FC\u30B6\u30FC\u30B0\u30EB\u30FC\u30D7\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F: ${id}\uFF08HTTP ${res.status}\uFF09\u3002\u30B0\u30EB\u30FC\u30D7\u306E\u8A73\u7D30\u306F\u7BA1\u7406\u8005\u3060\u3051\u304C\u8AAD\u3081\u307E\u3059\u3002`,res.status)}const body=isRecord(res.json)?res.json:{};const group=body["usergroup_data"];if(group===null)throw new ResolveError(
141
- `\u30E6\u30FC\u30B6\u30FC\u30B0\u30EB\u30FC\u30D7\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093: ${id}`,404);const members=body["user_list"];if(!isRecord(group)||!Array.isArray(members)){throw new ResolveError("\u30E6\u30FC\u30B6\u30FC\u30B0\u30EB\u30FC\u30D7\u306E\u5FDC\u7B54\u306B usergroup_data / user_list \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002",res.status)}return{group,members:members.filter(isRecord)}}invalidateUserGroups(){
142
- removeCache({profile:this.options.profile,scope:"user-groups",project:TENANT_CACHE_KEY},this.options.env!==void 0?{env:this.options.env}:{})}invalidateInquiryCategories(){removeCache({profile:this.options.profile,scope:"inquiry-categories",project:TENANT_CACHE_KEY},this.options.env!==void 0?{env:this.options.env}:{})}async notificationCategory(input,flag="--category"){const rows=await this.cached("notification-categories",TENANT_CACHE_KEY,async()=>rawListFrom(await this.get(`${NOTIFICATIONS_PATH}\
143
- /categories`),"categories","\u901A\u77E5\u30AB\u30C6\u30B4\u30EA"));return resolveNamed(input,namedFromRows(rows,"\u901A\u77E5\u30AB\u30C6\u30B4\u30EA",notificationCategoryRow),{flag,label:"\u901A\u77E5\u30AB\u30C6\u30B4\u30EA",scope:TENANT_SCOPE_LABEL})}async notificationUnreadCount(category){if(category===null){const res=await this.get(`${NOTIFICATIONS_PATH}/counts`);const count=res.ok&&isRecord(res.json)?res.json["unread_count"]:void 0;if(typeof count!=="number"||!Number.isSafeInteger(count)||
144
- count<0){throw new ResolveError(res.ok?"\u901A\u77E5\u4EF6\u6570\u306E\u5FDC\u7B54\u306B unread_count \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002":`\u901A\u77E5\u306E\u672A\u8AAD\u4EF6\u6570\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08HTTP ${res.status}\uFF09\u3002\u63A5\u7D9A\u5148\u3068\u30ED\u30B0\u30A4\u30F3\u72B6\u614B\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`,res.status)}
145
- return{count,complete:true}}let total=0;let cursor=null;for(let page=0;page<NOTIFICATION_COUNT_MAX_PAGES;page++){const query=new URLSearchParams({read_status:"unread",category,limit:String(NOTIFICATION_COUNT_PAGE_LIMIT)});if(cursor!==null)query.set("cursor",cursor);const res=await this.get(`${NOTIFICATIONS_PATH}?${query.toString()}`);total+=rawListFrom(res,"list","\u901A\u77E5").length;const body=res.json;if(body["has_more"]===false)return{count:total,complete:true};if(body["has_more"]!==true||typeof body["\
146
- next_cursor"]!=="string"||body["next_cursor"]===""){throw new ResolveError("\u901A\u77E5\u4E00\u89A7\u306E\u5FDC\u7B54\u306E has_more / next_cursor \u3092\u89E3\u91C8\u3067\u304D\u307E\u305B\u3093\u3002\u672A\u8AAD\u4EF6\u6570\u3092\u6570\u3048\u3089\u308C\u306A\u3044\u305F\u3081\u4E2D\u65AD\u3057\u307E\u3057\u305F\u3002",res.status)}cursor=body["next_cursor"]}return{count:total,complete:false}}async faqCategory(input,flag="--category"){const value=input.trim();if(value==="")throw new UsageError(
147
- `${flag} \u306B\u7A7A\u306E\u5024\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,"\u30AB\u30C6\u30B4\u30EA\u306F twp faq categories \u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002");const res=await this.get(`${FAQS_PATH}/categories`);const rows=res.ok&&isRecord(res.json)?res.json["categories"]:void 0;if(!Array.isArray(rows)){throw new ResolveError(res.ok?"FAQ \u30AB\u30C6\u30B4\u30EA\u4E00\u89A7\u306E\u5FDC\u7B54\u306B categories \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002":
148
- `FAQ \u306E\u30AB\u30C6\u30B4\u30EA\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08HTTP ${res.status}\uFF09\u3002\u63A5\u7D9A\u5148\u3068\u30ED\u30B0\u30A4\u30F3\u72B6\u614B\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`,res.status)}const records=rows.filter(isRecord);const hit=records.find(row=>row["code"]===value||row["label"]===value);if(hit===void 0||typeof hit["code"]!=="string"){const known=records.map(row=>`${String(row["code"])}\uFF08${String(row["la\
149
- bel"])}\uFF09`).join(" / ");throw new UsageError(`FAQ \u306E\u30AB\u30C6\u30B4\u30EA\u306B\u3042\u308A\u307E\u305B\u3093\uFF08${flag}\uFF09: ${value}`,`\u6307\u5B9A\u3067\u304D\u308B\u306E\u306F ${known} \u3067\u3059\u3002`)}return hit["code"]}async announcementUnreadCount(){const res=await this.get(`${ANNOUNCEMENTS_PATH}/counts`);const count=res.ok&&isRecord(res.json)?res.json["unread_count"]:void 0;if(typeof count!=="number"||!Number.isSafeInteger(count)||count<0){throw new ResolveError(res.ok?
150
- "\u304A\u77E5\u3089\u305B\u4EF6\u6570\u306E\u5FDC\u7B54\u306B unread_count \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002":`\u304A\u77E5\u3089\u305B\u306E\u672A\u8AAD\u4EF6\u6570\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08HTTP ${res.status}\uFF09\u3002\u63A5\u7D9A\u5148\u3068\u30ED\u30B0\u30A4\u30F3\u72B6\u614B\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`,res.status)}return count}async namedList(path2,envelope,label,map){
151
- return namedListFrom(await this.get(path2),envelope,label,map)}async cached(scope,projectId,load){const key={profile:this.options.profile,scope,project:projectId};const options={...this.options.env!==void 0?{env:this.options.env}:{},refresh:this.options.refresh,...this.options.ttlMs!==void 0?{ttlMs:this.options.ttlMs}:{},...this.options.now!==void 0?{now:this.options.now}:{}};const hit=readCache(key,options);if(hit!==null&&Array.isArray(hit))return hit;const fresh=await load();writeCache(key,fresh,
152
- options);return fresh}applyAlias(kind,input){const table=this.options.aliases?.[kind];if(table===void 0)return input;const needle=input.trim().toLowerCase();for(const[from,to]of Object.entries(table)){if(from.trim().toLowerCase()===needle&&typeof to==="string"&&to.trim()!=="")return to}return input}async backlogSpaces(){return this.cached("backlog-spaces",BACKLOG_SPACES_CACHE_KEY,()=>this.namedList(`${BACKLOG_BASE_PATH}/spaces`,"spaces","Backlog \u30B9\u30DA\u30FC\u30B9",backlogSpaceRow))}async backlogSpace(ref,flag="\
153
- --space"){return resolveNamed(ref,await this.backlogSpaces(),{flag,label:"Backlog \u30B9\u30DA\u30FC\u30B9",scope:BACKLOG_SCOPE_LABEL})}async backlogDefaultSpace(){const spaces=await this.backlogSpaces();if(spaces.length===1)return spaces[0];if(spaces.length===0){throw new UsageError("Backlog \u30B9\u30DA\u30FC\u30B9\u304C1\u4EF6\u3082\u767B\u9332\u3055\u308C\u3066\u3044\u307E\u305B\u3093","TWP \u306E\u5916\u90E8\u9023\u643A\u8A2D\u5B9A\u3067 Backlog \u30B9\u30DA\u30FC\u30B9\u3092\u767B\u9332\u3057\u3066\u304F\u3060\u3055\u3044\uFF08twp backlog space list \u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\uFF09\u3002")}
154
- throw new UsageError(`Backlog \u30B9\u30DA\u30FC\u30B9\u304C ${spaces.length} \u4EF6\u767B\u9332\u3055\u308C\u3066\u3044\u308B\u305F\u3081\u3001--space \u30671\u3064\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044`,"twp backlog space list \u3067 ID \u3068\u30B9\u30DA\u30FC\u30B9URL\u3092\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002\u6BCE\u56DE\u306E\u6307\u5B9A\u3092\u7701\u304F\u306B\u306F twp configure \u3067\u65E2\u5B9A\u306E Backlog \u30B9\u30DA\u30FC\u30B9\u3092\u8A2D\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}async backlogProjects(spaceId){
155
- return this.cached("backlog-projects",spaceId,()=>this.namedList(backlogSpacePath(spaceId,"/projects"),"projects","Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8",backlogProjectRow))}async backlogStatuses(spaceId,projectId){return this.cached("backlog-statuses",`${spaceId}/${projectId}`,()=>this.namedList(backlogSpacePath(spaceId,`/projects/${encodeURIComponent(assertBacklogPathSegment(projectId,"Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8 ID"))}/statuses`),"statuses","Backlog \u30B9\u30C6\u30FC\u30BF\u30B9",
156
- backlogStatusRow))}async backlogUsers(spaceId,projectId){return this.cached("backlog-users",`${spaceId}/${projectId}`,()=>this.namedList(backlogSpacePath(spaceId,`/projects/${encodeURIComponent(assertBacklogPathSegment(projectId,"Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8 ID"))}/users`),"users","Backlog \u30E6\u30FC\u30B6\u30FC",backlogUserRow))}async redmineServers(){return this.cached("redmine-servers",REDMINE_SERVERS_CACHE_KEY,()=>this.namedList(`${REDMINE_BASE_PATH}/servers`,"items","Redmi\
157
- ne \u63A5\u7D9A\u5148",redmineServerRow))}async redmineServer(ref){return resolveNamed(ref,await this.redmineServers(),{flag:"--space",label:"Redmine \u63A5\u7D9A\u5148",scope:REDMINE_SCOPE_LABEL})}async redmineDefaultServer(){const servers=await this.redmineServers();if(servers.length===1)return servers[0];if(servers.length===0){throw new UsageError("Redmine \u306E\u63A5\u7D9A\u5148\u304C1\u4EF6\u3082\u767B\u9332\u3055\u308C\u3066\u3044\u307E\u305B\u3093","TWP \u306E\u500B\u4EBA\u8A2D\u5B9A\uFF08\u5916\u90E8\u30B7\u30B9\u30C6\u30E0\u9023\u643A\uFF09\u3067 Redmine \u3092\u767B\u9332\u3057\u3066\u304F\u3060\u3055\u3044\
158
- \uFF08twp redmine space list \u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\uFF09\u3002")}throw new UsageError(`Redmine \u306E\u63A5\u7D9A\u5148\u304C ${servers.length} \u4EF6\u767B\u9332\u3055\u308C\u3066\u3044\u308B\u305F\u3081\u3001--space \u30671\u3064\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044`,"twp redmine space list \u3067 ID \u3068\u63A5\u7D9A\u5148URL\u3092\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002")}async ms365Teams(){return this.cached("ms365-teams",MS365_TEAMS_CACHE_KEY,()=>this.ms365NamedList(
159
- ms365Path("/teams/teams"),"Teams \u306E\u30C1\u30FC\u30E0"))}async ms365Team(ref){return resolveNamed(ref,await this.ms365Teams(),{flag:"--team",label:"\u30C1\u30FC\u30E0",scope:MS365_SCOPE_LABEL})}async ms365Channels(teamId){return this.cached("ms365-channels",teamId,()=>this.ms365NamedList(ms365Path(`/teams/teams/${ms365Segment(teamId,"\u30C1\u30FC\u30E0 ID")}/channels`),"Teams \u306E\u30C1\u30E3\u30CD\u30EB"))}async ms365Channel(teamId,ref){return resolveNamed(ref,await this.ms365Channels(teamId),
160
- {flag:"--channel",label:"\u30C1\u30E3\u30CD\u30EB",scope:"\u3053\u306E\u30C1\u30FC\u30E0"})}async ms365FindChat(chatId){const path2=ms365Path("/teams/chats");let cursor=null;let seen=0;let common=null;for(let page=1;page<=MS365_CHAT_FIND_MAX_PAGES;page+=1){const query=`top=${MS365_CHAT_PAGE_TOP}&expand=members${cursor===null?"":`&skiptoken=${encodeURIComponent(cursor)}`}`;const res=await this.get(`${path2}?${query}`);if(!res.ok){throw new ResolveError(ms365NotConnectedGuidance(res.json)??`Teams \
161
- \u306E\u30C1\u30E3\u30C3\u30C8\u4E00\u89A7\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08HTTP ${res.status}\uFF09\u3002\u63A5\u7D9A\u5148\u3068\u30ED\u30B0\u30A4\u30F3\u72B6\u614B\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`,res.status)}const data=isRecord(res.json)?res.json["data"]:void 0;const value=isRecord(data)?data["value"]:void 0;if(!isRecord(data)||!Array.isArray(value)){throw new ResolveError("Teams \u306E\u30C1\u30E3\u30C3\u30C8\u4E00\u89A7\u306E\u5FDC\u7B54\u306B data.value \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
132
+ scope:TENANT_SCOPE_LABEL})}async cmsCategory(input,flag="--category"){const rows=await this.cached("cms-categories",TENANT_CACHE_KEY,async()=>rawListFrom(await this.get(`${CMS_PATH}/categories`),"data","\u30B3\u30F3\u30C6\u30F3\u30C4\u306E\u30AB\u30C6\u30B4\u30EA").map(row=>({id:row["id"],name:row["name"],code:row["code"]})));return resolveNamed(input,namedFromRows(rows,"\u30B3\u30F3\u30C6\u30F3\u30C4\u306E\u30AB\u30C6\u30B4\u30EA",cmsCategoryRow),{flag,label:"\u30B3\u30F3\u30C6\u30F3\u30C4\u306E\u30AB\u30C6\u30B4\u30EA",
133
+ scope:TENANT_SCOPE_LABEL})}async cmsCategoryRecord(id,flag="<\u30AB\u30C6\u30B4\u30EA>"){const path2=`${CMS_PATH}/categories/${encodeURIComponent(id)}`;const res=await this.get(path2);if(res.status===401||res.status===403){throw new ApiError(res.status,isRecord(res.json)?res.json:null,"GET",path2)}if(res.status===404)throw new UsageError(`${flag} \u306E ID ${id} \u306E\u30AB\u30C6\u30B4\u30EA\u306F\u3042\u308A\u307E\u305B\u3093`);if(!res.ok)throw new ResolveError(`\u30B3\u30F3\u30C6\u30F3\u30C4\u306E\u30AB\u30C6\u30B4\u30EA\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08HTTP ${res.
134
+ status}\uFF09\u3002`,res.status);const data=isRecord(res.json)?res.json["data"]:void 0;if(!isRecord(data)||data["id"]!==id)throw new ResolveError("\u30B3\u30F3\u30C6\u30F3\u30C4\u306E\u30AB\u30C6\u30B4\u30EA\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",res.status);return data}invalidateCmsCategories(){removeCache({profile:this.options.profile,scope:"cms-categories",project:TENANT_CACHE_KEY},
135
+ this.options.env!==void 0?{env:this.options.env}:{})}invalidateCmsTags(){removeCache({profile:this.options.profile,scope:"cms-tags",project:TENANT_CACHE_KEY},this.options.env!==void 0?{env:this.options.env}:{})}async cmsTag(input,flag="<\u30BF\u30B0>"){const rows=await this.cached("cms-tags",TENANT_CACHE_KEY,async()=>rawListFrom(await this.get(`${CMS_PATH}/tags`),"data","\u30B3\u30F3\u30C6\u30F3\u30C4\u306E\u30BF\u30B0"));return resolveNamed(input,namedFromRows(rows,"\u30B3\u30F3\u30C6\u30F3\u30C4\u306E\u30BF\u30B0",
136
+ cmsTagRow),{flag,label:"\u30B3\u30F3\u30C6\u30F3\u30C4\u306E\u30BF\u30B0",scope:TENANT_SCOPE_LABEL})}async inquiryCategoryRows(options={}){const load=async()=>rawListFrom(await this.get(INQUIRY_CATEGORIES_PATH),"list","\u554F\u3044\u5408\u308F\u305B\u30AB\u30C6\u30B4\u30EA");if(options.fresh!==true)return this.cached("inquiry-categories",TENANT_CACHE_KEY,load);const rows=await load();writeCache({profile:this.options.profile,scope:"inquiry-categories",project:TENANT_CACHE_KEY},rows,{...this.options.
137
+ env!==void 0?{env:this.options.env}:{},...this.options.ttlMs!==void 0?{ttlMs:this.options.ttlMs}:{},...this.options.now!==void 0?{now:this.options.now}:{}});return rows}async supportCategory(input,flag="--category"){const rows=await this.cached("support-categories",TENANT_CACHE_KEY,async()=>rawListFrom(await this.get(SUPPORT_CATEGORIES_PATH),"data","\u30B5\u30DD\u30FC\u30C8\u306E\u30AB\u30C6\u30B4\u30EA"));return resolveNamed(input,namedFromRows(rows,"\u30B5\u30DD\u30FC\u30C8\u306E\u30AB\u30C6\u30B4\u30EA",
138
+ supportCategoryRow),{flag,label:"\u30B5\u30DD\u30FC\u30C8\u306E\u30AB\u30C6\u30B4\u30EA",scope:TENANT_SCOPE_LABEL})}async userGroup(input,flag="<\u30B0\u30EB\u30FC\u30D7>"){const rows=await this.cached("user-groups",TENANT_CACHE_KEY,async()=>{const query=new URLSearchParams({search_page_limit:String(USER_GROUP_LIMIT)});const res=await this.get(`${USER_GROUPS_PATH}?${query.toString()}`);const list=rawListFrom(res,"list","\u30E6\u30FC\u30B6\u30FC\u30B0\u30EB\u30FC\u30D7");const sum=isRecord(res.json)?
139
+ res.json["sum"]:void 0;if(typeof sum==="number"&&sum>list.length){throw new ResolveError(`\u30E6\u30FC\u30B6\u30FC\u30B0\u30EB\u30FC\u30D7\u4E00\u89A7\u304C ${sum} \u4EF6\u4E2D ${list.length} \u4EF6\u3067\u5207\u308A\u8A70\u3081\u3089\u308C\u305F\u305F\u3081\u3001\u540D\u524D\u3067\u89E3\u6C7A\u3067\u304D\u307E\u305B\u3093\u3002ID \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002`,res.status)}return list});return resolveNamed(input,namedFromRows(rows,"\u30E6\u30FC\u30B6\u30FC\u30B0\u30EB\u30FC\u30D7",
140
+ userGroupRow),{flag,label:"\u30E6\u30FC\u30B6\u30FC\u30B0\u30EB\u30FC\u30D7",scope:TENANT_SCOPE_LABEL})}async apiKey(input,flag="<\u30AD\u30FC>"){const trimmed=input.trim();if(trimmed==="")throw new UsageError(`${flag} \u306B\u7A7A\u306E\u5024\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`);if(UUID_RE.test(trimmed))return{id:trimmed,name:trimmed};const res=await this.get(API_KEYS_PATH);if(res.status===401||res.status===403){throw new ApiError(res.status,isRecord(res.json)?res.json:null,"GET",API_KEYS_PATH)}
141
+ const rows=rawListFrom(res,"list","API \u30AD\u30FC");return resolveNamed(trimmed,namedFromRows(rows,"API \u30AD\u30FC",apiKeyRow),{flag,label:"API \u30AD\u30FC",scope:TENANT_SCOPE_LABEL})}async apiKeyPermissions(){const path2=`${API_KEYS_PATH}/permissions`;const res=await this.get(path2);if(res.status===401||res.status===403){throw new ApiError(res.status,isRecord(res.json)?res.json:null,"GET",path2)}return rawListFrom(res,"permissions","API \u30AD\u30FC\u306E\u6A29\u9650")}async userGroupDetail(id){
142
+ if(!isSafePathSegment(id)){throw new ResolveError(`\u30E6\u30FC\u30B6\u30FC\u30B0\u30EB\u30FC\u30D7 ID \u3092\u30D1\u30B9\u306B\u4F7F\u3048\u307E\u305B\u3093: ${id}\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}const res=await this.get(`${USER_GROUPS_PATH}/${encodeURIComponent(id)}`);if(!res.ok){throw new ResolveError(`\u30E6\u30FC\u30B6\u30FC\u30B0\u30EB\u30FC\u30D7\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F: ${id}\uFF08HTTP ${res.status}\
143
+ \uFF09\u3002\u30B0\u30EB\u30FC\u30D7\u306E\u8A73\u7D30\u306F\u7BA1\u7406\u8005\u3060\u3051\u304C\u8AAD\u3081\u307E\u3059\u3002`,res.status)}const body=isRecord(res.json)?res.json:{};const group=body["usergroup_data"];if(group===null)throw new ResolveError(`\u30E6\u30FC\u30B6\u30FC\u30B0\u30EB\u30FC\u30D7\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093: ${id}`,404);const members=body["user_list"];if(!isRecord(group)||!Array.isArray(members)){throw new ResolveError("\u30E6\u30FC\u30B6\u30FC\u30B0\u30EB\u30FC\u30D7\u306E\u5FDC\u7B54\u306B usergroup_data / u\
144
+ ser_list \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002",res.status)}return{group,members:members.filter(isRecord)}}invalidateUserGroups(){removeCache({profile:this.options.profile,scope:"user-groups",project:TENANT_CACHE_KEY},this.options.env!==void 0?{env:this.options.env}:{})}invalidateInquiryCategories(){removeCache({profile:this.options.profile,scope:"inquiry-categories",project:TENANT_CACHE_KEY},this.options.env!==void 0?
145
+ {env:this.options.env}:{})}async notificationCategory(input,flag="--category"){const rows=await this.cached("notification-categories",TENANT_CACHE_KEY,async()=>rawListFrom(await this.get(`${NOTIFICATIONS_PATH}/categories`),"categories","\u901A\u77E5\u30AB\u30C6\u30B4\u30EA"));return resolveNamed(input,namedFromRows(rows,"\u901A\u77E5\u30AB\u30C6\u30B4\u30EA",notificationCategoryRow),{flag,label:"\u901A\u77E5\u30AB\u30C6\u30B4\u30EA",scope:TENANT_SCOPE_LABEL})}async notificationUnreadCount(category){
146
+ if(category===null){const res=await this.get(`${NOTIFICATIONS_PATH}/counts`);const count=res.ok&&isRecord(res.json)?res.json["unread_count"]:void 0;if(typeof count!=="number"||!Number.isSafeInteger(count)||count<0){throw new ResolveError(res.ok?"\u901A\u77E5\u4EF6\u6570\u306E\u5FDC\u7B54\u306B unread_count \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002":`\u901A\u77E5\u306E\u672A\u8AAD\u4EF6\u6570\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08HTTP ${res.
147
+ status}\uFF09\u3002\u63A5\u7D9A\u5148\u3068\u30ED\u30B0\u30A4\u30F3\u72B6\u614B\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`,res.status)}return{count,complete:true}}let total=0;let cursor=null;for(let page=0;page<NOTIFICATION_COUNT_MAX_PAGES;page++){const query=new URLSearchParams({read_status:"unread",category,limit:String(NOTIFICATION_COUNT_PAGE_LIMIT)});if(cursor!==null)query.set("cursor",cursor);const res=await this.get(`${NOTIFICATIONS_PATH}?${query.toString()}`);total+=rawListFrom(
148
+ res,"list","\u901A\u77E5").length;const body=res.json;if(body["has_more"]===false)return{count:total,complete:true};if(body["has_more"]!==true||typeof body["next_cursor"]!=="string"||body["next_cursor"]===""){throw new ResolveError("\u901A\u77E5\u4E00\u89A7\u306E\u5FDC\u7B54\u306E has_more / next_cursor \u3092\u89E3\u91C8\u3067\u304D\u307E\u305B\u3093\u3002\u672A\u8AAD\u4EF6\u6570\u3092\u6570\u3048\u3089\u308C\u306A\u3044\u305F\u3081\u4E2D\u65AD\u3057\u307E\u3057\u305F\u3002",res.status)}cursor=
149
+ body["next_cursor"]}return{count:total,complete:false}}async faqCategory(input,flag="--category"){const value=input.trim();if(value==="")throw new UsageError(`${flag} \u306B\u7A7A\u306E\u5024\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,"\u30AB\u30C6\u30B4\u30EA\u306F twp faq categories \u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002");const res=await this.get(`${FAQS_PATH}/categories`);const rows=res.ok&&isRecord(res.json)?res.json["categories"]:void 0;if(!Array.isArray(rows)){throw new ResolveError(
150
+ res.ok?"FAQ \u30AB\u30C6\u30B4\u30EA\u4E00\u89A7\u306E\u5FDC\u7B54\u306B categories \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002":`FAQ \u306E\u30AB\u30C6\u30B4\u30EA\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08HTTP ${res.status}\uFF09\u3002\u63A5\u7D9A\u5148\u3068\u30ED\u30B0\u30A4\u30F3\u72B6\u614B\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`,res.status)}const records=rows.filter(
151
+ isRecord);const hit=records.find(row=>row["code"]===value||row["label"]===value);if(hit===void 0||typeof hit["code"]!=="string"){const known=records.map(row=>`${String(row["code"])}\uFF08${String(row["label"])}\uFF09`).join(" / ");throw new UsageError(`FAQ \u306E\u30AB\u30C6\u30B4\u30EA\u306B\u3042\u308A\u307E\u305B\u3093\uFF08${flag}\uFF09: ${value}`,`\u6307\u5B9A\u3067\u304D\u308B\u306E\u306F ${known} \u3067\u3059\u3002`)}return hit["code"]}async announcementUnreadCount(){const res=await this.
152
+ get(`${ANNOUNCEMENTS_PATH}/counts`);const count=res.ok&&isRecord(res.json)?res.json["unread_count"]:void 0;if(typeof count!=="number"||!Number.isSafeInteger(count)||count<0){throw new ResolveError(res.ok?"\u304A\u77E5\u3089\u305B\u4EF6\u6570\u306E\u5FDC\u7B54\u306B unread_count \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002":`\u304A\u77E5\u3089\u305B\u306E\u672A\u8AAD\u4EF6\u6570\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08HTTP ${res.
153
+ status}\uFF09\u3002\u63A5\u7D9A\u5148\u3068\u30ED\u30B0\u30A4\u30F3\u72B6\u614B\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`,res.status)}return count}async namedList(path2,envelope,label,map){return namedListFrom(await this.get(path2),envelope,label,map)}async cached(scope,projectId,load){const key={profile:this.options.profile,scope,project:projectId};const options={...this.options.env!==void 0?{env:this.options.env}:{},refresh:this.options.refresh,...this.options.ttlMs!==void 0?
154
+ {ttlMs:this.options.ttlMs}:{},...this.options.now!==void 0?{now:this.options.now}:{}};const hit=readCache(key,options);if(hit!==null&&Array.isArray(hit))return hit;const fresh=await load();writeCache(key,fresh,options);return fresh}applyAlias(kind,input){const table=this.options.aliases?.[kind];if(table===void 0)return input;const needle=input.trim().toLowerCase();for(const[from,to]of Object.entries(table)){if(from.trim().toLowerCase()===needle&&typeof to==="string"&&to.trim()!=="")return to}return input}async backlogSpaces(){
155
+ return this.cached("backlog-spaces",BACKLOG_SPACES_CACHE_KEY,()=>this.namedList(`${BACKLOG_BASE_PATH}/spaces`,"spaces","Backlog \u30B9\u30DA\u30FC\u30B9",backlogSpaceRow))}async backlogSpace(ref,flag="--space"){return resolveNamed(ref,await this.backlogSpaces(),{flag,label:"Backlog \u30B9\u30DA\u30FC\u30B9",scope:BACKLOG_SCOPE_LABEL})}async backlogDefaultSpace(){const spaces=await this.backlogSpaces();if(spaces.length===1)return spaces[0];if(spaces.length===0){throw new UsageError("Backlog \u30B9\u30DA\u30FC\u30B9\u304C\
156
+ 1\u4EF6\u3082\u767B\u9332\u3055\u308C\u3066\u3044\u307E\u305B\u3093","TWP \u306E\u5916\u90E8\u9023\u643A\u8A2D\u5B9A\u3067 Backlog \u30B9\u30DA\u30FC\u30B9\u3092\u767B\u9332\u3057\u3066\u304F\u3060\u3055\u3044\uFF08twp backlog space list \u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\uFF09\u3002")}throw new UsageError(`Backlog \u30B9\u30DA\u30FC\u30B9\u304C ${spaces.length} \u4EF6\u767B\u9332\u3055\u308C\u3066\u3044\u308B\u305F\u3081\u3001--space \u30671\u3064\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044`,
157
+ "twp backlog space list \u3067 ID \u3068\u30B9\u30DA\u30FC\u30B9URL\u3092\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002\u6BCE\u56DE\u306E\u6307\u5B9A\u3092\u7701\u304F\u306B\u306F twp configure \u3067\u65E2\u5B9A\u306E Backlog \u30B9\u30DA\u30FC\u30B9\u3092\u8A2D\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}async backlogProjects(spaceId){return this.cached("backlog-projects",spaceId,()=>this.namedList(backlogSpacePath(spaceId,"/projects"),"projects","Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8",
158
+ backlogProjectRow))}async backlogStatuses(spaceId,projectId){return this.cached("backlog-statuses",`${spaceId}/${projectId}`,()=>this.namedList(backlogSpacePath(spaceId,`/projects/${encodeURIComponent(assertBacklogPathSegment(projectId,"Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8 ID"))}/statuses`),"statuses","Backlog \u30B9\u30C6\u30FC\u30BF\u30B9",backlogStatusRow))}async backlogUsers(spaceId,projectId){return this.cached("backlog-users",`${spaceId}/${projectId}`,()=>this.namedList(backlogSpacePath(
159
+ spaceId,`/projects/${encodeURIComponent(assertBacklogPathSegment(projectId,"Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8 ID"))}/users`),"users","Backlog \u30E6\u30FC\u30B6\u30FC",backlogUserRow))}async redmineServers(){return this.cached("redmine-servers",REDMINE_SERVERS_CACHE_KEY,()=>this.namedList(`${REDMINE_BASE_PATH}/servers`,"items","Redmine \u63A5\u7D9A\u5148",redmineServerRow))}async redmineServer(ref){return resolveNamed(ref,await this.redmineServers(),{flag:"--space",label:"Redmine \u63A5\u7D9A\u5148",
160
+ scope:REDMINE_SCOPE_LABEL})}async redmineDefaultServer(){const servers=await this.redmineServers();if(servers.length===1)return servers[0];if(servers.length===0){throw new UsageError("Redmine \u306E\u63A5\u7D9A\u5148\u304C1\u4EF6\u3082\u767B\u9332\u3055\u308C\u3066\u3044\u307E\u305B\u3093","TWP \u306E\u500B\u4EBA\u8A2D\u5B9A\uFF08\u5916\u90E8\u30B7\u30B9\u30C6\u30E0\u9023\u643A\uFF09\u3067 Redmine \u3092\u767B\u9332\u3057\u3066\u304F\u3060\u3055\u3044\uFF08twp redmine space list \u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\uFF09\u3002")}
161
+ throw new UsageError(`Redmine \u306E\u63A5\u7D9A\u5148\u304C ${servers.length} \u4EF6\u767B\u9332\u3055\u308C\u3066\u3044\u308B\u305F\u3081\u3001--space \u30671\u3064\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044`,"twp redmine space list \u3067 ID \u3068\u63A5\u7D9A\u5148URL\u3092\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002")}async ms365Teams(){return this.cached("ms365-teams",MS365_TEAMS_CACHE_KEY,()=>this.ms365NamedList(ms365Path("/teams/teams"),"Teams \u306E\u30C1\u30FC\u30E0"))}async ms365Team(ref){
162
+ return resolveNamed(ref,await this.ms365Teams(),{flag:"--team",label:"\u30C1\u30FC\u30E0",scope:MS365_SCOPE_LABEL})}async ms365Channels(teamId){return this.cached("ms365-channels",teamId,()=>this.ms365NamedList(ms365Path(`/teams/teams/${ms365Segment(teamId,"\u30C1\u30FC\u30E0 ID")}/channels`),"Teams \u306E\u30C1\u30E3\u30CD\u30EB"))}async ms365Channel(teamId,ref){return resolveNamed(ref,await this.ms365Channels(teamId),{flag:"--channel",label:"\u30C1\u30E3\u30CD\u30EB",scope:"\u3053\u306E\u30C1\u30FC\u30E0"})}async ms365FindChat(chatId){
163
+ const path2=ms365Path("/teams/chats");let cursor=null;let seen=0;let common=null;for(let page=1;page<=MS365_CHAT_FIND_MAX_PAGES;page+=1){const query=`top=${MS365_CHAT_PAGE_TOP}&expand=members${cursor===null?"":`&skiptoken=${encodeURIComponent(cursor)}`}`;const res=await this.get(`${path2}?${query}`);if(!res.ok){throw new ResolveError(ms365NotConnectedGuidance(res.json)??`Teams \u306E\u30C1\u30E3\u30C3\u30C8\u4E00\u89A7\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08HTTP ${res.
164
+ status}\uFF09\u3002\u63A5\u7D9A\u5148\u3068\u30ED\u30B0\u30A4\u30F3\u72B6\u614B\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`,res.status)}const data=isRecord(res.json)?res.json["data"]:void 0;const value=isRecord(data)?data["value"]:void 0;if(!isRecord(data)||!Array.isArray(value)){throw new ResolveError("Teams \u306E\u30C1\u30E3\u30C3\u30C8\u4E00\u89A7\u306E\u5FDC\u7B54\u306B data.value \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
162
165
  res.status)}const rows=value.filter(isRecord);for(const row of rows){const ids=new Set(ms365MemberUserIds(row));common=common===null?ids:new Set([...common].filter(id=>ids.has(id)))}seen+=rows.length;const hit=rows.find(row=>row["id"]===chatId);if(hit!==void 0)return{chat:hit,commonUserIds:seen>=2&&common!==null?[...common]:[]};const next=data["@odata.nextLink"];if(next===void 0||next===null)return null;const parsed=typeof next==="string"?graphNextCursor(next):null;if(parsed===null||parsed.kind!==
163
166
  "skiptoken"){throw new ResolveError("Teams \u306E\u30C1\u30E3\u30C3\u30C8\u4E00\u89A7\u306E\u7D9A\u304D\uFF08@odata.nextLink\uFF09\u3092\u8AAD\u3081\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002",res.status)}cursor=parsed.value}throw new UsageError(`\u30C1\u30E3\u30C3\u30C8\u304C\u591A\u3059\u304E\u308B\u305F\u3081\u4E00\u89A7\u304B\u3089\u63A2\u3057\u304D\u308C\u307E\u305B\u3093\u3067\u3057\u305F\uFF08${MS365_CHAT_FIND_MAX_PAGES} \u30DA\u30FC\u30B8\u3092\u8D85\u3048\u307E\u3057\u305F\
164
167
  \uFF09`,"--name \u3067\u8868\u793A\u540D\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}async ms365Message(messageId){const res=await this.get(ms365Path(`/outlook/messages/${ms365Segment(messageId,"\u30E1\u30FC\u30EBID")}`));if(!res.ok){throw new ResolveError(ms365NotConnectedGuidance(res.json)??`\u5143\u306E\u30E1\u30FC\u30EB\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08HTTP ${res.status}\uFF09\u3002\u30E1\u30FC\u30EBID \u306F twp outlook mail list \u306E id \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002`,
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{parseCsvRecords}from"./chunk-ZFSQJAYZ.js";import{readCsvFileText}from"./chunk-QLENN5DD.js";import{cacheNote,createFlags,fieldBody,hasAnyField,idSegment,masterItem,masterRows,targetId,updateFlags}from"./chunk-5ZTQEXXS.js";import{charCount,readBody}from"./chunk-HEH3PUW2.js";import{repeatedValues}from"./chunk-VGT2EGH6.js";import{QUALIFICATIONS_PATH,SKILLS_PATH,SKILL_CATEGORIES_PATH,resolveNamed}from"./chunk-MSQ4ZGMA.js";import{ULID_RE,isSafePathSegment}from"./chunk-HVZUXLQ4.js";
3
+ import{parseCsvRecords}from"./chunk-ZFSQJAYZ.js";import{readCsvFileText}from"./chunk-QLENN5DD.js";import{cacheNote,createFlags,fieldBody,hasAnyField,idSegment,masterItem,masterRows,targetId,updateFlags}from"./chunk-IOVZDBAD.js";import{charCount,readBody}from"./chunk-HEH3PUW2.js";import{repeatedValues}from"./chunk-VGT2EGH6.js";import{QUALIFICATIONS_PATH,SKILLS_PATH,SKILL_CATEGORIES_PATH,resolveNamed}from"./chunk-A7MM5WSC.js";import{ULID_RE,isSafePathSegment}from"./chunk-HVZUXLQ4.js";
4
4
  import{ApiError,MultipartBody}from"./chunk-JA5A6UJ2.js";import{nonEmpty}from"./chunk-MI6HVYR2.js";import{requireResolved,withResolved}from"./chunk-PS5QFKHB.js";import{acknowledgement,isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiRejectedError,ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import fs from"fs";import path from"path";var GROUPED_PATH="/api/v2/organization/skills/grouped";var SKILL_MAP_PATH="/api/v2/organization/skill-map";var USERS_LIST_PATH="/api/v2/admin/users/list";var USERS_PAGE_LIMIT=100;var USERS_MAX_PAGES=50;var HR_FORBIDDEN="HR\u7BA1\u7406\u8005\u306E\u6A29\u9650\u304C\u5FC5\u8981\u3067\u3059\u3002\u30B9\u30AD\u30EB\u30DE\u30C3\u30D7\uFF08twp skill map / who\uFF09\u306F\u4EBA\u4E8B\u7BA1\u7406\u306E\u7BA1\u7406\u8005\u3060\u3051\u304C\u53C2\u7167\u3067\u304D\u307E\u3059";function groupedSkillRows(body){
5
5
  const categories=isRecord(body)?body["categories"]:void 0;if(!Array.isArray(categories)){throw new ApiResponseError("\u30B9\u30AD\u30EB\u4E00\u89A7\u306E\u5FDC\u7B54\u306B categories \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return categories.flatMap(group=>{const category=isRecord(group)&&isRecord(group["category"])?group["category"]:{};const skills=isRecord(group)&&Array.isArray(group["skills"])?group["\
6
6
  skills"]:[];return skills.filter(isRecord).map(skill=>({...skill,category_id:skill["category_id"]??category["id"]??null,category_name:category["name"]??null}))})}function groupedCategories(body){groupedSkillRows(body);return body["categories"]}function skillMatrix(body){const matrix=isRecord(body)?body["matrix"]:void 0;if(!Array.isArray(matrix)){throw new ApiResponseError("\u30B9\u30AD\u30EB\u30DE\u30C3\u30D7\u306E\u5FDC\u7B54\u306B matrix \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\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-XPZUORRN.js";import{inspectLocalFile}from"./chunk-ODW2QKMP.js";import{checkUploadQuota}from"./chunk-V64CGX7V.js";import{createFlags,fieldBody,hasAnyField,updateFlags}from"./chunk-5ZTQEXXS.js";import{booleanText}from"./chunk-JJSBBWJ5.js";import{CUSTOMERS_PATH,isExactNumericId}from"./chunk-MSQ4ZGMA.js";import{isSafePathSegment}from"./chunk-HVZUXLQ4.js";import{
3
+ import{CUSTOMER_FLAG,CUSTOMER_LICENSE,childForbidden,levelForbidden,prepareCustomerFlag}from"./chunk-VSVJQNIB.js";import{inspectLocalFile}from"./chunk-6H5TPSXU.js";import{checkUploadQuota}from"./chunk-V64CGX7V.js";import{createFlags,fieldBody,hasAnyField,updateFlags}from"./chunk-IOVZDBAD.js";import{booleanText}from"./chunk-JJSBBWJ5.js";import{CUSTOMERS_PATH,isExactNumericId}from"./chunk-A7MM5WSC.js";import{isSafePathSegment}from"./chunk-HVZUXLQ4.js";import{
4
4
  ApiError}from"./chunk-JA5A6UJ2.js";import{nonEmpty}from"./chunk-MI6HVYR2.js";import{requireResolved,withResolved}from"./chunk-PS5QFKHB.js";import{acknowledgement,isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import{NotLoggedInError,SessionExpiredError}from"./chunk-XNLIEUAW.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={