@tocca-systems/twp-cli 0.43.0 → 0.44.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 +6 -0
- package/README.md +50 -1
- package/dist/{ai-dispatch-MXTI2KZ2.js → ai-dispatch-FEDOAV2E.js} +1 -1
- package/dist/analysis-KUCETWIJ.js +3 -0
- package/dist/{api-command-DND4342Q.js → api-command-OIXWF72C.js} +3 -3
- package/dist/{app-2DWKZ2VE.js → app-6VL7WWT3.js} +4 -4
- package/dist/{backlog-SDWC7OY5.js → backlog-R3M54DPM.js} +1 -1
- package/dist/{chunk-XSSKEJGO.js → chunk-2ZTJP74M.js} +1 -1
- package/dist/chunk-34X4JXND.js +4 -0
- package/dist/{chunk-PORE2NZO.js → chunk-3UW33UZI.js} +1 -1
- package/dist/{chunk-YQ4DGLD3.js → chunk-4MTEXWYQ.js} +18 -17
- package/dist/{chunk-L35F47BO.js → chunk-AJIHNSXI.js} +1 -1
- package/dist/chunk-E7MUDY4P.js +82 -0
- package/dist/{chunk-CZMJXLDZ.js → chunk-ERQT4AMC.js} +1 -1
- package/dist/{chunk-AHLI7BUX.js → chunk-EZ3RJBN6.js} +1 -1
- package/dist/{chunk-3ZOHVESS.js → chunk-FCISZHMZ.js} +1 -1
- package/dist/{chunk-67UNSXM7.js → chunk-FUH3J5VB.js} +2 -2
- package/dist/chunk-G2TBGGER.js +81 -0
- package/dist/{chunk-XYIM36Q4.js → chunk-JC5HZGPD.js} +1 -1
- package/dist/{chunk-PGJ42IUR.js → chunk-NIZXUROF.js} +1 -1
- package/dist/{chunk-HBSD3UC6.js → chunk-OKIENL5P.js} +2 -2
- package/dist/{chunk-RKYNTQAI.js → chunk-R4MOGEGN.js} +1 -1
- package/dist/{chunk-NKIBB72I.js → chunk-R5KWKK5Z.js} +1 -1
- package/dist/{chunk-HBYFCYWA.js → chunk-SSYA2LNP.js} +2 -2
- package/dist/{chunk-XPYNN63B.js → chunk-UTIZTCAP.js} +1 -1
- package/dist/chunk-YPNMQCVG.js +9 -0
- package/dist/cli.js +49 -8
- package/dist/{commands-BDYQKXPD.js → commands-DUFVGY5V.js} +2 -2
- package/dist/{company-7TFFYG4A.js → company-46SIKR43.js} +3 -3
- package/dist/{completion-H65LUFVF.js → completion-4EIFB6JN.js} +1 -1
- package/dist/{contract-SIFZY6D4.js → contract-NDED7WTP.js} +1 -1
- package/dist/{department-NSK6YY6X.js → department-GLIMOUQM.js} +1 -1
- package/dist/{deposit-FUM7OA6F.js → deposit-U6O52S6F.js} +1 -1
- package/dist/{estimate-RL3N3JAE.js → estimate-DALQK4M5.js} +3 -3
- package/dist/{inquiry-K7RSYLFW.js → inquiry-QFW33SDT.js} +1 -1
- package/dist/{invoice-E7XIBLRA.js → invoice-OO6EPZAZ.js} +2 -2
- package/dist/{job-title-OF3ABHUQ.js → job-title-WA6FRUL6.js} +1 -1
- package/dist/{knowledge-ZQYVNFNI.js → knowledge-3IT2MBRG.js} +1 -1
- package/dist/{leave-MAFA6EQO.js → leave-YYKSAXHD.js} +1 -1
- package/dist/{media-LL4AVP5H.js → media-JMVFUWIM.js} +1 -1
- package/dist/{notification-KBL7QJE3.js → notification-5KPTSLO6.js} +1 -1
- package/dist/{oneshot-EUW726TV.js → oneshot-GXXMSQ4Y.js} +1 -1
- package/dist/{position-MZADW4R4.js → position-PCVPUJZQ.js} +1 -1
- package/dist/project-3WW2PW3O.js +4 -0
- package/dist/{prospect-L43GCNWK.js → prospect-6RF45LPK.js} +2 -2
- package/dist/{purchase-643XP2UX.js → purchase-TTKRSNCF.js} +4 -4
- package/dist/{receivable-O7H2LJ4K.js → receivable-H6GMZ6JQ.js} +1 -1
- package/dist/{registry-PGMXXWHA.js → registry-7OIXAAIO.js} +1 -1
- package/dist/{report-YTPDB4Y7.js → report-OEETO2S5.js} +1 -1
- package/dist/{run-SRTDTEKL.js → run-KVDDYJ6W.js} +2 -2
- package/dist/{sales-ai-review-J5ICW6RB.js → sales-ai-review-MXMECYDW.js} +1 -1
- package/dist/{sales-master-MCS3UL4M.js → sales-master-PFGXXJFP.js} +2 -2
- package/dist/{sales-numbering-2DVWFJFG.js → sales-numbering-KR2L3FQA.js} +1 -1
- package/dist/{supplier-payment-QF2YMAVT.js → supplier-payment-FRHPIV4D.js} +2 -2
- package/dist/{task-GSZZ7HT2.js → task-XTTCYGDC.js} +19 -14
- package/dist/{user-IF6PAMW7.js → user-3J4CZ4LO.js} +7 -5
- package/dist/{workflow-BHOWO32V.js → workflow-3M2KCVYI.js} +1 -1
- package/package.json +1 -1
- package/dist/chunk-TDU6U5PY.js +0 -8
- package/dist/chunk-YO2RNKCQ.js +0 -4
- package/dist/project-ZVRVNXWI.js +0 -13
package/CHANGELOG.public.md
CHANGED
|
@@ -11,6 +11,12 @@
|
|
|
11
11
|
`CHANGELOG.md` に残してあります。顧客向けの履歴は public 公開以降を対象とします。
|
|
12
12
|
-->
|
|
13
13
|
|
|
14
|
+
## 0.44.0
|
|
15
|
+
|
|
16
|
+
プロジェクトメンバーの追加・役割と稼働期間の変更・削除を `twp project member` で行えるようになりました。自分(`twp project mine`)や指定したユーザー(`twp user projects`)が参画しているプロジェクトも一覧できます。
|
|
17
|
+
|
|
18
|
+
稼働分析・プロジェクトアサイン・人材別アサイン・キャパシティ・負荷状況・プロジェクト健全性を `twp analysis` で確認できるようになりました。プロジェクトやタスクの工数(`twp project manhours` / `twp task manhours`)と、メンバーごとのタスク件数(`twp project workload`)も表示できます。
|
|
19
|
+
|
|
14
20
|
## 0.43.0
|
|
15
21
|
|
|
16
22
|
Microsoft 365 の Outlook(メール・添付ファイル・予定)、Teams(チーム・チャネル・チャット・メッセージ・メンション)、OneDrive(ファイル)を CLI から読めるようになりました。TWP に Microsoft アカウントでログインしたことがあるユーザーが対象です。
|
package/README.md
CHANGED
|
@@ -28,6 +28,7 @@ TWP(Tocca Working Platform)を、ターミナルから使うための CLI
|
|
|
28
28
|
| **できる** | `twp media` によるメディアライブラリのファイルのアップロード・一覧・ダウンロード・削除(ゴミ箱へ移す)・一括操作(公開・非公開・アーカイブ・移動・削除・復元・ZIP ダウンロード)、`twp storage get` によるストレージ使用量の確認(管理者) |
|
|
29
29
|
| **できる** | `twp attendance` による自分の勤怠の参照(いまの打刻状態・打刻の履歴・月の勤怠表)と打刻、管理者向けの残業サマリ(36協定を含む)・締め状況の参照 |
|
|
30
30
|
| **できる** | `twp leave` による有給の残日数・取得履歴・付与履歴の参照と有給の申請(`twp leave request`)、`twp workchange list` / `twp shift list` による月の勤務変更・シフトの参照(`--me` で自分の分・無ければ全員分=勤怠の管理者) |
|
|
31
|
+
| **できる** | `twp analysis` による分析の読み取り(稼働分析・プロジェクトアサイン・人材別アサインを月ごとの列で、今週のキャパシティと過負荷アラート・再分配候補・標準勤務時間の設定、負荷のリスク判定、プロジェクト健全性スコアの一覧・推移と AI の所見)、`twp project manhours` / `twp task manhours` による工数の集計、`twp project workload` によるメンバーごとのタスク件数。分析の権限と、ページごとの閲覧対象への登録が要ります |
|
|
31
32
|
| **できる** | `twp workflow` による、自分が申請できる申請書・申請書の定義(管理者)・自分の申請・承認履歴・自分の承認待ちの参照(申請書は名前でも指定できます)と、申請の起票・提出・更新・削除、承認・却下・差し戻し・取下げ |
|
|
32
33
|
| **できる** | `twp report` による自分のレポート(日報)の一覧(フォーマット・状態・語で絞り込み)・詳細と、下書きの作成(フォーマットの入力項目から雛形を出せます)・更新・提出、使えるレポートフォーマットの一覧 |
|
|
33
34
|
| **できる** | `twp wiki` / `twp note` / `twp meeting` による、wiki ページ(親ページ直下の子の一覧を含む)・ノート・議事録(開催日の期間で絞り込み)の一覧と、本文を `--output text` で文書として読むこと |
|
|
@@ -80,7 +81,7 @@ twp --version / --help
|
|
|
80
81
|
AI を介さずに TWP を直接読み書きします。スクリプトからも使えます。
|
|
81
82
|
|
|
82
83
|
```
|
|
83
|
-
twp project list | get <コード|ID> | members <コード|ID>
|
|
84
|
+
twp project list | get <コード|ID> | members <コード|ID> | mine
|
|
84
85
|
|
|
85
86
|
twp task list [--project <コード|__private__>] [--status <名前>] [--type <名前>] [--assignee <me|名前>]
|
|
86
87
|
twp task get <キー|ID> # 例: twp task get ACME-123
|
|
@@ -138,6 +139,28 @@ twp task status delete <ステータス> --yes [--project <コード>]
|
|
|
138
139
|
twp task list --project ACME --status 進行中 --output json --query '[].{key:key,subject:subject}'
|
|
139
140
|
```
|
|
140
141
|
|
|
142
|
+
### プロジェクトメンバーをアサインする
|
|
143
|
+
|
|
144
|
+
プロジェクトの管理者(または組織管理者)が、メンバーの追加・役割と稼働期間の変更・削除を行います。
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
twp project mine # 自分がメンバーのプロジェクト(役割・参画期間つき)
|
|
148
|
+
twp user projects <ユーザー> # 指定したユーザーのプロジェクト(組織管理者のみ)
|
|
149
|
+
|
|
150
|
+
twp project member create <ユーザー> --role <役割> [--project <コード>] [--period-file <パス>] [--start-date <日付>] [--end-date <日付>] [--memo <文字列>]
|
|
151
|
+
twp project member update <メンバー> [--project <コード>] [--role <役割>] [--period-file <パス>] [--start-date <日付>] [--end-date <日付>] [--memo <文字列>]
|
|
152
|
+
twp project member delete <メンバー> [--project <コード>] --yes
|
|
153
|
+
twp project member promote <メンバー> [--project <コード>] # 管理者(manager)にする
|
|
154
|
+
twp project member demote <メンバー> [--project <コード>] # manager をメンバーに戻す
|
|
155
|
+
twp project member alias <別名> | --clear [--project <コード>] # 自分の別名
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
- **稼働期間は `--period-file` の JSON 配列で渡します**(例: `[{"start_date":"2026-10-01","end_date":"2026-12-31","daily_hours":8,"input_mode":"hours"}]`。`-` で標準入力)。期間を渡すと参画開始日・終了日はサーバが期間から決めるので、`--start-date` / `--end-date` とは同時に指定できません
|
|
159
|
+
- **`update --period-file` は稼働期間を丸ごと置き換えます。** 送る前に今の期間を読み、消える期間を表示します(`--dry-run` でも出ます)。残す期間は `twp project members --output json` の `assignment_periods` から `id` を付けたまま送ってください
|
|
160
|
+
- **`--role` の値はサーバが検査します**(`member` / `manager` など。値は `twp project member create help` に載せています)
|
|
161
|
+
- `create` の相手はテナントのユーザー(`twp user` と同じ指定方法)、それ以外の相手はそのプロジェクトのメンバー(氏名・メールアドレス・ID・`me`。別名では指定できません)です。誰に送るかは送る前に表示します
|
|
162
|
+
- `delete` は担当中のタスクの担当者を変えません。参画を終えるだけなら `update --end-date` を使ってください
|
|
163
|
+
|
|
141
164
|
### テナントのユーザーと所属を参照する
|
|
142
165
|
|
|
143
166
|
組織管理者(総務)向けに、ユーザーの一覧・詳細と所属の履歴を引きます。
|
|
@@ -741,6 +764,32 @@ twp shift list [--month <YYYY-MM>] [--me]
|
|
|
741
764
|
- `workchange list` / `shift list` は `--me` で自分の分、無ければ全員分です(全員分は勤怠の管理者権限が要り、無ければその旨を案内して終了コード 3)。`--month` が無ければ今月です
|
|
742
765
|
- 勤務変更やシフトの登録はできません(画面から行ってください。有給の申請は `leave request` でできます)
|
|
743
766
|
|
|
767
|
+
### 分析を見る
|
|
768
|
+
|
|
769
|
+
```bash
|
|
770
|
+
twp analysis operating-hours list [--scope project|user] [--month <YYYY-MM> | --from <YYYY-MM> --to <YYYY-MM> | --year <YYYY>] [--project <コード>] [--user <ユーザー>] [--department <部署>]
|
|
771
|
+
twp analysis project-assignment list [--month <YYYY-MM> | --from <YYYY-MM> --to <YYYY-MM>] [--project <コード>]
|
|
772
|
+
twp analysis staff-assignment list [--month <YYYY-MM> | --from <YYYY-MM> --to <YYYY-MM>] [--user <ユーザー>] [--department <部署>]
|
|
773
|
+
twp analysis capacity list [--user <ユーザー> ...]
|
|
774
|
+
twp analysis capacity alerts | redistribution | settings
|
|
775
|
+
twp analysis workload list [--team [--date <YYYY-MM-DD>]]
|
|
776
|
+
twp analysis project-health list [--date <YYYY-MM-DD>] [--warning-only]
|
|
777
|
+
twp analysis project-health history [--project <コード>] [--from <YYYY-MM-DD>] [--to <YYYY-MM-DD>] [--granularity day|week|month]
|
|
778
|
+
twp analysis project-health insights [--project <コード>] [--date <YYYY-MM-DD>] --yes
|
|
779
|
+
twp project manhours [<コード>] [--from <YYYY-MM-DD>] [--to <YYYY-MM-DD>]
|
|
780
|
+
twp task manhours <キー> [--from <YYYY-MM-DD>] [--to <YYYY-MM-DD>]
|
|
781
|
+
twp project workload [<コード>]
|
|
782
|
+
```
|
|
783
|
+
|
|
784
|
+
- 稼働分析・プロジェクトアサイン・人材別アサインは、期間を指定しなければ**当月(この端末の時計)**です。当月で埋めたときは stderr でそう言います。表は月ごとの値を `YYYY-MM` 列に並べ、値は画面と同じくサーバの集計のままです(内訳は `--output json`)
|
|
785
|
+
- `--project` を省いたとき、稼働分析・プロジェクトアサインは全プロジェクトを集計します(既定のプロジェクトで絞りません)。健全性の `history` / `insights` は1プロジェクトが対象なので既定のプロジェクト(`TWP_PROJECT` 等)を使います
|
|
786
|
+
- `--from` / `--to` の形式は、稼働分析・アサイン分析が年月(`YYYY-MM`)、健全性の `history` と工数が日付(`YYYY-MM-DD`)です
|
|
787
|
+
- 稼働分析の絞り込みは軸ごとに効くものが違います(`--scope project` は `--project`、`--scope user` は `--user` / `--department`)。効かない組み合わせは送らずに止めます
|
|
788
|
+
- 分析の 403 は「分析の権限が無い」「そのページの閲覧対象に入っていない」「ページが要る機能(勤怠・プロジェクト・人事管理)の権限が無い」を分けて案内します
|
|
789
|
+
- `project-health insights` は呼ぶたびにサーバが AI で所見を作り、テナントの AI クレジットを消費するので `--yes` が要ります
|
|
790
|
+
- `project manhours`(プロジェクト管理者)と `task manhours` は、期間を省くと今月です(テナントの業務日の区切りでサーバが決めます)。応答にユーザー名は無いので、`user_id` は `twp project members` と突き合わせてください
|
|
791
|
+
- 標準勤務時間の変更・負荷判定の再実行・ページの閲覧対象の設定は CLI では行えません(画面か `twp api` を使ってください)
|
|
792
|
+
|
|
744
793
|
### ワークフロー(申請)を見る・出す・承認する
|
|
745
794
|
|
|
746
795
|
```bash
|
|
@@ -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-ZOOEH7ZE.js";import{expandServerSkills,prepareSkillOverlay}from"./chunk-AITUMFCH.js";import"./chunk-H3WYVFTS.js";import
|
|
3
|
+
import{failureHint,isAuthError,isCliFatalText,isRateLimited,isServerAiType,isUntrusted,maxTurnsReached,rateLimitWaitSeconds,tailForScan}from"./chunk-ZOOEH7ZE.js";import{expandServerSkills,prepareSkillOverlay}from"./chunk-AITUMFCH.js";import"./chunk-H3WYVFTS.js";import"./chunk-AJO4O5ZF.js";import"./chunk-VRBI2NPI.js";import{detectAiClis}from"./chunk-T4QZO6RQ.js";import"./chunk-G2THOTBW.js";import{isForceOnly,killProcessTree,system32}from"./chunk-N2UVRM3Z.js";
|
|
4
4
|
import{DEFAULT_CLAUDE_LAUNCHER,activeSlotPath,detectClaudeAutoSwitch,isClaudeAi,isUsableModelId,modelFitsRoute,resolveSpawnTarget,usesBedrock,wrapWithAutoSwitch}from"./chunk-AEJHDFXB.js";import"./chunk-GY7KI5E5.js";import"./chunk-UFND7FBC.js";import{findExecutable,isWindowsDriveAbsolute}from"./chunk-PMOUHEJQ.js";import"./chunk-J7QYPKVK.js";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 FINAL_REPORT_BEGIN="<<<AI_FINAL_REPORT>>>";var FINAL_REPORT_END="<<<END_AI_FINAL_REPORT>>>";var ClaudeStreamRenderer=class{constructor(now=()=>new Date){this.now=now}now;toolNames=new Map;toolCount=0;result={subtype:null,isError:null,numTurns:null,costUsd:null,durationMs:null,tokensIn:null,tokensOut:null,rateLimited:false,resetsAt:null,finalText:""};push(line){const trimmed=line.trim();if(trimmed==="")return[];let event;try{const parsed=JSON.parse(trimmed);if(parsed===null||typeof parsed!=="\
|
|
5
5
|
object"||Array.isArray(parsed)){return[line]}event=parsed}catch{return[line]}switch(event["type"]){case"rate_limit_event":return this.onRateLimit(event);case"assistant":return this.onAssistant(event);case"user":return this.onUser(event);case"result":return this.onResult(event);default:return event["type"]==="system"?[]:[line]}}sawRateLimit(){return this.result.rateLimited}lastRateLimitNote="";onRateLimit(event){const info=event["rate_limit_info"];if(info===null||typeof info!=="object")return[];const rec=info;
|
|
6
6
|
const status=typeof rec["status"]==="string"?rec["status"]:"";const resets=typeof rec["resetsAt"]==="number"?rec["resetsAt"]:null;if(status==="")return[];const at=isSaneEpochSec(resets)?` resets=${new Date(resets*1e3).toISOString()}`:"";if(status.startsWith("allowed")){if(status==="allowed")return[];const seen=`${status}|${resets??""}`;if(seen===this.lastRateLimitNote)return[];this.lastRateLimitNote=seen;return[this.line(`\u2139\uFE0F \u4E0A\u9650\u306B\u63A5\u8FD1\uFF08status=${status}${at}\uFF09\u2014 \u5B9F\
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
|
+
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
+
import{MANHOUR_DESCRIPTION,MANHOUR_FROM_FLAG,MANHOUR_TO_FLAG,analysisDomain,analysisForbidden,currentMonth,manhourNotes,manhourQuery,manhourRows,monthsBetween,workloadDistributionNotes,workloadDistributionRows}from"./chunk-E7MUDY4P.js";import"./chunk-YLXW7TIU.js";import"./chunk-4B3T4UE7.js";import"./chunk-F7K37QG6.js";import"./chunk-QQRJLH6B.js";import"./chunk-LXIAOCUW.js";import"./chunk-VTQAI52S.js";import"./chunk-UFND7FBC.js";import"./chunk-VSJBJXZO.js";export{MANHOUR_DESCRIPTION,MANHOUR_FROM_FLAG,MANHOUR_TO_FLAG,analysisDomain,analysisForbidden,currentMonth,manhourNotes,manhourQuery,manhourRows,monthsBetween,workloadDistributionNotes,workloadDistributionRows};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{CommandModelMissingError,MAX_REPORTED_VIOLATIONS,loadCommandModelDomain,loadCommandModelRoutes,validateBody,validateQuery}from"./chunk-NZ7WI4RZ.js";import{NO_REDACT_FLAG,NO_REDACT_NOTICE,exitCodeFor,fetchAllPages,reportError}from"./chunk-
|
|
4
|
-
|
|
5
|
-
import{HELP_TOKEN}from"./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-SSYA2LNP.js";import"./chunk-YPNMQCVG.js";import{evaluateQuery}from"./chunk-ATYA6DG5.js";import{renderOutput}from"./chunk-OUP3JLVH.js";import{redactSecretValues,withDebug}from"./chunk-O5AUX7AQ.js";import{parseOperationArgs,
|
|
4
|
+
repeatedValues}from"./chunk-F7K37QG6.js";import{readBody}from"./chunk-ORUDW52G.js";import"./chunk-4MTEXWYQ.js";import"./chunk-GMBJTG6A.js";import{ApiError,TwpApiClient,appendQuery}from"./chunk-IF2K4PM5.js";import"./chunk-3HH5IYNO.js";import{GLOBAL_OPTIONS_HELP}from"./chunk-YLM54X35.js";import{AuthSession,NotLoggedInError,SessionExpiredError,loadCredentials}from"./chunk-XNLIEUAW.js";import{effectiveApiUrl,resolveConfiguredOutput,resolveProfile}from"./chunk-4VZKNEVN.js";
|
|
5
|
+
import{HELP_TOKEN}from"./chunk-34X4JXND.js";import"./chunk-QQRJLH6B.js";import{OUTPUT_FORMATS,resolveOutputFormat}from"./chunk-K2ONOH3L.js";import"./chunk-WVS4W5FY.js";import{DEFAULT_MAX_ITEMS,DEFAULT_MAX_PAGES,envelopePaging,isPageNumberEnvelope,pageRangeNotes,positiveInteger,readEnvelopeCursor,readPageNumberCursor,shellQuote}from"./chunk-IOGMOXYF.js";import"./chunk-II5RVJQN.js";import"./chunk-VTQAI52S.js";import{ApiRejectedError,ApiResponseError,EXIT_OK,
|
|
6
6
|
EXIT_WAIT_TIMEOUT,NetworkError,UsageError}from"./chunk-UFND7FBC.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import"./chunk-RZVI6PMW.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var MIN_SEGMENT_CHARS=3;var parsedCache=new WeakMap;function splitSegments(path){return path.split("/").filter(segment=>segment!=="")}function parseRoutes(routes){const cached=parsedCache.get(routes);if(cached!==void 0)return cached;const parsed=[];for(const[key,domain]of Object.entries(routes.routes)){const space=key.indexOf(" ");if(space<=0)continue;const template=key.slice(space+1);parsed.push({method:key.slice(0,space),template,domain,segments:splitSegments(template).map(segment=>/^\{[^/{}]+\}$/.
|
|
7
7
|
test(segment)?null:segment)})}parsedCache.set(routes,parsed);return parsed}function matches(route,segments){if(route.segments.length!==segments.length)return false;return route.segments.every((literal,i)=>literal===null||literal===segments[i])}function compareSpecificity(a,b){const literals=route=>route.segments.filter(segment=>segment!==null).length;const diff=literals(b)-literals(a);if(diff!==0)return diff;for(let i=0;i<a.segments.length;i+=1){const aLiteral=a.segments[i]!==null;const bLiteral=b.
|
|
8
8
|
segments[i]!==null;if(aLiteral!==bLiteral)return aLiteral?-1:1}return 0}function lookupRoute(routes,method,path){const segments=splitSegments(path);const hits=parseRoutes(routes).filter(route=>matches(route,segments));const sameMethod=hits.filter(route=>route.method===method).sort(compareSpecificity);const best=sameMethod[0];if(best!==void 0)return{kind:"matched",domain:best.domain,template:best.template};if(hits.length>0){const[top]=[...hits].sort(compareSpecificity);const template=top.template;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{RESIDENT_TOKEN_CAP,activateModeFiles,activatePermissionSettings,buildResidentSet,buildSystemPrompt,createAuditLogger,createTwpToolkit,currentBranch,describeAuditLog,describeToolCatalog,displayCwd,executeTool,findProjectTwpSubdir,localTools,lstatOrNull,parseFrontMatter,parseRule,persistProjectAllow,projectPermissionsPath,projectRootFor,readFileTool,residentInputs,resolveGitExecutable,runTurn,secretReason}from"./chunk-
|
|
4
|
-
|
|
5
|
-
minSupportedBlockMessage}from"./chunk-DXXFUNYN.js";import"./chunk-4VZKNEVN.js";import{parseArgv}from"./chunk-
|
|
3
|
+
import{RESIDENT_TOKEN_CAP,activateModeFiles,activatePermissionSettings,buildResidentSet,buildSystemPrompt,createAuditLogger,createTwpToolkit,currentBranch,describeAuditLog,describeToolCatalog,displayCwd,executeTool,findProjectTwpSubdir,localTools,lstatOrNull,parseFrontMatter,parseRule,persistProjectAllow,projectPermissionsPath,projectRootFor,readFileTool,residentInputs,resolveGitExecutable,runTurn,secretReason}from"./chunk-UTIZTCAP.js";import"./chunk-NZ7WI4RZ.js";import{buildDiffLines,
|
|
4
|
+
diffStat}from"./chunk-VRBI2NPI.js";import"./chunk-O5AUX7AQ.js";import{require_fuzzysort}from"./chunk-DIMZRTLE.js";import"./chunk-4MTEXWYQ.js";import"./chunk-GMBJTG6A.js";import"./chunk-IF2K4PM5.js";import"./chunk-3HH5IYNO.js";import{RelayError,builtinCatalog,createRuntime,loadCachedCatalog,modelLabel,pickModel,toModelInfos}from"./chunk-6QOT7CHX.js";import"./chunk-D233KKXW.js";import"./chunk-XNLIEUAW.js";import{checkMinSupportedVersion,isBelowMinSupported,
|
|
5
|
+
minSupportedBlockMessage}from"./chunk-DXXFUNYN.js";import"./chunk-4VZKNEVN.js";import{parseArgv}from"./chunk-AJIHNSXI.js";import{applyPermissionMode,checkPermission,describePermissionMode,getMode,isModeId,modeSource,nextMode}from"./chunk-NAUH75MM.js";import"./chunk-34X4JXND.js";import"./chunk-QQRJLH6B.js";import{isFullWidth,isWide,stringWidth,stripAnsi}from"./chunk-WVS4W5FY.js";import"./chunk-N2UVRM3Z.js";import"./chunk-II5RVJQN.js";import"./chunk-UFND7FBC.js";
|
|
6
6
|
import"./chunk-PMOUHEJQ.js";import{proxyDiagnostics}from"./chunk-J7QYPKVK.js";import{configReadDirs,twpHomeDir}from"./chunk-RZVI6PMW.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import{__commonJS,__export,__require,__toESM}from"./chunk-VSJBJXZO.js";var require_react_production=__commonJS({"node_modules/react/cjs/react.production.js"(exports){"use strict";var REACT_ELEMENT_TYPE=Symbol.for("react.transitional.element");var REACT_PORTAL_TYPE=Symbol.for("react.portal");var REACT_FRAGMENT_TYPE=Symbol.for("react.fragment");var REACT_STRICT_MODE_TYPE=Symbol.for("react.strict_mode");var REACT_PROFILER_TYPE=Symbol.for("react.profiler");var REACT_CONSUMER_TYPE=Symbol.for("react.consumer");var REACT_CONTEXT_TYPE=Symbol.for("react.context");var REACT_FORWARD_REF_TYPE=Symbol.
|
|
7
7
|
for("react.forward_ref");var REACT_SUSPENSE_TYPE=Symbol.for("react.suspense");var REACT_MEMO_TYPE=Symbol.for("react.memo");var REACT_LAZY_TYPE=Symbol.for("react.lazy");var REACT_ACTIVITY_TYPE=Symbol.for("react.activity");var REACT_VIEW_TRANSITION_TYPE=Symbol.for("react.view_transition");var MAYBE_ITERATOR_SYMBOL=Symbol.iterator;function getIteratorFn(maybeIterable){if(null===maybeIterable||"object"!==typeof maybeIterable)return null;maybeIterable=MAYBE_ITERATOR_SYMBOL&&maybeIterable[MAYBE_ITERATOR_SYMBOL]||
|
|
8
8
|
maybeIterable["@@iterator"];return"function"===typeof maybeIterable?maybeIterable:null}var ReactNoopUpdateQueue={isMounted:function(){return false},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}};var assign=Object.assign;var emptyObject={};function Component(props,context,updater){this.props=props;this.context=context;this.refs=emptyObject;this.updater=updater||ReactNoopUpdateQueue}Component.prototype.isReactComponent={};Component.prototype.setState=
|
|
@@ -1212,7 +1212,7 @@ cwd()){const listed=await gitListFiles(cwd2);const raw=listed??await walkFiles(c
|
|
|
1212
1212
|
1;const after=/^[^\s]*/.exec(text.slice(cursor))?.[0]??"";return{query,start,end:cursor+after.length}}var TWP_SLASH_ROUTES={"/tasks":{domain:"task",operation:"list"},"/task":{domain:"task",operation:"get"},"/projects":{domain:"project",operation:"list"}};function isTwpSlashCommand(name){return Object.hasOwn(TWP_SLASH_ROUTES,name)}async function runTwpSlashCommand(name,args,deps){const route=TWP_SLASH_ROUTES[name];if(!Object.hasOwn(TWP_SLASH_ROUTES,name)||route===void 0){return{code:2,out:"",err:`\u4E0D\u660E\u306A\u30B3\u30DE\u30F3\u30C9: ${name}
|
|
1213
1213
|
`}}const parsed=parseArgv([route.domain,route.operation,...args]);if(parsed.command!=="domain"||parsed.domain!==route.domain){return{code:2,out:"",err:`${name}: \u3053\u306E\u5F15\u6570\u306F\u4F7F\u3048\u307E\u305B\u3093\uFF08${args.join(" ")}\uFF09
|
|
1214
1214
|
`}}if(parsed.unknown.length>0){return{code:2,out:"",err:`\u4E0D\u660E\u306A\u5F15\u6570: ${parsed.unknown.join(" ")}
|
|
1215
|
-
`}}let out="";let err="";const io={out:text=>void(out+=text),err:text=>void(err+=text),isTty:true};const globals={profile:parsed.profile??deps.profile,...parsed.output!==void 0?{output:parsed.output}:{},...parsed.query!==void 0?{query:parsed.query}:{},dryRun:parsed.dryRun,debug:parsed.debug,yes:parsed.yes,refresh:parsed.refresh};const{runDomain}=await import("./run-
|
|
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-KVDDYJ6W.js");try{const code=await runDomain({domain:route.domain,...parsed.operation!==void 0?{operation:parsed.operation}:
|
|
1216
1216
|
{},argv:parsed.domainArgv,help:parsed.domainHelp,globals,version:deps.version,io,...deps.fetchImpl!==void 0?{fetchImpl:deps.fetchImpl}:{}});return{code,out,err}}catch(e){return{code:1,out,err:`${err}${e.message}
|
|
1217
1217
|
`}}}var GIT_LOG_OUTPUT=["9f3c1a2 feat(ui): \u4E00\u89A7\u306E\u30D5\u30A3\u30EB\u30BF\u3092 URL \u30AF\u30A8\u30EA\u3068\u540C\u671F\u3059\u308B","4b8e0d7 fix(ui): \u4EEE\u60F3\u30B9\u30AF\u30ED\u30FC\u30EB\u306E\u884C\u9AD8\u3055\u3092\u5B9F\u6E2C\u5024\u306B\u5408\u308F\u305B\u308B","c15a99e refactor(api): \u4E00\u89A7\u53D6\u5F97\u306E\u30DA\u30FC\u30B8\u30F3\u30B0\u51E6\u7406\u3092\u5171\u901A\u5316\u3059\u308B","2d70f4b test: \u4E00\u89A7\u30D5\u30A3\u30EB\u30BF\u306E\u56DE\u5E30\u30C6\u30B9\u30C8\u3092\u8FFD\u52A0\u3059\u308B",
|
|
1218
1218
|
"a6e2b38 fix(api): \u7A7A\u306E\u691C\u7D22\u6761\u4EF6\u3067\u5168\u4EF6\u8FD4\u3089\u306A\u3044\u3088\u3046\u306B\u3059\u308B","7c40d51 chore(deps): \u958B\u767A\u4F9D\u5B58\u3092\u6700\u65B0\u3078\u66F4\u65B0\u3059\u308B","e83b1c6 docs: \u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u624B\u9806\u306B Node 22 \u306E\u524D\u63D0\u3092\u8FFD\u8A18\u3059\u308B","b91f7a4 fix(ui): \u30E2\u30FC\u30C0\u30EB\u306E\u91CD\u306A\u308A\u9806\u3092\u6307\u5B9A\u3059\u308B","5a2c8e0 perf(api): \u4E00\u89A7\u306E N+1 \u3092\u89E3\u6D88\u3059\u308B",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{readBody}from"./chunk-ORUDW52G.js";import{BACKLOG_BASE_PATH,BACKLOG_PROJECT_SCOPE_LABEL,BACKLOG_SCOPE_LABEL,backlogSpacePath,isExactNumericId,resolveNamed}from"./chunk-
|
|
3
|
+
import{readBody}from"./chunk-ORUDW52G.js";import{BACKLOG_BASE_PATH,BACKLOG_PROJECT_SCOPE_LABEL,BACKLOG_SCOPE_LABEL,backlogSpacePath,isExactNumericId,resolveNamed}from"./chunk-4MTEXWYQ.js";import"./chunk-GMBJTG6A.js";import"./chunk-IF2K4PM5.js";import"./chunk-3HH5IYNO.js";import"./chunk-4VZKNEVN.js";import"./chunk-II5RVJQN.js";import{requireResolved,singleRef,withResolved}from"./chunk-LXIAOCUW.js";import{isRecord,pick}from"./chunk-VTQAI52S.js";
|
|
4
4
|
import{ApiResponseError,UsageError}from"./chunk-UFND7FBC.js";import"./chunk-J7QYPKVK.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var DEFAULT_COUNT=20;var MAX_COUNT=100;var NUMERIC=/^[0-9]+$/;var ISSUE_REF=/^(?:[A-Za-z0-9_]+-[0-9]+|[0-9]+)$/;var DATE=/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/;var SPACE_COLUMNS=["id","space_url"];var PROJECT_COLUMNS=["id","projectKey","name"];var ISSUE_LIST_COLUMNS=["issueKey","summary","status","assignee","priority","dueDate","updated","descriptionTruncated"];var ISSUE_GET_COLUMNS=["id","issueKey","projectId","summary","description","descriptionTruncated","status","issueType","priority","assignee","cr\
|
|
5
5
|
eatedUser","parentIssueId","startDate","dueDate","estimatedHours","actualHours","created","updated"];var COMMENT_COLUMNS=["id","created","createdUserId","createdUser","content","changeLog"];function commentRow(row){const source=isRecord(row)?row:{};const user=isRecord(source["createdUser"])?source["createdUser"]:{};return pick({...source,createdUserId:user["id"]??null,createdUser:user["name"]??null},COMMENT_COLUMNS)}var ATTACHMENT_COLUMNS=["id","name","size","contentType","createdUserId","create\
|
|
6
6
|
dUser","created"];var STATUS_COLUMNS=["id","name","color"];var USER_COLUMNS=["id","userId","name","mailAddress","roleType"];var SPACE_FLAG={name:"--space",summary:"Backlog \u30B9\u30DA\u30FC\u30B9\uFF08ID / \u30B9\u30DA\u30FC\u30B9URL / \u30B5\u30D6\u30C9\u30E1\u30A4\u30F3\uFF09\u3002\u767B\u9332\u304C1\u4EF6\u306A\u3089\u7701\u7565\u3067\u304D\u307E\u3059",takesValue:true,placeholder:"<ID|URL>"};var BODY_MAX_CHARS=1e5;var BODY_FLAGS=[{name:"--body-file",summary:"\u672C\u6587\u3092\u30D5\u30A1\u30A4\u30EB\u304B\u3089\u8AAD\u3080\uFF08- \u3067\u6A19\u6E96\u5165\u529B\uFF09\u3002\u6539\u884C\u30FBMarkdown\
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{salesFeatureDenied}from"./chunk-
|
|
3
|
+
import{salesFeatureDenied}from"./chunk-EZ3RJBN6.js";import{featureLicenseGuidance}from"./chunk-R5KWKK5Z.js";import{repeatedValues}from"./chunk-F7K37QG6.js";import{charCount,readBody}from"./chunk-ORUDW52G.js";import{isExactNumericId}from"./chunk-4MTEXWYQ.js";import{ApiError}from"./chunk-IF2K4PM5.js";import{NotLoggedInError,SessionExpiredError}from"./chunk-XNLIEUAW.js";import{LIST_PAGING_HELP,PAGE_NUMBER_LIST_FLAGS,envelopePaging,nonEmpty,positiveInteger}from"./chunk-IOGMOXYF.js";
|
|
4
4
|
import{requireResolved,withResolved}from"./chunk-LXIAOCUW.js";import{isRecord,pick}from"./chunk-VTQAI52S.js";import{ApiRejectedError,ApiResponseError,NetworkError,UsageError}from"./chunk-UFND7FBC.js";var SALES_PATH="/api/v2/sales";var REASONS_PATH=`${SALES_PATH}/ai-review-reasons`;function documentForbidden(body){if(salesFeatureDenied(body))return featureLicenseGuidance("\u8CA9\u58F2\u7BA1\u7406");const reason=body?.error;if(typeof reason==="string"&&reason.endsWith("\u6A29\u9650\u304C\u3042\u308A\u307E\u305B\u3093")){return`${reason}\uFF08\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306B\u7D10\u3065\u304F\u66F8\u985E\u306F\u305D\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30E1\u30F3\u30D0\u30FC\u3001\u7D10\u3065\u304B\u306A\u3044\u66F8\u985E\u306F\u4F5C\u6210\u8005\u30FB\u62C5\u5F53\u8005\u3068\u7BA1\u7406\u8005\u3060\u3051\u304C\u6271\u3048\u307E\u3059\uFF09`}
|
|
5
5
|
return void 0}function reasonsForbidden(body){if(body?.error==="permission_denied")return featureLicenseGuidance("\u8CA9\u58F2\u7BA1\u7406");return"\u7406\u7531\u306E\u6A2A\u65AD\u4E00\u89A7\u30FB\u6587\u6848\u751F\u6210\u30FBPR \u4F5C\u6210\u306F\u8CA9\u58F2\u7BA1\u7406\u306E\u7BA1\u7406\u8005\u3060\u3051\u304C\u4F7F\u3048\u307E\u3059\uFF08\u66F8\u985E\u3092\u8DE8\u3044\u3067\u7406\u7531\u3092\u8AAD\u3080\u305F\u3081\uFF09\u3002\u30C6\u30CA\u30F3\u30C8\u304C\u8CA9\u58F2\u7BA1\u7406\u3092\u5951\u7D04\u3057\u3066\u3044\u308B\u304B\u30FB\u3042\u306A\u305F\u306E\u8CA9\u58F2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u300C\u7BA1\u7406\u8005\u300D\u304B\u3092\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002"}
|
|
6
6
|
var ESTIMATE={name:"estimate",label:"\u898B\u7A4D",segment:"estimates"};var INVOICE={name:"invoice",label:"\u8ACB\u6C42",segment:"invoices"};var CONTRACT={name:"contract",label:"\u53D6\u5F15\u5951\u7D04",segment:"contracts"};var JUDGMENTS={no_issue:"\u78BA\u8A8D\u3057\u305F\u304C\u554F\u984C\u306A\u3044\u3068\u5224\u65AD\u3057\u305F",corrected:"\u6307\u6458\u3092\u53D7\u3051\u3066\u66F8\u985E\u3092\u4FEE\u6B63\u3057\u305F",not_applicable:"\u3053\u306E\u6848\u4EF6\u306B\u306F\u5F53\u3066\u306F\u307E\u3089\u306A\u3044\u6307\u6458\u3060\u3068\u5224\u65AD\u3057\u305F"};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
|
+
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
+
var DOMAIN_NAMES=["agent-loop","ai-review-reason","analysis","attendance","backlog","business-place","company","contract","customer","department","deposit","estimate","inquiry","invoice","job-title","leave","media","meeting","note","notification","onedrive","outlook","payee","position","project","prospect","purchase","receivable","report","rounding-setting","seal-impression","shift","storage","supplier-payment","task","teams","user","wiki","workchange","workflow"];function isDomainName(value){return value!==
|
|
4
|
+
void 0&&DOMAIN_NAMES.includes(value)}var HELP_TOKEN="help";var API_TOKEN="api";export{DOMAIN_NAMES,isDomainName,HELP_TOKEN,API_TOKEN};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{
|
|
3
|
+
import{readCsvFileText}from"./chunk-OHXZO5WK.js";import{featureLicenseGuidance,invoiceFilters}from"./chunk-R5KWKK5Z.js";import{boundedText,isoDate}from"./chunk-XDHLO54T.js";import{repeatedValues}from"./chunk-F7K37QG6.js";import{readBody}from"./chunk-ORUDW52G.js";import{SALES_DEPOSITS_PATH,isExactNumericId,resolveNamed}from"./chunk-4MTEXWYQ.js";import{ApiError}from"./chunk-IF2K4PM5.js";import{LIST_PAGING_HELP,PAGE_NUMBER_LIST_FLAGS,PAGE_NUMBER_PAGING_HELP,
|
|
4
4
|
STABLE_PAGE_ORDER,nonEmpty,pageNumberPaging,pageNumberQuery,pageRangeNotes}from"./chunk-IOGMOXYF.js";import{requireResolved,withResolved}from"./chunk-LXIAOCUW.js";import{acknowledgement,isRecord,pick}from"./chunk-VTQAI52S.js";import{ApiResponseError,UsageError}from"./chunk-UFND7FBC.js";var PATH=SALES_DEPOSITS_PATH;function salesAdminForbidden(what){return body=>body?.error==="permission_denied"?featureLicenseGuidance("\u8CA9\u58F2\u7BA1\u7406"):`${what}\u306B\u306F\u8CA9\u58F2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u300C\u7BA1\u7406\u8005\u300D\u3067\u3042\u308B\u3053\u3068\u304C\u8981\u308A\u307E\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`}var FORBIDDEN=salesAdminForbidden("\u5165\u91D1");var ALLOCATION_STATUSES={
|
|
5
5
|
allocated:"\u5F15\u5F53\u6E08",shortage:"\u672A\u5165\u91D1\u6709",excess:"\u5165\u91D1\u8D85\u904E\u6709",transfer_fee_resolved:"\u624B\u6570\u6599\u51E6\u7406\u6E08"};var EXCESS_REASONS={transfer_fee:"\u632F\u8FBC\u624B\u6570\u6599",agency_fee:"\u4EE3\u884C\u624B\u6570\u6599\uFF08\u53E3\u5EA7\u632F\u66FF \u57FA\u672C\u5229\u7528\u6599\uFF09",partial:"\u4E00\u90E8\u5165\u91D1",offset:"\u76F8\u6BBA",overpayment:"\u904E\u5165\u91D1",other:"\u305D\u306E\u4ED6"};var EXCESS_TAX_CATEGORIES={taxable_purchase_10:"\
|
|
6
6
|
\u8AB2\u7A0E\u4ED5\u5165 10%",not_applicable:"\u5BFE\u8C61\u5916"};var BULK_MAX_ROWS=100;var PLAN_MAX_ITEMS=50;var PLAN_MAX_ALLOCATIONS=100;var FILE_MAX_BYTES=1024*1024;var EXCESS_NOTE_MAX_CHARS=255;var PLAN_MEMO_MAX_CHARS=1e3;var CONTENT_MAX_CHARS=1e6;var LIST_COLUMNS=["id","deposit_date","company_name","payee_name","deposit_amount","allocated_amount","unallocated_amount","allocation_status"];var GET_COLUMNS=[...LIST_COLUMNS,"memo","excess_reason","excess_amount","excess_note","excess_tax_categ\
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{
|
|
3
|
+
import{ResolveError,UUID_RE,isSafePathSegment,resolveProjectRef,safeProjectIdPolicy}from"./chunk-GMBJTG6A.js";import{ApiError}from"./chunk-IF2K4PM5.js";import{graphNextCursor,ms365NamedRow,ms365NotConnectedGuidance,ms365Path,ms365Segment}from"./chunk-3HH5IYNO.js";import{loadProjectConfig,loadUserConfig}from"./chunk-4VZKNEVN.js";import{isTaskKey}from"./chunk-II5RVJQN.js";import{UsageError}from"./chunk-UFND7FBC.js";import{twpHomeDir}from"./chunk-RZVI6PMW.js";var BACKLOG_BASE_PATH="/api/v2/integrations/backlog";function assertBacklogPathSegment(value,label){if(!isSafePathSegment(value)){throw new ResolveError(`${label}\u3068\u3057\u3066 URL \u306B\u5165\u308C\u3089\u308C\u306A\u3044\u5024\u304C\u30B5\u30FC\u30D0\u304B\u3089\u8FD4\u308A\u307E\u3057\u305F: ${JSON.stringify(value)}\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return value}function backlogSpacePath(spaceId,suffix=""){assertBacklogPathSegment(spaceId,
|
|
4
4
|
"Backlog \u30B9\u30DA\u30FC\u30B9 ID");return`${BACKLOG_BASE_PATH}/${encodeURIComponent(spaceId)}${suffix}`}function idString(value){if(typeof value==="number"&&Number.isFinite(value))return String(value);if(typeof value==="string"&&value.trim()!=="")return value.trim();return null}function text(value){return typeof value==="string"&&value.trim()!==""?value.trim():null}function backlogSpaceAliases(spaceUrl){const aliases=[];const trimmed=spaceUrl.trim().replace(/\/+$/,"");if(trimmed==="")return aliases;
|
|
5
5
|
let host;try{host=new URL(trimmed).host}catch{host=trimmed.replace(/^\/+/,"").split("/")[0]??""}if(host==="")return aliases;aliases.push(host);const label=host.split(".")[0];if(label!==void 0&&label!==""&&label!==host)aliases.push(label);return aliases}function backlogSpaceRow(row){const url=text(row["space_url"]);return{id:idString(row["id"]),name:url,code:null,aliases:url!==null?backlogSpaceAliases(url):[]}}function backlogProjectRow(row){return{id:idString(row["id"]),name:text(row["name"]),code:text(
|
|
6
6
|
row["projectKey"])}}function backlogStatusRow(row){return{id:idString(row["id"]),name:text(row["name"]),code:null}}function backlogUserRow(row){return{id:idString(row["id"]),name:text(row["name"]),code:null,aliases:[text(row["userId"]),text(row["mailAddress"])].filter(v=>v!==null)}}var DEFAULT_LOOKUP_SCOPE="\u3053\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8";function fold(value){return value.trim().toLowerCase()}function keysOf(ref){return[ref.id,ref.code,ref.name,...ref.aliases??[]].filter(v=>typeof v==="string"&&v.trim()!=="").map(fold)}function describe(ref){return ref.code!==void 0&&ref.code!==null&&ref.code!==""&&ref.code!==ref.name?`${ref.name}\uFF08${ref.code}\uFF09`:ref.name}async function suggest(input,candidates){try{const{default:fuzzysort}=await import("./fuzzysort-DFVKV4B4.js");
|
|
@@ -15,9 +15,9 @@ env);const fromProfile=usable(user.profiles?.[profileName]?.project);if(fromProf
|
|
|
15
15
|
const ttl=options.ttlMs??DEFAULT_TTL_MS;const now=(options.now??Date.now)();if(Math.abs(now-fetchedAt)>ttl)return null;return parsed.value}function writeCache(key,value,options={}){const env=options.env??process.env;const dir=cacheDir(env);const file=cacheFilePath(key,env);const body={version:CACHE_VERSION,key:{profile:key.profile,scope:key.scope,...key.project!==void 0?{project:key.project}:{}},fetched_at:new Date((options.now??Date.now)()).toISOString(),value};if(!isCacheLocationTrusted(env))return;
|
|
16
16
|
const tmp=`${file}.${process.pid}.tmp`;try{fs.mkdirSync(dir,{recursive:true,mode:448});fs.writeFileSync(tmp,`${JSON.stringify(body)}
|
|
17
17
|
`,{mode:384});fs.renameSync(tmp,file)}catch{try{fs.rmSync(tmp,{force:true})}catch{}}}function removeCache(key,options={}){const env=options.env??process.env;if(!isCacheLocationTrusted(env))return;try{fs.rmSync(cacheFilePath(key,env),{force:true})}catch{}}var SELF_REF="me";var PRIVATE_TASKS_PATH="/api/v2/tasks/private";var PRIVATE_MASTERS_CACHE_KEY="__private__";var BACKLOG_SPACES_CACHE_KEY="__backlog__";var MS365_TEAMS_CACHE_KEY="__ms365__";var MS365_SCOPE_LABEL="\u53C2\u52A0\u3057\u3066\u3044\u308B Teams";var MS365_RESOLVE_MAX_PAGES=20;var BACKLOG_SCOPE_LABEL="\u3053\u306E\u63A5\u7D9A\u5148";var BACKLOG_PROJECT_SCOPE_LABEL="\u3053\u306E Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8";var PRIVATE_SCOPE_LABEL="\u500B\u4EBA\u30BF\u30B9\u30AF";var TENANT_CACHE_KEY="\
|
|
18
|
-
__tenant__";var TENANT_SCOPE_LABEL="\u3053\u306E\u30C6\u30CA\u30F3\u30C8";var ADMIN_USERS_LIST_PATH="/api/v2/admin/users/list";var DEPARTMENTS_PATH="/api/v2/organization/departments";var POSITIONS_PATH="/api/v2/organization/positions";var JOB_TITLES_PATH="/api/v2/organization/job-titles";var INQUIRY_CATEGORIES_PATH="/api/v2/inquiries/categories";var NOTIFICATIONS_PATH="/api/v2/notifications";var NOTIFICATION_COUNT_MAX_PAGES=20;var NOTIFICATION_COUNT_PAGE_LIMIT=100;var WORKFLOWS_PATH="
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
__tenant__";var TENANT_SCOPE_LABEL="\u3053\u306E\u30C6\u30CA\u30F3\u30C8";var ADMIN_USERS_LIST_PATH="/api/v2/admin/users/list";var PROJECT_MEMBERS_LIMIT=1e4;var DEPARTMENTS_PATH="/api/v2/organization/departments";var POSITIONS_PATH="/api/v2/organization/positions";var JOB_TITLES_PATH="/api/v2/organization/job-titles";var INQUIRY_CATEGORIES_PATH="/api/v2/inquiries/categories";var NOTIFICATIONS_PATH="/api/v2/notifications";var NOTIFICATION_COUNT_MAX_PAGES=20;var NOTIFICATION_COUNT_PAGE_LIMIT=100;var WORKFLOWS_PATH="\
|
|
19
|
+
/api/v2/workflows";var REPORTS_PATH="/api/v2/reports";var SALES_ESTIMATES_PATH="/api/v2/sales/estimates";var SALES_INVOICES_PATH="/api/v2/sales/invoices";var SALES_CONTRACTS_PATH="/api/v2/sales/contracts";var SALES_INVOICE_AUTO_TEMPLATES_PATH="/api/v2/sales/invoice-auto-templates";var SALES_DEPOSITS_PATH="/api/v2/sales/deposits";var SALES_PURCHASES_PATH="/api/v2/sales/purchases";var SALES_SUPPLIER_PAYMENTS_PATH="/api/v2/sales/supplier-payments";var SALES_SUPPLIER_PAYMENT_SCHEDULES_PATH="/api/v2/\
|
|
20
|
+
sales/supplier-payment-schedules";var SALES_BUSINESS_PLACES_PATH="/api/v2/sales/business-places";var SALES_PAYEES_PATH="/api/v2/sales/payees";var SALES_SEAL_IMPRESSIONS_PATH="/api/v2/sales/seal-impressions";var SALES_PURCHASE_AI_MAPPINGS_PATH="/api/v2/sales/purchase-ai-field-mappings";var SALES_ESTIMATE_NO_RULES_PATH="/api/v2/sales/estimate-no-rules";var SALES_INVOICE_NO_RULES_PATH="/api/v2/sales/invoice-no-rules";var SALES_PURCHASE_NO_RULES_PATH="/api/v2/sales/purchase-no-rules";var SALES_ESTIMATE_FORMATS_PATH="\
|
|
21
21
|
/api/v2/sales/estimate-formats";var SALES_ROUNDING_SETTING_PATH="/api/v2/sales/rounding-setting";var SALES_RECORD_KINDS={estimate:{path:SALES_ESTIMATES_PATH,label:"\u898B\u7A4D"},invoice:{path:SALES_INVOICES_PATH,label:"\u8ACB\u6C42"},contract:{path:SALES_CONTRACTS_PATH,label:"\u53D6\u5F15\u5951\u7D04"},"invoice-auto-template":{path:SALES_INVOICE_AUTO_TEMPLATES_PATH,label:"\u81EA\u52D5\u8ACB\u6C42\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8"},deposit:{path:SALES_DEPOSITS_PATH,label:"\u5165\u91D1"},purchase:{
|
|
22
22
|
path:SALES_PURCHASES_PATH,label:"\u4ED5\u5165"},"supplier-payment":{path:SALES_SUPPLIER_PAYMENTS_PATH,label:"\u652F\u6255"},"supplier-payment-schedule":{path:SALES_SUPPLIER_PAYMENT_SCHEDULES_PATH,label:"\u652F\u6255\u5148\u30DE\u30B9\u30BF"},"business-place":{path:SALES_BUSINESS_PLACES_PATH,label:"\u4E8B\u696D\u6240"},payee:{path:SALES_PAYEES_PATH,label:"\u632F\u8FBC\u5148"},"seal-impression":{path:SALES_SEAL_IMPRESSIONS_PATH,label:"\u5370\u5F71"},"purchase-ai-mapping":{path:SALES_PURCHASE_AI_MAPPINGS_PATH,
|
|
23
23
|
label:"\u4ED5\u5165AI\u30DE\u30C3\u30D4\u30F3\u30B0"},"estimate-no-rule":{path:SALES_ESTIMATE_NO_RULES_PATH,label:"\u898B\u7A4D\u756A\u53F7\u30EB\u30FC\u30EB"},"invoice-no-rule":{path:SALES_INVOICE_NO_RULES_PATH,label:"\u8ACB\u6C42\u756A\u53F7\u30EB\u30FC\u30EB"},"purchase-no-rule":{path:SALES_PURCHASE_NO_RULES_PATH,label:"\u4ED5\u5165\u756A\u53F7\u30EB\u30FC\u30EB"},"estimate-format":{path:SALES_ESTIMATE_FORMATS_PATH,label:"\u898B\u7A4D\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8"}};var SALES_COMPANIES_PATH="\
|
|
@@ -41,11 +41,12 @@ if(!isSafePathSegment(userId)){throw new ResolveError(`\u30E6\u30FC\u30B6\u30FC
|
|
|
41
41
|
status}${res.error?`: ${res.error}`:""}\uFF09\u3002`,res.status)}const assignment=isRecord(res.json)?res.json["assignment"]:void 0;if(!isRecord(assignment)||typeof assignment["id"]!=="string"){throw new ResolveError("\u4E3B\u6240\u5C5E\u306E\u5FDC\u7B54\u306B assignment.id \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002",res.status)}return assignment}async assignments(userId){if(!isSafePathSegment(userId)){throw new ResolveError(
|
|
42
42
|
`\u30E6\u30FC\u30B6\u30FC ID \u3092\u30D1\u30B9\u306B\u4F7F\u3048\u307E\u305B\u3093: ${userId}\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}const res=await this.get(`/api/v2/organization/users/${encodeURIComponent(userId)}/assignments`);if(!res.ok){throw new ResolveError(`\u6240\u5C5E\u306E\u4E00\u89A7\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08HTTP ${res.status}${res.error?`: ${res.error}`:""}\uFF09\u3002`,res.status)}const list=isRecord(
|
|
43
43
|
res.json)?res.json["list"]:void 0;if(!Array.isArray(list)||!list.every(isRecord)){throw new ResolveError("\u6240\u5C5E\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",res.status)}return list}async privateMasters(envelope,label){return namedFromRows(await this.privateMasterRows(envelope,label),label,codedMasterRow)}async privateMasterRows(envelope,label){return this.cached(
|
|
44
|
-
`private-${envelope}`,PRIVATE_MASTERS_CACHE_KEY,async()=>rawListFrom(await this.privateMastersResponse(),envelope,label))}privateMastersResponse(){this.privateMastersInFlight??=this.get(`${PRIVATE_TASKS_PATH}/masters`);return this.privateMastersInFlight}async members(projectId){return this.cached("members",projectId,()=>this.namedList(`/api/v2/projects/${encodeURIComponent(projectId)}/members`,"list","\u30E1\u30F3\u30D0\u30FC",row=>({id:str(row["user_id"]),name:str(
|
|
45
|
-
str(row["alias"]),str(row["user_email"])].filter(v=>v!==null)})))}async
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
44
|
+
`private-${envelope}`,PRIVATE_MASTERS_CACHE_KEY,async()=>rawListFrom(await this.privateMastersResponse(),envelope,label))}privateMastersResponse(){this.privateMastersInFlight??=this.get(`${PRIVATE_TASKS_PATH}/masters`);return this.privateMastersInFlight}async members(projectId){return this.cached("members",projectId,()=>this.namedList(`/api/v2/projects/${encodeURIComponent(projectId)}/members?limit=${PROJECT_MEMBERS_LIMIT}`,"list","\u30E1\u30F3\u30D0\u30FC",row=>({id:str(row["user_id"]),name:str(
|
|
45
|
+
row["user_name"]),code:null,aliases:[str(row["alias"]),str(row["user_email"])].filter(v=>v!==null)})).then(refs=>assertMembersComplete(refs)))}async memberRows(projectId){return assertMembersComplete(rawListFrom(await this.get(`/api/v2/projects/${encodeURIComponent(projectId)}/members?limit=${PROJECT_MEMBERS_LIMIT}`),"list","\u30E1\u30F3\u30D0\u30FC"))}invalidateMembers(projectId){removeCache({profile:this.options.profile,scope:"members",project:projectId},this.options.env!==void 0?{env:this.options.
|
|
46
|
+
env}:{})}async user(input,flag="<\u30E6\u30FC\u30B6\u30FC>"){const trimmed=input.trim();if(trimmed==="")throw new UsageError(`${flag} \u306B\u7A7A\u306E\u5024\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`);if(trimmed.toLowerCase()===SELF_REF)return this.self();if(UUID_RE.test(trimmed))return{id:trimmed,name:trimmed};const searched=await this.searchUsers(trimmed);if(searched.refs!==null){const needle=trimmed.toLowerCase();const hits=searched.refs.filter(ref=>[ref.id,ref.code,ref.name,...ref.aliases??
|
|
47
|
+
[]].some(key=>typeof key==="string"&&key.trim().toLowerCase()===needle));if(hits.length>0)return resolveNamed(trimmed,hits,{flag,label:"\u30E6\u30FC\u30B6\u30FC",scope:TENANT_SCOPE_LABEL})}try{return await resolveNamed(trimmed,await this.visibleUsers(),{flag,label:"\u30E6\u30FC\u30B6\u30FC",scope:TENANT_SCOPE_LABEL})}catch(err){if(err instanceof UsageError&&searched.failure!==null){throw new UsageError(`${err.message}\uFF08\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u304C ${searched.failure} \u3067\u5931\u6557\u3057\
|
|
48
|
+
\u305F\u305F\u3081\u3001\u8868\u793A\u5BFE\u8C61\u306E\u30E6\u30FC\u30B6\u30FC\u3060\u3051\u3067\u7167\u5408\u3057\u307E\u3057\u305F\uFF09`,err.hint)}throw err}}async searchUsers(keyword){const query=new URLSearchParams({keyword,include_hidden:"true",limit:"100"});const res=await this.get(`${ADMIN_USERS_LIST_PATH}?${query.toString()}`);if(!res.ok)return{refs:null,failure:`HTTP ${res.status}`};return{refs:namedFromRows(rawListFrom(res,"items","\u30E6\u30FC\u30B6\u30FC"),"\u30E6\u30FC\u30B6\u30FC",
|
|
49
|
+
userRow),failure:null}}async visibleUsers(){return this.cached("admin-users-visible",TENANT_CACHE_KEY,async()=>{const rows=[];let cursor=null;for(let page=0;;page++){if(page>=USER_LIST_MAX_PAGES){throw new ResolveError(`\u30E6\u30FC\u30B6\u30FC\u4E00\u89A7\u304C ${USER_LIST_MAX_PAGES} \u30DA\u30FC\u30B8\u3092\u8D85\u3048\u305F\u305F\u3081\u3001\u540D\u524D\u3067\u89E3\u6C7A\u3067\u304D\u307E\u305B\u3093\u3002ID \u304B\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}
|
|
49
50
|
const query=new URLSearchParams({limit:"100"});if(cursor!==null)query.set("cursor",cursor);const res=await this.get(`${ADMIN_USERS_LIST_PATH}?${query.toString()}`);rows.push(...rawListFrom(res,"items","\u30E6\u30FC\u30B6\u30FC"));const body=isRecord(res.json)?res.json:{};if(body["has_more"]===false)break;const next=str(body["next_cursor"]);if(body["has_more"]!==true||next===null){throw new ResolveError("\u30E6\u30FC\u30B6\u30FC\u4E00\u89A7\u306E\u5FDC\u7B54\u306B has_more / next_cursor \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
|
|
50
51
|
res.status)}cursor=next}return namedFromRows(rows,"\u30E6\u30FC\u30B6\u30FC",userRow)})}async department(input,flag="--department"){return resolveNamed(input,await this.departments(),{flag,label:"\u90E8\u7F72",scope:TENANT_SCOPE_LABEL})}async position(input,flag="--position"){return resolveNamed(input,await this.positions(),{flag,label:"\u5F79\u8077",scope:TENANT_SCOPE_LABEL})}async jobTitle(input,flag="--job-title"){return resolveNamed(input,await this.jobTitles(),{flag,label:"\u8077\u4F4D",scope:TENANT_SCOPE_LABEL})}async departments(){
|
|
51
52
|
return this.cached("departments",TENANT_CACHE_KEY,async()=>namedFromRows(masterList(await this.get(`${DEPARTMENTS_PATH}?limit=${ORG_MASTER_LIMIT}`),"\u90E8\u7F72"),"\u90E8\u7F72",codedMasterRow))}async positions(){return this.cached("positions",TENANT_CACHE_KEY,async()=>namedFromRows(masterList(await this.get(`${POSITIONS_PATH}?limit=${ORG_MASTER_LIMIT}`),"\u5F79\u8077"),"\u5F79\u8077",codedMasterRow))}async jobTitles(){return this.cached("job-titles",TENANT_CACHE_KEY,async()=>namedFromRows(masterList(
|
|
@@ -103,11 +104,11 @@ const rows=[];let cursor=null;for(let page=1;page<=MS365_RESOLVE_MAX_PAGES;page+
|
|
|
103
104
|
res.status)}const data=isRecord(res.json)?res.json["data"]:void 0;const value=isRecord(data)?data["value"]:void 0;if(!isRecord(data)||!Array.isArray(value)){throw new ResolveError(`${label}\u4E00\u89A7\u306E\u5FDC\u7B54\u306B data.value \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`,res.status)}value.forEach((row,index)=>{if(!isRecord(row)){throw new ResolveError(`${label}\u4E00\u89A7\u306E ${rows.length+index+
|
|
104
105
|
1} \u4EF6\u76EE\u304C\u60F3\u5B9A\u306E\u5F62\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`,res.status)}rows.push(row)});const next=data["@odata.nextLink"];if(next===void 0||next===null)return namedFromRows(rows,label,ms365NamedRow,res.status??void 0);const parsed=typeof next==="string"?graphNextCursor(next):null;if(parsed===null||parsed.kind!=="skiptoken"){throw new ResolveError(`${label}\u4E00\u89A7\u306E\u7D9A\u304D\uFF08@odata.nextLink\uFF09\u3092\u8AAD\u3081\u307E\u305B\
|
|
105
106
|
\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`,res.status)}cursor=parsed.value}throw new UsageError(`${label}\u304C\u591A\u3059\u304E\u308B\u305F\u3081\u540D\u524D\u3067\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093\uFF08${MS365_RESOLVE_MAX_PAGES} \u30DA\u30FC\u30B8\u3092\u8D85\u3048\u307E\u3057\u305F\uFF09`,"\u4E00\u89A7\u30B3\u30DE\u30F3\u30C9\u306E\u51FA\u529B\u306B\u3042\u308B id \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}get apiClient(){
|
|
106
|
-
return this.client}};function
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
json)?res.json["count"]:void 0;if(typeof count==="number"&&count>rows.length){throw new ResolveError(`${label}\u4E00\u89A7\u304C ${count} \u4EF6\u4E2D ${rows.length} \u4EF6\u3067\u5207\u308A\u8A70\u3081\u3089\u308C\u305F\u305F\u3081\u3001\u540D\u524D\u3067\u89E3\u6C7A\u3067\u304D\u307E\u305B\u3093\u3002ID \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002`,
|
|
110
|
-
row["is_default"])}}function namedListFrom(res,envelope,label,map){return namedFromRows(rawListFrom(res,envelope,label),label,map,res.status??void 0)}function namedFromRows(rows,label,map,status=200){return rows.map((row,index)=>{const mapped=map(row);if(mapped.id===null||mapped.name===null){throw new ResolveError(`${label}\u4E00\u89A7\u306E ${index+1} \u4EF6\u76EE\
|
|
111
|
-
status)}return{id:mapped.id,name:mapped.name,...mapped.code!==void 0?{code:mapped.code}:{},...mapped.aliases!==void 0&&mapped.aliases.length>0?{aliases:mapped.aliases}:{},...mapped.isDefault!==void 0?{isDefault:mapped.isDefault}:{}}})}function requireDefault(candidates,ctx){const hit=candidates.find(ref=>ref.isDefault===true);if(hit!==void 0)return hit;
|
|
112
|
-
label}\u304C\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\uFF09`,`\u6307\u5B9A\u3067\u304D\u308B${ctx.label}: ${candidates.map(ref=>ref.name).join(" / ")}\uFF08\u53E4\u3044\u30AD\u30E3\u30C3\u30B7\u30E5\u304C\u6B8B\u3063\u3066\u3044\u308B\u5834\u5408\u306F --refresh \u3067\u53D6\u308A\u76F4\u305B\u307E\u3059\uFF09`)}export{BACKLOG_BASE_PATH,backlogSpacePath,resolveNamed,requireDefaultProject,PRIVATE_TASKS_PATH,BACKLOG_SCOPE_LABEL,BACKLOG_PROJECT_SCOPE_LABEL,DEPARTMENTS_PATH,POSITIONS_PATH,JOB_TITLES_PATH,INQUIRY_CATEGORIES_PATH,NOTIFICATIONS_PATH,WORKFLOWS_PATH,REPORTS_PATH,SALES_ESTIMATES_PATH,SALES_INVOICES_PATH,SALES_CONTRACTS_PATH,SALES_INVOICE_AUTO_TEMPLATES_PATH,SALES_DEPOSITS_PATH,SALES_PURCHASES_PATH,SALES_SUPPLIER_PAYMENTS_PATH,SALES_SUPPLIER_PAYMENT_SCHEDULES_PATH,SALES_BUSINESS_PLACES_PATH,
|
|
113
|
-
SALES_SEAL_IMPRESSIONS_PATH,SALES_PURCHASE_AI_MAPPINGS_PATH,SALES_ESTIMATE_NO_RULES_PATH,SALES_INVOICE_NO_RULES_PATH,SALES_PURCHASE_NO_RULES_PATH,SALES_ESTIMATE_FORMATS_PATH,SALES_ROUNDING_SETTING_PATH,SALES_COMPANIES_PATH,CUSTOMERS_PATH,PROSPECTS_PATH,isExactNumericId,ORG_MASTER_LIMIT,TASK_MASTERS,Resolver};
|
|
107
|
+
return this.client}};function assertMembersComplete(rows){if(rows.length>=PROJECT_MEMBERS_LIMIT){throw new ResolveError(`\u30E1\u30F3\u30D0\u30FC\u304C ${PROJECT_MEMBERS_LIMIT} \u4EBA\u4EE5\u4E0A\u3044\u308B\u305F\u3081\u3001\u5168\u54E1\u3092\u7167\u5408\u3067\u304D\u307E\u305B\u3093\u3002ID \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return rows}function rawListFrom(res,envelope,label){if(!res.ok){throw new ResolveError(`${label}\u306E\u4E00\u89A7\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08HTTP ${res.
|
|
108
|
+
status}\uFF09\u3002\u63A5\u7D9A\u5148\u3068\u30ED\u30B0\u30A4\u30F3\u72B6\u614B\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`,res.status)}const list=isRecord(res.json)?res.json[envelope]:void 0;if(!Array.isArray(list)){throw new ResolveError(`${label}\u4E00\u89A7\u306E\u5FDC\u7B54\u306B ${envelope} \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`,res.status)}return list.map((row,index)=>{if(!isRecord(
|
|
109
|
+
row)){throw new ResolveError(`${label}\u4E00\u89A7\u306E ${index+1} \u4EF6\u76EE\u304C\u60F3\u5B9A\u306E\u5F62\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`,res.status)}return row})}function userRow(row){const email=str(row["email"]);const employeeCode=str(row["employee_code"]);return{id:str(row["user_id"]),name:str(row["user_name"]),code:employeeCode??email,aliases:[email,employeeCode].filter(v=>v!==null)}}function notificationCategoryRow(row){
|
|
110
|
+
return{id:str(row["key"]),name:str(row["name"]),code:str(row["key"])}}function inquiryCategoryRow(row){return{id:str(row["id"]),name:str(row["title"]),code:str(row["category_code"])}}function masterList(res,label){const rows=rawListFrom(res,"list",label);const count=isRecord(res.json)?res.json["count"]:void 0;if(typeof count==="number"&&count>rows.length){throw new ResolveError(`${label}\u4E00\u89A7\u304C ${count} \u4EF6\u4E2D ${rows.length} \u4EF6\u3067\u5207\u308A\u8A70\u3081\u3089\u308C\u305F\u305F\u3081\u3001\u540D\u524D\u3067\u89E3\u6C7A\u3067\u304D\u307E\u305B\u3093\u3002ID \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002`,
|
|
111
|
+
res.status)}return rows}function codedMasterRow(row){return{id:str(row["id"]),name:str(row["name"]),code:str(row["code"]),isDefault:truthyFlag(row["is_default"])}}function namedListFrom(res,envelope,label,map){return namedFromRows(rawListFrom(res,envelope,label),label,map,res.status??void 0)}function namedFromRows(rows,label,map,status=200){return rows.map((row,index)=>{const mapped=map(row);if(mapped.id===null||mapped.name===null){throw new ResolveError(`${label}\u4E00\u89A7\u306E ${index+1} \u4EF6\u76EE\
|
|
112
|
+
\u306B id / \u540D\u524D\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`,status)}return{id:mapped.id,name:mapped.name,...mapped.code!==void 0?{code:mapped.code}:{},...mapped.aliases!==void 0&&mapped.aliases.length>0?{aliases:mapped.aliases}:{},...mapped.isDefault!==void 0?{isDefault:mapped.isDefault}:{}}})}function requireDefault(candidates,ctx){const hit=candidates.find(ref=>ref.isDefault===true);if(hit!==void 0)return hit;
|
|
113
|
+
throw new UsageError(`${ctx.flag} \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08${ctx.scope??DEFAULT_LOOKUP_SCOPE}\u306B\u306F\u65E2\u5B9A\u306E${ctx.label}\u304C\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\uFF09`,`\u6307\u5B9A\u3067\u304D\u308B${ctx.label}: ${candidates.map(ref=>ref.name).join(" / ")}\uFF08\u53E4\u3044\u30AD\u30E3\u30C3\u30B7\u30E5\u304C\u6B8B\u3063\u3066\u3044\u308B\u5834\u5408\u306F --refresh \u3067\u53D6\u308A\u76F4\u305B\u307E\u3059\uFF09`)}export{BACKLOG_BASE_PATH,backlogSpacePath,resolveNamed,requireDefaultProject,PRIVATE_TASKS_PATH,BACKLOG_SCOPE_LABEL,BACKLOG_PROJECT_SCOPE_LABEL,PROJECT_MEMBERS_LIMIT,DEPARTMENTS_PATH,POSITIONS_PATH,JOB_TITLES_PATH,INQUIRY_CATEGORIES_PATH,NOTIFICATIONS_PATH,WORKFLOWS_PATH,REPORTS_PATH,SALES_ESTIMATES_PATH,SALES_INVOICES_PATH,SALES_CONTRACTS_PATH,SALES_INVOICE_AUTO_TEMPLATES_PATH,SALES_DEPOSITS_PATH,SALES_PURCHASES_PATH,SALES_SUPPLIER_PAYMENTS_PATH,SALES_SUPPLIER_PAYMENT_SCHEDULES_PATH,SALES_BUSINESS_PLACES_PATH,
|
|
114
|
+
SALES_PAYEES_PATH,SALES_SEAL_IMPRESSIONS_PATH,SALES_PURCHASE_AI_MAPPINGS_PATH,SALES_ESTIMATE_NO_RULES_PATH,SALES_INVOICE_NO_RULES_PATH,SALES_PURCHASE_NO_RULES_PATH,SALES_ESTIMATE_FORMATS_PATH,SALES_ROUNDING_SETTING_PATH,SALES_COMPANIES_PATH,CUSTOMERS_PATH,PROSPECTS_PATH,isExactNumericId,ORG_MASTER_LIMIT,TASK_MASTERS,Resolver};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{isModeId,isPermissionModeId}from"./chunk-NAUH75MM.js";import{API_TOKEN,HELP_TOKEN,isDomainName}from"./chunk-
|
|
3
|
+
import{isModeId,isPermissionModeId}from"./chunk-NAUH75MM.js";import{API_TOKEN,HELP_TOKEN,isDomainName}from"./chunk-34X4JXND.js";import{splitFlagToken}from"./chunk-QQRJLH6B.js";var BUILTIN_COMMANDS=["login","logout","whoami","update","task-loop"];var TASK_LOOP_ACTIONS=["run","status","stop","schedule","setup","charter","skill"];var VALUE_FLAGS=new Set(["-p","--print","--profile","--tenant","--mode","--permission-mode","--model","--allowed-tools","--disallowed-tools","--project","--engine","--interval","--max-cycles","--ai","--workspace","--ai-config-file","--now","--counts","--gate","--file","--out","--revision","--dir","--output","--query"]);var BOOLEAN_FLAGS=new Set(
|
|
4
4
|
["-h","--help","-v","--version","--no-tui","--doctor","--password","--token","--no-browser","--safe","--daemon","--force-runner","--force","--drain","--yes","-y","--no-ai-config-file","--verbose","--all","--dry-run","--debug","--refresh"]);function dispatch(argv,limit=2){const tokens=[];const indexes=[];let truncated=false;for(let i=0;i<argv.length;i++){const arg=argv[i];if(arg===void 0)continue;if(arg.startsWith("-")&&arg!=="-"){const{name,value:inline}=splitFlagToken(arg);if(BOOLEAN_FLAGS.has(
|
|
5
5
|
name)){if(inline!==void 0){truncated=true;break}continue}if(VALUE_FLAGS.has(name)){if(inline!==void 0)continue;const next=argv[i+1];if(next!==void 0&&(!next.startsWith("-")||next==="-"))i++;continue}truncated=true;break}if(arg===""||arg==="-")continue;if(tokens.length>=limit)break;tokens.push(arg);indexes.push(i)}return{tokens,indexes,truncated}}function isBuiltin(token){return token!==void 0&&BUILTIN_COMMANDS.includes(token)}function isTaskLoopAction(token){return token!==void 0&&TASK_LOOP_ACTIONS.
|
|
6
6
|
includes(token)}function resolveRoute(result){const{tokens,indexes}=result;const[first,second]=tokens;const firstIndex=indexes[0];if(first===void 0||firstIndex===void 0)return{kind:"none",consumed:[]};const consumed=[firstIndex];const secondIndex=indexes[1];if(isBuiltin(first)){if(first==="task-loop"&&isTaskLoopAction(second)){if(secondIndex!==void 0)consumed.push(secondIndex);return{kind:"builtin",command:first,action:second,consumed}}return{kind:"builtin",command:first,...first==="task-loop"?{
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
|
+
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
+
import{hoursMinutes}from"./chunk-YLXW7TIU.js";import{dateFlag,monthFlag}from"./chunk-4B3T4UE7.js";import{repeatedValues}from"./chunk-F7K37QG6.js";import{requireResolved,withResolved}from"./chunk-LXIAOCUW.js";import{isRecord,pick}from"./chunk-VTQAI52S.js";import{ApiResponseError,UsageError}from"./chunk-UFND7FBC.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
|
+
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
|
+
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
|
+
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 \
|
|
7
|
+
/ --to / --month \u3068\u306F\u4F75\u7528\u4E0D\u53EF",takesValue:true,placeholder:"<YYYY>"};function currentMonth(now=new Date){return`${String(now.getFullYear())}-${String(now.getMonth()+1).padStart(2,"0")}`}function monthRange(input,usage){const from=monthFlag(input.flags,FROM_FLAG.name);const to=monthFlag(input.flags,TO_FLAG.name);const month=monthFlag(input.flags,MONTH_FLAG.name);if(month!==void 0){if(from!==void 0||to!==void 0){throw new UsageError("--month \u3068 --from / --to \u306F\u4F75\u7528\u3067\u304D\u307E\u305B\u3093",
|
|
8
|
+
usage)}return{from:month,to:month,defaulted:false}}if(from===void 0&&to===void 0){const now=currentMonth();return{from:now,to:now,defaulted:true}}if(from===void 0||to===void 0){throw new UsageError("--from \u3068 --to \u306F\u4E21\u65B9\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF081\u304B\u6708\u3060\u3051\u306A\u3089 --month\uFF09",usage)}if(from>to){throw new UsageError(`--from\uFF08${from}\uFF09\u304C --to\uFF08${to}\uFF09\u3088\u308A\u5F8C\u306B\u306A\u3063\u3066\u3044\u307E\u3059`,usage)}
|
|
9
|
+
return{from,to,defaulted:false}}function rangeNotes(range){return range.defaulted?[`\u671F\u9593\u306E\u6307\u5B9A\u304C\u7121\u3044\u306E\u3067\u5F53\u6708\uFF08${range.from}\u30FB\u3053\u306E\u7AEF\u672B\u306E\u6642\u8A08\uFF09\u3092\u96C6\u8A08\u3057\u307E\u3059\u3002\u5225\u306E\u6708\u306F --month / --from --to \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002`]:[]}function noArgs(input,usage){if(input.args.length>0){throw new UsageError(`\u4F4D\u7F6E\u5F15\u6570\u306F\u53D7\u3051\u53D6\u308A\u307E\u305B\u3093: ${input.
|
|
10
|
+
args.join(" ")}`,usage)}}function listIn(body,key,label){const list=isRecord(body)?body[key]:void 0;if(!isRecord(body)||body["result"]!==true||!Array.isArray(list)){throw new ApiResponseError(`${label}\u306E\u5FDC\u7B54\u306B ${key} \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return list.map(row=>isRecord(row)?row:{})}function dataOf(body,label){if(!isRecord(body)||body["result"]!==true||!("data"in body)){throw new ApiResponseError(
|
|
11
|
+
`${label}\u306E\u5FDC\u7B54\u306B data \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return body["data"]}function dataList(body,key,label){return listIn({result:true,[key]:dataOf(body,label)?.[key]},key,label)}function recordOf(value){return isRecord(value)?value:{}}function monthColumns(row,field,months){const values=new Map;const entries=row["by_month"];if(Array.isArray(entries)){for(const entry of entries){if(isRecord(
|
|
12
|
+
entry)&&typeof entry["year_month"]==="string")values.set(entry["year_month"],entry[field]??null)}}const out={};for(const month of months)out[month]=values.has(month)?values.get(month):null;return out}function monthsBetween(from,to){const pattern=/^(\d{4})-(\d{2})$/;const a=typeof from==="string"?pattern.exec(from):null;const b=typeof to==="string"?pattern.exec(to):null;if(a===null||b===null)return[];const months=[];let index=Number(a[1])*12+Number(a[2])-1;const last=Number(b[1])*12+Number(b[2])-
|
|
13
|
+
1;for(let n=0;index<=last&&n<120;index++,n++){months.push(`${String(Math.floor(index/12))}-${String(index%12+1).padStart(2,"0")}`)}return months}function responseMonths(body){if(!isRecord(body))return[];const listed=body["year_months"];if(Array.isArray(listed)&&listed.every(m=>typeof m==="string"))return listed;return monthsBetween(body["start_ym"],body["end_ym"])}function summaryNote(body,label,parts){const summary=isRecord(body)&&isRecord(body["summary"])?body["summary"]:null;if(summary===null)
|
|
14
|
+
return[];const text=parts.map(([key,name])=>`${name} ${String(summary[key]??"-")}`).join(" / ");return[`${label}: ${text}`]}function periodNote(body){if(!isRecord(body))return[];const from=body["start_ym"];const to=body["end_ym"];return typeof from==="string"&&typeof to==="string"?[`\u671F\u9593: ${from} \u301C ${to}`]:[]}var SCOPE_FLAG={name:"--scope",summary:"\u96C6\u8A08\u306E\u8EF8\uFF08project\uFF1D\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5225\u30FB\u65E2\u5B9A / user\uFF1D\u30E6\u30FC\u30B6\u30FC\u5225\uFF09",
|
|
15
|
+
takesValue:true,placeholder:"<project|user>"};var PROJECT_FILTER_FLAG={name:"--project",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3067\u7D5E\u308A\u8FBC\u3080\uFF08\u30B3\u30FC\u30C9\u30FBID\uFF09",takesValue:true,placeholder:"<\u30B3\u30FC\u30C9|ID>"};var USER_FLAG={name:"--user",summary:"\u30E6\u30FC\u30B6\u30FC\u3067\u7D5E\u308A\u8FBC\u3080\uFF08\u6C0F\u540D\u30FB\u30E1\u30FC\u30EB\u30FBID\u30FBme\uFF09",takesValue:true,placeholder:"<\u30E6\u30FC\u30B6\u30FC>"};var DEPARTMENT_FLAG={name:"\
|
|
16
|
+
--department",summary:"\u90E8\u7F72\u3067\u7D5E\u308A\u8FBC\u3080\uFF08\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u30FBID\uFF09",takesValue:true,placeholder:"<\u90E8\u7F72>"};var OPERATING_USAGE="twp analysis operating-hours list [--scope project|user] [--month <YYYY-MM> | --from <YYYY-MM> --to <YYYY-MM> | --year <YYYY>] [--project <\u30B3\u30FC\u30C9>] [--user <\u30E6\u30FC\u30B6\u30FC>] [--department <\u90E8\u7F72>]";function operatingScope(input){const raw=input.flags.get(SCOPE_FLAG.name)?.trim()??
|
|
17
|
+
"project";if(raw!=="project"&&raw!=="user"){throw new UsageError(`--scope \u306F project \u304B user \u3067\u3059\uFF08\u53D7\u3051\u53D6\u3063\u305F\u5024: ${raw}\uFF09`,OPERATING_USAGE)}return raw}function checkOperatingFilters(input,scope){const misplaced=scope==="project"?[USER_FLAG.name,DEPARTMENT_FLAG.name].filter(name=>input.flags.has(name)):[PROJECT_FILTER_FLAG.name].filter(name=>input.flags.has(name));if(misplaced.length>0){throw new UsageError(`--scope ${scope} \u3067\u306F ${misplaced.
|
|
18
|
+
join(" / ")} \u304C\u52B9\u304D\u307E\u305B\u3093\uFF08\u30B5\u30FC\u30D0\u304C\u7121\u8996\u3057\u307E\u3059\uFF09`,scope==="project"?"--user / --department \u306F --scope user \u3068\u4E00\u7DD2\u306B\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002":"--project \u306F --scope project\uFF08\u65E2\u5B9A\uFF09\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}}function operatingPeriod(input){const year=input.flags.get(YEAR_FLAG.name);if(year===void 0){const range=monthRange(input,
|
|
19
|
+
OPERATING_USAGE);return{query:{start_ym:range.from,end_ym:range.to},range}}if([FROM_FLAG,TO_FLAG,MONTH_FLAG].some(flag=>input.flags.has(flag.name))){throw new UsageError("--year \u3068 --month / --from / --to \u306F\u4F75\u7528\u3067\u304D\u307E\u305B\u3093",OPERATING_USAGE)}const value=year.trim();if(!/^\d{4}$/.test(value)||Number(value)<2e3||Number(value)>2100){throw new UsageError(`--year \u306F 2000\u301C2100 \u306E\u897F\u66A64\u6841\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u53D7\u3051\u53D6\u3063\u305F\u5024: ${year}\
|
|
20
|
+
\uFF09`,OPERATING_USAGE)}return{query:{year:value},range:null}}async function resolveFilters(input,ctx){const resolved={};const project=input.flags.get(PROJECT_FILTER_FLAG.name);const user=input.flags.get(USER_FLAG.name);const department=input.flags.get(DEPARTMENT_FLAG.name);if(project!==void 0)resolved["projectId"]=(await ctx.resolver.project(project)).id;if(user!==void 0)resolved["userId"]=(await ctx.resolver.user(user,USER_FLAG.name)).id;if(department!==void 0)resolved["departmentId"]=(await ctx.
|
|
21
|
+
resolver.department(department,DEPARTMENT_FLAG.name)).id;return withResolved(input,resolved)}function resolvedOrUndefined(input,key){return input.resolved?.[key]}var operatingHoursList={name:"list",summary:"\u7A3C\u50CD\u5206\u6790\uFF08\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5225\u30FB\u30E6\u30FC\u30B6\u30FC\u5225\u306E\u7A3C\u50CD\u6642\u9593\uFF09\u3092\u8868\u793A\u3059\u308B",usage:OPERATING_USAGE,description:"\u753B\u9762\u306E\u300C\u7A3C\u50CD\u5206\u6790\u300D\u3068\u540C\u3058 GET /api/v2/analysis/operating-hours \u3067\u3059\u3002\n\u671F\u9593\u3092\u6307\u5B9A\u3057\u306A\u3051\u308C\u3070\u5F53\u6708\uFF08\u3053\u306E\u7AEF\u672B\u306E\u6642\u8A08\uFF09\u3067\u3059\u3002\u671F\u9593\u306F\u6700\
|
|
22
|
+
\u592724\u304B\u6708\uFF08\u30B5\u30FC\u30D0\u304C\u691C\u67FB\u3057\u307E\u3059\uFF09\u3002\n--scope project\uFF08\u65E2\u5B9A\uFF09\u306F --project \u3060\u3051\u3001--scope user \u306F --user / --department \u3060\u3051\u3067\u7D5E\u308A\u8FBC\u3081\u307E\u3059\u3002\n--output table / text / tsv \u306F\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\uFF08\u307E\u305F\u306F\u30E6\u30FC\u30B6\u30FC\uFF09\u3054\u3068\u306B1\u884C\u3067\u3001\u6708\u3054\u3068\u306E\u6642\u9593\u3092 YYYY-MM \u5217\u306B\u4E26\u3079\u307E\u3059\u3002\n\u30E1\u30F3\u30D0\u30FC\u5225\uFF08by_user\uFF09\u30FB\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5225\uFF08by_project\uFF09\u30FB\u4E88\u6E2C\u306E\u6839\u62E0\uFF08forecast_basis\uFF09\u306F --output json \u304B --query \u3067\u8AAD\u3081\u307E\u3059\u3002\n\u5024\u306F\u30B5\u30FC\u30D0\u306E\u96C6\u8A08\u306E\u307E\u307E\u3067\u3001CLI \u306F\u518D\u8A08\u7B97\u3057\u307E\u305B\u3093\u3002",
|
|
23
|
+
flags:[SCOPE_FLAG,MONTH_FLAG,FROM_FLAG,TO_FLAG,YEAR_FLAG,PROJECT_FILTER_FLAG,USER_FLAG,DEPARTMENT_FLAG],forbidden:analysisForbidden(levelGuidance("\u7A3C\u50CD\u5206\u6790","\u52E4\u6020\u3068\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u4E21\u65B9")),async prepare(input,ctx){noArgs(input,OPERATING_USAGE);const scope=operatingScope(input);checkOperatingFilters(input,scope);operatingPeriod(input);return resolveFilters(input,ctx)},plan(input){noArgs(input,OPERATING_USAGE);const scope=operatingScope(
|
|
24
|
+
input);checkOperatingFilters(input,scope);const{query}=operatingPeriod(input);return{method:"GET",path:`${ANALYSIS_PATH}/operating-hours`,query:{scope,...query,project_id:resolvedOrUndefined(input,"projectId"),user_id:resolvedOrUndefined(input,"userId"),department_id:resolvedOrUndefined(input,"departmentId")}}},plannedNotes:input=>{const{range}=operatingPeriod(input);return range===null?[]:rangeNotes(range)},summarize:body=>operatingRows(body),raw:body=>{operatingRows(body);return body},notes:body=>{
|
|
25
|
+
const scope=isRecord(body)?body["scope"]:void 0;return[...periodNote(body),...scope==="user"?summaryNote(body,"\u5408\u8A08",[["total_hours","\u7A3C\u50CD"],["total_overtime_hours","\u6B8B\u696D"],["user_count","\u4EBA\u6570"]]):summaryNote(body,"\u5408\u8A08",[["total_hours","\u7A3C\u50CD"],["project_count","\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u6570"]])]}};function operatingRows(body){const scope=isRecord(body)?body["scope"]:void 0;const months=responseMonths(body);if(scope==="project"){return listIn(
|
|
26
|
+
body,"projects","\u7A3C\u50CD\u5206\u6790").map(row=>({project_code:row["project_code"]??null,project_name:row["project_name"]??null,...monthColumns(row,"hours",months),total_hours:row["total_hours"]??null,members:Array.isArray(row["by_user"])?row["by_user"].length:null,project_id:row["project_id"]??null}))}if(scope==="user"){return listIn(body,"users","\u7A3C\u50CD\u5206\u6790").map(row=>({department_name:row["department_name"]??null,user_name:row["user_name"]??null,email:row["email"]??null,...monthColumns(
|
|
27
|
+
row,"hours",months),total_hours:row["total_hours"]??null,total_standard_hours:row["total_standard_hours"]??null,total_overtime_hours:row["total_overtime_hours"]??null,forecast_hours:row["forecast_hours"]??null,forecast_deviation_hours:row["forecast_deviation_hours"]??null,user_id:row["user_id"]??null}))}throw new ApiResponseError("\u7A3C\u50CD\u5206\u6790\u306E\u5FDC\u7B54\u306E scope \u304C project / user \u306E\u3069\u3061\u3089\u3067\u3082\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}
|
|
28
|
+
var PROJECT_ASSIGNMENT_USAGE="twp analysis project-assignment list [--month <YYYY-MM> | --from <YYYY-MM> --to <YYYY-MM>] [--project <\u30B3\u30FC\u30C9>]";var projectAssignmentList={name:"list",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30A2\u30B5\u30A4\u30F3\uFF08\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3054\u3068\u306E\u30A2\u30B5\u30A4\u30F3\u6642\u9593\uFF09\u3092\u8868\u793A\u3059\u308B",usage:PROJECT_ASSIGNMENT_USAGE,description:"\u753B\u9762\u306E\u300C\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30A2\u30B5\u30A4\u30F3\u300D\u306E\u30BF\u30A4\u30E0\u30E9\u30A4\u30F3\u3068\u540C\u3058 GET /api/v2/analysis/project-assi\
|
|
29
|
+
gnment \u3067\u3059\uFF08\u7BC4\u56F2\u6307\u5B9A\uFF09\u3002\n\u671F\u9593\u3092\u6307\u5B9A\u3057\u306A\u3051\u308C\u3070\u5F53\u6708\uFF08\u3053\u306E\u7AEF\u672B\u306E\u6642\u8A08\uFF09\u3067\u3059\u3002\u5BFE\u8C61\u306F\u7A3C\u50CD\u4E2D\uFF08active\uFF09\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3067\u3059\u3002\n--output table / text / tsv \u306F\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3054\u3068\u306B1\u884C\u3067\u3001\u6708\u3054\u3068\u306E\u30A2\u30B5\u30A4\u30F3\u6642\u9593\u3092 YYYY-MM \u5217\u306B\u4E26\u3079\u307E\u3059\u3002\n\u30E1\u30F3\u30D0\u30FC\u3054\u3068\u306E\u5185\u8A33\uFF08members\uFF09\u306F --output json \u304B --query \u3067\u8AAD\u3081\u307E\u3059\u3002",
|
|
30
|
+
flags:[MONTH_FLAG,FROM_FLAG,TO_FLAG,PROJECT_FILTER_FLAG],forbidden:analysisForbidden(levelGuidance("\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30A2\u30B5\u30A4\u30F3\u5206\u6790","\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8")),async prepare(input,ctx){noArgs(input,PROJECT_ASSIGNMENT_USAGE);monthRange(input,PROJECT_ASSIGNMENT_USAGE);return resolveFilters(input,ctx)},plan(input){noArgs(input,PROJECT_ASSIGNMENT_USAGE);const range=monthRange(input,PROJECT_ASSIGNMENT_USAGE);return{method:"GET",path:`${ANALYSIS_PATH}\
|
|
31
|
+
/project-assignment`,query:{start_ym:range.from,end_ym:range.to,project_id:resolvedOrUndefined(input,"projectId")}}},plannedNotes:input=>rangeNotes(monthRange(input,PROJECT_ASSIGNMENT_USAGE)),summarize:body=>listIn(body,"projects","\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30A2\u30B5\u30A4\u30F3\u5206\u6790").map(row=>({project_code:row["project_code"]??null,project_name:row["project_name"]??null,...monthColumns(row,"assigned_hours",responseMonths(body)),total_assigned_hours:row["total_assigned_hour\
|
|
32
|
+
s"]??null,total_estimated_hours:row["total_estimated_hours"]??null,member_count:row["member_count"]??null,project_id:row["project_id"]??null})),raw:body=>{listIn(body,"projects","\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30A2\u30B5\u30A4\u30F3\u5206\u6790");return body},notes:body=>[...periodNote(body),...summaryNote(body,"\u5408\u8A08",[["project_count","\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u6570"],["total_assigned_hours","\u30A2\u30B5\u30A4\u30F3\u6642\u9593"],["total_estimated_hours","\u3046\u3061\u898B\u8FBC\u307F"]])]};
|
|
33
|
+
var STAFF_ASSIGNMENT_USAGE="twp analysis staff-assignment list [--month <YYYY-MM> | --from <YYYY-MM> --to <YYYY-MM>] [--user <\u30E6\u30FC\u30B6\u30FC>] [--department <\u90E8\u7F72>]";var staffAssignmentList={name:"list",summary:"\u4EBA\u6750\u5225\u30A2\u30B5\u30A4\u30F3\uFF08\u30E6\u30FC\u30B6\u30FC\u3054\u3068\u306E\u30A2\u30B5\u30A4\u30F3\u6642\u9593\u3068\u7A3C\u50CD\u7387\uFF09\u3092\u8868\u793A\u3059\u308B",usage:STAFF_ASSIGNMENT_USAGE,description:"\u753B\u9762\u306E\u300C\u4EBA\u6750\u5225\u30A2\u30B5\u30A4\u30F3\u300D\u3068\u540C\u3058 GET /api/v2/analysis/sta\
|
|
34
|
+
ff-assignment \u3067\u3059\uFF08\u7BC4\u56F2\u6307\u5B9A\uFF09\u3002\n\u671F\u9593\u3092\u6307\u5B9A\u3057\u306A\u3051\u308C\u3070\u5F53\u6708\uFF08\u3053\u306E\u7AEF\u672B\u306E\u6642\u8A08\uFF09\u3067\u3059\u3002\n--output table / text / tsv \u306F\u30E6\u30FC\u30B6\u30FC\u3054\u3068\u306B1\u884C\u3067\u3001\u6708\u3054\u3068\u306E\u30A2\u30B5\u30A4\u30F3\u6642\u9593\u3092 YYYY-MM \u5217\u306B\u4E26\u3079\u307E\u3059\u3002\n\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5225\u306E\u5185\u8A33\uFF08projects\uFF09\u30FB\u7A3C\u50CD\u306E\u4F4E\u3044\u4EBA\uFF08bench_users\uFF09\u30FB\u8D85\u904E\u3057\u3066\u3044\u308B\u4EBA\uFF08overallocated_users\uFF09\u306F\n--output json \u304B --query \u3067\u8AAD\u3081\u307E\u3059\u3002\u7A3C\u50CD\u7387\u306F\u30B5\u30FC\u30D0\u306E\u5024\u306E\u307E\u307E\u3067\u3059\u3002",
|
|
35
|
+
flags:[MONTH_FLAG,FROM_FLAG,TO_FLAG,USER_FLAG,DEPARTMENT_FLAG],forbidden:analysisForbidden(levelGuidance("\u4EBA\u6750\u5225\u30A2\u30B5\u30A4\u30F3\u5206\u6790","\u4EBA\u4E8B\u7BA1\u7406")),async prepare(input,ctx){noArgs(input,STAFF_ASSIGNMENT_USAGE);monthRange(input,STAFF_ASSIGNMENT_USAGE);return resolveFilters(input,ctx)},plan(input){noArgs(input,STAFF_ASSIGNMENT_USAGE);const range=monthRange(input,STAFF_ASSIGNMENT_USAGE);return{method:"GET",path:`${ANALYSIS_PATH}/staff-assignment`,query:{start_ym:range.
|
|
36
|
+
from,end_ym:range.to,user_id:resolvedOrUndefined(input,"userId"),department_id:resolvedOrUndefined(input,"departmentId")}}},plannedNotes:input=>rangeNotes(monthRange(input,STAFF_ASSIGNMENT_USAGE)),summarize:body=>listIn(body,"users","\u4EBA\u6750\u5225\u30A2\u30B5\u30A4\u30F3\u5206\u6790").map(row=>({department_name:row["department_name"]??null,user_name:row["user_name"]??null,...monthColumns(row,"assigned_hours",responseMonths(body)),total_assigned_hours:row["total_assigned_hours"]??null,total_standard_hours:row["\
|
|
37
|
+
total_standard_hours"]??null,avg_utilization_rate:row["avg_utilization_rate"]??null,avg_actual_utilization_rate:row["avg_actual_utilization_rate"]??null,user_id:row["user_id"]??null})),raw:body=>{listIn(body,"users","\u4EBA\u6750\u5225\u30A2\u30B5\u30A4\u30F3\u5206\u6790");return body},notes:body=>[...periodNote(body),...summaryNote(body,"\u5408\u8A08",[["user_count","\u4EBA\u6570"],["avg_utilization_rate","\u5E73\u5747\u7A3C\u50CD\u7387"],["overallocated_count","\u8D85\u904E"],["bench_count","\u4F4E\
|
|
38
|
+
\u7A3C\u50CD"]])]};var CAPACITY_FORBIDDEN=analysisForbidden(levelGuidance("\u30AD\u30E3\u30D1\u30B7\u30C6\u30A3\u30D7\u30E9\u30F3\u30CB\u30F3\u30B0","\u52E4\u6020\u3068\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u4E21\u65B9"));var CAPACITY_USER_FLAG={name:"--user",summary:"\u5BFE\u8C61\u306E\u30E6\u30FC\u30B6\u30FC\uFF08\u6C0F\u540D\u30FB\u30E1\u30FC\u30EB\u30FBID\u30FBme\uFF09\u3002\u7E70\u308A\u8FD4\u3057\u6307\u5B9A\u3067\u304D\u308B\u3002\u7121\u3051\u308C\u3070\u5728\u7C4D\u8005\u5168\u54E1",
|
|
39
|
+
takesValue:true,placeholder:"<\u30E6\u30FC\u30B6\u30FC>",repeatable:true};function capacityData(body,label){const data=dataOf(body,label);if(!isRecord(data)){throw new ApiResponseError(`${label}\u306E\u5FDC\u7B54\u306E data \u304C\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return data}function capacityMembers(body){return dataList(body,"members","\u30AD\u30E3\u30D1\u30B7\u30C6\u30A3")}
|
|
40
|
+
var CAPACITY_COLUMNS=["user_name","standard_hours_per_day","available_hours_per_week","total_estimated_hours","utilization_rate","status","due_this_week_task_count","active_task_count","tasks_with_estimate","tasks_without_estimate","truncated","user_id"];var ALERT_COLUMNS=["user_name","status","utilization_rate","excess_hours","total_estimated_hours","available_hours_per_week","due_this_week_task_count","active_task_count","user_id"];function noArgsPlan(usage,path){return input=>{noArgs(input,usage);
|
|
41
|
+
return{method:"GET",path}}}var capacityResource={name:"capacity",summary:"\u30AD\u30E3\u30D1\u30B7\u30C6\u30A3\u30D7\u30E9\u30F3\u30CB\u30F3\u30B0\uFF08\u4ECA\u9031\u306E\u898B\u7A4D\u5DE5\u6570\u3068\u7A3C\u50CD\u7387\u30FB\u904E\u8CA0\u8377\u30A2\u30E9\u30FC\u30C8\u30FB\u518D\u5206\u914D\u5019\u88DC\u30FB\u6A19\u6E96\u52E4\u52D9\u6642\u9593\uFF09",operations:[{name:"list",summary:"\u30E1\u30F3\u30D0\u30FC\u3054\u3068\u306E\u4ECA\u9031\u306E\u30AD\u30E3\u30D1\u30B7\u30C6\u30A3\u3068\u7A3C\u50CD\u7387\u3092\u8868\u793A\u3059\u308B",
|
|
42
|
+
usage:"twp analysis capacity list [--user <\u30E6\u30FC\u30B6\u30FC> ...]",description:"\u753B\u9762\u306E\u300C\u30AD\u30E3\u30D1\u30B7\u30C6\u30A3\u300D\u306E\u8868\u3068\u540C\u3058 GET /api/v2/analysis/capacity \u3067\u3059\u3002\u9031\u306F\u4ECA\u9031\uFF08\u6708\u301C\u65E5\u30FB\u30B5\u30FC\u30D0\u304C\u6C7A\u3081\u307E\u3059\uFF09\u3002\n--user \u3092\u4ED8\u3051\u306A\u3051\u308C\u3070\u5728\u7C4D\u8005\u5168\u54E1\u3067\u3059\u3002\u9031\u306E\u7BC4\u56F2\u30FB\u904E\u8CA0\u8377\u306E\u4EBA\u6570\u306F stderr \u306B\u51FA\u3057\u307E\u3059\u3002",
|
|
43
|
+
flags:[CAPACITY_USER_FLAG],forbidden:CAPACITY_FORBIDDEN,async prepare(input,ctx){noArgs(input,"twp analysis capacity list help");const ids=[];for(const ref of repeatedValues(input,CAPACITY_USER_FLAG.name)){ids.push((await ctx.resolver.user(ref,CAPACITY_USER_FLAG.name)).id)}return ids.length===0?input:withResolved(input,{userIds:ids.join(",")})},plan(input){noArgs(input,"twp analysis capacity list help");return{method:"GET",path:`${ANALYSIS_PATH}/capacity`,query:{user_ids:resolvedOrUndefined(input,
|
|
44
|
+
"userIds")}}},summarize:body=>capacityMembers(body).map(row=>pick(row,CAPACITY_COLUMNS)),raw:body=>{dataList(body,"members","\u30AD\u30E3\u30D1\u30B7\u30C6\u30A3");return capacityData(body,"\u30AD\u30E3\u30D1\u30B7\u30C6\u30A3")},notes:body=>{const summary=recordOf(capacityData(body,"\u30AD\u30E3\u30D1\u30B7\u30C6\u30A3")["summary"]);const notes=[`\u9031: ${String(summary["week_start"]??"-")} \u301C ${String(summary["week_end"]??"-")} / \u4EBA\u6570 ${String(summary["total_members"]??"-")} / \u904E\u8CA0\u8377\
|
|
45
|
+
${String(summary["overloaded_count"]??"-")} / \u6CE8\u610F ${String(summary["caution_count"]??"-")} / \u5224\u5B9A\u4E0D\u80FD ${String(summary["unknown_count"]??"-")}`];const truncated=summary["truncated_member_count"];if(typeof truncated==="number"&&truncated>0){notes.push(`${String(truncated)} \u4EBA\u306F\u30BF\u30B9\u30AF\u306E\u4EF6\u6570\u304C\u4E0A\u9650\u306B\u9054\u3057\u305F\u305F\u3081\u3001\u898B\u7A4D\u5DE5\u6570\u304C\u9014\u4E2D\u307E\u3067\u306E\u96C6\u8A08\u3067\u3059\uFF08truncated \u5217\uFF09\u3002`)}
|
|
46
|
+
return notes}},{name:"alerts",summary:"\u76F4\u5C5E\u306E\u90E8\u4E0B\u306E\u3046\u3061\u3001\u6CE8\u610F\u30FB\u904E\u8CA0\u8377\u306E\u30E1\u30F3\u30D0\u30FC\u3092\u8868\u793A\u3059\u308B",usage:"twp analysis capacity alerts",description:"GET /api/v2/analysis/capacity/alerts\u3002\u5BFE\u8C61\u306F\u3042\u306A\u305F\u304C\u4E0A\u9577\u3068\u3057\u3066\u767B\u9332\u3055\u308C\u3066\u3044\u308B\u76F4\u5C5E\u306E\u90E8\u4E0B\u3060\u3051\u3067\u3059\n\uFF08\u6CE8\u610F caution\u30FB\u904E\u8CA0\u8377 overloaded \u306E\u4EBA\u3060\u3051\u304C\u4E26\u3073\u307E\u3059\uFF09\u3002",
|
|
47
|
+
flags:[],forbidden:CAPACITY_FORBIDDEN,plan:noArgsPlan("twp analysis capacity alerts help",`${ANALYSIS_PATH}/capacity/alerts`),summarize:body=>dataList(body,"alerts","\u30AD\u30E3\u30D1\u30B7\u30C6\u30A3\u306E\u30A2\u30E9\u30FC\u30C8").map(row=>pick(row,ALERT_COLUMNS)),raw:body=>{dataList(body,"alerts","\u30AD\u30E3\u30D1\u30B7\u30C6\u30A3\u306E\u30A2\u30E9\u30FC\u30C8");return capacityData(body,"\u30AD\u30E3\u30D1\u30B7\u30C6\u30A3\u306E\u30A2\u30E9\u30FC\u30C8")},notes:body=>{const summary=recordOf(
|
|
48
|
+
capacityData(body,"\u30AD\u30E3\u30D1\u30B7\u30C6\u30A3\u306E\u30A2\u30E9\u30FC\u30C8")["summary"]);return[`\u76F4\u5C5E\u306E\u90E8\u4E0B ${String(summary["total_subordinates"]??"-")} \u4EBA / \u904E\u8CA0\u8377 ${String(summary["overloaded_count"]??"-")} / \u6CE8\u610F ${String(summary["caution_count"]??"-")}`]}},{name:"redistribution",summary:"\u904E\u8CA0\u8377\u306E\u30E1\u30F3\u30D0\u30FC\u3068\u3001\u4ED5\u4E8B\u3092\u79FB\u305B\u308B\u5019\u88DC\u3092\u8868\u793A\u3059\u308B",usage:"twp \
|
|
49
|
+
analysis capacity redistribution",description:"GET /api/v2/analysis/capacity/redistribution\u3002--output table / text / tsv \u306F\u300C\u904E\u8CA0\u8377\u306E\u30E1\u30F3\u30D0\u30FC \xD7 \u5019\u88DC\u300D1\u7D44\u30671\u884C\u3067\u3059\n\uFF08\u5019\u88DC\u304C\u7121\u3044\u30E1\u30F3\u30D0\u30FC\u306F candidate_name \u304C\u7A7A\u306E1\u884C\uFF09\u3002",flags:[],forbidden:CAPACITY_FORBIDDEN,plan:noArgsPlan("twp analysis capacity redistribution help",`${ANALYSIS_PATH}/capacity/redistribut\
|
|
50
|
+
ion`),summarize:body=>dataList(body,"overloaded_members","\u30AD\u30E3\u30D1\u30B7\u30C6\u30A3\u306E\u518D\u5206\u914D\u5019\u88DC").flatMap(member=>{const base={user_name:member["user_name"]??null,utilization_rate:member["utilization_rate"]??null,excess_hours:member["excess_hours"]??null};const candidates=Array.isArray(member["candidates"])?member["candidates"].map(recordOf):[];if(candidates.length===0)return[{...base,candidate_name:null,candidate_utilization_rate:null,spare_capacity_hours:null,
|
|
51
|
+
backlog_task_count:null}];return candidates.map(candidate=>({...base,candidate_name:candidate["user_name"]??null,candidate_utilization_rate:candidate["utilization_rate"]??null,spare_capacity_hours:candidate["spare_capacity_hours"]??null,backlog_task_count:candidate["backlog_task_count"]??null}))}),raw:body=>{dataList(body,"overloaded_members","\u30AD\u30E3\u30D1\u30B7\u30C6\u30A3\u306E\u518D\u5206\u914D\u5019\u88DC");return capacityData(body,"\u30AD\u30E3\u30D1\u30B7\u30C6\u30A3\u306E\u518D\u5206\u914D\u5019\u88DC")}},
|
|
52
|
+
{name:"settings",summary:"\u6A19\u6E96\u52E4\u52D9\u6642\u9593\uFF081\u65E5\u3042\u305F\u308A\uFF09\u3092\u500B\u5225\u306B\u8A2D\u5B9A\u3057\u3066\u3044\u308B\u30E6\u30FC\u30B6\u30FC\u3092\u8868\u793A\u3059\u308B",usage:"twp analysis capacity settings",description:"GET /api/v2/analysis/capacity/settings\u3002\u4E26\u3076\u306E\u306F\u500B\u5225\u306B\u4FDD\u5B58\u3057\u305F\u30E6\u30FC\u30B6\u30FC\u3060\u3051\u3067\u3059\uFF08\u305D\u308C\u4EE5\u5916\u306F\u65E2\u5B9A\u5024\u3067\u8A08\u7B97\u3055\u308C\u307E\u3059\u3002\n\u4F7F\u308F\u308C\u3066\u3044\u308B\u5024\u306F twp analysis capacity list \u306E standard_hours_per_day \u5217\uFF09\u3002\u5909\u66F4\u306F\u753B\u9762\u304B\u3089\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002",
|
|
53
|
+
flags:[],forbidden:CAPACITY_FORBIDDEN,plan:noArgsPlan("twp analysis capacity settings help",`${ANALYSIS_PATH}/capacity/settings`),summarize:body=>settingsRows(body).map(row=>pick(row,["user_id","standard_hours_per_day","updated_at"])),raw:body=>settingsRows(body)}]};function settingsRows(body){const data=dataOf(body,"\u6A19\u6E96\u52E4\u52D9\u6642\u9593\u306E\u8A2D\u5B9A");if(!Array.isArray(data)){throw new ApiResponseError("\u6A19\u6E96\u52E4\u52D9\u6642\u9593\u306E\u8A2D\u5B9A\u306E\u5FDC\u7B54\u306E data \u304C\u914D\u5217\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}
|
|
54
|
+
return data.map(recordOf)}var TEAM_FLAG={name:"--team",summary:"\u81EA\u5206\u304C\u4E0A\u9577\u306E\u30E1\u30F3\u30D0\u30FC\u306E\u5206\u3092\u8868\u793A\u3059\u308B\uFF08\u7121\u3051\u308C\u3070\u81EA\u5206\u306E\u5206\uFF09",takesValue:false};var WORKLOAD_DATE_FLAG={name:"--date",summary:"\u691C\u77E5\u65E5\u3067\u7D5E\u308A\u8FBC\u3080\uFF08YYYY-MM-DD\u30FB--team \u306E\u3068\u304D\u3060\u3051\uFF09",takesValue:true,placeholder:"<YYYY-MM-DD>"};var WORKLOAD_USAGE="twp analysis workload list [\
|
|
55
|
+
--team [--date <YYYY-MM-DD>]]";var WORKLOAD_COLUMNS=["detection_date","user_name","risk_level","risk_score","overtime_ratio","task_load_ratio","deadline_miss_rate","completion_speed_ratio","user_id"];function workloadRows(body){return listIn({result:isRecord(body)?body["result"]:void 0,data:dataOf(body,"\u8CA0\u8377\u72B6\u6CC1")},"data","\u8CA0\u8377\u72B6\u6CC1")}var workloadResource={name:"workload",summary:"\u904E\u8CA0\u8377\u691C\u77E5\u30A2\u30E9\u30FC\u30C8\uFF08\u6B8B\u696D\u30FB\u30BF\u30B9\u30AF\u91CF\u30FB\u671F\u9650\u8D85\u904E\u304B\u3089\u51FA\u3059\u8CA0\u8377\u306E\u30EA\u30B9\u30AF\uFF09",
|
|
56
|
+
operations:[{name:"list",summary:"\u8CA0\u8377\u306E\u30EA\u30B9\u30AF\u5224\u5B9A\u3092\u8868\u793A\u3059\u308B\uFF08\u65E2\u5B9A\u306F\u81EA\u5206\u30FB--team \u3067\u90E8\u4E0B\uFF09",usage:WORKLOAD_USAGE,description:"\u65E2\u5B9A\u306F GET /api/v2/analysis/workload-alerts/me\uFF08\u81EA\u5206\u30FB\u76F4\u8FD130\u4EF6\uFF09\u3067\u3059\u3002\n--team \u3092\u4ED8\u3051\u308B\u3068 GET /api/v2/analysis/workload-alerts/team\uFF08\u3042\u306A\u305F\u304C\u4E0A\u9577\u306E\u30E1\u30F3\u30D0\u30FC\uFF09\u3067\u3001--date \u3067\u691C\u77E5\u65E5\u3092\u7D5E\u308C\u307E\u3059\u3002\n\u3053\u308C\u306F\u4EBA\u4E8B\u30E1\u30CB\u30E5\u30FC\u306E\u300C\u8CA0\u8377\u72B6\u6CC1\u300D\u3067\u4F7F\u308F\u308C\u3066\u3044\u308B\u5224\u5B9A\u3067\u3001\u5206\u6790\u30DA\u30FC\u30B8\u306E\u95B2\u89A7\u5BFE\u8C61\u306E\u8A2D\u5B9A\u306F\u639B\u304B\u308A\u307E\u305B\u3093\uFF08\u5206\u6790\u306E\u6A29\u9650\u306F\u8981\u308A\u307E\u3059\uFF09\u3002",
|
|
57
|
+
flags:[TEAM_FLAG,WORKLOAD_DATE_FLAG],forbidden:analysisForbidden(levelGuidance("\u30E1\u30F3\u30D0\u30FC\u306E\u8CA0\u8377\u72B6\u6CC1","\u52E4\u6020\u3068\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u4E21\u65B9")),plan(input){noArgs(input,WORKLOAD_USAGE);const date=dateFlag(input.flags,WORKLOAD_DATE_FLAG.name);if(!input.flags.has(TEAM_FLAG.name)){if(date!==void 0)throw new UsageError("--date \u306F --team \u3068\u4E00\u7DD2\u306B\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u81EA\u5206\u306E\u5206\u306F\u65E5\u4ED8\u3067\u7D5E\u308C\u307E\u305B\u3093\uFF09",
|
|
58
|
+
WORKLOAD_USAGE);return{method:"GET",path:`${ANALYSIS_PATH}/workload-alerts/me`}}return{method:"GET",path:`${ANALYSIS_PATH}/workload-alerts/team`,query:{date}}},summarize:body=>workloadRows(body).map(row=>pick(row,WORKLOAD_COLUMNS)),raw:body=>workloadRows(body)}]};var HEALTH_FORBIDDEN=analysisForbidden(levelGuidance("\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5065\u5168\u6027\u30B9\u30B3\u30A2","\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8"));var HEALTH_DATE_FLAG={name:"--date",summary:"\u57FA\u6E96\u65E5\uFF08YYYY-MM-DD\uFF09\u3002\u7121\u3051\u308C\u3070\u4ECA\u65E5\
|
|
59
|
+
\uFF08\u30B5\u30FC\u30D0\u304C\u6C7A\u3081\u307E\u3059\uFF09",takesValue:true,placeholder:"<YYYY-MM-DD>"};var WARNING_ONLY_FLAG={name:"--warning-only",summary:"\u65E9\u671F\u8B66\u544A\u304C\u51FA\u3066\u3044\u308B\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3060\u3051\u306B\u3059\u308B",takesValue:false};var HEALTH_PROJECT_FLAG={name:"--project",summary:"\u5BFE\u8C61\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\uFF08\u30B3\u30FC\u30C9\u30FBID\uFF09\u3002\u7121\u3051\u308C\u3070\u65E2\u5B9A\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8",
|
|
60
|
+
takesValue:true,placeholder:"<\u30B3\u30FC\u30C9|ID>"};var START_DATE_FLAG={name:"--from",summary:"\u958B\u59CB\u65E5\uFF08YYYY-MM-DD\uFF09",takesValue:true,placeholder:"<YYYY-MM-DD>"};var END_DATE_FLAG={name:"--to",summary:"\u7D42\u4E86\u65E5\uFF08YYYY-MM-DD\uFF09\u3002\u7121\u3051\u308C\u3070\u4ECA\u65E5",takesValue:true,placeholder:"<YYYY-MM-DD>"};var GRANULARITY_FLAG={name:"--granularity",summary:"\u96C6\u8A08\u306E\u7C92\u5EA6\uFF08day\u30FB\u65E2\u5B9A / week / month\uFF09",takesValue:true,
|
|
61
|
+
placeholder:"<day|week|month>"};var HEALTH_COLUMNS=["project_name","total_level","health_index","total_score","max_score","early_warning","trend","segment_name","calculation_status","project_id"];var HISTORY_COLUMNS=["date","total_level","health_index","total_score","max_score","early_warning","trend","calculation_status"];var INSIGHT_COLUMNS=["priority","type","title","description","related_dimension"];function healthData(body,label){const data=dataOf(body,label);if(!isRecord(data)){throw new ApiResponseError(
|
|
62
|
+
`${label}\u306E\u5FDC\u7B54\u306E data \u304C\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return data}async function healthProject(input,ctx,usage,check){noArgs(input,usage);check(input);return withResolved(input,{projectId:await ctx.projectId(input.flags.get(HEALTH_PROJECT_FLAG.name))})}function granularity(input,usage){const raw=input.flags.get(GRANULARITY_FLAG.name)?.trim();
|
|
63
|
+
if(raw===void 0)return void 0;if(raw!=="day"&&raw!=="week"&&raw!=="month"){throw new UsageError(`--granularity \u306F day / week / month \u3067\u3059\uFF08\u53D7\u3051\u53D6\u3063\u305F\u5024: ${raw}\uFF09`,usage)}return raw}var HISTORY_USAGE="twp analysis project-health history [--project <\u30B3\u30FC\u30C9>] [--from <YYYY-MM-DD>] [--to <YYYY-MM-DD>] [--granularity day|week|month]";var INSIGHTS_USAGE="twp analysis project-health insights [--project <\u30B3\u30FC\u30C9>] [--date <YYYY-MM-DD>] --yes";
|
|
64
|
+
function historyQuery(input){const start=dateFlag(input.flags,START_DATE_FLAG.name);const end=dateFlag(input.flags,END_DATE_FLAG.name);if(start!==void 0&&end!==void 0&&start>end){throw new UsageError(`--from\uFF08${start}\uFF09\u304C --to\uFF08${end}\uFF09\u3088\u308A\u5F8C\u306B\u306A\u3063\u3066\u3044\u307E\u3059`,HISTORY_USAGE)}return{start_date:start,end_date:end,granularity:granularity(input,HISTORY_USAGE)}}var projectHealthResource={name:"project-health",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5065\u5168\u6027\u30B9\u30B3\u30A2\uFF08\u4E00\u89A7\u30FB\u63A8\u79FB\u30FBAI \u306B\u3088\u308B\u6240\
|
|
65
|
+
\u898B\uFF09",operations:[{name:"list",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3054\u3068\u306E\u5065\u5168\u6027\u30B9\u30B3\u30A2\u3092\u8868\u793A\u3059\u308B",usage:"twp analysis project-health list [--date <YYYY-MM-DD>] [--warning-only]",description:"GET /api/v2/analysis/project-health\u3002\u4E26\u3073\u306F\u30B5\u30FC\u30D0\u306E\u307E\u307E\uFF08\u5371\u967A\u5EA6\u306E\u9AD8\u3044\u9806\uFF09\u3067\u3059\u3002\n\u5168\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u95B2\u89A7\u3067\u304D\u308B\u4EBA\u306F\u5168\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3001\u305D\u308C\u4EE5\u5916\u306F\u30E1\u30F3\u30D0\u30FC\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3060\u3051\u304C\u4E26\u3073\u307E\u3059\u3002\n--date \u306E\u65E5\u306E\u30B9\u30B3\u30A2\u304C\u7121\u3051\u308C\u3070\u3001\u30B5\u30FC\u30D0\u304C\u76F4\u8FD17\u65E5\u307E\u3067\u9061\u308B\u304B\u3001\u305D\u306E\u5834\u3067\u8A08\u7B97\u3057\u307E\u3059\u3002\n\u67F1\u3054\u3068\u306E\u5185\u8A33\uFF08pillars / breakdown\uFF09\u306F --output json \u304B --query \u3067\u8AAD\u3081\u307E\u3059\u3002",
|
|
66
|
+
flags:[HEALTH_DATE_FLAG,WARNING_ONLY_FLAG],forbidden:HEALTH_FORBIDDEN,plan(input){noArgs(input,"twp analysis project-health list help");return{method:"GET",path:`${ANALYSIS_PATH}/project-health`,query:{date:dateFlag(input.flags,HEALTH_DATE_FLAG.name),warning_only:input.flags.has(WARNING_ONLY_FLAG.name)?1:void 0}}},summarize:body=>healthProjects(body).map(row=>pick(row,HEALTH_COLUMNS)),raw:body=>{healthProjects(body);return healthData(body,"\u5065\u5168\u6027\u30B9\u30B3\u30A2")},notes:body=>{const summary=recordOf(
|
|
67
|
+
healthData(body,"\u5065\u5168\u6027\u30B9\u30B3\u30A2")["summary"]);return[`\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8 ${String(summary["total_projects"]??"-")} \u4EF6 / \u5E73\u5747 ${String(summary["average_score"]??"-")} / \u5065\u5168 ${String(summary["healthy_count"]??"-")} / \u826F\u597D ${String(summary["good_count"]??"-")} / \u6CE8\u610F ${String(summary["warning_count"]??"-")} / \u5371\u967A ${String(summary["critical_count"]??"-")} / \u7B97\u51FA\u4E0D\u80FD ${String(summary["unavailable_cou\
|
|
68
|
+
nt"]??"-")}`]}},{name:"history",summary:"1\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u5065\u5168\u6027\u30B9\u30B3\u30A2\u306E\u63A8\u79FB\u3092\u8868\u793A\u3059\u308B",usage:HISTORY_USAGE,description:"GET /api/v2/analysis/project-health/history\u3002--project \u304C\u7121\u3051\u308C\u3070\u65E2\u5B9A\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\uFF08TWP_PROJECT \u7B49\uFF09\u3067\u3059\u3002\n\u671F\u9593\u3092\u7701\u304F\u3068\u30B5\u30FC\u30D0\u304C\u6C7A\u3081\u307E\u3059\uFF08\u7D42\u4E86\uFF1D\u4ECA\u65E5\u3001\u958B\u59CB\uFF1Dday \u306F30\u65E5\u524D\u30FBweek \u306F12\u9031\u524D\u30FBmonth \u306F12\u304B\u6708\u524D\uFF09\u3002",
|
|
69
|
+
flags:[HEALTH_PROJECT_FLAG,START_DATE_FLAG,END_DATE_FLAG,GRANULARITY_FLAG],forbidden:HEALTH_FORBIDDEN,prepare:(input,ctx)=>healthProject(input,ctx,HISTORY_USAGE,historyQuery),plan(input){noArgs(input,HISTORY_USAGE);return{method:"GET",path:`${ANALYSIS_PATH}/project-health/history`,query:{project_id:requireResolved(input,"projectId"),...historyQuery(input)}}},summarize:body=>historyRows(body).map(row=>pick(row,HISTORY_COLUMNS)),raw:body=>{historyRows(body);return healthData(body,"\u5065\u5168\u6027\u30B9\u30B3\u30A2\u306E\u63A8\u79FB")},
|
|
70
|
+
notes:body=>[`\u5E73\u5747\u30B9\u30B3\u30A2: ${String(healthData(body,"\u5065\u5168\u6027\u30B9\u30B3\u30A2\u306E\u63A8\u79FB")["average_score"]??"-")}`]},{name:"insights",summary:"1\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u5065\u5168\u6027\u306B\u3064\u3044\u3066 AI \u306E\u6240\u898B\u3092\u751F\u6210\u3059\u308B\uFF08AI \u30AF\u30EC\u30B8\u30C3\u30C8\u3092\u6D88\u8CBB\u30FB--yes \u304C\u8981\u308B\uFF09",usage:INSIGHTS_USAGE,description:"GET /api/v2/analysis/project-health/insights\u3002**\u547C\u3076\u305F\u3073\u306B\
|
|
71
|
+
\u30B5\u30FC\u30D0\u304C AI \u3067\u6240\u898B\u3092\u751F\u6210\u3057\u3001\u30C6\u30CA\u30F3\u30C8\u306E AI \u30AF\u30EC\u30B8\u30C3\u30C8\u3092\u6D88\u8CBB\u3057\u307E\u3059**\n\uFF08\u4FDD\u5B58\u3055\u308C\u305F\u7D50\u679C\u3092\u8FD4\u3059 API \u3067\u306F\u3042\u308A\u307E\u305B\u3093\uFF09\u3002\u305D\u306E\u305F\u3081\u8AAD\u307F\u53D6\u308A\u3067\u3059\u304C --yes \u304C\u8981\u308A\u307E\u3059\u3002\n\u30B9\u30B3\u30A2\u304C\u7121\u3044\u65E5\u306F\u30B5\u30FC\u30D0\u304C AI \u3092\u547C\u3070\u305A\u306B\u7406\u7531\uFF08message\uFF09\u3092\u8FD4\u3057\u307E\u3059\u3002\u30AF\u30EC\u30B8\u30C3\u30C8\u304C\u8DB3\u308A\u306A\u3044\u3068 402 \u3067\u3059\u3002",
|
|
72
|
+
destructive:true,confirmation:"AI \u30AF\u30EC\u30B8\u30C3\u30C8\u3092\u6D88\u8CBB\u3059\u308B\u64CD\u4F5C",flags:[HEALTH_PROJECT_FLAG,HEALTH_DATE_FLAG],forbidden:HEALTH_FORBIDDEN,prepare:(input,ctx)=>healthProject(input,ctx,INSIGHTS_USAGE,i=>dateFlag(i.flags,HEALTH_DATE_FLAG.name)),plan(input){noArgs(input,INSIGHTS_USAGE);return{method:"GET",path:`${ANALYSIS_PATH}/project-health/insights`,query:{project_id:requireResolved(input,"projectId"),date:dateFlag(input.flags,HEALTH_DATE_FLAG.name)}}},plannedNotes:input=>[
|
|
73
|
+
`\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8 ${input.flags.get(HEALTH_PROJECT_FLAG.name)??"\uFF08\u65E2\u5B9A\uFF09"}\uFF08ID: ${input.resolved?.["projectId"]??"-"}\uFF09\u30FB${dateFlag(input.flags,HEALTH_DATE_FLAG.name)??"\u4ECA\u65E5"} \u306E\u6240\u898B\u3092\u751F\u6210\u3057\u307E\u3059`,"\u30C6\u30CA\u30F3\u30C8\u306E AI \u30AF\u30EC\u30B8\u30C3\u30C8\u3092\u6D88\u8CBB\u3057\u307E\u3059\uFF08\u305D\u306E\u65E5\u306E\u30B9\u30B3\u30A2\u304C\u7121\u3051\u308C\u3070\u6D88\u8CBB\u3057\u307E\u305B\u3093\uFF09"],
|
|
74
|
+
summarize:body=>insightRows(body).map(row=>pick(row,INSIGHT_COLUMNS)),raw:body=>{insightRows(body);return healthData(body,"\u5065\u5168\u6027\u306E\u6240\u898B")},notes:body=>{const message=healthData(body,"\u5065\u5168\u6027\u306E\u6240\u898B")["message"];return typeof message==="string"&&message!==""?[message]:[]}}]};function healthProjects(body){return listIn({result:true,projects:healthData(body,"\u5065\u5168\u6027\u30B9\u30B3\u30A2")["projects"]},"projects","\u5065\u5168\u6027\u30B9\u30B3\u30A2")}
|
|
75
|
+
function historyRows(body){return listIn({result:true,history:healthData(body,"\u5065\u5168\u6027\u30B9\u30B3\u30A2\u306E\u63A8\u79FB")["history"]},"history","\u5065\u5168\u6027\u30B9\u30B3\u30A2\u306E\u63A8\u79FB")}function insightRows(body){return listIn({result:true,insights:healthData(body,"\u5065\u5168\u6027\u306E\u6240\u898B")["insights"]},"insights","\u5065\u5168\u6027\u306E\u6240\u898B")}var analysisDomain={name:"analysis",summary:"\u5206\u6790\uFF08\u7A3C\u50CD\u5206\u6790\u30FB\u30A2\u30B5\u30A4\u30F3\u5206\u6790\u30FB\u30AD\u30E3\u30D1\u30B7\u30C6\u30A3\u30FB\u8CA0\u8377\u30FB\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5065\u5168\u6027\uFF09\u306E\u8AAD\u307F\u53D6\u308A",
|
|
76
|
+
operations:[],subresources:[{name:"operating-hours",summary:"\u7A3C\u50CD\u5206\u6790\uFF08\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5225\u30FB\u30E6\u30FC\u30B6\u30FC\u5225\u306E\u7A3C\u50CD\u6642\u9593\uFF09",operations:[operatingHoursList]},{name:"project-assignment",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30A2\u30B5\u30A4\u30F3\uFF08\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3054\u3068\u306E\u30A2\u30B5\u30A4\u30F3\u6642\u9593\uFF09",operations:[projectAssignmentList]},{name:"staff-assignment",
|
|
77
|
+
summary:"\u4EBA\u6750\u5225\u30A2\u30B5\u30A4\u30F3\uFF08\u30E6\u30FC\u30B6\u30FC\u3054\u3068\u306E\u30A2\u30B5\u30A4\u30F3\u6642\u9593\u3068\u7A3C\u50CD\u7387\uFF09",operations:[staffAssignmentList]},capacityResource,workloadResource,projectHealthResource]};var MANHOUR_FROM_FLAG={name:"--from",summary:"\u958B\u59CB\u65E5\uFF08YYYY-MM-DD\uFF09\u3002\u7121\u3051\u308C\u3070\u4ECA\u6708\u306E\u521D\u65E5\uFF08\u30B5\u30FC\u30D0\u304C\u6C7A\u3081\u307E\u3059\uFF09",takesValue:true,placeholder:"<YYY\
|
|
78
|
+
Y-MM-DD>"};var MANHOUR_TO_FLAG={name:"--to",summary:"\u7D42\u4E86\u65E5\uFF08YYYY-MM-DD\uFF09\u3002\u7121\u3051\u308C\u3070\u4ECA\u6708\u306E\u672B\u65E5\uFF08\u30B5\u30FC\u30D0\u304C\u6C7A\u3081\u307E\u3059\uFF09",takesValue:true,placeholder:"<YYYY-MM-DD>"};function manhourQuery(input,usage){const start=dateFlag(input.flags,MANHOUR_FROM_FLAG.name);const end=dateFlag(input.flags,MANHOUR_TO_FLAG.name);if(start!==void 0&&end!==void 0&&start>end){throw new UsageError(`--from\uFF08${start}\uFF09\u304C --to\uFF08${end}\
|
|
79
|
+
\uFF09\u3088\u308A\u5F8C\u306B\u306A\u3063\u3066\u3044\u307E\u3059`,usage)}return{start_date:start,end_date:end}}var MANHOUR_DESCRIPTION="\u671F\u9593\u3092\u7701\u304F\u3068\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\n--output table / text / tsv \u306F\u30E6\u30FC\u30B6\u30FC\u3054\u3068\u306E\u5408\u8A08\uFF08\u5206\u3068 h:mm\uFF09\u3067\u3001\u65E5\u5225\uFF08by_date\uFF09\u306F --output json \u304B --query \u3067\u8AAD\u3081\u307E\u3059\u3002\n\u5FDC\u7B54\u306B\u30E6\u30FC\u30B6\u30FC\u540D\u306F\u542B\u307E\u308C\u307E\u305B\u3093\uFF08user_id \u306F twp project members \u306E user_id \u3068\u540C\u3058\u5024\u3067\u3059\uFF09\u3002";
|
|
80
|
+
function manhourRows(body,label){return listIn(body,"by_user",label).map(row=>({user_id:row["user_id"]??null,total_minutes:row["total_minutes"]??null,total:hoursMinutes(row["total_minutes"])??null}))}function manhourNotes(body){if(!isRecord(body))return[];return[`\u671F\u9593: ${String(body["start_date"]??"-")} \u301C ${String(body["end_date"]??"-")} / \u5408\u8A08 ${String(hoursMinutes(body["total_minutes"])??"-")}`]}function workloadDistributionRows(body){return listIn(body,"members","\u30E1\u30F3\u30D0\u30FC\u5225\u306E\u8CA0\u8377").
|
|
81
|
+
map(row=>({user_name:row["user_name"]??(row["user_id"]===null?"\uFF08\u672A\u5272\u308A\u5F53\u3066\uFF09":null),total_tasks:row["total_tasks"]??null,estimated_hours:row["estimated_hours"]??null,by_status:Array.isArray(row["by_status"])?row["by_status"].map(recordOf).map(s=>`${String(s["status_name"]??s["status_id"]??"?")}:${String(s["count"]??"?")}`).join(" "):null,user_id:row["user_id"]??null}))}function workloadDistributionNotes(body){if(!isRecord(body))return[];return[`\u672A\u5B8C\u4E86 ${String(
|
|
82
|
+
body["total_active_tasks"]??"-")} \u4EF6 / \u5168\u30BF\u30B9\u30AF ${String(body["total_tasks"]??"-")} \u4EF6`]}export{analysisForbidden,currentMonth,monthsBetween,analysisDomain,MANHOUR_FROM_FLAG,MANHOUR_TO_FLAG,manhourQuery,MANHOUR_DESCRIPTION,manhourRows,manhourNotes,workloadDistributionRows,workloadDistributionNotes};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{readBody}from"./chunk-ORUDW52G.js";import{WORKFLOWS_PATH}from"./chunk-
|
|
3
|
+
import{readBody}from"./chunk-ORUDW52G.js";import{WORKFLOWS_PATH}from"./chunk-4MTEXWYQ.js";import{UUID_RE,isSafePathSegment}from"./chunk-GMBJTG6A.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-IOGMOXYF.js";import{requireResolved,singleRef,withResolved}from"./chunk-LXIAOCUW.js";import{acknowledgement,isRecord,pick}from"./chunk-VTQAI52S.js";import{ApiResponseError,UsageError}from"./chunk-UFND7FBC.js";var WORKFLOW_FLAG={name:"--workflow",summary:"\u7533\u8ACB\u66F8\uFF08\u30EF\u30FC\u30AF\u30D5\u30ED\u30FC\uFF09\u306E\u540D\u524D\u304B ID \u3067\u7D5E\u308A\u8FBC\u3080",takesValue:true,placeholder:"<\u30EF\u30FC\u30AF\u30D5\u30ED\u30FC>"};var CATEGORIES={undefined:"\u6C4E\u7528",paid_holiday:"\u6709\u7D66\u4F11\u6687",substitute_holiday:"\u632F\u66FF\u4F11\u6687",comp_holiday:"\u4EE3\u4F11",absence:"\u6B20\u52E4",special_holiday:"\u7279\u5225\u4F11\u6687",other_leave:"\u305D\u306E\u4ED6\u4F11\u6687\u30FB\u6B20\u52E4",
|
|
4
4
|
sales:"\u53D6\u5F15",commuting_expenses:"\u901A\u52E4\u4EA4\u901A\u8CBB",cms_publish:"\u30B3\u30F3\u30C6\u30F3\u30C4\u516C\u958B",equipment_lending:"\u5099\u54C1\u8CB8\u51FA",ai_tool_license:"AI\u30C4\u30FC\u30EB\u30E9\u30A4\u30BB\u30F3\u30B9",qualification_bonus:"\u5408\u683C\u304A\u795D\u3044\u91D1"};var CATEGORY_HELP=`\u30AB\u30C6\u30B4\u30EA: ${Object.entries(CATEGORIES).map(([key,label])=>`${key}\uFF08${label}\uFF09`).join(" / ")}`;var WORKFLOW_STATUSES=["active","inactive","draft"];var INSTANCE_STATUSES=[
|
|
5
5
|
"new","in_progress","approved","rejected","canceled","sent_back"];var INSTANCE_STATUS_HELP="\u72B6\u614B: new\uFF08\u4E0B\u66F8\u304D\uFF09/ in_progress\uFF08\u627F\u8A8D\u5F85\u3061\uFF09/ approved\uFF08\u627F\u8A8D\u6E08\u307F\uFF09/ rejected\uFF08\u5374\u4E0B\uFF09/ canceled\uFF08\u53D6\u6D88\uFF09/ sent_back\uFF08\u5DEE\u3057\u623B\u3057\uFF09";var WORKFLOW_COLUMNS=["id","name","defined_category","status","is_hidden","valid_from","valid_to"];var WORKFLOW_ADMIN_COLUMNS=[...WORKFLOW_COLUMNS,"s\
|
|
6
6
|
tep_count"];var WORKFLOW_GET_COLUMNS=["id","name","defined_category","status","is_hidden","valid_from","valid_to","description"];var INSTANCE_COLUMNS=["id","title","workflow_name","status","current_step_no","applicant_name","applied_at","completed_at"];var INSTANCE_GET_COLUMNS=["id","title","workflow_id","workflow_name","status","current_step_no","applicant_name","applied_at","completed_at","can_approve","is_editable","is_cancelable"];var PENDING_COLUMNS=["id","title","workflow_name","applicant_\
|