@tocca-systems/twp-cli 0.76.0 → 0.77.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 +4 -0
- package/README.md +29 -1
- package/dist/{agent-63DPLVPG.js → agent-76W4NFZE.js} +1 -1
- package/dist/{analysis-SDYGHILR.js → analysis-7PNFFLPQ.js} +2 -2
- package/dist/{announcement-4RI2COFS.js → announcement-HYMSN6ZR.js} +1 -1
- package/dist/{api-command-OKQHSCD4.js → api-command-L4HJRG3D.js} +2 -2
- package/dist/{app-OAJTDDSR.js → app-QBAP55F5.js} +2 -2
- package/dist/{attendance-correct-NJACXW3S.js → attendance-correct-7IKTSZ6I.js} +1 -1
- package/dist/{attendance-lists-AUEECNJL.js → attendance-lists-7SOG6G4N.js} +1 -1
- package/dist/{backlog-NQUZQSCY.js → backlog-IJTBHL3Z.js} +1 -1
- package/dist/{budget-ILEQGQOA.js → budget-ZWB346BP.js} +1 -1
- package/dist/{chunk-LWJI22LF.js → chunk-3WPHZXST.js} +1 -1
- package/dist/{chunk-YX6ONBPK.js → chunk-436IBRP4.js} +1 -1
- package/dist/{chunk-BATCC7M5.js → chunk-4OJD5FKD.js} +2 -2
- package/dist/{chunk-3GYJG6DA.js → chunk-4URNOAMG.js} +1 -1
- package/dist/{chunk-IMXXECCD.js → chunk-6TSP4IP5.js} +1 -1
- package/dist/{chunk-NNDUIAGN.js → chunk-AITUAHWK.js} +1 -1
- package/dist/{chunk-7FJFBIVB.js → chunk-AM7Y4QRF.js} +2 -2
- package/dist/{license-ME2GUNJQ.js → chunk-AVFQ2LM5.js} +19 -20
- package/dist/{chunk-5VZSHYKX.js → chunk-CFTAGW2J.js} +1 -1
- package/dist/{chunk-ICGIHXBA.js → chunk-DLDDMXZT.js} +1 -1
- package/dist/{chunk-7APLKLQL.js → chunk-GHE6X45G.js} +26 -23
- package/dist/{chunk-CZUXTKMR.js → chunk-GQEXST5N.js} +1 -1
- package/dist/{chunk-QO2QPN3M.js → chunk-H7MIIYRN.js} +1 -1
- package/dist/{chunk-NFTLHE4Z.js → chunk-HFZGBHTB.js} +1 -1
- package/dist/{chunk-URI3URUA.js → chunk-HZYP3BMS.js} +2 -2
- package/dist/{chunk-PCE6OI4L.js → chunk-L7T2CQ3M.js} +1 -1
- package/dist/{chunk-MNFO6G2H.js → chunk-MZVXEYOV.js} +1 -1
- package/dist/{chunk-CKZDTAMN.js → chunk-SAH5WS3K.js} +1 -1
- package/dist/chunk-SZWDH33O.js +11 -0
- package/dist/{chunk-UVU7JXCG.js → chunk-XG2JN66A.js} +1 -1
- package/dist/{chunk-CKYCRD2J.js → chunk-YM4U6A4Y.js} +1 -1
- package/dist/cli.js +9 -5
- package/dist/{company-QFIHJ4OY.js → company-WLPLQINW.js} +2 -2
- package/dist/{contract-IGH7GFOM.js → contract-MC6HSQER.js} +2 -2
- package/dist/{department-TIW5YISO.js → department-3YEKQJ6I.js} +1 -1
- package/dist/{deposit-2YPPFQVR.js → deposit-RFTXWS5D.js} +1 -1
- package/dist/{domain-knowledge-F3GKX2VI.js → domain-knowledge-EXMD2NMI.js} +1 -1
- package/dist/{estimate-JBQSEUJY.js → estimate-BPY7AFDK.js} +3 -3
- package/dist/{evaluation-4QE4L3OG.js → evaluation-ESIPIC3K.js} +1 -1
- package/dist/{expense-CFHOIO3I.js → expense-ISK4RPCY.js} +1 -1
- package/dist/{fiscal-year-N7POJ77K.js → fiscal-year-F2DVA2GB.js} +1 -1
- package/dist/{holiday-WRSUBPT3.js → holiday-5ZAH6U6Z.js} +1 -1
- package/dist/{inquiry-6ANZ6HKD.js → inquiry-3KEU4MAN.js} +1 -1
- package/dist/{invoice-INIF6BUD.js → invoice-BTVMPVKS.js} +2 -2
- package/dist/{job-title-KOFDOB65.js → job-title-NO5VRM5J.js} +1 -1
- package/dist/{knowledge-W3ONOGV2.js → knowledge-TXUSVHRG.js} +1 -1
- package/dist/{leave-LE3CIRPT.js → leave-VZCKDT73.js} +2 -2
- package/dist/license-JVYLYTSV.js +4 -0
- package/dist/{media-FDOAC5ZH.js → media-YILATBAI.js} +2 -2
- package/dist/{notification-N4FVLOPW.js → notification-TSLB2ZHF.js} +1 -1
- package/dist/{oneshot-ALYKVJW2.js → oneshot-GF6TO7AH.js} +1 -1
- package/dist/{position-4C37LALY.js → position-IREP6O4N.js} +1 -1
- package/dist/{project-DUHSOINK.js → project-XIBLUUAR.js} +1 -1
- package/dist/{prospect-QRTQA2R6.js → prospect-IXEACPLB.js} +2 -2
- package/dist/{purchase-LWRNGP3T.js → purchase-ADUT2XJU.js} +3 -3
- package/dist/{receivable-A4T74HZK.js → receivable-JNXWOLJN.js} +1 -1
- package/dist/{redmine-X2GTGXHG.js → redmine-WOVVB7SU.js} +1 -1
- package/dist/{registry-NQZQRUDI.js → registry-FOBQSQFB.js} +1 -1
- package/dist/{report-UNEQSKNU.js → report-52ZHE57K.js} +1 -1
- package/dist/{run-UYJP4Z5U.js → run-X6MY7CER.js} +1 -1
- package/dist/{sales-ai-review-IT6X4YQB.js → sales-ai-review-JBDTSY67.js} +1 -1
- package/dist/{sales-master-QYNSMAP4.js → sales-master-HQTY3C24.js} +2 -2
- package/dist/{sales-numbering-LZQCKDUM.js → sales-numbering-NZW2RNOS.js} +1 -1
- package/dist/{search-GZIEQYLJ.js → search-FOUZEY5X.js} +1 -1
- package/dist/{segment-NNWN5KJB.js → segment-3CMYFOFP.js} +1 -1
- package/dist/{skill-MWETUX56.js → skill-U6757V7A.js} +1 -1
- package/dist/{supplier-payment-4UKRQZHS.js → supplier-payment-NG3PYZAH.js} +2 -2
- package/dist/{support-JJ7ZCJFX.js → support-JS35JS7I.js} +1 -1
- package/dist/{task-HAVEGLQC.js → task-3OK44YBT.js} +2 -2
- package/dist/{user-VRMLWGQ2.js → user-4BL2ILYK.js} +101 -22
- package/dist/{user-contract-type-ZCUMSGVP.js → user-contract-type-XHCKC6T7.js} +1 -1
- package/dist/{worker-agent-VCJUJDBO.js → worker-agent-XTDV36WT.js} +1 -1
- package/dist/{workflow-I7L476KK.js → workflow-Q7XCMDRH.js} +1 -1
- package/package.json +1 -1
- package/dist/chunk-YIH36ZDI.js +0 -11
package/CHANGELOG.public.md
CHANGED
|
@@ -11,6 +11,10 @@
|
|
|
11
11
|
`CHANGELOG.md` に残してあります。顧客向けの履歴は public 公開以降を対象とします。
|
|
12
12
|
-->
|
|
13
13
|
|
|
14
|
+
## 0.77.0
|
|
15
|
+
|
|
16
|
+
`twp user permission update` で機能権限を変えられるようになりました(1人ずつ・CSV で一括)。送る前に変更内容とライセンスの増減を表示し、空きが足りなければ止まります。`twp user permission list` で1人の機能権限とライセンスの割当を確認できます。
|
|
17
|
+
|
|
14
18
|
## 0.76.0
|
|
15
19
|
|
|
16
20
|
`twp wiki append` で本文の末尾へ追記、`twp wiki update --section <見出し>` で1つの節だけを差し替えられるようになりました。全文を送り直さずに済みます。
|
package/README.md
CHANGED
|
@@ -60,6 +60,7 @@ TWP(Tocca Working Platform)を、ターミナルから使うための CLI
|
|
|
60
60
|
| **できる** | `twp media ai-tag run` による AI のタグ提案(クレジットを消費・`--apply` で今のタグに追加) |
|
|
61
61
|
| **できる** | `twp media duplicate list` による内容が同じファイルの検出とアップロード前の同名検査 |
|
|
62
62
|
| **できる** | `twp storage get` によるストレージ使用量の確認(管理者) |
|
|
63
|
+
| **できる** | `twp user permission list` / `twp user permission update` による機能権限の参照と変更(1人・CSV 一括。送る前に変更内容とライセンスの増減を表示し、空きが足りなければ止まる。組織管理者) |
|
|
63
64
|
| **できる** | `twp license list` / `twp license assignments` によるシートライセンスの棚卸(機能ごとの枠・使用数・空き・削減予約、割当者の所属・最終ログインと「失効済み・権限 none・長期未ログインなのに割当が残っている」の判定。組織管理者) |
|
|
64
65
|
| **できる** | `twp attendance` による自分の勤怠の参照(いまの打刻状態・打刻の履歴・月の勤怠表)と打刻・打刻修正(過去の時刻での打刻・メモの変更・取り消し・プロジェクトの付け替え)、勤怠連絡の一覧・登録・変更・削除、チームの勤怠状況・フレックス精算の参照、管理者向けの残業サマリ(36協定を含む)・締め状況の参照 |
|
|
65
66
|
| **できる** | `twp leave` による有給の残日数・取得履歴・付与履歴の参照と有給の申請(`twp leave request`)、`twp workchange list` / `twp shift list` による月の勤務変更・シフトの参照(`--me` で自分の分・無ければ全員分=勤怠の管理者) |
|
|
@@ -374,6 +375,33 @@ leader@example.com,admin
|
|
|
374
375
|
- `twp user invite list` に出るのは**期限内の未受諾の招待だけ**です。期限が切れた招待は再送も取消もできないので、`twp user invite create` で招待し直してください
|
|
375
376
|
- `resend` / `delete` はメールアドレスで指定します(未受諾の招待が1件に絞れたときだけ受け付けます)。トークンは招待を受諾できる秘密なので、`twp user invite list` では伏字で出ます(`--no-redact` で表示)
|
|
376
377
|
|
|
378
|
+
### 機能権限を変える
|
|
379
|
+
|
|
380
|
+
組織管理者向けです。画面の「組織管理 > ユーザー」の機能権限と同じ変更をします(同じ API を使います)。
|
|
381
|
+
|
|
382
|
+
```
|
|
383
|
+
twp user permission list <ユーザー> # 機能ごとのレベル・取れるレベル・ライセンスの割当
|
|
384
|
+
twp user permission update <ユーザー> --feature <機能> --level <レベル>
|
|
385
|
+
twp user permission update <ユーザー> --feature inquiry=member --feature workflow=none
|
|
386
|
+
twp user permission update --file <CSV> [--dry-run] # 一括
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
機能はコード(`wiki_management`)か画面の表示名(`Wiki管理`)で、レベルはその機能が取れる値(`none` / `member` / `admin`、`none` / `viewer` / `editor` / `admin` 等)で指定します。取れない組み合わせは送る前に止めます。一括の CSV は「ユーザー, 機能, レベル」の3列です(1行目のヘッダは省略可・UTF-8 と Shift_JIS を読めます)。
|
|
390
|
+
|
|
391
|
+
```csv
|
|
392
|
+
user,feature,level
|
|
393
|
+
yamada@example.com,inquiry,member
|
|
394
|
+
E0012,Wiki管理,editor
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
- **送る前に全件を検査し、不正な行(ユーザーが見つからない・機能とレベルの組み合わせ・同じ人と機能の重複)が1つでもあれば1件も送りません**(行番号と理由をすべて出して終了コード 2)
|
|
398
|
+
- 続けて今の権限・ライセンスの割当・空きを読み、「誰の・どの機能が・何から何へ・ライセンスがどうなるか」を stderr に出します。`--dry-run` はここまでで止まります。**割り当てるライセンスの空きが足りない機能があれば、機能名と不足数を出して1件も送りません**
|
|
399
|
+
- ライセンスの割当・解除はサーバが権限の変更に合わせて行います。**いまサーバがライセンスを動かすのは問い合わせ管理・コンテンツ管理・ワークフロー(admin)・ヒアリング(admin)だけ**で、それ以外の機能は権限を変えてもライセンスは割り当ても解除もされません(画面から変えた場合も同じ。該当するときは stderr で知らせます)
|
|
400
|
+
- ライセンスの増減は送る前の**見込み**で、最終的な判定はサーバがします。空きが読めない機能は事前検査をせずに知らせます
|
|
401
|
+
- 送信は1件(1人の1機能)ずつで、失敗したらそこで止め、成功・失敗・未送信の件と、成功した件を元に戻すコマンドを出します(終了コード 3)
|
|
402
|
+
- 権限は変わったがサーバがライセンスの更新に失敗した件があれば、結果を出したうえで終了コード 3 で終わります
|
|
403
|
+
- 変更が本人の画面・API に効くまで最大5分ほどかかります(サーバの設定により最長30分)
|
|
404
|
+
|
|
377
405
|
### 組織マスタ(部署・役職・職位・セグメント・契約形態・事業年度設定)を扱う
|
|
378
406
|
|
|
379
407
|
作成・更新・削除は管理者向けです。一覧・取得・ツリー・所属者は、ログインしていれば使えます。
|
|
@@ -994,7 +1022,7 @@ twp license assignments <機能コード|機能名> | --all-features [--inactive
|
|
|
994
1022
|
- `bulk-restore` はゴミ箱から戻す操作です(アーカイブの解除ではありません)。`bulk-delete --permanent` は**ゴミ箱にあるファイルだけ**を完全に削除します(先に `bulk-delete` でゴミ箱へ移してください)
|
|
995
1023
|
- `twp storage get` は使用量・上限・残量と種類別の内訳を出します(管理者のみ。アップロード前の容量検査は誰でも自動で行われます)
|
|
996
1024
|
- **`twp license list` は画面の「課金管理 > ライセンス状況」と同じ枠・使用数を出します**(購入済みは Stripe の契約中のシートだけ)。シートの購入・削減は画面から行ってください
|
|
997
|
-
- **`twp license assignments` の判定(findings)は、失効済み/機能権限が none/`--inactive-days` 日(既定60・最大90)ログインの記録が無い/ユーザーが見つからない、の4種類です。** 最終ログインは `twp user export` と同じくログイン履歴(90日で消える・SSO は記録されない)から読むので、oauth の人は判定しません。各行の `release_command
|
|
1025
|
+
- **`twp license assignments` の判定(findings)は、失効済み/機能権限が none/`--inactive-days` 日(既定60・最大90)ログインの記録が無い/ユーザーが見つからない、の4種類です。** 最終ログインは `twp user export` と同じくログイン履歴(90日で消える・SSO は記録されない)から読むので、oauth の人は判定しません。各行の `release_command` は権限を none にしてライセンスを外す `twp user permission update` のコマンド案です。**打ってもサーバが割当を外さない行(ライセンスの要らないレベル・権限の変更でライセンスが動かない機能・ユーザーが見つからない)には出しません**——その行は画面の「ライセンス管理」から外してください
|
|
998
1026
|
- **AI 生成(`twp media image create` / `twp media document create`)は生成物をメディアライブラリに保存し、`--out` を付けるとそのファイルをそのまま書き出します。** 付けなければファイルIDを出して終わります(あとから `twp media download` で取れます)。AI クレジットを消費するので `--yes` が要ります(送る内容は `--dry-run` で確認できます)。`--from <ファイルID>` を付けると、その画像を元にしたリミックスになります
|
|
999
1027
|
- 書き出し先が既にあるときは、**生成を送る前に**止まります(クレジットを使ってから「書けません」で落ちません)。取得だけが失敗したときは、ファイルIDと `twp media download` のコマンドを出して失敗で終わります(生成し直す必要はありません)
|
|
1000
1028
|
- **生成の回数制限(1分あたりの回数・ユーザーごと)に当たっても自動では打ち直しません**(生成は1回ごとに課金されるため)。待つ秒数を stderr に出して終了コード 4 で終わります
|
|
@@ -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-
|
|
3
|
+
import{SCHEDULE_HELP,parseSchedule}from"./chunk-436IBRP4.js";import"./chunk-WVCEKC7V.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-MI6HVYR2.js";import"./chunk-RX5HWI4L.js";import{charCount,readBody}from"./chunk-6LSQCOCJ.js";import{AGENT_REPOSITORIES_PATH,AGENT_SCHEDULES_PATH,AGENT_SESSIONS_PATH}from"./chunk-GHE6X45G.js";import{isSafePathSegment}from"./chunk-HVZUXLQ4.js";import{ApiError}from"./chunk-JA5A6UJ2.js";
|
|
4
4
|
import"./chunk-H4CDX4TX.js";import"./chunk-II5RVJQN.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-4VZKNEVN.js";import"./chunk-RZVI6PMW.js";import"./chunk-QQRJLH6B.js";
|
|
5
5
|
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{FROM_FLAG,MANHOUR_DESCRIPTION,MANHOUR_FROM_FLAG,MANHOUR_TO_FLAG,MONTH_FLAG,TO_FLAG,analysisDomain,analysisForbidden,currentMonth,dataOf,listIn,manhourNotes,manhourQuery,manhourRows,monthRange,monthsBetween,noArgs,profitRows,rangeNotes,recordOf,staffKpiRows,workloadDistributionNotes,workloadDistributionRows}from"./chunk-
|
|
4
|
-
import"./chunk-RX5HWI4L.js";import"./chunk-6LSQCOCJ.js";import"./chunk-
|
|
3
|
+
import{FROM_FLAG,MANHOUR_DESCRIPTION,MANHOUR_FROM_FLAG,MANHOUR_TO_FLAG,MONTH_FLAG,TO_FLAG,analysisDomain,analysisForbidden,currentMonth,dataOf,listIn,manhourNotes,manhourQuery,manhourRows,monthRange,monthsBetween,noArgs,profitRows,rangeNotes,recordOf,staffKpiRows,workloadDistributionNotes,workloadDistributionRows}from"./chunk-3WPHZXST.js";import"./chunk-XG2JN66A.js";import"./chunk-EXT4AIDF.js";import"./chunk-AITUAHWK.js";import"./chunk-JJSBBWJ5.js";import"./chunk-MI6HVYR2.js";
|
|
4
|
+
import"./chunk-RX5HWI4L.js";import"./chunk-6LSQCOCJ.js";import"./chunk-GHE6X45G.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import"./chunk-II5RVJQN.js";import"./chunk-PS5QFKHB.js";import"./chunk-3ZRMMBP5.js";import"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.js";import"./chunk-RZVI6PMW.js";import"./chunk-QQRJLH6B.js";import"./chunk-NHYMHCAT.js";
|
|
5
5
|
import"./chunk-VSJBJXZO.js";export{FROM_FLAG,MANHOUR_DESCRIPTION,MANHOUR_FROM_FLAG,MANHOUR_TO_FLAG,MONTH_FLAG,TO_FLAG,analysisDomain,analysisForbidden,currentMonth,dataOf,listIn,manhourNotes,manhourQuery,manhourRows,monthRange,monthsBetween,noArgs,profitRows,rangeNotes,recordOf,staffKpiRows,workloadDistributionNotes,workloadDistributionRows};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{composeDocument,htmlToText,metaLine}from"./chunk-C7MO3RHJ.js";import{boundedText}from"./chunk-JJSBBWJ5.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,positiveInteger}from"./chunk-MI6HVYR2.js";import{readBody}from"./chunk-6LSQCOCJ.js";import{ANNOUNCEMENTS_PATH}from"./chunk-
|
|
3
|
+
import{composeDocument,htmlToText,metaLine}from"./chunk-C7MO3RHJ.js";import{boundedText}from"./chunk-JJSBBWJ5.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,positiveInteger}from"./chunk-MI6HVYR2.js";import{readBody}from"./chunk-6LSQCOCJ.js";import{ANNOUNCEMENTS_PATH}from"./chunk-GHE6X45G.js";import{isSafePathSegment}from"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import"./chunk-II5RVJQN.js";import{requireResolved,
|
|
4
4
|
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-4VZKNEVN.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var LABEL="\u304A\u77E5\u3089\u305B";var LIST_COLUMNS=["id","publish_start_at","sender_name","category_name","title","is_read","require_confirmation","is_confirmed"];var UNCONFIRMED_COLUMNS=["id","publish_start_at","publish_end_at","importance","title"];var GET_COLUMNS=["id","title","sender_name","category_name","importance_name","publish_start_at","publish_end_at","is_organization","is_read","require_confirmation","is_confirmed","allow_replies","link_url"];var REPLY_COLUMNS=["id","created_at","\
|
|
5
5
|
user_name","is_mine","content"];var REPLY_MAX_CHARS=2e3;function noArgs(input,op){if(input.args.length>0){throw new UsageError(`${op} \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,`twp announcement ${op} help`)}}function checkId(raw,help){const id=raw.trim();if(id==="")throw new UsageError("\u304A\u77E5\u3089\u305B\u306E ID \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",help);if(!isSafePathSegment(id)){throw new UsageError(`\u304A\u77E5\u3089\u305B\u306E ID \u3068\u3057\u3066\u4F7F\u3048\u306A\u3044\
|
|
6
6
|
\u5024\u3067\u3059: ${id}`,"\u304A\u77E5\u3089\u305B\u306E ID \u306F twp announcement list \u306E id \u5217\u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002")}return id}function announcementId(input,op){const help=`twp announcement ${op} help`;const[raw,...rest]=input.args;if(rest.length>0)throw new UsageError(`${op} \u304C\u53D7\u3051\u53D6\u308C\u308B\u304A\u77E5\u3089\u305B ID \u306F1\u3064\u3060\u3051\u3067\u3059: ${rest.join(" ")}`,help);return checkId(raw??"",help)}function announcementIds(input){
|
|
@@ -1,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-NZ7WI4RZ.js";import{NO_REDACT_FLAG,NO_REDACT_NOTICE,exitCodeFor,fetchAllPages,reportError}from"./chunk-
|
|
4
|
-
import{redactSecretValues,redactSecrets,withDebug}from"./chunk-LDBYJPRD.js";import{DEFAULT_MAX_ITEMS,DEFAULT_MAX_PAGES,envelopePaging,isPageNumberEnvelope,pageRangeNotes,positiveInteger,readEnvelopeCursor,readPageNumberCursor,shellQuote}from"./chunk-MI6HVYR2.js";import{parseOperationArgs,repeatedValues}from"./chunk-RX5HWI4L.js";import{readBody}from"./chunk-6LSQCOCJ.js";import"./chunk-
|
|
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-CFTAGW2J.js";import"./chunk-SZWDH33O.js";import"./chunk-Q3B65OFC.js";import{evaluateQuery}from"./chunk-GFLGXGWE.js";import{renderOutput}from"./chunk-PO35MCYP.js";import{describeWaitResult,parseWaitOptions,waitUntilTerminal}from"./chunk-WVCEKC7V.js";
|
|
4
|
+
import{redactSecretValues,redactSecrets,withDebug}from"./chunk-LDBYJPRD.js";import{DEFAULT_MAX_ITEMS,DEFAULT_MAX_PAGES,envelopePaging,isPageNumberEnvelope,pageRangeNotes,positiveInteger,readEnvelopeCursor,readPageNumberCursor,shellQuote}from"./chunk-MI6HVYR2.js";import{parseOperationArgs,repeatedValues}from"./chunk-RX5HWI4L.js";import{readBody}from"./chunk-6LSQCOCJ.js";import"./chunk-GHE6X45G.js";import"./chunk-HVZUXLQ4.js";import{ApiError,TwpApiClient,appendQuery}from"./chunk-JA5A6UJ2.js";
|
|
5
5
|
import"./chunk-H4CDX4TX.js";import"./chunk-II5RVJQN.js";import"./chunk-3ZRMMBP5.js";import{ApiResponseError,EXIT_OK,EXIT_WAIT_TIMEOUT,NetworkError,UsageError}from"./chunk-VFPY2A23.js";import{GLOBAL_OPTIONS_HELP}from"./chunk-PECIBNFD.js";import{AuthSession,NotLoggedInError,SessionExpiredError,loadCredentials}from"./chunk-XNLIEUAW.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import{effectiveApiUrl,resolveConfiguredOutput,resolveProfile}from"./chunk-4VZKNEVN.js";
|
|
6
6
|
import"./chunk-RZVI6PMW.js";import{HELP_TOKEN}from"./chunk-W4E4F2ZA.js";import"./chunk-QQRJLH6B.js";import{OUTPUT_FORMATS,resolveOutputFormat}from"./chunk-74BPZOKU.js";import"./chunk-UREA4ZIG.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var MIN_SEGMENT_CHARS=3;var parsedCache=new WeakMap;function splitSegments(path){return path.split("/").filter(segment=>segment!=="")}function parseRoutes(routes){const cached=parsedCache.get(routes);if(cached!==void 0)return cached;const parsed=[];for(const[key,domain]of Object.entries(routes.routes)){const space=key.indexOf(" ");if(space<=0)continue;const template=key.slice(space+1);parsed.push({method:key.slice(0,space),template,domain,segments:splitSegments(template).map(segment=>/^\{[^/{}]+\}$/.
|
|
7
7
|
test(segment)?null:segment)})}parsedCache.set(routes,parsed);return parsed}function matches(route,segments){if(route.segments.length!==segments.length)return false;return route.segments.every((literal,i)=>literal===null||literal===segments[i])}function compareSpecificity(a,b){const literals=route=>route.segments.filter(segment=>segment!==null).length;const diff=literals(b)-literals(a);if(diff!==0)return diff;for(let i=0;i<a.segments.length;i+=1){const aLiteral=a.segments[i]!==null;const bLiteral=b.
|
|
@@ -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-4VAWX7TW.js";import"./chunk-NZ7WI4RZ.js";import{buildDiffLines,
|
|
4
|
-
diffStat}from"./chunk-VRBI2NPI.js";import"./chunk-N2UVRM3Z.js";import"./chunk-LDBYJPRD.js";import"./chunk-
|
|
4
|
+
diffStat}from"./chunk-VRBI2NPI.js";import"./chunk-N2UVRM3Z.js";import"./chunk-LDBYJPRD.js";import"./chunk-GHE6X45G.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import"./chunk-II5RVJQN.js";import"./chunk-VFPY2A23.js";import{RelayError,builtinCatalog,createRuntime,loadCachedCatalog,modelLabel,pickModel,toModelInfos}from"./chunk-5WTFZJT7.js";import"./chunk-D233KKXW.js";import"./chunk-PMOUHEJQ.js";
|
|
5
5
|
import"./chunk-XNLIEUAW.js";import{proxyDiagnostics}from"./chunk-J7QYPKVK.js";import{checkMinSupportedVersion,isBelowMinSupported,minSupportedBlockMessage}from"./chunk-DXXFUNYN.js";import"./chunk-4VZKNEVN.js";import{configReadDirs,twpHomeDir}from"./chunk-RZVI6PMW.js";import{parseArgv}from"./chunk-QQCWGMZN.js";import{applyPermissionMode,checkPermission,describePermissionMode,getMode,isModeId,modeSource,nextMode}from"./chunk-2LOT54OO.js";import"./chunk-W4E4F2ZA.js";
|
|
6
6
|
import"./chunk-QQRJLH6B.js";import{isFullWidth,isWide,stringWidth,stripAnsi}from"./chunk-UREA4ZIG.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import{require_fuzzysort}from"./chunk-DIMZRTLE.js";import{__commonJS,__export,__require,__toESM}from"./chunk-VSJBJXZO.js";var require_react_production=__commonJS({"node_modules/react/cjs/react.production.js"(exports){"use strict";var REACT_ELEMENT_TYPE=Symbol.for("react.transitional.element");var REACT_PORTAL_TYPE=Symbol.for("react.portal");var REACT_FRAGMENT_TYPE=Symbol.for("react.fragment");var REACT_STRICT_MODE_TYPE=Symbol.for("react.strict_mode");var REACT_PROFILER_TYPE=Symbol.for("react.profiler");var REACT_CONSUMER_TYPE=Symbol.for("react.consumer");var REACT_CONTEXT_TYPE=Symbol.for("react.context");var REACT_FORWARD_REF_TYPE=Symbol.
|
|
7
7
|
for("react.forward_ref");var REACT_SUSPENSE_TYPE=Symbol.for("react.suspense");var REACT_MEMO_TYPE=Symbol.for("react.memo");var REACT_LAZY_TYPE=Symbol.for("react.lazy");var REACT_ACTIVITY_TYPE=Symbol.for("react.activity");var REACT_VIEW_TRANSITION_TYPE=Symbol.for("react.view_transition");var MAYBE_ITERATOR_SYMBOL=Symbol.iterator;function getIteratorFn(maybeIterable){if(null===maybeIterable||"object"!==typeof maybeIterable)return null;maybeIterable=MAYBE_ITERATOR_SYMBOL&&maybeIterable[MAYBE_ITERATOR_SYMBOL]||
|
|
@@ -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-X6MY7CER.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-
|
|
3
|
+
import{PUNCH_TYPES,assertMonthOpen,attendanceDomain}from"./chunk-XG2JN66A.js";import{dateFlag,monthFlag}from"./chunk-EXT4AIDF.js";import"./chunk-AITUAHWK.js";import"./chunk-JJSBBWJ5.js";import"./chunk-MI6HVYR2.js";import"./chunk-RX5HWI4L.js";import"./chunk-6LSQCOCJ.js";import"./chunk-GHE6X45G.js";import{isSafePathSegment}from"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import"./chunk-II5RVJQN.js";
|
|
4
4
|
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-4VZKNEVN.js";import"./chunk-RZVI6PMW.js";import"./chunk-QQRJLH6B.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var CREATE_USAGE="twp attendance record create --date <YYYY-MM-DD> --time <HH:MM> --type <clock-in|clock-out|break-start|break-end|switch> [--project <\u30B3\u30FC\u30C9|ID>] [--task <\u30BF\u30B9\u30AFID>] [--memo <\u30E1\u30E2>]";var UPDATE_USAGE="twp attendance record update <\u8A18\u9332ID> --memo <\u30E1\u30E2> [--month <YYYY-MM>]";var DELETE_USAGE="twp attendance record delete <\u8A18\u9332ID> --reason <\u7406\u7531> --yes [--month <YYYY-MM>]";var MOVE_USAGE="twp attendance record move <\u8A18\u9332\
|
|
5
5
|
ID> --project <\u30B3\u30FC\u30C9|ID> [--month <YYYY-MM>]";var TEXT_MAX=500;var UUID_PATTERN=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;var TIME_PATTERN=/^(\d{2}):(\d{2})(?::(\d{2}))?$/;var CLOSED_REASON="\u30B5\u30FC\u30D0\u306F\u7DE0\u3081\u6E08\u307F\u306E\u6708\u3078\u306E\u4FEE\u6B63\u3092\u62D2\u5426\u305B\u305A\u7DE0\u3081\u306E\u96C6\u8A08\u3092\u6D17\u3044\u66FF\u3048\u308B\u306E\u3067\u3001CLI \u304C\u9001\u308B\u524D\u306B\u6B62\u3081\u3066\u3044\u307E\u3059\u3002";
|
|
6
6
|
var FORBIDDEN="\u81EA\u5206\u306E\u6253\u523B\u306E\u4FEE\u6B63\u306B\u306F\u6253\u523B\u4FEE\u6B63\u306E\u6A29\u9650\uFF08\u30E6\u30FC\u30B6\u30FC\u8A2D\u5B9A\u306E\u300C\u6253\u523B\u4FEE\u6B63\u300D\uFF09\u3068\u52E4\u6020\u306E\u5229\u7528\u6A29\u9650\u304C\u5FC5\u8981\u3067\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u306E\u7BA1\u7406\u8005\u306B\u4ED8\u4E0E\u3092\u4F9D\u983C\u3057\u3066\u304F\u3060\u3055\u3044";var RECORD_COLUMNS=["id","type","type_label","recorded_at","year_month","project_id","t\
|
|
@@ -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-
|
|
3
|
+
import{hoursMinutes}from"./chunk-XG2JN66A.js";import{monthFlag}from"./chunk-EXT4AIDF.js";import"./chunk-AITUAHWK.js";import"./chunk-JJSBBWJ5.js";import"./chunk-MI6HVYR2.js";import"./chunk-RX5HWI4L.js";import"./chunk-6LSQCOCJ.js";import"./chunk-GHE6X45G.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import"./chunk-II5RVJQN.js";import"./chunk-PS5QFKHB.js";import{isRecord,pick}from"./chunk-3ZRMMBP5.js";
|
|
4
4
|
import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.js";import"./chunk-RZVI6PMW.js";import"./chunk-QQRJLH6B.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var MONTH_FLAG={name:"--month",summary:"\u5BFE\u8C61\u306E\u5E74\u6708\uFF08YYYY-MM\uFF09",takesValue:true,placeholder:"<YYYY-MM>"};var ME_FLAG={name:"--me",summary:"\u81EA\u5206\u306E\u5206\u3060\u3051\u3092\u8868\u793A\u3059\u308B\uFF08\u7121\u3051\u308C\u3070\u5168\u54E1\u5206\u30FB\u7BA1\u7406\u8005\uFF09",takesValue:false};var FORBIDDEN_ADMIN="\u6A29\u9650\u304C\u8DB3\u308A\u307E\u305B\u3093\u3002\u5168\u54E1\u5206\uFF08--me \u306A\u3057\uFF09\u306F\u52E4\u6020\u306E\u7BA1\u7406\u8005\u6A29\u9650\uFF08\u52E4\u6020: \u7BA1\u7406\u8005\uFF09\u3001\u81EA\u5206\u306E\u5206\uFF08--me\uFF09\u306F\u52E4\u6020\u306E\u5229\u7528\u6A29\u9650\u304C\u8981\u308A\u307E\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u306E\u7BA1\u7406\u8005\u306B\u6A29\u9650\u306E\u4ED8\u4E0E\u3092\u4F9D\u983C\u3057\u3066\u304F\u3060\u3055\u3044";
|
|
5
5
|
function listBody(spec,body){if(!isRecord(body)||!Array.isArray(body[spec.key])){throw new ApiResponseError(`${spec.label}\u306E\u5FDC\u7B54\u306B ${spec.key} \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return body}function monthListOperation(spec){const usage=`twp ${spec.domain} list [--month <YYYY-MM>] [--me]`;return{name:"list",summary:`\u6708\u306E${spec.label}\u3092\u4E00\u89A7\u3059\u308B\uFF08--me \u3067\u81EA\u5206\u306E\u5206\u30FB\u7121\u3051\u308C\u3070\u5168\u54E1\u5206\uFF1D\u7BA1\u7406\u8005\uFF09`,
|
|
6
6
|
usage,description:`GET ${spec.path} \u3092\u8868\u793A\u3057\u307E\u3059\uFF08\u5168\u54E1\u5206\u30FB\u52E4\u6020\u306E\u7BA1\u7406\u8005\u6A29\u9650\u304C\u5FC5\u8981\uFF09\u3002--me \u3092\u4ED8\u3051\u308B\u3068 GET ${spec.path}/me\uFF08\u81EA\u5206\u306E\u5206\uFF09\u3067\u3059\u3002
|
|
@@ -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-RX5HWI4L.js";import{readBody}from"./chunk-6LSQCOCJ.js";import{BACKLOG_BASE_PATH,BACKLOG_PROJECT_SCOPE_LABEL,BACKLOG_SCOPE_LABEL,backlogSpacePath,isExactNumericId,resolveNamed}from"./chunk-
|
|
3
|
+
import{repeatedValues}from"./chunk-RX5HWI4L.js";import{readBody}from"./chunk-6LSQCOCJ.js";import{BACKLOG_BASE_PATH,BACKLOG_PROJECT_SCOPE_LABEL,BACKLOG_SCOPE_LABEL,backlogSpacePath,isExactNumericId,resolveNamed}from"./chunk-GHE6X45G.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import"./chunk-II5RVJQN.js";import{requireResolved,singleRef,withResolved}from"./chunk-PS5QFKHB.js";import{isRecord,pick}from"./chunk-3ZRMMBP5.js";
|
|
4
4
|
import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.js";import"./chunk-RZVI6PMW.js";import"./chunk-QQRJLH6B.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var DEFAULT_COUNT=20;var MAX_COUNT=100;var NUMERIC=/^[0-9]+$/;var ISSUE_REF=/^(?:[A-Za-z0-9_]+-[0-9]+|[0-9]+)$/;var DATE=/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/;var SPACE_COLUMNS=["id","space_url"];var PROJECT_COLUMNS=["id","projectKey","name"];var ISSUE_LIST_COLUMNS=["issueKey","summary","status","assignee","priority","dueDate","updated","descriptionTruncated"];var ISSUE_GET_COLUMNS=["id","issueKey","projectId","summary","description","descriptionTruncated","status","issueType","priority","assignee","cr\
|
|
5
5
|
eatedUser","parentIssueId","startDate","dueDate","estimatedHours","actualHours","created","updated"];var ISSUE_JSON_SHAPE_HELP='--output json \u306E\u5F62\uFF08Backlog API \u306E\u5F62\u3067\u306F\u3042\u308A\u307E\u305B\u3093\uFF09:\n TWP \u30B5\u30FC\u30D0\u304C\u6574\u3048\u305F\u5F62\u3067\u8FD4\u308A\u307E\u3059\u3002Backlog API \u306E\u8AB2\u984C\u3092\u305D\u306E\u307E\u307E\u8AAD\u3080\u524D\u63D0\u3067\u66F8\u304F\u3068\u58CA\u308C\u307E\u3059\u3002\n - status / priority / resolution / issueType / assignee / createdUser / updatedUser \u306F\n \u540D\u524D\u306E\u6587\u5B57\u5217\u3067\u3059\uFF08{id, name} \u3067\u306F\u3042\u308A\u307E\u305B\u3093\uFF09\u3002ID \u306F statusId / issueTypeId /\n assigneeId \u2026 \u306E\u3088\u3046\u306B\u672B\u5C3E Id \u306E\u5225\u30AD\u30FC\u306B\u3042\u308A\u307E\u3059\u3002\u672A\u8A2D\u5B9A\u306A\u3089\u4E21\u65B9 null \u3067\u3059\u3002\n - category / versions / milestone \u306F {id, name} \u306E\u914D\u5217\u306E\u307E\u307E\u3067\u3059\uFF08\u8907\u6570\u4ED8\u3051\u3089\u308C\u308B\u305F\u3081\u3001\n \
|
|
6
6
|
\u540D\u524D\u3068 ID \u3092\u5225\u30AD\u30FC\u3078\u5206\u3051\u308B\u3068\u5BFE\u5FDC\u304C\u5D29\u308C\u307E\u3059\uFF09\u3002customFields \u3082\u914D\u5217\u3067\u3059\u3002\n \u4F8B\uFF081\u4EF6\u30FB\u629C\u7C8B\uFF09:\n {"id": 1234, "issueKey": "PRJ-12", "summary": "\u2026",\n "statusId": 1, "status": "\u672A\u5BFE\u5FDC", "issueTypeId": 56, "issueType": "\u30BF\u30B9\u30AF",\n "assigneeId": 91, "assignee": "\u8C37 \u6A39",\n "category": [{"id": 7, "name": "\u8A2D\u8A08"}], "milestone": [], ...}\n --query \u3082\u3053\u306E\u5F62\u306B\u5F53\u305F\u308A\u307E\u3059\uFF08issue list \u306E\u4F8B: --query "[].{key: issueKey, type: issueType}"\uFF09\u3002';
|
|
@@ -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-
|
|
3
|
+
import{breakdownRows,budgetDomain,dashboardRows,fiscalYear,importRejection,overwriteLines,parseAllocationRows,parseSplit,parseTargetRows,periodsLabel}from"./chunk-YM4U6A4Y.js";import"./chunk-3WPHZXST.js";import"./chunk-XG2JN66A.js";import"./chunk-EXT4AIDF.js";import"./chunk-AITUAHWK.js";import"./chunk-JJSBBWJ5.js";import"./chunk-MI6HVYR2.js";import"./chunk-RX5HWI4L.js";import"./chunk-6LSQCOCJ.js";import"./chunk-GHE6X45G.js";import"./chunk-HVZUXLQ4.js";
|
|
4
4
|
import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import"./chunk-II5RVJQN.js";import"./chunk-PS5QFKHB.js";import"./chunk-3ZRMMBP5.js";import"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.js";import"./chunk-RZVI6PMW.js";import"./chunk-QQRJLH6B.js";import"./chunk-NHYMHCAT.js";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{hoursMinutes}from"./chunk-
|
|
3
|
+
import{hoursMinutes}from"./chunk-XG2JN66A.js";import{dateFlag,monthFlag}from"./chunk-EXT4AIDF.js";import{repeatedValues}from"./chunk-RX5HWI4L.js";import{requireResolved,withResolved}from"./chunk-PS5QFKHB.js";import{isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";var ANALYSIS_PATH="/api/v2/analysis";var ACCESSIBLE_PAGES_HINT="\u958B\u3051\u308B\u5206\u6790\u30DA\u30FC\u30B8\u306F twp api /api/v2/analysis/accessible-pages \u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002";var LICENSE_GUIDANCE="\u5206\u6790\u3092\u4F7F\u3046\u6A29\u9650\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u30C6\u30CA\u30F3\u30C8\u304C\u5206\u6790\u3092\u5951\u7D04\u3057\u3066\u3044\u306A\u3044\u304B\u3001\u3042\u306A\u305F\u306E\u5206\u6790\u306E\u6A29\u9650\u304C\u300C\u306A\u3057\u300D\u306B\u306A\u3063\u3066\u3044\u307E\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002";
|
|
4
4
|
var PAGE_GUIDANCE=`\u3053\u306E\u5206\u6790\u30DA\u30FC\u30B8\u306E\u95B2\u89A7\u5BFE\u8C61\u306B\u542B\u307E\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u5206\u6790\u306E\u7BA1\u7406\u8005\u306B\u5BFE\u8C61\u3078\u306E\u8FFD\u52A0\u3092\u4F9D\u983C\u3057\u3066\u304F\u3060\u3055\u3044\u3002${ACCESSIBLE_PAGES_HINT}`;var PAGE_DENIED_MARK="\u5206\u6790\u30DA\u30FC\u30B8";function analysisForbidden(levelGuidance2){return body=>{if(body?.error==="permission_denied"){const text=body.error_description??"";
|
|
5
5
|
if(text.includes(PAGE_DENIED_MARK))return PAGE_GUIDANCE;if(text.includes("\u3053\u306E\u6A5F\u80FD"))return LICENSE_GUIDANCE;return void 0}if(body?.error==="forbidden")return levelGuidance2;return void 0}}function levelGuidance(page,features){return`${page}\u3092\u958B\u304F\u6A29\u9650\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u5206\u6790\u62C5\u5F53\u8005\u30D5\u30E9\u30B0\u3001\u307E\u305F\u306F${features}\u306E\u6A29\u9650\uFF08\u300C\u306A\u3057\u300D\u4EE5\u5916\uFF09\u304C\u8981\u308A\u307E\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`}
|
|
6
6
|
var FROM_FLAG={name:"--from",summary:"\u958B\u59CB\u306E\u5E74\u6708\uFF08YYYY-MM\uFF09",takesValue:true,placeholder:"<YYYY-MM>"};var TO_FLAG={name:"--to",summary:"\u7D42\u4E86\u306E\u5E74\u6708\uFF08YYYY-MM\uFF09",takesValue:true,placeholder:"<YYYY-MM>"};var MONTH_FLAG={name:"--month",summary:"1\u304B\u6708\u3060\u3051\uFF08YYYY-MM\uFF09\u3002--from / --to \u3068\u306F\u4F75\u7528\u4E0D\u53EF",takesValue:true,placeholder:"<YYYY-MM>"};var YEAR_FLAG={name:"--year",summary:"1\u5E74\u5206\uFF081\u301C12\u6708\u30FBYYYY\uFF09\u3002--from \
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{parseWaitOptions,waitUntilTerminal}from"./chunk-WVCEKC7V.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-MI6HVYR2.js";import{repeatedValues}from"./chunk-RX5HWI4L.js";import{charCount,readBody}from"./chunk-6LSQCOCJ.js";import{WORKER_AGENTS_PATH}from"./chunk-
|
|
3
|
+
import{parseWaitOptions,waitUntilTerminal}from"./chunk-WVCEKC7V.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-MI6HVYR2.js";import{repeatedValues}from"./chunk-RX5HWI4L.js";import{charCount,readBody}from"./chunk-6LSQCOCJ.js";import{WORKER_AGENTS_PATH}from"./chunk-GHE6X45G.js";import{isSafePathSegment}from"./chunk-HVZUXLQ4.js";import{ApiError}from"./chunk-JA5A6UJ2.js";import{requireResolved,withResolved}from"./chunk-PS5QFKHB.js";
|
|
4
4
|
import{isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiRejectedError,ApiResponseError,UsageError,WaitTimeoutError}from"./chunk-VFPY2A23.js";import{NotLoggedInError,SessionExpiredError}from"./chunk-XNLIEUAW.js";var LABEL="\u30EF\u30FC\u30AB\u30FC\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8";var LIST_COLUMNS=["agent_id","name","is_enabled","schedule","next_run_at","last_run_status","last_run_at","owner_user_name"];var GET_COLUMNS=["agent_id","name","description","owner_user_name","is_enabled","schedule","next_run_at","is_running","last_run_status","last_run_at","last_run_id","allowed_tool_count","write_enabled","ai_model","consecutive_failure_count","auto_disabled_reason"];var TOOL_COLUMNS=["name","category","d\
|
|
5
5
|
isplay_name","is_mutating","is_available"];var TOOL_GET_COLUMNS=["name","category","display_name","description","is_mutating","is_destructive","is_available","required_feature","required_level","required_api_scopes"];var RUN_COLUMNS=["run_id","status","trigger","started_at","duration_ms","tool_call_count","consumed_credits","summary"];var RUN_GET_COLUMNS=["summary","status","skip_reason","error_code","error_message","run_id","agent_id","trigger","is_dry_run","started_at","finished_at","duration_\
|
|
6
6
|
ms","iteration_count","tool_call_count","mutation_count","consumed_credits","ai_model"];var STEP_COLUMNS=["step_no","type","tool_name","is_mutation","duration_ms","content","error_message"];var STEP_TYPES=["thinking","tool_call","tool_result","error","budget_warning","final_summary"];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\u305F\u3081\u4F7F\u3048\u307E\u305B\u3093\u3002\u30C6\u30CA\u30F3\u30C8\u306E\u7BA1\u7406\u8005\u306B\u30E9\u30A4\u30BB\u30F3\u30B9\u306E\u5272\u308A\u5F53\u3066\u3092\u4F9D\u983C\u3057\u3066\u304F\u3060\u3055\u3044\u3002";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{salesAdminForbidden}from"./chunk-
|
|
4
|
-
SALES_ROUNDING_SETTING_PATH,isExactNumericId}from"./chunk-
|
|
3
|
+
import{salesAdminForbidden}from"./chunk-AM7Y4QRF.js";import{featureLicenseGuidance,licenseForbidden}from"./chunk-DLDDMXZT.js";import{booleanText,boundedText}from"./chunk-JJSBBWJ5.js";import{LIST_PAGING_HELP,PAGE_NUMBER_LIST_FLAGS,nonEmpty,pageNumberPaging,pageNumberQuery,pageRangeNotes}from"./chunk-MI6HVYR2.js";import{repeatedValues}from"./chunk-RX5HWI4L.js";import{SALES_ESTIMATE_FORMATS_PATH,SALES_ESTIMATE_NO_RULES_PATH,SALES_INVOICE_NO_RULES_PATH,SALES_PURCHASE_NO_RULES_PATH,
|
|
4
|
+
SALES_ROUNDING_SETTING_PATH,isExactNumericId}from"./chunk-GHE6X45G.js";import{requireResolved,withResolved}from"./chunk-PS5QFKHB.js";import{acknowledgement,isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";var INT_MAX=2147483647;var MEMBER_FORBIDDEN=licenseForbidden(featureLicenseGuidance("\u8CA9\u58F2\u7BA1\u7406"));function envelope(body,what){if(!isRecord(body)||body["result"]!==true)throw new ApiResponseError(`${what}\u306E\u5FDC\u7B54\u306E\u5F62\u304C\u60F3\u5B9A\u3068\u9055\u3044\u307E\u3059\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`);return body}function recordOf(body,what){const data=envelope(body,what)["data"];if(!isRecord(data)||typeof data["id"]!==
|
|
5
5
|
"string")throw new ApiResponseError(`${what}\u306E\u5FDC\u7B54\u306B data.id \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`);return data}function serverMessage(body){const message=isRecord(body)?body["message"]:void 0;return typeof message==="string"&&message!==""?[message]:[]}function text(value){return typeof value==="string"||typeof value==="number"?String(value):""}function integerValue(flag,raw,min,max=INT_MAX){const trimmed=raw.
|
|
6
6
|
trim();const value=/^\d+$/.test(trimmed)?Number(trimmed):Number.NaN;if(!Number.isSafeInteger(value)||value<min||value>max)throw new UsageError(`${flag} \u306F ${min} \u4EE5\u4E0A ${max} \u4EE5\u4E0B\u306E\u6574\u6570\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${raw}`);return value}var RULE_COLUMNS=["id","rule_name","prefix","digit_count","current_number","count_up_num","next_number","sort_order"];function nextNumber(rule,purchaseFormat){const current=rule["current_number"];const step=rule["\
|
|
7
7
|
count_up_num"]??1;const digits=rule["digit_count"];if(typeof current!=="number"||typeof step!=="number"||typeof digits!=="number")return void 0;const width=purchaseFormat&&digits===0?4:digits;const padded=String(current+step).padStart(width,"0");const prefix=rule["prefix"];if(purchaseFormat)return`${prefix===null||prefix===void 0?"2000":text(prefix)}${padded}`;return typeof prefix==="string"&&prefix!==""&&prefix!=="0"?`${prefix}${padded}`:padded}function withNext(spec,row){const next=nextNumber(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{contentTypeFor,inspectLocalFile,issued}from"./chunk-5KJ5OIKI.js";import{checkUploadQuota}from"./chunk-V64CGX7V.js";import{readCsvFileText}from"./chunk-QLENN5DD.js";import{featureLicenseGuidance}from"./chunk-
|
|
3
|
+
import{contentTypeFor,inspectLocalFile,issued}from"./chunk-5KJ5OIKI.js";import{checkUploadQuota}from"./chunk-V64CGX7V.js";import{readCsvFileText}from"./chunk-QLENN5DD.js";import{featureLicenseGuidance}from"./chunk-DLDDMXZT.js";import{createFlags,fieldBody,hasAnyField,updateFlags}from"./chunk-AITUAHWK.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-MI6HVYR2.js";import{CUSTOMERS_PATH,SALES_COMPANIES_PATH,isExactNumericId}from"./chunk-GHE6X45G.js";
|
|
4
4
|
import{isSafePathSegment}from"./chunk-HVZUXLQ4.js";import{ApiError,errorListMessages}from"./chunk-JA5A6UJ2.js";import{requireResolved,singleRef,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";function levelForbidden(licenseGuidance,levelGuidance){return body=>body?.error==="permission_denied"?licenseGuidance:levelGuidance}var COMPANY_LICENSE="\u53D6\u5F15\u5148\u3092\u6271\u3046\u306B\u306F\u8CA9\u58F2\u7BA1\u7406\u304B\u9867\u5BA2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u8981\u308A\u307E\u3059\u304C\u3001\u3069\u3061\u3089\u3082\u3042\u308A\u307E\u305B\u3093\u3002\u30C6\u30CA\u30F3\u30C8\u304C\u3069\u3061\u3089\u3082\u5951\u7D04\u3057\u3066\u3044\u306A\u3044\u304B\u3001\u3042\u306A\u305F\u306E\u6A29\u9650\u304C\u3069\u3061\u3089\u3082\u300C\u306A\u3057\u300D\u306B\u306A\u3063\u3066\u3044\u307E\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002";
|
|
5
5
|
var CUSTOMER_LICENSE=featureLicenseGuidance("\u9867\u5BA2\u7BA1\u7406");var COMPANY_WRITE_FORBIDDEN=levelForbidden(COMPANY_LICENSE,"\u9867\u5BA2\u306E\u4F5C\u6210\u30FB\u66F4\u65B0\u306B\u306F\u3001\u9867\u5BA2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u300C\u7DE8\u96C6\u8005\u300D\u4EE5\u4E0A\u304B\u3001\u8CA9\u58F2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u300C\u30E1\u30F3\u30D0\u30FC\u300D\u4EE5\u4E0A\u306E\u3069\u3061\u3089\u304B\u304C\u8981\u308A\u307E\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002");
|
|
6
6
|
var LEVEL_LABELS={admin:"\u7BA1\u7406\u8005",editor:"\u7DE8\u96C6\u8005",viewer:"\u95B2\u89A7\u8005",none:"\u306A\u3057"};var CHILD_DELETE_NEEDS="\u62C5\u5F53\u8005\u30FB\u5BFE\u5FDC\u5C65\u6B74\u306E\u524A\u9664\u306B\u306F\u9867\u5BA2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u300C\u7BA1\u7406\u8005\u300D\u3067\u3042\u308B\u3053\u3068\u304C\u8981\u308A\u307E\u3059";var CUSTOMER_DELETE_FORBIDDEN=levelForbidden(COMPANY_LICENSE,"\u9867\u5BA2\u306E\u524A\u9664\u306B\u306F\u3001\u4F01\u696D\u306E\u524A\u9664\u306B\u9867\u5BA2\u7BA1\u7406\u306E\u300C\u7BA1\u7406\u8005\u300D\u304B\u8CA9\u58F2\u7BA1\u7406\u306E\u300C\u30E1\u30F3\u30D0\u30FC\u300D\u4EE5\u4E0A\u3001\u62C5\u5F53\u8005\u30FB\u5BFE\u5FDC\u5C65\u6B74\u306E\u524A\u9664\u306B\u9867\u5BA2\u7BA1\u7406\u306E\u300C\u7BA1\u7406\u8005\u300D\u304C\u8981\u308A\u307E\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{CUSTOMER_FLAG,CUSTOMER_LICENSE,childForbidden,levelForbidden,prepareCustomerFlag}from"./chunk-
|
|
3
|
+
import{CUSTOMER_FLAG,CUSTOMER_LICENSE,childForbidden,levelForbidden,prepareCustomerFlag}from"./chunk-4URNOAMG.js";import{inspectLocalFile}from"./chunk-5KJ5OIKI.js";import{checkUploadQuota}from"./chunk-V64CGX7V.js";import{createFlags,fieldBody,hasAnyField,updateFlags}from"./chunk-AITUAHWK.js";import{booleanText}from"./chunk-JJSBBWJ5.js";import{nonEmpty}from"./chunk-MI6HVYR2.js";import{CUSTOMERS_PATH,isExactNumericId}from"./chunk-GHE6X45G.js";import{isSafePathSegment}from"./chunk-HVZUXLQ4.js";
|
|
4
4
|
import{ApiError}from"./chunk-JA5A6UJ2.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={
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{booleanText,boundedText,isoDate}from"./chunk-JJSBBWJ5.js";import{nonEmpty,positiveInteger}from"./chunk-MI6HVYR2.js";import{ORG_MASTER_LIMIT}from"./chunk-
|
|
3
|
+
import{booleanText,boundedText,isoDate}from"./chunk-JJSBBWJ5.js";import{nonEmpty,positiveInteger}from"./chunk-MI6HVYR2.js";import{ORG_MASTER_LIMIT}from"./chunk-GHE6X45G.js";import{ULID_RE,UUID_RE,isSafePathSegment}from"./chunk-HVZUXLQ4.js";import{requireResolved,singleRef,withResolved}from"./chunk-PS5QFKHB.js";import{acknowledgement,isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";var CLEAR_DATE="none";function placeholderOf(field){switch(field.kind){case"text":return`<${field.label}>`;case"integer":return"<\u6574\u6570>";case"number":return"<\u6570\u5024>";case"time":return"<HH:MM>";case"weekdays":return"<\u65E5\u6708\u706B\u6C34\u6728\u91D1\u571F\u306E0/1\u30927\u6841>";case"boolean":return"<true|false>";case"enum":return`<${field.values.join("|")}>`;case"date":return`<YYYY-MM-DD|${CLEAR_DATE}>`;case"ref":return field.placeholder}}function createFlags(fields){return fields.
|
|
4
4
|
map(field=>({name:field.flag,summary:field.summary,takesValue:true,placeholder:placeholderOf(field)}))}function updateFlags(fields){const flags=[];for(const field of fields){flags.push({name:field.flag,summary:field.summary,takesValue:true,placeholder:placeholderOf(field)});if(field.kind==="ref")flags.push({name:field.clearFlag,summary:field.clearSummary,takesValue:false})}return flags}function integerValue(field,raw){const trimmed=raw.trim();const value=/^\d+$/.test(trimmed)?Number(trimmed):Number.
|
|
5
5
|
NaN;const tooLarge=field.max!==void 0&&value>field.max;if(!Number.isSafeInteger(value)||value<field.min||tooLarge){const range=field.max!==void 0?`${field.min} \u4EE5\u4E0A ${field.max} \u4EE5\u4E0B`:`${field.min} \u4EE5\u4E0A`;throw new UsageError(`${field.flag} \u306F ${range}\u306E\u6574\u6570\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${raw}`,`${field.label}\u3092\u6574\u6570\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return value}function numberValue(field,raw){
|
|
6
6
|
const trimmed=raw.trim();const value=/^\d+(\.\d+)?$/.test(trimmed)?Number(trimmed):Number.NaN;if(!Number.isFinite(value)||value<field.min||value>field.max){throw new UsageError(`${field.flag} \u306F ${field.min} \u4EE5\u4E0A ${field.max} \u4EE5\u4E0B\u306E\u6570\u5024\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${raw}`,`${field.label}\u3092\u6570\u5024\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return value}var TIME_RE=/^\d{2}:\d{2}$/;function timeValue(flag,raw){const value=raw.
|
|
@@ -1,7 +1,7 @@
|
|
|
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-
|
|
4
|
-
resolveNamed}from"./chunk-
|
|
3
|
+
import{readCsvFileText}from"./chunk-QLENN5DD.js";import{featureLicenseGuidance,invoiceFilters}from"./chunk-DLDDMXZT.js";import{boundedText,isoDate}from"./chunk-JJSBBWJ5.js";import{LIST_PAGING_HELP,PAGE_NUMBER_LIST_FLAGS,PAGE_NUMBER_PAGING_HELP,STABLE_PAGE_ORDER,nonEmpty,pageNumberPaging,pageNumberQuery,pageRangeNotes}from"./chunk-MI6HVYR2.js";import{repeatedValues}from"./chunk-RX5HWI4L.js";import{readBody}from"./chunk-6LSQCOCJ.js";import{SALES_DEPOSITS_PATH,isExactNumericId,
|
|
4
|
+
resolveNamed}from"./chunk-GHE6X45G.js";import{ApiError}from"./chunk-JA5A6UJ2.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\
|
|
7
7
|
ory","excess_tax_amount"];var ALLOCATION_COLUMNS=["id","invoice_id","invoice_no","invoice_title","invoice_date","allocated_amount","invoice_remaining_amount"];function labelsHelp(table){return Object.entries(table).map(([code,name])=>`${code}\uFF08${name}\uFF09`).join(" / ")}function refsOf(table){return Object.entries(table).map(([code,name])=>({id:code,name,code}))}function usageOf(op){return`twp deposit ${op} help`}function yen(value){return typeof value==="number"?`${value.toLocaleString("ja\
|
|
@@ -1,27 +1,28 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{CONCURRENCY,DEFAULT_INACTIVE_DAYS,LOGIN_HISTORY_RETENTION_DAYS,daysBetween,lastLogin,lastLoginText,mapPool,pacedSender,primaryAssignment,recentlyHired,spreadsheetSafe,userDetail}from"./chunk-DYNNGNXR.js";import
|
|
4
|
-
import{
|
|
3
|
+
import{CONCURRENCY,DEFAULT_INACTIVE_DAYS,LOGIN_HISTORY_RETENTION_DAYS,daysBetween,lastLogin,lastLoginText,mapPool,pacedSender,primaryAssignment,recentlyHired,spreadsheetSafe,userDetail}from"./chunk-DYNNGNXR.js";import{positiveInteger,shellQuote}from"./chunk-MI6HVYR2.js";import{DEPARTMENTS_PATH}from"./chunk-GHE6X45G.js";import{ApiError}from"./chunk-JA5A6UJ2.js";import{requireResolved,withResolved}from"./chunk-PS5QFKHB.js";import{isRecord}from"./chunk-3ZRMMBP5.js";
|
|
4
|
+
import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";var SEAT_MOVING_LEVELS={inquiry:["admin","member"],content_management:["admin","member"],workflow:["admin"],hearing:["admin"]};function levelHoldsSeat(feature,level){return SEAT_MOVING_LEVELS[feature]?.includes(level)??false}function permissionMovesSeat(feature){return Object.hasOwn(SEAT_MOVING_LEVELS,feature)}var LICENSE_FEATURE_NAMES={content_management:"\u30B3\u30F3\u30C6\u30F3\u30C4\u7BA1\u7406",inquiry:"\u554F\u3044\u5408\u308F\u305B\u7BA1\u7406",workflow:"\u30EF\u30FC\u30AF\u30D5\u30ED\u30FC",hearing:"\u30D2\u30A2\u30EA\u30F3\u30B0",task_management:"\u30BF\u30B9\u30AF\u7BA1\u7406",sales:"\u53D6\u5F15\u7BA1\u7406",attendance:"\u52E4\u6020\u7BA1\u7406",report:"\u30EC\u30DD\u30FC\u30C8",hr_management:"\u4EBA\u6750\u7BA1\u7406",learning:"\u5B66\u7FD2\u7BA1\u7406",expense:"\u7D4C\u8CBB\u7BA1\u7406",test:"\
|
|
5
5
|
\u30B7\u30CA\u30EA\u30AA\u30C6\u30B9\u30C8\u7BA1\u7406",chat:"\u30C1\u30E3\u30C3\u30C8",customer:"\u9867\u5BA2\u7BA1\u7406",survey:"\u30A2\u30F3\u30B1\u30FC\u30C8",organization_survey:"\u7D44\u7E54\u30B5\u30FC\u30D9\u30A4",feedback:"\u30D5\u30A3\u30FC\u30C9\u30D0\u30C3\u30AF",notes:"\u30CE\u30FC\u30C8",wiki_management:"Wiki",meeting_minutes:"\u8B70\u4E8B\u9332",equipment_management:"\u5099\u54C1\u7BA1\u7406",floor_map:"\u30D5\u30ED\u30A2\u30DE\u30C3\u30D7"};var LICENSES_PATH="/api/v2/licenses";var FORBIDDEN="\
|
|
6
|
-
\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u6A29\u9650\u304C\u5FC5\u8981\u3067\u3059\u3002twp license \u306F\u30C6\u30CA\u30F3\u30C8\u306E\u7D44\u7E54\u7BA1\u7406\u8005\u3060\u3051\u304C\u4F7F\u3048\u307E\u3059";var LIST_USAGE="twp license list";var ASSIGNMENTS_USAGE="twp license assignments <\u6A5F\u80FD\u30B3\u30FC\u30C9|\u6A5F\u80FD\u540D> | --all-features [--inactive-days <\u65E5\u6570>]";var ASSIGNMENTS_HELP="twp license assignments help";var
|
|
7
|
-
\
|
|
8
|
-
function
|
|
6
|
+
\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u6A29\u9650\u304C\u5FC5\u8981\u3067\u3059\u3002twp license \u306F\u30C6\u30CA\u30F3\u30C8\u306E\u7D44\u7E54\u7BA1\u7406\u8005\u3060\u3051\u304C\u4F7F\u3048\u307E\u3059";var LIST_USAGE="twp license list";var ASSIGNMENTS_USAGE="twp license assignments <\u6A5F\u80FD\u30B3\u30FC\u30C9|\u6A5F\u80FD\u540D> | --all-features [--inactive-days <\u65E5\u6570>]";var ASSIGNMENTS_HELP="twp license assignments help";var RELEASE_COMMAND_MISSING="release_command \u304C\u7A7A\u306E\u884C\u306F\u3001\u6A29\u9650\u3092 non\
|
|
7
|
+
e \u306B\u3057\u3066\u3082\u30B5\u30FC\u30D0\u304C\u30E9\u30A4\u30BB\u30F3\u30B9\u3092\u5916\u3055\u306A\u3044\u884C\u3067\u3059\uFF08\u30E9\u30A4\u30BB\u30F3\u30B9\u304C\u8981\u3089\u306A\u3044\u30EC\u30D9\u30EB\u30FB\u6A29\u9650\u306E\u5909\u66F4\u3067\u30E9\u30A4\u30BB\u30F3\u30B9\u304C\u52D5\u304B\u306A\u3044\u6A5F\u80FD\u30FB\u30E6\u30FC\u30B6\u30FC\u304C\u898B\u3064\u304B\u3089\u306A\u3044\uFF09\u3002\u753B\u9762\u306E\u300C\u30E9\u30A4\u30BB\u30F3\u30B9\u7BA1\u7406\u300D\u304B\u3089\u5916\u3057\u3066\u304F\u3060\u3055\u3044";
|
|
8
|
+
var DEPARTMENT_LIMIT=1e3;function featureName(code){return LICENSE_FEATURE_NAMES[code]??code}function featureSegment(code){if(!/^[a-z][a-z0-9_]*$/.test(code)){throw new ApiResponseError(`\u6A5F\u80FD\u30B3\u30FC\u30C9\u3092\u30D1\u30B9\u306B\u4F7F\u3048\u307E\u305B\u3093: ${code}\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return code}function resolveFeature(value){const trimmed=value.trim();if(Object.hasOwn(LICENSE_FEATURE_NAMES,trimmed))return trimmed;
|
|
9
|
+
const byName=Object.entries(LICENSE_FEATURE_NAMES).find(([,name])=>name===trimmed);if(byName!==void 0)return byName[0];if(/^[a-z][a-z0-9_]*$/.test(trimmed))return trimmed;throw new UsageError(`\u6A5F\u80FD\u300C${value}\u300D\u304C\u5206\u304B\u308A\u307E\u305B\u3093`,`\u6A5F\u80FD\u30B3\u30FC\u30C9\uFF08attendance \u7B49\uFF09\u304B\u753B\u9762\u306E\u8868\u793A\u540D\uFF08\u52E4\u6020\u7BA1\u7406 \u7B49\uFF09\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u4E00\u89A7\u306F twp license list \u3067\u898B\u3089\u308C\u307E\u3059\u3002`)}
|
|
9
10
|
function readLicenses(body){const licenses=isRecord(body)?body["licenses"]:void 0;if(Array.isArray(licenses)&&licenses.length===0)return[];if(!isRecord(licenses))throw new ApiResponseError("\u30E9\u30A4\u30BB\u30F3\u30B9\u306E\u5FDC\u7B54\u306B licenses \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002");const num=v=>typeof v==="number"?v:null;return Object.entries(licenses).map(([code,usage])=>[code,isRecord(usage)?{used:num(
|
|
10
11
|
usage["used"]),total:num(usage["total"]),available:num(usage["available"]),free:num(usage["free"])}:{used:null,total:null,available:null,free:null}])}async function seatDetail(send,code){const body=await send({method:"GET",path:`${LICENSES_PATH}/${featureSegment(code)}/seats`});if(!isRecord(body)||body["feature_code"]!==code){throw new ApiResponseError(`\u30B7\u30FC\u30C8\u306E\u5FDC\u7B54\u304C ${code} \u306E\u3082\u306E\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}
|
|
11
12
|
return body}function listBody(body){if(!isRecord(body)||!Array.isArray(body["rows"]))throw new ApiResponseError("\u30E9\u30A4\u30BB\u30F3\u30B9\u306E\u4E00\u89A7\u3092\u7D44\u307F\u7ACB\u3066\u3089\u308C\u307E\u305B\u3093\u3067\u3057\u305F\uFF08\u5185\u90E8\u30A8\u30E9\u30FC\uFF09\u3002");return body["rows"]}function scheduledText(row){if(row.scheduled_quantity===null)return null;return`${row.scheduled_effective_date??"\u65E5\u4ED8\u4E0D\u660E"} \u306B ${row.scheduled_quantity} \u30B7\u30FC\u30C8\u3078\u524A\u6E1B`}
|
|
12
|
-
var FINDING_LABEL={user_missing:"\u30E6\u30FC\u30B6\u30FC\u304C\u898B\u3064\u304B\u3089\u306A\u3044",disabled:"\u5931\u52B9\u6E08\u307F\u306A\u306E\u306B\u5272\u5F53\u304C\u6B8B\u3063\u3066\u3044\u308B",permission_none:"\u6A5F\u80FD\u6A29\u9650\u304C none \u306A\u306E\u306B\u5272\u5F53\u304C\u6B8B\u3063\u3066\u3044\u308B",inactive:"\u9577\u671F\u9593\u30ED\u30B0\u30A4\u30F3\u306E\u8A18\u9332\u304C\u7121\u3044"};function str(value){return typeof value==="string"&&value!==""?value:null}function releaseCommand(userId,code){
|
|
13
|
-
return`twp user permission
|
|
14
|
-
inactiveDays)){findings.push("inactive")}return findings}async function departmentNames(send,ctx){const body=await send({method:"GET",path:DEPARTMENTS_PATH,query:{limit:DEPARTMENT_LIMIT}});const list=isRecord(body)?body["list"]:void 0;if(!Array.isArray(list))throw new ApiResponseError("\u90E8\u7F72\u4E00\u89A7\u306E\u5FDC\u7B54\u306B list \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002");
|
|
15
|
-
if(isRecord(d)&&typeof d["id"]==="string"&&typeof d["name"]==="string")map.set(d["id"],d["name"])}if(list.length>=DEPARTMENT_LIMIT){ctx.warn(`\u90E8\u7F72\u304C ${DEPARTMENT_LIMIT} \u4EF6\u4EE5\u4E0A\u3042\u308B\u305F\u3081\u3001\u4E00\u90E8\u306E department_name \u306F\u90E8\u7F72 ID \u306E\u307E\u307E\u51FA\u307E\u3059\u3002`)}return map}async function assignmentsOf(send,code){const body=await send(assignmentsPlan(code));const list=isRecord(body)?body["
|
|
16
|
-
throw new ApiResponseError(`${code} \u306E\u5272\u5F53\u4E00\u89A7\u306E\u5FDC\u7B54\u306B assignments \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`);return list.filter(a=>isRecord(a)&&typeof a["user_id"]==="string")}function assignmentsPlan(code){return{method:"GET",path:`${LICENSES_PATH}/${featureSegment(code)}/assignments`}}async function userFacts(send,userId){let detail;
|
|
17
|
-
if(err instanceof ApiError&&err.status===404){return{detail:null,departmentId:null,lastLoginAt:null,loginStatus:"not_checked"}}throw err}const authType=str(detail["auth_type"]);const readLogin=authType!=="disabled"&&authType!=="oauth";const[assignment,loginAt]=await Promise.all([primaryAssignment(send,userId),readLogin?lastLogin(send,userId):Promise.resolve(null)]);const loginStatus=authType==="disabled"?"not_checked":authType==="oauth"?"
|
|
18
|
-
return{detail,departmentId:assignment.departmentId,lastLoginAt:loginAt,loginStatus}}function assignmentsBody(body){if(!isRecord(body)||!Array.isArray(body["rows"]))throw new ApiResponseError("\u5272\u5F53\u306E\u4E00\u89A7\u3092\u7D44\u307F\u7ACB\u3066\u3089\u308C\u307E\u305B\u3093\u3067\u3057\u305F\uFF08\u5185\u90E8\u30A8\u30E9\u30FC\uFF09\u3002");return body}async function collectAssignments(input,ctx){const send=pacedSender(ctx);const inactiveDays=Number(
|
|
19
|
-
const all=input.flags.has("--all-features");const codes=all?readLicenses(await send({method:"GET",path:LICENSES_PATH})).map(([code])=>code):[requireResolved(input,"feature")];const pairs=[];for(const code of codes){for(const assignment of await assignmentsOf(send,code))pairs.push({code,assignment})}const userIds=[...new Set(pairs.map(p=>p.assignment["user_id"]))];if(userIds.length>0){ctx.warn(`${userIds.length} \u4EBA\u306E\u8A73\u7D30\u30FB\u6240\u5C5E\u30FB\u6700\u7D42\u30ED\u30B0\u30A4\u30F3\u3092\u8AAD\u307F\u307E\u3059\uFF08\u6700\u5927 ${userIds.
|
|
13
|
+
var FINDING_LABEL={user_missing:"\u30E6\u30FC\u30B6\u30FC\u304C\u898B\u3064\u304B\u3089\u306A\u3044",disabled:"\u5931\u52B9\u6E08\u307F\u306A\u306E\u306B\u5272\u5F53\u304C\u6B8B\u3063\u3066\u3044\u308B",permission_none:"\u6A5F\u80FD\u6A29\u9650\u304C none \u306A\u306E\u306B\u5272\u5F53\u304C\u6B8B\u3063\u3066\u3044\u308B",inactive:"\u9577\u671F\u9593\u30ED\u30B0\u30A4\u30F3\u306E\u8A18\u9332\u304C\u7121\u3044"};function str(value){return typeof value==="string"&&value!==""?value:null}function releaseCommand(userId,code,currentLevel){
|
|
14
|
+
if(currentLevel===null||!levelHoldsSeat(code,currentLevel))return null;return`twp user permission update ${shellQuote(userId)} --feature ${shellQuote(code)} --level none`}function judge(row,inactiveDays,now){const findings=[];const disabled=row.auth_type==="disabled";if(disabled)findings.push("disabled");if(row.current_level==="none")findings.push("permission_none");if(!disabled&&row.last_login_status!=="sso_not_recorded"&&row.last_login_status!=="not_checked"&&!recentlyHired(row.hire_date,inactiveDays,
|
|
15
|
+
now)&&(row.last_login_at===null||daysBetween(row.last_login_at,now)>inactiveDays)){findings.push("inactive")}return findings}async function departmentNames(send,ctx){const body=await send({method:"GET",path:DEPARTMENTS_PATH,query:{limit:DEPARTMENT_LIMIT}});const list=isRecord(body)?body["list"]:void 0;if(!Array.isArray(list))throw new ApiResponseError("\u90E8\u7F72\u4E00\u89A7\u306E\u5FDC\u7B54\u306B list \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002");
|
|
16
|
+
const map=new Map;for(const d of list){if(isRecord(d)&&typeof d["id"]==="string"&&typeof d["name"]==="string")map.set(d["id"],d["name"])}if(list.length>=DEPARTMENT_LIMIT){ctx.warn(`\u90E8\u7F72\u304C ${DEPARTMENT_LIMIT} \u4EF6\u4EE5\u4E0A\u3042\u308B\u305F\u3081\u3001\u4E00\u90E8\u306E department_name \u306F\u90E8\u7F72 ID \u306E\u307E\u307E\u51FA\u307E\u3059\u3002`)}return map}async function assignmentsOf(send,code){const body=await send(assignmentsPlan(code));const list=isRecord(body)?body["as\
|
|
17
|
+
signments"]:void 0;if(!Array.isArray(list))throw new ApiResponseError(`${code} \u306E\u5272\u5F53\u4E00\u89A7\u306E\u5FDC\u7B54\u306B assignments \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`);return list.filter(a=>isRecord(a)&&typeof a["user_id"]==="string")}function assignmentsPlan(code){return{method:"GET",path:`${LICENSES_PATH}/${featureSegment(code)}/assignments`}}async function userFacts(send,userId){let detail;
|
|
18
|
+
try{detail=await userDetail(send,userId)}catch(err){if(err instanceof ApiError&&err.status===404){return{detail:null,departmentId:null,lastLoginAt:null,loginStatus:"not_checked"}}throw err}const authType=str(detail["auth_type"]);const readLogin=authType!=="disabled"&&authType!=="oauth";const[assignment,loginAt]=await Promise.all([primaryAssignment(send,userId),readLogin?lastLogin(send,userId):Promise.resolve(null)]);const loginStatus=authType==="disabled"?"not_checked":authType==="oauth"?"sso_no\
|
|
19
|
+
t_recorded":loginAt===null?"not_recorded":"recorded";return{detail,departmentId:assignment.departmentId,lastLoginAt:loginAt,loginStatus}}function assignmentsBody(body){if(!isRecord(body)||!Array.isArray(body["rows"]))throw new ApiResponseError("\u5272\u5F53\u306E\u4E00\u89A7\u3092\u7D44\u307F\u7ACB\u3066\u3089\u308C\u307E\u305B\u3093\u3067\u3057\u305F\uFF08\u5185\u90E8\u30A8\u30E9\u30FC\uFF09\u3002");return body}async function collectAssignments(input,ctx){const send=pacedSender(ctx);const inactiveDays=Number(
|
|
20
|
+
requireResolved(input,"inactiveDays"));const all=input.flags.has("--all-features");const codes=all?readLicenses(await send({method:"GET",path:LICENSES_PATH})).map(([code])=>code):[requireResolved(input,"feature")];const pairs=[];for(const code of codes){for(const assignment of await assignmentsOf(send,code))pairs.push({code,assignment})}const userIds=[...new Set(pairs.map(p=>p.assignment["user_id"]))];if(userIds.length>0){ctx.warn(`${userIds.length} \u4EBA\u306E\u8A73\u7D30\u30FB\u6240\u5C5E\u30FB\u6700\u7D42\u30ED\u30B0\u30A4\u30F3\u3092\u8AAD\u307F\u307E\u3059\uFF08\u6700\u5927 ${userIds.
|
|
20
21
|
length*3} \u5F80\u5FA9\uFF09\u3002`)}const departments=userIds.length>0?await departmentNames(send,ctx):new Map;const facts=new Map;const results=await mapPool(userIds,CONCURRENCY,id=>userFacts(send,id));userIds.forEach((id,i)=>facts.set(id,results[i]));const now=new Date;const rows=pairs.map(({code,assignment})=>{const userId=assignment["user_id"];const f=facts.get(userId);const detail=f.detail;const base={feature_code:code,feature_name:featureName(code),user_id:userId,assigned_at:str(assignment["\
|
|
21
22
|
assigned_at"]),assigned_level:str(assignment["permission_level"])};if(detail===null){return{...base,user_name:null,email:null,employee_code:null,department_name:null,current_level:null,auth_type:null,last_login_at:null,last_login_status:"not_checked",findings:["user_missing"],release_command:null}}const row={...base,user_name:str(detail["user_name"]),email:str(detail["email"]),employee_code:str(detail["employee_code"]),department_name:f.departmentId===null?null:departments.get(f.departmentId)??f.
|
|
22
|
-
departmentId,current_level:str(detail[`${code}_level`]),auth_type:str(detail["auth_type"]),last_login_at:f.lastLoginAt,last_login_status:f.loginStatus,release_command:releaseCommand(userId,code)};return{...row,findings:judge({...row,hire_date:str(detail["hire_date"])},inactiveDays,now)}});return{rows,features:codes.length,inactiveDays}}var ASSIGNMENT_COLUMNS=["feature_name","user_name","email","employee_code","department_name","assigned_at","auth_type","last_login_at",
|
|
23
|
-
var licenseDomain={name:"license",summary:"\u30B7\u30FC\u30C8\u30E9\u30A4\u30BB\u30F3\u30B9\u306E\u68DA\u5378\uFF08\u6A5F\u80FD\u3054\u3068\u306E\u67A0\u30FB\u4F7F\u7528\u6570\u30FB\u5272\u5F53\u8005\u3002\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u307F\uFF09",operations:[{name:"list",summary:"\u6A5F\u80FD\u3054\u3068\u306E\u67A0\u6570\u30FB\u4F7F\u7528\u6570\u30FB\u7A7A\u304D\u30FB\u524A\u6E1B\u4E88\u7D04\u3092\u8868\u793A\u3059\u308B\uFF08\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u307F\uFF09",
|
|
24
|
-
description:"\u30C6\u30CA\u30F3\u30C8\u3067\u4F7F\u3048\u308B\u6A5F\u80FD\uFF08\u6A5F\u80FD\u304C\u6709\u52B9\u304B\u3001\u30B7\u30FC\u30C8\u3092\u8CFC\u5165\u6E08\u307F\u306E\u6A5F\u80FD\uFF09\u3054\u3068\u306B1\u884C\u51FA\u3057\u307E\u3059\u3002\u753B\u9762\u306E\u300C\u30E9\u30A4\u30BB\u30F3\u30B9\u300D\u3068\u540C\u3058\u5024\u3067\u3059\u3002\n\u5217: feature_name\uFF08\u8868\u793A\u540D\uFF09/ feature_code / total\uFF08\u67A0\u6570\uFF09/ used\uFF08\u4F7F\u7528\u6570\uFF09/ available\uFF08\u7A7A\u304D\uFF09/\nfree_seats\uFF08\u7121\u6599\u67A0\uFF09/ purchased_seats\uFF08\u8CFC\u5165\u6E08\u307F\u30FBStripe \u306E\u5951\u7D04\u4E2D\u306E\u30B7\u30FC\u30C8\uFF09/ scheduled_reduction\uFF08\u524A\u6E1B\u4E88\u7D04\u304C\u3042\u308C\u3070\u767A\u52B9\u65E5\u3068\u524A\u6E1B\u5F8C\u306E\u30B7\u30FC\u30C8\u6570\uFF09\u3002\n1\u6A5F\u80FD\u306B\u3064\u304D1\u56DE\u3001\u30B7\u30FC\u30C8\u306E\u8A73\u7D30\u3092 GET \u3057\u307E\u3059\uFF08\u8AAD\u307F\u53D6\u308A\u3060\u3051\uFF09\u3002\n\u30B7\u30FC\u30C8\u306E\u8CFC\u5165\u30FB\u524A\u6E1B\u30FB\u8ACB\u6C42\u9593\u9694\u306E\u5909\u66F4\uFF08\u8AB2\u91D1\u3092\u4F34\u3046\u64CD\u4F5C\uFF09\u306F CLI \u304B\u3089\u306F\u3067\u304D\u307E\u305B\u3093\u3002\u753B\u9762\u304B\u3089\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002",
|
|
23
|
+
departmentId,current_level:str(detail[`${code}_level`]),auth_type:str(detail["auth_type"]),last_login_at:f.lastLoginAt,last_login_status:f.loginStatus,release_command:releaseCommand(userId,code,str(detail[`${code}_level`]))};return{...row,findings:judge({...row,hire_date:str(detail["hire_date"])},inactiveDays,now)}});return{rows,features:codes.length,inactiveDays}}var ASSIGNMENT_COLUMNS=["feature_name","user_name","email","employee_code","department_name","assigned_at","auth_type","last_login_at",
|
|
24
|
+
"findings","release_command"];var licenseDomain={name:"license",summary:"\u30B7\u30FC\u30C8\u30E9\u30A4\u30BB\u30F3\u30B9\u306E\u68DA\u5378\uFF08\u6A5F\u80FD\u3054\u3068\u306E\u67A0\u30FB\u4F7F\u7528\u6570\u30FB\u5272\u5F53\u8005\u3002\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u307F\uFF09",operations:[{name:"list",summary:"\u6A5F\u80FD\u3054\u3068\u306E\u67A0\u6570\u30FB\u4F7F\u7528\u6570\u30FB\u7A7A\u304D\u30FB\u524A\u6E1B\u4E88\u7D04\u3092\u8868\u793A\u3059\u308B\uFF08\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u307F\uFF09",
|
|
25
|
+
usage:LIST_USAGE,description:"\u30C6\u30CA\u30F3\u30C8\u3067\u4F7F\u3048\u308B\u6A5F\u80FD\uFF08\u6A5F\u80FD\u304C\u6709\u52B9\u304B\u3001\u30B7\u30FC\u30C8\u3092\u8CFC\u5165\u6E08\u307F\u306E\u6A5F\u80FD\uFF09\u3054\u3068\u306B1\u884C\u51FA\u3057\u307E\u3059\u3002\u753B\u9762\u306E\u300C\u30E9\u30A4\u30BB\u30F3\u30B9\u300D\u3068\u540C\u3058\u5024\u3067\u3059\u3002\n\u5217: feature_name\uFF08\u8868\u793A\u540D\uFF09/ feature_code / total\uFF08\u67A0\u6570\uFF09/ used\uFF08\u4F7F\u7528\u6570\uFF09/ available\uFF08\u7A7A\u304D\uFF09/\nfree_seats\uFF08\u7121\u6599\u67A0\uFF09/ purchased_seats\uFF08\u8CFC\u5165\u6E08\u307F\u30FBStripe \u306E\u5951\u7D04\u4E2D\u306E\u30B7\u30FC\u30C8\uFF09/ scheduled_reduction\uFF08\u524A\u6E1B\u4E88\u7D04\u304C\u3042\u308C\u3070\u767A\u52B9\u65E5\u3068\u524A\u6E1B\u5F8C\u306E\u30B7\u30FC\u30C8\u6570\uFF09\u3002\n1\u6A5F\u80FD\u306B\u3064\u304D1\u56DE\u3001\u30B7\u30FC\u30C8\u306E\u8A73\u7D30\u3092 GET \u3057\u307E\u3059\uFF08\u8AAD\u307F\u53D6\u308A\u3060\u3051\uFF09\u3002\n\u30B7\u30FC\u30C8\u306E\u8CFC\u5165\u30FB\u524A\u6E1B\u30FB\u8ACB\u6C42\u9593\u9694\u306E\u5909\u66F4\uFF08\u8AB2\u91D1\u3092\u4F34\u3046\u64CD\u4F5C\uFF09\u306F CLI \u304B\u3089\u306F\u3067\u304D\u307E\u305B\u3093\u3002\u753B\u9762\u304B\u3089\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002",
|
|
25
26
|
forbidden:FORBIDDEN,flags:[],plan(input){if(input.args.length>0)throw new UsageError(`list \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D7\u3051\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,LIST_USAGE);return{method:"GET",path:LICENSES_PATH}},plannedNotes:()=>["\u3053\u306E\u3042\u3068\u6A5F\u80FD\u3054\u3068\u306B\u30B7\u30FC\u30C8\u306E\u8A73\u7D30\uFF08\u524A\u6E1B\u4E88\u7D04\uFF09\u3092 GET \u3057\u307E\u3059\uFF08\u8AAD\u307F\u53D6\u308A\u3060\u3051\uFF09\u3002"],async execute(_input,ctx){
|
|
26
27
|
const send=pacedSender(ctx);const usage=readLicenses(await send({method:"GET",path:LICENSES_PATH}));const rows=await mapPool(usage,CONCURRENCY,async([code,u])=>{const seats=await seatDetail(send,code);const sub=isRecord(seats["subscription"])?seats["subscription"]:{};const num=v=>typeof v==="number"?v:null;const purchased=typeof sub["stripe_subscription_id"]==="string"&&sub["stripe_subscription_id"]!==""?num(sub["quantity"])??0:0;return{feature_code:code,feature_name:featureName(code),total:u.total,
|
|
27
28
|
used:u.used,available:u.available,free_seats:u.free,purchased_seats:purchased,scheduled_quantity:num(sub["scheduled_quantity"]),scheduled_effective_date:str(sub["scheduled_effective_date"])}});return{rows}},summarize:body=>listBody(body).map(row=>({feature_name:row.feature_name,feature_code:row.feature_code,total:row.total,used:row.used,available:row.available,free_seats:row.free_seats,purchased_seats:row.purchased_seats,scheduled_reduction:spreadsheetSafe(scheduledText(row))})),raw:body=>listBody(
|
|
@@ -43,8 +44,7 @@ auth_type / last_login_at / findings\uFF08\u5224\u5B9A\uFF09/ release_command\uF
|
|
|
43
44
|
- Google / Microsoft \u306E SSO \u3067\u306E\u30ED\u30B0\u30A4\u30F3\u306F\u8A18\u9332\u3055\u308C\u307E\u305B\u3093\u3002oauth \u306E\u4EBA\u306F\u300C\u5224\u5B9A\u4E0D\u80FD\u300D\u3068\u51FA\u3057\u307E\u3059\u3002
|
|
44
45
|
all \u306E\u4EBA\u304C SSO \u3060\u3051\u3067\u4F7F\u3063\u3066\u3044\u308B\u5834\u5408\u3082\u8A18\u9332\u306F\u6B8B\u3089\u306A\u3044\u306E\u3067\u3001inactive \u306F\u5916\u3059\u524D\u306B\u672C\u4EBA\u306B\u78BA\u304B\u3081\u3066\u304F\u3060\u3055\u3044
|
|
45
46
|
|
|
46
|
-
|
|
47
|
-
\u753B\u9762\u306E\u300C\u7D44\u7E54\u7BA1\u7406 > \u30E6\u30FC\u30B6\u30FC\u300D\u304B\u3089\u8A72\u5F53\u6A5F\u80FD\u306E\u6A29\u9650\u3092\u300C\u306A\u3057\u300D\u306B\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
47
|
+
${RELEASE_COMMAND_MISSING}\u3002
|
|
48
48
|
--output tsv \u3067\u306F\u3001= + - @ \u3067\u59CB\u307E\u308B\u5024\u306E\u5148\u982D\u306B ' \u3092\u4ED8\u3051\u3066\u3001\u8868\u8A08\u7B97\u30BD\u30D5\u30C8\u304C\u5F0F\u3068\u3057\u3066\u8AAD\u307E\u306A\u3044\u3088\u3046\u306B\u3057\u307E\u3059\u3002
|
|
49
49
|
1\u4EBA\u3042\u305F\u308A\u6700\u59273\u5F80\u5FA9\u3057\u307E\u3059\uFF08\u672C\u756A\u306E API \u30EC\u30FC\u30C8\u5236\u9650\u306B\u5408\u308F\u305B\u3066\u9001\u308B\u901F\u3055\u3092\u6291\u3048\u307E\u3059\uFF09\u3002`,forbidden:FORBIDDEN,flags:[{name:"--all-features",summary:"\u5168\u6A5F\u80FD\u306E\u5272\u5F53\u8005\u3092\u51FA\u3059",takesValue:false},{name:"--inactive-days",summary:`\u3053\u306E\u65E5\u6570\u30ED\u30B0\u30A4\u30F3\u306E\u8A18\u9332\u304C\u7121\u3044\u4EBA\u3092 inactive \u3068\u5224\u5B9A\u3059\u308B\uFF08\u65E2\u5B9A ${DEFAULT_INACTIVE_DAYS}\
|
|
50
50
|
\u30FB\u6700\u5927 ${LOGIN_HISTORY_RETENTION_DAYS}\uFF09`,takesValue:true,placeholder:"<\u65E5\u6570>"}],async prepare(input){const all=input.flags.has("--all-features");if(all&&input.args.length>0){throw new UsageError("\u6A5F\u80FD\u306E\u6307\u5B9A\u3068 --all-features \u306F\u4E00\u7DD2\u306B\u4F7F\u3048\u307E\u305B\u3093",ASSIGNMENTS_HELP)}if(!all&&input.args.length!==1){throw new UsageError("\u6A5F\u80FD\u30921\u3064\u6307\u5B9A\u3059\u308B\u304B\u3001--all-features \u3092\u4ED8\u3051\u3066\u304F\u3060\u3055\u3044",
|
|
@@ -52,5 +52,4 @@ ASSIGNMENTS_USAGE)}const inactiveDays=positiveInteger(input.flags,"--inactive-da
|
|
|
52
52
|
const resolved={inactiveDays:String(inactiveDays)};if(!all)resolved["feature"]=resolveFeature(input.args[0]);return withResolved(input,resolved)},plan:input=>input.flags.has("--all-features")?{method:"GET",path:LICENSES_PATH}:assignmentsPlan(requireResolved(input,"feature")),plannedNotes:input=>[(input.flags.has("--all-features")?"\u3053\u306E\u3042\u3068\u6A5F\u80FD\u3054\u3068\u306B\u5272\u5F53\u4E00\u89A7\u3092 GET \u3057\u3001":"\u3053\u306E\u3042\u3068")+"\u90E8\u7F72\u4E00\u89A7\u3068\u3001\u5272\u5F53\u80051\u4EBA\u305A\u3064\u306E\u8A73\u7D30\u30FB\u73FE\u5728\u306E\u6240\u5C5E\u30FB\u30ED\u30B0\u30A4\u30F3\u5C65\u6B74\u3092 GET \
|
|
53
53
|
\u3057\u307E\u3059\uFF08\u8AAD\u307F\u53D6\u308A\u3060\u3051\uFF09\u3002"],execute:collectAssignments,summarize:body=>assignmentsBody(body).rows.map(row=>Object.fromEntries(ASSIGNMENT_COLUMNS.map(c=>{if(c==="findings")return[c,row.findings.length===0?null:row.findings.map(f=>FINDING_LABEL[f]).join("\u30FB")];if(c==="last_login_at")return[c,row.findings.includes("user_missing")?null:lastLoginText(row)];return[c,spreadsheetSafe(row[c])]}))),raw:body=>assignmentsBody(body).rows,notes(body){const result=assignmentsBody(
|
|
54
54
|
body);const counts=new Map;for(const row of result.rows)for(const f of row.findings)counts.set(f,(counts.get(f)??0)+1);const notes=[`${result.features} \u6A5F\u80FD\u30FB${result.rows.length} \u4EF6\u306E\u5272\u5F53\u3092\u8AAD\u307F\u307E\u3057\u305F\u3002`];notes.push(counts.size===0?"\u68DA\u5378\u3067\u6C17\u306B\u306A\u308B\u5272\u5F53\u306F\u3042\u308A\u307E\u305B\u3093\u3002":`\u5224\u5B9A: ${[...counts].map(([f,n])=>`${FINDING_LABEL[f]} ${n}\u4EF6`).join(" / ")}`);const sso=new Set(result.
|
|
55
|
-
rows.filter(r=>r.last_login_status==="sso_not_recorded").map(r=>r.user_id)).size;if(sso>0)notes.push(`\u8A8D\u8A3C\u30BF\u30A4\u30D7\u304C oauth \u306E ${sso} \u4EBA\u306F\u3001SSO \u306E\u30ED\u30B0\u30A4\u30F3\u304C\u8A18\u9332\u3055\u308C\u306A\u3044\u305F\u3081\u6700\u7D42\u30ED\u30B0\u30A4\u30F3\u3092\u5224\u5B9A\u3057\u3066\u3044\u307E\u305B\u3093\u3002`);if(
|
|
56
|
-
return notes}}]};export{LICENSE_FEATURE_NAMES,judge,licenseDomain,releaseCommand,resolveFeature};
|
|
55
|
+
rows.filter(r=>r.last_login_status==="sso_not_recorded").map(r=>r.user_id)).size;if(sso>0)notes.push(`\u8A8D\u8A3C\u30BF\u30A4\u30D7\u304C oauth \u306E ${sso} \u4EBA\u306F\u3001SSO \u306E\u30ED\u30B0\u30A4\u30F3\u304C\u8A18\u9332\u3055\u308C\u306A\u3044\u305F\u3081\u6700\u7D42\u30ED\u30B0\u30A4\u30F3\u3092\u5224\u5B9A\u3057\u3066\u3044\u307E\u305B\u3093\u3002`);if(result.rows.some(r=>r.findings.length>0&&r.release_command===null))notes.push(`${RELEASE_COMMAND_MISSING}\u3002`);return notes}}]};export{levelHoldsSeat,permissionMovesSeat,LICENSE_FEATURE_NAMES,resolveFeature,readLicenses,releaseCommand,judge,licenseDomain};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{loadDomain}from"./chunk-
|
|
3
|
+
import{loadDomain}from"./chunk-SZWDH33O.js";import{JsonBodyWithView}from"./chunk-Q3B65OFC.js";import{evaluateQuery}from"./chunk-GFLGXGWE.js";import{renderDocument,renderOutput}from"./chunk-PO35MCYP.js";import{redactSecretValues,redactSecrets,withDebug}from"./chunk-LDBYJPRD.js";import{DEFAULT_MAX_ITEMS,DEFAULT_MAX_PAGES,nextPageNotes,positiveInteger,shellQuote}from"./chunk-MI6HVYR2.js";import{parseOperationArgs}from"./chunk-RX5HWI4L.js";import{Resolver,requireDefaultProject}from"./chunk-GHE6X45G.js";
|
|
4
4
|
import{ResolveError}from"./chunk-HVZUXLQ4.js";import{ApiError,MultipartBody,TwpApiClient,appendQuery}from"./chunk-JA5A6UJ2.js";import{isRecord}from"./chunk-3ZRMMBP5.js";import{ApiRejectedError,ApiResponseError,EXIT_API_CLIENT,EXIT_API_SERVER,EXIT_AUTH,EXIT_FAILURE,EXIT_OK,EXIT_USAGE,EXIT_WAIT_TIMEOUT,NetworkError,UsageError,WaitTimeoutError}from"./chunk-VFPY2A23.js";import{GLOBAL_OPTIONS_HELP}from"./chunk-PECIBNFD.js";import{AuthSession,NotLoggedInError,SessionExpiredError,
|
|
5
5
|
loadCredentials}from"./chunk-XNLIEUAW.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import{effectiveApiUrl,loadUserConfig,resolveConfiguredOutput,resolveProfile}from"./chunk-4VZKNEVN.js";import{HELP_TOKEN}from"./chunk-W4E4F2ZA.js";import{OUTPUT_FORMATS,resolveOutputFormat}from"./chunk-74BPZOKU.js";import{stringWidth}from"./chunk-UREA4ZIG.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import fs from"fs";import path from"path";var NO_REDACT_FLAG={name:"--no-redact",summary:"\u5FDC\u7B54\u306E\u4F0F\u5B57\u5316\u3092\u89E3\u9664\u3057\u3066\u751F\u306E\u5024\u3092\u51FA\u3059\uFF08\u9375\u306E\u53D7\u3051\u53D6\u308A\u7B49\uFF09",takesValue:false};var NO_REDACT_NOTICE="\u6CE8\u8A18: --no-redact \u306E\u305F\u3081\u51FA\u529B\u3092\u4F0F\u5B57\u5316\u3057\u307E\u305B\u3093\uFF08\u7AEF\u672B\u3068\u30ED\u30B0\u306B\u5E73\u6587\u3067\u6B8B\u308A\u307E\u3059\uFF09\u3002";function withCommonFlags(flags){return flags.some(flag=>flag.
|
|
6
6
|
name===NO_REDACT_FLAG.name)?flags:[...flags,NO_REDACT_FLAG]}function alignedList(entries,indent=" "){const width=entries.reduce((max,[left])=>Math.max(max,stringWidth(left)),0);return entries.map(([left,right])=>`${indent}${left}${" ".repeat(Math.max(0,width-stringWidth(left)))} ${right}`).join("\n")}function subresourcesOf(resource){return resource.subresources??[]}function renderResourceHelp(resource,path2){const subresources=subresourcesOf(resource);const operationSection=resource.operations.length===0?"":`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{isoDate}from"./chunk-JJSBBWJ5.js";import{LIST_PAGING_HELP,PAGE_NUMBER_LIST_FLAGS,PAGE_NUMBER_PAGING_HELP,STABLE_PAGE_ORDER,nonEmpty,pageNumberPaging,pageNumberQuery,pageRangeNotes}from"./chunk-MI6HVYR2.js";import{repeatedValues}from"./chunk-RX5HWI4L.js";import{SALES_ESTIMATES_PATH,SALES_INVOICES_PATH,isExactNumericId,resolveNamed}from"./chunk-
|
|
3
|
+
import{isoDate}from"./chunk-JJSBBWJ5.js";import{LIST_PAGING_HELP,PAGE_NUMBER_LIST_FLAGS,PAGE_NUMBER_PAGING_HELP,STABLE_PAGE_ORDER,nonEmpty,pageNumberPaging,pageNumberQuery,pageRangeNotes}from"./chunk-MI6HVYR2.js";import{repeatedValues}from"./chunk-RX5HWI4L.js";import{SALES_ESTIMATES_PATH,SALES_INVOICES_PATH,isExactNumericId,resolveNamed}from"./chunk-GHE6X45G.js";import{withResolved}from"./chunk-PS5QFKHB.js";import{isRecord,pick}from"./chunk-3ZRMMBP5.js";import{
|
|
4
4
|
ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";var ESTIMATE_STATUSES={new:"\u4F5C\u6210\u4E2D",create_completed:"\u4F5C\u6210\u5B8C\u4E86",in_progress:"\u7533\u8ACB\u4E2D",approved:"\u627F\u8A8D\u6E08",submitted:"\u63D0\u793A\u6E08",rejected:"\u5DEE\u3057\u623B\u3057",deleted:"\u524A\u9664\u6E08"};var INVOICE_STATUSES={new:"\u4F5C\u6210\u4E2D",create_completed:"\u4F5C\u6210\u5B8C\u4E86",in_progress:"\u7533\u8ACB\u4E2D",approved:"\u627F\u8A8D\u6E08",rejected:"\u5DEE\u3057\u623B\u3057",submitted:"\u63D0\u793A\u6E08",manager_confirmation:"\u6848\u4EF6\u62C5\u5F53\u8005\
|
|
5
5
|
_\u6848\u4EF6\u5185\u5BB9\u30FB\u91D1\u984D\u78BA\u8A8D",invoice_issued:"\u8ACB\u6C42\u66F8\u767A\u884C\u6E08",sent_to_client:"\u5148\u65B9\u9001\u4ED8\u6E08",archived:"\u4FDD\u7BA1\u6E08",deleted:"\u524A\u9664\u6E08",cancelled:"\u53D6\u6D88\uFF08\u7121\u52B9\uFF09",lost:"\u5931\u6CE8"};var ALLOCATION_STATUSES={unallocated:"\u672A\u56DE\u53CE",allocated:"\u56DE\u53CE\u6E08"};function statusRefs(table){return Object.entries(table).map(([code,name])=>({id:code,name,code}))}function statusHelp(table){
|
|
6
6
|
return Object.entries(table).map(([code,name])=>`${code}\uFF08${name}\uFF09`).join(" / ")}function licenseForbidden(guidance){return body=>body?.error==="permission_denied"?guidance:void 0}function featureLicenseGuidance(feature){return`${feature}\u3092\u4F7F\u3046\u6A29\u9650\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u30C6\u30CA\u30F3\u30C8\u304C${feature}\u3092\u5951\u7D04\u3057\u3066\u3044\u306A\u3044\u304B\u3001\u3042\u306A\u305F\u306E${feature}\u306E\u6A29\u9650\u304C\u300C\u306A\u3057\u300D\u306B\u306A\u3063\u3066\u3044\u307E\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`}
|