@tocca-systems/twp-cli 0.38.0 → 0.40.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.public.md +22 -0
- package/README.md +213 -3
- package/dist/{api-command-BZVUZIOB.js → api-command-7PZCMQO5.js} +4 -4
- package/dist/{app-SNRFIHTQ.js → app-PNHDMD3V.js} +4 -4
- package/dist/{backlog-33ELMSV6.js → backlog-ISEIWKMQ.js} +1 -1
- package/dist/chunk-43OMEGNH.js +94 -0
- package/dist/{chunk-HAIZHSNZ.js → chunk-6ZUVESMI.js} +1 -1
- package/dist/chunk-7ACENLLZ.js +147 -0
- package/dist/{chunk-QBA6THJ5.js → chunk-B7YCG2T7.js} +1 -1
- package/dist/{chunk-IRT7VFG4.js → chunk-BPCK5RAB.js} +1 -1
- package/dist/{chunk-ADQD5OPN.js → chunk-BZ7ULFR3.js} +15 -14
- package/dist/{chunk-ZST7XESB.js → chunk-BZAXQOLB.js} +54 -43
- package/dist/chunk-EOSSFTNG.js +4 -0
- package/dist/chunk-FKS2Z34P.js +70 -0
- package/dist/{chunk-57HDZYSN.js → chunk-H54MGGHB.js} +1 -1
- package/dist/{chunk-TAN5I2DP.js → chunk-I4ARX6NM.js} +1 -1
- package/dist/chunk-L6AHCTQZ.js +8 -0
- package/dist/chunk-PEM3HR7L.js +58 -0
- package/dist/{chunk-VECUCVIY.js → chunk-PKWMJIBM.js} +1 -1
- package/dist/{chunk-BUZKNZ45.js → chunk-UT4FACHN.js} +5 -3
- package/dist/chunk-V3GQEUYI.js +16 -0
- package/dist/{chunk-FEOST3GF.js → chunk-VK5T7ULK.js} +1 -1
- package/dist/{chunk-LS7P3IWP.js → chunk-WV3ZKUF4.js} +25 -23
- package/dist/{chunk-OHIERIBW.js → chunk-X5IVIOGL.js} +1 -1
- package/dist/chunk-XN5TUZOT.js +48 -0
- package/dist/cli.js +247 -8
- package/dist/{commands-7PGS2PTH.js → commands-PG5VVBKO.js} +1 -1
- package/dist/company-4Z4JJVA7.js +71 -0
- package/dist/{completion-3X7HPIPM.js → completion-EFGQJDIU.js} +1 -1
- package/dist/contract-BQ76SGWV.js +86 -0
- package/dist/{department-PVUB3ZPI.js → department-YHZRSWLB.js} +1 -1
- package/dist/deposit-U4AVQH5O.js +4 -0
- package/dist/estimate-U2K7DPGH.js +173 -0
- package/dist/{inquiry-CUK2LWQK.js → inquiry-5D4U6CLU.js} +1 -1
- package/dist/invoice-2VLK2BFV.js +210 -0
- package/dist/{job-title-CZRZFVUU.js → job-title-G7MIYWVA.js} +1 -1
- package/dist/{knowledge-XYLG42MB.js → knowledge-7QDC775Q.js} +1 -1
- package/dist/{leave-DL3JPO5I.js → leave-GHFJOGNC.js} +1 -1
- package/dist/{media-CMNIZUPY.js → media-XO6X3UQT.js} +1 -1
- package/dist/{notification-ULATH7AC.js → notification-SUSR5NGQ.js} +1 -1
- package/dist/{oneshot-RYWJ6ECA.js → oneshot-UGYF2PLB.js} +1 -1
- package/dist/{position-ICOGEMRG.js → position-UY33ETLX.js} +1 -1
- package/dist/{prospect-MB2OP7L2.js → prospect-G426O6XL.js} +1 -1
- package/dist/purchase-3GGAQRE6.js +214 -0
- package/dist/receivable-TNH4KCUO.js +4 -0
- package/dist/{registry-XBYUPKQQ.js → registry-ODJB7AS3.js} +1 -1
- package/dist/{render-MTSSHDAZ.js → render-F4MRN2FQ.js} +1 -1
- package/dist/{report-JL7UJB4G.js → report-UC2PCK7B.js} +1 -1
- package/dist/run-GDYEOQQK.js +4 -0
- package/dist/sales-master-ORLR5VK4.js +71 -0
- package/dist/sales-numbering-MBFKVR2C.js +4 -0
- package/dist/supplier-payment-AFJ7G6AP.js +110 -0
- package/dist/{task-CMCHUX2D.js → task-S3BBBELE.js} +2 -2
- package/dist/{user-5JXFO56G.js → user-O7H5PD4N.js} +1 -1
- package/dist/{workflow-XBUMFS2G.js → workflow-2YL2OF2Y.js} +1 -1
- package/package.json +1 -1
- package/dist/chunk-GLBQAXWC.js +0 -6
- package/dist/chunk-O4NSYHR4.js +0 -3
- package/dist/company-GMCHRVHF.js +0 -161
- package/dist/run-6JRHCC67.js +0 -4
- package/dist/sales-GJKW7VVG.js +0 -4
package/CHANGELOG.public.md
CHANGED
|
@@ -11,6 +11,28 @@
|
|
|
11
11
|
`CHANGELOG.md` に残してあります。顧客向けの履歴は public 公開以降を対象とします。
|
|
12
12
|
-->
|
|
13
13
|
|
|
14
|
+
## 0.40.0
|
|
15
|
+
|
|
16
|
+
仕入を CLI から扱えるようになりました。仕入(注文書)の一覧・詳細・作成・更新・削除・複製・一覧のメモ、見積書・注文書・注文請書の添付(登録・版の差替え・ダウンロード)、添付した見積書からの AI 読み取り(`twp purchase`)に対応しました。
|
|
17
|
+
|
|
18
|
+
支払を CLI から扱えるようになりました。支払(仕入先へ払うお金の台帳)の一覧・詳細・登録・更新・削除とステータスの一括変更、毎月の支払を生成する支払先マスタの一覧・詳細・登録・更新・削除に対応しました(`twp supplier-payment`)。
|
|
19
|
+
|
|
20
|
+
見積書・注文書・注文請書・請求書・納品書・検収書と、仕入の注文書・注文請書を CLI から PDF で書き出せるようになりました。画面の「PDF出力」と同じ帳票で、`--kind` で書類の種類を選べます。
|
|
21
|
+
|
|
22
|
+
見積・請求・仕入の番号の振り方(番号ルール)、見積フォーマット、金額の端数処理(四捨五入・切り上げ・切り捨て)を CLI から設定できるようになりました。番号ルールの一覧には次に発行される番号が出て、変更するときは変更前と変更後の番号を確かめてから実行できます。
|
|
23
|
+
|
|
24
|
+
見積書・請求書に載る自社情報を CLI から設定できるようになりました。事業所・振込先・印影(画像の登録を含む)の一覧・詳細・登録・更新・削除と、見積書を AI で読み取るときの項目の対応表(`twp purchase ai-mapping`)に対応しました。振込先の一覧では口座番号を伏字で表示します。
|
|
25
|
+
|
|
26
|
+
## 0.39.0
|
|
27
|
+
|
|
28
|
+
見積を CLI から作成・更新・削除できるようになりました(`twp estimate create` / `update` / `delete`)。社内共有メモ・請求の紐づけ・関連入金・部署按分・案件書類(注文書・個別契約書など)の登録と差替え・ダウンロード、注文書からの注文書番号の読み取りにも対応しました。
|
|
29
|
+
|
|
30
|
+
請求を CLI から作成・更新・削除できるようになりました(`twp invoice create` / `update` / `delete`)。取消(無効)とその解除、統合請求書の作成、社内共有メモ、CSV と MF 会計仕訳の書き出し、請求書メールの送信、支払いリンクの作成にも対応しました。
|
|
31
|
+
|
|
32
|
+
取引契約を CLI から一覧・作成・更新・削除できるようになりました(`twp contract`)。自動請求テンプレートの管理と発行履歴の参照にも対応しました(`twp invoice auto-template`)。有効なテンプレートを作成・更新するときは、次に請求が発行される日を事前に表示します。
|
|
33
|
+
|
|
34
|
+
入金と売掛金を CLI から扱えるようになりました。入金の登録・更新・削除・CSV 出力、請求への引当(CSV での一括を含む)と手数料分の引き上げ、入金予定からの入金と引当のまとめ登録(`twp deposit`)、売掛金残高の表示と CSV 出力、月次の締めと締めの解除(`twp receivable`)に対応しました。
|
|
35
|
+
|
|
14
36
|
## 0.38.0
|
|
15
37
|
|
|
16
38
|
wiki・ノート・議事録を CLI から読めるようになりました(`twp wiki` / `twp note` / `twp meeting`)。`get --output text` で本文を文書として読めます。
|
package/README.md
CHANGED
|
@@ -24,7 +24,7 @@ TWP(Tocca Working Platform)を、ターミナルから使うための CLI
|
|
|
24
24
|
| **できる** | `twp department` / `twp position` / `twp job-title` による組織マスタ(部署・役職・職位)の一覧・取得・作成・更新・削除と、部署ツリー・部署の所属者の表示。作成・更新・削除は管理者の権限が要ります |
|
|
25
25
|
| **できる** | `twp inquiry category` による問い合わせカテゴリの一覧・取得・作成・更新(通知先の設定・末尾への並べ替えを含む)。取得・作成・更新は問い合わせ機能の管理者の権限が要ります |
|
|
26
26
|
| **できる** | `twp notification` による自分宛ての通知の一覧(未読・カテゴリ・語で絞り込み)・詳細・未読件数・カテゴリ一覧と、1件ずつ・まとめての既読化 |
|
|
27
|
-
| **できる** | `twp estimate` / `twp invoice` による販売管理の見積・請求の一覧(語・ステータス・取引先・プロジェクト・担当者・日付・回収状況で絞り込み)と詳細、`twp company` / `twp customer` による取引先企業・顧客の一覧と詳細(名前でも指定できます)、`twp customer` による顧客の登録・更新・削除(担当者・対応履歴ごと。ID を並べたファイルでの一括削除を含む)と担当者・対応履歴の一覧・詳細・登録・更新・削除、全顧客の最近の対応、名刺画像の登録・裏面メモ・削除、企業をまたいだ人物の一覧・詳細・CSV 書き出し、登録前の類似企業検索、`twp company` による取引先企業(仕入先を含む)の登録・更新・削除、`twp prospect` によるアプローチ先(見込客)の一覧・登録・更新・削除・CSV での一括登録と書き出し・重複確認・顧客への昇格と対応履歴の記録。販売管理・顧客管理の権限が要ります |
|
|
27
|
+
| **できる** | `twp estimate` / `twp invoice` による販売管理の見積・請求の一覧(語・ステータス・取引先・プロジェクト・担当者・日付・回収状況で絞り込み)と詳細、`twp estimate` による見積の作成・更新・削除・社内共有メモ・既存の請求の紐づけ・関連入金・部署按分・案件書類(注文書・個別契約書など)の登録・版の差替え・ダウンロードと、注文書からの注文書番号の読み取り・見積書/注文書/注文請書の PDF の書き出し、`twp invoice` による請求の作成・更新・削除・取消と取消解除・統合請求書の作成・社内共有メモ・CSV/MF 会計仕訳の書き出し・請求書メールの送信・支払いリンクの作成・請求書/納品書/検収書の PDF の書き出し、`twp contract` による取引契約(見積から作る販売管理の契約)の一覧・詳細・作成・更新・削除、`twp invoice auto-template` による自動請求テンプレートの一覧・詳細・作成・更新・削除と発行履歴の参照(販売管理の管理者)、`twp deposit` による入金の一覧・詳細・登録・更新・削除・CSV 書き出し、請求への引当(CSV での一括を含む)・解除・手数料分の引き上げ、入金予定からの入金と引当のまとめ登録、`twp receivable` による売掛金残高の表示と CSV 書き出し・月次の締めと締めの解除(どちらも販売管理の管理者)、`twp purchase` による仕入(注文書)の一覧・詳細・作成・更新・削除・複製・一覧のメモ・注文書/注文請書の PDF の書き出しと、添付書類(見積書・注文書・注文請書)の登録・版の差替え・ダウンロード、添付した見積書からの AI 読み取り(候補を出すだけで仕入は変えません)、`twp supplier-payment` による支払(仕入先へ払うお金の台帳)の一覧・詳細・登録・更新・削除・ID を並べたファイルでのステータスの一括変更と、毎月の支払を生成する支払先マスタの一覧・詳細・登録・更新・削除(どちらも販売管理の管理者)、`twp business-place` / `twp payee` / `twp seal-impression` による帳票に載る自社の事業所・振込先・印影(画像の登録を含む)の一覧・詳細・登録・更新・削除(書き込みは販売管理の管理者。振込先の一覧は口座番号を伏字にします)、`twp purchase ai-mapping` による見積書 AI 読み取りのマッピング表の一覧・詳細・登録・更新・削除と反映先の選択肢、`twp estimate no-rule` / `twp invoice no-rule` / `twp purchase no-rule` による見積・請求・仕入の番号ルールの一覧(次に発行される番号つき)・詳細・登録・更新・削除と、`twp estimate format` による見積フォーマット(書類を作るときの既定値の組)の一覧・詳細・作成・更新・削除、`twp rounding-setting` による端数処理(金額の丸め方)の表示と変更(番号ルールと端数処理の変更は `--yes` が要り、変更前・変更後を出します)、`twp company` / `twp customer` による取引先企業・顧客の一覧と詳細(名前でも指定できます)、`twp customer` による顧客の登録・更新・削除(担当者・対応履歴ごと。ID を並べたファイルでの一括削除を含む)と担当者・対応履歴の一覧・詳細・登録・更新・削除、全顧客の最近の対応、名刺画像の登録・裏面メモ・削除、企業をまたいだ人物の一覧・詳細・CSV 書き出し、登録前の類似企業検索、`twp company` による取引先企業(仕入先を含む)の登録・更新・削除、`twp prospect` によるアプローチ先(見込客)の一覧・登録・更新・削除・CSV での一括登録と書き出し・重複確認・顧客への昇格と対応履歴の記録。販売管理・顧客管理の権限が要ります |
|
|
28
28
|
| **できる** | `twp media` によるメディアライブラリのファイルのアップロード・一覧・ダウンロード・削除(ゴミ箱へ移す)・一括操作(公開・非公開・アーカイブ・移動・削除・復元・ZIP ダウンロード)、`twp storage get` によるストレージ使用量の確認(管理者) |
|
|
29
29
|
| **できる** | `twp attendance` による自分の勤怠の参照(いまの打刻状態・打刻の履歴・月の勤怠表)と打刻、管理者向けの残業サマリ(36協定を含む)・締め状況の参照 |
|
|
30
30
|
| **できる** | `twp leave` による有給の残日数・取得履歴・付与履歴の参照と有給の申請(`twp leave request`)、`twp workchange list` / `twp shift list` による月の勤務変更・シフトの参照(`--me` で自分の分・無ければ全員分=勤怠の管理者) |
|
|
@@ -367,9 +367,219 @@ twp customer get <顧客>
|
|
|
367
367
|
- `get <見積ID>` / `get <請求ID>` は一覧の `id` 列の数字です。見積番号・請求番号で探すなら `list --keyword <番号>` を使ってください
|
|
368
368
|
- 請求の一覧は画面と同じく、統合請求書を本体1行で出し、統合元の請求はその `children` に入ります
|
|
369
369
|
- 一覧は **ページ番号で辿ります**(`--cursor` はページ番号・`--limit` は1ページの件数でサーバの上限は100)。並びは登録の新しい順(ID の降順)に固定しています。絞り込み全体の件数と合計金額は stderr に出ます
|
|
370
|
-
-
|
|
370
|
+
- 画面にあるそれ以外の絞り込み(確度・見積区分・部署など)はまだありません(見積・請求の書き込みは次の2節、顧客・取引先はその次の節。`twp api /api/v2/sales/estimates --query-param reliability_list=A` のように到達できます。`twp api` はこの一覧も最後のページまで自動で辿ります。1ページだけなら `--no-paginate`、特定のページだけなら `--query-param page_no=2 --no-paginate` と指定します)
|
|
371
371
|
- ヘルプは `twp estimate help` / `twp invoice help` / `twp company help` / `twp customer help`
|
|
372
372
|
|
|
373
|
+
### 見積を書く
|
|
374
|
+
|
|
375
|
+
```
|
|
376
|
+
twp estimate create --generate-cli-skeleton --output json > estimate.json
|
|
377
|
+
twp estimate create --content-file estimate.json
|
|
378
|
+
twp estimate update <見積ID> --generate-cli-skeleton --output json > estimate.json
|
|
379
|
+
twp estimate update <見積ID> --content-file estimate.json
|
|
380
|
+
twp estimate delete <見積ID> --yes
|
|
381
|
+
twp estimate memo <見積ID> (--text <本文> | --text-file <パス> | --clear)
|
|
382
|
+
twp estimate link-invoice <見積ID> (--invoice <請求番号> | --invoice-id <請求ID>) --yes
|
|
383
|
+
twp estimate deposits <見積ID>
|
|
384
|
+
twp estimate download <見積ID> --out <パス.pdf> [--kind estimate|order|order-acceptance] [--force]
|
|
385
|
+
twp estimate allocation list <見積ID>
|
|
386
|
+
twp estimate allocation set <見積ID> --split <部署>=<金額> [--split <部署>=<金額>]... --yes
|
|
387
|
+
twp estimate allocation delete <見積ID> --yes
|
|
388
|
+
twp estimate case-document list|get [<書類ID>] --estimate <見積ID>
|
|
389
|
+
twp estimate case-document create --estimate <見積ID> --file <パス> --type order_form|individual_contract|other --name <書類名>
|
|
390
|
+
twp estimate case-document add-version <書類ID> --estimate <見積ID> --file <パス>
|
|
391
|
+
twp estimate case-document update <書類ID> --estimate <見積ID> [--name <書類名>] [--type <種別>]
|
|
392
|
+
twp estimate case-document delete <書類ID> --estimate <見積ID> --yes
|
|
393
|
+
twp estimate case-document download <書類ID> --estimate <見積ID> --out <パス> [--rev <版番号>] [--force]
|
|
394
|
+
twp estimate scan-order-form --file <パス> --yes
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
- **見積の内容は JSON ファイル(`--content-file`)で渡します。** キーは画面の入力項目と同じ名前(`title` / `estimate_date` / `details` など)で、`--generate-cli-skeleton` がひな形を出し、各キーに渡せる値を stderr に並べます。**サーバに無いキー(打ち間違いを含む。明細・送付先の中も)は、送る前にすべて挙げて止めます**(サーバは知らないキーを黙って捨てるため)。値の誤りはサーバが断り、その理由をそのまま出します
|
|
398
|
+
- `update --generate-cli-skeleton` は今の見積から書き込める項目だけを出します。**変えない項目は消してから送ってください**——`details`(明細)と `recipients`(送付先)は送ると丸ごと置き換わります。`status` を `in_progress` にすると承認申請になります
|
|
399
|
+
- **見積区分を `formal`(正式)にすると、保存したときにサーバが請求を自動で作ります。** 送る前に stderr で知らせます。削除は、契約か人が作った請求が紐づいているとサーバが断ります(自動作成の未確定の請求は見積と一緒に消えます)
|
|
400
|
+
- `memo` は見積一覧のメモ欄(社内共有メモ・5,000 文字まで)だけを書き換えます。見積本体の保存を伴わないので、確定済みの見積にも書けます
|
|
401
|
+
- `link-invoice` は既存の請求の「紐づく見積」を付け替えます。別の見積に紐づいていた請求は、前の見積からの自動反映が外れて戻らないため `--yes` が要ります。請求は `--invoice`(請求番号)か `--invoice-id`(ID)で指定し、送る前に対象の請求と今の紐づけ先を stderr に出します
|
|
402
|
+
- `deposits` は販売管理の「管理者」だけが見られます(金額はこの見積の請求へ引き当てた分だけです)
|
|
403
|
+
- **部署按分(`allocation set`)は全件の置き換えです。** 按分金額の合計は見積金額(税込)と一致させます(一致しなければ送る前に止めます)。割合は画面と同じ式で CLI が計算します。`--dry-run` で置換前と置換後が見られます
|
|
404
|
+
- **案件書類(`case-document`)は見積に紐づく注文書・個別契約書・その他の書類です。** PDF・画像(JPEG/PNG)・Office(Word/Excel)を登録でき、形式の合わないファイルは送る前に止めます。登録・差替え・更新は**顧客管理**の「編集者」以上、削除は「管理者」です(販売管理の権限ではありません)。容量検査・差替え・ダウンロードの扱いは顧客の契約書と同じです
|
|
405
|
+
- **`scan-order-form` はテナントの AI クレジットを消費するので `--yes` が要ります。** 読み取った注文書番号は候補で、見積は変わりません(見積へ入れるなら `update` で `order_no` を送ります)
|
|
406
|
+
- 見積の作成・更新・削除・メモ・紐づけ・按分・注文書の読み取りは販売管理の「メンバー」以上の権限が要ります
|
|
407
|
+
- **帳票の PDF(`twp estimate|invoice|purchase download`)は画面の「PDF出力」と同じものです。** `--kind` を省くと見積書・請求書・(仕入の)注文書を書き出します。見積の `order` は見積から作る注文書、仕入の `order` は仕入先へ出す注文書で、別の書類です。印影・押印の有無はサーバが書類ごとに決めます。既存のファイルは上書きしません(`--force`)。販売管理の「メンバー」以上で、その見積・請求・仕入を閲覧できる人が使えます
|
|
408
|
+
- ヘルプは `twp estimate help` / `twp estimate allocation help` / `twp estimate case-document help`
|
|
409
|
+
|
|
410
|
+
### 請求を書く・出力する・送る
|
|
411
|
+
|
|
412
|
+
```
|
|
413
|
+
twp invoice create --generate-cli-skeleton --output json > invoice.json
|
|
414
|
+
twp invoice create --content-file invoice.json
|
|
415
|
+
twp invoice update <請求ID> --generate-cli-skeleton --output json > invoice.json
|
|
416
|
+
twp invoice update <請求ID> --content-file invoice.json
|
|
417
|
+
twp invoice delete <請求ID> --yes
|
|
418
|
+
twp invoice cancel <請求ID> (--reason <理由> | --reason-file <パス>) --yes
|
|
419
|
+
twp invoice uncancel <請求ID> --yes
|
|
420
|
+
twp invoice consolidate --invoices <ID,ID,…> [--title <件名>] --yes
|
|
421
|
+
twp invoice memo <請求ID> (--text <本文> | --text-file <パス> | --clear)
|
|
422
|
+
twp invoice export --out <パス.csv> [--force] [--format csv|mf-journal] [--debit-account <科目>] [--credit-account <科目>] [一覧と同じ絞り込み]
|
|
423
|
+
twp invoice send <請求ID> --to <メール> [--to <メール>]... [--cc <メール>]... [--message <本文>] --yes
|
|
424
|
+
twp invoice payment-link <請求ID> --yes
|
|
425
|
+
twp invoice download <請求ID> --out <パス.pdf> [--kind invoice|delivery|inspection] [--force]
|
|
426
|
+
```
|
|
427
|
+
|
|
428
|
+
- **請求の内容は見積と同じく JSON ファイル(`--content-file`)で渡します。** `--generate-cli-skeleton` がひな形と各キーに渡せる値を出し、サーバに無いキーは送る前にすべて挙げて止めます。`estimate_id`(見積から作る)・`invoice_no_rule_id`(採番)・`direct_create`(見積を自動作成)は作成のときだけ指定できます
|
|
429
|
+
- `update` の `details`(明細)と `recipients`(送付先)は送ると丸ごと置き換わります。`status` を `in_progress` にすると承認申請になります
|
|
430
|
+
- **`cancel` は請求を取消(無効)にします。** 発行した事実と内容は残したまま、売掛金・収支のどの集計にも数えられなくなります。理由は必須で、実行者・日時とともに記録されます。`uncancel`(`--yes` が要ります。取消の記録は消えます)で取消前のステータスへ戻せます。どちらも販売管理の「管理者」の権限が要ります。入金が引き当て済み・承認申請中・失注の請求はサーバが断ります
|
|
431
|
+
- **`consolidate` は同じ取引先の請求を1枚の統合請求書にまとめます。** 統合元の請求は消えずに残り、一覧では統合請求書の `children` に移ります。統合を取り消す API は無いので `--yes` が要ります。送る前に統合元の請求と合計を stderr に出します
|
|
432
|
+
- `export` は一覧と同じ絞り込みで CSV を書き出します(既定は画面の「CSV出力」と同じ請求一覧)。`--format mf-journal` は画面の「MF会計仕訳CSV出力」と同じで、絞り込みに当たる請求のうち**保管済だけ**を取引先ごとに合算した仕訳です。並びは一覧と同じ ID の降順です。既存のファイルは上書きしません(上書きするなら `--force`)
|
|
433
|
+
- **`send` は請求書 PDF を添付したメールを実際に送ります。** 取り消せないので `--yes` が要り、送る前に宛先・写し・件名・添付の名前を stderr に出します(`--dry-run` なら出すだけで送りません)。宛先は画面と同じく毎回指定します
|
|
434
|
+
- **`payment-link` は顧客が実際に支払える決済ページ(Stripe)を作り、URL を出します。** 金額は請求の残額です。作り直しても前のリンクは失効しません。`--yes` が要ります。送信・リンク作成の結果を受け取れなかったときは、実行された可能性を stderr に出します
|
|
435
|
+
- `delete` は入金が引き当てられている請求をサーバが断ります。統合請求書を消しても統合元の請求は残ります
|
|
436
|
+
- 取消・取消解除以外は販売管理の「メンバー」以上の権限が要ります。ヘルプは `twp invoice help`
|
|
437
|
+
|
|
438
|
+
### 取引契約と自動請求
|
|
439
|
+
|
|
440
|
+
```
|
|
441
|
+
twp contract list [--keyword <語>] [--status <ステータス>]... [--customer <取引先>] [--project <コード|ID>] [--estimate <見積ID>] [--from <日付>] [--to <日付>] [--all] [--limit <件数>]
|
|
442
|
+
twp contract get <契約ID>
|
|
443
|
+
twp contract create --generate-cli-skeleton --estimate <見積ID> --output json > contract.json
|
|
444
|
+
twp contract create --content-file contract.json
|
|
445
|
+
twp contract update <契約ID> (--generate-cli-skeleton | --content-file <パス>)
|
|
446
|
+
twp contract delete <契約ID> --yes
|
|
447
|
+
twp invoice auto-template list [--keyword <語>] [--active true|false] [--customer <取引先>] [--all] [--limit <件数>]
|
|
448
|
+
twp invoice auto-template get <テンプレートID>
|
|
449
|
+
twp invoice auto-template create (--generate-cli-skeleton | --content-file <パス>)
|
|
450
|
+
twp invoice auto-template update <テンプレートID> (--generate-cli-skeleton | --content-file <パス>)
|
|
451
|
+
twp invoice auto-template delete <テンプレートID> --yes
|
|
452
|
+
twp invoice auto-template history (<テンプレートID> | --all-templates) [--status success|error|skipped]... [--from <日付>] [--to <日付>] [--all] [--limit <件数>]
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
- **`twp contract` は見積から作る取引の契約です**(明細・金額を持ち、承認ワークフローに乗ります)。顧客に紐づけて保管する契約書の PDF は別物で、`twp customer contract` で扱います
|
|
456
|
+
- 契約の内容は見積・請求と同じく JSON ファイル(`--content-file`)で渡します。ひな形は元の見積の件名と明細を写します。元の見積(`estimate_id`)は作成のときだけ指定でき、取引先・プロジェクトは見積から決まります。請求が紐づいた契約の削除はサーバが断ります
|
|
457
|
+
- **有効な自動請求テンプレートは、毎日 4:00(日本時間)のバッチで本物の見積と請求を発行します。** `is_active` を省いて作ると有効になります。作成・更新の前に、いつ発行されるかを stderr に出します(`--dry-run` でも出ます)。ひな形は無効(`is_active: false`)で出ます
|
|
458
|
+
- 画面にある「期間の月・日」の項目(`period_*_months` / `period_*_day`)はサーバが保存しないので、CLI は送る前に止めます
|
|
459
|
+
- 自動請求テンプレートと発行履歴は販売管理の「管理者」、取引契約は「メンバー」以上の権限が要ります。ヘルプは `twp contract help` / `twp invoice auto-template help`
|
|
460
|
+
|
|
461
|
+
### 入金・売掛金を扱う(販売管理の管理者)
|
|
462
|
+
|
|
463
|
+
```
|
|
464
|
+
twp deposit list [--keyword <語>] [--customer <取引先>] [--allocation <引当状態>]... [--from <入金日>] [--to <入金日>] [--invoice-from <請求日>] [--invoice-to <請求日>] [--all]
|
|
465
|
+
twp deposit get <入金ID>
|
|
466
|
+
twp deposit create --payee <振込先ID> --date <入金日> --amount <円> [--customer <取引先>] [--memo <備考>] [--excess-reason <過不足理由>] [--excess-amount <円>]
|
|
467
|
+
twp deposit update <入金ID> [項目…] [--clear <項目>]...
|
|
468
|
+
twp deposit delete <入金ID> --yes
|
|
469
|
+
twp deposit export --out <パス.csv> [絞り込み…]
|
|
470
|
+
twp deposit allocation list <入金ID>
|
|
471
|
+
twp deposit allocation add <入金ID> (--invoice-id <請求ID> | --invoice <請求番号>) --amount <円>
|
|
472
|
+
twp deposit allocation add <入金ID> --file <「請求ID,金額」の CSV>
|
|
473
|
+
twp deposit allocation remove <入金ID> <引当ID> --yes
|
|
474
|
+
twp deposit allocation fill <入金ID> --yes
|
|
475
|
+
twp deposit plan list --from <支払期日> --to <支払期日> [--customer <取引先>] [--status <ステータス>]...
|
|
476
|
+
twp deposit plan register --generate-cli-skeleton --from <支払期日> --to <支払期日> --output json > plan.json
|
|
477
|
+
twp deposit plan register --content-file plan.json
|
|
478
|
+
twp receivable list [--month <YYYY-MM>] [--customer <取引先>] [--department <部署>] [--negative-only]
|
|
479
|
+
twp receivable export --out <パス.csv> [--type detail|summary] [--month <YYYY-MM>]
|
|
480
|
+
twp receivable closing list | get <YYYY-MM>
|
|
481
|
+
twp receivable closing close <YYYY-MM> --yes
|
|
482
|
+
twp receivable closing reopen <YYYY-MM> --yes
|
|
483
|
+
```
|
|
484
|
+
|
|
485
|
+
- **一括の引当(`--file`)と入金予定からの登録は、全件成功か全件失敗です。** 送る前に全行を検査し、誤りが1つでもあれば1件も送りません。断られたときは何も登録されていないので、直して同じコマンドを打ち直します。応答を受け取れなかったときは、打ち直す前に `twp deposit allocation list` / `twp deposit list` で登録されたかを確かめてください(打ち直すと二重に登録されます)
|
|
486
|
+
- 入金予定のひな形は画面の初期状態と同じ(取引先ごとの全請求を未入金残の全額で引き当て、振込先は前回のもの)です。着金額が違う取引先は `deposit_amount` と `excess_reason` を書き足してから渡します
|
|
487
|
+
- `allocation fill` は、過不足理由(振込手数料など)を後から登録したときに手数料の分を既存の引当へ足します(引当を消して入れ直さずに済みます)
|
|
488
|
+
- **締め(`closing close`)はテナント全体の月次の確定値です。** 締めた月の入金は、登録・入金日の変更・削除・引当の変更をサーバが断ります(請求は締めの対象外)。締める前に、締める月の現在値と前月の締めとの差異を表示します(`--dry-run` でも出ます)。解除(`closing reopen`)すると確定値は消えます
|
|
489
|
+
- 負の過不足金額は `--excess-amount=-500` のように `=` でつないで渡します。ヘルプは `twp deposit help` / `twp receivable help`
|
|
490
|
+
|
|
491
|
+
### 仕入を扱う(販売管理のメンバー以上)
|
|
492
|
+
|
|
493
|
+
```
|
|
494
|
+
twp purchase list [--keyword <語>] [--status <ステータス>] [--supplier <仕入先>] [--project <コード|ID>] [--contract-type single|continuous] [--from <日付>] [--to <日付>] [--all] [--limit <件数>]
|
|
495
|
+
twp purchase get <仕入ID>
|
|
496
|
+
twp purchase create --generate-cli-skeleton --output json > purchase.json
|
|
497
|
+
twp purchase create --content-file purchase.json
|
|
498
|
+
twp purchase update <仕入ID> (--generate-cli-skeleton | --content-file <パス>)
|
|
499
|
+
twp purchase delete <仕入ID> --yes
|
|
500
|
+
twp purchase duplicate <仕入ID>
|
|
501
|
+
twp purchase memo <仕入ID> (--text <本文> | --text-file <パス> | --clear)
|
|
502
|
+
twp purchase download <仕入ID> --out <パス.pdf> [--kind order|order-acceptance] [--force]
|
|
503
|
+
twp purchase document list --purchase <仕入ID>
|
|
504
|
+
twp purchase document create --purchase <仕入ID> --file <パス> --type quotation|order_form|order_acknowledgement --name <書類名>
|
|
505
|
+
twp purchase document get <書類ID> --purchase <仕入ID>
|
|
506
|
+
twp purchase document add-version <書類ID> --purchase <仕入ID> --file <パス>
|
|
507
|
+
twp purchase document update <書類ID> --purchase <仕入ID> [--name <書類名>] [--type <種別>]
|
|
508
|
+
twp purchase document delete <書類ID> --purchase <仕入ID> --yes
|
|
509
|
+
twp purchase document download <書類ID> --purchase <仕入ID> --out <パス> [--rev <版番号>] [--force]
|
|
510
|
+
twp purchase document scan <書類ID> --purchase <仕入ID> [--rev <版番号>] --yes
|
|
511
|
+
```
|
|
512
|
+
|
|
513
|
+
- **承認申請中・正式承認済・取消の仕入は、備考・メモなど一部しか書き換えられません。** サーバはそれ以外の項目を黙って捨てるので、`update` は送る前に今の仕入を読み、捨てられる項目を挙げて止めます。`update --generate-cli-skeleton` は書き込める項目だけを出します。件名・部署はサーバが毎回必須とするので、書かなければ今の値を補って送ります
|
|
514
|
+
- **`document scan` は AI クレジットを消費します**(`--yes` が要ります)。読み取るのは見積書(`--type quotation`)の PDF・画像だけで、結果は候補です。仕入へ入れるなら `twp purchase update --content-file` で送ります
|
|
515
|
+
- `duplicate` は明細を写し、添付書類は写しません。`delete` は添付書類も一緒に削除します(販売管理の「管理者」の権限が要ります。添付書類の削除も同じ)。ヘルプは `twp purchase help`
|
|
516
|
+
|
|
517
|
+
### 支払を扱う(販売管理の管理者)
|
|
518
|
+
|
|
519
|
+
```
|
|
520
|
+
twp supplier-payment list [--keyword <語>] [--supplier <取引先>] [--user <ユーザー>] [--month <YYYY-MM>] [--status <ステータス>]... [--from <日付>] [--to <日付>] [--all] [--limit <件数>]
|
|
521
|
+
twp supplier-payment get <支払ID>
|
|
522
|
+
twp supplier-payment create (--supplier-name <支払先名> | --supplier <取引先>) --month <YYYY-MM> [--amount <円>] [--invoice-date <日付>] [--due-date <日付>] [--status <ステータス>]
|
|
523
|
+
twp supplier-payment update <支払ID> [--amount <円>] [--status <ステータス>] [--executed-date <日付>] [--clear <項目>]...
|
|
524
|
+
twp supplier-payment delete <支払ID> --yes
|
|
525
|
+
twp supplier-payment set-status --file <IDを1行に1つ書いたファイル> --status <ステータス> --yes
|
|
526
|
+
twp supplier-payment schedule list [--keyword <語>] [--active-month <YYYY-MM>]
|
|
527
|
+
twp supplier-payment schedule get <マスタID>
|
|
528
|
+
twp supplier-payment schedule create (--supplier-name <支払先名> | --supplier <取引先>) --start-month <YYYY-MM> [--end-month <YYYY-MM>] [--user <ユーザー>]
|
|
529
|
+
twp supplier-payment schedule update <マスタID> [--end-month <YYYY-MM>] [--clear <項目>]...
|
|
530
|
+
twp supplier-payment schedule delete <マスタID> --yes
|
|
531
|
+
```
|
|
532
|
+
|
|
533
|
+
- **支払は注文書(`twp purchase`)とは別の記録です。** ステータスは 請求書未着 / 請求書受領 / 振込予約済 / 支払済 で、表示名でもコード(`invoice_pending` 等)でも指定できます
|
|
534
|
+
- **`set-status` は全件成功か全件失敗です**(100 件まで)。送る前に全件を読み、見つからない ID・重複・形の誤りが1つでもあれば行番号をすべて出して1件も変えません。`--dry-run` で1件ずつの「今のステータス → 変更後」を確かめられます
|
|
535
|
+
- 支払先マスタは毎月の支払の設定で、月初に開始月〜終了月の各月の支払(請求書未着)が作られます。生成を止めるなら `--end-month` を入れます。マスタを削除しても生成済みの支払は残ります。ヘルプは `twp supplier-payment help`
|
|
536
|
+
|
|
537
|
+
### 帳票に載る自社情報を設定する(事業所・振込先・印影・読み取りのマッピング表)
|
|
538
|
+
|
|
539
|
+
```
|
|
540
|
+
twp business-place list [--keyword <語>] | get <事業所ID> | delete <事業所ID> --yes
|
|
541
|
+
twp business-place create --name <事業所名> [--post-code <郵便番号>] [--address1 <住所>] [--tel <電話>] [--invoice-no <登録番号>] [--start-date <日付>] [--end-date <日付>] [--sort <整数>]
|
|
542
|
+
twp business-place update <事業所ID> [項目…] [--clear <項目>]...
|
|
543
|
+
twp payee list [--keyword <語>] | get <振込先ID> | delete <振込先ID> --yes
|
|
544
|
+
twp payee create --name <振込先名> (--content <振込先表示> | --content-file <ファイル>) [--start-date <日付>] [--end-date <日付>]
|
|
545
|
+
twp payee update <振込先ID> [--content-file <ファイル>] [--clear <項目>]...
|
|
546
|
+
twp seal-impression list [--keyword <語>] | get <印影ID> | delete <印影ID> --yes
|
|
547
|
+
twp seal-impression create --name <印影名> --file <画像>
|
|
548
|
+
twp seal-impression update <印影ID> [--name <印影名>] [--file <画像>]
|
|
549
|
+
twp purchase ai-mapping targets
|
|
550
|
+
twp purchase ai-mapping list [--target <反映先>] [--supplier <取引先> | --common] [--active true|false]
|
|
551
|
+
twp purchase ai-mapping create --source-label <見積書の項目名> --target <反映先> [--supplier <取引先>]
|
|
552
|
+
twp purchase ai-mapping update <マッピングID> [--target <反映先>] [--common] [--active false]
|
|
553
|
+
twp purchase ai-mapping delete <マッピングID> --yes
|
|
554
|
+
```
|
|
555
|
+
|
|
556
|
+
- 事業所・振込先・印影は見積書・請求書の内容に効きます。参照は販売管理のメンバー以上、登録・更新・削除は販売管理の管理者です。**削除は使用中(見積・請求で選ばれている)でも止まりません**
|
|
557
|
+
- **振込先の一覧は、4桁以上の数字の連なりを末尾4桁以外 `*` にして出します**(`--output json` も同じ)。全文は `get` で見られます。`--debug` は振込先の送信・応答の本文を出しません。振込先表示は改行を含むので `--content-file` が便利です
|
|
558
|
+
- 印影の画像は PNG / JPEG / GIF・5MB まで(画面と同じ)。登録の後に画像が確定したことを確かめ、確定していなければ成功と言いません
|
|
559
|
+
- 読み取りのマッピング表は、見積書を AI で読み取るとき(`twp purchase document scan`)に、見積書の項目名を仕入のどの項目へ入れるかの対応です。`--target` はキー(`title` 等)でも表示名(`件名` 等)でも指定でき、選べる値は `targets` で見られます。仕入先を付けないものは全社共通です。削除だけ販売管理の管理者が要ります
|
|
560
|
+
|
|
561
|
+
### 番号の振り方・見積フォーマット・端数処理を設定する
|
|
562
|
+
|
|
563
|
+
```
|
|
564
|
+
twp estimate no-rule list | get <ルールID> # invoice no-rule / purchase no-rule も同じ形
|
|
565
|
+
twp estimate no-rule create --name <ルール名> --digit-count <桁数> [--prefix <文字>] [--current-number <整数>] [--count-up-num <整数>] [--sort <整数>]
|
|
566
|
+
twp estimate no-rule update <ルールID> [項目…] [--clear prefix] --yes
|
|
567
|
+
twp estimate no-rule delete <ルールID> --yes
|
|
568
|
+
twp purchase no-rule update <ルールID> --active false --yes
|
|
569
|
+
twp estimate format list [--keyword <語>] | get <フォーマットID> | delete <フォーマットID> --yes
|
|
570
|
+
twp estimate format create --generate-cli-skeleton --output json > format.json
|
|
571
|
+
twp estimate format create --content-file format.json
|
|
572
|
+
twp estimate format update <フォーマットID> --content-file <ファイル>
|
|
573
|
+
twp rounding-setting get
|
|
574
|
+
twp rounding-setting update --method <round|ceil|floor> --yes
|
|
575
|
+
```
|
|
576
|
+
|
|
577
|
+
- **番号ルールは、これから作る見積・請求・仕入の番号そのものを決めます。** 次の番号は「今の連番+増分」を桁数でゼロ埋めして prefix を付けたもので、一覧・詳細の `next_number` に出ます。`update` / `delete` は `--yes` が要り、送る前に次に発行される番号を変更前・変更後で出します(`--dry-run` は `--yes` 無しで使えます)。今の連番を小さくすると、発行済みと同じ番号が再び振られます
|
|
578
|
+
- 空にできるのは prefix だけです(`--clear prefix`)。`--active` は仕入の番号ルールだけにあります。見積・請求の番号ルールを消すときは、それを既定に選んでいる見積フォーマットを注記します(削除は止まりません)
|
|
579
|
+
- 見積フォーマットは項目が多いので JSON ファイルで渡します。ひな形は `--generate-cli-skeleton` で出せ、サーバに無いキーは送る前に止めます。`*_manage_content` は送ると丸ごと置き換わります
|
|
580
|
+
- 端数処理(四捨五入・切り上げ・切り捨て)は `--method` に `round` / `ceil` / `floor` か表示名を渡します。変えると、これ以降に作る見積・請求・契約・仕入から効きます(作成済みのものの金額は変わりません)。支払だけは、金額・税率を書き換えるたびにその時点の方式で税抜額を計算し直します
|
|
581
|
+
- 参照は販売管理のメンバー以上、書き込みは販売管理の管理者です(仕入の番号ルールの登録・更新だけはメンバー以上)
|
|
582
|
+
|
|
373
583
|
### 顧客を登録・更新・削除する
|
|
374
584
|
|
|
375
585
|
```
|
|
@@ -413,7 +623,7 @@ twp company delete <取引先> --yes
|
|
|
413
623
|
- **`twp company delete` は担当者を消しません**(対応履歴だけサーバが併せて消します)。担当者が残る取引先は送る前に止め、`twp customer delete` を案内します
|
|
414
624
|
- `twp customer search-similar` は顧客だけでなく仕入先だけの取引先も当てます
|
|
415
625
|
- **契約書(`contract create` / `add-version`)は PDF のアップロードと登録を1コマンドで行います。** 送る前にテナントの容量を検査し、超過なら何も送りません。PDF 以外(名前が `.pdf` で終わらない・中身の先頭が `%PDF-` でない)はサーバも受け付けないので、送る前に止めます。差替えは新しい版として足され、過去版は `contract get` の `versions` に残り `download --rev <版番号>` で取り出せます。登録・差替え・更新は顧客管理の「編集者」以上、削除は「管理者」です。**契約書が残っている顧客はサーバが削除を断る**ので、顧客を消す前に `contract delete` で消してください
|
|
416
|
-
- 案件書類(`case-document list
|
|
626
|
+
- 案件書類(`case-document list`)は見積をまたいだ一覧だけです(登録・差替え・削除・ダウンロードは見積ごとの操作で、`twp estimate case-document` で行います)。案件書類が残る顧客もサーバが削除を断るので、その顧客は `twp estimate case-document delete` で案件書類を片付けてから削除してください
|
|
417
627
|
- 施策(`campaign`)の作成・更新・削除は顧客管理の「管理者」だけです。**サーバは担当者・アプローチ先からの参照を検査せずに削除する**ので、参照を残したまま止めるなら `--active false` で無効にしてください
|
|
418
628
|
- タグ・施策の紐づけはまだありません(`twp api /api/v2/customers/<顧客ID>/contacts/<担当者ID>` に `tags` / `campaign_ids` を送って到達できます)
|
|
419
629
|
- ヘルプは `twp customer delete help` / `twp customer contact help` / `twp customer interaction help` / `twp customer business-card help` / `twp customer people help` / `twp customer contract help` / `twp customer case-document help` / `twp customer campaign help` / `twp company help`
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{CommandModelMissingError,MAX_REPORTED_VIOLATIONS,loadCommandModelDomain,loadCommandModelRoutes,validateBody,validateQuery}from"./chunk-NZ7WI4RZ.js";import{NO_REDACT_FLAG,NO_REDACT_NOTICE,exitCodeFor,fetchAllPages,reportError}from"./chunk-
|
|
4
|
-
import{parseOperationArgs,repeatedValues}from"./chunk-IOGVQVGD.js";import"./chunk-
|
|
5
|
-
import{HELP_TOKEN}from"./chunk-
|
|
6
|
-
EXIT_OK,NetworkError,UsageError}from"./chunk-7WSNIXTQ.js";import"./chunk-RZVI6PMW.js";import"./chunk-VSJBJXZO.js";var MIN_SEGMENT_CHARS=3;var parsedCache=new WeakMap;function splitSegments(path){return path.split("/").filter(segment=>segment!=="")}function parseRoutes(routes){const cached=parsedCache.get(routes);if(cached!==void 0)return cached;const parsed=[];for(const[key,domain]of Object.entries(routes.routes)){const space=key.indexOf(" ");if(space<=0)continue;const template=key.slice(space+1);parsed.push({method:key.slice(0,space),template,domain,segments:splitSegments(template).map(segment=>/^\{[^/{}]+\}$/.
|
|
3
|
+
import{CommandModelMissingError,MAX_REPORTED_VIOLATIONS,loadCommandModelDomain,loadCommandModelRoutes,validateBody,validateQuery}from"./chunk-NZ7WI4RZ.js";import{NO_REDACT_FLAG,NO_REDACT_NOTICE,exitCodeFor,fetchAllPages,reportError}from"./chunk-WV3ZKUF4.js";import{evaluateQuery}from"./chunk-GDM2QUBL.js";import{renderOutput}from"./chunk-VK5T7ULK.js";import{redactSecretValues,withDebug}from"./chunk-UT4FACHN.js";import"./chunk-L6AHCTQZ.js";import{readBody}from"./chunk-HGTG5XQ7.js";
|
|
4
|
+
import{parseOperationArgs,repeatedValues}from"./chunk-IOGVQVGD.js";import"./chunk-BZAXQOLB.js";import{ApiError,TwpApiClient,appendQuery}from"./chunk-IF2K4PM5.js";import"./chunk-GMBJTG6A.js";import{GLOBAL_OPTIONS_HELP}from"./chunk-I4ARX6NM.js";import{AuthSession,NotLoggedInError,SessionExpiredError,loadCredentials}from"./chunk-XNLIEUAW.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import{effectiveApiUrl,resolveConfiguredOutput,resolveProfile}from"./chunk-4VZKNEVN.js";
|
|
5
|
+
import{HELP_TOKEN}from"./chunk-EOSSFTNG.js";import"./chunk-QQRJLH6B.js";import{OUTPUT_FORMATS,resolveOutputFormat}from"./chunk-K2ONOH3L.js";import"./chunk-WVS4W5FY.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import{DEFAULT_MAX_ITEMS,DEFAULT_MAX_PAGES,envelopePaging,isPageNumberEnvelope,pageRangeNotes,positiveInteger,readEnvelopeCursor,readPageNumberCursor,shellQuote}from"./chunk-5R4SEO3I.js";import"./chunk-II5RVJQN.js";import"./chunk-ZWVYVS2A.js";
|
|
6
|
+
import{ApiResponseError,EXIT_OK,NetworkError,UsageError}from"./chunk-7WSNIXTQ.js";import"./chunk-RZVI6PMW.js";import"./chunk-VSJBJXZO.js";var MIN_SEGMENT_CHARS=3;var parsedCache=new WeakMap;function splitSegments(path){return path.split("/").filter(segment=>segment!=="")}function parseRoutes(routes){const cached=parsedCache.get(routes);if(cached!==void 0)return cached;const parsed=[];for(const[key,domain]of Object.entries(routes.routes)){const space=key.indexOf(" ");if(space<=0)continue;const template=key.slice(space+1);parsed.push({method:key.slice(0,space),template,domain,segments:splitSegments(template).map(segment=>/^\{[^/{}]+\}$/.
|
|
7
7
|
test(segment)?null:segment)})}parsedCache.set(routes,parsed);return parsed}function matches(route,segments){if(route.segments.length!==segments.length)return false;return route.segments.every((literal,i)=>literal===null||literal===segments[i])}function compareSpecificity(a,b){const literals=route=>route.segments.filter(segment=>segment!==null).length;const diff=literals(b)-literals(a);if(diff!==0)return diff;for(let i=0;i<a.segments.length;i+=1){const aLiteral=a.segments[i]!==null;const bLiteral=b.
|
|
8
8
|
segments[i]!==null;if(aLiteral!==bLiteral)return aLiteral?-1:1}return 0}function lookupRoute(routes,method,path){const segments=splitSegments(path);const hits=parseRoutes(routes).filter(route=>matches(route,segments));const sameMethod=hits.filter(route=>route.method===method).sort(compareSpecificity);const best=sameMethod[0];if(best!==void 0)return{kind:"matched",domain:best.domain,template:best.template};if(hits.length>0){const[top]=[...hits].sort(compareSpecificity);const template=top.template;
|
|
9
9
|
const methods=[...new Set(hits.filter(route=>route.template===template).map(route=>route.method))].sort();return{kind:"method-mismatch",template,methods}}return{kind:"unknown"}}function pickOperation(operations,method,template){return operations.find(op=>op.method===method&&op.path===template)??null}async function suggestRoutes(routes,path,limit=5){const{default:fuzzysort}=await import("./fuzzysort-DFVKV4B4.js");const parsed=parseRoutes(routes);const templates=[...new Set(parsed.map(route=>route.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{RESIDENT_TOKEN_CAP,activateModeFiles,activatePermissionSettings,buildResidentSet,buildSystemPrompt,createAuditLogger,createTwpToolkit,currentBranch,describeAuditLog,describeToolCatalog,displayCwd,executeTool,findProjectTwpSubdir,localTools,lstatOrNull,parseFrontMatter,parseRule,persistProjectAllow,projectPermissionsPath,projectRootFor,readFileTool,residentInputs,resolveGitExecutable,runTurn,secretReason}from"./chunk-
|
|
4
|
-
import{buildDiffLines,diffStat}from"./chunk-VRBI2NPI.js";import{require_fuzzysort}from"./chunk-DIMZRTLE.js";import"./chunk-
|
|
5
|
-
isBelowMinSupported,minSupportedBlockMessage}from"./chunk-DXXFUNYN.js";import"./chunk-4VZKNEVN.js";import{parseArgv}from"./chunk-
|
|
3
|
+
import{RESIDENT_TOKEN_CAP,activateModeFiles,activatePermissionSettings,buildResidentSet,buildSystemPrompt,createAuditLogger,createTwpToolkit,currentBranch,describeAuditLog,describeToolCatalog,displayCwd,executeTool,findProjectTwpSubdir,localTools,lstatOrNull,parseFrontMatter,parseRule,persistProjectAllow,projectPermissionsPath,projectRootFor,readFileTool,residentInputs,resolveGitExecutable,runTurn,secretReason}from"./chunk-6ZUVESMI.js";import"./chunk-NZ7WI4RZ.js";import"./chunk-UT4FACHN.js";
|
|
4
|
+
import{buildDiffLines,diffStat}from"./chunk-VRBI2NPI.js";import{require_fuzzysort}from"./chunk-DIMZRTLE.js";import"./chunk-BZAXQOLB.js";import"./chunk-IF2K4PM5.js";import"./chunk-GMBJTG6A.js";import{RelayError,builtinCatalog,createRuntime,loadCachedCatalog,modelLabel,pickModel,toModelInfos}from"./chunk-PWXXCLVZ.js";import"./chunk-D233KKXW.js";import"./chunk-XNLIEUAW.js";import{proxyDiagnostics}from"./chunk-J7QYPKVK.js";import{checkMinSupportedVersion,
|
|
5
|
+
isBelowMinSupported,minSupportedBlockMessage}from"./chunk-DXXFUNYN.js";import"./chunk-4VZKNEVN.js";import{parseArgv}from"./chunk-B7YCG2T7.js";import{applyPermissionMode,checkPermission,describePermissionMode,getMode,isModeId,modeSource,nextMode}from"./chunk-NAUH75MM.js";import"./chunk-EOSSFTNG.js";import"./chunk-QQRJLH6B.js";import{isFullWidth,isWide,stringWidth,stripAnsi}from"./chunk-WVS4W5FY.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";
|
|
6
6
|
import"./chunk-N2UVRM3Z.js";import"./chunk-II5RVJQN.js";import"./chunk-7WSNIXTQ.js";import"./chunk-PMOUHEJQ.js";import{configReadDirs,twpHomeDir}from"./chunk-RZVI6PMW.js";import{__commonJS,__export,__require,__toESM}from"./chunk-VSJBJXZO.js";var require_react_production=__commonJS({"node_modules/react/cjs/react.production.js"(exports){"use strict";var REACT_ELEMENT_TYPE=Symbol.for("react.transitional.element");var REACT_PORTAL_TYPE=Symbol.for("react.portal");var REACT_FRAGMENT_TYPE=Symbol.for("react.fragment");var REACT_STRICT_MODE_TYPE=Symbol.for("react.strict_mode");var REACT_PROFILER_TYPE=Symbol.for("react.profiler");var REACT_CONSUMER_TYPE=Symbol.for("react.consumer");var REACT_CONTEXT_TYPE=Symbol.for("react.context");var REACT_FORWARD_REF_TYPE=Symbol.
|
|
7
7
|
for("react.forward_ref");var REACT_SUSPENSE_TYPE=Symbol.for("react.suspense");var REACT_MEMO_TYPE=Symbol.for("react.memo");var REACT_LAZY_TYPE=Symbol.for("react.lazy");var REACT_ACTIVITY_TYPE=Symbol.for("react.activity");var REACT_VIEW_TRANSITION_TYPE=Symbol.for("react.view_transition");var MAYBE_ITERATOR_SYMBOL=Symbol.iterator;function getIteratorFn(maybeIterable){if(null===maybeIterable||"object"!==typeof maybeIterable)return null;maybeIterable=MAYBE_ITERATOR_SYMBOL&&maybeIterable[MAYBE_ITERATOR_SYMBOL]||
|
|
8
8
|
maybeIterable["@@iterator"];return"function"===typeof maybeIterable?maybeIterable:null}var ReactNoopUpdateQueue={isMounted:function(){return false},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}};var assign=Object.assign;var emptyObject={};function Component(props,context,updater){this.props=props;this.context=context;this.refs=emptyObject;this.updater=updater||ReactNoopUpdateQueue}Component.prototype.isReactComponent={};Component.prototype.setState=
|
|
@@ -1212,7 +1212,7 @@ cwd()){const listed=await gitListFiles(cwd2);const raw=listed??await walkFiles(c
|
|
|
1212
1212
|
1;const after=/^[^\s]*/.exec(text.slice(cursor))?.[0]??"";return{query,start,end:cursor+after.length}}var TWP_SLASH_ROUTES={"/tasks":{domain:"task",operation:"list"},"/task":{domain:"task",operation:"get"},"/projects":{domain:"project",operation:"list"}};function isTwpSlashCommand(name){return Object.hasOwn(TWP_SLASH_ROUTES,name)}async function runTwpSlashCommand(name,args,deps){const route=TWP_SLASH_ROUTES[name];if(!Object.hasOwn(TWP_SLASH_ROUTES,name)||route===void 0){return{code:2,out:"",err:`\u4E0D\u660E\u306A\u30B3\u30DE\u30F3\u30C9: ${name}
|
|
1213
1213
|
`}}const parsed=parseArgv([route.domain,route.operation,...args]);if(parsed.command!=="domain"||parsed.domain!==route.domain){return{code:2,out:"",err:`${name}: \u3053\u306E\u5F15\u6570\u306F\u4F7F\u3048\u307E\u305B\u3093\uFF08${args.join(" ")}\uFF09
|
|
1214
1214
|
`}}if(parsed.unknown.length>0){return{code:2,out:"",err:`\u4E0D\u660E\u306A\u5F15\u6570: ${parsed.unknown.join(" ")}
|
|
1215
|
-
`}}let out="";let err="";const io={out:text=>void(out+=text),err:text=>void(err+=text),isTty:true};const globals={profile:parsed.profile??deps.profile,...parsed.output!==void 0?{output:parsed.output}:{},...parsed.query!==void 0?{query:parsed.query}:{},dryRun:parsed.dryRun,debug:parsed.debug,yes:parsed.yes,refresh:parsed.refresh};const{runDomain}=await import("./run-
|
|
1215
|
+
`}}let out="";let err="";const io={out:text=>void(out+=text),err:text=>void(err+=text),isTty:true};const globals={profile:parsed.profile??deps.profile,...parsed.output!==void 0?{output:parsed.output}:{},...parsed.query!==void 0?{query:parsed.query}:{},dryRun:parsed.dryRun,debug:parsed.debug,yes:parsed.yes,refresh:parsed.refresh};const{runDomain}=await import("./run-GDYEOQQK.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{readBody}from"./chunk-HGTG5XQ7.js";import{BACKLOG_BASE_PATH,BACKLOG_PROJECT_SCOPE_LABEL,BACKLOG_SCOPE_LABEL,backlogSpacePath,isExactNumericId,resolveNamed}from"./chunk-
|
|
3
|
+
import{readBody}from"./chunk-HGTG5XQ7.js";import{BACKLOG_BASE_PATH,BACKLOG_PROJECT_SCOPE_LABEL,BACKLOG_SCOPE_LABEL,backlogSpacePath,isExactNumericId,resolveNamed}from"./chunk-BZAXQOLB.js";import"./chunk-IF2K4PM5.js";import"./chunk-GMBJTG6A.js";import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.js";import"./chunk-NHYMHCAT.js";import"./chunk-II5RVJQN.js";import{requireResolved,singleRef,withResolved}from"./chunk-ZN5EFDH7.js";import{isRecord,pick}from"./chunk-ZWVYVS2A.js";
|
|
4
4
|
import{ApiResponseError,UsageError}from"./chunk-7WSNIXTQ.js";import"./chunk-RZVI6PMW.js";import"./chunk-VSJBJXZO.js";var DEFAULT_COUNT=20;var MAX_COUNT=100;var NUMERIC=/^[0-9]+$/;var ISSUE_REF=/^(?:[A-Za-z0-9_]+-[0-9]+|[0-9]+)$/;var DATE=/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/;var SPACE_COLUMNS=["id","space_url"];var PROJECT_COLUMNS=["id","projectKey","name"];var ISSUE_LIST_COLUMNS=["issueKey","summary","status","assignee","priority","dueDate","updated","descriptionTruncated"];var ISSUE_GET_COLUMNS=["id","issueKey","projectId","summary","description","descriptionTruncated","status","issueType","priority","assignee","cr\
|
|
5
5
|
eatedUser","parentIssueId","startDate","dueDate","estimatedHours","actualHours","created","updated"];var COMMENT_COLUMNS=["id","created","createdUserId","createdUser","content","changeLog"];function commentRow(row){const source=isRecord(row)?row:{};const user=isRecord(source["createdUser"])?source["createdUser"]:{};return pick({...source,createdUserId:user["id"]??null,createdUser:user["name"]??null},COMMENT_COLUMNS)}var ATTACHMENT_COLUMNS=["id","name","size","contentType","createdUserId","create\
|
|
6
6
|
dUser","created"];var STATUS_COLUMNS=["id","name","color"];var USER_COLUMNS=["id","userId","name","mailAddress","roleType"];var SPACE_FLAG={name:"--space",summary:"Backlog \u30B9\u30DA\u30FC\u30B9\uFF08ID / \u30B9\u30DA\u30FC\u30B9URL / \u30B5\u30D6\u30C9\u30E1\u30A4\u30F3\uFF09\u3002\u767B\u9332\u304C1\u4EF6\u306A\u3089\u7701\u7565\u3067\u304D\u307E\u3059",takesValue:true,placeholder:"<ID|URL>"};var BODY_MAX_CHARS=1e5;var BODY_FLAGS=[{name:"--body-file",summary:"\u672C\u6587\u3092\u30D5\u30A1\u30A4\u30EB\u304B\u3089\u8AAD\u3080\uFF08- \u3067\u6A19\u6E96\u5165\u529B\uFF09\u3002\u6539\u884C\u30FBMarkdown\
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
|
+
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
+
import{CUSTOMER_FLAG,CUSTOMER_LICENSE,childForbidden,levelForbidden,prepareCustomerFlag}from"./chunk-H54MGGHB.js";import{createFlags,fieldBody,hasAnyField,updateFlags}from"./chunk-BPCK5RAB.js";import{inspectLocalFile}from"./chunk-PKWMJIBM.js";import{checkUploadQuota}from"./chunk-DDKZ5IPT.js";import{booleanText}from"./chunk-UDPJ2IGK.js";import{CUSTOMERS_PATH,isExactNumericId}from"./chunk-BZAXQOLB.js";import{ApiError}from"./chunk-IF2K4PM5.js";import{isSafePathSegment}from"./chunk-GMBJTG6A.js";
|
|
4
|
+
import{NotLoggedInError,SessionExpiredError}from"./chunk-XNLIEUAW.js";import{nonEmpty}from"./chunk-5R4SEO3I.js";import{requireResolved,withResolved}from"./chunk-ZN5EFDH7.js";import{acknowledgement,isRecord,pick}from"./chunk-ZWVYVS2A.js";import{ApiResponseError,UsageError}from"./chunk-7WSNIXTQ.js";import fs from"fs";import path from"path";var CONTRACT_TYPES=["basic_contract","nda","other"];var CONTRACT_TYPE_HELP="basic_contract\uFF1D\u57FA\u672C\u5951\u7D04\u66F8 / nda\uFF1D\u6A5F\u5BC6\u4FDD\u6301\u5951\u7D04\u66F8 / other\uFF1D\u305D\u306E\u4ED6\u5951\u7D04\u66F8\u985E";var FILE_NAME_MAX_CHARS=255;var PDF_MAGIC="%PDF-";var CONTRACT_FIELDS=[{kind:"text",flag:"--name",key:"document_name",label:"\u66F8\u985E\u540D",maxChars:255,summary:"\u66F8\u985E\u540D\uFF08create \u3067\u306F\u5FC5\u9808\uFF09"},{kind:"enum",flag:"--type",key:"\
|
|
5
|
+
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
|
+
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={
|
|
7
|
+
name:"--force",summary:"\u66F8\u304D\u51FA\u3057\u5148\u304C\u65E2\u306B\u3042\u308C\u3070\u4E0A\u66F8\u304D\u3059\u308B\uFF08\u65E2\u5B9A\u3067\u306F\u4E0A\u66F8\u304D\u3057\u306A\u3044\uFF09",takesValue:false};var REV_FLAG={name:"--rev",summary:"\u53D6\u308A\u51FA\u3059\u7248\u306E\u756A\u53F7\uFF08\u7701\u7565\u6642\u306F\u73FE\u884C\u7248\u3002get \u306E versions \u306E version_number\uFF09",takesValue:true,placeholder:"<\u7248\u756A\u53F7>"};var CONTRACT_REF_HELP="--customer\uFF08\u9867\u5BA2\uFF09\u304C\u5FC5\u9808\u3067\u3059\u3002<\u66F8\u985EID>\
|
|
8
|
+
\u306F twp customer contract list \u306E document_id \u5217\u306E\u5024\u3067\u3059\u3002\n<\u9867\u5BA2> \u306F\u4F01\u696D\u540D\u30FB\u7565\u79F0\u30FB\u30AB\u30CA\u306E\u5B8C\u5168\u4E00\u81F4\u304B ID\uFF08twp customer list \u306E id \u5217\u306E\u6570\u5B57\uFF09\u3067\u6307\u5B9A\u3057\u307E\u3059\u3002";var VIEW_FORBIDDEN=label=>levelForbidden(CUSTOMER_LICENSE,`${label}\u3092\u898B\u308B\u306B\u306F\u9867\u5BA2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u8981\u308A\u307E\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`);
|
|
9
|
+
function usageOf(resource,op){return`twp customer ${resource} ${op} help`}function companyBase(input,kind){const id=requireResolved(input,"companyId");if(!isExactNumericId(id))throw new ApiResponseError(`\u53D6\u5F15\u5148 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`);return`${CUSTOMERS_PATH}/${id}/${kind}`}function singleId(input,label,usage,listHint){const[raw,...rest]=input.args;if(raw===void 0||
|
|
10
|
+
raw.trim()==="")throw new UsageError(`${label}\u306E ID \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044`,usage);if(rest.length>0)throw new UsageError(`\u53D7\u3051\u53D6\u308C\u308B${label}\u306E ID \u306F1\u3064\u3060\u3051\u3067\u3059: ${rest.join(" ")}`,usage);const id=raw.trim();if(!isSafePathSegment(id))throw new UsageError(`${label}\u306E ID \u3068\u3057\u3066\u4F7F\u3048\u306A\u3044\u6587\u5B57\u304C\u542B\u307E\u308C\u3066\u3044\u307E\u3059: ${id}`,listHint);return id}function noArgs(input,op,usage){
|
|
11
|
+
if(input.args.length>0)throw new UsageError(`${op} \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,usage)}function itemsOf(body,what){const items=isRecord(body)?body["items"]:void 0;if(!isRecord(body)||body["result"]!==true||!Array.isArray(items)||!items.every(isRecord)){throw new ApiResponseError(`${what}\u306E\u5FDC\u7B54\u306B items \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}
|
|
12
|
+
return items}var docUsage=op=>usageOf("contract",op);var docId=(input,op)=>singleId(input,"\u66F8\u985E",docUsage(op),"twp customer contract list \u306E document_id \u5217\u306E\u5024\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002");var docPath=(input,op)=>`${companyBase(input,"contract-documents")}/${encodeURIComponent(docId(input,op))}`;function contractOf(body,what){const doc=isRecord(body)?body["contract_document"]:void 0;if(!isRecord(body)||body["result"]!==true||!isRecord(doc)||
|
|
13
|
+
typeof doc["document_id"]!=="string"){throw new ApiResponseError(`${what}\u306E\u5FDC\u7B54\u306B contract_document.document_id \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return doc}function versionsOf(doc){const versions=doc["versions"];return Array.isArray(versions)?versions.filter(isRecord):[]}function localPdf(input,usage){const{file,size}=inspectLocalFile(input.flags.get(FILE_FLAG.name),FILE_FLAG.name,usage);const name=path.
|
|
14
|
+
basename(file);if(!/\.pdf$/i.test(name)){throw new UsageError(`\u5951\u7D04\u66F8\u306F PDF \u3060\u3051\u3092\u767B\u9332\u3067\u304D\u307E\u3059\uFF08\u30D5\u30A1\u30A4\u30EB\u540D\u304C .pdf \u3067\u7D42\u308F\u3063\u3066\u3044\u307E\u305B\u3093\uFF09: ${file}`)}if(Array.from(name).length>FILE_NAME_MAX_CHARS){throw new UsageError(`\u30D5\u30A1\u30A4\u30EB\u540D\u306F ${FILE_NAME_MAX_CHARS} \u6587\u5B57\u307E\u3067\u3067\u3059\uFF08${Array.from(name).length} \u6587\u5B57\uFF09: ${name}`)}const head=Buffer.
|
|
15
|
+
alloc(PDF_MAGIC.length);try{const fd=fs.openSync(file,"r");try{fs.readSync(fd,head,0,head.length,0)}finally{fs.closeSync(fd)}}catch(err){throw new UsageError(`\u30D5\u30A1\u30A4\u30EB\u3092\u8AAD\u307F\u8FBC\u3081\u307E\u305B\u3093\uFF08${FILE_FLAG.name}\uFF09: ${file}\uFF08${err.code??err.message}\uFF09`)}if(head.toString("latin1")!==PDF_MAGIC){throw new UsageError(`\u6709\u52B9\u306A PDF \u3067\u306F\u3042\u308A\u307E\u305B\u3093\uFF08\u5148\u982D\u304C ${PDF_MAGIC} \u3067\u306F\u3042\u308A\u307E\u305B\u3093\uFF09: ${file}`)}
|
|
16
|
+
return{file,name,size}}function uploadUrlPlan(input){return{method:"POST",path:`${companyBase(input,"contract-documents")}/upload-url`,body:{file_name:requireResolved(input,"fileName"),file_size:Number(requireResolved(input,"fileSize"))}}}function issuedStaged(body){const uploadUrl=isRecord(body)?body["upload_url"]:void 0;const uploadKey=isRecord(body)?body["upload_key"]:void 0;const contentType=isRecord(body)?body["content_type"]:void 0;if(typeof uploadUrl!=="string"||!/^https:\/\//.test(uploadUrl)||
|
|
17
|
+
typeof uploadKey!=="string"||uploadKey===""||typeof contentType!=="string"||contentType===""){throw new ApiResponseError("\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9URL\u767A\u884C\u306E\u5FDC\u7B54\u306B upload_url / upload_key / content_type \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return{uploadUrl,uploadKey,contentType}}async function uploadStaged(input,ctx,upload){const file=requireResolved(input,"file");const size=Number(
|
|
18
|
+
requireResolved(input,"fileSize"));await checkUploadQuota(ctx,size);const{uploadUrl,uploadKey,contentType}=issuedStaged(await ctx.send(upload.issue));let registerSent=false;try{const bytes=fs.readFileSync(file);if(bytes.byteLength!==size){throw new UsageError(`\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u4E2D\u306B\u30D5\u30A1\u30A4\u30EB\u306E\u5927\u304D\u3055\u304C\u5909\u308F\u308A\u307E\u3057\u305F\uFF08${size} \u2192 ${bytes.byteLength} \u30D0\u30A4\u30C8\uFF09: ${file}`)}await ctx.putSigned(uploadUrl,
|
|
19
|
+
bytes,contentType);registerSent=true;return await upload.register(uploadKey)}catch(err){const refused=err instanceof ApiError&&err.status>=400&&err.status<500||err instanceof NotLoggedInError||err instanceof SessionExpiredError;ctx.warn(registerSent&&!refused?`${upload.label}\u306E\u767B\u9332\u306F\u9001\u4FE1\u3057\u307E\u3057\u305F\u304C\u3001\u6210\u529F\u3092\u78BA\u304B\u3081\u3089\u308C\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u6253\u3061\u76F4\u3059\u524D\u306B ${upload.retry} \u3067\u767B\u9332\u3055\u308C\u305F\u304B\u3092\u78BA\
|
|
20
|
+
\u304B\u3081\u3066\u304F\u3060\u3055\u3044\uFF08\u4E8C\u91CD\u306B\u767B\u9332\u3055\u308C\u308B\u3053\u3068\u304C\u3042\u308A\u307E\u3059\uFF09\u3002
|
|
21
|
+
`:`${upload.label}\u306F\u767B\u9332\u3055\u308C\u3066\u3044\u307E\u305B\u3093\uFF08${registerSent?"\u30B5\u30FC\u30D0\u304C\u767B\u9332\u3092\u65AD\u308A\u307E\u3057\u305F\u3002":""}\u9001\u3063\u305F\u30D5\u30A1\u30A4\u30EB\u306F\u66F8\u985E\u3068\u3057\u3066\u6210\u7ACB\u3057\u3066\u3044\u306A\u3044\u4E00\u6642\u30D5\u30A1\u30A4\u30EB\u3067\u3001\u3069\u306E\u4E00\u89A7\u306B\u3082\u51FA\u307E\u305B\u3093\uFF09\u3002\u539F\u56E0\u3092\u53D6\u308A\u9664\u3044\u3066\u304B\u3089\u3001\u3082\u3046\u4E00\u5EA6\u540C\u3058\u30B3\u30DE\u30F3\u30C9\u3092\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
22
|
+
`);throw err}}function uploadPdf(input,ctx,retry,register){return uploadStaged(input,ctx,{label:"\u5951\u7D04\u66F8",issue:uploadUrlPlan(input),retry,register})}async function preparePdf(input,ctx,op){const pdf=localPdf(input,docUsage(op));const prepared=await prepareCustomerFlag(input,ctx,docUsage(op));return withResolved(prepared,{file:pdf.file,fileName:pdf.name,fileSize:String(pdf.size)})}var CONTRACT_EDIT_FORBIDDEN=childForbidden("\u5951\u7D04\u66F8","edit");async function createContract(input,ctx){
|
|
23
|
+
const body=fieldBody(input,CONTRACT_FIELDS);return uploadPdf(input,ctx,`twp customer contract list --customer ${requireResolved(input,"companyId")}`,async uploadKey=>{const created=contractOf(await ctx.send({method:"POST",path:companyBase(input,"contract-documents"),body:{...body,upload_key:uploadKey,file_name:requireResolved(input,"fileName")}}),"\u5951\u7D04\u66F8\u306E\u767B\u9332");return{result:true,contract_document:created}})}async function addVersion(input,ctx){const target=docPath(input,
|
|
24
|
+
"add-version");const before=contractOf(await ctx.send({method:"GET",path:target}),"\u5951\u7D04\u66F8");const previous=typeof before["current_version"]==="number"?before["current_version"]:0;return uploadPdf(input,ctx,`twp customer contract get ${docId(input,"add-version")} --customer ${requireResolved(input,"companyId")}`,async uploadKey=>{const after=contractOf(await ctx.send({method:"POST",path:`${target}/versions`,body:{upload_key:uploadKey,file_name:requireResolved(input,"fileName")}}),"\u7248\u306E\u5DEE\
|
|
25
|
+
\u66FF\u3048");const current=after["current_version"];if(typeof current!=="number"||current<=previous){throw new ApiResponseError(`\u7248\u306E\u5DEE\u66FF\u3048\u306E\u5FDC\u7B54\u3067\u73FE\u884C\u7248\u304C\u9032\u3093\u3067\u3044\u307E\u305B\u3093\uFF08\u5DEE\u66FF\u3048\u524D ${previous} \u2192 \u5FDC\u7B54 ${String(current)}\uFF09\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return{result:true,contract_document:after}})}function contractSummary(body,what){
|
|
26
|
+
const doc=contractOf(body,what);return{...pick(doc,CONTRACT_COLUMNS),versions:versionsOf(doc).length}}var contractResource={name:"contract",summary:"\u9867\u5BA2\u306E\u5951\u7D04\u66F8\uFF08\u4E00\u89A7\u30FB\u8A73\u7D30\u30FBPDF \u306E\u767B\u9332\u30FB\u7248\u306E\u5DEE\u66FF\u3048\u30FB\u66F4\u65B0\u30FB\u524A\u9664\u30FB\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\uFF09",operations:[{name:"list",summary:"\u9867\u5BA2\u306E\u5951\u7D04\u66F8\u3092\u4E00\u89A7\u3059\u308B",usage:"twp customer contrac\
|
|
27
|
+
t list --customer <\u9867\u5BA2>",description:`\u9867\u5BA2\u306B\u767B\u9332\u3055\u308C\u305F\u5951\u7D04\u66F8\uFF08\u524A\u9664\u3057\u305F\u3082\u306E\u3092\u9664\u304F\uFF09\u3092\u3059\u3079\u3066\u8FD4\u3057\u307E\u3059\uFF08\u3053\u306E API \u306F\u30DA\u30FC\u30B8\u30F3\u30B0\u3092\u6301\u3061\u307E\u305B\u3093\uFF09\u3002
|
|
28
|
+
\u898B\u7A4D\u306B\u7D10\u3065\u304F\u6848\u4EF6\u66F8\u985E\u306F\u542B\u307F\u307E\u305B\u3093\uFF08twp customer case-document list\uFF09\u3002
|
|
29
|
+
|
|
30
|
+
--output json \u306F API \u304C\u8FD4\u3059\u5168\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u51FA\u3057\u307E\u3059\u3002
|
|
31
|
+
--output table / text / tsv \u306F\u8981\u7D04\u5217\uFF08${CONTRACT_COLUMNS.join(" / ")}\uFF09\u3067\u3059\u3002`,flags:[CUSTOMER_FLAG],forbidden:VIEW_FORBIDDEN("\u5951\u7D04\u66F8"),async prepare(input,ctx){noArgs(input,"list",docUsage("list"));return prepareCustomerFlag(input,ctx,docUsage("list"))},plan:input=>({method:"GET",path:companyBase(input,"contract-documents")}),summarize:body=>itemsOf(body,"\u5951\u7D04\u66F8\u4E00\u89A7").map(row=>pick(row,CONTRACT_COLUMNS)),raw:body=>itemsOf(body,
|
|
32
|
+
"\u5951\u7D04\u66F8\u4E00\u89A7")},{name:"get",summary:"\u5951\u7D04\u66F81\u4EF6\u306E\u8A73\u7D30\u3092\u8868\u793A\u3059\u308B\uFF08\u73FE\u884C\u7248\u30FB\u904E\u53BB\u7248\u3092\u542B\u3080\uFF09",usage:"twp customer contract get <\u66F8\u985EID> --customer <\u9867\u5BA2>",description:`${CONTRACT_REF_HELP}
|
|
33
|
+
|
|
34
|
+
--output json \u306F\u73FE\u884C\u7248\u30FB\u904E\u53BB\u7248\uFF08versions\uFF09\u3092\u542B\u3080\u5168\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u51FA\u3057\u307E\u3059\u3002
|
|
35
|
+
--output table / text / tsv \u306F\u8981\u7D04\u5217\uFF08${CONTRACT_COLUMNS.join(" / ")} / versions\uFF1D\u7248\u306E\u6570\uFF09\u3067\u3059\u3002
|
|
36
|
+
\u7248\u3054\u3068\u306E\u5217\u306F ${VERSION_COLUMNS.join(" / ")} \u3067\u3059\uFF08--output json\uFF09\u3002`,flags:[CUSTOMER_FLAG],forbidden:VIEW_FORBIDDEN("\u5951\u7D04\u66F8"),async prepare(input,ctx){docId(input,"get");return prepareCustomerFlag(input,ctx,docUsage("get"))},plan:input=>({method:"GET",path:docPath(input,"get")}),summarize:body=>contractSummary(body,"\u5951\u7D04\u66F8"),raw:body=>contractOf(body,"\u5951\u7D04\u66F8")},{name:"create",summary:"PDF \u3092\u9867\u5BA2\u306E\u5951\u7D04\u66F8\u3068\u3057\u3066\u767B\u9332\u3059\u308B\uFF08\u5BB9\u91CF\u691C\u67FB\u30FB\u8EE2\u9001\u30FB\u767B\u9332\u30921\u30B3\
|
|
37
|
+
\u30DE\u30F3\u30C9\u3067\uFF09",usage:"twp customer contract create --customer <\u9867\u5BA2> --file <\u30D1\u30B9.pdf> --type <\u7A2E\u5225> --name <\u66F8\u985E\u540D>",description:`--customer\u30FB--file\u30FB--type\uFF08${CONTRACT_TYPE_HELP}\uFF09\u30FB--name \u304C\u5FC5\u9808\u3067\u3059\u3002
|
|
38
|
+
|
|
39
|
+
\u6B21\u306E\u9806\u306B\u9001\u308A\u307E\u3059\u3002
|
|
40
|
+
0. POST /api/v2/storage/check-upload\uFF08\u30C6\u30CA\u30F3\u30C8\u306E\u5BB9\u91CF\u691C\u67FB\u3002\u8D85\u904E\u306A\u3089\u4F55\u3082\u9001\u3089\u305A\u306B\u6B62\u307E\u308A\u307E\u3059\uFF09
|
|
41
|
+
1. POST \u2026/contract-documents/upload-url\uFF08\u7F72\u540DURL\u306E\u767A\u884C\uFF09
|
|
42
|
+
2. \u7F72\u540DURL\u3078 PUT\uFF08PDF \u672C\u4F53\u3002TWP \u306E\u8A8D\u8A3C\u60C5\u5831\u306F\u9001\u308A\u307E\u305B\u3093\uFF09
|
|
43
|
+
3. POST \u2026/contract-documents\uFF08\u66F8\u985E\u306E\u767B\u9332\u3002\u3053\u3053\u3067\u5951\u7D04\u66F8\u304C\u6210\u7ACB\u3057\u307E\u3059\uFF09
|
|
44
|
+
PDF \u4EE5\u5916\uFF08\u30D5\u30A1\u30A4\u30EB\u540D\u304C .pdf \u3067\u7D42\u308F\u3089\u306A\u3044\u30FB\u4E2D\u8EAB\u306E\u5148\u982D\u304C %PDF- \u3067\u306A\u3044\uFF09\u306F\u3001\u4F55\u3082\u9001\u3089\u305A\u306B\u6B62\u3081\u307E\u3059\uFF08\u30B5\u30FC\u30D0\u3082\u540C\u3058\u6761\u4EF6\u3067\u65AD\u308A\u307E\u3059\uFF09\u3002
|
|
45
|
+
--dry-run \u306F 1 \u306E\u30EA\u30AF\u30A8\u30B9\u30C8\u3060\u3051\u3092\u8868\u793A\u3057\u307E\u3059\uFF082 \u4EE5\u964D\u306F 1 \u306E\u5FDC\u7B54\u306B\u4F9D\u5B58\u3059\u308B\u305F\u3081\uFF09\u3002
|
|
46
|
+
\u9867\u5BA2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u300C\u7DE8\u96C6\u8005\u300D\u4EE5\u4E0A\u3067\u3042\u308B\u3053\u3068\u304C\u8981\u308A\u307E\u3059\u3002`,flags:[CUSTOMER_FLAG,FILE_FLAG,...createFlags(CONTRACT_FIELDS)],forbidden:CONTRACT_EDIT_FORBIDDEN,async prepare(input,ctx){noArgs(input,"create",docUsage("create"));fieldBody(input,CONTRACT_FIELDS);for(const flag of["--type","--name"]){if(!input.flags.has(flag))throw new UsageError(`${flag} \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044`,
|
|
47
|
+
docUsage("create"))}return preparePdf(input,ctx,"create")},plan:uploadUrlPlan,plannedNotes:input=>[`\u5B9F\u884C\u6642\u306F\u3001\u3053\u306E\u524D\u306B\u5BB9\u91CF\u691C\u67FB\uFF08POST /api/v2/storage/check-upload\uFF09\u3092\u9001\u308A\u3001\u3053\u306E\u3042\u3068\u7F72\u540DURL\u3078 ${requireResolved(input,"fileSize")} \u30D0\u30A4\u30C8\u3092 PUT \u3057\u3066\u304B\u3089\u3001POST ${companyBase(input,"contract-documents")} \u3067\u5951\u7D04\u66F8\u3092\u767B\u9332\u3057\u307E\u3059\u3002`],
|
|
48
|
+
execute:createContract,summarize:body=>contractSummary(body,"\u5951\u7D04\u66F8\u306E\u767B\u9332"),raw:body=>contractOf(body,"\u5951\u7D04\u66F8\u306E\u767B\u9332")},{name:"add-version",summary:"\u5951\u7D04\u66F8\u306B\u65B0\u3057\u3044\u7248\u306E PDF \u3092\u767B\u9332\u3059\u308B\uFF08\u5DEE\u66FF\u3048\u3002\u904E\u53BB\u7248\u306F\u6B8B\u308A\u307E\u3059\uFF09",usage:"twp customer contract add-version <\u66F8\u985EID> --customer <\u9867\u5BA2> --file <\u30D1\u30B9.pdf>",description:`${CONTRACT_REF_HELP}\
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
\u66F8\u985E\u304C\u3053\u306E\u9867\u5BA2\u306B\u3042\u308B\u3053\u3068\u3092\u78BA\u304B\u3081\u3066\u304B\u3089\u3001\u5BB9\u91CF\u691C\u67FB \u2192 \u7F72\u540DURL\u306E\u767A\u884C \u2192 PUT \u2192 POST \u2026/{\u66F8\u985EID}/versions \u306E\u9806\u306B\u9001\u308A\u307E\u3059\u3002
|
|
52
|
+
\u767B\u9332\u3057\u305F PDF \u304C\u73FE\u884C\u7248\u306B\u306A\u308A\u3001\u305D\u308C\u307E\u3067\u306E\u7248\u306F\u904E\u53BB\u7248\u3068\u3057\u3066\u6B8B\u308A\u307E\u3059\uFF08twp customer contract get \u306E versions\uFF09\u3002
|
|
53
|
+
\u5FDC\u7B54\u3067\u73FE\u884C\u7248\u306E\u756A\u53F7\u304C\u9032\u3093\u3060\u3053\u3068\u3092\u78BA\u304B\u3081\u3066\u304B\u3089\u6210\u529F\u3092\u540D\u4E57\u308A\u307E\u3059\u3002
|
|
54
|
+
PDF \u4EE5\u5916\u306F\u4F55\u3082\u9001\u3089\u305A\u306B\u6B62\u3081\u307E\u3059\u3002--dry-run \u306F\u7F72\u540DURL\u306E\u767A\u884C\u3060\u3051\u3092\u8868\u793A\u3057\u307E\u3059\u3002
|
|
55
|
+
\u9867\u5BA2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u300C\u7DE8\u96C6\u8005\u300D\u4EE5\u4E0A\u3067\u3042\u308B\u3053\u3068\u304C\u8981\u308A\u307E\u3059\u3002`,flags:[CUSTOMER_FLAG,FILE_FLAG],forbidden:CONTRACT_EDIT_FORBIDDEN,async prepare(input,ctx){docId(input,"add-version");return preparePdf(input,ctx,"add-version")},plan:uploadUrlPlan,plannedNotes:input=>[`\u5B9F\u884C\u6642\u306F\u3001\u3053\u306E\u524D\u306B GET ${docPath(input,"add-version")}\uFF08\u66F8\u985E\u306E\u78BA\u8A8D\uFF09\u3068\u5BB9\u91CF\u691C\u67FB\u3092\u9001\u308A\u3001\u3053\u306E\u3042\u3068\u7F72\u540DURL\u3078 ${requireResolved(
|
|
56
|
+
input,"fileSize")} \u30D0\u30A4\u30C8\u3092 PUT \u3057\u3066\u304B\u3089\u3001POST ${docPath(input,"add-version")}/versions \u3067\u7248\u3092\u767B\u9332\u3057\u307E\u3059\u3002`],execute:addVersion,summarize:body=>contractSummary(body,"\u7248\u306E\u5DEE\u66FF\u3048"),raw:body=>contractOf(body,"\u7248\u306E\u5DEE\u66FF\u3048")},{name:"update",summary:"\u5951\u7D04\u66F8\u306E\u66F8\u985E\u540D\u30FB\u7A2E\u5225\u3092\u5909\u66F4\u3059\u308B\uFF08PDF \u306F\u5909\u308F\u308A\u307E\u305B\u3093\uFF09",
|
|
57
|
+
usage:"twp customer contract update <\u66F8\u985EID> --customer <\u9867\u5BA2> [--name <\u66F8\u985E\u540D>] [--type <\u7A2E\u5225>]",description:`${CONTRACT_REF_HELP}
|
|
58
|
+
|
|
59
|
+
\u6307\u5B9A\u3057\u305F\u9805\u76EE\u3060\u3051\u3092\u5909\u66F4\u3057\u307E\u3059\u3002\u5909\u66F4\u3059\u308B\u9805\u76EE\u30921\u3064\u3082\u6307\u5B9A\u3057\u306A\u3044\u3068\u30A8\u30E9\u30FC\u306B\u306A\u308A\u307E\u3059\u3002
|
|
60
|
+
PDF \u3092\u5DEE\u3057\u66FF\u3048\u308B\u306A\u3089 twp customer contract add-version \u3092\u4F7F\u3044\u307E\u3059\u3002`,flags:[CUSTOMER_FLAG,...updateFlags(CONTRACT_FIELDS)],forbidden:CONTRACT_EDIT_FORBIDDEN,async prepare(input,ctx){if(!hasAnyField(input,CONTRACT_FIELDS))throw new UsageError("\u5909\u66F4\u3059\u308B\u9805\u76EE\u30921\u3064\u4EE5\u4E0A\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",docUsage("update"));fieldBody(input,CONTRACT_FIELDS);docId(input,"update");return prepareCustomerFlag(
|
|
61
|
+
input,ctx,docUsage("update"))},plan:input=>({method:"PUT",path:docPath(input,"update"),body:fieldBody(input,CONTRACT_FIELDS)}),summarize:body=>contractSummary(body,"\u5951\u7D04\u66F8\u306E\u66F4\u65B0"),raw:body=>contractOf(body,"\u5951\u7D04\u66F8\u306E\u66F4\u65B0")},{name:"delete",summary:"\u5951\u7D04\u66F8\u3092\u524A\u9664\u3059\u308B\uFF08\u5168\u7248\u3002\u9867\u5BA2\u7BA1\u7406\u306E\u7BA1\u7406\u8005\u306E\u307F\u30FB--yes \u304C\u8981\u308B\uFF09",usage:"twp customer contract delete\
|
|
62
|
+
<\u66F8\u985EID> --customer <\u9867\u5BA2> --yes",description:`${CONTRACT_REF_HELP}
|
|
63
|
+
|
|
64
|
+
\u66F8\u985E\u3092\u904E\u53BB\u7248\u3054\u3068\u524A\u9664\u3057\u307E\u3059\uFF08\u30B5\u30FC\u30D0\u306F\u8AD6\u7406\u524A\u9664\u3067\u3001\u4E00\u89A7\u30FB\u8A73\u7D30\u30FB\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u304B\u3089\u6D88\u3048\u307E\u3059\uFF09\u3002
|
|
65
|
+
\u9867\u5BA2\uFF08\u53D6\u5F15\u5148\uFF09\u3092\u524A\u9664\u3059\u308B\u524D\u306B\u3001\u305D\u306E\u9867\u5BA2\u306E\u5951\u7D04\u66F8\u3092\u6D88\u3059\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\uFF08\u6B8B\u3063\u3066\u3044\u308B\u3068\u30B5\u30FC\u30D0\u304C\u9867\u5BA2\u306E\u524A\u9664\u3092\u65AD\u308A\u307E\u3059\uFF09\u3002`,destructive:true,flags:[CUSTOMER_FLAG],forbidden:childForbidden("\u5951\u7D04\u66F8","delete"),async prepare(input,ctx){docId(input,"delete");return prepareCustomerFlag(
|
|
66
|
+
input,ctx,docUsage("delete"))},plan:input=>({method:"DELETE",path:docPath(input,"delete")}),summarize:body=>acknowledgement(body,"\u5951\u7D04\u66F8\u524A\u9664"),raw:body=>acknowledgement(body,"\u5951\u7D04\u66F8\u524A\u9664")},{name:"download",summary:"\u5951\u7D04\u66F8\u306E PDF \u3092\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u3057\u3066\u30D5\u30A1\u30A4\u30EB\u3078\u66F8\u304D\u51FA\u3059\uFF08\u65E2\u5B9A\u306F\u73FE\u884C\u7248\uFF09",usage:"twp customer contract download <\u66F8\u985EID> --customer <\u9867\
|
|
67
|
+
\u5BA2> --out <\u30D1\u30B9> [--rev <\u7248\u756A\u53F7>] [--force]",description:`${CONTRACT_REF_HELP}
|
|
68
|
+
|
|
69
|
+
\u66F8\u304D\u51FA\u3057\u5148\u306F --out \u3067\u5FC5\u305A\u6307\u5B9A\u3057\u307E\u3059\uFF08\u6A19\u6E96\u51FA\u529B\u3078\u306F\u51FA\u3057\u307E\u305B\u3093\uFF09\u3002\u65E2\u5B58\u30D5\u30A1\u30A4\u30EB\u306F --force \u304C\u7121\u3051\u308C\u3070\u4E0A\u66F8\u304D\u3057\u307E\u305B\u3093\u3002
|
|
70
|
+
\u904E\u53BB\u7248\u306F --rev \u3067\u7248\u756A\u53F7\u3092\u6307\u5B9A\u3057\u307E\u3059\uFF08twp customer contract get \u306E versions \u306E version_number\uFF09\u3002`,flags:[CUSTOMER_FLAG,OUT_FLAG,REV_FLAG,FORCE_FLAG],forbidden:VIEW_FORBIDDEN("\u5951\u7D04\u66F8"),download:{outFlag:OUT_FLAG.name,forceFlag:FORCE_FLAG.name},async prepare(input,ctx){docId(input,"download");revOf(input);return prepareCustomerFlag(input,ctx,docUsage("download"))},plan:input=>({method:"GET",path:`${docPath(input,
|
|
71
|
+
"download")}/download`,query:{version:revOf(input)}}),summarize:body=>body,raw:body=>body}]};function revOf(input,usage=docUsage("download")){const raw=input.flags.get(REV_FLAG.name);if(raw===void 0)return void 0;const value=/^\d+$/.test(raw.trim())?Number(raw.trim()):Number.NaN;if(!Number.isSafeInteger(value)||value<1)throw new UsageError(`--rev \u306F 1 \u4EE5\u4E0A\u306E\u6574\u6570\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${raw}`,usage);return value}var caseDocumentResource={name:"\
|
|
72
|
+
case-document",summary:"\u9867\u5BA2\u306E\u6848\u4EF6\u66F8\u985E\uFF08\u898B\u7A4D\u3092\u307E\u305F\u3044\u3060\u4E00\u89A7\u306E\u307F\uFF09",operations:[{name:"list",summary:"\u9867\u5BA2\u306E\u6848\u4EF6\u66F8\u985E\u3092\u898B\u7A4D\u3092\u307E\u305F\u3044\u3067\u4E00\u89A7\u3059\u308B",usage:"twp customer case-document list --customer <\u9867\u5BA2>",description:`\u9867\u5BA2\u306E\u3059\u3079\u3066\u306E\u898B\u7A4D\u306B\u7D10\u3065\u304F\u6848\u4EF6\u66F8\u985E\u3092\u8FD4\u3057\u307E\u3059\uFF08\u3053\u306E API \u306F\u30DA\u30FC\u30B8\u30F3\u30B0\u3092\u6301\u3061\u307E\u305B\u3093\uFF09\u3002
|
|
73
|
+
\u767B\u9332\u30FB\u5DEE\u66FF\u3048\u30FB\u524A\u9664\u30FB\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u306F\u898B\u7A4D\u3054\u3068\u306E\u64CD\u4F5C\u3067\u3001\u3053\u306E\u30B3\u30DE\u30F3\u30C9\u3067\u306F\u6271\u3044\u307E\u305B\u3093\u3002
|
|
74
|
+
|
|
75
|
+
--output json \u306F API \u304C\u8FD4\u3059\u5168\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u51FA\u3057\u307E\u3059\u3002
|
|
76
|
+
--output table / text / tsv \u306F\u8981\u7D04\u5217\uFF08${CASE_COLUMNS.join(" / ")}\uFF09\u3067\u3059\u3002`,flags:[CUSTOMER_FLAG],forbidden:VIEW_FORBIDDEN("\u6848\u4EF6\u66F8\u985E"),async prepare(input,ctx){noArgs(input,"list",usageOf("case-document","list"));return prepareCustomerFlag(input,ctx,usageOf("case-document","list"))},plan:input=>({method:"GET",path:companyBase(input,"case-documents")}),summarize:body=>itemsOf(body,"\u6848\u4EF6\u66F8\u985E\u4E00\u89A7").map(row=>pick(row,CASE_COLUMNS)),
|
|
77
|
+
raw:body=>itemsOf(body,"\u6848\u4EF6\u66F8\u985E\u4E00\u89A7")}]};var CAMPAIGNS_PATH=`${CUSTOMERS_PATH}/campaigns`;var CAMPAIGN_COLUMNS=["id","name","description","sort_order","is_active","updated_at"];var CAMPAIGN_FIELDS=[{kind:"text",flag:"--name",key:"name",label:"\u65BD\u7B56\u540D",maxChars:255,summary:"\u65BD\u7B56\u540D\uFF08create \u3067\u306F\u5FC5\u9808\uFF09"},{kind:"text",flag:"--description",key:"description",label:"\u8AAC\u660E",maxChars:1e3,summary:"\u8AAC\u660E\uFF081,000 \u6587\u5B57\u307E\u3067\uFF09"},
|
|
78
|
+
{kind:"integer",flag:"--sort-order",key:"sort_order",label:"\u4E26\u3073\u9806",min:0,summary:"\u4E26\u3073\u9806\uFF080 \u4EE5\u4E0A\u306E\u6574\u6570\u3002\u5C0F\u3055\u3044\u307B\u3069\u5148\uFF09"},{kind:"boolean",flag:"--active",key:"is_active",summary:"\u6709\u52B9\u306B\u3059\u308B\u304B\uFF08true / false\uFF09"}];var campaignUsage=op=>usageOf("campaign",op);var campaignId=(input,op)=>singleId(input,"\u65BD\u7B56",campaignUsage(op),"twp customer campaign list \u306E id \u5217\u306E\u5024\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002");
|
|
79
|
+
var campaignPath=(input,op)=>`${CAMPAIGNS_PATH}/${encodeURIComponent(campaignId(input,op))}`;var CAMPAIGN_ADMIN_FORBIDDEN=levelForbidden(CUSTOMER_LICENSE,"\u65BD\u7B56\u306E\u4F5C\u6210\u30FB\u66F4\u65B0\u30FB\u524A\u9664\u306B\u306F\u9867\u5BA2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u300C\u7BA1\u7406\u8005\u300D\u3067\u3042\u308B\u3053\u3068\u304C\u8981\u308A\u307E\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002");function campaignOf(body,what){
|
|
80
|
+
const data=isRecord(body)?body["data"]:void 0;if(!isRecord(body)||body["result"]!==true||!isRecord(data)||typeof data["id"]!=="string"){throw new ApiResponseError(`${what}\u306E\u5FDC\u7B54\u306B data.id \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return data}var campaignResource={name:"campaign",summary:"\u65BD\u7B56\uFF08\u30AD\u30E3\u30F3\u30DA\u30FC\u30F3\uFF09\u30DE\u30B9\u30BF\u306E\u4E00\u89A7\u30FB\u8A73\u7D30\u30FB\u4F5C\u6210\u30FB\u66F4\u65B0\u30FB\u524A\u9664\uFF08\u4F5C\u6210\u30FB\u66F4\u65B0\u30FB\u524A\u9664\u306F\u7BA1\u7406\u8005\u306E\u307F\uFF09",
|
|
81
|
+
operations:[{name:"list",summary:"\u65BD\u7B56\u3092\u4E26\u3073\u9806\u306B\u4E00\u89A7\u3059\u308B",usage:"twp customer campaign list [--keyword <\u8A9E>] [--active true|false]",description:`\u65BD\u7B56\u3092\u4E26\u3073\u9806\uFF08sort_order\uFF09\u306E\u6607\u9806\u306B\u3001\u30C6\u30CA\u30F3\u30C8\u306E\u5168\u4EF6\u3092\u8FD4\u3057\u307E\u3059\uFF08\u3053\u306E API \u306F\u30DA\u30FC\u30B8\u30F3\u30B0\u3092\u6301\u3061\u307E\u305B\u3093\uFF09\u3002
|
|
82
|
+
--keyword \u306F\u65BD\u7B56\u540D\u30FB\u8AAC\u660E\u306E\u90E8\u5206\u4E00\u81F4\u3067\u3059\u3002--active \u3067\u6709\u52B9\u30FB\u7121\u52B9\u3092\u7D5E\u308A\u8FBC\u307F\u307E\u3059\u3002
|
|
83
|
+
\u65BD\u7B56\u306E ID \u306F\u3001\u62C5\u5F53\u8005\u30FB\u30A2\u30D7\u30ED\u30FC\u30C1\u5148\u306E\u7D5E\u308A\u8FBC\u307F\uFF08twp customer people list --campaign / twp prospect list --campaign\uFF09\u306B\u4F7F\u3044\u307E\u3059\u3002
|
|
84
|
+
|
|
85
|
+
--output json \u306F API \u304C\u8FD4\u3059\u5168\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u51FA\u3057\u307E\u3059\u3002
|
|
86
|
+
--output table / text / tsv \u306F\u8981\u7D04\u5217\uFF08${CAMPAIGN_COLUMNS.join(" / ")}\uFF09\u3067\u3059\u3002`,flags:[{name:"--keyword",summary:"\u65BD\u7B56\u540D\u30FB\u8AAC\u660E\u306E\u90E8\u5206\u4E00\u81F4\u3067\u7D5E\u308A\u8FBC\u3080",takesValue:true,placeholder:"<\u8A9E>"},{name:"--active",summary:"\u6709\u52B9\uFF08true\uFF09\u30FB\u7121\u52B9\uFF08false\uFF09\u3067\u7D5E\u308A\u8FBC\u3080",takesValue:true,placeholder:"<true|false>"}],forbidden:VIEW_FORBIDDEN("\u65BD\u7B56"),plan(input){
|
|
87
|
+
noArgs(input,"list",campaignUsage("list"));const active=input.flags.get("--active");return{method:"GET",path:CAMPAIGNS_PATH,query:{keyword:nonEmpty(input.flags,"--keyword"),is_active:active===void 0?void 0:booleanText("--active",active)?"1":"0"}}},summarize:body=>itemsOf(body,"\u65BD\u7B56\u4E00\u89A7").map(row=>pick(row,CAMPAIGN_COLUMNS)),raw:body=>itemsOf(body,"\u65BD\u7B56\u4E00\u89A7")},{name:"get",summary:"\u65BD\u7B561\u4EF6\u306E\u8A73\u7D30\u3092\u8868\u793A\u3059\u308B",usage:"twp custo\
|
|
88
|
+
mer campaign get <\u65BD\u7B56ID>",description:"\u65BD\u7B56\u306E ID \u306F twp customer campaign list \u306E id \u5217\u306E\u5024\u3067\u3059\u3002",flags:[],forbidden:VIEW_FORBIDDEN("\u65BD\u7B56"),plan:input=>({method:"GET",path:campaignPath(input,"get")}),summarize:body=>pick(campaignOf(body,"\u65BD\u7B56"),CAMPAIGN_COLUMNS),raw:body=>campaignOf(body,"\u65BD\u7B56")},{name:"create",summary:"\u65BD\u7B56\u3092\u4F5C\u6210\u3059\u308B\uFF08\u9867\u5BA2\u7BA1\u7406\u306E\u7BA1\u7406\u8005\u306E\u307F\uFF09",
|
|
89
|
+
usage:"twp customer campaign create --name <\u65BD\u7B56\u540D> [--description <\u8AAC\u660E>] [--sort-order <\u6574\u6570>] [--active true|false]",description:"--name \u304C\u5FC5\u9808\u3067\u3059\u3002\u4F5C\u6210\u3057\u305F\u65BD\u7B56\u306E ID \u304C\u8FD4\u308A\u307E\u3059\u3002",flags:createFlags(CAMPAIGN_FIELDS),forbidden:CAMPAIGN_ADMIN_FORBIDDEN,plan(input){noArgs(input,"create",campaignUsage("create"));if(!input.flags.has("--name"))throw new UsageError("--name \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",
|
|
90
|
+
campaignUsage("create"));return{method:"POST",path:CAMPAIGNS_PATH,body:fieldBody(input,CAMPAIGN_FIELDS)}},summarize:body=>pick(campaignOf(body,"\u65BD\u7B56\u306E\u4F5C\u6210"),CAMPAIGN_COLUMNS),raw:body=>campaignOf(body,"\u65BD\u7B56\u306E\u4F5C\u6210")},{name:"update",summary:"\u65BD\u7B56\u3092\u66F4\u65B0\u3059\u308B\uFF08\u9867\u5BA2\u7BA1\u7406\u306E\u7BA1\u7406\u8005\u306E\u307F\uFF09",usage:"twp customer campaign update <\u65BD\u7B56ID> [--name <\u65BD\u7B56\u540D>] [--description <\u8AAC\u660E>] [--sort-order <\u6574\u6570>] [--ac\
|
|
91
|
+
tive true|false]",description:"\u6307\u5B9A\u3057\u305F\u9805\u76EE\u3060\u3051\u3092\u5909\u66F4\u3057\u307E\u3059\u3002\u5909\u66F4\u3059\u308B\u9805\u76EE\u30921\u3064\u3082\u6307\u5B9A\u3057\u306A\u3044\u3068\u30A8\u30E9\u30FC\u306B\u306A\u308A\u307E\u3059\u3002",flags:updateFlags(CAMPAIGN_FIELDS),forbidden:CAMPAIGN_ADMIN_FORBIDDEN,plan(input){if(!hasAnyField(input,CAMPAIGN_FIELDS))throw new UsageError("\u5909\u66F4\u3059\u308B\u9805\u76EE\u30921\u3064\u4EE5\u4E0A\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",
|
|
92
|
+
campaignUsage("update"));return{method:"PUT",path:campaignPath(input,"update"),body:fieldBody(input,CAMPAIGN_FIELDS)}},summarize:body=>pick(campaignOf(body,"\u65BD\u7B56\u306E\u66F4\u65B0"),CAMPAIGN_COLUMNS),raw:body=>campaignOf(body,"\u65BD\u7B56\u306E\u66F4\u65B0")},{name:"delete",summary:"\u65BD\u7B56\u3092\u524A\u9664\u3059\u308B\uFF08\u9867\u5BA2\u7BA1\u7406\u306E\u7BA1\u7406\u8005\u306E\u307F\u30FB--yes \u304C\u8981\u308B\uFF09",usage:"twp customer campaign delete <\u65BD\u7B56ID> --yes",description:"\
|
|
93
|
+
\u65BD\u7B561\u4EF6\u3092\u524A\u9664\u3057\u307E\u3059\u3002\n\u30B5\u30FC\u30D0\u306F\u62C5\u5F53\u8005\u30FB\u30A2\u30D7\u30ED\u30FC\u30C1\u5148\u304B\u3089\u306E\u53C2\u7167\u3092\u691C\u67FB\u305B\u305A\u306B\u6D88\u3057\u307E\u3059\uFF08\u305D\u308C\u3089\u306B\u4ED8\u3044\u305F\u65BD\u7B56\u306E ID \u306F\u305D\u306E\u307E\u307E\u6B8B\u308A\u307E\u3059\uFF09\u3002\n\u53C2\u7167\u3092\u6B8B\u3057\u305F\u307E\u307E\u6B62\u3081\u308B\u306A\u3089\u3001\u524A\u9664\u3067\u306F\u306A\u304F twp customer campaign update <\u65BD\u7B56ID> --active false \u3067\u7121\u52B9\u306B\u3057\u307E\u3059\u3002",
|
|
94
|
+
destructive:true,flags:[],forbidden:CAMPAIGN_ADMIN_FORBIDDEN,plan:input=>({method:"DELETE",path:campaignPath(input,"delete")}),summarize:body=>acknowledgement(body,"\u65BD\u7B56\u524A\u9664"),raw:body=>acknowledgement(body,"\u65BD\u7B56\u524A\u9664")}]};var customerDocumentSubresources=[contractResource,caseDocumentResource,campaignResource];export{OUT_FLAG,FORCE_FLAG,REV_FLAG,singleId,uploadStaged,revOf,customerDocumentSubresources};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{CommandModelMissingError,MAX_REPORTED_VIOLATIONS,loadCommandModelDomain,loadCommandModelIndex,validateBody,validateQuery}from"./chunk-NZ7WI4RZ.js";import{redactSecretValues,redactSecrets}from"./chunk-
|
|
3
|
+
import{CommandModelMissingError,MAX_REPORTED_VIOLATIONS,loadCommandModelDomain,loadCommandModelIndex,validateBody,validateQuery}from"./chunk-NZ7WI4RZ.js";import{redactSecretValues,redactSecrets}from"./chunk-UT4FACHN.js";import{ApiError,TwpApiClient,appendQuery}from"./chunk-IF2K4PM5.js";import{isSafePathSegment}from"./chunk-GMBJTG6A.js";import{DEFAULT_MAX_TOKENS,emptyUsage}from"./chunk-PWXXCLVZ.js";import{isPrivateTwpHome,isTrustworthyCacheFile,writePrivateFileAtomic}from"./chunk-D233KKXW.js";
|
|
4
4
|
import{AuthSession,NotLoggedInError,SessionExpiredError,withFileLock}from"./chunk-XNLIEUAW.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import{MODES,applyPermissionMode,checkPermission,isModeId,setActiveModes}from"./chunk-NAUH75MM.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import{isForceOnly,killProcessTree,system32}from"./chunk-N2UVRM3Z.js";import{findExecutable,isWindowsDriveAbsolute}from"./chunk-PMOUHEJQ.js";import{configReadDirs,ensureTwpHome,
|
|
5
5
|
twpHomeDir}from"./chunk-RZVI6PMW.js";import fs2 from"fs";import path3 from"path";import os2 from"os";import{realpathSync}from"fs";import{homedir}from"os";import{dirname,isAbsolute,relative,resolve,sep}from"path";var PathDeniedError=class extends Error{constructor(message){super(message);this.name="PathDeniedError"}};function resolveToolPath(input,cwd,home=homedir()){if(typeof input!=="string"||input.trim()===""){throw new PathDeniedError("path must be a non-empty string")}const expanded=expandHome(input,home);const abs=isAbsolute(expanded)?resolve(expanded):resolve(cwd,expanded);const root=realOrSelf(resolve(cwd));assertInside(abs,resolve(cwd),abs);assertNotSecret(abs,home);const real=realOrSelf(abs);if(real!==
|
|
6
6
|
abs){assertInside(real,root,abs);assertNotSecret(real,home)}return abs}function realToolPath(input,cwd,home=homedir()){return realOrSelf(resolveToolPath(input,cwd,home))}function assertInside(target,root,reported){const rel=relative(root,target);const outside=rel===".."||rel.startsWith(`..${sep}`)||isAbsolute(rel);if(outside){throw new PathDeniedError(`path escapes the working directory (${reported}). Only paths under ${root} can be accessed.`)}}function realOrSelf(target){let current=target;const rest=[];
|