@tocca-systems/twp-cli 0.43.0 → 0.45.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 +16 -0
- package/README.md +92 -6
- package/dist/{agent-loop-MMWJHN3D.js → agent-loop-RMJXHBNG.js} +1 -1
- package/dist/{ai-dispatch-MXTI2KZ2.js → ai-dispatch-L6XZCCU4.js} +2 -2
- package/dist/analysis-KUCETWIJ.js +3 -0
- package/dist/{api-command-DND4342Q.js → api-command-6C3MFXVU.js} +8 -7
- package/dist/{app-2DWKZ2VE.js → app-6DA35MYO.js} +5 -5
- package/dist/{backlog-SDWC7OY5.js → backlog-Q7VYDMDL.js} +1 -1
- package/dist/budget-FOFE3YUJ.js +97 -0
- package/dist/{chunk-L35F47BO.js → chunk-4OSCQLZT.js} +1 -1
- package/dist/{chunk-CZMJXLDZ.js → chunk-7GSTR64T.js} +1 -1
- package/dist/chunk-C2MQANJO.js +9 -0
- package/dist/{chunk-YQ4DGLD3.js → chunk-D5FEOBB6.js} +20 -17
- package/dist/{chunk-RKYNTQAI.js → chunk-DS5TH5YQ.js} +1 -1
- package/dist/{chunk-XPYNN63B.js → chunk-DVKPGJMS.js} +1 -1
- package/dist/chunk-E7MUDY4P.js +82 -0
- package/dist/{chunk-HBYFCYWA.js → chunk-EM3SDCCU.js} +17 -16
- package/dist/{chunk-HBSD3UC6.js → chunk-EWTFE233.js} +2 -2
- package/dist/{chunk-O5AUX7AQ.js → chunk-IOCNJMVW.js} +2 -1
- package/dist/{chunk-67UNSXM7.js → chunk-JLNY7HRM.js} +2 -2
- package/dist/{chunk-XYIM36Q4.js → chunk-JNPCHV7S.js} +1 -1
- package/dist/{chunk-AHLI7BUX.js → chunk-NAAMNYX3.js} +1 -1
- package/dist/{chunk-XSSKEJGO.js → chunk-O3UQPM6L.js} +1 -1
- package/dist/chunk-Q3B65OFC.js +3 -0
- package/dist/{chunk-3ZOHVESS.js → chunk-QV6DH37Q.js} +1 -1
- package/dist/chunk-XTREYDO5.js +81 -0
- package/dist/{chunk-PGJ42IUR.js → chunk-XUNFV6ZQ.js} +1 -1
- package/dist/{chunk-NKIBB72I.js → chunk-XXVYGQ72.js} +1 -1
- package/dist/{chunk-OUP3JLVH.js → chunk-Y4SREWAG.js} +1 -1
- package/dist/chunk-Y5EN7RYN.js +4 -0
- package/dist/{chunk-PORE2NZO.js → chunk-YPMT453N.js} +1 -1
- package/dist/{chunk-QEWI75KI.js → chunk-ZM3MTWNT.js} +1 -1
- package/dist/cli.js +75 -9
- package/dist/{commands-BDYQKXPD.js → commands-5GP3REIU.js} +12 -12
- package/dist/{commands-255HOMWQ.js → commands-JUD4ZNWT.js} +1 -1
- package/dist/{company-7TFFYG4A.js → company-UTEAM246.js} +3 -3
- package/dist/{completion-H65LUFVF.js → completion-YSP6UE25.js} +1 -1
- package/dist/{contract-SIFZY6D4.js → contract-GUY73GRP.js} +2 -2
- package/dist/{department-NSK6YY6X.js → department-QMTJYMN2.js} +1 -1
- package/dist/{deposit-FUM7OA6F.js → deposit-FOATHWXV.js} +2 -2
- package/dist/{estimate-RL3N3JAE.js → estimate-6UWI7SKV.js} +4 -4
- package/dist/{inquiry-K7RSYLFW.js → inquiry-3VBBJT2K.js} +1 -1
- package/dist/{invoice-E7XIBLRA.js → invoice-FOZJR42A.js} +3 -3
- package/dist/{job-title-OF3ABHUQ.js → job-title-IIRFPZNV.js} +1 -1
- package/dist/{knowledge-ZQYVNFNI.js → knowledge-6SXUV46K.js} +2 -2
- package/dist/{leave-MAFA6EQO.js → leave-LQAXN6F4.js} +2 -2
- package/dist/{media-LL4AVP5H.js → media-VK6AUGZY.js} +1 -1
- package/dist/{notification-KBL7QJE3.js → notification-NTU3JCR2.js} +1 -1
- package/dist/{oneshot-EUW726TV.js → oneshot-67EDIE2F.js} +1 -1
- package/dist/outlook-PQ4OCB5Z.js +98 -0
- package/dist/{position-MZADW4R4.js → position-WGLV3JZ6.js} +1 -1
- package/dist/project-REBUFMPX.js +4 -0
- package/dist/{prospect-L43GCNWK.js → prospect-DJAJNTRQ.js} +3 -3
- package/dist/{purchase-643XP2UX.js → purchase-7RVUWXMS.js} +4 -4
- package/dist/{receivable-O7H2LJ4K.js → receivable-SHRWUYJW.js} +2 -2
- package/dist/{registry-PGMXXWHA.js → registry-CP4LGNGZ.js} +1 -1
- package/dist/{render-ASQBZ75M.js → render-4L5BDU3B.js} +1 -1
- package/dist/{report-YTPDB4Y7.js → report-SUTO7E7Z.js} +1 -1
- package/dist/run-NVS532DL.js +4 -0
- package/dist/{sales-ai-review-J5ICW6RB.js → sales-ai-review-LC4XDQLS.js} +2 -2
- package/dist/{sales-master-MCS3UL4M.js → sales-master-C4EYXIKP.js} +3 -3
- package/dist/sales-numbering-YK447QBC.js +4 -0
- package/dist/{server-settings-326MD7T4.js → server-settings-3E7G56G7.js} +1 -1
- package/dist/{supplier-payment-QF2YMAVT.js → supplier-payment-MLLTGVCO.js} +3 -3
- package/dist/{task-GSZZ7HT2.js → task-7SKWCZWV.js} +19 -14
- package/dist/{user-IF6PAMW7.js → user-FPXO3IHG.js} +7 -5
- package/dist/{workflow-BHOWO32V.js → workflow-FU2EBVBW.js} +1 -1
- package/package.json +2 -2
- package/dist/chunk-TDU6U5PY.js +0 -8
- package/dist/chunk-YO2RNKCQ.js +0 -4
- package/dist/outlook-KVMKMFUE.js +0 -37
- package/dist/project-ZVRVNXWI.js +0 -13
- package/dist/run-SRTDTEKL.js +0 -4
- package/dist/sales-numbering-2DVWFJFG.js +0 -4
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
|
+
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
+
import{analysisForbidden}from"./chunk-E7MUDY4P.js";import"./chunk-YLXW7TIU.js";import"./chunk-4B3T4UE7.js";import{repeatedValues}from"./chunk-F7K37QG6.js";import{ApiError,MultipartBody}from"./chunk-IF2K4PM5.js";import"./chunk-QQRJLH6B.js";import{nonEmpty}from"./chunk-IOGMOXYF.js";import{requireResolved,withResolved}from"./chunk-LXIAOCUW.js";import{isRecord,pick}from"./chunk-VTQAI52S.js";import{ApiRejectedError,ApiResponseError,UsageError}from"./chunk-UFND7FBC.js";
|
|
4
|
+
import"./chunk-J7QYPKVK.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";import fs from"fs";import path from"path";var PATH="/api/v2/budget";var ANALYSIS_FORBIDDEN=analysisForbidden("");function budgetForbidden(body){if(body?.error==="forbidden")return"\u3053\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u95B2\u89A7\u3067\u304D\u307E\u305B\u3093\uFF08\u30E1\u30F3\u30D0\u30FC\u3067\u306A\u3044\u304B\u3001\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u6A29\u9650\u304C\u8DB3\u308A\u307E\u305B\u3093\uFF09\u3002\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u7BA1\u7406\u8005\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002";
|
|
5
|
+
return ANALYSIS_FORBIDDEN(body)}var FORBIDDEN=budgetForbidden;var EDIT_HINT="\u76EE\u6A19\u306E\u8A2D\u5B9A\u30FB\u30B3\u30D4\u30FC\u30FB\u53D6\u308A\u8FBC\u307F\u306F\u3001\u5168\u4F53\u7BA1\u7406\u8005\u304B\u5206\u6790\u306E\u6A29\u9650\u304C\u300C\u7BA1\u7406\u8005\u300D\u306E\u4EBA\u3060\u3051\u304C\u3067\u304D\u307E\u3059\u3002\u6309\u5206\u306F\u305D\u308C\u306B\u52A0\u3048\u3066\u3001\u305D\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u7BA1\u7406\u8005\u3082\u3067\u304D\u307E\u3059\n\uFF08\u3069\u3061\u3089\u3082\u5206\u6790\u306E\u6A29\u9650\u304C\u300C\u306A\u3057\u300D\u3067\u306F\u4F7F\u3048\u307E\u305B\u3093\uFF09\u3002";
|
|
6
|
+
var YEAR_MIN=2e3;var YEAR_MAX=2100;var IMPORT_MAX_BYTES=2048*1024;var SET_FILE_MAX_BYTES=4*1024*1024;var AMOUNT_MAX=999999999999;var SHOWN_OVERWRITES=24;var BOM=new RegExp(`^${String.fromCharCode(65279)}`);function usageOf(op){return`twp budget ${op} help`}function text(value){return typeof value==="string"||typeof value==="number"?String(value):""}function yen(value){return typeof value==="number"?`${value.toLocaleString("ja-JP")} \u5186`:"\uFF08\u306A\u3057\uFF09"}function noArgs(input,op){if(input.
|
|
7
|
+
args.length>0)throw new UsageError(`${op} \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,usageOf(op))}function envelope(body,what){if(!isRecord(body)||body["result"]!==true)throw new ApiResponseError(`${what}\u306E\u5FDC\u7B54\u306E\u5F62\u304C\u60F3\u5B9A\u3068\u9055\u3044\u307E\u3059\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`);return body}function dataRecord(body,what){const data=envelope(body,what)["data"];
|
|
8
|
+
if(!isRecord(data))throw new ApiResponseError(`${what}\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 data}function dataRows(body,what){const data=envelope(body,what)["data"];if(!Array.isArray(data)||!data.every(isRecord))throw new ApiResponseError(`${what}\u306E\u5FDC\u7B54\u306B data \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`);
|
|
9
|
+
return data}var YEAR_FLAG={name:"--year",summary:`\u5E74\u5EA6\uFF08YYYY\u30FB${YEAR_MIN}\u301C${YEAR_MAX}\u3002\u7701\u304F\u3068\u30B5\u30FC\u30D0\u306E\u4ECA\u5E74\uFF1D\u66A6\u5E74\uFF09`,takesValue:true,placeholder:"<YYYY>"};var TEMPLATE_YEAR_FLAG={name:"--year",summary:`\u305D\u306E\u5E74\u5EA6\u306B\u5728\u7C4D\u3057\u3066\u3044\u305F\u90E8\u7F72\u3092\u4E26\u3079\u308B\uFF08YYYY\u3002\u7701\u304F\u3068\u4ECA\u65E5\u6642\u70B9\u3067\u6709\u52B9\u306A\u90E8\u7F72\uFF09`,takesValue:true,placeholder:"\
|
|
10
|
+
<YYYY>"};var REQUIRED_YEAR_FLAG={name:"--year",summary:`\u5E74\u5EA6\uFF08YYYY\u30FB${YEAR_MIN}\u301C${YEAR_MAX}\u30FB\u5FC5\u9808\uFF09`,takesValue:true,placeholder:"<YYYY>"};var START_MONTH_FLAG={name:"--start-month",summary:"\u671F\u9996\u6708\uFF081\u301C12\u3002\u7701\u304F\u3068\u30C6\u30CA\u30F3\u30C8\u306E\u671F\u9996\u6708\uFF09",takesValue:true,placeholder:"<\u6708>"};var RELIABILITY_FLAG={name:"--reliability",summary:"\u58F2\u4E0A\u898B\u8FBC\u306B\u542B\u3081\u308B\u898B\u7A4D\u306E\u78BA\u5EA6\u30B3\u30FC\u30C9\uFF08\u8907\u6570\u56DE\u6307\u5B9A\u53EF\u3002\u7701\u304F\u3068\u30B5\u30FC\u30D0\u306E\u65E2\u5B9A\u3002\u9069\u7528\u3055\u308C\u305F\u78BA\u5EA6\u306F stderr \u306B\u51FA\u308B\uFF09",
|
|
11
|
+
takesValue:true,placeholder:"<\u78BA\u5EA6>",repeatable:true};var DEPARTMENT_FLAG={name:"--department",summary:"\u90E8\u7F72\uFF08\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u30FBID\uFF09",takesValue:true,placeholder:"<\u90E8\u7F72>"};function fiscalYear(input,required){const raw=nonEmpty(input.flags,"--year");if(raw===void 0){if(required)throw new UsageError("--year <YYYY> \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u5BFE\u8C61\u306E\u5E74\u5EA6\uFF09");return void 0}const value=raw.trim();
|
|
12
|
+
const year=Number(value);if(!/^\d{4}$/.test(value)||year<YEAR_MIN||year>YEAR_MAX)throw new UsageError(`--year \u306F ${YEAR_MIN}\u301C${YEAR_MAX} \u306E\u897F\u66A64\u6841\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${raw}`);return year}function startMonth(input){const raw=nonEmpty(input.flags,"--start-month");if(raw===void 0)return void 0;const value=raw.trim();const month=Number(value);if(!/^\d{1,2}$/.test(value)||month<1||month>12)throw new UsageError(`--start-month \u306F 1\u301C12 \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\
|
|
13
|
+
\u3044: ${raw}`);return month}function reliabilities(input){const values=repeatedValues(input,RELIABILITY_FLAG.name).map(v=>v.trim());if(values.some(v=>v===""||v.includes(",")))throw new UsageError("--reliability \u306F\u78BA\u5EA6\u30921\u3064\u305A\u3064\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u30AB\u30F3\u30DE\u533A\u5207\u308A\u306B\u3057\u306A\u3044\uFF09");return values.length===0?void 0:values.join(",")}function periodQuery(input,withReliability){return{fiscal_year:fiscalYear(
|
|
14
|
+
input,false),start_month:startMonth(input),...withReliability?{estimate_reliabilities:reliabilities(input)}:{}}}function periodNotes(input){const lines=[];if(!input.flags.has("--year"))lines.push("--year \u3092\u7701\u3044\u305F\u306E\u3067\u3001\u30B5\u30FC\u30D0\u306E\u4ECA\u5E74\uFF08\u66A6\u5E74\uFF09\u306E\u5E74\u5EA6\u306B\u306A\u308A\u307E\u3059\uFF08\u671F\u9996\u6708\u304C4\u6708\u306A\u3089\u30011\u301C3\u6708\u306B\u7701\u304F\u3068\u7FCC\u5E74\u5EA6\u3067\u3059\u3002\u9069\u7528\u3055\u308C\u305F\u5E74\u5EA6\u306F\u5FDC\u7B54\u306E\u5F8C\u306B\u51FA\u307E\u3059\uFF09\u3002");
|
|
15
|
+
return lines}function reliabilityNotes(applied,input){if(!Array.isArray(applied))return[];const used=new Set(applied.map(String));const appliedText=applied.map(String).join(", ");const requested=[...new Set(repeatedValues(input,RELIABILITY_FLAG.name).map(v=>v.trim()).map(v=>/^\d$/.test(v)?`0${v}`:v))];const dropped=requested.filter(v=>!used.has(v));if(dropped.length===0)return[`\u58F2\u4E0A\u898B\u8FBC\u306B\u542B\u3081\u305F\u78BA\u5EA6: ${appliedText}`];const allDropped=dropped.length===requested.
|
|
16
|
+
length;return[`\u26A0 \u6307\u5B9A\u3057\u305F\u78BA\u5EA6\u306E\u3046\u3061 ${dropped.join(", ")} \u306F\u4F7F\u308F\u308C\u307E\u305B\u3093\u3067\u3057\u305F\uFF08\u30B5\u30FC\u30D0\u304C\u77E5\u3089\u306A\u3044\u78BA\u5EA6\u3067\u3059\uFF09\u3002${allDropped?"\u6307\u5B9A\u304C\u3059\u3079\u3066\u4F7F\u3048\u306A\u304B\u3063\u305F\u306E\u3067\u3001\u30B5\u30FC\u30D0\u306E\u65E2\u5B9A":"\u58F2\u4E0A\u898B\u8FBC\u306B\u542B\u3081\u305F\u78BA\u5EA6"}: ${appliedText}`]}function basisNotes(data){const basis=isRecord(
|
|
17
|
+
data["basis"])?data["basis"]:{};const legacy=Array.isArray(basis["labor_legacy_share_year_months"])?basis["labor_legacy_share_year_months"].map(String):[];return legacy.length===0?[]:[`\u4EBA\u4EF6\u8CBB\u5B9F\u7E3E\u306E\u90E8\u7F72\u5225\u5185\u8A33\u304C\u65E7\u65B9\u5F0F\uFF08\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5358\u4F4D\u306E\u6309\u5206\uFF09\u306E\u6708\u304C\u3042\u308A\u307E\u3059: ${legacy.join(", ")}\uFF08\u53CE\u652F\u5206\u6790\u306E\u6570\u5B57\u3068\u98DF\u3044\u9055\u3046\u3053\u3068\u304C\u3042\u308A\u307E\u3059\uFF09`]}
|
|
18
|
+
function monthRange(data){const months=Array.isArray(data["months"])?data["months"].filter(isRecord):[];if(months.length===0)return"";return`${text(months[0]?.["year_month"])} \u301C ${text(months[months.length-1]?.["year_month"])}`}var ANNUAL_COLUMNS=["sales_target","sales_forecast","sales_actual","sales_variance","sales_achievement_rate","labor_cost_actual","profit_target","profit_actual","profit_variance","profit_rate"];function dashboardRows(body){const data=dataRecord(body,"\u4E88\u5B9F\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9");
|
|
19
|
+
const departments=data["departments"];const company=data["company_totals"];if(!Array.isArray(departments)||!isRecord(company))throw new ApiResponseError("\u4E88\u5B9F\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u306E\u5FDC\u7B54\u306B departments / company_totals \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002");const row=(id,name,level,entry)=>({department_id:id??null,department_name:name??null,level:level??null,...pick(entry["\
|
|
20
|
+
annual"],ANNUAL_COLUMNS)});return[row(null,"\u5168\u793E",null,company),...departments.filter(isRecord).map(dept=>row(dept["department_id"],dept["department_name"],dept["level"],dept))]}var dashboardOperation={name:"dashboard",summary:"\u5E74\u5EA6\u306E\u4E88\u5B9F\uFF08\u5168\u793E\u3068\u90E8\u7F72\u3054\u3068\u306E\u76EE\u6A19\u30FB\u898B\u8FBC\u30FB\u5B9F\u7E3E\u30FB\u5DEE\u7570\uFF09\u3092\u8868\u793A\u3059\u308B",usage:"twp budget dashboard [--year <YYYY>] [--start-month <\u6708>] [--reliabili\
|
|
21
|
+
ty <\u78BA\u5EA6>]...",description:"GET /api/v2/budget/dashboard\u3002\u753B\u9762\u306E\u4E88\u5B9F\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u3068\u540C\u3058\u5024\u3067\u3059\uFF08\u5168\u793E\u5408\u8A08\u30FB\u90E8\u7F72\u306E\u5DFB\u304D\u4E0A\u3052\u306F\u30B5\u30FC\u30D0\u306E\u8A08\u7B97\u3092\u305D\u306E\u307E\u307E\u51FA\u3057\u307E\u3059\uFF09\u3002\n--output table / text / tsv \u306F\u5168\u793E\u3068\u90E8\u7F72\u3054\u3068\u306E\u5E74\u9593\u306E\u5024\u3067\u3059\u3002\u6708\u3054\u3068\u306E\u5024\uFF08monthly\uFF09\u30FB\u6708\u306E\u4E26\u3073\uFF08months\uFF09\u30FB\u6A29\u9650\uFF08permissions\uFF09\u306F --output json \u3067\u8AAD\u3081\u307E\u3059\u3002",
|
|
22
|
+
flags:[YEAR_FLAG,START_MONTH_FLAG,RELIABILITY_FLAG],forbidden:FORBIDDEN,plan:input=>{noArgs(input,"dashboard");return{method:"GET",path:`${PATH}/dashboard`,query:periodQuery(input,true)}},plannedNotes:periodNotes,summarize:dashboardRows,raw:body=>{dashboardRows(body);return dataRecord(body,"\u4E88\u5B9F\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9")},notes:(body,input)=>{const data=dataRecord(body,"\u4E88\u5B9F\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9");return[`${text(data["fiscal_year"])} \u5E74\u5EA6\uFF08${monthRange(
|
|
23
|
+
data)}\uFF09`,...reliabilityNotes(data["estimate_reliabilities"],input),...basisNotes(data)]}};function summaryOf(body){const data=dataRecord(body,"\u4E88\u5B9F\u30B5\u30DE\u30EA\u30FC");if(!isRecord(data["sales"])||!isRecord(data["profit"]))throw new ApiResponseError("\u4E88\u5B9F\u30B5\u30DE\u30EA\u30FC\u306E\u5FDC\u7B54\u306B sales / profit \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002");return data}var summaryOperation={
|
|
24
|
+
name:"summary",summary:"\u5E74\u5EA6\u306E\u58F2\u4E0A\u30FB\u5229\u76CA\u306E\u76EE\u6A19\u3068\u5B9F\u7E3E\u306E\u5408\u8A08\uFF08\u30B5\u30DE\u30EA\u30FC\u30AB\u30FC\u30C9\uFF09\u3092\u8868\u793A\u3059\u308B",usage:"twp budget summary [--year <YYYY>] [--start-month <\u6708>] [--department <\u90E8\u7F72>]",description:"GET /api/v2/budget/summary\u3002\u753B\u9762\u306E\u30B5\u30DE\u30EA\u30FC\u30AB\u30FC\u30C9\u3068\u540C\u3058\u5024\u3067\u3059\u3002--department \u3092\u4ED8\u3051\u308B\u3068\u3001\u305D\u306E\u90E8\u7F72\u3068\u914D\u4E0B\uFF08\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u306E\u90E8\u7F72\u884C\u3068\u540C\u3058\u898F\u5247\uFF09\u306E\u5408\u8A08\u3001\n\u7701\u304F\u3068\u5168\u793E\u306E\u5408\u8A08\u3067\u3059\u3002",
|
|
25
|
+
flags:[YEAR_FLAG,START_MONTH_FLAG,DEPARTMENT_FLAG],forbidden:FORBIDDEN,async prepare(input,ctx){noArgs(input,"summary");fiscalYear(input,false);startMonth(input);const department=nonEmpty(input.flags,DEPARTMENT_FLAG.name);return department===void 0?input:withResolved(input,{departmentId:(await ctx.resolver.department(department)).id})},plan:input=>({method:"GET",path:`${PATH}/summary`,query:{...periodQuery(input,false),department_id:input.resolved?.["departmentId"]}}),plannedNotes:periodNotes,summarize:body=>{
|
|
26
|
+
const data=summaryOf(body);const line=(kind,entry)=>({item:kind,...pick(entry,["target","actual","variance","achievement_rate"])});return[line("\u58F2\u4E0A",data["sales"]),line("\u5229\u76CA",data["profit"])]},raw:summaryOf,notes:body=>{const data=summaryOf(body);return[`${text(data["fiscal_year"])} \u5E74\u5EA6${data["department_id"]?`\u30FB\u90E8\u7F72 ${text(data["department_id"])}`:"\u30FB\u5168\u793E"}\u3002\u5229\u76CA\u7387 ${data["profit_rate"]===null||data["profit_rate"]===void 0?"\uFF08\u58F2\u4E0A\u5B9F\
|
|
27
|
+
\u7E3E\u306A\u3057\uFF09":`${text(data["profit_rate"])}%`}`,...basisNotes(data)]}};var BREAKDOWN_PROJECT_COLUMNS=["project_code","project_name","sales_forecast","sales_actual","labor_cost_actual","procurement_cost","profit_actual"];function breakdownRows(body){const data=dataRecord(body,"\u4E88\u5B9F\u306E\u5185\u8A33");if(Array.isArray(data["projects"])){return data["projects"].filter(isRecord).map(row=>({project_id:row["project_id"]??null,...pick(row,BREAKDOWN_PROJECT_COLUMNS.slice(0,2)),...pick(
|
|
28
|
+
row["annual"],BREAKDOWN_PROJECT_COLUMNS.slice(2))}))}if(Array.isArray(data["groups"])){return data["groups"].filter(isRecord).map(row=>({key:row["key"]??null,label:row["label"]??null,...pick(row["annual"],["sales_forecast","estimate_count"]),...pick(row,["estimate_no","billing_date","invoice_date"])}))}throw new ApiResponseError("\u4E88\u5B9F\u306E\u5185\u8A33\u306E\u5FDC\u7B54\u306B projects / groups \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}
|
|
29
|
+
function breakdownRaw(body){breakdownRows(body);return dataRecord(body,"\u4E88\u5B9F\u306E\u5185\u8A33")}function breakdownNotes(body,input){const data=dataRecord(body,"\u4E88\u5B9F\u306E\u5185\u8A33");const lines=[`${text(data["fiscal_year"])} \u5E74\u5EA6\uFF08${monthRange(data)}\uFF09\u30FB${data["department_id"]?`\u90E8\u7F72 ${text(data["department_id"])}\uFF08\u914D\u4E0B\u3092\u542B\u3080\uFF09`:"\u672A\u5272\u5F53\uFF08\u90E8\u7F72\u304C\u672A\u8A2D\u5B9A\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\uFF09"}`];
|
|
30
|
+
if(breakdownRows(body).length===0)lines.push("\u5185\u8A33\u306E\u884C\u306F\u3042\u308A\u307E\u305B\u3093\uFF08\u5B9F\u7E3E\u306F\u5F53\u6708\u307E\u3067\u3001\u58F2\u4E0A\u898B\u8FBC\u306F\u5BFE\u8C61\u306E\u78BA\u5EA6\u306E\u898B\u7A4D\u3060\u3051\u304C\u96C6\u8A08\u3055\u308C\u307E\u3059\uFF09");const unlinked=isRecord(data["unlinked_forecast"])?data["unlinked_forecast"]:void 0;if(unlinked!==void 0&&Number(unlinked["estimate_count"])>0){lines.push(`\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306B\u7D10\u3065\u304B\u306A\u3044\u898B\u7A4D\u306E\u58F2\u4E0A\u898B\u8FBC: ${yen(
|
|
31
|
+
isRecord(unlinked["annual"])?unlinked["annual"]["sales_forecast"]:void 0)}\uFF08${text(unlinked["estimate_count"])} \u4EF6\u30FB\u884C\u306B\u306F\u51FA\u307E\u305B\u3093\uFF09`)}const basis=isRecord(data["basis"])?data["basis"]:{};return[...lines,...reliabilityNotes(basis["estimate_reliabilities"],input),...basisNotes(data)]}var breakdownOperation={name:"breakdown",summary:"\u90E8\u7F72\u884C\u306E\u91D1\u984D\u306E\u5185\u8A33\u3092\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\uFF08\u307E\u305F\u306F\u62C5\u5F53\u8005\u30FB\u78BA\u5EA6\u30FB\u6848\u4EF6\uFF09\u3054\u3068\u306B\u8868\u793A\u3059\u308B",
|
|
32
|
+
usage:"twp budget breakdown [--department <\u90E8\u7F72>] [--axis project|estimate_user|reliability|estimate] [--year <YYYY>] [--start-month <\u6708>] [--reliability <\u78BA\u5EA6>]...",description:"GET /api/v2/budget/project-breakdown\u3002\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u306E\u90E8\u7F72\u884C\u306E\u30BB\u30EB\u3092\u62BC\u3057\u305F\u3068\u304D\u306E\u5185\u8A33\u3068\u540C\u3058\u5024\u3067\u3059\uFF08\u914D\u4E0B\u306E\u90E8\u7F72\u3092\u542B\u307F\u307E\u3059\uFF09\u3002\n--department \u3092\u7701\u304F\u3068\u300C\u672A\u5272\u5F53\u300D\uFF08\u90E8\u7F72\u304C\u672A\u8A2D\u5B9A\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\uFF09\u306E\u5185\u8A33\u3067\u3059\uFF08twp budget unassigned \u3068\u540C\u3058\uFF09\u3002\n--axis \u306F\u5185\u8A33\u306E\u8EF8\u3067\u3059\u3002project\uFF08\u65E2\u5B9A\uFF09\u306F\u58F2\u4E0A\u898B\u8FBC\u30FB\u58F2\u4E0A\u5B9F\u7E3E\u30FB\u4EBA\u4EF6\u8CBB\u30FB\u4ED5\u5165\u30FB\u5229\u76CA\u3092\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3054\u3068\u306B\u3001\nestimate_user\uFF08\u6848\u4EF6\u62C5\u5F53\u8005\uFF09\u30FBreliability\uFF08\u78BA\u5EA6\uFF09\u30FBestimate\uFF08\u6848\u4EF6\u3054\u3068\uFF09\u306F\u58F2\u4E0A\u898B\u8FBC\u3060\u3051\u3092\u8FD4\u3057\u307E\u3059\u3002\u8EF8\u306E\u5224\u5B9A\u306F\u30B5\u30FC\u30D0\u304C\u884C\u3044\u307E\u3059\u3002",
|
|
33
|
+
flags:[DEPARTMENT_FLAG,{name:"--axis",summary:"\u5185\u8A33\u306E\u8EF8\uFF08project\u30FBestimate_user\u30FBreliability\u30FBestimate\uFF09",takesValue:true,placeholder:"<\u8EF8>"},YEAR_FLAG,START_MONTH_FLAG,RELIABILITY_FLAG],forbidden:FORBIDDEN,async prepare(input,ctx){noArgs(input,"breakdown");fiscalYear(input,false);startMonth(input);reliabilities(input);const department=nonEmpty(input.flags,DEPARTMENT_FLAG.name);return department===void 0?input:withResolved(input,{departmentId:(await ctx.resolver.
|
|
34
|
+
department(department)).id})},plan:input=>({method:"GET",path:`${PATH}/project-breakdown`,query:{...periodQuery(input,true),department_id:input.resolved?.["departmentId"],axis:nonEmpty(input.flags,"--axis")}}),plannedNotes:input=>[...periodNotes(input),...input.flags.has(DEPARTMENT_FLAG.name)?[]:["--department \u3092\u7701\u3044\u305F\u306E\u3067\u300C\u672A\u5272\u5F53\u300D\uFF08\u90E8\u7F72\u304C\u672A\u8A2D\u5B9A\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\uFF09\u306E\u5185\u8A33\u3067\u3059\u3002"]],
|
|
35
|
+
summarize:breakdownRows,raw:breakdownRaw,notes:breakdownNotes};var unassignedOperation={name:"unassigned",summary:"\u300C\u672A\u5272\u5F53\u300D\uFF08\u90E8\u7F72\u304C\u672A\u8A2D\u5B9A\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\uFF09\u306E\u5185\u8A33\u3092\u8868\u793A\u3059\u308B",usage:"twp budget unassigned [--year <YYYY>] [--start-month <\u6708>] [--reliability <\u78BA\u5EA6>]...",description:"GET /api/v2/budget/unassigned-projects\u3002\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u306E\u300C\u672A\u5272\u5F53\u300D\u884C\u306E\u5185\u8A33\u3067\u3059\uFF08twp budget breakdown \u3092 --department \u7121\u3057\
|
|
36
|
+
\u3067\u6253\u3064\u306E\u3068\u540C\u3058\u5024\uFF09\u3002",flags:[YEAR_FLAG,START_MONTH_FLAG,RELIABILITY_FLAG],forbidden:FORBIDDEN,plan:input=>{noArgs(input,"unassigned");return{method:"GET",path:`${PATH}/unassigned-projects`,query:periodQuery(input,true)}},plannedNotes:periodNotes,summarize:breakdownRows,raw:breakdownRaw,notes:breakdownNotes};var OUT_FLAG={name:"--out",summary:"\u66F8\u304D\u51FA\u3057\u5148\u306E\u30D5\u30A1\u30A4\u30EB\u30D1\u30B9\uFF08\u5FC5\u9808\uFF09",takesValue:true,placeholder:"\
|
|
37
|
+
<\u30D1\u30B9>"};var FORCE_FLAG={name:"--force",summary:"\u65E2\u5B58\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u4E0A\u66F8\u304D\u3059\u308B",takesValue:false};var exportOperation={name:"export",summary:"\u5E74\u5EA6\u306E\u4E88\u5B9F\u3092 CSV \u306B\u66F8\u304D\u51FA\u3059\uFF08--out\uFF09",usage:"twp budget export --out <\u30D1\u30B9.csv> [--force] [--year <YYYY>] [--start-month <\u6708>]",description:"GET /api/v2/budget/export\u3002\u753B\u9762\u306E CSV \u51FA\u529B\u3068\u540C\u3058\u5185\u5BB9\uFF08UTF-8\u30FBBOM \u4ED8\u304D\uFF09\u3067\u3059\u3002\u5168\u793E\u3068\u90E8\u7F72\u3054\u3068\u306B\u3001\u58F2\u4E0A\u76EE\u6A19\u30FB\u5B9F\u7E3E\u30FB\u5DEE\u7570\u30FB\u4EBA\u4EF6\u8CBB\u30FB\u5229\u76CA\u306E\u884C\u304C\u6708\u3054\u3068\u306B\u4E26\u3073\u307E\u3059\u3002\
|
|
38
|
+
\n\u53D6\u308A\u8FBC\u307F\uFF08twp budget target import\uFF09\u306E\u5F62\u3067\u306F\u3042\u308A\u307E\u305B\u3093\uFF08\u53D6\u308A\u8FBC\u307F\u306E\u96DB\u5F62\u306F twp budget target import-template\uFF09\u3002\n\u65E2\u5B58\u306E\u30D5\u30A1\u30A4\u30EB\u306F\u4E0A\u66F8\u304D\u3057\u307E\u305B\u3093\uFF08\u4E0A\u66F8\u304D\u3059\u308B\u306A\u3089 --force\uFF09\u3002",flags:[OUT_FLAG,FORCE_FLAG,YEAR_FLAG,START_MONTH_FLAG],download:{outFlag:OUT_FLAG.name,forceFlag:FORCE_FLAG.name},forbidden:FORBIDDEN,
|
|
39
|
+
plan:input=>{noArgs(input,"export");return{method:"GET",path:`${PATH}/export`,query:periodQuery(input,false)}},plannedNotes:periodNotes,summarize:body=>body,raw:body=>body};var TARGET_COLUMNS=["fiscal_year","month","department_id","department_name","sales_target","profit_target","updated_at"];var TARGET_WRITE_COLUMNS=TARGET_COLUMNS.filter(column=>column!=="department_name");function withDepartmentNames(rows,input){const names=new Map(Object.entries(JSON.parse(input.resolved?.["departments"]??"{}")));
|
|
40
|
+
return rows.map(row=>({...row,department_name:names.get(String(row["department_id"]))??null}))}async function departmentNames(ctx){try{return JSON.stringify(Object.fromEntries((await ctx.resolver.departments()).map(d=>[d.id,d.name])))}catch{return"{}"}}function targetKey(departmentId,month){return`${String(departmentId)}#${String(month)}`}async function currentTargets(ctx,year,departmentId){const query=`fiscal_year=${year}${departmentId===void 0?"":`&department_id=${encodeURIComponent(departmentId)}`}`;
|
|
41
|
+
return dataRows(await ctx.resolver.salesJson(`${PATH}/targets?${query}`,"\u4E88\u7B97\u76EE\u6A19"),"\u4E88\u7B97\u76EE\u6A19")}var targetListOperation={name:"list",summary:"\u5E74\u5EA6\u306E\u76EE\u6A19\uFF08\u90E8\u7F72\u30FB\u6708\u3054\u3068\u306E\u58F2\u4E0A\u76EE\u6A19\u3068\u5229\u76CA\u76EE\u6A19\uFF09\u3092\u4E00\u89A7\u3059\u308B",usage:"twp budget target list [--year <YYYY>] [--department <\u90E8\u7F72>]",description:`GET /api/v2/budget/targets\u3002\u76EE\u6A19\u304C\u767B\u9332\u3055\u308C\u3066\u3044\u308B\uFF08\u90E8\u7F72\u30FB\u6708\uFF09\u3060\u3051\u304C\u8FD4\u308A\u307E\u3059\uFF08\u767B\u9332\u306E\u7121\u3044\u6708\u306F\u884C\u306B\u306A\u308A\u307E\u305B\u3093\uFF09\
|
|
42
|
+
\u3002
|
|
43
|
+
\u3053\u306E API \u306F\u30DA\u30FC\u30B8\u30F3\u30B0\u3092\u6301\u3061\u307E\u305B\u3093\u3002
|
|
44
|
+
--output table / text / tsv \u306F\u8981\u7D04\u5217\uFF08${TARGET_COLUMNS.join(" / ")}\uFF09\u3067\u3059\u3002department_name \u306F\u90E8\u7F72\u30DE\u30B9\u30BF\u304B\u3089 CLI \u304C\u8DB3\u3057\u305F\u540D\u524D\u3067\u3059\u3002`,flags:[YEAR_FLAG,DEPARTMENT_FLAG],forbidden:FORBIDDEN,async prepare(input,ctx){noArgs(input,"target list");fiscalYear(input,false);const department=nonEmpty(input.flags,DEPARTMENT_FLAG.name);const resolved={departments:await departmentNames(ctx)};if(department!==void 0)
|
|
45
|
+
resolved["departmentId"]=(await ctx.resolver.department(department)).id;return withResolved(input,resolved)},plan:input=>({method:"GET",path:`${PATH}/targets`,query:{fiscal_year:fiscalYear(input,false),department_id:input.resolved?.["departmentId"]}}),plannedNotes:periodNotes,narrow:(body,input)=>({result:true,data:withDepartmentNames(dataRows(body,"\u4E88\u7B97\u76EE\u6A19"),input)}),summarize:body=>dataRows(body,"\u4E88\u7B97\u76EE\u6A19").map(row=>pick(row,TARGET_COLUMNS)),raw:body=>dataRows(
|
|
46
|
+
body,"\u4E88\u7B97\u76EE\u6A19"),notes:body=>dataRows(body,"\u4E88\u7B97\u76EE\u6A19").length===0?["\u76EE\u6A19\u306F\u767B\u9332\u3055\u308C\u3066\u3044\u307E\u305B\u3093"]:[]};var SET_ROW_KEYS=new Set(["department","department_id","month","sales_target","profit_target"]);function parseTargetRows(raw){const list=isRecord(raw)&&Array.isArray(raw["targets"])?raw["targets"]:raw;if(!Array.isArray(list))return{rows:[],errors:['JSON \u306F\u76EE\u6A19\u306E\u914D\u5217\uFF08\u307E\u305F\u306F {"targets": [...]}\uFF09\u306B\u3057\u3066\u304F\u3060\u3055\u3044']};
|
|
47
|
+
if(list.length===0)return{rows:[],errors:["\u76EE\u6A19\u304C1\u4EF6\u3082\u3042\u308A\u307E\u305B\u3093"]};const rows=[];const errors=[];list.forEach((item,index)=>{const at=`${index+1} \u4EF6\u76EE`;if(!isRecord(item)){errors.push(`${at}: \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3067\u306F\u3042\u308A\u307E\u305B\u3093`);return}const unknown=Object.keys(item).filter(key=>!SET_ROW_KEYS.has(key));if(unknown.length>0)errors.push(`${at}: \u4F7F\u3048\u306A\u3044\u9805\u76EE\u304C\u3042\u308A\u307E\u3059: ${unknown.
|
|
48
|
+
join(", ")}\uFF08\u4F7F\u3048\u308B\u306E\u306F ${[...SET_ROW_KEYS].join(" / ")}\uFF09`);const hasName=item["department"]!==void 0;const hasId=item["department_id"]!==void 0;const ref=hasName?item["department"]:item["department_id"];if(hasName===hasId)errors.push(`${at}: department\uFF08\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u30FBID\uFF09\u304B department_id \u306E\u3069\u3061\u3089\u304B\u4E00\u65B9\u3092\u66F8\u3044\u3066\u304F\u3060\u3055\u3044`);else if(typeof ref!=="string")errors.push(`${at}\
|
|
49
|
+
: \u90E8\u7F72\u306F\u6587\u5B57\u5217\uFF08\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u30FBID\uFF09\u3067\u66F8\u3044\u3066\u304F\u3060\u3055\u3044`);else if(ref.trim()==="")errors.push(`${at}: \u90E8\u7F72\u304C\u7A7A\u3067\u3059`);const month=item["month"];if(!Number.isInteger(month)||month<1||month>12)errors.push(`${at}: month \u306F 1\u301C12 \u306E\u6574\u6570\u3067\u3059`);const amount=key=>{const value=item[key];if(typeof value!=="number"||!Number.isFinite(value)||value<0){errors.push(`${at}: ${key}\
|
|
50
|
+
\u306F 0 \u4EE5\u4E0A\u306E\u6570\u5024\u3067\u3059\uFF08\u7701\u7565\u3067\u304D\u307E\u305B\u3093\uFF09`);return 0}return value};const sales=amount("sales_target");const profit=amount("profit_target");if(typeof ref==="string"&&Number.isInteger(month))rows.push({ref:ref.trim(),month,sales_target:sales,profit_target:profit})});return{rows,errors}}function readSetFile(file,usage){try{const stat=fs.statSync(file);if(!stat.isFile())throw new UsageError(`--file \u306B\u901A\u5E38\u306E\u30D5\u30A1\u30A4\u30EB\u4EE5\u5916\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093: ${file}`,
|
|
51
|
+
usage);if(stat.size>SET_FILE_MAX_BYTES)throw new UsageError(`--file \u306E\u30D5\u30A1\u30A4\u30EB\u304C\u5927\u304D\u3059\u304E\u307E\u3059\uFF08${stat.size} \u30D0\u30A4\u30C8\uFF09: ${file}`,usage);return JSON.parse(fs.readFileSync(file,"utf8").replace(BOM,""))}catch(err){if(err instanceof UsageError)throw err;if(err instanceof SyntaxError)throw new UsageError(`--file \u3092 JSON \u3068\u3057\u3066\u8AAD\u3081\u307E\u305B\u3093: ${file}`,usage);throw new UsageError(`--file \u306E\u30D5\u30A1\u30A4\u30EB\u3092\u8AAD\u3081\u307E\u305B\u3093: ${file}\
|
|
52
|
+
\uFF08${err.code??err.message}\uFF09`,usage)}}function overwriteLines(existing,incoming,names,year,verb="\u9001\u308A\u307E\u3059"){const before=new Map(existing.map(row=>[targetKey(row["department_id"],row["month"]),row]));const overwritten=incoming.filter(row=>before.has(targetKey(row.department_id,row.month)));const lines=[`${year} \u5E74\u5EA6\u306E\u76EE\u6A19\u3092 ${incoming.length} \u4EF6${verb}\uFF08\u4E0A\u66F8\u304D ${overwritten.length} \u4EF6\u30FB\u65B0\u898F ${incoming.length-overwritten.
|
|
53
|
+
length} \u4EF6\uFF09\u3002`];for(const row of overwritten.slice(0,SHOWN_OVERWRITES)){const old=before.get(targetKey(row.department_id,row.month));lines.push(` \u4E0A\u66F8\u304D: ${names.get(row.department_id)??row.department_id} ${row.month}\u6708 \u58F2\u4E0A ${yen(old["sales_target"])} \u2192 ${yen(row.sales_target)}\u30FB\u5229\u76CA ${yen(old["profit_target"])} \u2192 ${yen(row.profit_target)}`)}if(overwritten.length>SHOWN_OVERWRITES)lines.push(` \u2026\u307B\u304B ${overwritten.length-SHOWN_OVERWRITES}\
|
|
54
|
+
\u4EF6\u3092\u4E0A\u66F8\u304D\u3057\u307E\u3059`);return lines}var targetSetOperation={name:"set",summary:"\u5E74\u5EA6\u306E\u76EE\u6A19\u3092 JSON \u3067\u307E\u3068\u3081\u3066\u767B\u9332\u30FB\u4E0A\u66F8\u304D\u3059\u308B\uFF08--file\u30FB--yes \u304C\u8981\u308B\uFF09",usage:"twp budget target set --year <YYYY> --file <JSON> --yes",description:'POST /api/v2/budget/targets\u3002\uFF08\u5E74\u5EA6\u30FB\u90E8\u7F72\u30FB\u6708\uFF09\u3054\u3068\u306B\u58F2\u4E0A\u76EE\u6A19\u3068\u5229\u76CA\u76EE\u6A19\u3092\u66F8\u304D\u307E\u3059\u3002\u540C\u3058\uFF08\u90E8\u7F72\u30FB\u6708\uFF09\u306E\u65E2\u5B58\u306E\u76EE\u6A19\u306F\u4E0A\u66F8\u304D\u3055\u308C\u3001\u5143\u306B\u623B\u305B\u307E\u305B\u3093\n\uFF08\u76EE\u6A19\u3092\u6D88\u3059 API \u306F\u3042\u308A\u307E\u305B\u3093\u30020 \u3092\u66F8\u3051\u3070 0 \u306B\u306A\u308A\u307E\u3059\uFF09\u3002\u30D5\u30A1\u30A4\u30EB\u306B\u66F8\u304B\u306A\u304B\u3063\u305F\u90E8\u7F72\u30FB\u6708\u306F\u5909\u308F\u308A\u307E\u305B\u3093\u3002\nJS\
|
|
55
|
+
ON \u306F\u76EE\u6A19\u306E\u914D\u5217\u3067\u3059\uFF08{"targets": [...]} \u3067\u3082\u53EF\uFF09\u30021\u4EF6\u306F\u6B21\u306E\u5F62\u3067\u3001\u90E8\u7F72\u306F\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u30FBID \u306E\u3044\u305A\u308C\u304B\u3067\u66F8\u3051\u307E\u3059:\n [{"department": "\u958B\u767A\u90E8", "month": 4, "sales_target": 1000000, "profit_target": 200000}]\n\u8AA4\u308A\uFF08\u4F7F\u3048\u306A\u3044\u9805\u76EE\u30FB\u6708\u306E\u7BC4\u56F2\u5916\u30FB\u8CA0\u306E\u91D1\u984D\u30FB\u540C\u3058\u90E8\u7F72\u3068\u6708\u306E\u91CD\u8907\uFF09\u306F\u9001\u308B\u524D\u306B\u5168\u90E8\u6319\u3052\u3066\u30011\u4EF6\u3082\u9001\u3089\u305A\u306B\u6B62\u3081\u307E\u3059\u3002\n\u9001\u308B\u524D\u306B\u4ECA\u306E\u76EE\u6A19\u3092\u8AAD\u307F\u3001\u4E0A\u66F8\u304D\u3055\u308C\u308B\u4EF6\u6570\u3068\u4E0A\u66F8\u304D\u524D\u5F8C\u306E\u5024\u3092 stderr \u306B\u51FA\u3057\u307E\u3059\uFF08--dry-run \u3067\u3082\u51FA\u307E\u3059\uFF09\u3002\n'+
|
|
56
|
+
EDIT_HINT,destructive:true,confirmation:"\u65E2\u5B58\u306E\u76EE\u6A19\u3092\u4E0A\u66F8\u304D\u3059\u308B\u64CD\u4F5C",flags:[REQUIRED_YEAR_FLAG,{name:"--file",summary:"\u76EE\u6A19\u306E JSON\uFF08\u5FC5\u9808\uFF09",takesValue:true,placeholder:"<JSON>"}],forbidden:FORBIDDEN,async prepare(input,ctx){const usage=usageOf("target set");noArgs(input,"target set");const year=fiscalYear(input,true);const file=nonEmpty(input.flags,"--file");if(file===void 0)throw new UsageError("--file <JSON> \u3092\u6307\u5B9A\u3057\u3066\u304F\
|
|
57
|
+
\u3060\u3055\u3044",usage);const parsed=parseTargetRows(readSetFile(file,usage));const errors=[...parsed.errors];const rows=[];for(const row of parsed.rows){try{const department=await ctx.resolver.department(row.ref,"department");rows.push({department_id:department.id,month:row.month,sales_target:row.sales_target,profit_target:row.profit_target})}catch(err){if(!(err instanceof UsageError))throw err;errors.push(`\u90E8\u7F72\u300C${row.ref}\u300D: ${err.message}`)}}const names=new Map((await ctx.
|
|
58
|
+
resolver.departments()).map(d=>[d.id,d.name]));const seen=new Set;for(const row of rows){const key=targetKey(row.department_id,row.month);if(seen.has(key))errors.push(`\u540C\u3058\u90E8\u7F72\u3068\u6708\u304C2\u56DE\u3042\u308A\u307E\u3059: ${names.get(row.department_id)??row.department_id} ${row.month}\u6708\uFF08\u5F8C\u306E\u884C\u304C\u9ED9\u3063\u3066\u52DD\u3064\u306E\u3067\u9001\u308A\u307E\u305B\u3093\uFF09`);seen.add(key)}if(errors.length>0)throw new UsageError(`--file \u306B\u8AA4\u308A\u304C ${errors.
|
|
59
|
+
length} \u4EF6\u3042\u308A\u307E\u3059\uFF081\u4EF6\u3082\u9001\u3063\u3066\u3044\u307E\u305B\u3093\uFF09:
|
|
60
|
+
${errors.join("\n ")}`,usage);const notes=overwriteLines(await currentTargets(ctx,year),rows,names,year);return withResolved(input,{targets:JSON.stringify(rows.map(row=>({fiscal_year:year,...row}))),notes:JSON.stringify(notes)})},plan:input=>({method:"POST",path:`${PATH}/targets`,body:{targets:JSON.parse(requireResolved(input,"targets"))}}),plannedNotes:input=>JSON.parse(requireResolved(input,"notes")),summarize:body=>dataRows(body,"\u4E88\u7B97\u76EE\u6A19").map(row=>pick(row,TARGET_WRITE_COLUMNS)),
|
|
61
|
+
raw:body=>dataRows(body,"\u4E88\u7B97\u76EE\u6A19"),notes:body=>[`${dataRows(body,"\u4E88\u7B97\u76EE\u6A19").length} \u4EF6\u306E\u76EE\u6A19\u3092\u66F8\u304D\u307E\u3057\u305F`]};var copyOperation={name:"copy-previous-year",summary:"\u524D\u5E74\u5EA6\u306E\u76EE\u6A19\u3092\u3001\u6307\u5B9A\u3057\u305F\u5E74\u5EA6\u3078\u305D\u306E\u307E\u307E\u5199\u3059\uFF08--yes \u304C\u8981\u308B\uFF09",usage:"twp budget target copy-previous-year --year <YYYY> [--department <\u90E8\u7F72>] --yes",description:"\
|
|
62
|
+
POST /api/v2/budget/targets/copy-previous-year\u3002--year \u306E\u524D\u5E74\u5EA6\uFF08YYYY-1\uFF09\u306E\u76EE\u6A19\u3092\u3001\u540C\u3058\u90E8\u7F72\u30FB\u6708\u306E --year \u306E\u76EE\u6A19\u3068\u3057\u3066\u66F8\u304D\u307E\u3059\u3002\n--year \u5074\u306B\u65E2\u306B\u76EE\u6A19\u304C\u3042\u308B\uFF08\u90E8\u7F72\u30FB\u6708\uFF09\u306F\u524D\u5E74\u5EA6\u306E\u5024\u3067\u4E0A\u66F8\u304D\u3055\u308C\u3001\u5143\u306B\u623B\u305B\u307E\u305B\u3093\u3002\u524D\u5E74\u5EA6\u306B\u76EE\u6A19\u306E\u7121\u3044\u90E8\u7F72\u30FB\u6708\u306F\u5909\u308F\u308A\u307E\u305B\u3093\u3002\n--department \u3092\u4ED8\u3051\u308B\u3068\u3001\u305D\u306E\u90E8\u7F72\u306E\u76EE\u6A19\u3060\u3051\u3092\u5199\u3057\u307E\u3059\uFF08\u914D\u4E0B\u306E\u90E8\u7F72\u306F\u542B\u307F\u307E\u305B\u3093\uFF09\u3002\n\u9001\u308B\u524D\u306B\u3001\u5199\u3059\u4EF6\u6570\u3068\u4E0A\u66F8\u304D\u3055\u308C\u308B\u4EF6\u6570\u3092 stderr \u306B\u51FA\u3057\u307E\u3059\uFF08--dry-run \u3067\u3082\u51FA\u307E\u3059\uFF09\u3002\u524D\u5E74\u5EA6\u306B\u76EE\u6A19\u304C\u7121\u3051\u308C\u3070\u4F55\u3082\u5199\u308A\u307E\u305B\u3093\u3002\n"+
|
|
63
|
+
EDIT_HINT,destructive:true,confirmation:"\u65E2\u5B58\u306E\u76EE\u6A19\u3092\u4E0A\u66F8\u304D\u3059\u308B\u64CD\u4F5C",flags:[REQUIRED_YEAR_FLAG,DEPARTMENT_FLAG],forbidden:FORBIDDEN,async prepare(input,ctx){noArgs(input,"target copy-previous-year");const year=fiscalYear(input,true);const department=nonEmpty(input.flags,DEPARTMENT_FLAG.name);const departmentId=department===void 0?void 0:(await ctx.resolver.department(department)).id;const source=await currentTargets(ctx,year-1,departmentId);const existing=await currentTargets(
|
|
64
|
+
ctx,year,departmentId);const names=new Map((await ctx.resolver.departments()).map(d=>[d.id,d.name]));const incoming=source.map(row=>({department_id:String(row["department_id"]),month:Number(row["month"]),sales_target:Number(row["sales_target"]),profit_target:Number(row["profit_target"])}));const notes=incoming.length===0?[`\u524D\u5E74\u5EA6\uFF08${year-1}\uFF09\u306B\u76EE\u6A19\u304C\u7121\u3044\u305F\u3081\u3001\u4F55\u3082\u5199\u308A\u307E\u305B\u3093\u3002`]:[`\u524D\u5E74\u5EA6\uFF08${year-
|
|
65
|
+
1}\uFF09\u306E\u76EE\u6A19\u3092\u5199\u3057\u307E\u3059\uFF08\u5199\u3059\u306E\u306F\u30B5\u30FC\u30D0\u3067\u3059\uFF09\u3002`,...overwriteLines(existing,incoming,names,year,"\u66F8\u304D\u307E\u3059")];return withResolved(input,{...departmentId===void 0?{}:{departmentId},notes:JSON.stringify(notes)})},plan:input=>({method:"POST",path:`${PATH}/targets/copy-previous-year`,body:{fiscal_year:fiscalYear(input,true),...input.resolved?.["departmentId"]===void 0?{}:{department_id:input.resolved["dep\
|
|
66
|
+
artmentId"]}}}),plannedNotes:input=>JSON.parse(requireResolved(input,"notes")),summarize:body=>dataRows(body,"\u524D\u5E74\u5EA6\u306E\u76EE\u6A19\u306E\u30B3\u30D4\u30FC").map(row=>pick(row,TARGET_WRITE_COLUMNS)),raw:body=>({copied_count:envelope(body,"\u524D\u5E74\u5EA6\u306E\u76EE\u6A19\u306E\u30B3\u30D4\u30FC")["copied_count"]??null,data:dataRows(body,"\u524D\u5E74\u5EA6\u306E\u76EE\u6A19\u306E\u30B3\u30D4\u30FC")}),notes:body=>[`${text(envelope(body,"\u524D\u5E74\u5EA6\u306E\u76EE\u6A19\u306E\u30B3\u30D4\u30FC")["\
|
|
67
|
+
copied_count"])} \u4EF6\u306E\u76EE\u6A19\u3092\u5199\u3057\u307E\u3057\u305F`]};function isImportOutcome(body){return isRecord(body)&&body["budgetImport"]===true}var TARGET_IMPORT_OP=["target","import"].join(" ");async function prepareImport(input,ctx){const usage=usageOf(TARGET_IMPORT_OP);noArgs(input,TARGET_IMPORT_OP);const year=fiscalYear(input,true);const file=nonEmpty(input.flags,"--file");if(file===void 0)throw new UsageError("--file <CSV> \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",
|
|
68
|
+
usage);let bytes;try{const stat=fs.statSync(file);if(!stat.isFile())throw new UsageError(`--file \u306B\u901A\u5E38\u306E\u30D5\u30A1\u30A4\u30EB\u4EE5\u5916\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093: ${file}`,usage);if(stat.size>IMPORT_MAX_BYTES)throw new UsageError(`--file \u306E\u30D5\u30A1\u30A4\u30EB\u304C\u5927\u304D\u3059\u304E\u307E\u3059\uFF08${stat.size} \u30D0\u30A4\u30C8\u30FB\u30B5\u30FC\u30D0\u304C\u53D7\u3051\u308B\u306E\u306F ${IMPORT_MAX_BYTES} \u30D0\u30A4\u30C8\u307E\u3067\uFF09: ${file}`,
|
|
69
|
+
"\u30D5\u30A1\u30A4\u30EB\u3092\u5206\u3051\u3066\u53D6\u308A\u8FBC\u3093\u3067\u304F\u3060\u3055\u3044\u3002");bytes=fs.readFileSync(file)}catch(err){if(err instanceof UsageError)throw err;throw new UsageError(`--file \u306E\u30D5\u30A1\u30A4\u30EB\u3092\u8AAD\u3081\u307E\u305B\u3093: ${file}\uFF08${err.code??err.message}\uFF09`,usage)}const existing=await currentTargets(ctx,year);const departments=new Set(existing.map(row=>String(row["department_id"]))).size;const notes=[existing.length===0?`${year}\
|
|
70
|
+
\u5E74\u5EA6\u306B\u76EE\u6A19\u306F\u307E\u3060\u3042\u308A\u307E\u305B\u3093\u3002`:`${year} \u5E74\u5EA6\u306B\u306F\u65E2\u306B\u76EE\u6A19\u304C ${existing.length} \u4EF6\uFF08${departments} \u90E8\u7F72\uFF09\u3042\u308A\u307E\u3059\u3002CSV \u306B\u5024\u306E\u3042\u308B\u90E8\u7F72\u30FB\u6708\u306F\u4E0A\u66F8\u304D\u3055\u308C\u3001\u5143\u306B\u623B\u305B\u307E\u305B\u3093\uFF08CSV \u306B\u7121\u3044\u90E8\u7F72\u30FB\u6708\u306F\u5909\u308F\u308A\u307E\u305B\u3093\uFF09\u3002`,"\u30B5\u30FC\u30D0\u304C\
|
|
71
|
+
\u5168\u884C\u3092\u691C\u67FB\u3057\u3001\u691C\u67FB\u30671\u884C\u3067\u3082\u8AA4\u308A\u304C\u3042\u308C\u30701\u4EF6\u3082\u66F8\u304D\u307E\u305B\u3093\uFF08\u305D\u306E\u3068\u304D\u306F\u884C\u3054\u3068\u306E\u7406\u7531\u3092\u3059\u3079\u3066\u51FA\u3057\u307E\u3059\uFF09\u3002"];return withResolved(input,{fileName:path.basename(file),fileBase64:bytes.toString("base64"),notes:JSON.stringify(notes)})}function importPlan(input){const bytes=Buffer.from(requireResolved(input,"fileBase64"),
|
|
72
|
+
"base64");return{method:"POST",path:`${PATH}/targets/import`,body:new MultipartBody({fiscal_year:String(fiscalYear(input,true))},[{field:"file",filename:requireResolved(input,"fileName"),contentType:"text/csv",bytes:new Uint8Array(bytes)}])}}function importRejection(err){if(!(err instanceof ApiError)||err.status!==422||!isRecord(err.body))return void 0;const body=err.body;const errors=Array.isArray(body["errors"])?body["errors"].filter(e=>typeof e==="string"):[];if(errors.length===0)return void 0;
|
|
73
|
+
const head=text(body["message"])||"CSV \u3092\u53D6\u308A\u8FBC\u3081\u307E\u305B\u3093\u3067\u3057\u305F\u3002";return new ApiRejectedError(`${head} \u8AA4\u308A\u304C ${errors.length} \u4EF6\u3042\u308A\u307E\u3059\uFF081\u4EF6\u3082\u66F8\u3044\u3066\u3044\u307E\u305B\u3093\uFF09:
|
|
74
|
+
${errors.join("\n ")}`)}async function runImport(input,ctx){let body;try{body=await ctx.send(importPlan(input))}catch(err){const rejected=importRejection(err);if(rejected!==void 0)throw rejected;if(!(err instanceof ApiError)||err.status>=500){ctx.warn("\u53D6\u308A\u8FBC\u307F\u306E\u9014\u4E2D\u3067\u5931\u6557\u3057\u305F\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002\u4E00\u90E8\u306E\u76EE\u6A19\u304C\u66F8\u304B\u308C\u3066\u3044\u308B\u3053\u3068\u304C\u3042\u308B\u306E\u3067\u3001twp budget target list --year \u3067\u78BA\u304B\u3081\u3066\u304F\u3060\u3055\u3044\u3002")}
|
|
75
|
+
throw err}const data=dataRecord(body,"\u76EE\u6A19\u306E\u53D6\u308A\u8FBC\u307F");return{budgetImport:true,imported_count:data["imported_count"]??null,message:data["message"]??null}}var targetImportOperation={name:"import",summary:"\u76EE\u6A19\u3092 CSV \u3067\u53D6\u308A\u8FBC\u3080\uFF08--year\u30FB--file\u30FB--yes \u304C\u8981\u308B\uFF09",usage:"twp budget target import --year <YYYY> --file <CSV> --yes",description:"POST /api/v2/budget/targets/import\u3002\u96DB\u5F62\uFF08twp budget target import-template\uFF09\u306E\
|
|
76
|
+
\u5F62\u306E CSV \u3092\u3001--year \u306E\u5E74\u5EA6\u306E\u76EE\u6A19\u3068\u3057\u3066\u53D6\u308A\u8FBC\u307F\u307E\u3059\u3002\n\u5217\u306F department_id\uFF08\u90E8\u7F72 ID \u304B\u90E8\u7F72\u540D\uFF09\u3068 sales_target_<\u6708> / profit_target_<\u6708>\uFF081\u301C12\u30FB\u300C<\u6708>\u6708_\u58F2\u4E0A\u76EE\u6A19\u300D\u3067\u3082\u53EF\uFF09\u3067\u3059\u3002\n\u5024\u306E\u3042\u308B\uFF08\u90E8\u7F72\u30FB\u6708\uFF09\u3060\u3051\u3092\u66F8\u304D\u3001\u65E2\u5B58\u306E\u76EE\u6A19\u306F\u4E0A\u66F8\u304D\u3055\u308C\u307E\u3059\uFF08\u5143\u306B\u623B\u305B\u307E\u305B\u3093\uFF09\u3002\u7A7A\u306E\u6708\u306F\u5909\u308F\u308A\u307E\u305B\u3093\u3002\n\u6587\u5B57\u30B3\u30FC\u30C9\u306F UTF-8\uFF08BOM \u4ED8\u304D\u3067\u3082\u53EF\uFF09\u304B Shift_JIS\uFF08Excel \u306E\u65E2\u5B9A\uFF09\u3067\u3059\u3002\u5224\u5B9A\u306F\u30B5\u30FC\u30D0\u304C\u884C\u3044\u307E\u3059\u3002\n\u30B5\u30FC\u30D0\u306F\u5168\u884C\u3092\u691C\u67FB\u3057\u30011\u884C\u3067\u3082\u8AA4\u308A\uFF08\u90E8\u7F72\u304C\u898B\u3064\u304B\u3089\u306A\u3044\u30FB\u6570\u5024\u3067\u306A\u3044\u30FB\u8CA0\u306E\u5024\u30FB\u5024\u304C1\u3064\u3082\u7121\u3044\u884C\uFF09\u304C\u3042\u308C\u30701\u4EF6\u3082\u66F8\u304B\u305A\u306B\n\u884C\u3054\u3068\u306E\u7406\u7531\u3092\u8FD4\u3057\u307E\u3059\u3002CLI \u306F\u305D\u308C\u3092\u3059\u3079\u3066\u51FA\u3057\u3066\u7D42\u4E86\u30B3\u30FC\u30C9 3 \u3067\u7D42\u308F\u308A\u307E\u3059\uFF08\u691C\u67FB\u3092\u901A\u3063\u305F\u5F8C\u306E\u66F8\u304D\u8FBC\u307F\u306E\u9014\u4E2D\u3067\u5931\u6557\u3057\u305F\u3068\u304D\u306F\u3001\n\u4E00\u90E8\u304C\u66F8\u304B\u308C\u3066\u3044\u308B\u3053\u3068\u304C\u3042\u308A\u307E\u3059\u3002\u305D\u306E\u3068\u304D\u306F stderr \u3067\u305D\u3046\u8A00\u3044\u307E\u3059\uFF09\u3002\n\u9001\u308B\u524D\u306B\u3001\u305D\u306E\u5E74\u5EA6\u306E\u65E2\u5B58\u306E\u76EE\u6A19\u306E\u4EF6\u6570\u3092 stderr \u306B\u51FA\u3057\u307E\u3059\uFF08--dry-run \u3067\u3082\u51FA\u307E\u3059\u3002CSV \u306E\u4E2D\u8EAB\u306F\u51FA\u3057\u307E\u305B\u3093\uFF09\u3002\n"+
|
|
77
|
+
EDIT_HINT,destructive:true,confirmation:"\u65E2\u5B58\u306E\u76EE\u6A19\u3092\u4E0A\u66F8\u304D\u3059\u308B\u64CD\u4F5C",flags:[REQUIRED_YEAR_FLAG,{name:"--file",summary:"\u53D6\u308A\u8FBC\u3080 CSV\uFF08\u5FC5\u9808\u30FB1\u884C\u76EE\u304C\u898B\u51FA\u3057\uFF09",takesValue:true,placeholder:"<CSV>"}],forbidden:FORBIDDEN,prepare:prepareImport,plan:importPlan,plannedNotes:input=>JSON.parse(requireResolved(input,"notes")),execute:runImport,summarize:body=>isImportOutcome(body)?{imported_count:body.
|
|
78
|
+
imported_count}:body,raw:body=>isImportOutcome(body)?{imported_count:body.imported_count,message:body.message}:body,notes:body=>isImportOutcome(body)&&typeof body.message==="string"?[body.message]:[]};var templateOperation={name:"import-template",summary:"\u76EE\u6A19\u306E\u53D6\u308A\u8FBC\u307F\u7528 CSV \u306E\u96DB\u5F62\u3092\u66F8\u304D\u51FA\u3059\uFF08--out\uFF09",usage:"twp budget target import-template --out <\u30D1\u30B9.csv> [--force] [--year <YYYY>] [--start-month <\u6708>]",description:"\
|
|
79
|
+
GET /api/v2/budget/targets/import-template\u3002\u90E8\u7F72\u3054\u3068\u306B1\u884C\uFF08department_id\u30FB\u90E8\u7F72\u540D\u3068\u3001\u6708\u3054\u3068\u306E\u7A7A\u306E\u58F2\u4E0A\u76EE\u6A19\u30FB\u5229\u76CA\u76EE\u6A19\u306E\u5217\uFF09\u306E CSV\uFF08UTF-8\u30FBBOM \u4ED8\u304D\uFF09\u3067\u3059\u3002\n--year \u3092\u4ED8\u3051\u308B\u3068\u305D\u306E\u5E74\u5EA6\u306B\u5728\u7C4D\u3057\u3066\u3044\u305F\u90E8\u7F72\uFF08\u5E74\u5EA6\u9014\u4E2D\u3067\u7D42\u4E86\u3057\u305F\u90E8\u7F72\u3092\u542B\u3080\uFF09\u3001\u7701\u304F\u3068\u4ECA\u65E5\u6642\u70B9\u3067\u6709\u52B9\u306A\u90E8\u7F72\u304C\u4E26\u3073\u307E\u3059\u3002\n\u5024\u3092\u57CB\u3081\u3066 twp budget target import \u3067\u53D6\u308A\u8FBC\u307F\u307E\u3059\u3002\u65E2\u5B58\u306E\u30D5\u30A1\u30A4\u30EB\u306F\u4E0A\u66F8\u304D\u3057\u307E\u305B\u3093\uFF08\u4E0A\u66F8\u304D\u3059\u308B\u306A\u3089 --force\uFF09\u3002",
|
|
80
|
+
flags:[OUT_FLAG,FORCE_FLAG,TEMPLATE_YEAR_FLAG,START_MONTH_FLAG],download:{outFlag:OUT_FLAG.name,forceFlag:FORCE_FLAG.name},forbidden:FORBIDDEN,plan:input=>{noArgs(input,"target import-template");return{method:"GET",path:`${PATH}/targets/import-template`,query:periodQuery(input,false)}},summarize:body=>body,raw:body=>body};var targetResource={name:"target",summary:"\u5E74\u5EA6\u306E\u76EE\u6A19\uFF08\u4E00\u89A7\u30FB\u307E\u3068\u3081\u3066\u767B\u9332\u30FB\u524D\u5E74\u5EA6\u304B\u3089\u306E\u30B3\u30D4\u30FC\u30FBCSV \u306E\u53D6\u308A\u8FBC\u307F\u3068\u96DB\u5F62\uFF09",
|
|
81
|
+
operations:[targetListOperation,targetSetOperation,copyOperation,targetImportOperation,templateOperation]};var ALLOCATION_COLUMNS=["department_id","department_name","allocation_type","percentage","amount","updated_at"];var PROJECT_FLAG={name:"--project",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\uFF08\u30B3\u30FC\u30C9\u30FBID\u3002\u7701\u304F\u3068\u65E2\u5B9A\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\uFF09",takesValue:true,placeholder:"<\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8>"};var SPLIT_FLAG={
|
|
82
|
+
name:"--split",summary:"<\u90E8\u7F72>=<\u6BD4\u7387>%\uFF08\u6BD4\u7387\uFF09\u304B <\u90E8\u7F72>=<\u91D1\u984D>\uFF08\u5186\uFF09\u3002\u8907\u6570\u56DE\u6307\u5B9A\u53EF",takesValue:true,placeholder:"<\u90E8\u7F72>=<\u5024>",repeatable:true};var CLEAR_FLAG={name:"--clear",summary:"\u6309\u5206\u3092\u3059\u3079\u3066\u6D88\u3059\uFF08--split \u3068\u540C\u6642\u306B\u6307\u5B9A\u3067\u304D\u306A\u3044\uFF09",takesValue:false};function parseSplit(raw){const at=raw.lastIndexOf("=");const ref=at<
|
|
83
|
+
0?"":raw.slice(0,at).trim();const valueText=at<0?"":raw.slice(at+1).trim();const bad=new UsageError(`--split \u306F <\u90E8\u7F72>=<\u6BD4\u7387>%\uFF080\u301C100\uFF09\u304B <\u90E8\u7F72>=<\u91D1\u984D>\uFF080 \u4EE5\u4E0A\u306E\u6574\u6570\u30FB\u5186\uFF09\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${raw}`,usageOf("allocation set"));if(ref==="")throw bad;if(valueText.endsWith("%")){const number=valueText.slice(0,-1).trim();const value2=Number(number);if(!/^\d+(\.\d+)?$/.test(number)||
|
|
84
|
+
value2>100)throw bad;return{ref,type:"percentage",value:value2}}const value=Number(valueText);if(!/^\d+$/.test(valueText)||value>AMOUNT_MAX)throw bad;return{ref,type:"amount",value}}function splitLabel(row){return row.allocation_type==="amount"?yen(row.amount):`${text(row.percentage)}%`}async function prepareAllocationSet(input,ctx){const usage=usageOf("allocation set");noArgs(input,"allocation set");const raws=repeatedValues(input,SPLIT_FLAG.name);const clear=input.flags.has(CLEAR_FLAG.name);if(clear&&
|
|
85
|
+
raws.length>0)throw new UsageError("--clear \u3068 --split \u306F\u540C\u6642\u306B\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093",usage);if(!clear&&raws.length===0)throw new UsageError("\u6309\u5206\u3092 --split <\u90E8\u7F72>=<\u5024> \u30671\u3064\u4EE5\u4E0A\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u6309\u5206\u3092\u3059\u3079\u3066\u6D88\u3059\u306A\u3089 --clear\uFF09",usage);const parsed=raws.map(parseSplit);const projectId=await ctx.projectId(nonEmpty(input.flags,PROJECT_FLAG.
|
|
86
|
+
name));const splits=[];for(const{ref,type,value}of parsed){const department=await ctx.resolver.department(ref,SPLIT_FLAG.name);if(splits.some(s=>s.department_id===department.id))throw new UsageError(`\u540C\u3058\u90E8\u7F72\u304C2\u56DE\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u3059: ${department.name}`,usage);splits.push(type==="amount"?{department_id:department.id,allocation_type:"amount",amount:value}:{department_id:department.id,allocation_type:"percentage",percentage:value})}let before;try{
|
|
87
|
+
before=dataRows(await ctx.resolver.salesJson(`${PATH}/allocations?project_id=${encodeURIComponent(projectId)}`,"\u90E8\u7F72\u6309\u5206"),"\u90E8\u7F72\u6309\u5206")}catch(err){if(!(err instanceof ApiError&&err.status===403))throw err}const names=new Map((await ctx.resolver.departments()).map(d=>[d.id,d.name]));const label=id=>names.get(String(id))??String(id);const notes=[clear?`\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8 ${projectId} \u306E\u90E8\u7F72\u6309\u5206\u3092\u3059\u3079\u3066\u6D88\u3057\u307E\u3059:`:
|
|
88
|
+
`\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8 ${projectId} \u306E\u90E8\u7F72\u6309\u5206\u3092\u5168\u4EF6\u7F6E\u304D\u63DB\u3048\u307E\u3059\uFF08\u6307\u5B9A\u3057\u306A\u304B\u3063\u305F\u90E8\u7F72\u306E\u6309\u5206\u306F\u6D88\u3048\u307E\u3059\uFF09:`,...before===void 0?[" \u7F6E\u63DB\u524D: \u8AAD\u3081\u307E\u305B\u3093\uFF08\u3053\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u95B2\u89A7\u3067\u304D\u306A\u3044\u305F\u3081\u3002\u65E2\u5B58\u306E\u6309\u5206\u306F\u5168\u90E8\u7F6E\u304D\u63DB\u308F\u308A\u307E\u3059\uFF09"]:
|
|
89
|
+
before.length===0?[" \u7F6E\u63DB\u524D: \u306A\u3057"]:before.map(row=>` \u7F6E\u63DB\u524D: ${label(row["department_id"])} ${splitLabel(row)}`),...clear?[" \u7F6E\u63DB\u5F8C: \u306A\u3057"]:splits.map(s=>` \u7F6E\u63DB\u5F8C: ${label(s.department_id)} ${splitLabel(s)}`)];return withResolved(input,{projectId,body:JSON.stringify({project_id:projectId,allocations:splits}),notes:JSON.stringify(notes)})}var allocationResource={name:"allocation",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u90E8\u7F72\u6309\u5206\uFF08\u4E88\u5B9F\u306E\u90E8\u7F72\u5225\u306E\u58F2\u4E0A\u306E\u914D\u308A\u65B9\u30FB\u4E00\u89A7\u3068\u5168\u4EF6\u7F6E\u63DB\uFF09",
|
|
90
|
+
operations:[{name:"list",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u90E8\u7F72\u6309\u5206\u3092\u8868\u793A\u3059\u308B",usage:"twp budget allocation list [--project <\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8>]",description:`GET /api/v2/budget/allocations\u3002\u6309\u5206\u304C\u7121\u3051\u308C\u3070\u7A7A\u306E\u4E00\u89A7\u3067\u3059\uFF08\u3053\u306E API \u306F\u30DA\u30FC\u30B8\u30F3\u30B0\u3092\u6301\u3061\u307E\u305B\u3093\uFF09\u3002
|
|
91
|
+
\u6309\u5206\u306F\u884C\u3054\u3068\u306B\u6BD4\u7387\uFF08percentage\u30FB%\uFF09\u304B\u91D1\u984D\uFF08amount\u30FB\u5186\uFF09\u306E\u3069\u3061\u3089\u304B\u3067\u3001\u4F7F\u308F\u306A\u3044\u5074\u306F 0 \u3067\u3059\u3002
|
|
92
|
+
--output table / text / tsv \u306F\u8981\u7D04\u5217\uFF08${ALLOCATION_COLUMNS.join(" / ")}\uFF09\u3067\u3059\u3002`,flags:[PROJECT_FLAG],forbidden:FORBIDDEN,async prepare(input,ctx){noArgs(input,"allocation list");return withResolved(input,{projectId:await ctx.projectId(nonEmpty(input.flags,PROJECT_FLAG.name))})},plan:input=>({method:"GET",path:`${PATH}/allocations`,query:{project_id:requireResolved(input,"projectId")}}),summarize:body=>dataRows(body,"\u90E8\u7F72\u6309\u5206").map(row=>pick(row,
|
|
93
|
+
ALLOCATION_COLUMNS)),raw:body=>dataRows(body,"\u90E8\u7F72\u6309\u5206"),notes:body=>dataRows(body,"\u90E8\u7F72\u6309\u5206").length===0?["\u90E8\u7F72\u6309\u5206\u306F\u3042\u308A\u307E\u305B\u3093"]:[]},{name:"set",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u90E8\u7F72\u6309\u5206\u3092\u5168\u4EF6\u7F6E\u304D\u63DB\u3048\u308B\uFF08--clear \u3067\u5168\u90E8\u6D88\u3059\u30FB--yes \u304C\u8981\u308B\uFF09",usage:"twp budget allocation set [--project <\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8>] (--split <\u90E8\u7F72>=<\u5024>... |\
|
|
94
|
+
--clear) --yes",description:"POST /api/v2/budget/allocations \u3067\u6309\u5206\u3092**\u5168\u4EF6\u7F6E\u304D\u63DB\u3048\u307E\u3059**\uFF08\u6307\u5B9A\u3057\u306A\u304B\u3063\u305F\u90E8\u7F72\u306E\u6309\u5206\u306F\u6D88\u3048\u3001\u5143\u306B\u623B\u305B\u307E\u305B\u3093\uFF09\u3002\n--split <\u90E8\u7F72>=60% \u306F\u6BD4\u7387\u3001--split <\u90E8\u7F72>=500000 \u306F\u91D1\u984D\uFF08\u5186\uFF09\u3067\u3059\u3002\u884C\u3054\u3068\u306B\u6DF7\u305C\u3089\u308C\u307E\u3059\u3002--clear \u306F\u6309\u5206\u3092\u3059\u3079\u3066\u6D88\u3057\u307E\u3059\u3002\n**\u6BD4\u7387\u306E\u5408\u8A08\uFF08100%\uFF09\u306F\u30B5\u30FC\u30D0\u3082 CLI \u3082\u691C\u67FB\u3057\u307E\u305B\u3093**\uFF08\u884C\u3054\u3068\u306E\u7BC4\u56F2\u3060\u3051\u3092\u898B\u307E\u3059\uFF09\u3002\u5408\u8A08\u306F\u9001\u308B\u524D\u306B\u81EA\u5206\u3067\u78BA\u304B\u3081\u3066\u304F\u3060\u3055\u3044\u3002\n\u9001\u308B\u524D\u306B\u7F6E\u63DB\u524D\u3068\u7F6E\u63DB\u5F8C\u306E\u6309\u5206\u3092 stderr \u306B\u51FA\u3057\u307E\u3059\uFF08--dry-run \u3067\u3082\u51FA\u307E\u3059\uFF09\u3002\n \u4F8B: twp budget allocation set --project SAMPLE --split \u958B\u767A\u90E8=60% --split \u55B6\u696D\u90E8=40% --yes\n"+
|
|
95
|
+
EDIT_HINT,destructive:true,confirmation:"\u90E8\u7F72\u6309\u5206\u3092\u5168\u4EF6\u7F6E\u304D\u63DB\u3048\u308B\u64CD\u4F5C",flags:[PROJECT_FLAG,SPLIT_FLAG,CLEAR_FLAG],forbidden:FORBIDDEN,prepare:prepareAllocationSet,plan:input=>({method:"POST",path:`${PATH}/allocations`,body:JSON.parse(requireResolved(input,"body"))}),plannedNotes:input=>JSON.parse(requireResolved(input,"notes")),summarize:body=>dataRows(body,"\u90E8\u7F72\u6309\u5206").map(row=>pick(row,ALLOCATION_COLUMNS.filter(column=>column!==
|
|
96
|
+
"department_name"))),raw:body=>dataRows(body,"\u90E8\u7F72\u6309\u5206"),notes:body=>[`\u90E8\u7F72\u6309\u5206\u3092 ${dataRows(body,"\u90E8\u7F72\u6309\u5206").length} \u4EF6\u306B\u3057\u307E\u3057\u305F`]}]};var budgetDomain={name:"budget",summary:"\u4E88\u5B9F\u7BA1\u7406\uFF08\u5E74\u5EA6\u306E\u76EE\u6A19\u30FB\u30C0\u30C3\u30B7\u30E5\u30DC\u30FC\u30C9\u30FB\u30B5\u30DE\u30EA\u30FC\u30FB\u5185\u8A33\u30FBCSV \u51FA\u529B\u3001\u76EE\u6A19\u306E\u767B\u9332\u3068\u53D6\u308A\u8FBC\u307F\u3001\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u90E8\u7F72\u6309\u5206\uFF09",
|
|
97
|
+
operations:[dashboardOperation,summaryOperation,breakdownOperation,unassignedOperation,exportOperation],subresources:[targetResource,allocationResource]};export{breakdownRows,budgetDomain,dashboardRows,fiscalYear,importRejection,overwriteLines,parseSplit,parseTargetRows};
|
|
@@ -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-Y5EN7RYN.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"?{
|
|
@@ -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-D5FEOBB6.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_\
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
|
+
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
+
var LOADERS={"agent-loop":async()=>(await import("./agent-loop-RMJXHBNG.js")).agentLoopDomain,"ai-review-reason":async()=>(await import("./sales-ai-review-LC4XDQLS.js")).aiReviewReasonDomain,analysis:async()=>(await import("./analysis-KUCETWIJ.js")).analysisDomain,attendance:async()=>(await import("./attendance-K2U7RYDU.js")).attendanceDomain,backlog:async()=>(await import("./backlog-Q7VYDMDL.js")).backlogDomain,budget:async()=>(await import("./budget-FOFE3YUJ.js")).budgetDomain,"busin\
|
|
4
|
+
ess-place":async()=>(await import("./sales-master-C4EYXIKP.js")).businessPlaceDomain,company:async()=>(await import("./company-UTEAM246.js")).companyDomain,contract:async()=>(await import("./contract-GUY73GRP.js")).contractDomain,customer:async()=>(await import("./company-UTEAM246.js")).customerDomain,department:async()=>(await import("./department-QMTJYMN2.js")).departmentDomain,deposit:async()=>(await import("./deposit-FOATHWXV.js")).depositDomain,estimate:async()=>(await import("./estimate-6UWI7SKV.js")).
|
|
5
|
+
estimateDomain,inquiry:async()=>(await import("./inquiry-3VBBJT2K.js")).inquiryDomain,invoice:async()=>(await import("./invoice-FOZJR42A.js")).invoiceDomain,"job-title":async()=>(await import("./job-title-IIRFPZNV.js")).jobTitleDomain,leave:async()=>(await import("./leave-LQAXN6F4.js")).leaveDomain,media:async()=>(await import("./media-VK6AUGZY.js")).mediaDomain,meeting:async()=>(await import("./knowledge-6SXUV46K.js")).meetingDomain,note:async()=>(await import("./knowledge-6SXUV46K.js")).
|
|
6
|
+
noteDomain,notification:async()=>(await import("./notification-NTU3JCR2.js")).notificationDomain,onedrive:async()=>(await import("./onedrive-XAFONTRT.js")).onedriveDomain,outlook:async()=>(await import("./outlook-PQ4OCB5Z.js")).outlookDomain,payee:async()=>(await import("./sales-master-C4EYXIKP.js")).payeeDomain,position:async()=>(await import("./position-WGLV3JZ6.js")).positionDomain,project:async()=>(await import("./project-REBUFMPX.js")).projectDomain,prospect:async()=>(await import("./prospect-DJAJNTRQ.js")).
|
|
7
|
+
prospectDomain,purchase:async()=>(await import("./purchase-7RVUWXMS.js")).purchaseDomain,receivable:async()=>(await import("./receivable-SHRWUYJW.js")).receivableDomain,report:async()=>(await import("./report-SUTO7E7Z.js")).reportDomain,"rounding-setting":async()=>(await import("./sales-numbering-YK447QBC.js")).roundingSettingDomain,"seal-impression":async()=>(await import("./sales-master-C4EYXIKP.js")).sealImpressionDomain,shift:async()=>(await import("./attendance-lists-NVRU2NLY.js")).shiftDomain,
|
|
8
|
+
storage:async()=>(await import("./storage-KLLBENBY.js")).storageDomain,"supplier-payment":async()=>(await import("./supplier-payment-MLLTGVCO.js")).supplierPaymentDomain,task:async()=>(await import("./task-7SKWCZWV.js")).taskDomain,teams:async()=>(await import("./teams-RDBKQJMM.js")).teamsDomain,user:async()=>(await import("./user-FPXO3IHG.js")).userDomain,wiki:async()=>(await import("./knowledge-6SXUV46K.js")).wikiDomain,workchange:async()=>(await import("./attendance-lists-NVRU2NLY.js")).
|
|
9
|
+
workchangeDomain,workflow:async()=>(await import("./workflow-FU2EBVBW.js")).workflowDomain};async function loadDomain(name){return LOADERS[name]()}export{loadDomain};
|
|
@@ -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{graphNextCursor,ms365NamedRow,ms365NotConnectedGuidance,ms365Path,ms365Segment}from"./chunk-3HH5IYNO.js";import{ApiError}from"./chunk-IF2K4PM5.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(
|
|
@@ -98,16 +99,18 @@ key,options);if(hit!==null&&Array.isArray(hit))return hit;const fresh=await load
|
|
|
98
99
|
"TWP \u306E\u5916\u90E8\u9023\u643A\u8A2D\u5B9A\u3067 Backlog \u30B9\u30DA\u30FC\u30B9\u3092\u767B\u9332\u3057\u3066\u304F\u3060\u3055\u3044\uFF08twp backlog space list \u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\uFF09\u3002")}throw new UsageError(`Backlog \u30B9\u30DA\u30FC\u30B9\u304C ${spaces.length} \u4EF6\u767B\u9332\u3055\u308C\u3066\u3044\u308B\u305F\u3081\u3001--space \u30671\u3064\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044`,`twp backlog space list \u3067 ID \u3068\u30B9\u30DA\u30FC\u30B9URL\u3092\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002`)}async backlogProjects(spaceId){
|
|
99
100
|
return this.cached("backlog-projects",spaceId,()=>this.namedList(backlogSpacePath(spaceId,"/projects"),"projects","Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8",backlogProjectRow))}async backlogStatuses(spaceId,projectId){return this.cached("backlog-statuses",`${spaceId}/${projectId}`,()=>this.namedList(backlogSpacePath(spaceId,`/projects/${encodeURIComponent(assertBacklogPathSegment(projectId,"Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8 ID"))}/statuses`),"statuses","Backlog \u30B9\u30C6\u30FC\u30BF\u30B9",
|
|
100
101
|
backlogStatusRow))}async backlogUsers(spaceId,projectId){return this.cached("backlog-users",`${spaceId}/${projectId}`,()=>this.namedList(backlogSpacePath(spaceId,`/projects/${encodeURIComponent(assertBacklogPathSegment(projectId,"Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8 ID"))}/users`),"users","Backlog \u30E6\u30FC\u30B6\u30FC",backlogUserRow))}async ms365Teams(){return this.cached("ms365-teams",MS365_TEAMS_CACHE_KEY,()=>this.ms365NamedList(ms365Path("/teams/teams"),"Teams \u306E\u30C1\u30FC\u30E0"))}async ms365Team(ref){
|
|
101
|
-
return resolveNamed(ref,await this.ms365Teams(),{flag:"--team",label:"\u30C1\u30FC\u30E0",scope:MS365_SCOPE_LABEL})}async ms365Channels(teamId){return this.cached("ms365-channels",teamId,()=>this.ms365NamedList(ms365Path(`/teams/teams/${ms365Segment(teamId,"\u30C1\u30FC\u30E0 ID")}/channels`),"Teams \u306E\u30C1\u30E3\u30CD\u30EB"))}async ms365Channel(teamId,ref){return resolveNamed(ref,await this.ms365Channels(teamId),{flag:"--channel",label:"\u30C1\u30E3\u30CD\u30EB",scope:"\u3053\u306E\u30C1\u30FC\u30E0"})}async
|
|
102
|
-
const
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`,res.status)}
|
|
106
|
-
return
|
|
102
|
+
return resolveNamed(ref,await this.ms365Teams(),{flag:"--team",label:"\u30C1\u30FC\u30E0",scope:MS365_SCOPE_LABEL})}async ms365Channels(teamId){return this.cached("ms365-channels",teamId,()=>this.ms365NamedList(ms365Path(`/teams/teams/${ms365Segment(teamId,"\u30C1\u30FC\u30E0 ID")}/channels`),"Teams \u306E\u30C1\u30E3\u30CD\u30EB"))}async ms365Channel(teamId,ref){return resolveNamed(ref,await this.ms365Channels(teamId),{flag:"--channel",label:"\u30C1\u30E3\u30CD\u30EB",scope:"\u3053\u306E\u30C1\u30FC\u30E0"})}async ms365Message(messageId){
|
|
103
|
+
const res=await this.get(ms365Path(`/outlook/messages/${ms365Segment(messageId,"\u30E1\u30FC\u30EBID")}`));if(!res.ok){throw new ResolveError(ms365NotConnectedGuidance(res.json)??`\u5143\u306E\u30E1\u30FC\u30EB\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08HTTP ${res.status}\uFF09\u3002\u30E1\u30FC\u30EBID \u306F twp outlook mail list \u306E id \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002`,res.status)}const data=isRecord(res.json)?res.json["data"]:void 0;
|
|
104
|
+
if(!isRecord(data)){throw new ResolveError("\u5143\u306E\u30E1\u30FC\u30EB\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",res.status)}return data}async ms365NamedList(path2,label){const rows=[];let cursor=null;for(let page=1;page<=MS365_RESOLVE_MAX_PAGES;page+=1){const res=await this.get(cursor===null?path2:`${path2}?skiptoken=${encodeURIComponent(cursor)}`);if(!res.ok){throw new ResolveError(
|
|
105
|
+
ms365NotConnectedGuidance(res.json)??`${label}\u306E\u4E00\u89A7\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08HTTP ${res.status}\uFF09\u3002\u63A5\u7D9A\u5148\u3068\u30ED\u30B0\u30A4\u30F3\u72B6\u614B\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`,res.status)}const data=isRecord(res.json)?res.json["data"]:void 0;const value=isRecord(data)?data["value"]:void 0;if(!isRecord(data)||!Array.isArray(value)){throw new ResolveError(`${label}\u4E00\u89A7\u306E\u5FDC\u7B54\u306B data.value \u914D\u5217\u304C\u3042\u308A\
|
|
106
|
+
\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+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)
|
|
107
|
+
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\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}\
|
|
108
|
+
\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(){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`)}
|
|
109
|
+
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.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}\
|
|
107
110
|
\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(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["emai\
|
|
108
111
|
l"]);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){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.
|
|
109
112
|
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`,res.status)}return rows}function codedMasterRow(row){return{id:str(row["id"]),name:str(row["name"]),code:str(row["code"]),isDefault:truthyFlag(
|
|
110
113
|
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\u306B id / \u540D\u524D\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`,
|
|
111
114
|
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;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.
|
|
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};
|
|
115
|
+
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,
|
|
116
|
+
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{FORCE_FLAG,OUT_FLAG,REV_FLAG,revOf,singleId,uploadStaged}from"./chunk-
|
|
3
|
+
import{FORCE_FLAG,OUT_FLAG,REV_FLAG,revOf,singleId,uploadStaged}from"./chunk-JLNY7HRM.js";import{CUSTOMER_LICENSE,childForbidden,levelForbidden}from"./chunk-EWTFE233.js";import{inspectLocalFile}from"./chunk-HNUBM24L.js";import{createFlags,fieldBody,hasAnyField,updateFlags}from"./chunk-JNPCHV7S.js";import{SALES_ESTIMATES_PATH,isExactNumericId}from"./chunk-D5FEOBB6.js";import{nonEmpty}from"./chunk-IOGMOXYF.js";import{requireResolved,withResolved}from"./chunk-LXIAOCUW.js";
|
|
4
4
|
import{acknowledgement,isRecord,pick}from"./chunk-VTQAI52S.js";import{ApiResponseError,UsageError}from"./chunk-UFND7FBC.js";import fs from"fs";import path from"path";var DOCUMENT_TYPES=["order_form","individual_contract","other"];var DOCUMENT_TYPE_HELP="order_form\uFF1D\u6CE8\u6587\u66F8 / individual_contract\uFF1D\u500B\u5225\u5951\u7D04\u66F8 / other\uFF1D\u305D\u306E\u4ED6\u6848\u4EF6\u66F8\u985E";var MAGIC_BYTES={pdf:["%PDF-"],jpg:["\xFF\xD8\xFF"],jpeg:["\xFF\xD8\xFF"],png:["\x89PNG\r\n\n"],xlsx:["PK","PK","PK\x07\b"],docx:["PK","PK","PK\x07\b"],xls:["\xD0\xCF\xE0\xA1\xB1\xE1"],doc:["\xD0\xCF\xE0\xA1\xB1\xE1"]};var FILE_NAME_MAX_CHARS=255;var FIELDS=[
|
|
5
5
|
{kind:"text",flag:"--name",key:"document_name",label:"\u66F8\u985E\u540D",maxChars:255,summary:"\u66F8\u985E\u540D\uFF08create \u3067\u306F\u5FC5\u9808\uFF09"},{kind:"enum",flag:"--type",key:"document_type",values:DOCUMENT_TYPES,summary:`\u66F8\u985E\u7A2E\u5225\uFF08${DOCUMENT_TYPE_HELP}\u30FBcreate \u3067\u306F\u5FC5\u9808\uFF09`}];var COLUMNS=["document_id","estimate_id","document_type","document_type_label","document_name","current_version","updated_by_name","updated_at"];var VERSION_COLUMNS=[
|
|
6
6
|
"version_number","file_name","file_size","is_current","created_by_name","created_at"];var ESTIMATE_FLAG={name:"--estimate",summary:"\u898B\u7A4D\u306E ID\uFF08twp estimate list \u306E id \u5217\u306E\u6570\u5B57\u30FB\u5FC5\u9808\uFF09",takesValue:true,placeholder:"<\u898B\u7A4DID>"};var FILE_FLAG={name:"--file",summary:"\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3059\u308B\u30D5\u30A1\u30A4\u30EB\uFF08PDF\u30FBJPEG\u30FBPNG\u30FBWord\u30FBExcel\u3002\u5FC5\u9808\uFF09",takesValue:true,placeholder:"<\
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{CommandModelMissingError,MAX_REPORTED_VIOLATIONS,loadCommandModelDomain,loadCommandModelIndex,validateBody,validateQuery}from"./chunk-NZ7WI4RZ.js";import{redactSecretValues,redactSecrets}from"./chunk-
|
|
3
|
+
import{CommandModelMissingError,MAX_REPORTED_VIOLATIONS,loadCommandModelDomain,loadCommandModelIndex,validateBody,validateQuery}from"./chunk-NZ7WI4RZ.js";import{redactSecretValues,redactSecrets}from"./chunk-IOCNJMVW.js";import{isSafePathSegment}from"./chunk-GMBJTG6A.js";import{ApiError,TwpApiClient,appendQuery}from"./chunk-IF2K4PM5.js";import{DEFAULT_MAX_TOKENS,emptyUsage}from"./chunk-6QOT7CHX.js";import{isPrivateTwpHome,isTrustworthyCacheFile,writePrivateFileAtomic}from"./chunk-D233KKXW.js";
|
|
4
4
|
import{AuthSession,NotLoggedInError,SessionExpiredError,withFileLock}from"./chunk-XNLIEUAW.js";import{MODES,applyPermissionMode,checkPermission,isModeId,setActiveModes}from"./chunk-NAUH75MM.js";import{isForceOnly,killProcessTree,system32}from"./chunk-N2UVRM3Z.js";import{findExecutable,isWindowsDriveAbsolute}from"./chunk-PMOUHEJQ.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import{configReadDirs,ensureTwpHome,twpHomeDir}from"./chunk-RZVI6PMW.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import fs2 from"fs";import path3 from"path";import os2 from"os";import{realpathSync}from"fs";import{homedir}from"os";import{dirname,isAbsolute,relative,resolve,sep}from"path";var PathDeniedError=class extends Error{constructor(message){super(message);this.name="PathDeniedError"}};function resolveToolPath(input,cwd,home=homedir()){if(typeof input!=="string"||input.trim()===""){throw new PathDeniedError("path must be a non-empty string")}const expanded=expandHome(input,home);const abs=isAbsolute(expanded)?resolve(expanded):resolve(cwd,expanded);const root=realOrSelf(resolve(cwd));assertInside(abs,resolve(cwd),abs);assertNotSecret(abs,home);const real=realOrSelf(abs);if(real!==
|
|
5
5
|
abs){assertInside(real,root,abs);assertNotSecret(real,home)}return abs}function realToolPath(input,cwd,home=homedir()){return realOrSelf(resolveToolPath(input,cwd,home))}function assertInside(target,root,reported){const rel=relative(root,target);const outside=rel===".."||rel.startsWith(`..${sep}`)||isAbsolute(rel);if(outside){throw new PathDeniedError(`path escapes the working directory (${reported}). Only paths under ${root} can be accessed.`)}}function realOrSelf(target){let current=target;const rest=[];
|
|
6
6
|
for(;;){try{const real=realpathSync(current);return rest.length===0?real:resolve(real,...rest.reverse())}catch{const parent=dirname(current);if(parent===current)return target;rest.push(current.slice(parent.length+1));current=parent}}}function assertNotSecret(absPath,home=homedir(),env=process.env){const reason=secretReason(absPath,home,env);if(reason!==null)throw new PathDeniedError(`refusing to access ${absPath}: ${reason}`)}function secretReason(absPath,_home=homedir(),env=process.env){const lower=absPath.
|