@tocca-systems/twp-cli 0.90.0 → 0.92.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 +14 -0
- package/README.md +84 -4
- package/dist/{agent-IVJ5DCFU.js → agent-SX7Z5BVN.js} +2 -2
- package/dist/{agent-loop-XPV5PNE5.js → agent-loop-QV7WHT7B.js} +2 -2
- package/dist/{ai-dispatch-FTZKQHEL.js → ai-dispatch-YPQGMOBK.js} +1 -1
- package/dist/{analysis-DIWOPBN6.js → analysis-6MPLKJUS.js} +2 -2
- package/dist/{announcement-KOXBNHSN.js → announcement-4ZK63ONY.js} +2 -2
- package/dist/{api-command-OJORMKTD.js → api-command-K6I3WSI4.js} +4 -4
- package/dist/{app-V6K6YNWR.js → app-Z6NIVNWQ.js} +4 -4
- package/dist/{attendance-correct-XM26CE65.js → attendance-correct-X67ITW3J.js} +2 -2
- package/dist/{attendance-lists-VNAHH3R4.js → attendance-lists-RVJIQAAM.js} +2 -2
- package/dist/audit-log-ZGK7IVLD.js +53 -0
- package/dist/{backlog-LCGG5HRB.js → backlog-ZHON6HED.js} +1 -1
- package/dist/{budget-OYBU4JFH.js → budget-FEEEYUX2.js} +2 -2
- package/dist/{chunk-H7XVCIL7.js → chunk-3S52X3Z7.js} +1 -1
- package/dist/{chunk-MPGJU5A7.js → chunk-3UOVTIM6.js} +1 -1
- package/dist/{chunk-M36DAHMH.js → chunk-6DM366P6.js} +48 -40
- package/dist/{chunk-INS77QHY.js → chunk-6EQLA56A.js} +1 -1
- package/dist/{chunk-EGOE26U7.js → chunk-7UAJ3ZY7.js} +1 -1
- package/dist/{chunk-EQTXWU2Y.js → chunk-BPLDHTAS.js} +1 -1
- package/dist/{chunk-FCC7JJR5.js → chunk-BROJYH74.js} +1 -1
- package/dist/{chunk-P673SKUV.js → chunk-D6MAASMD.js} +1 -1
- package/dist/{chunk-U2CRCBJ3.js → chunk-ELW4VTSK.js} +1 -1
- package/dist/{chunk-U3XIH7WP.js → chunk-FLLSRBFZ.js} +1 -1
- package/dist/{chunk-NYQYDX7G.js → chunk-HZNC2UFL.js} +1 -1
- package/dist/{chunk-AVOZLZA5.js → chunk-IQL7NZKM.js} +5 -4
- package/dist/{chunk-OVV2PTZF.js → chunk-ISLZWSHN.js} +1 -1
- package/dist/{chunk-5STCZEOX.js → chunk-JBAVETQP.js} +1 -1
- package/dist/chunk-JQQP7JLQ.js +4 -0
- package/dist/chunk-LGNYEROA.js +12 -0
- package/dist/{chunk-23MEOBJF.js → chunk-MQOHOOJP.js} +1 -1
- package/dist/{chunk-YPS5XHYE.js → chunk-N3I76TL6.js} +1 -1
- package/dist/{chunk-U6KPYJTM.js → chunk-NB2GXB27.js} +1 -1
- package/dist/{chunk-VLBWNFQW.js → chunk-NELPXRBC.js} +1 -1
- package/dist/{chunk-T7MUDWUH.js → chunk-PBMHUH73.js} +1 -1
- package/dist/{chunk-Q5NZXJNI.js → chunk-RZA3PZNH.js} +1 -1
- package/dist/{chunk-IWY2SNST.js → chunk-UVTOBRHP.js} +1 -1
- package/dist/{chunk-UCPK53K4.js → chunk-VBIZ6U7C.js} +1 -1
- package/dist/{chunk-ZTDDOUS4.js → chunk-VOSADZUE.js} +2 -2
- package/dist/{chunk-EQXJOEOK.js → chunk-VROESTZQ.js} +1 -1
- package/dist/{chunk-T3PYPLTG.js → chunk-Y4U3F4UM.js} +2 -2
- package/dist/{chunk-7PTFN3H7.js → chunk-ZFSQJAYZ.js} +8 -7
- package/dist/cli.js +29 -9
- package/dist/{commands-ULMFP3LH.js → commands-23GMSCTQ.js} +9 -9
- package/dist/{commands-FOEEAVJQ.js → commands-MNYRRJBT.js} +1 -1
- package/dist/{company-BW3U437C.js → company-YFHD4RLP.js} +3 -3
- package/dist/{completion-636S3VU3.js → completion-KPMCNLV2.js} +1 -1
- package/dist/{contract-2MANNVJT.js → contract-C7PTM573.js} +2 -2
- package/dist/{department-LT3IM65L.js → department-JZVWFUCI.js} +1 -1
- package/dist/{deposit-RYRCQ2U7.js → deposit-NUWEBC7M.js} +2 -2
- package/dist/{domain-knowledge-Q2YMI7I2.js → domain-knowledge-QDSWQW4E.js} +1 -1
- package/dist/{estimate-MMS326SE.js → estimate-GJEDV3D5.js} +3 -3
- package/dist/{evaluation-KSZPNKBM.js → evaluation-KQPTG4G3.js} +2 -2
- package/dist/{expense-J7KGZKLH.js → expense-NFQY5NZN.js} +1 -1
- package/dist/{faq-FJUCNBEB.js → faq-QVRTJ3KS.js} +2 -2
- package/dist/{fiscal-year-AFO5CWDN.js → fiscal-year-GL3RFX6H.js} +1 -1
- package/dist/{holiday-KF2RVJSU.js → holiday-FUYMZVGX.js} +2 -2
- package/dist/{inquiry-IAAJYTXP.js → inquiry-XMM6EHNJ.js} +1 -1
- package/dist/{invoice-A3X3JF2H.js → invoice-MLJEVQA4.js} +2 -2
- package/dist/{job-title-PF4C6D6U.js → job-title-JHTVL7OO.js} +1 -1
- package/dist/{knowledge-2YF7CJKA.js → knowledge-MROBIUE5.js} +2 -2
- package/dist/{leave-2JNN3V3D.js → leave-GXVOULRK.js} +2 -2
- package/dist/{license-MRXITCY7.js → license-XUPFMAGX.js} +1 -1
- package/dist/login-history-JIWV62KF.js +48 -0
- package/dist/{logout-guard-PEETWT4A.js → logout-guard-HUCILXP7.js} +1 -1
- package/dist/{media-IQ2AIN67.js → media-FKKQA223.js} +3 -3
- package/dist/{notification-4YXX6H3D.js → notification-YAT6O2TK.js} +1 -1
- package/dist/{oneshot-ZCGHYKQM.js → oneshot-HV5VMNFX.js} +1 -1
- package/dist/{outlook-ZRFSKSJ3.js → outlook-GXWQLCR6.js} +1 -1
- package/dist/{plan-submit-WP25FEYE.js → plan-submit-I5QAVNZN.js} +1 -1
- package/dist/{position-M2MEJBUK.js → position-33HC7ETC.js} +1 -1
- package/dist/{project-EF2JKWVC.js → project-O6TQKZBJ.js} +2 -2
- package/dist/{prospect-R6346ME5.js → prospect-LQ2RLIBN.js} +2 -2
- package/dist/{purchase-XCTYVG4N.js → purchase-E25SBHR2.js} +3 -3
- package/dist/{receivable-FVLXVO2S.js → receivable-M3IUSRB7.js} +2 -2
- package/dist/{redmine-EUFN35BT.js → redmine-OIBKHGK3.js} +1 -1
- package/dist/{registry-TGKZPLKO.js → registry-QHNBNSNA.js} +1 -1
- package/dist/{report-6Q3JV4DN.js → report-TS7D6YF5.js} +1 -1
- package/dist/{run-3UJFGBQR.js → run-AHNWMLZ4.js} +2 -2
- package/dist/{sales-ai-review-TTWTHKQJ.js → sales-ai-review-KYYUF5HG.js} +2 -2
- package/dist/{sales-master-VKS2HENV.js → sales-master-UNKMFZDV.js} +2 -2
- package/dist/{sales-numbering-W2W57UPY.js → sales-numbering-URGXUTUX.js} +2 -2
- package/dist/{search-N45JL2PU.js → search-OEOAUIW3.js} +1 -1
- package/dist/{segment-3MKCPWT2.js → segment-H7FFI52Z.js} +1 -1
- package/dist/{server-settings-RNJ6RVTE.js → server-settings-TFVXMOJB.js} +1 -1
- package/dist/{setup-ICJPTYKW.js → setup-FX2IUBHT.js} +1 -1
- package/dist/{skill-Z3DEECEK.js → skill-BJFHENEO.js} +2 -2
- package/dist/{skill-check-3RWESZ4O.js → skill-check-VNUNX6IO.js} +1 -1
- package/dist/{staffing-board-LWUCHN7P.js → staffing-board-2ZV2Q6TC.js} +2 -2
- package/dist/{supplier-payment-AUT2FZBR.js → supplier-payment-2OVDNHBD.js} +2 -2
- package/dist/{support-OUQWV5KP.js → support-6NZCSDPJ.js} +1 -1
- package/dist/{task-7FOEUQJ6.js → task-GLFAR4GN.js} +3 -3
- package/dist/{teams-FOR3O7KH.js → teams-KNXVEWMD.js} +1 -1
- package/dist/{user-TRXOR2Q6.js → user-L6NYXPV6.js} +53 -28
- package/dist/{user-contract-type-MPZQ7Y2P.js → user-contract-type-2PUE2JQL.js} +1 -1
- package/dist/user-group-EIYVFUTB.js +69 -0
- package/dist/{worker-agent-4E5P75SJ.js → worker-agent-2BARDPDL.js} +1 -1
- package/dist/{workflow-G7QZZPAX.js → workflow-P4SJX6YR.js} +2 -2
- package/package.json +1 -1
- package/dist/chunk-C6U2CGX7.js +0 -4
- package/dist/chunk-Y5XM6W3S.js +0 -12
package/CHANGELOG.public.md
CHANGED
|
@@ -11,6 +11,20 @@
|
|
|
11
11
|
`CHANGELOG.md` に残してあります。顧客向けの履歴は public 公開以降を対象とします。
|
|
12
12
|
-->
|
|
13
13
|
|
|
14
|
+
## 0.92.0
|
|
15
|
+
|
|
16
|
+
`twp user-group` で、ユーザーグループの一覧・作成・更新と、メンバーの追加・削除ができるようになりました(管理者のみ)。指定しなかった項目やほかのメンバーは変わりません。
|
|
17
|
+
|
|
18
|
+
監査ログを CLI から確認できるようになりました(`twp audit-log`)。誰がいつ何を変えたかを、期間・操作した人・対象のユーザー・プロジェクト・操作の種類で絞り込んで一覧し、画面と同じ CSV に書き出せます。組織管理者の権限が要ります。
|
|
19
|
+
|
|
20
|
+
## 0.91.0
|
|
21
|
+
|
|
22
|
+
`twp user unlock` で、ログイン失敗でロックされたユーザーのロックを解除できるようになりました(組織管理者のみ)。解除前にロックされているかを表示します。
|
|
23
|
+
|
|
24
|
+
`twp user create` / `update` で、二段階認証の方式、打刻修正権限・コスト管理者・分析者、社員識別子、個人連絡先、緊急連絡先を設定できるようになりました。`twp user update --clear <項目>` で値を消すこともできます。
|
|
25
|
+
|
|
26
|
+
ログイン履歴を CLI から確認できるようになりました(`twp login-history`)。期間・ユーザー・IP アドレス・結果(成功・失敗・ロック・IP 制限)で絞り込んだ一覧と、結果ごとの件数の集計を出せます。アカウントのロックの原因や、見覚えのない場所からのログインを調べるのに使えます。組織管理者の権限が要ります。
|
|
27
|
+
|
|
14
28
|
## 0.90.0
|
|
15
29
|
|
|
16
30
|
`twp project template` で、プロジェクトテンプレートの一覧・作成・変更・削除、既存プロジェクトからのテンプレート作成、テンプレートからの新しいプロジェクト作成をコマンドから行えるようになりました。
|
package/README.md
CHANGED
|
@@ -20,9 +20,10 @@ TWP(Tocca Working Platform)を、ターミナルから使うための CLI
|
|
|
20
20
|
|---|---|
|
|
21
21
|
| **できる** | AI との会話(ストリーミング表示)。手元のファイルの読み書き・検索、コマンド実行、git の読み取り——いずれも**実行前に確認**します |
|
|
22
22
|
| **できる** | `twp project` / `twp task` によるプロジェクト・タスクの読み書き(一覧・取得・作成・更新・削除・コメント) |
|
|
23
|
-
| **できる** | `twp user` によるテナントのユーザーの作成・更新・失効(退社)と招待(1件・CSV 一括・再送・取消)、ユーザーと所属(部署・役職)の参照(一覧・取得・所属の履歴)、所属の付け替え(異動)・作成・更新・終了・削除、在籍者の棚卸と人事台帳 CSV
|
|
23
|
+
| **できる** | `twp user` によるテナントのユーザーの作成・更新・失効(退社)と招待(1件・CSV 一括・再送・取消)、ユーザーと所属(部署・役職)の参照(一覧・取得・所属の履歴)、所属の付け替え(異動)・作成・更新・終了・削除、在籍者の棚卸と人事台帳 CSV との突き合わせ、`twp login-history` によるログイン履歴の一覧(期間・ユーザー・IP・結果で絞り込み)と集計、`twp audit-log` による監査ログ(誰がいつ何を変えたか)の一覧・集計・CSV 出力。作成・更新・招待と取得、所属の書き込み、他人の所属の参照、棚卸、ログイン履歴、監査ログは組織管理者の権限が要ります |
|
|
24
24
|
| **できる** | `twp skill` / `twp qualification` によるスキルマスタ・資格マスタの一覧、スキル・スキルカテゴリの作成・更新・削除とカテゴリ内の並び替え、資格マスタの作成・更新・削除と CSV 一括登録・資格制度の説明文の更新(いずれも管理者のみ)、スキルマップの表示(部署で絞り込める)とスキル保有者の横断検索(所属付き)、自分のスキルプロファイルへの自己評価の提出(`--yes` が要ります)、`twp user skills` / `qualifications` / `trainings` / `contracts` によるユーザーのスキル評価・保有資格・研修受講履歴・雇用契約の参照。スキルマップと横断検索は HR管理者、雇用契約は原価管理者か管理者、研修履歴は人事管理の権限が要ります |
|
|
25
25
|
| **できる** | `twp department` / `twp position` / `twp job-title` / `twp segment` / `twp user-contract-type` / `twp fiscal-year` による組織マスタ(部署・役職・職位・セグメント・契約形態・事業年度設定)の一覧・取得・作成・更新・削除、`twp holiday` / `twp business-hours` によるカレンダーマスタ(祝日・営業日)の読み書きと CSV の出し入れと、部署ツリー・部署の所属者の表示。作成・更新・削除は管理者の権限が要ります |
|
|
26
|
+
| **できる** | `twp user-group` によるユーザーグループの一覧・取得・作成・更新と、メンバーの一覧・追加・外す操作。取得・作成・更新とメンバーの操作は管理者の権限が要ります(グループの削除はサーバに無いので、表示区分を非表示にして外します) |
|
|
26
27
|
| **できる** | `twp inquiry category` による問い合わせカテゴリの一覧・取得・作成・更新(通知先の設定・末尾への並べ替えを含む)。取得・作成・更新は問い合わせ機能の管理者の権限が要ります |
|
|
27
28
|
| **できる** | `twp evaluation` / `twp goal-sheet` による人事評価と目標シートの読み取り(評価期間・見てよい範囲の評価と目標シートの一覧・部下の評価の状況・評価の詳細とプロジェクト別評価・自分の目標シート・受け取ったフィードバック)と書き込み(目標シートの書き換え・提出、評価段の入力、フィードバックの下書き保存・送信・公開、`twp project evaluation create` によるプロジェクトでの要員評価の作成)、評価期間の作成・変更・削除・締め・締め解除、評価基準(A〜E の説明)の表示・置き換え、`twp role-template` による役割テンプレートの一覧・作成・変更・削除。評価期間・評価基準・役割テンプレートの書き込みは管理者の権限が要ります |
|
|
28
29
|
| **できる** | `twp support` によるシステムサポートへの依頼(依頼者側)の一覧・詳細(コメントの経過を含む)・起票(添付3件まで)・コメント・完了・再問い合わせ・取り下げと、カテゴリの一覧。運営側(回答・ステータス変更)は扱いません |
|
|
@@ -287,12 +288,20 @@ twp user assignment list <ユーザー> [--current] # 本人・上長・組織
|
|
|
287
288
|
twp user create --name <氏名> --email <メールアドレス> --password-file <パス|->
|
|
288
289
|
[--role admin|user] [--kana <フリガナ>] [--hire-date <YYYY-MM-DD>] [--employee-code <社員番号>]
|
|
289
290
|
[--display true|false] [--memberlist true|false] [--org-chart true|false] [--dashboard true|false]
|
|
290
|
-
|
|
291
|
+
[--two-factor none|email|sms] [--two-factor-tel <電話番号>]
|
|
292
|
+
[--punch-correction true|false] [--cost-manager true|false] [--analyst true|false]
|
|
293
|
+
[--employee-identifier <社員識別子>] [--personal-email <メール>] [--personal-tel <電話番号>]
|
|
294
|
+
[--emergency-name <氏名>] [--emergency-address <住所>] [--emergency-tel <電話番号>]
|
|
295
|
+
[--emergency-relationship <続柄>]
|
|
296
|
+
twp user update <ユーザー> [上と同じ項目] [--auth-type all|password|oauth|disabled] [--clear <項目>]…
|
|
291
297
|
```
|
|
292
298
|
|
|
293
299
|
- **パスワードはコマンド行に置けません**(シェルの履歴とプロセス一覧に残るため)。`--password-file` にファイルのパスを渡すか、`-` を渡して標準入力から渡します。末尾の改行1つは取り除きます。8文字以上です
|
|
294
300
|
- `--role` を省くと一般ユーザー(`user`)で作成します。表示フラグを省くと、すべて表示する(`true`)で作成します。機能権限はテナントの既定で付与され、ライセンスの空きが足りない機能は付与されずに stderr へ出ます
|
|
295
301
|
- **`twp user update` は指定した項目だけを変更します**(指定しなかった項目は変わりません)。何も指定しないとエラーになります
|
|
302
|
+
- 値を消すときは `--clear <項目>` を使います(複数回指定できます)。消せるのは `kana` / `employee-code` / `two-factor-tel` / `employee-identifier` / `personal-email` / `personal-tel` / `emergency-name` / `emergency-address` / `emergency-tel` / `emergency-relationship` / `hire-date` です。同じ項目に値と `--clear` を両方渡すとエラーになります
|
|
303
|
+
- 二段階認証は `--two-factor none`(なし)/ `email`(メール)/ `sms`(SMS)で指定します。`sms` にするときは `--two-factor-tel` に送り先を登録してください(`create` では必須。`update` で省くと登録済みの番号へ送ります)。端末を紛失した人は `twp user update <ユーザー> --two-factor email` などで切り替えます
|
|
304
|
+
- 個人連絡先・緊急連絡先の値は結果にも `--dry-run` / `--debug` の本文にも出しません(画面共有やログに残るため)。`--dry-run` で送る値まで確かめるときは `--no-redact` を付けます
|
|
296
305
|
- **表示フラグを外したユーザーは社員番号では指定できません**(メールアドレスか ID で指定してください)。作成・更新の直後に社員番号で指定するときは `--refresh` を付けます(ユーザー一覧は10分キャッシュします)
|
|
297
306
|
- メールアドレスが既に使われているなどでサーバが断ったときは、その理由を出して終了コード 3 で終わります
|
|
298
307
|
|
|
@@ -317,6 +326,17 @@ twp user update yamada@example.com --auth-type all \
|
|
|
317
326
|
|
|
318
327
|
- 失効かどうかは `twp user get <ユーザー>` の `auth_type` で確認できます。退職日・所属の終了・ライセンスの回収はこのコマンドでは行いません(所属の終了は `twp user assignment end`)
|
|
319
328
|
|
|
329
|
+
#### ログイン失敗でロックされたユーザーを解除する
|
|
330
|
+
|
|
331
|
+
```bash
|
|
332
|
+
twp user unlock yamada@example.com
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
- ログインの失敗回数が上限を超えてロックされたユーザーを、すぐにログインできる状態へ戻します(失敗回数も 0 に戻ります)。パスワードは変わりません
|
|
336
|
+
- 送る前にユーザーの詳細を読み、ロックされているかを表示します(`--dry-run` でも表示します)。ロック中かどうかは `twp user get <ユーザー>` の `is_locked`(`1` ならロック中)でも確認できます
|
|
337
|
+
- ロックされていないユーザーを指定しても止めません(サーバは成功を返し、失敗回数が 0 に戻るだけです)
|
|
338
|
+
- 組織管理者だけが使えます。組織管理者でも、組織設定のアカウントロック「管理者による手動解除」が無効なテナントでは解除できません(その旨を案内します。ロック時間の経過かパスワードリセットで解除してください。どちらも組織設定で有効なときだけ解除されます)
|
|
339
|
+
|
|
320
340
|
### 所属を付け替える(異動)・作成する・終了する
|
|
321
341
|
|
|
322
342
|
組織管理者向けです。
|
|
@@ -364,7 +384,7 @@ twp user export --output tsv > inventory.tsv # 表計算
|
|
|
364
384
|
|
|
365
385
|
- **列**: `user_id` / 氏名 / メールアドレス / 社員番号 / 入社日 / 主所属の部署・役職 / 上長 / 権限(機能ごとのレベル。`none` は省く)/ パートナーか / 認証タイプ / 表示フラグ / 最終ログイン。**個人連絡先(個人メール・緊急連絡先など)は出しません**。tsv / table では `=` `+` `-` `@` で始まる値の先頭に `'` を付けます(表計算ソフトが式として読まないように)
|
|
366
386
|
- **表示フラグを外したユーザーも既定で含めます**(表示フラグだけ外して失効させていない人を見つけるため)。表示中のユーザーだけにするなら `--exclude-hidden`。失効済みも出すなら `--include-disabled`
|
|
367
|
-
- **最終ログインはログイン履歴から取ります。** ログイン履歴は90日で消えるので「90日以内の記録なし」は一度もログインしていないという意味ではありません。また **Google / Microsoft の SSO
|
|
387
|
+
- **最終ログインはログイン履歴から取ります。** ログイン履歴は90日で消えるので「90日以内の記録なし」は一度もログインしていないという意味ではありません。また **Google / Microsoft の SSO でのログインは 2026-09-26 のサーバ更新より前の分が記録されていない**ため、認証タイプが `oauth` の人は「判定不能」と出し、長期未ログインの判定から外します。履歴そのものは `twp login-history list` で見られます
|
|
368
388
|
- `--file` を付けると差分だけを出します。`kind` 列は次のとおりです
|
|
369
389
|
|
|
370
390
|
| `kind` | 意味 |
|
|
@@ -381,6 +401,25 @@ twp user export --output tsv > inventory.tsv # 表計算
|
|
|
381
401
|
- 各行の `user_id` は `twp user update` / `twp user assignment` へ渡せます。`suggestion` 列は次に打つコマンドの**案**です(失効・異動・役職変更・招待)。`'<異動日>'` などの `<…>` は埋めてから、対象が自分自身や共用の管理アカウントでないことを確かめて実行してください。`twp user assignment move` は上長を引き継がないので、必要なら `--manager` も付けます
|
|
382
402
|
- 1人あたり最大3往復します。本番の API レート制限に合わせて1分あたり200本までに抑えて送るため、数百人のテナントでは数分かかります。対象が `--max-users`(既定 2,000 人)を超えると、詳細を読む前に止まります
|
|
383
403
|
|
|
404
|
+
### ログイン履歴を見る
|
|
405
|
+
|
|
406
|
+
組織管理者向けです。アカウントがロックされた原因や、見覚えのない IP アドレスからのログインを調べるのに使います。
|
|
407
|
+
|
|
408
|
+
```
|
|
409
|
+
twp login-history list [--from <日付|日時>] [--to <日付|日時>] [--result success|failure|locked|ip_blocked] [--all]
|
|
410
|
+
twp login-history list --user <ユーザー> [--result failure] # 1人分(ID・メール・社員番号・氏名・me)
|
|
411
|
+
twp login-history list --ip <IPアドレス> # その IP からのログイン
|
|
412
|
+
twp login-history stats [--days <日数>] # 直近の試行を結果ごとに集計(既定7日・最大90日)
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
- **新しい順に出ます。** `--output table` などの要約列は `timestamp` / `result` / `email` / `ip_address` / `failure_reason` で、`--output json` は `user_id` / `user_agent` を含む全項目です。時刻は UTC(末尾 `Z`)です
|
|
416
|
+
- `--from` / `--to` は日付(`YYYY-MM-DD`・日本時間の1日)か、時差付きの日時(`2026-10-01T09:00:00+09:00`)で指定します
|
|
417
|
+
- **`--user` と `--ip` は併用できません**(サーバが別の索引を引くため)。どちらかを付けた一覧は続きのページが無く `--limit`(既定100・最大500)件までなので、件数が届いたら stderr で知らせます。期間を狭めて取り直してください
|
|
418
|
+
- `--result` はサーバが読んだ後に絞るので、0件のページに「続きがあります」が付くことがあります。`--result` で探すときは `--all` を付けてください
|
|
419
|
+
- `stats` はサーバが新しい順に1,000件までしか数えません。`total_attempts` が1,000に届いたら実際より少ないので、stderr の案内に従って `list --all` で数え直してください
|
|
420
|
+
- **履歴は90日で消えます。** Google / Microsoft の SSO でのログインは、2026-09-26 のサーバ更新より前の分が記録されていません
|
|
421
|
+
- ヘルプは `twp login-history help`
|
|
422
|
+
|
|
384
423
|
### ユーザーを招待する
|
|
385
424
|
|
|
386
425
|
組織管理者向けです。招待されたメールアドレスへ招待メールが届き、本人が氏名とパスワードを入力して登録します。
|
|
@@ -434,6 +473,23 @@ E0012,Wiki管理,editor
|
|
|
434
473
|
- 権限は変わったがサーバがライセンスの更新に失敗した件があれば、結果を出したうえで終了コード 3 で終わります
|
|
435
474
|
- 変更が本人の画面・API に効くまで最大5分ほどかかります(サーバの設定により最長30分)
|
|
436
475
|
|
|
476
|
+
### テナントの操作記録(監査ログ)を見る・CSV に書き出す
|
|
477
|
+
|
|
478
|
+
組織管理者向けです。画面の「組織管理 > 監査ログ」と同じ記録(タスクの作成・更新・削除とコメント、プロジェクト本体・メンバーの変更)を引きます。CLI 自身の判断記録(下の「監査ログ」= `~/.twp/logs/`)とは別物です。
|
|
479
|
+
|
|
480
|
+
```
|
|
481
|
+
twp audit-log list [--from <日付>] [--to <日付>] [--user <ユーザー>] [--target-user <ユーザー>] [--project <プロジェクト>] [--action <操作>] [--all]
|
|
482
|
+
twp audit-log stats [--days <日数>] # 直近の操作を種類ごとに数える(既定 7 日・最大 90)
|
|
483
|
+
twp audit-log export --out <パス.csv> --from <日付> [--to <日付>] [絞り込み…] # 画面の「CSVエクスポート」と同じ CSV
|
|
484
|
+
```
|
|
485
|
+
|
|
486
|
+
- `--from` / `--to` は日付(`YYYY-MM-DD`)で、**日本時間の1日**として扱います。`export` で `--to` を省くと日本時間の今日までです
|
|
487
|
+
- `--user` は操作した人、`--target-user` は変更の対象になった人(メンバー・PM/PL 等の変更)、`--project` はプロジェクトのコード・ID・名前(完全一致。同名が複数あればコードを求めます)です。ユーザーは ID・メールアドレス・社員番号・氏名・`me` で指定できます
|
|
488
|
+
- `--action` は `create` / `update` / `delete` / `comment_add` / `comment_update` / `comment_delete` です。プロジェクト本体・メンバーの変更は操作の種類を持たないので、`--action` を付けると出ません
|
|
489
|
+
- **表(table / text / tsv)には変更前後の値とコメント本文を出しません**(氏名・メール等の個人情報を含みうるため)。中身は `--output json` か CSV で見てください
|
|
490
|
+
- 絞り込みはサーバが読んだ後に掛かるので、件数が少ないページにも「続きがあります」が付くことがあります。絞り込んで探すときは `--all` を付けてください
|
|
491
|
+
- CSV はサーバが1回に **1,000 行まで**しか出しません。届いたら stderr で知らせるので、期間を分けて書き出すか `twp audit-log list --all --output json` で取ってください。絞り込みを付けると、該当が疎なときは 1,000 行に届かなくても欠けることがあります(その旨も知らせます)。`stats` もサーバが直近 1,000 件までしか数えません(届いたら知らせます)
|
|
492
|
+
|
|
437
493
|
### 組織マスタ(部署・役職・職位・セグメント・契約形態・事業年度設定)を扱う
|
|
438
494
|
|
|
439
495
|
作成・更新・削除は管理者向けです。一覧・取得・ツリー・所属者は、ログインしていれば使えます。
|
|
@@ -476,6 +532,30 @@ twp fiscal-year delete <年度> --yes
|
|
|
476
532
|
- **プロジェクトから参照されているセグメント、契約(終了済みの履歴を含む)から参照されている契約形態も削除できません。** サーバの理由に続けて無効化のコマンド(セグメントは `--status inactive`、契約形態は `--active false`)を案内します
|
|
477
533
|
- ヘルプは `twp department help` / `twp position help` / `twp job-title help` / `twp segment help` / `twp user-contract-type help` / `twp fiscal-year help`
|
|
478
534
|
|
|
535
|
+
### ユーザーグループを扱う
|
|
536
|
+
|
|
537
|
+
ユーザーグループはワークフローの承認先・通知先、レポートの権限、お知らせの配信対象などで使われます。一覧はログインしていれば使え、それ以外は管理者向けです。
|
|
538
|
+
|
|
539
|
+
```
|
|
540
|
+
twp user-group list [--keyword <語>] [--display visible|hidden] [--select-type all|admin-only]
|
|
541
|
+
twp user-group get <グループ>
|
|
542
|
+
twp user-group create --name <グループ名> [--member <ユーザー>…] [--display visible|hidden] [--select-type all|admin-only] [--sort <整数>]
|
|
543
|
+
twp user-group update <グループ> [--name <グループ名>] [--display …] [--select-type …] [--sort <整数>] [--member <ユーザー>… | --no-members]
|
|
544
|
+
|
|
545
|
+
twp user-group member list <グループ>
|
|
546
|
+
twp user-group member create <グループ> --user <ユーザー> [--user <ユーザー>…]
|
|
547
|
+
twp user-group member delete <グループ> --user <ユーザー> [--user <ユーザー>…] --yes
|
|
548
|
+
```
|
|
549
|
+
|
|
550
|
+
- **入社・異動で1人ずつ出し入れするなら `member create` / `member delete` を使ってください。** 今のメンバーを読み、指定した人だけを足す/外して送ります(他のメンバーはそのまま)
|
|
551
|
+
- `update` は指定した項目だけを変えます。サーバの更新はグループの全項目とメンバーを置き換える作りなので、CLI は送る直前に今の値を読み、指定しなかった項目(選択区分を含む)とメンバーをそのまま送り返します。**`update --member` はメンバーを指定した人だけに置き換えます**(足すのではありません)。`--no-members` で空にします。**今のメンバーが外れるときは `--yes` が要ります**(`member delete` と同じ)
|
|
552
|
+
- 削除済みのユーザーの所属は、サーバが詳細に返さないため、更新系を送ると消えます(画面で保存したときと同じ)
|
|
553
|
+
- 送る前に「メンバー: n人 → m人(追加・外す)」を stderr に出します。`--dry-run` で送る内容を確かめられます
|
|
554
|
+
- `<グループ>` はグループ名か ID、`--member` / `--user` はユーザーの ID・メールアドレス・社員番号・氏名で指定できます。グループ一覧は10分キャッシュするので、作成・改名の直後に名前で指定するときは `--refresh` を付けてください(ID ならそのまま通ります)
|
|
555
|
+
- 表示区分(`--display`)は `visible`(表示)/ `hidden`(非表示=選択肢に出さない)、選択区分(`--select-type`)は `all`(管理者・一般ユーザーが選べる)/ `admin-only`(管理者のみ)です。管理者以外の `list` には選択区分が「全員」のグループだけが返ります
|
|
556
|
+
- **グループの削除はできません**(サーバにも画面にも削除が無い)。使わなくなったグループは `update --display hidden` で選択肢から外してください
|
|
557
|
+
- ヘルプは `twp user-group help` / `twp user-group member help`
|
|
558
|
+
|
|
479
559
|
### カレンダーマスタ(祝日・営業日)を扱う
|
|
480
560
|
|
|
481
561
|
```bash
|
|
@@ -1113,7 +1193,7 @@ twp license assignments <機能コード|機能名> | --all-features [--inactive
|
|
|
1113
1193
|
- `bulk-restore` はゴミ箱から戻す操作です(アーカイブの解除ではありません)。`bulk-delete --permanent` は**ゴミ箱にあるファイルだけ**を完全に削除します(先に `bulk-delete` でゴミ箱へ移してください)
|
|
1114
1194
|
- `twp storage get` は使用量・上限・残量と種類別の内訳を出します(管理者のみ。アップロード前の容量検査は誰でも自動で行われます)
|
|
1115
1195
|
- **`twp license list` は画面の「課金管理 > ライセンス状況」と同じ枠・使用数を出します**(購入済みは Stripe の契約中のシートだけ)。シートの購入・削減は画面から行ってください
|
|
1116
|
-
- **`twp license assignments` の判定(findings)は、失効済み/機能権限が none/`--inactive-days` 日(既定60・最大90)ログインの記録が無い/ユーザーが見つからない、の4種類です。** 最終ログインは `twp user export` と同じくログイン履歴(90日で消える・SSO
|
|
1196
|
+
- **`twp license assignments` の判定(findings)は、失効済み/機能権限が none/`--inactive-days` 日(既定60・最大90)ログインの記録が無い/ユーザーが見つからない、の4種類です。** 最終ログインは `twp user export` と同じくログイン履歴(90日で消える・SSO は 2026-09-26 より前の分が記録されていない)から読むので、oauth の人は判定しません。各行の `release_command` は権限を none にしてライセンスを外す `twp user permission update` のコマンド案です。**打ってもサーバが割当を外さない行(ライセンスの要らないレベル・権限の変更でライセンスが動かない機能・ユーザーが見つからない)には出しません**——その行は画面の「ライセンス管理」から外してください
|
|
1117
1197
|
- **AI 生成(`twp media image create` / `twp media document create`)は生成物をメディアライブラリに保存し、`--out` を付けるとそのファイルをそのまま書き出します。** 付けなければファイルIDを出して終わります(あとから `twp media download` で取れます)。AI クレジットを消費するので `--yes` が要ります(送る内容は `--dry-run` で確認できます)。`--from <ファイルID>` を付けると、その画像を元にしたリミックスになります
|
|
1118
1198
|
- 書き出し先が既にあるときは、**生成を送る前に**止まります(クレジットを使ってから「書けません」で落ちません)。取得だけが失敗したときは、ファイルIDと `twp media download` のコマンドを出して失敗で終わります(生成し直す必要はありません)
|
|
1119
1199
|
- **生成の回数制限(1分あたりの回数・ユーザーごと)に当たっても自動では打ち直しません**(生成は1回ごとに課金されるため)。待つ秒数を stderr に出して終了コード 4 で終わります
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{SCHEDULE_HELP,parseSchedule}from"./chunk-
|
|
4
|
-
import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-MI6HVYR2.js";import
|
|
3
|
+
import{SCHEDULE_HELP,parseSchedule}from"./chunk-BPLDHTAS.js";import"./chunk-WVCEKC7V.js";import"./chunk-RX5HWI4L.js";import{charCount,readBody}from"./chunk-M763HXDH.js";import"./chunk-W4NLJ2YK.js";import{AGENT_REPOSITORIES_PATH,AGENT_SCHEDULES_PATH,AGENT_SESSIONS_PATH}from"./chunk-6DM366P6.js";import{isSafePathSegment}from"./chunk-HVZUXLQ4.js";import{ApiError}from"./chunk-JA5A6UJ2.js";import"./chunk-MMVXE2CJ.js";import"./chunk-IXT2X5BZ.js";
|
|
4
|
+
import"./chunk-II5RVJQN.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-MI6HVYR2.js";import{requireResolved,withResolved}from"./chunk-PS5QFKHB.js";import{isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiRejectedError,ApiResponseError,NetworkError,UsageError,WaitTimeoutError}from"./chunk-VFPY2A23.js";import{NotLoggedInError,SessionExpiredError}from"./chunk-XNLIEUAW.js";import"./chunk-J7QYPKVK.js";import"./chunk-EDF4U5BT.js";
|
|
5
5
|
import"./chunk-RZVI6PMW.js";import"./chunk-QQRJLH6B.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var LABEL="\u5B9A\u671F\u5B9F\u884C";var LIST_COLUMNS=["schedule_id","name","enabled","schedule","repository_full_name","next_run_at","last_run_at","disabled_reason","owner_user_id"];var GET_COLUMNS=["schedule_id","name","enabled","schedule","repository_full_name","base_branch","ai_provider","ai_model","next_run_at","last_run_at","last_session_id","consecutive_failures","disabled_reason","owner_user_id","can_edit","can_disable","created_at","updated_at"];var RUN_COLUMNS=["run_id","created_at","t\
|
|
6
6
|
rigger","result","skip_reason","session_id","pr_url","error_message"];var NAME_MAX_CHARS=100;var INSTRUCTION_MAX_CHARS=1e4;var RUNS_MAX_LIMIT=100;var FORBIDDEN="AI\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u6A5F\u80FD\u306E\u30E9\u30A4\u30BB\u30F3\u30B9\uFF08agent\uFF09\u304C\u3042\u306A\u305F\u306E\u30A2\u30AB\u30A6\u30F3\u30C8\u306B\u5272\u308A\u5F53\u3066\u3089\u308C\u3066\u3044\u306A\u3044\u304B\u3001\u4ED6\u30E6\u30FC\u30B6\u30FC\u306E\u5B9A\u671F\u5B9F\u884C\u3092\u5909\u66F4\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u307E\u3059\u3002\u7DE8\u96C6\u30FB\u524A\u9664\u30FB\u6709\u52B9\u5316\u30FB\u4ECA\u3059\u3050\u5B9F\u884C\u306F\u30AA\u30FC\u30CA\u30FC\u672C\u4EBA\u3060\u3051\u3001\u7121\u52B9\u5316\u306F\u30AA\u30FC\u30CA\u30FC\u3068\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u7BA1\u7406\u8005\u304C\u3067\u304D\u307E\u3059\u3002";
|
|
7
7
|
var SCHEDULE_REF_HELP="<\u5B9A\u671F\u5B9F\u884C> \u306F\u5B9A\u671F\u5B9F\u884C ID\uFF08twp agent schedule list \u306E schedule_id \u5217\uFF09\u3067\u3059\u3002";var CREDIT_CONFIRMATION="AI \u30AF\u30EC\u30B8\u30C3\u30C8\u3092\u6D88\u8CBB\u3059\u308B\u64CD\u4F5C";function usageOf(op){return`twp agent schedule ${op} help`}function noArgs(input,op){if(input.args.length>0)throw new UsageError(`schedule ${op} \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{stepToItem}from"./chunk-3D734ED2.js";import"./chunk-
|
|
4
|
-
isPrivateProjectRef}from"./chunk-RMFLTSOV.js";import"./chunk-IXT2X5BZ.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-MI6HVYR2.js";import
|
|
3
|
+
import{stepToItem}from"./chunk-3D734ED2.js";import{loadLocalConfig}from"./chunk-6EQLA56A.js";import"./chunk-VYDPW2YO.js";import{parseOperations}from"./chunk-CVX2YWHC.js";import"./chunk-TTST7UDR.js";import"./chunk-NXPLTDN4.js";import{loadAiConfig}from"./chunk-FABDZBDZ.js";import{SKILL_PREFIX_RE,setSkillPrefix}from"./chunk-6CS5L24D.js";import"./chunk-N2UVRM3Z.js";import"./chunk-UZUV5FYG.js";import{PRIVATE_PROJECT_PREFIX,PRIVATE_PROJECT_REF,
|
|
4
|
+
isPrivateProjectRef}from"./chunk-RMFLTSOV.js";import"./chunk-IXT2X5BZ.js";import"./chunk-II5RVJQN.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-MI6HVYR2.js";import{requireResolved,singleRef,withResolved}from"./chunk-PS5QFKHB.js";import{acknowledgement,isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import"./chunk-PMOUHEJQ.js";import"./chunk-J7QYPKVK.js";
|
|
5
5
|
import"./chunk-5WGOHFAS.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var LABEL="\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u30EB\u30FC\u30D7\u306E\u30A2\u30A4\u30C6\u30E0";var STATUSES=["pending","processing","completed","failed"];var AI_TYPES=["claude","gemini","codex","copilot"];var EFFORTS=["low","medium","high","xhigh","max"];var PRIORITIES=["P0","P1","P2","P3"];var LIST_COLUMNS=["item_id","status","task_key","label","ai_type","ai_effort","runner_id","created_at"];var GET_COLUMNS=["item_id","status","task_key","label","prompt","ai_type","ai_model","ai_effort","runn\
|
|
6
6
|
er_id","attempt_count","reclaim_count","error_message","created_by_name","created_at","started_at","completed_at"];var HISTORY_COLUMNS=["item_id","status","task_key","skill","ai_type","runner_id","duration_ms","cost_usd","created_at"];var PLAN_RESULTS=["enqueued","empty","json_not_found","ai_failed","error","skipped","gated","locked","abandoned"];var PLAN_HISTORY_COLUMNS=["plan_run_id","result","runner_id","ai_type","duration_ms","cost_usd","step_count","started_at"];var PROJECT_FLAG={name:"--pr\
|
|
7
7
|
oject",summary:"\u30AD\u30E5\u30FC\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\uFF08\u30B3\u30FC\u30C9\u307E\u305F\u306F ID\u3002\u7701\u7565\u6642\u306F TWP_PROJECT / .twp/config.json / ~/.twp/config.json\uFF09",takesValue:true,placeholder:"<\u30B3\u30FC\u30C9|ID>"};var ITEM_FLAG={name:"--item",summary:"\u30A2\u30A4\u30C6\u30E0\u306E ID\uFF08item_id\uFF09\u3002\u4F4D\u7F6E\u5F15\u6570\u3068\u540C\u3058\u610F\u5473\uFF08\u4E21\u65B9\u6307\u5B9A\u306F\u30A8\u30E9\u30FC\uFF09",takesValue:true,placeholder:"\
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{failureHint,isAuthError,isCliFatalText,isRateLimited,isServerAiType,isUntrusted,maxTurnsReached,rateLimitWaitSeconds,tailForScan}from"./chunk-MBPJV745.js";import{
|
|
3
|
+
import{failureHint,isAuthError,isCliFatalText,isRateLimited,isServerAiType,isUntrusted,maxTurnsReached,rateLimitWaitSeconds,tailForScan}from"./chunk-MBPJV745.js";import{detectAiClis}from"./chunk-5SONMN6K.js";import{expandServerSkills,prepareSkillOverlay}from"./chunk-3OCV6SOR.js";import"./chunk-MYBIPHZ7.js";import"./chunk-A4LFG7MW.js";import"./chunk-VRBI2NPI.js";import{ClaudeStreamRenderer}from"./chunk-NXPLTDN4.js";import{DEFAULT_CLAUDE_LAUNCHER,activeSlotPath,
|
|
4
4
|
detectClaudeAutoSwitch,isClaudeAi,isUsableModelId,modelFitsRoute,resolveSpawnTarget,usesBedrock,wrapWithAutoSwitch}from"./chunk-FABDZBDZ.js";import"./chunk-6CS5L24D.js";import{isForceOnly,killProcessTree,system32}from"./chunk-N2UVRM3Z.js";import"./chunk-UZUV5FYG.js";import"./chunk-RMFLTSOV.js";import"./chunk-IXT2X5BZ.js";import"./chunk-VFPY2A23.js";import{findExecutable,isWindowsDriveAbsolute}from"./chunk-PMOUHEJQ.js";import"./chunk-J7QYPKVK.js";
|
|
5
5
|
import"./chunk-5WGOHFAS.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";import{spawnSync}from"child_process";import fs2 from"fs";import path2 from"path";import{spawn}from"child_process";import fs from"fs";import path from"path";var DEFAULT_AI_TIMING={abortGraceMs:5e3,abortReapMs:2e3,pollIntervalMs:5e3};function resolveTiming(over){return{abortGraceMs:over?.abortGraceMs??DEFAULT_AI_TIMING.abortGraceMs,abortReapMs:over?.abortReapMs??DEFAULT_AI_TIMING.abortReapMs,pollIntervalMs:over?.pollIntervalMs??DEFAULT_AI_TIMING.pollIntervalMs}}var MAX_RETAINED_BYTES=4*1024*1024;function closeStream(stream){return new Promise(resolve=>{if(stream===null)return resolve();stream.once("error",()=>resolve());stream.end(()=>resolve())})}function buildArgs(req,cfg,env,workspace){
|
|
6
6
|
const warnings=[];const requested=(req.model??"").trim();const usable=requested!==""&&isUsableModelId(requested);if(requested!==""&&!usable){warnings.push(`ai_model '${requested}' \u306F\u4F7F\u3048\u306A\u3044\u5F62\u3067\u3059 \u2192 \u30AB\u30C6\u30B4\u30EA\u65E2\u5B9A\u306E\u30E2\u30C7\u30EB\u3092\u4F7F\u3044\u307E\u3059`)}const fitsRoute=!usable||!isClaudeAi(req.ai)||modelFitsRoute(requested,env);if(usable&&!fitsRoute){warnings.push(`ai_model '${requested}' \u306F\u73FE\u5728\u306E\u5B9F\u884C\u7D4C\u8DEF\u3067\u306F\u89E3\u6C7A\u3067\u304D\u307E\u305B\u3093\uFF08\u3053\u306E\u6A5F\u4F53\u306F ${usesBedrock(
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{DEPARTMENT_FLAG,FROM_FLAG,MANHOUR_DESCRIPTION,MANHOUR_FROM_FLAG,MANHOUR_TO_FLAG,MONTH_FLAG,TO_FLAG,USER_FLAG,analysisDomain,analysisForbidden,currentMonth,dataOf,levelGuidance,listIn,manhourNotes,manhourQuery,manhourRows,monthColumns,monthRange,monthsBetween,noArgs,periodNote,profitRows,rangeNotes,recordOf,resolveFilters,resolvedOrUndefined,responseMonths,staffKpiRows,workloadDistributionNotes,workloadDistributionRows}from"./chunk-
|
|
4
|
-
import"./chunk-EXT4AIDF.js";import"./chunk-
|
|
3
|
+
import{DEPARTMENT_FLAG,FROM_FLAG,MANHOUR_DESCRIPTION,MANHOUR_FROM_FLAG,MANHOUR_TO_FLAG,MONTH_FLAG,TO_FLAG,USER_FLAG,analysisDomain,analysisForbidden,currentMonth,dataOf,levelGuidance,listIn,manhourNotes,manhourQuery,manhourRows,monthColumns,monthRange,monthsBetween,noArgs,periodNote,profitRows,rangeNotes,recordOf,resolveFilters,resolvedOrUndefined,responseMonths,staffKpiRows,workloadDistributionNotes,workloadDistributionRows}from"./chunk-NB2GXB27.js";import"./chunk-MQOHOOJP.js";import"./chunk-UVCJXHWN.js";
|
|
4
|
+
import"./chunk-EXT4AIDF.js";import"./chunk-3UOVTIM6.js";import"./chunk-RX5HWI4L.js";import"./chunk-JJSBBWJ5.js";import"./chunk-M763HXDH.js";import"./chunk-W4NLJ2YK.js";import"./chunk-6DM366P6.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-MMVXE2CJ.js";import"./chunk-IXT2X5BZ.js";import"./chunk-II5RVJQN.js";import"./chunk-MI6HVYR2.js";import"./chunk-PS5QFKHB.js";import"./chunk-3ZRMMBP5.js";
|
|
5
5
|
import"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-EDF4U5BT.js";import"./chunk-RZVI6PMW.js";import"./chunk-QQRJLH6B.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";export{DEPARTMENT_FLAG,FROM_FLAG,MANHOUR_DESCRIPTION,MANHOUR_FROM_FLAG,MANHOUR_TO_FLAG,MONTH_FLAG,TO_FLAG,USER_FLAG,analysisDomain,analysisForbidden,currentMonth,dataOf,levelGuidance,listIn,manhourNotes,manhourQuery,manhourRows,monthColumns,monthRange,monthsBetween,noArgs,periodNote,profitRows,rangeNotes,recordOf,resolveFilters,resolvedOrUndefined,responseMonths,staffKpiRows,workloadDistributionNotes,workloadDistributionRows};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{composeDocument,htmlToText,metaLine}from"./chunk-62GRAKUD.js";import{boundedText}from"./chunk-JJSBBWJ5.js";import{readBody}from"./chunk-M763HXDH.js";import"./chunk-W4NLJ2YK.js";import{ANNOUNCEMENTS_PATH}from"./chunk-
|
|
4
|
-
|
|
3
|
+
import{composeDocument,htmlToText,metaLine}from"./chunk-62GRAKUD.js";import{boundedText}from"./chunk-JJSBBWJ5.js";import{readBody}from"./chunk-M763HXDH.js";import"./chunk-W4NLJ2YK.js";import{ANNOUNCEMENTS_PATH}from"./chunk-6DM366P6.js";import{isSafePathSegment}from"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-MMVXE2CJ.js";import"./chunk-IXT2X5BZ.js";import"./chunk-II5RVJQN.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,
|
|
4
|
+
positiveInteger}from"./chunk-MI6HVYR2.js";import{requireResolved,withResolved}from"./chunk-PS5QFKHB.js";import{isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-EDF4U5BT.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var LABEL="\u304A\u77E5\u3089\u305B";var LIST_COLUMNS=["id","publish_start_at","sender_name","category_name","title","is_read","require_confirmation","is_confirmed"];var UNCONFIRMED_COLUMNS=["id","publish_start_at","publish_end_at","importance","title"];var GET_COLUMNS=["id","title","sender_name","category_name","importance_name","publish_start_at","publish_end_at","is_organization","is_read","require_confirmation","is_confirmed","allow_replies","link_url"];var REPLY_COLUMNS=["id","created_at","\
|
|
5
5
|
user_name","is_mine","content"];var REPLY_MAX_CHARS=2e3;function noArgs(input,op){if(input.args.length>0){throw new UsageError(`${op} \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,`twp announcement ${op} help`)}}function checkId(raw,help){const id=raw.trim();if(id==="")throw new UsageError("\u304A\u77E5\u3089\u305B\u306E ID \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",help);if(!isSafePathSegment(id)){throw new UsageError(`\u304A\u77E5\u3089\u305B\u306E ID \u3068\u3057\u3066\u4F7F\u3048\u306A\u3044\
|
|
6
6
|
\u5024\u3067\u3059: ${id}`,"\u304A\u77E5\u3089\u305B\u306E ID \u306F twp announcement list \u306E id \u5217\u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002")}return id}function announcementId(input,op){const help=`twp announcement ${op} help`;const[raw,...rest]=input.args;if(rest.length>0)throw new UsageError(`${op} \u304C\u53D7\u3051\u53D6\u308C\u308B\u304A\u77E5\u3089\u305B ID \u306F1\u3064\u3060\u3051\u3067\u3059: ${rest.join(" ")}`,help);return checkId(raw??"",help)}function announcementIds(input){
|
|
7
7
|
const help="twp announcement read help";if(input.args.length===0)throw new UsageError("\u304A\u77E5\u3089\u305B\u306E ID \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",help);return[...new Set(input.args.map(raw=>checkId(raw,help)))]}function itemPath(id,suffix=""){return`${ANNOUNCEMENTS_PATH}/${encodeURIComponent(id)}${suffix}`}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`)}
|
|
@@ -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{exitCodeFor,fetchAllPages,reportError}from"./chunk-
|
|
4
|
-
import{parseOperationArgs,repeatedValues}from"./chunk-RX5HWI4L.js";import{readBody}from"./chunk-M763HXDH.js";import{ALLOW_REDACTED_FLAG,NO_REDACT_FLAG,NO_REDACT_NOTICE}from"./chunk-W4NLJ2YK.js";import"./chunk-
|
|
5
|
-
envelopePaging,isPageNumberEnvelope,pageRangeNotes,positiveInteger,readEnvelopeCursor,readPageNumberCursor,shellQuote}from"./chunk-MI6HVYR2.js";import"./chunk-
|
|
6
|
-
import{effectiveApiUrl,resolveConfiguredOutput,resolveProfile}from"./chunk-EDF4U5BT.js";import"./chunk-RZVI6PMW.js";import{HELP_TOKEN}from"./chunk-
|
|
3
|
+
import{CommandModelMissingError,MAX_REPORTED_VIOLATIONS,loadCommandModelDomain,loadCommandModelRoutes,validateBody,validateQuery}from"./chunk-NZ7WI4RZ.js";import{exitCodeFor,fetchAllPages,reportError}from"./chunk-VOSADZUE.js";import"./chunk-LGNYEROA.js";import"./chunk-Q3B65OFC.js";import{evaluateQuery}from"./chunk-GFLGXGWE.js";import{renderOutput}from"./chunk-SZOEBJGI.js";import{describeWaitResult,parseWaitOptions,waitUntilTerminal}from"./chunk-WVCEKC7V.js";
|
|
4
|
+
import{parseOperationArgs,repeatedValues}from"./chunk-RX5HWI4L.js";import{readBody}from"./chunk-M763HXDH.js";import{ALLOW_REDACTED_FLAG,NO_REDACT_FLAG,NO_REDACT_NOTICE}from"./chunk-W4NLJ2YK.js";import"./chunk-6DM366P6.js";import"./chunk-HVZUXLQ4.js";import{ApiError,TwpApiClient,appendQuery}from"./chunk-JA5A6UJ2.js";import"./chunk-MMVXE2CJ.js";import{redactSecretValues,redactSecrets,withDebug}from"./chunk-IXT2X5BZ.js";import"./chunk-II5RVJQN.js";
|
|
5
|
+
import{DEFAULT_MAX_ITEMS,DEFAULT_MAX_PAGES,envelopePaging,isPageNumberEnvelope,pageRangeNotes,positiveInteger,readEnvelopeCursor,readPageNumberCursor,shellQuote}from"./chunk-MI6HVYR2.js";import"./chunk-3ZRMMBP5.js";import{ApiResponseError,EXIT_OK,EXIT_WAIT_TIMEOUT,NetworkError,UsageError}from"./chunk-VFPY2A23.js";import{GLOBAL_OPTIONS_HELP}from"./chunk-PECIBNFD.js";import{AuthSession,NotLoggedInError,SessionExpiredError,loadCredentials}from"./chunk-XNLIEUAW.js";import{
|
|
6
|
+
httpFetch}from"./chunk-J7QYPKVK.js";import{effectiveApiUrl,resolveConfiguredOutput,resolveProfile}from"./chunk-EDF4U5BT.js";import"./chunk-RZVI6PMW.js";import{HELP_TOKEN}from"./chunk-JQQP7JLQ.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.
|
|
8
8
|
segments[i]!==null;if(aLiteral!==bLiteral)return aLiteral?-1:1}return 0}function lookupRoute(routes,method,path){const segments=splitSegments(path);const hits=parseRoutes(routes).filter(route=>matches(route,segments));const sameMethod=hits.filter(route=>route.method===method).sort(compareSpecificity);const best=sameMethod[0];if(best!==void 0)return{kind:"matched",domain:best.domain,template:best.template};if(hits.length>0){const[top]=[...hits].sort(compareSpecificity);const template=top.template;
|
|
9
9
|
const methods=[...new Set(hits.filter(route=>route.template===template).map(route=>route.method))].sort();return{kind:"method-mismatch",template,methods}}return{kind:"unknown"}}function pickOperation(operations,method,template){return operations.find(op=>op.method===method&&op.path===template)??null}async function suggestRoutes(routes,path,limit=5){const{default:fuzzysort}=await import("./fuzzysort-DFVKV4B4.js");const parsed=parseRoutes(routes);const templates=[...new Set(parsed.map(route=>route.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
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-4DUZIRGL.js";import"./chunk-NZ7WI4RZ.js";import{buildDiffLines,
|
|
4
|
-
diffStat}from"./chunk-VRBI2NPI.js";import{require_fuzzysort}from"./chunk-DIMZRTLE.js";import"./chunk-N2UVRM3Z.js";import"./chunk-
|
|
5
|
-
import"./chunk-D233KKXW.js";import"./chunk-PMOUHEJQ.js";import"./chunk-XNLIEUAW.js";import{proxyDiagnostics}from"./chunk-J7QYPKVK.js";import{checkMinSupportedVersion,isBelowMinSupported,minSupportedBlockMessage}from"./chunk-DXXFUNYN.js";import"./chunk-EDF4U5BT.js";import{configReadDirs,twpHomeDir}from"./chunk-RZVI6PMW.js";import{parseArgv}from"./chunk-
|
|
6
|
-
nextMode}from"./chunk-2LOT54OO.js";import"./chunk-
|
|
4
|
+
diffStat}from"./chunk-VRBI2NPI.js";import{require_fuzzysort}from"./chunk-DIMZRTLE.js";import"./chunk-N2UVRM3Z.js";import"./chunk-6DM366P6.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-MMVXE2CJ.js";import"./chunk-IXT2X5BZ.js";import"./chunk-II5RVJQN.js";import"./chunk-VFPY2A23.js";import{RelayError,builtinCatalog,classifyModelSwitch,createRuntime,loadCachedCatalog,modelLabel,pickModel,specFor,toModelInfos}from"./chunk-LLBLGHHZ.js";
|
|
5
|
+
import"./chunk-D233KKXW.js";import"./chunk-PMOUHEJQ.js";import"./chunk-XNLIEUAW.js";import{proxyDiagnostics}from"./chunk-J7QYPKVK.js";import{checkMinSupportedVersion,isBelowMinSupported,minSupportedBlockMessage}from"./chunk-DXXFUNYN.js";import"./chunk-EDF4U5BT.js";import{configReadDirs,twpHomeDir}from"./chunk-RZVI6PMW.js";import{parseArgv}from"./chunk-UVTOBRHP.js";import{applyPermissionMode,checkPermission,describePermissionMode,getMode,isModeId,modeSource,
|
|
6
|
+
nextMode}from"./chunk-2LOT54OO.js";import"./chunk-JQQP7JLQ.js";import"./chunk-EOXTDZTA.js";import"./chunk-QQRJLH6B.js";import{isFullWidth,isWide,stringWidth,stripAnsi}from"./chunk-UREA4ZIG.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import{__commonJS,__export,__require,__toESM}from"./chunk-VSJBJXZO.js";var require_react_production=__commonJS({"node_modules/react/cjs/react.production.js"(exports){"use strict";var REACT_ELEMENT_TYPE=Symbol.for("react.transitional.element");var REACT_PORTAL_TYPE=Symbol.for("react.portal");var REACT_FRAGMENT_TYPE=Symbol.for("react.fragment");var REACT_STRICT_MODE_TYPE=Symbol.for("react.strict_mode");var REACT_PROFILER_TYPE=Symbol.for("react.profiler");var REACT_CONSUMER_TYPE=Symbol.for("react.consumer");var REACT_CONTEXT_TYPE=Symbol.for("react.context");var REACT_FORWARD_REF_TYPE=Symbol.
|
|
7
7
|
for("react.forward_ref");var REACT_SUSPENSE_TYPE=Symbol.for("react.suspense");var REACT_MEMO_TYPE=Symbol.for("react.memo");var REACT_LAZY_TYPE=Symbol.for("react.lazy");var REACT_ACTIVITY_TYPE=Symbol.for("react.activity");var REACT_VIEW_TRANSITION_TYPE=Symbol.for("react.view_transition");var MAYBE_ITERATOR_SYMBOL=Symbol.iterator;function getIteratorFn(maybeIterable){if(null===maybeIterable||"object"!==typeof maybeIterable)return null;maybeIterable=MAYBE_ITERATOR_SYMBOL&&maybeIterable[MAYBE_ITERATOR_SYMBOL]||
|
|
8
8
|
maybeIterable["@@iterator"];return"function"===typeof maybeIterable?maybeIterable:null}var ReactNoopUpdateQueue={isMounted:function(){return false},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}};var assign=Object.assign;var emptyObject={};function Component(props,context,updater){this.props=props;this.context=context;this.refs=emptyObject;this.updater=updater||ReactNoopUpdateQueue}Component.prototype.isReactComponent={};Component.prototype.setState=
|
|
9
9
|
function(partialState,callback){if("object"!==typeof partialState&&"function"!==typeof partialState&&null!=partialState)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,partialState,callback,"setState")};Component.prototype.forceUpdate=function(callback){this.updater.enqueueForceUpdate(this,callback,"forceUpdate")};function ComponentDummy(){}ComponentDummy.prototype=Component.prototype;function PureComponent2(props,context,updater){
|
|
@@ -1212,7 +1212,7 @@ cwd()){const listed=await gitListFiles(cwd2);const raw=listed??await walkFiles(c
|
|
|
1212
1212
|
1;const after=/^[^\s]*/.exec(text.slice(cursor))?.[0]??"";return{query,start,end:cursor+after.length}}var TWP_SLASH_ROUTES={"/tasks":{domain:"task",operation:"list"},"/task":{domain:"task",operation:"get"},"/projects":{domain:"project",operation:"list"}};function isTwpSlashCommand(name){return Object.hasOwn(TWP_SLASH_ROUTES,name)}async function runTwpSlashCommand(name,args,deps){const route=TWP_SLASH_ROUTES[name];if(!Object.hasOwn(TWP_SLASH_ROUTES,name)||route===void 0){return{code:2,out:"",err:`\u4E0D\u660E\u306A\u30B3\u30DE\u30F3\u30C9: ${name}
|
|
1213
1213
|
`}}const parsed=parseArgv([route.domain,route.operation,...args]);if(parsed.command!=="domain"||parsed.domain!==route.domain){return{code:2,out:"",err:`${name}: \u3053\u306E\u5F15\u6570\u306F\u4F7F\u3048\u307E\u305B\u3093\uFF08${args.join(" ")}\uFF09
|
|
1214
1214
|
`}}if(parsed.unknown.length>0){return{code:2,out:"",err:`\u4E0D\u660E\u306A\u5F15\u6570: ${parsed.unknown.join(" ")}
|
|
1215
|
-
`}}let out="";let err="";const io={out:text=>void(out+=text),err:text=>void(err+=text),isTty:true};const globals={profile:parsed.profile??deps.profile,...parsed.output!==void 0?{output:parsed.output}:{},...parsed.query!==void 0?{query:parsed.query}:{},dryRun:parsed.dryRun,debug:parsed.debug,yes:parsed.yes,refresh:parsed.refresh};const{runDomain}=await import("./run-
|
|
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-AHNWMLZ4.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,7 +1,7 @@
|
|
|
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-
|
|
4
|
-
import"./chunk-IXT2X5BZ.js";import"./chunk-
|
|
3
|
+
import{PUNCH_TYPES,assertMonthOpen,attendanceDomain}from"./chunk-MQOHOOJP.js";import"./chunk-UVCJXHWN.js";import{dateFlag,monthFlag}from"./chunk-EXT4AIDF.js";import"./chunk-3UOVTIM6.js";import"./chunk-RX5HWI4L.js";import"./chunk-JJSBBWJ5.js";import"./chunk-M763HXDH.js";import"./chunk-W4NLJ2YK.js";import"./chunk-6DM366P6.js";import{isSafePathSegment}from"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-MMVXE2CJ.js";
|
|
4
|
+
import"./chunk-IXT2X5BZ.js";import"./chunk-II5RVJQN.js";import"./chunk-MI6HVYR2.js";import{requireResolved,withResolved}from"./chunk-PS5QFKHB.js";import{isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiRejectedError,ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-EDF4U5BT.js";import"./chunk-RZVI6PMW.js";import"./chunk-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\
|
|
7
7
|
ask_id","memo","is_manual","deleted_at"];var LABELS={clock_in:"\u51FA\u52E4",clock_out:"\u9000\u52E4",break_start:"\u4F11\u61A9\u958B\u59CB",break_end:"\u4F11\u61A9\u7D42\u4E86",switch:"\u5207\u66FF"};var TYPE_ORDER={break_start:1,break_end:2,switch:3,clock_out:4,clock_in:5};function zonedParts(epochMs,timeZone){const parts=new Intl.DateTimeFormat("en-US",{timeZone,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hourCycle:"h23"}).formatToParts(new Date(
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{hoursMinutes}from"./chunk-
|
|
4
|
-
import"./chunk-
|
|
3
|
+
import{hoursMinutes}from"./chunk-MQOHOOJP.js";import"./chunk-UVCJXHWN.js";import{monthFlag}from"./chunk-EXT4AIDF.js";import"./chunk-3UOVTIM6.js";import"./chunk-RX5HWI4L.js";import"./chunk-JJSBBWJ5.js";import"./chunk-M763HXDH.js";import"./chunk-W4NLJ2YK.js";import"./chunk-6DM366P6.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-MMVXE2CJ.js";import"./chunk-IXT2X5BZ.js";import"./chunk-II5RVJQN.js";
|
|
4
|
+
import"./chunk-MI6HVYR2.js";import"./chunk-PS5QFKHB.js";import{isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-EDF4U5BT.js";import"./chunk-RZVI6PMW.js";import"./chunk-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
|
|
7
7
|
--month \u304C\u7121\u3051\u308C\u3070\u4ECA\u6708\u3067\u3059\uFF08\u30C6\u30CA\u30F3\u30C8\u306E\u696D\u52D9\u65E5\u306E\u533A\u5207\u308A\u3067\u30B5\u30FC\u30D0\u304C\u6C7A\u3081\u307E\u3059\uFF09\u3002
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
|
+
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
+
import{dateFlag}from"./chunk-EXT4AIDF.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-MI6HVYR2.js";import{requireResolved,withResolved}from"./chunk-PS5QFKHB.js";import{isRecord}from"./chunk-3ZRMMBP5.js";import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import"./chunk-VSJBJXZO.js";import fs from"fs";var LABEL="\u76E3\u67FB\u30ED\u30B0";var PATH="/api/v2/admin/tenant/audit-logs";var FORBIDDEN=`\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u6A29\u9650\u304C\u5FC5\u8981\u3067\u3059\u3002${LABEL}\u306F\u7D44\u7E54\u7BA1\u7406\u8005\u3060\u3051\u304C\u898B\u3089\u308C\u307E\u3059`;var ACTIONS=["create","update","delete","comment_add","comment_update","comment_delete"];var MAX_LIMIT=100;var SERVER_SCAN_LIMIT=1e3;var MAX_STATS_DAYS=90;var COMMENT_AS_OPERATION=new Set(["project_member","project"]);var JST_OFFSET_MS=9*
|
|
4
|
+
60*60*1e3;var LIST_COLUMNS=["created_at","operation","created_by_name","entity_type","task_key","target"];function todayJst(now=new Date){return new Date(now.getTime()+JST_OFFSET_MS).toISOString().slice(0,10)}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 audit-log ${op} help`)}}function actionFilter(input){const raw=nonEmpty(input.flags,"--action");if(raw===void 0)return void 0;
|
|
5
|
+
const value=raw.trim().toLowerCase();if(!ACTIONS.includes(value)){throw new UsageError(`--action \u306B\u6307\u5B9A\u3067\u304D\u306A\u3044\u5024\u3067\u3059: ${raw}`,`${ACTIONS.join(" / ")} \u306E\u3069\u308C\u304B\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return value}function period(input,defaultTo){const from=dateFlag(input.flags,"--from");const to=dateFlag(input.flags,"--to")??(from===void 0?void 0:defaultTo);if(from!==void 0&&to!==void 0&&from>to){throw new UsageError(`\
|
|
6
|
+
--from\uFF08${from}\uFF09\u304C --to\uFF08${to}\uFF09\u3088\u308A\u5F8C\u3067\u3059`)}return{from,to}}var FILTER_FLAGS=[{name:"--from",summary:"\u3053\u306E\u65E5\u4EE5\u964D\uFF08YYYY-MM-DD\u30FB\u65E5\u672C\u6642\u9593\u306E\u305D\u306E\u65E5\u306E 0:00 \u304B\u3089\uFF09",takesValue:true,placeholder:"<\u65E5\u4ED8>"},{name:"--to",summary:"\u3053\u306E\u65E5\u4EE5\u524D\uFF08YYYY-MM-DD\u30FB\u65E5\u672C\u6642\u9593\u306E\u305D\u306E\u65E5\u306E\u7D42\u308F\u308A\u307E\u3067\uFF09",takesValue:true,
|
|
7
|
+
placeholder:"<\u65E5\u4ED8>"},{name:"--user",summary:"\u64CD\u4F5C\u3057\u305F\u4EBA\u3067\u7D5E\u308A\u8FBC\u3080",takesValue:true,placeholder:"<\u30E6\u30FC\u30B6\u30FC>"},{name:"--target-user",summary:"\u5909\u66F4\u306E\u5BFE\u8C61\u306B\u306A\u3063\u305F\u4EBA\u3067\u7D5E\u308A\u8FBC\u3080\uFF08\u30E1\u30F3\u30D0\u30FC\u30FBPM/PL \u7B49\u306E\u5909\u66F4\uFF09",takesValue:true,placeholder:"<\u30E6\u30FC\u30B6\u30FC>"},{name:"--project",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3067\u7D5E\u308A\u8FBC\u3080\uFF08\u30B3\u30FC\u30C9\u30FBID\u30FB\u540D\u524D\uFF09",
|
|
8
|
+
takesValue:true,placeholder:"<\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8>"},{name:"--action",summary:`\u64CD\u4F5C\u306E\u7A2E\u985E\u3067\u7D5E\u308A\u8FBC\u3080\uFF08${ACTIONS.join(" / ")}\uFF09`,takesValue:true,placeholder:"<\u64CD\u4F5C>"}];var FILTER_HELP=`\u7D5E\u308A\u8FBC\u307F:
|
|
9
|
+
--from / --to \u306F\u65E5\u4ED8\uFF08YYYY-MM-DD\uFF09\u3067\u3001\u65E5\u672C\u6642\u9593\u306E1\u65E5\u3068\u3057\u3066\u6271\u3044\u307E\u3059\u3002
|
|
10
|
+
--user \u306F\u64CD\u4F5C\u3057\u305F\u4EBA\u3001--target-user \u306F\u5909\u66F4\u306E\u5BFE\u8C61\u306B\u306A\u3063\u305F\u4EBA\uFF08\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30E1\u30F3\u30D0\u30FC\u30FBPM/PL \u7B49\u306E\u5909\u66F4\u3002
|
|
11
|
+
\u5BFE\u8C61\u30E6\u30FC\u30B6\u30FC\u304C\u8A18\u9332\u3055\u308C\u308B\u3088\u3046\u306B\u306A\u308B\u524D\u306E\u8A18\u9332\u306F\u30E1\u30F3\u30D0\u30FC\u306E\u8FFD\u52A0\u30FB\u524A\u9664\u3060\u3051\u304C\u5F53\u305F\u308A\u307E\u3059\uFF09\u3067\u3059\u3002
|
|
12
|
+
<\u30E6\u30FC\u30B6\u30FC> \u306F ID\u30FB\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u30FB\u793E\u54E1\u756A\u53F7\u30FB\u6C0F\u540D\u30FBme\uFF08\u81EA\u5206\uFF09\u3067\u6307\u5B9A\u3067\u304D\u307E\u3059\u3002
|
|
13
|
+
--project \u306F\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30B3\u30FC\u30C9\u30FBID\u30FB\u540D\u524D\uFF08\u5B8C\u5168\u4E00\u81F4\uFF09\u3067\u3059\uFF08\u30BF\u30B9\u30AF\u306E\u64CD\u4F5C\u30FB\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u672C\u4F53\u306E\u5909\u66F4\u30FB\u30E1\u30F3\u30D0\u30FC\u306E\u5909\u66F4\u304C\u5F53\u305F\u308A\u307E\u3059\uFF09\u3002
|
|
14
|
+
--action \u306F ${ACTIONS.join(" / ")} \u3067\u3059\u3002\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u672C\u4F53\u30FB\u30E1\u30F3\u30D0\u30FC\u306E\u5909\u66F4\u306F\u64CD\u4F5C\u306E\u7A2E\u985E\u3092\u6301\u305F\u306A\u3044\u306E\u3067\u3001
|
|
15
|
+
--action \u3092\u4ED8\u3051\u308B\u3068\u51FA\u306A\u304F\u306A\u308A\u307E\u3059\u3002`;async function prepareFilters(input,ctx,op,check){noArgs(input,op);check();const values={};const user=nonEmpty(input.flags,"--user");if(user!==void 0)values["userId"]=(await ctx.resolver.user(user,"--user")).id;const target=nonEmpty(input.flags,"--target-user");if(target!==void 0)values["targetUserId"]=(await ctx.resolver.user(target,"--target-user")).id;const project=nonEmpty(input.flags,"--project");if(project!==
|
|
16
|
+
void 0)values["projectId"]=(await ctx.resolver.projectByCodeOrName(project,"--project")).id;return Object.keys(values).length===0?input:withResolved(input,values)}var FILTER_KEYS=["--user","--target-user","--project","--action"];function hasFilter(input){return FILTER_KEYS.some(name=>input.flags.has(name))}function filterQuery(input,defaultTo){const{from,to}=period(input,defaultTo);return{from,to,user_id:input.flags.has("--user")?requireResolved(input,"userId"):void 0,target_user_id:input.flags.
|
|
17
|
+
has("--target-user")?requireResolved(input,"targetUserId"):void 0,project_id:input.flags.has("--project")?requireResolved(input,"projectId"):void 0,action:actionFilter(input)}}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}var listPaging=envelopePaging({label:`${LABEL}\
|
|
18
|
+
\u4E00\u89A7`,itemsKey:"items"});function listRows(body){envelope(body,`${LABEL}\u4E00\u89A7`);return listPaging.items(body)}function summarizeEntry(row){const source=isRecord(row)?row:{};const entityType=typeof source["entity_type"]==="string"?source["entity_type"]:null;const comment=typeof source["comment"]==="string"&&source["comment"]!==""?source["comment"]:null;const operation=entityType!==null&&COMMENT_AS_OPERATION.has(entityType)&&comment!==null?comment:source["action"]??null;const subject=source["\
|
|
19
|
+
task_subject"];return{created_at:source["created_at"]??null,operation,created_by_name:source["created_by_name"]??source["created_by"]??null,entity_type:entityType??"task",task_key:source["task_key"]??null,target:typeof subject==="string"&&subject!==""?subject:source["entity_title"]??null}}function statsRow(body){const row=envelope(body,`${LABEL}\u306E\u96C6\u8A08`);if(typeof row["total_actions"]!=="number"){throw new ApiResponseError(`${LABEL}\u306E\u96C6\u8A08\u306E\u5FDC\u7B54\u306B total_actions \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}
|
|
20
|
+
return Object.fromEntries(Object.entries(row).filter(([key])=>key!=="result"))}function countCsvRecords(text){let lines=0;let inQuote=false;let pending=false;for(const ch of text.startsWith("\uFEFF")?text.slice(1):text){if(ch==='"')inQuote=!inQuote;if(ch==="\n"&&!inQuote){lines+=1;pending=false}else if(ch!=="\r"){pending=true}}if(pending)lines+=1;return Math.max(0,lines-1)}function checkList(input){period(input);actionFilter(input);const limit=positiveInteger(input.flags,"--limit");if(limit!==void 0&&
|
|
21
|
+
limit>MAX_LIMIT){throw new UsageError(`--limit \u306F ${MAX_LIMIT} \u307E\u3067\u3067\u3059\uFF08\u53D7\u3051\u53D6\u3063\u305F\u5024: ${limit}\uFF09`,"\u30B5\u30FC\u30D0\u304C1\u56DE\u306B\u8FD4\u305B\u308B\u4E0A\u9650\u3067\u3059\u3002\u7D9A\u304D\u306F --all \u3067\u8FBF\u3063\u3066\u304F\u3060\u3055\u3044\u3002")}return limit}function checkExport(input){if(!input.flags.has("--from")){throw new UsageError("export \u306B\u306F --from \u304C\u5FC5\u8981\u3067\u3059","\u4F8B: twp audit-log export --o\
|
|
22
|
+
ut audit.csv --from 2026-10-01")}period(input,todayJst());actionFilter(input)}var FILTER_USAGE="[--from <\u65E5\u4ED8>] [--to <\u65E5\u4ED8>] [--user <\u30E6\u30FC\u30B6\u30FC>] [--target-user <\u30E6\u30FC\u30B6\u30FC>] [--project <\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8>] [--action <\u64CD\u4F5C>]";var listOperation={name:"list",summary:`${LABEL}\u3092\u4E00\u89A7\u3059\u308B\uFF08\u671F\u9593\u30FB\u64CD\u4F5C\u8005\u30FB\u5BFE\u8C61\u30E6\u30FC\u30B6\u30FC\u30FB\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30FB\u64CD\u4F5C\u3067\u7D5E\u308A\u8FBC\u3081\u308B\u30FB\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u307F\uFF09`,
|
|
23
|
+
usage:`twp audit-log list ${FILTER_USAGE} [--all] [--limit <\u4EF6\u6570>]`,description:`\u65B0\u3057\u3044\u9806\u306B\u51FA\u3057\u307E\u3059\u3002\u8AB0\u304C\u3044\u3064\u4F55\u3092\u5909\u3048\u305F\u304B\uFF08\u30BF\u30B9\u30AF\u30FB\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u672C\u4F53\u30FB\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30E1\u30F3\u30D0\u30FC\u306E\u5909\u66F4\uFF09\u3092\u8FFD\u3046\u306E\u306B\u4F7F\u3044\u307E\u3059\u3002
|
|
24
|
+
|
|
25
|
+
--output table / text / tsv \u306F\u8981\u7D04\u5217\uFF08${LIST_COLUMNS.join(" / ")}\uFF09\u3067\u3059\u3002
|
|
26
|
+
operation \u306F\u64CD\u4F5C\u306E\u7A2E\u985E\uFF08\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u672C\u4F53\u30FB\u30E1\u30F3\u30D0\u30FC\u306E\u8A18\u9332\u306F\u300C\u30E1\u30F3\u30D0\u30FC\u8FFD\u52A0\u300D\u7B49\u306E\u5185\u5BB9\uFF09\u3001target \u306F\u30BF\u30B9\u30AF\u4EF6\u540D\u304B\u5BFE\u8C61\u540D\u3067\u3059\u3002
|
|
27
|
+
\u5909\u66F4\u524D\u5F8C\u306E\u5024\uFF08changes\uFF09\u3068\u30B3\u30E1\u30F3\u30C8\u672C\u6587\uFF08comment\uFF09\u306F\u500B\u4EBA\u60C5\u5831\u3092\u542B\u307F\u3046\u308B\u306E\u3067\u8981\u7D04\u5217\u306B\u51FA\u3057\u307E\u305B\u3093\u3002
|
|
28
|
+
--output json\uFF08API \u304C\u8FD4\u3059\u5168\u9805\u76EE\uFF09\u304B twp audit-log export\uFF08CSV\uFF09\u3067\u898B\u3066\u304F\u3060\u3055\u3044\u3002
|
|
29
|
+
|
|
30
|
+
`+FILTER_HELP+`
|
|
31
|
+
|
|
32
|
+
\u7D5E\u308A\u8FBC\u307F\u306F\u30B5\u30FC\u30D0\u304C\u8AAD\u3093\u3060\u5F8C\u306B\u639B\u304B\u308B\u306E\u3067\u3001--limit\uFF08\u65E2\u5B9A 50\u30FB\u6700\u5927 ${MAX_LIMIT}\uFF09\u306B\u6E80\u305F\u306A\u3044\u30DA\u30FC\u30B8\u306B
|
|
33
|
+
\u300C\u7D9A\u304D\u304C\u3042\u308A\u307E\u3059\u300D\u304C\u4ED8\u304F\u3053\u3068\u304C\u3042\u308A\u307E\u3059\u3002\u7D5E\u308A\u8FBC\u3093\u3067\u63A2\u3059\u3068\u304D\u306F --all \u3092\u4ED8\u3051\u3066\u304F\u3060\u3055\u3044\u3002
|
|
34
|
+
|
|
35
|
+
`+LIST_PAGING_HELP,flags:[...LIST_FLAGS,...FILTER_FLAGS],paging:listPaging,forbidden:FORBIDDEN,prepare:(input,ctx)=>prepareFilters(input,ctx,"list",()=>checkList(input)),plan(input){noArgs(input,"list");const limit=checkList(input);return{method:"GET",path:PATH,query:{...filterQuery(input),limit,cursor:nonEmpty(input.flags,"--cursor")}}},summarize:body=>listRows(body).map(summarizeEntry),raw:body=>listRows(body)};var statsOperation={name:"stats",summary:`\u76F4\u8FD1\u306E${LABEL}\u3092\u96C6\u8A08\u3059\u308B\uFF08\u64CD\u4F5C\u306E\u7A2E\u985E\u3054\u3068\u306E\u4EF6\
|
|
36
|
+
\u6570\u30FB\u64CD\u4F5C\u3057\u305F\u4EBA\u6570\u30FB\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u307F\uFF09`,usage:"twp audit-log stats [--days <\u65E5\u6570>]",description:`\u76F4\u8FD1 --days \u65E5\uFF08\u65E2\u5B9A 7\u30FB\u6700\u5927 ${MAX_STATS_DAYS}\uFF09\u306E\u64CD\u4F5C\u3092\u3001\u7A2E\u985E\u3054\u3068\u306B\u6570\u3048\u307E\u3059\uFF08\u671F\u9593\u306F\u30B5\u30FC\u30D0\u304C\u4ECA\u306E\u6642\u523B\u304B\u3089\u9061\u3063\u3066\u6C7A\u3081\u307E\u3059\uFF09\u3002
|
|
37
|
+
\u26A0 \u30B5\u30FC\u30D0\u306F\u65B0\u3057\u3044\u9806\u306B ${SERVER_SCAN_LIMIT.toLocaleString("en-US")} \u4EF6\u307E\u3067\u3057\u304B\u6570\u3048\u307E\u305B\u3093\u3002total_actions \u304C ${SERVER_SCAN_LIMIT.toLocaleString("en-US")} \u306B\u5C4A\u3044\u305F\u3089
|
|
38
|
+
\u5B9F\u969B\u3088\u308A\u5C11\u306A\u304F\u51FA\u3066\u3044\u308B\u306E\u3067\u3001twp audit-log list --from <\u65E5\u4ED8> --all \u3067\u6570\u3048\u76F4\u3057\u3066\u304F\u3060\u3055\u3044\uFF08stderr \u3067\u3082\u8A00\u3044\u307E\u3059\uFF09\u3002
|
|
39
|
+
\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u672C\u4F53\u30FB\u30E1\u30F3\u30D0\u30FC\u306E\u5909\u66F4\u306F\u7A2E\u985E\u3054\u3068\u306E\u4EF6\u6570\u306B\u5165\u3089\u305A\u3001total_actions \u306B\u3060\u3051\u5165\u308A\u307E\u3059\u3002`,flags:[{name:"--days",summary:`\u96C6\u8A08\u3059\u308B\u65E5\u6570\uFF081\u301C${MAX_STATS_DAYS}\u30FB\u65E2\u5B9A 7\uFF09`,takesValue:true,placeholder:"<\u65E5\u6570>"}],forbidden:FORBIDDEN,plan(input){noArgs(input,"stats");const days=positiveInteger(input.flags,
|
|
40
|
+
"--days");if(days!==void 0&&days>MAX_STATS_DAYS){throw new UsageError(`--days \u306F ${MAX_STATS_DAYS} \u307E\u3067\u3067\u3059\uFF08\u53D7\u3051\u53D6\u3063\u305F\u5024: ${days}\uFF09`)}return{method:"GET",path:`${PATH}/stats`,query:{days}}},summarize:statsRow,raw:statsRow,notes(body){const total=isRecord(body)?body["total_actions"]:void 0;return typeof total==="number"&&total>=SERVER_SCAN_LIMIT?[`\u30B5\u30FC\u30D0\u306F\u65B0\u3057\u3044\u9806\u306B ${SERVER_SCAN_LIMIT} \u4EF6\u307E\u3067\u3057\u304B\u6570\u3048\u306A\u3044\u305F\u3081\u3001\u3053\u306E\u96C6\u8A08\u306F\u5B9F\u969B\u3088\u308A\u5C11\
|
|
41
|
+
\u306A\u3044\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002\u6B63\u78BA\u306A\u4EF6\u6570\u306F twp audit-log list --from <\u65E5\u4ED8> --all \u3067\u6570\u3048\u76F4\u3057\u3066\u304F\u3060\u3055\u3044\u3002`]:[]}};var exportOperation={name:"export",summary:`${LABEL}\u3092 CSV \u306B\u66F8\u304D\u51FA\u3059\uFF08--out\u30FB\u753B\u9762\u306E\u300CCSV\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8\u300D\u3068\u540C\u3058\u5185\u5BB9\u30FB\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u307F\uFF09`,usage:`twp \
|
|
42
|
+
audit-log export --out <\u30D1\u30B9.csv> [--force] --from <\u65E5\u4ED8> ${FILTER_USAGE.replace("[--from <\u65E5\u4ED8>] ","")}`,description:`\u753B\u9762\u306E\u300CCSV\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8\u300D\u3068\u540C\u3058 CSV\uFF08UTF-8\u30FBBOM \u4ED8\u304D\u30FB\u5217\u306F \u65E5\u6642 / \u64CD\u4F5C\u8005 / \u64CD\u4F5C\u7A2E\u5225 / \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8ID / \u30BF\u30B9\u30AF\u30AD\u30FC /
|
|
43
|
+
\u30BF\u30B9\u30AF\u4EF6\u540D / \u5909\u66F4\u5185\u5BB9 / \u30B3\u30E1\u30F3\u30C8\uFF09\u3092\u30B5\u30FC\u30D0\u304B\u3089\u53D7\u3051\u53D6\u3063\u3066\u66F8\u304D\u51FA\u3057\u307E\u3059\u3002\u5909\u66F4\u524D\u5F8C\u306E\u5024\u3068\u30B3\u30E1\u30F3\u30C8\u672C\u6587\u3092\u542B\u3080\u306E\u3067\u6271\u3044\u306B\u6CE8\u610F\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
44
|
+
--from \u306F\u5FC5\u9808\u3067\u3059\u3002--to \u3092\u7701\u304F\u3068\u65E5\u672C\u6642\u9593\u306E\u4ECA\u65E5\u307E\u3067\u3067\u3059\u3002\u65E2\u5B58\u306E\u30D5\u30A1\u30A4\u30EB\u306F\u4E0A\u66F8\u304D\u3057\u307E\u305B\u3093\uFF08\u4E0A\u66F8\u304D\u3059\u308B\u306A\u3089 --force\uFF09\u3002
|
|
45
|
+
\u26A0 \u30B5\u30FC\u30D0\u306F1\u56DE\u306B ${SERVER_SCAN_LIMIT.toLocaleString("en-US")} \u884C\u307E\u3067\u3057\u304B\u51FA\u3057\u307E\u305B\u3093\u3002\u5C4A\u3044\u305F\u3089\u53E4\u3044\u5206\u304C\u51FA\u3066\u3044\u306A\u3044\u53EF\u80FD\u6027\u304C\u3042\u308B\u306E\u3067\uFF08stderr \u3067\u3082\u8A00\u3044\u307E\u3059\uFF09\u3001
|
|
46
|
+
\u671F\u9593\u3092\u5206\u3051\u3066\u66F8\u304D\u51FA\u3059\u304B\u3001twp audit-log list --all --output json \u3067\u5168\u4EF6\u3092\u53D6\u3063\u3066\u304F\u3060\u3055\u3044\u3002
|
|
47
|
+
\u7D5E\u308A\u8FBC\u307F\u3092\u4ED8\u3051\u305F\u3068\u304D\u306F\u3001\u8A72\u5F53\u304C\u758E\u3060\u3068\u4E0A\u9650\u3088\u308A\u5C11\u306A\u304F\u3066\u3082\u5207\u308C\u3066\u3044\u308B\u3053\u3068\u304C\u3042\u308A\u307E\u3059\uFF08\u30B5\u30FC\u30D0\u306E\u8AAD\u307F\u8DB3\u3057\u306F5\u56DE\u307E\u3067\u3002stderr \u3067\u3082\u8A00\u3044\u307E\u3059\uFF09\u3002
|
|
48
|
+
|
|
49
|
+
`+FILTER_HELP,flags:[{name:"--out",summary:"\u66F8\u304D\u51FA\u3057\u5148\u306E\u30D5\u30A1\u30A4\u30EB\u30D1\u30B9\uFF08\u5FC5\u9808\uFF09",takesValue:true,placeholder:"<\u30D1\u30B9>"},{name:"--force",summary:"\u65E2\u5B58\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u4E0A\u66F8\u304D\u3059\u308B",takesValue:false},...FILTER_FLAGS],download:{outFlag:"--out",forceFlag:"--force"},forbidden:FORBIDDEN,prepare:(input,ctx)=>prepareFilters(input,ctx,"export",()=>checkExport(input)),plan(input){noArgs(input,"\
|
|
50
|
+
export");checkExport(input);return{method:"GET",path:`${PATH}/export`,query:filterQuery(input,todayJst())}},summarize:body=>body,raw:body=>body,notes(body,input){const file=isRecord(body)?body["path"]:void 0;if(typeof file!=="string")return[];let rows;try{rows=countCsvRecords(fs.readFileSync(file,"utf8"))}catch{return[]}if(rows>=SERVER_SCAN_LIMIT){return[`${rows} \u884C\u3067\u30B5\u30FC\u30D0\u306E\u4E0A\u9650\uFF08${SERVER_SCAN_LIMIT} \u884C\uFF09\u306B\u5C4A\u304D\u307E\u3057\u305F\u3002\u65B0\u3057\u3044\u9806\u306B\u5207\u3089\u308C\u3001\u671F\u9593\u306E\u53E4\u3044\u5074\u304C\u51FA\u3066\u3044\u306A\u3044\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002--from / --to \u3067\u671F\u9593\u3092\u5206\u3051\
|
|
51
|
+
\u3066\u66F8\u304D\u51FA\u3059\u304B\u30011\u65E5\u3067\u3082\u4E0A\u9650\u306B\u5C4A\u304F\u306A\u3089 twp audit-log list --from <\u65E5\u4ED8> --to <\u65E5\u4ED8> --all --output json \u3067\u5168\u4EF6\u3092\u53D6\u3063\u3066\u304F\u3060\u3055\u3044\u3002`]}const notes=[`${rows} \u884C\u3092\u66F8\u304D\u51FA\u3057\u307E\u3057\u305F\u3002`];if(hasFilter(input)){notes.push(`\u7D5E\u308A\u8FBC\u307F\uFF08--user / --target-user / --project / --action\uFF09\u306F\u30B5\u30FC\u30D0\u304C\u8AAD\u3093\u3060\u5F8C\u306B\u639B\u304B\u308A\u3001\u8AAD\u307F\u8DB3\u3057\u306F5\u56DE\u307E\u3067\u3067\u3059\u3002\u8A72\u5F53\u304C\u758E\u3060\u3068 ${SERVER_SCAN_LIMIT}\
|
|
52
|
+
\u884C\u306B\u5C4A\u304B\u306A\u304F\u3066\u3082\u53E4\u3044\u5074\u304C\u6B20\u3051\u308B\u3053\u3068\u304C\u3042\u308A\u307E\u3059\u3002\u5168\u4EF6\u304B\u78BA\u304B\u3081\u308B\u306B\u306F\u3001\u540C\u3058\u6761\u4EF6\u306E twp audit-log list --all --output json \u3068\u4EF6\u6570\u3092\u7A81\u304D\u5408\u308F\u305B\u3066\u304F\u3060\u3055\u3044\u3002`)}return notes}};var auditLogDomain={name:"audit-log",summary:"\u30C6\u30CA\u30F3\u30C8\u306E\u76E3\u67FB\u30ED\u30B0\uFF08\u4E00\u89A7\u30FB\u96C6\u8A08\u30FBCSV \u51FA\u529B\u30FB\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u307F\uFF09",
|
|
53
|
+
operations:[listOperation,statsOperation,exportOperation]};export{ACTIONS,SERVER_SCAN_LIMIT,auditLogDomain,countCsvRecords,summarizeEntry,todayJst};
|
|
@@ -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-M763HXDH.js";import"./chunk-W4NLJ2YK.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-M763HXDH.js";import"./chunk-W4NLJ2YK.js";import{BACKLOG_BASE_PATH,BACKLOG_PROJECT_SCOPE_LABEL,BACKLOG_SCOPE_LABEL,backlogSpacePath,isExactNumericId,resolveNamed}from"./chunk-6DM366P6.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-MMVXE2CJ.js";import"./chunk-IXT2X5BZ.js";import"./chunk-II5RVJQN.js";import{LIST_FLAGS}from"./chunk-MI6HVYR2.js";
|
|
4
4
|
import{requireResolved,singleRef,withResolved}from"./chunk-PS5QFKHB.js";import{isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-EDF4U5BT.js";import"./chunk-RZVI6PMW.js";import"./chunk-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-
|
|
4
|
-
import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-MMVXE2CJ.js";import"./chunk-IXT2X5BZ.js";import"./chunk-
|
|
3
|
+
import{breakdownRows,budgetDomain,dashboardRows,fiscalYear,importRejection,overwriteLines,parseAllocationRows,parseSplit,parseTargetRows,periodsLabel}from"./chunk-7UAJ3ZY7.js";import"./chunk-NB2GXB27.js";import"./chunk-MQOHOOJP.js";import"./chunk-UVCJXHWN.js";import"./chunk-EXT4AIDF.js";import"./chunk-3UOVTIM6.js";import"./chunk-RX5HWI4L.js";import"./chunk-JJSBBWJ5.js";import"./chunk-M763HXDH.js";import"./chunk-W4NLJ2YK.js";import"./chunk-6DM366P6.js";
|
|
4
|
+
import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-MMVXE2CJ.js";import"./chunk-IXT2X5BZ.js";import"./chunk-II5RVJQN.js";import"./chunk-MI6HVYR2.js";import"./chunk-PS5QFKHB.js";import"./chunk-3ZRMMBP5.js";import"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-EDF4U5BT.js";import"./chunk-RZVI6PMW.js";import"./chunk-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{parseCsvRecords}from"./chunk-
|
|
3
|
+
import{parseCsvRecords}from"./chunk-ZFSQJAYZ.js";import{readCsvFileText}from"./chunk-QLENN5DD.js";import{cacheNote,createFlags,fieldBody,hasAnyField,idSegment,masterItem,masterRows,targetId,updateFlags}from"./chunk-3UOVTIM6.js";import{repeatedValues}from"./chunk-RX5HWI4L.js";import{charCount,readBody}from"./chunk-M763HXDH.js";import{QUALIFICATIONS_PATH,SKILLS_PATH,SKILL_CATEGORIES_PATH,resolveNamed}from"./chunk-6DM366P6.js";import{ULID_RE,isSafePathSegment}from"./chunk-HVZUXLQ4.js";
|
|
4
4
|
import{ApiError,MultipartBody}from"./chunk-JA5A6UJ2.js";import{nonEmpty}from"./chunk-MI6HVYR2.js";import{requireResolved,withResolved}from"./chunk-PS5QFKHB.js";import{acknowledgement,isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiRejectedError,ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import fs from"fs";import path from"path";var GROUPED_PATH="/api/v2/organization/skills/grouped";var SKILL_MAP_PATH="/api/v2/organization/skill-map";var USERS_LIST_PATH="/api/v2/admin/users/list";var USERS_PAGE_LIMIT=100;var USERS_MAX_PAGES=50;var HR_FORBIDDEN="HR\u7BA1\u7406\u8005\u306E\u6A29\u9650\u304C\u5FC5\u8981\u3067\u3059\u3002\u30B9\u30AD\u30EB\u30DE\u30C3\u30D7\uFF08twp skill map / who\uFF09\u306F\u4EBA\u4E8B\u7BA1\u7406\u306E\u7BA1\u7406\u8005\u3060\u3051\u304C\u53C2\u7167\u3067\u304D\u307E\u3059";function groupedSkillRows(body){
|
|
5
5
|
const categories=isRecord(body)?body["categories"]:void 0;if(!Array.isArray(categories)){throw new ApiResponseError("\u30B9\u30AD\u30EB\u4E00\u89A7\u306E\u5FDC\u7B54\u306B categories \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return categories.flatMap(group=>{const category=isRecord(group)&&isRecord(group["category"])?group["category"]:{};const skills=isRecord(group)&&Array.isArray(group["skills"])?group["\
|
|
6
6
|
skills"]:[];return skills.filter(isRecord).map(skill=>({...skill,category_id:skill["category_id"]??category["id"]??null,category_name:category["name"]??null}))})}function groupedCategories(body){groupedSkillRows(body);return body["categories"]}function skillMatrix(body){const matrix=isRecord(body)?body["matrix"]:void 0;if(!Array.isArray(matrix)){throw new ApiResponseError("\u30B9\u30AD\u30EB\u30DE\u30C3\u30D7\u306E\u5FDC\u7B54\u306B matrix \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{booleanText,boundedText,isoDate}from"./chunk-JJSBBWJ5.js";import{ORG_MASTER_LIMIT}from"./chunk-
|
|
3
|
+
import{booleanText,boundedText,isoDate}from"./chunk-JJSBBWJ5.js";import{ORG_MASTER_LIMIT}from"./chunk-6DM366P6.js";import{ULID_RE,UUID_RE,isSafePathSegment}from"./chunk-HVZUXLQ4.js";import{nonEmpty,positiveInteger}from"./chunk-MI6HVYR2.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.
|