@tocca-systems/twp-cli 0.64.0 → 0.66.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 +24 -0
- package/README.md +116 -8
- package/command-model/wiki.json +2 -2
- package/dist/agent-SFX3ZVOB.js +160 -0
- package/dist/{agent-loop-GPPUR2WD.js → agent-loop-6JO4PJRG.js} +23 -20
- package/dist/{ai-dispatch-FZDFJ4TN.js → ai-dispatch-YICIA4NI.js} +3 -3
- package/dist/analysis-HMOECNWG.js +5 -0
- package/dist/{announcement-ASKS53LL.js → announcement-Q642UMYK.js} +1 -1
- package/dist/{api-command-N2OJNJBC.js → api-command-4CUGQQI3.js} +4 -4
- package/dist/{app-QA2HKG6E.js → app-BBPK653N.js} +4 -4
- package/dist/{attendance-correct-KBNPGFGR.js → attendance-correct-DWVFYL2Y.js} +2 -2
- package/dist/{attendance-lists-C7TO3GQ2.js → attendance-lists-772Y3ZWA.js} +2 -2
- package/dist/{backlog-AWOTTGPB.js → backlog-FG3Y5JTE.js} +38 -28
- package/dist/{budget-Z6ILL7AU.js → budget-5WUQAAAZ.js} +2 -2
- package/dist/capacity-report-command-PBE73I43.js +15 -0
- package/dist/chunk-2OG4LAGD.js +41 -0
- package/dist/{chunk-T4QZO6RQ.js → chunk-5SONMN6K.js} +1 -1
- package/dist/chunk-6CS5L24D.js +4 -0
- package/dist/chunk-6OLZMQBK.js +11 -0
- package/dist/chunk-6PAZUW73.js +16 -0
- package/dist/{chunk-YKI7NYBD.js → chunk-7EJOKJLV.js} +57 -18
- package/dist/{chunk-3WFZOOXZ.js → chunk-AGI5KT4C.js} +1 -1
- package/dist/{chunk-LAAKI3GS.js → chunk-APPYZQNC.js} +1 -1
- package/dist/{chunk-4CR64SNH.js → chunk-CCBNU5Y3.js} +2 -2
- package/dist/{chunk-RWR7OHVP.js → chunk-DAOC7VRM.js} +1 -1
- package/dist/{chunk-JYCJ4N6T.js → chunk-F4PGPJOI.js} +1 -1
- package/dist/{chunk-AEJHDFXB.js → chunk-FABDZBDZ.js} +5 -5
- package/dist/{chunk-PIB6MGG5.js → chunk-FAHDBWW2.js} +1 -1
- package/dist/{chunk-234WHKGS.js → chunk-FDVWV3AY.js} +2 -2
- package/dist/chunk-G4TZFGNN.js +41 -0
- package/dist/{chunk-NQWTPHUO.js → chunk-GLKZ4ZZY.js} +1 -1
- package/dist/{worker-agent-XCJGZHMT.js → chunk-HBEOI456.js} +3 -3
- package/dist/{chunk-ITRTFBV3.js → chunk-HNG6MF26.js} +52 -49
- package/dist/{chunk-QSXS5SB2.js → chunk-HPPIVCK3.js} +3 -2
- package/dist/chunk-KDH3KWPO.js +4 -0
- package/dist/chunk-LJVAOWZI.js +65 -0
- package/dist/{chunk-UIHNYBME.js → chunk-NVMJXFBT.js} +1 -1
- package/dist/{chunk-FITASHOM.js → chunk-OMWCSE4P.js} +2 -2
- package/dist/{chunk-XPPT3MUY.js → chunk-P2DSHLHD.js} +2 -2
- package/dist/chunk-P6M2MCZJ.js +97 -0
- package/dist/{chunk-RROCQRRY.js → chunk-QJAZLPA3.js} +1 -1
- package/dist/chunk-SPZ3GBYC.js +16 -0
- package/dist/chunk-VIWQMDGG.js +91 -0
- package/dist/{chunk-S5DEP2HA.js → chunk-W2AIT5FJ.js} +5 -5
- package/dist/{chunk-FDRXS6ZU.js → chunk-WBUYPDJH.js} +1 -1
- package/dist/{chunk-5LPELULJ.js → chunk-WMEGP2BT.js} +1 -1
- package/dist/{chunk-NXWXTUU6.js → chunk-X6L5LUC4.js} +1 -1
- package/dist/{chunk-6PQO3AYP.js → chunk-XCPZ4R65.js} +1 -1
- package/dist/{chunk-VV4GTQ2L.js → chunk-XGYOJHZC.js} +16 -13
- package/dist/cli.js +100 -11
- package/dist/{commands-WIQVCMQE.js → commands-4C6TJ4WG.js} +1 -1
- package/dist/{commands-HK7DUMUJ.js → commands-62NWF7GA.js} +105 -155
- package/dist/{company-YPDJZ3SE.js → company-4DHVAW25.js} +2 -2
- package/dist/{completion-7RHQKR5U.js → completion-WR2GXZE7.js} +5 -4
- package/dist/{contract-2Y5VN3TR.js → contract-PT7VW4IE.js} +2 -2
- package/dist/{department-K4EFC6NW.js → department-C6WIZPBS.js} +1 -1
- package/dist/{deposit-NTLHIMJL.js → deposit-OEYFPEZG.js} +1 -1
- package/dist/{estimate-C5LUNIWR.js → estimate-4BUJQ3TP.js} +3 -3
- package/dist/{evaluation-ZWUHSENB.js → evaluation-GLXQ54F6.js} +1 -1
- package/dist/{expense-BXJ7QYMP.js → expense-QE3WIJTN.js} +1 -1
- package/dist/fiscal-year-YJWFQN4P.js +17 -0
- package/dist/{inquiry-KHPPTYN6.js → inquiry-ORB3ROAJ.js} +1 -1
- package/dist/{invoice-VV2NT4A3.js → invoice-XLX5KS2T.js} +3 -3
- package/dist/{job-title-RCSL5Y2Z.js → job-title-UDF6I3BP.js} +1 -1
- package/dist/{knowledge-BLU6RHS5.js → knowledge-4QPIGJEE.js} +32 -27
- package/dist/{leave-RJBCHZCQ.js → leave-3BJMXI7Q.js} +3 -3
- package/dist/license-OMIZUUTW.js +56 -0
- package/dist/{logout-guard-GQBF3GQH.js → logout-guard-2Y7HPIKN.js} +2 -1
- package/dist/{media-OIAOW546.js → media-77LTBOQX.js} +3 -3
- package/dist/{notification-KPMGELOR.js → notification-2IESSY5E.js} +1 -1
- package/dist/{oneshot-OWEBFX5O.js → oneshot-4XO5HIJR.js} +1 -1
- package/dist/{outlook-AAS5DXYQ.js → outlook-KYTXHDAV.js} +1 -1
- package/dist/plan-submit-T5KHXNGH.js +4 -0
- package/dist/{position-NY5LRELH.js → position-CR6P4WC5.js} +1 -1
- package/dist/{project-4MEGZ326.js → project-JJEMEO2W.js} +1 -1
- package/dist/{prospect-7D2WK56K.js → prospect-QG6X7ALK.js} +2 -2
- package/dist/{purchase-S7W67LJP.js → purchase-Z6ENEOZM.js} +3 -3
- package/dist/{receivable-GFJTEELC.js → receivable-ZBDXXMHX.js} +1 -1
- package/dist/{redmine-P3EMFFHY.js → redmine-EIFHMLNE.js} +1 -1
- package/dist/{registry-GRRRT3I6.js → registry-BIJNO3HE.js} +1 -1
- package/dist/{report-FUIVLC7B.js → report-TTXGXSR3.js} +1 -1
- package/dist/revision-command-PM7FQUVF.js +31 -0
- package/dist/{run-LSWFO4IY.js → run-TYKHDD6N.js} +2 -2
- package/dist/{sales-ai-review-P36TTQRO.js → sales-ai-review-6TDJFHDL.js} +1 -1
- package/dist/{sales-master-3CGHEFKF.js → sales-master-H5HMVBJV.js} +3 -3
- package/dist/{sales-numbering-3M2C2MAI.js → sales-numbering-Q5KRM63Y.js} +1 -1
- package/dist/{schedule-command-R5KTFAVZ.js → schedule-command-2HCOGYJW.js} +1 -1
- package/dist/{search-U3QNPR4D.js → search-GRAWP2LX.js} +1 -1
- package/dist/segment-YOUY4PZC.js +6 -0
- package/dist/server-settings-LJBDUOTV.js +4 -0
- package/dist/{server-skills-IFTDV3IQ.js → server-skills-KX236POI.js} +1 -1
- package/dist/{setup-MUPUY2AX.js → setup-HHPKB6N4.js} +3 -3
- package/dist/{skill-C4TGG7SH.js → skill-RH5MBRXZ.js} +1 -1
- package/dist/{supplier-payment-KG57PNWJ.js → supplier-payment-EJTFKAKY.js} +2 -2
- package/dist/{support-BRVAJ7IH.js → support-FR3KY63E.js} +1 -1
- package/dist/{task-RYBYPM4N.js → task-O7K6725Y.js} +3 -3
- package/dist/{teams-GPJ6HMIX.js → teams-QRVCFJS4.js} +1 -1
- package/dist/{user-3DE46776.js → user-PRGHG3HM.js} +15 -103
- package/dist/user-contract-type-K7CLKCEE.js +32 -0
- package/dist/worker-agent-WDYZTQ5C.js +4 -0
- package/dist/{workflow-MMEOWZJC.js → workflow-S25JXGWN.js} +1 -1
- package/package.json +1 -1
- package/dist/agent-UAOZYMQM.js +0 -100
- package/dist/analysis-RKWGO7UY.js +0 -4
- package/dist/chunk-2B7A3OY7.js +0 -102
- package/dist/chunk-4P7EYEL5.js +0 -4
- package/dist/chunk-AT432SCP.js +0 -15
- package/dist/chunk-QEWCTKPV.js +0 -15
- package/dist/chunk-QHX5YFMM.js +0 -23
- package/dist/chunk-RZ2NZE4U.js +0 -36
- package/dist/chunk-THOBFX2S.js +0 -10
- package/dist/plan-submit-AWMD7XOY.js +0 -3
- package/dist/server-settings-3YD7RR3A.js +0 -3
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{ASSIGNED_PROJECT_COLUMNS,assignedProjectItems}from"./chunk-
|
|
4
|
-
import{
|
|
5
|
-
import{requireResolved,singleRef,withResolved}from"./chunk-PS5QFKHB.js";import"./chunk-II5RVJQN.js";import{isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiRejectedError,ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.js";import"./chunk-RZVI6PMW.js";import"./chunk-QQRJLH6B.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";import
|
|
3
|
+
import{ASSIGNED_PROJECT_COLUMNS,assignedProjectItems}from"./chunk-CCBNU5Y3.js";import{FISCAL_YEAR_FLAG,fiscalYear,skillNames}from"./chunk-6UPLPTBP.js";import{exportOperation}from"./chunk-VIWQMDGG.js";import{readCsvFileText}from"./chunk-QLENN5DD.js";import"./chunk-APPYZQNC.js";import{USER_REF_FLAG,USER_REF_HELP,prepareUser,userPath}from"./chunk-7EJOKJLV.js";import"./chunk-EXT4AIDF.js";import{createFlags,fieldBody,hasAnyField,resolveRefFields,updateFlags}from"./chunk-XGYOJHZC.js";
|
|
4
|
+
import{booleanText,boundedText,isoDate,isoDateValue}from"./chunk-JJSBBWJ5.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger,shellQuote}from"./chunk-MI6HVYR2.js";import{repeatedValues}from"./chunk-RX5HWI4L.js";import"./chunk-6LSQCOCJ.js";import{DEPARTMENTS_PATH,ORG_MASTER_LIMIT,POSITIONS_PATH}from"./chunk-HNG6MF26.js";import{ResolveError,isSafePathSegment}from"./chunk-HVZUXLQ4.js";import{ApiError}from"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";
|
|
5
|
+
import{requireResolved,singleRef,withResolved}from"./chunk-PS5QFKHB.js";import"./chunk-II5RVJQN.js";import{isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiRejectedError,ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.js";import"./chunk-RZVI6PMW.js";import"./chunk-QQRJLH6B.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";import fs from"fs";var ASSIGNMENT_COLUMNS=["id","department_name","position_name","start_date","end_date","is_primary","is_current","is_approval_route","effective_status"];function assignmentRows(body){const response=isRecord(body)&&"response"in body?body["response"]:body;const list=isRecord(response)?response["list"]:void 0;if(!Array.isArray(list)){throw new ApiResponseError("\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")}
|
|
6
6
|
return list}async function nameMap(ctx,path,label2){try{const body=await ctx.send({method:"GET",path,query:{limit:ORG_MASTER_LIMIT}});const list=isRecord(body)?body["list"]:void 0;if(!Array.isArray(list))throw new Error(`${label2}\u4E00\u89A7\u306E\u5FDC\u7B54\u306B list \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093`);const count=isRecord(body)?body["count"]:void 0;if(typeof count==="number"&&count>list.length){ctx.warn(`${label2}\u4E00\u89A7\u304C ${count} \u4EF6\u4E2D ${list.length} \u4EF6\u3067\u5207\u308A\u8A70\u3081\u3089\
|
|
7
7
|
\u308C\u305F\u305F\u3081\u3001\u4E00\u90E8\u306E${label2}\u540D\u306F\u7A7A\u6B04\u3067\u3059\u3002ID \u306F --output json \u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002`)}const map={};for(const row of list){if(isRecord(row)&&typeof row["id"]==="string"&&typeof row["name"]==="string"){map[row["id"]]=row["name"]}}return map}catch(err){ctx.warn(`${label2}\u540D\u3092\u53D6\u5F97\u3067\u304D\u306A\u304B\u3063\u305F\u305F\u3081\u3001${label2}\u540D\u306E\u5217\u306F\u7A7A\u6B04\u3067\u3059\uFF08${err.
|
|
8
8
|
message}\uFF09\u3002ID \u306F --output json \u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002`);return{}}}function assignmentPlan(input){const suffix=input.flags.has("--current")?"/assignments/current":"/assignments";return{method:"GET",path:`/api/v2/organization/users/${userPath(input,suffix)}`}}var listOperation={name:"list",summary:"\u30E6\u30FC\u30B6\u30FC\u306E\u6240\u5C5E\u306E\u5C65\u6B74\u3092\u4E00\u89A7\u3059\u308B",usage:"twp user assignment list <\u30E6\u30FC\u30B6\u30FC> [--current]",
|
|
@@ -133,95 +133,7 @@ newPosition;return withResolved(resolved,inherited)},plan(input){if(isBulk(input
|
|
|
133
133
|
input,"userId"),departmentId:requireResolved(input,"department_id"),startDate:isoDate(input,START_DATE_FLAG.name),existingIds:existingIdsOf(input),current};ctx.warn((await partialMoveLines(ctx,target,!(err instanceof ApiError))).join("\n"))}throw err}},summarize:body=>isBulkBody(body)?bulkSummary(body):writeSummary(body,"\u6240\u5C5E\u306E\u4ED8\u3051\u66FF\u3048"),raw:body=>isBulkBody(body)?bulkRaw(body):writeResult(body,"\u6240\u5C5E\u306E\u4ED8\u3051\u66FF\u3048"),notes(body,input){if(isBulkBody(
|
|
134
134
|
body))return bulkNotes(body);const notes=[...previousPrimaryNotes(body)];const current=currentPrimaryOf(input);const created=isRecord(body)&&isRecord(body["assignment"])?strOrNull(body["assignment"]["id"]):null;if(current!==null&&created!==null){const startDate=isoDate(input,START_DATE_FLAG.name);const immediate=startDate<=(input.resolved?.["today"]??"");const commands=revertCommands(requireResolved(input,"userId"),current,created,immediate);const later=immediate?"":`
|
|
135
135
|
\uFF08${startDate} \u4EE5\u964D\u306B\u623B\u3059\u3068\u304D\u306F\u30012\u672C\u76EE\u306B --primary true \u3068\u5143\u306E\u89B3\u5BDF\u8005\u306E --observer \u3082\u4ED8\u3051\u3066\u304F\u3060\u3055\u3044\uFF09`;notes.push(`\u53D6\u308A\u6D88\u3059\u306B\u306F:
|
|
136
|
-
${commands.map(c=>` ${c}`).join("\n")}${later}`)}return notes}};var userAssignmentResource={name:"assignment",summary:"\u30E6\u30FC\u30B6\u30FC\u306E\u6240\u5C5E\uFF08\u90E8\u7F72\u30FB\u5F79\u8077\uFF09\u306E\u53C2\u7167\u30FB\u4F5C\u6210\u30FB\u66F4\u65B0\u30FB\u7D42\u4E86\u30FB\u524A\u9664\u30FB\u4ED8\u3051\u66FF\u3048",operations:[listOperation,createOperation,updateOperation,endOperation,deleteOperation,moveOperation]};
|
|
137
|
-
olumn <\u5217\u540D>] [--position-column <\u5217\u540D>] [--max-users <\u4EBA\u6570>]";var HELP="twp user export help";var listPaging=envelopePaging({label:"\u30E6\u30FC\u30B6\u30FC\u4E00\u89A7"});var LEDGER_ROLES=["code","name","email","department","position"];var ROLE_LABEL={code:"\u793E\u54E1\u756A\u53F7",name:"\u6C0F\u540D",email:"\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9",department:"\u90E8\u7F72",position:"\u5F79\u8077"};var COLUMN_CANDIDATES={code:["\u793E\u54E1\u756A\u53F7","\u5F93\u696D\u54E1\u756A\u53F7",
|
|
138
|
-
"\u793E\u54E1\u30B3\u30FC\u30C9","\u5F93\u696D\u54E1\u30B3\u30FC\u30C9","employee_code","employee_no"],name:["\u6C0F\u540D","\u540D\u524D","\u793E\u54E1\u540D","\u5F93\u696D\u54E1\u540D","name","user_name"],email:["\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9","\u4F1A\u793E\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9","email","login_id"],department:["\u90E8\u7F72","\u90E8\u7F72\u540D","\u6240\u5C5E\u90E8\u7F72","department","department_name"],position:["\u5F79\u8077","\u5F79\u8077\u540D","position",
|
|
139
|
-
"position_name"]};function parseCsvRecords(text){const records=[];let cells=[];let field="";let quoted=false;let started=false;let line=1;let recordLine=1;let i=0;const pushRecord=()=>{cells.push(field);records.push({line:recordLine,cells});cells=[];field="";started=false};while(i<text.length){const ch=text[i];if(quoted){if(ch==='"'){if(text[i+1]==='"'){field+='"';i+=2;continue}quoted=false}else if(ch==="\r"||ch==="\n"){if(ch==="\r"&&text[i+1]==="\n")i+=1;line+=1;field+="\n"}else{field+=ch}i+=1;
|
|
140
|
-
continue}if(ch==='"'&&field.trim()===""){quoted=true;started=true;field=""}else if(ch===","){cells.push(field);field="";started=true}else if(ch==="\r"||ch==="\n"){if(ch==="\r"&&text[i+1]==="\n")i+=1;pushRecord();line+=1;recordLine=line}else{field+=ch;started=true}i+=1}if(quoted)throw new UsageError(`\u53F0\u5E33 CSV \u306E ${recordLine} \u884C\u76EE\u3067\u5F15\u7528\u7B26\uFF08"\uFF09\u304C\u9589\u3058\u3066\u3044\u307E\u305B\u3093`,HELP);if(started)pushRecord();return records}var decodeLedger=decodeCsvText;
|
|
141
|
-
function normalizeHeader(value){return value.normalize("NFKC").trim().toLowerCase()}function normalizeValue(value){return value.normalize("NFKC").replace(/\s+/g," ").trim().toLowerCase()}function resolveColumns(header,overrides){const normalized=header.map(normalizeHeader);const map={};for(const role of LEDGER_ROLES){const wanted=overrides[role];if(wanted!==void 0){const index2=normalized.indexOf(normalizeHeader(wanted));if(index2<0){throw new UsageError(`\u53F0\u5E33 CSV \u306B\u300C${wanted}\u300D\u3068\
|
|
142
|
-
\u3044\u3046\u5217\u304C\u3042\u308A\u307E\u305B\u3093\uFF08--${role}-column\uFF09`,`\u898B\u51FA\u3057\u884C\u306E\u5217: ${header.map(h=>h.trim()).join("\u3001")}`)}map[role]=index2;continue}const index=normalized.findIndex(h=>COLUMN_CANDIDATES[role].some(c=>normalizeHeader(c)===h));if(index>=0)map[role]=index}if(map.code===void 0&&map.email===void 0&&map.name===void 0){throw new UsageError("\u53F0\u5E33 CSV \u306B\u3001\u4EBA\u3092\u7A81\u304D\u5408\u308F\u305B\u308B\u5217\uFF08\u793E\u54E1\u756A\u53F7\u30FB\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u30FB\u6C0F\u540D\u306E\u3069\u308C\u304B\uFF09\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093",
|
|
143
|
-
`\u898B\u51FA\u3057\u884C\u306E\u5217: ${header.map(h=>h.trim()).join("\u3001")}
|
|
144
|
-
\u5217\u540D\u304C\u9055\u3046\u3068\u304D\u306F --code-column / --email-column / --name-column \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return map}function parseLedger(text,overrides){const records=parseCsvRecords(text).filter(r=>r.cells.some(c=>c.trim()!==""));const[header,...body]=records;if(header===void 0)throw new UsageError("\u53F0\u5E33 CSV \u304C\u7A7A\u3067\u3059\uFF081\u884C\u76EE\u306B\u898B\u51FA\u3057\u304C\u5FC5\u8981\u3067\u3059\uFF09",HELP);const columns=resolveColumns(
|
|
145
|
-
header.cells,overrides);const rows=[];const errors=[];const seen={code:new Map,email:new Map};for(const record of body){const value=role=>{const index=columns[role];if(index===void 0)return void 0;const raw=(record.cells[index]??"").trim();return raw===""?void 0:raw};const cells={};for(const role of LEDGER_ROLES){const v=value(role);if(v!==void 0)cells[role]=v}const row={line:record.line,...cells};if(row.code===void 0&&row.email===void 0&&row.name===void 0){errors.push(`${record.line} \u884C\u76EE: \u793E\u54E1\u756A\u53F7\u30FB\u30E1\
|
|
146
|
-
\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u30FB\u6C0F\u540D\u304C\u3059\u3079\u3066\u7A7A\u3067\u3059`);continue}let duplicated=false;for(const role of["code","email"]){const v=row[role];if(v===void 0)continue;const first=seen[role].get(normalizeValue(v));if(first!==void 0){errors.push(`${record.line} \u884C\u76EE: ${ROLE_LABEL[role]} ${v} \u306F ${first} \u884C\u76EE\u3068\u91CD\u8907\u3057\u3066\u3044\u307E\u3059`);duplicated=true}else{seen[role].set(normalizeValue(v),record.line)}}if(!duplicated)rows.
|
|
147
|
-
push(row)}if(errors.length>0){throw new UsageError(`\u53F0\u5E33 CSV \u306B\u4E0D\u6B63\u306A\u884C\u304C ${errors.length} \u884C\u3042\u308A\u307E\u3059:
|
|
148
|
-
${errors.join("\n ")}`,HELP)}return{header:header.cells.map(h=>h.trim()),columns,rows}}function readLedgerFile(file){let fd;try{fd=fs.openSync(file,"r");if(!fs.fstatSync(fd).isFile())throw new UsageError(`--file \u306B\u901A\u5E38\u306E\u30D5\u30A1\u30A4\u30EB\u4EE5\u5916\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093: ${file}`,HELP);const buffer=Buffer.alloc(LEDGER_MAX_BYTES+1);let total=0;for(;;){const n=fs.readSync(fd,buffer,total,buffer.length-total,null);if(n===0)break;total+=n;if(total>
|
|
149
|
-
LEDGER_MAX_BYTES){throw new UsageError(`--file \u306E\u30D5\u30A1\u30A4\u30EB\u304C\u5927\u304D\u3059\u304E\u307E\u3059: ${file}`,`\u4E0A\u9650\u306F ${LEDGER_MAX_BYTES} \u30D0\u30A4\u30C8\u3067\u3059\u3002`)}}return buffer.subarray(0,total)}catch(err){if(err instanceof UsageError)throw err;const reason=err.code??err.message;throw new UsageError(`--file \u306E\u30D5\u30A1\u30A4\u30EB\u3092\u8AAD\u3081\u307E\u305B\u3093: ${file}\uFF08${reason}\uFF09`,HELP)}finally{if(fd!==void 0)fs.closeSync(fd)}}
|
|
150
|
-
var KIND_LABEL={not_in_ledger:"\u53F0\u5E33\u306B\u3044\u306A\u3044\uFF08\u5931\u52B9\u6F0F\u308C\uFF09",missing_in_twp:"TWP \u306B\u3044\u306A\u3044\uFF08\u767B\u9332\u6F0F\u308C\uFF09",disabled_in_twp:"TWP \u3067\u5931\u52B9\u3057\u3066\u3044\u308B\uFF08\u8AA4\u5931\u52B9\uFF09",ambiguous:"\u8907\u6570\u306E\u30E6\u30FC\u30B6\u30FC\u306B\u4E00\u81F4\uFF08\u7A81\u304D\u5408\u308F\u305B\u3067\u304D\u306A\u3044\uFF09",department_mismatch:"\u90E8\u7F72\u304C\u9055\u3046\uFF08\u7570\u52D5\u306E\u53CD\u6620\u6F0F\u308C\uFF09",
|
|
151
|
-
position_mismatch:"\u5F79\u8077\u304C\u9055\u3046\uFF08\u7570\u52D5\u306E\u53CD\u6620\u6F0F\u308C\uFF09",inactive:"\u9577\u671F\u9593\u30ED\u30B0\u30A4\u30F3\u3057\u3066\u3044\u306A\u3044"};function str(value){return typeof value==="string"&&value!==""?value:null}function listPlan(input,cursor){return{method:"GET",path:"/api/v2/admin/users/list",query:{limit:LIST_PAGE_LIMIT,cursor,include_hidden:input.flags.has("--exclude-hidden")?void 0:"true"}}}var sleep=ms=>new Promise(resolve=>setTimeout(resolve,
|
|
152
|
-
ms));function pacedSender(ctx){const intervalMs=6e4/SEND_PER_MINUTE;let tokens=SEND_BURST;let last=Date.now();let chain=Promise.resolve();const take=()=>{chain=chain.then(async()=>{const now=Date.now();tokens=Math.min(SEND_BURST,tokens+(now-last)/intervalMs);last=now;if(tokens<1){await sleep((1-tokens)*intervalMs);tokens=1;last=Date.now()}tokens-=1});return chain};return async plan=>{for(let attempt=0;;attempt+=1){await take();try{return await ctx.send(plan)}catch(err){if(!(err instanceof ApiError)||
|
|
153
|
-
err.status!==429||attempt>=RATE_LIMIT_RETRIES)throw err;ctx.warn(`API \u306E\u30EC\u30FC\u30C8\u5236\u9650\uFF08429\uFF09\u306B\u5F53\u305F\u3063\u305F\u305F\u3081\u3001${RATE_LIMIT_WAIT_MS/1e3} \u79D2\u5F85\u3063\u3066\u9001\u308A\u76F4\u3057\u307E\u3059\u3002`);await sleep(RATE_LIMIT_WAIT_MS)}}}}async function mapPool(items,limit,fn){const results=new Array(items.length);let next=0;let failed=false;const worker=async()=>{while(!failed&&next<items.length){const index=next;next+=1;try{results[index]=
|
|
154
|
-
await fn(items[index])}catch(err){failed=true;throw err}}};await Promise.all(Array.from({length:Math.min(limit,items.length)},worker));return results}async function listAllUsers(input,send,maxUsers){const users=[];let cursor;for(;;){const body=await send(listPlan(input,cursor));for(const item of listPaging.items(body)){if(!isRecord(item)||typeof item["user_id"]!=="string"){throw new ApiResponseError("\u30E6\u30FC\u30B6\u30FC\u4E00\u89A7\u306E\u884C\u306B user_id \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}
|
|
155
|
-
users.push(item)}if(users.length>maxUsers){throw new UsageError(`\u5BFE\u8C61\u306E\u30E6\u30FC\u30B6\u30FC\u304C ${maxUsers} \u4EBA\u3092\u8D85\u3048\u305F\u305F\u3081\u3001\u8A73\u7D30\u3092\u8AAD\u3080\u524D\u306B\u6B62\u3081\u307E\u3057\u305F\uFF081\u4EBA\u3042\u305F\u308A\u6700\u59273\u5F80\u5FA9\u3057\u307E\u3059\uFF09`,input.flags.has("--exclude-hidden")?`\u4E0A\u9650\u3092\u4E0A\u3052\u308B\u306A\u3089 --max-users <\u4EBA\u6570> \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002`:
|
|
156
|
-
"\u8868\u793A\u30D5\u30E9\u30B0\u3092\u5916\u3057\u305F\u30E6\u30FC\u30B6\u30FC\u3092\u9664\u304F\u306A\u3089 --exclude-hidden\u3001\u4E0A\u9650\u3092\u4E0A\u3052\u308B\u306A\u3089 --max-users <\u4EBA\u6570> \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}const next=listPaging.nextCursor(body);if(next===null)return users;cursor=next}}async function permissionMatrix(input,send){const map=new Map;for(let page=1;;page+=1){const body=await send({method:"GET",path:"/api/v2/admin/users/\
|
|
157
|
-
permissions-matrix",query:{page,limit:MATRIX_PAGE_LIMIT,include_hidden:input.flags.has("--exclude-hidden")?void 0:"true"}});const items=isRecord(body)?body["items"]:void 0;const totalPages=isRecord(body)?body["total_pages"]:void 0;if(!Array.isArray(items)||typeof totalPages!=="number"){throw new ApiResponseError("\u6A29\u9650\u30DE\u30C8\u30EA\u30AF\u30B9\u306E\u5FDC\u7B54\u306B items / total_pages \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}
|
|
158
|
-
for(const item of items){if(!isRecord(item)||typeof item["user_id"]!=="string")continue;const raw=item["feature_permissions"];const levels={};if(isRecord(raw)){for(const[feature,level]of Object.entries(raw)){if(typeof level==="string")levels[feature]=level}}else if(!Array.isArray(raw)){continue}map.set(item["user_id"],levels)}if(page>=totalPages)return map}}function userSegment(userId){if(!isSafePathSegment(userId)){throw new ApiResponseError(`\u30B5\u30FC\u30D0\u304C\u8FD4\u3057\u305F\u30E6\u30FC\u30B6\u30FC ID \u3092\u30D1\u30B9\u306B\u4F7F\u3048\u307E\u305B\u3093: ${userId}\
|
|
159
|
-
\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return encodeURIComponent(userId)}async function userDetail(send,userId){const body=await send({method:"GET",path:`/api/v2/admin/users/${userSegment(userId)}`});if(!isRecord(body)||body["user_id"]!==userId){throw new ApiResponseError(`\u30E6\u30FC\u30B6\u30FC\u8A73\u7D30\u306E\u5FDC\u7B54\u304C ${userId} \u306E\u3082\u306E\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}
|
|
160
|
-
return body}async function primaryAssignment(send,userId){const body=await send({method:"GET",path:`/api/v2/organization/users/${userSegment(userId)}/assignments/current`});const list=isRecord(body)?body["list"]:void 0;if(!Array.isArray(list))throw new ApiResponseError("\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");const primary=list.find(row=>isRecord(row)&&
|
|
161
|
-
row["is_approval_route"]===true)??list.find(row=>isRecord(row)&&row["is_primary"]===true);return isRecord(primary)?{id:str(primary["id"]),managerId:str(primary["manager_id"])}:{id:null,managerId:null}}async function lastLogin(send,userId){const body=await send({method:"GET",path:"/api/v2/admin/tenant/login-history",query:{user_id:userId,result:"success",limit:LOGIN_HISTORY_LIMIT}});const data=isRecord(body)&&isRecord(body["data"])?body["data"]:body;const histories=isRecord(data)?data["histories"]:
|
|
162
|
-
void 0;if(!Array.isArray(histories)){throw new ApiResponseError("\u30ED\u30B0\u30A4\u30F3\u5C65\u6B74\u306E\u5FDC\u7B54\u306B histories \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}let latest=null;for(const h of histories){const ts=isRecord(h)&&h["result"]==="success"?str(h["timestamp"]):null;if(ts!==null&&(latest===null||ts>latest))latest=ts}return latest}async function collectInventory(input,ctx){const send=pacedSender(
|
|
163
|
-
ctx);const maxUsers=Number(requireResolved(input,"maxUsers"));const users=await listAllUsers(input,send,maxUsers);const permissions=await permissionMatrix(input,send);const minutes=Math.ceil(users.length*3/SEND_PER_MINUTE);ctx.warn(`${users.length} \u4EBA\u306E\u8A73\u7D30\u30FB\u6240\u5C5E\u30FB\u6700\u7D42\u30ED\u30B0\u30A4\u30F3\u3092\u8AAD\u307F\u307E\u3059\uFF08\u6700\u5927 ${users.length*3} \u5F80\u5FA9`+(users.length*3>SEND_BURST?`\u30FB\u30EC\u30FC\u30C8\u5236\u9650\u306B\u5408\u308F\u305B\u3066\u6700\u9577 ${minutes}\
|
|
164
|
-
\u5206\u307B\u3069`:"")+"\uFF09\u3002");const names=new Map(users.map(u=>[u["user_id"],str(u["user_name"])]));const rows=await mapPool(users,CONCURRENCY,async user=>{const userId=user["user_id"];const detail=await userDetail(send,userId);const authType2=str(detail["auth_type"]);const canLogin=authType2!=="disabled";const wantDetail=canLogin||input.flags.has("--include-disabled");const sso=authType2==="oauth";const[assignment,loginAt]=wantDetail?await Promise.all([primaryAssignment(send,userId),
|
|
165
|
-
sso?Promise.resolve(null):lastLogin(send,userId)]):[{id:null,managerId:null},null];const managerId=assignment.managerId;return{user_id:userId,user_name:str(user["user_name"]),email:str(user["email"]),employee_code:str(user["employee_code"]),hire_date:str(detail["hire_date"]),department_name:str(user["department_name"]),position_name:str(user["position_name"]),assignment_id:assignment.id,manager_id:managerId,manager_name:managerId===null?null:names.get(managerId)??null,role:str(user["role"]),is_partner:typeof user["\
|
|
166
|
-
is_partner"]==="boolean"?user["is_partner"]:null,permissions:permissions.get(userId)??null,auth_type:authType2,can_login:canLogin,display_flg:typeof user["display_flg"]==="boolean"?user["display_flg"]:null,last_login_at:loginAt,last_login_status:!wantDetail?"not_checked":sso?"sso_not_recorded":loginAt===null?"not_recorded":"recorded"}});return{rows,scanned:users.length}}function daysBetween(fromIso,now){return(now.getTime()-new Date(fromIso).getTime())/864e5}function placeholder(label2){return shellQuote(
|
|
167
|
-
`<${label2}>`)}function disableCommand(userId){return`twp user update ${shellQuote(userId)} --auth-type disabled --display false --memberlist false --org-chart false --dashboard false`}function recentlyHired(hireDate,inactiveDays,now){return hireDate!==null&&daysBetween(`${hireDate}T00:00:00Z`,now)<=inactiveDays}function diffAgainstLedger(inventory,ledger,columns,inactiveDays,now){const index={code:new Map,email:new Map,name:new Map};const add=(map,key,row)=>{if(key===null)return;const k=normalizeValue(
|
|
168
|
-
key);map.set(k,[...map.get(k)??[],row])};for(const row of inventory){add(index.code,row.employee_code,row);add(index.email,row.email,row);add(index.name,row.user_name,row)}const diffs=[];const matched=new Set;const base=(kind,user,line)=>({kind,kind_label:KIND_LABEL[kind],user_id:user?.user_id??null,user_name:user?.user_name??null,email:user?.email??null,employee_code:user?.employee_code??null,auth_type:user?.auth_type??null,is_partner:user?.is_partner??null,ledger_line:line,twp_value:null,ledger_value:null,
|
|
169
|
-
suggestion:null});const fromLedger=(kind,entry)=>({...base(kind,null,entry.line),user_name:entry.name??null,email:entry.email??null,employee_code:entry.code??null,ledger_value:entry.code??entry.email??entry.name??null});for(const entry of ledger){let candidates=[];for(const role of["code","email","name"]){const v=entry[role];if(v===void 0)continue;candidates=index[role].get(normalizeValue(v))??[];if(candidates.length>0)break}if(candidates.length>1){const active=candidates.filter(c=>c.can_login);
|
|
170
|
-
if(active.length===1)candidates=active}if(candidates.length>1){diffs.push({...fromLedger("ambiguous",entry),twp_value:`${candidates.length} \u4EBA\u306B\u4E00\u81F4\uFF08${candidates.map(c=>c.user_id).join(", ")}\uFF09`,suggestion:null});continue}const user=candidates[0];if(user===void 0){diffs.push({...fromLedger("missing_in_twp",entry),suggestion:`twp user invite create ${flagSegment("--email",entry.email??"<\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9>")}`});continue}matched.add(user.user_id);if(!user.
|
|
171
|
-
can_login){diffs.push({...base("disabled_in_twp",user,entry.line),twp_value:user.auth_type,suggestion:`twp user update ${shellQuote(user.user_id)} --auth-type ${placeholder("\u5931\u52B9\u524D\u306E\u8A8D\u8A3C\u30BF\u30A4\u30D7")} --display true --memberlist true --org-chart true --dashboard true`});continue}if(columns.department!==void 0&&entry.department!==void 0&&normalizeValue(entry.department)!==normalizeValue(user.department_name??"")){diffs.push({...base("department_mismatch",user,entry.
|
|
172
|
-
line),twp_value:user.department_name,ledger_value:entry.department,suggestion:`twp user assignment move ${shellQuote(user.user_id)} ${flagSegment("--department",entry.department)} --start-date ${placeholder("\u7570\u52D5\u65E5")}`})}if(columns.position!==void 0&&entry.position!==void 0&&normalizeValue(entry.position)!==normalizeValue(user.position_name??"")){diffs.push({...base("position_mismatch",user,entry.line),twp_value:user.position_name,ledger_value:entry.position,suggestion:user.assignment_id===
|
|
173
|
-
null?null:`twp user assignment update ${shellQuote(user.assignment_id)} --user ${shellQuote(user.user_id)} `+flagSegment("--position",entry.position)})}}for(const user of inventory){if(!user.can_login)continue;if(!matched.has(user.user_id)){diffs.push({...base("not_in_ledger",user,null),twp_value:user.auth_type,suggestion:disableCommand(user.user_id)})}if(user.last_login_status==="sso_not_recorded"||recentlyHired(user.hire_date,inactiveDays,now))continue;if(user.last_login_at===null||daysBetween(
|
|
174
|
-
user.last_login_at,now)>inactiveDays){diffs.push({...base("inactive",user,null),twp_value:user.last_login_at??`${LOGIN_HISTORY_RETENTION_DAYS}\u65E5\u4EE5\u5185\u306E\u30ED\u30B0\u30A4\u30F3\u8A18\u9332\u306A\u3057`})}}return diffs}var INVENTORY_COLUMNS=["user_id","user_name","email","employee_code","hire_date","department_name","position_name","manager_name","role","is_partner","permissions","auth_type","display_flg","last_login_at"];var DIFF_COLUMNS=["kind","kind_label","user_id","user_name","\
|
|
175
|
-
email","employee_code","auth_type","is_partner","ledger_line","twp_value","ledger_value","suggestion"];function exportBody(body){if(!isRecord(body)||!Array.isArray(body["rows"])||body["mode"]!=="inventory"&&body["mode"]!=="diff"){throw new ApiResponseError("\u68DA\u5378\u306E\u7D50\u679C\u3092\u7D44\u307F\u7ACB\u3066\u3089\u308C\u307E\u305B\u3093\u3067\u3057\u305F\uFF08\u5185\u90E8\u30A8\u30E9\u30FC\uFF09\u3002")}return body}function permissionText(levels){if(levels===null)return"\uFF08\u53D6\u5F97\u3067\u304D\u305A\uFF09";
|
|
176
|
-
const granted=Object.entries(levels).filter(([,level])=>level!=="none"&&level!=="").sort(([a],[b])=>a.localeCompare(b));return granted.length===0?"\uFF08\u306A\u3057\uFF09":granted.map(([feature,level])=>`${feature}:${level}`).join(";")}function lastLoginText(row){switch(row.last_login_status){case"recorded":return row.last_login_at;case"sso_not_recorded":return"\u5224\u5B9A\u4E0D\u80FD\uFF08SSO \u306F\u8A18\u9332\u3055\u308C\u306A\u3044\uFF09";case"not_recorded":return`${LOGIN_HISTORY_RETENTION_DAYS}\
|
|
177
|
-
\u65E5\u4EE5\u5185\u306E\u8A18\u9332\u306A\u3057`;default:return null}}function spreadsheetSafe(value){return typeof value==="string"&&/^[=+\-@\t\r]/.test(value)?`'${value}`:value}function flagValue(input,flag){const raw=input.flags.get(flag);if(raw===void 0)return void 0;if(raw.trim()==="")throw new UsageError(`${flag} \u306B\u7A7A\u306E\u5024\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,HELP);return raw}function ledgerOf(input){const raw=input.resolved?.["ledger"];return raw===void 0?void 0:
|
|
178
|
-
JSON.parse(raw)}var COLUMN_FLAGS=LEDGER_ROLES.map(role=>({name:`--${role}-column`,summary:`\u53F0\u5E33\u306E${ROLE_LABEL[role]}\u306E\u5217\u540D\uFF08\u65E2\u5B9A\u306F ${COLUMN_CANDIDATES[role].slice(0,3).join(" / ")} \u306A\u3069\u304B\u3089\u63A2\u3059\uFF09`,takesValue:true,placeholder:"<\u5217\u540D>"}));var exportOperation={name:"export",summary:"\u5728\u7C4D\u8005\u3092\u68DA\u5378\u3059\u308B\uFF08\u6240\u5C5E\u30FB\u5F79\u8077\u30FB\u4E0A\u9577\u30FB\u6A29\u9650\u30FB\u6700\u7D42\u30ED\u30B0\u30A4\u30F3\u4ED8\u304D\u30FB\u4EBA\u4E8B\u53F0\u5E33 CSV \u3068\u306E\u5DEE\u5206\uFF09",
|
|
179
|
-
usage:USAGE,description:`\u5728\u7C4D\u8005\uFF08\u8A8D\u8A3C\u30BF\u30A4\u30D7\u304C disabled \u3067\u306A\u3044\u30E6\u30FC\u30B6\u30FC\uFF09\u30921\u4EBA1\u884C\u3067\u51FA\u3057\u307E\u3059\u3002\u8868\u793A\u30D5\u30E9\u30B0\u3092\u5916\u3057\u305F\u30E6\u30FC\u30B6\u30FC\u3082\u542B\u307F\u307E\u3059
|
|
180
|
-
\uFF08\u8868\u793A\u30D5\u30E9\u30B0\u3060\u3051\u5916\u3057\u3066\u5931\u52B9\u3055\u305B\u3066\u3044\u306A\u3044\u4EBA\u3092\u898B\u3064\u3051\u308B\u305F\u3081\uFF09\u3002--exclude-hidden \u3067\u8868\u793A\u4E2D\u306E\u30E6\u30FC\u30B6\u30FC\u3060\u3051\u306B\u7D5E\u308C\u307E\u3059\u3002
|
|
181
|
-
--include-disabled \u3067\u5931\u52B9\u6E08\u307F\u306E\u30E6\u30FC\u30B6\u30FC\u3082\u51FA\u3057\u307E\u3059\u3002\u7D44\u7E54\u7BA1\u7406\u8005\u3060\u3051\u304C\u4F7F\u3048\u307E\u3059\u3002
|
|
182
|
-
|
|
183
|
-
\u5217: user_id / user_name / email / employee_code / hire_date\uFF08\u5165\u793E\u65E5\uFF09/ department_name\u30FBposition_name\uFF08\u4E3B\u6240\u5C5E\uFF09/
|
|
184
|
-
manager_name\uFF08\u4E3B\u6240\u5C5E\u306E\u4E0A\u9577\uFF09/ role / is_partner / permissions\uFF08\u6A5F\u80FD\u3054\u3068\u306E\u6A29\u9650\u3002none \u306F\u7701\u304F\uFF09/ auth_type / display_flg / last_login_at\u3002
|
|
185
|
-
\u500B\u4EBA\u9023\u7D61\u5148\uFF08\u500B\u4EBA\u30E1\u30FC\u30EB\u30FB\u7DCA\u6025\u9023\u7D61\u5148\u306A\u3069\uFF09\u306F\u51FA\u3057\u307E\u305B\u3093\u3002--output tsv \u3067\u8868\u8A08\u7B97\u30BD\u30D5\u30C8\u3078\u3001--output json \u3067\u4ED6\u306E\u30C4\u30FC\u30EB\u3078\u6E21\u305B\u307E\u3059
|
|
186
|
-
\uFF08tsv / table \u3067\u306F\u3001= + - @ \u3067\u59CB\u307E\u308B\u5024\u306E\u5148\u982D\u306B ' \u3092\u4ED8\u3051\u3066\u3001\u8868\u8A08\u7B97\u30BD\u30D5\u30C8\u304C\u5F0F\u3068\u3057\u3066\u8AAD\u307E\u306A\u3044\u3088\u3046\u306B\u3057\u307E\u3059\uFF09\u3002
|
|
187
|
-
|
|
188
|
-
\u6700\u7D42\u30ED\u30B0\u30A4\u30F3\u306F\u30ED\u30B0\u30A4\u30F3\u5C65\u6B74\u304B\u3089\u53D6\u308A\u307E\u3059\u3002\u6B21\u306E2\u70B9\u306B\u6CE8\u610F\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
189
|
-
- \u30ED\u30B0\u30A4\u30F3\u5C65\u6B74\u306F90\u65E5\u3067\u6D88\u3048\u307E\u3059\u3002\u300C90\u65E5\u4EE5\u5185\u306E\u8A18\u9332\u306A\u3057\u300D\u306F\u4E00\u5EA6\u3082\u30ED\u30B0\u30A4\u30F3\u3057\u3066\u3044\u306A\u3044\u3001\u3068\u3044\u3046\u610F\u5473\u3067\u306F\u3042\u308A\u307E\u305B\u3093
|
|
190
|
-
- Google / Microsoft \u306E SSO \u3067\u306E\u30ED\u30B0\u30A4\u30F3\u306F\u8A18\u9332\u3055\u308C\u307E\u305B\u3093\u3002\u8A8D\u8A3C\u30BF\u30A4\u30D7\u304C oauth \u306E\u30E6\u30FC\u30B6\u30FC\u306F\u300C\u5224\u5B9A\u4E0D\u80FD\u300D\u3068\u51FA\u3057\u3001
|
|
191
|
-
\u9577\u671F\u672A\u30ED\u30B0\u30A4\u30F3\uFF08inactive\uFF09\u306E\u5224\u5B9A\u304B\u3089\u5916\u3057\u307E\u3059\u3002all \u306E\u30E6\u30FC\u30B6\u30FC\u304C SSO \u3060\u3051\u3067\u4F7F\u3063\u3066\u3044\u308B\u5834\u5408\u3082\u8A18\u9332\u306F\u6B8B\u308A\u307E\u305B\u3093
|
|
192
|
-
|
|
193
|
-
--file <\u53F0\u5E33CSV> \u3092\u4ED8\u3051\u308B\u3068\u3001\u4EBA\u4E8B\u53F0\u5E33\u3068\u306E\u5DEE\u5206\u3060\u3051\u3092\u51FA\u3057\u307E\u3059\uFF081\u884C\u76EE\u306F\u898B\u51FA\u3057\u3002UTF-8 \u3068 Shift_JIS \u3092\u8AAD\u3081\u307E\u3059\uFF09:
|
|
194
|
-
not_in_ledger TWP \u3067\u5931\u52B9\u3057\u3066\u3044\u306A\u3044\u304C\u53F0\u5E33\u306B\u3044\u306A\u3044\uFF08\u9000\u793E\u6642\u306E\u5931\u52B9\u6F0F\u308C\u3002\u30D1\u30FC\u30C8\u30CA\u30FC\u3084\u5171\u7528\u30A2\u30AB\u30A6\u30F3\u30C8\u3082\u51FA\u307E\u3059\uFF09
|
|
195
|
-
missing_in_twp \u53F0\u5E33\u306B\u3044\u308B\u304C TWP \u306B\u3044\u306A\u3044\uFF08\u767B\u9332\u6F0F\u308C\uFF09
|
|
196
|
-
disabled_in_twp \u53F0\u5E33\u306B\u3044\u308B\u304C TWP \u3067\u5931\u52B9\u3057\u3066\u3044\u308B\uFF08\u8AA4\u5931\u52B9\uFF09
|
|
197
|
-
ambiguous \u53F0\u5E33\u306E1\u884C\u304C TWP \u306E\u8907\u6570\u306E\u30E6\u30FC\u30B6\u30FC\u306B\u4E00\u81F4\u3057\u3001\u6C7A\u3081\u3089\u308C\u306A\u3044
|
|
198
|
-
department_mismatch \u90E8\u7F72\u304C\u9055\u3046\uFF08\u7570\u52D5\u306E\u53CD\u6620\u6F0F\u308C\u30FB\u53F0\u5E33\u306B\u90E8\u7F72\u306E\u5217\u304C\u3042\u308B\u3068\u304D\uFF09
|
|
199
|
-
position_mismatch \u5F79\u8077\u304C\u9055\u3046\uFF08\u540C\u4E0A\u30FB\u53F0\u5E33\u306B\u5F79\u8077\u306E\u5217\u304C\u3042\u308B\u3068\u304D\uFF09
|
|
200
|
-
inactive \u30ED\u30B0\u30A4\u30F3\u3067\u304D\u308B\u306E\u306B --inactive-days \u65E5\uFF08\u65E2\u5B9A60\u30FB\u6700\u592790\uFF09\u30ED\u30B0\u30A4\u30F3\u306E\u8A18\u9332\u304C\u7121\u3044
|
|
201
|
-
\uFF08\u5165\u793E\u65E5\u304C\u305D\u306E\u65E5\u6570\u4EE5\u5185\u306E\u4EBA\u3068\u3001oauth \u306E\u4EBA\u306F\u51FA\u3057\u307E\u305B\u3093\uFF09
|
|
202
|
-
\u53F0\u5E33\u306E\u4EBA\u3068\u306F\u3001\u793E\u54E1\u756A\u53F7 \u2192 \u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9 \u2192 \u6C0F\u540D\u306E\u9806\u306B\u8A66\u3057\u3001\u6700\u521D\u306B TWP \u306E\u8AB0\u304B\u306B\u5F53\u305F\u3063\u305F\u5217\u3067\u7A81\u304D\u5408\u308F\u305B\u307E\u3059\u3002
|
|
203
|
-
\u90E8\u7F72\u30FB\u5F79\u8077\u306F TWP \u306E\u540D\u524D\u3068\u6BD4\u3079\u307E\u3059\uFF08\u5168\u89D2\u534A\u89D2\u30FB\u7A7A\u767D\u306E\u63FA\u308C\u3068\u5927\u6587\u5B57\u5C0F\u6587\u5B57\u306F\u7121\u8996\u3057\u307E\u3059\uFF09\u3002
|
|
204
|
-
\u5217\u540D\u306F \u793E\u54E1\u756A\u53F7 / \u6C0F\u540D / \u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9 / \u90E8\u7F72 / \u5F79\u8077 \u306A\u3069\u3092\u81EA\u52D5\u3067\u63A2\u3057\u307E\u3059\u3002\u9055\u3046\u3068\u304D\u306F --code-column \u7B49\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044
|
|
205
|
-
\uFF08\u898B\u51FA\u3057\u304C\u5358\u306B\u300C\u30E1\u30FC\u30EB\u300D\u306E\u5217\u306F\u500B\u4EBA\u30E1\u30FC\u30EB\u306E\u3053\u3068\u304C\u3042\u308B\u306E\u3067\u81EA\u52D5\u3067\u306F\u4F7F\u3044\u307E\u305B\u3093\uFF09\u3002\u4F7F\u3046\u5217\u306F\u5B9F\u884C\u524D\u306B\u8868\u793A\u3057\u307E\u3059\u3002
|
|
206
|
-
\u5404\u884C\u306E suggestion \u306F\u6B21\u306B\u6253\u3064\u30B3\u30DE\u30F3\u30C9\u306E\u6848\u3067\u3059\u3002'<\u7570\u52D5\u65E5>' \u306A\u3069\u306E <\u2026> \u306F\u57CB\u3081\u3066\u304B\u3089\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
207
|
-
\u5B9F\u884C\u3059\u308B\u524D\u306B\u3001\u5BFE\u8C61\u304C\u81EA\u5206\u81EA\u8EAB\u3084\u5171\u7528\u306E\u7BA1\u7406\u30A2\u30AB\u30A6\u30F3\u30C8\u3067\u306A\u3044\u304B\u3092\u78BA\u304B\u3081\u3066\u304F\u3060\u3055\u3044\uFF08\u5931\u52B9\u3055\u305B\u308B\u3068\u30ED\u30B0\u30A4\u30F3\u3067\u304D\u306A\u304F\u306A\u308A\u307E\u3059\uFF09\u3002
|
|
208
|
-
twp user assignment move \u306F\u4E0A\u9577\u3092\u5F15\u304D\u7D99\u304C\u306A\u3044\u306E\u3067\u3001\u5FC5\u8981\u306A\u3089 --manager \u3082\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
209
|
-
\u72B6\u614B\u304C active \u3067\u306A\u3044\u30A2\u30AB\u30A6\u30F3\u30C8\uFF08\u30DE\u30B9\u30BF\u7BA1\u7406\u3067\u505C\u6B62\u3057\u305F\u3082\u306E\u7B49\uFF09\u306F\u4E00\u89A7\u306B\u51FA\u306A\u3044\u305F\u3081\u3001missing_in_twp \u306B\u51FA\u308B\u3053\u3068\u304C\u3042\u308A\u307E\u3059\u3002
|
|
210
|
-
|
|
211
|
-
1\u4EBA\u3042\u305F\u308A\u6700\u59273\u5F80\u5FA9\u3057\u307E\u3059\u3002\u672C\u756A\u306E API \u30EC\u30FC\u30C8\u5236\u9650\u306B\u5408\u308F\u305B\u30661\u5206\u3042\u305F\u308A ${SEND_PER_MINUTE} \u672C\u307E\u3067\u306B\u6291\u3048\u3066\u9001\u308A\u307E\u3059\u3002
|
|
212
|
-
\u5BFE\u8C61\u304C --max-users\uFF08\u65E2\u5B9A ${DEFAULT_MAX_USERS} \u4EBA\uFF09\u3092\u8D85\u3048\u308B\u3068\u3001\u8A73\u7D30\u3092\u8AAD\u3080\u524D\u306B\u6B62\u307E\u308A\u307E\u3059\u3002`,forbidden:"\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u6A29\u9650\u304C\u5FC5\u8981\u3067\u3059\u3002twp user export \u306F\u7D44\u7E54\u7BA1\u7406\u8005\u3060\u3051\u304C\u4F7F\u3048\u307E\u3059",flags:[{name:"--file",summary:"\u7A81\u304D\u5408\u308F\u305B\u308B\u4EBA\u4E8B\u53F0\u5E33\u306E CSV\uFF081\u884C\u76EE\u306F\u898B\u51FA\u3057\uFF09",
|
|
213
|
-
takesValue:true,placeholder:"<\u53F0\u5E33CSV>"},{name:"--include-disabled",summary:"\u5931\u52B9\u6E08\u307F\u306E\u30E6\u30FC\u30B6\u30FC\u3082\u51FA\u3059\uFF08--file \u7121\u3057\u306E\u3068\u304D\uFF09",takesValue:false},{name:"--exclude-hidden",summary:"\u8868\u793A\u30D5\u30E9\u30B0\u3092\u5916\u3057\u305F\u30E6\u30FC\u30B6\u30FC\u3092\u5BFE\u8C61\u304B\u3089\u5916\u3059",takesValue:false},{name:"--inactive-days",summary:`\u3053\u306E\u65E5\u6570\u30ED\u30B0\u30A4\u30F3\u306E\u8A18\u9332\u304C\u7121\u3044\u5728\u7C4D\u8005\u3092 inactive \u3068\u3057\u3066\u51FA\u3059\uFF08\u65E2\u5B9A ${DEFAULT_INACTIVE_DAYS}\
|
|
214
|
-
\u30FB\u6700\u5927 ${LOGIN_HISTORY_RETENTION_DAYS}\uFF09`,takesValue:true,placeholder:"<\u65E5\u6570>"},...COLUMN_FLAGS,{name:"--max-users",summary:`\u5BFE\u8C61\u306E\u4EBA\u6570\u306E\u4E0A\u9650\uFF08\u65E2\u5B9A ${DEFAULT_MAX_USERS}\uFF09`,takesValue:true,placeholder:"<\u4EBA\u6570>"}],async prepare(input){if(input.args.length>0)throw new UsageError(`export \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,HELP);const inactiveDays=positiveInteger(input.
|
|
215
|
-
flags,"--inactive-days")??DEFAULT_INACTIVE_DAYS;if(inactiveDays>LOGIN_HISTORY_RETENTION_DAYS){throw new UsageError(`--inactive-days \u306F ${LOGIN_HISTORY_RETENTION_DAYS} \u4EE5\u4E0B\u306B\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u53D7\u3051\u53D6\u3063\u305F\u5024: ${inactiveDays}\uFF09`,`\u30ED\u30B0\u30A4\u30F3\u5C65\u6B74\u306F ${LOGIN_HISTORY_RETENTION_DAYS} \u65E5\u3067\u6D88\u3048\u308B\u305F\u3081\u3001\u305D\u308C\u3088\u308A\u524D\u306F\u5224\u5B9A\u3067\u304D\u307E\u305B\u3093\u3002`)}
|
|
216
|
-
const maxUsers=positiveInteger(input.flags,"--max-users")??DEFAULT_MAX_USERS;const file=flagValue(input,"--file");const overrides={};for(const role of LEDGER_ROLES){const value=flagValue(input,`--${role}-column`);if(value!==void 0)overrides[role]=value}const resolved={inactiveDays:String(inactiveDays),maxUsers:String(maxUsers)};if(file===void 0)return withResolved(input,resolved);if(input.flags.has("--include-disabled")){throw new UsageError("--include-disabled \u306F --file \u3068\u4E00\u7DD2\u306B\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093",
|
|
217
|
-
"\u5DEE\u5206\u3067\u306F\u5931\u52B9\u6E08\u307F\u306E\u30E6\u30FC\u30B6\u30FC\u3082\u7A81\u304D\u5408\u308F\u305B\u306B\u4F7F\u3044\u3001\u53F0\u5E33\u306B\u3044\u308B\u4EBA\u306F disabled_in_twp \u3068\u3057\u3066\u51FA\u3057\u307E\u3059\u3002")}resolved["ledger"]=JSON.stringify(parseLedger(decodeLedger(readLedgerFile(file)),overrides));return withResolved(input,resolved)},plan:input=>listPlan(input),plannedNotes:input=>{const notes=["\u3053\u306E\u3042\u3068\u4E00\u89A7\u306E\u7D9A\u304D\u30FB\u6A29\u9650\u30DE\u30C8\u30EA\u30AF\u30B9\u3092 GET \u3057\u30011\u4EBA\u305A\u3064\u8A73\u7D30\u30FB\u73FE\u5728\u306E\u6240\u5C5E\u30FB\u30ED\u30B0\u30A4\u30F3\u5C65\u6B74\u3092 GET \u3057\u307E\u3059\uFF08\u8AAD\u307F\u53D6\u308A\
|
|
218
|
-
\u3060\u3051\uFF09\u3002"];if(!input.flags.has("--exclude-hidden"))notes.push("\u8868\u793A\u30D5\u30E9\u30B0\u3092\u5916\u3057\u305F\u30E6\u30FC\u30B6\u30FC\u3082\u5BFE\u8C61\u306B\u3057\u307E\u3059\uFF08--exclude-hidden \u3067\u9664\u3051\u307E\u3059\uFF09\u3002");const ledger=ledgerOf(input);if(ledger!==void 0){const used=LEDGER_ROLES.filter(role=>ledger.columns[role]!==void 0).map(role=>`${ROLE_LABEL[role]}=\u300C${ledger.header[ledger.columns[role]]??""}\u300D`);notes.push(`\u53F0\u5E33 ${ledger.
|
|
219
|
-
rows.length} \u884C\u3092\u8AAD\u307F\u307E\u3057\u305F\u3002\u4F7F\u3046\u5217: ${used.join("\u3001")}`)}return notes},async execute(input,ctx){const{rows,scanned}=await collectInventory(input,ctx);const disabled=rows.filter(r=>!r.can_login).length;const ssoUndetermined=rows.filter(r=>r.can_login&&r.last_login_status==="sso_not_recorded").length;const excludedHidden=input.flags.has("--exclude-hidden");const ledger=ledgerOf(input);if(ledger===void 0){const visible=input.flags.has("--include-disa\
|
|
220
|
-
bled")?rows:rows.filter(r=>r.can_login);return{mode:"inventory",rows:visible,scanned,disabled,ssoUndetermined,excludedHidden}}const diffs=diffAgainstLedger(rows,ledger.rows,ledger.columns,Number(requireResolved(input,"inactiveDays")),new Date);return{mode:"diff",rows:diffs,scanned,disabled,ssoUndetermined,excludedHidden}},summarize(body){const result=exportBody(body);if(result.mode==="diff"){return result.rows.map(row=>Object.fromEntries(DIFF_COLUMNS.map(c=>[c,spreadsheetSafe(row[c])])))}return result.
|
|
221
|
-
rows.map(row=>Object.fromEntries(INVENTORY_COLUMNS.map(c=>{if(c==="permissions")return[c,permissionText(row.permissions)];if(c==="last_login_at")return[c,lastLoginText(row)];if(c==="manager_name")return[c,spreadsheetSafe(row.manager_name??row.manager_id)];return[c,spreadsheetSafe(row[c])]})))},raw:body=>exportBody(body).rows,notes(body){const result=exportBody(body);const notes=[`${result.scanned} \u4EBA\u3092\u8AAD\u307F\u307E\u3057\u305F\uFF08\u3046\u3061\u5931\u52B9\u6E08\u307F ${result.disabled}\
|
|
222
|
-
\u4EBA\uFF09\u3002`+(result.excludedHidden?"\u8868\u793A\u30D5\u30E9\u30B0\u3092\u5916\u3057\u305F\u30E6\u30FC\u30B6\u30FC\u306F\u5BFE\u8C61\u5916\u3067\u3059\uFF08--exclude-hidden\uFF09\u3002":"")];if(result.ssoUndetermined>0){notes.push(`\u8A8D\u8A3C\u30BF\u30A4\u30D7\u304C oauth \u306E ${result.ssoUndetermined} \u4EBA\u306F\u3001SSO \u306E\u30ED\u30B0\u30A4\u30F3\u304C\u8A18\u9332\u3055\u308C\u306A\u3044\u305F\u3081\u6700\u7D42\u30ED\u30B0\u30A4\u30F3\u3092\u5224\u5B9A\u3057\u3066\u3044\u307E\u305B\u3093\u3002`)}
|
|
223
|
-
if(result.mode==="diff"){const counts=new Map;for(const row of result.rows)counts.set(row.kind,(counts.get(row.kind)??0)+1);notes.push(counts.size===0?"\u53F0\u5E33\u3068\u306E\u5DEE\u5206\u306F\u3042\u308A\u307E\u305B\u3093\u3002":`\u5DEE\u5206: ${[...counts].map(([kind,n])=>`${kind} ${n}\u4EF6`).join(" / ")}`);if(result.excludedHidden){notes.push("--exclude-hidden \u306E\u305F\u3081\u3001\u8868\u793A\u30D5\u30E9\u30B0\u3092\u5916\u3057\u305F\u307E\u307E\u5931\u52B9\u3057\u3066\u3044\u306A\u3044\u30E6\u30FC\u30B6\u30FC\uFF08\u5931\u52B9\u6F0F\u308C\uFF09\u306F\u51FA\u3066\u3044\u307E\u305B\u3093\u3002\u307E\u305F\u3001\u8868\u793A\u30D5\u30E9\u30B0\u3092\u5916\u3057\u305F\u30E6\u30FC\u30B6\u30FC\u304C missing_in_twp\uFF08\u767B\u9332\u6F0F\u308C\uFF09\u3068\u3057\u3066\u51FA\u3066\u3044\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002")}}
|
|
224
|
-
return notes}};var PROFILE_SKILL_COLUMNS=["fiscal_year","status","skill_name","self_level","primary_level","secondary_level","confirmed_level","target_level","profile_id","skill_id"];function profileRows(body){const response=isRecord(body)&&"response"in body?body["response"]:body;const list=isRecord(response)?response["list"]:void 0;if(!Array.isArray(list)){throw new ApiResponseError("\u30B9\u30AD\u30EB\u30D7\u30ED\u30D5\u30A1\u30A4\u30EB\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")}
|
|
136
|
+
${commands.map(c=>` ${c}`).join("\n")}${later}`)}return notes}};var userAssignmentResource={name:"assignment",summary:"\u30E6\u30FC\u30B6\u30FC\u306E\u6240\u5C5E\uFF08\u90E8\u7F72\u30FB\u5F79\u8077\uFF09\u306E\u53C2\u7167\u30FB\u4F5C\u6210\u30FB\u66F4\u65B0\u30FB\u7D42\u4E86\u30FB\u524A\u9664\u30FB\u4ED8\u3051\u66FF\u3048",operations:[listOperation,createOperation,updateOperation,endOperation,deleteOperation,moveOperation]};var PROFILE_SKILL_COLUMNS=["fiscal_year","status","skill_name","self_level","primary_level","secondary_level","confirmed_level","target_level","profile_id","skill_id"];function profileRows(body){const response=isRecord(body)&&"response"in body?body["response"]:body;const list=isRecord(response)?response["list"]:void 0;if(!Array.isArray(list)){throw new ApiResponseError("\u30B9\u30AD\u30EB\u30D7\u30ED\u30D5\u30A1\u30A4\u30EB\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")}
|
|
225
137
|
return list}function skillsPlan(input){userPath(input);return{method:"GET",path:"/api/v2/organization/user-skill-profiles",query:{user_id:input.resolved?.["userId"],fiscal_year:fiscalYear(input)}}}var skillsOperation={name:"skills",summary:"\u30E6\u30FC\u30B6\u30FC\u306E\u30B9\u30AD\u30EB\u8A55\u4FA1\uFF08\u5E74\u5EA6\u3054\u3068\u306E\u81EA\u5DF1\u30FB\u4E00\u6B21\u30FB\u4E8C\u6B21\u30FB\u78BA\u5B9A\u30EC\u30D9\u30EB\uFF09\u3092\u51FA\u3059",usage:"twp user skills <\u30E6\u30FC\u30B6\u30FC> [--fiscal-year <\u5E74\u5EA6>]",
|
|
226
138
|
description:"GET /api/v2/organization/user-skill-profiles?user_id=\u2026\u3002\u5E74\u5EA6\u3054\u3068\u306E\u30B9\u30AD\u30EB\u30D7\u30ED\u30D5\u30A1\u30A4\u30EB\u3092\u51FA\u3057\u307E\u3059\u3002\nstatus \u306F\u30D7\u30ED\u30D5\u30A1\u30A4\u30EB\u306E\u8A55\u4FA1\u6BB5\u968E\uFF08\u30B5\u30FC\u30D0\u306E\u5024\uFF09\u3001self_level / primary_level / secondary_level / confirmed_level \u306F\n\u81EA\u5DF1\u30FB\u4E00\u6B21\u30FB\u4E8C\u6B21\u8A55\u4FA1\u3068\u78BA\u5B9A\u30EC\u30D9\u30EB\uFF08\u672A\u5165\u529B\u306F\u7A7A\uFF09\u3001target_level \u306F\u76EE\u6A19\u30EC\u30D9\u30EB\u3067\u3059\u3002\n\u53C2\u7167\u3067\u304D\u308B\u306E\u306F\u672C\u4EBA\u30FB\u4E0A\u9577\uFF08\u4E0A\u9577\u30C1\u30A7\u30FC\u30F3\uFF09\u30FBHR\u7BA1\u7406\u8005\u3060\u3051\u3067\u3059\u3002\u5358\u4FA1\uFF08unit_price\uFF09\u306FHR\u7BA1\u7406\u8005\u306B\u3060\u3051\u8FD4\u308A\u307E\u3059\u3002\n\n--output table / text / tsv \u306F1\u30D7\u30ED\u30D5\u30A1\u30A4\u30EB1\u30B9\u30AD\u30EB1\u884C\u3067\u3059\u3002--output json \u306F\u30B5\u30FC\u30D0\u306E\u30D7\u30ED\u30D5\u30A1\u30A4\u30EB\u3092\u305D\u306E\u307E\u307E\u51FA\u3057\u307E\u3059\u3002\n\n"+
|
|
227
139
|
USER_REF_HELP,forbidden:"\u3053\u306E\u30E6\u30FC\u30B6\u30FC\u306E\u30B9\u30AD\u30EB\u8A55\u4FA1\u3092\u53C2\u7167\u3059\u308B\u6A29\u9650\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u672C\u4EBA\u30FB\u4E0A\u9577\u30FBHR\u7BA1\u7406\u8005\u3060\u3051\u304C\u53C2\u7167\u3067\u304D\u307E\u3059",flags:[USER_REF_FLAG,FISCAL_YEAR_FLAG],async prepare(input,ctx){fiscalYear(input);return prepareUser(input,ctx,"twp user skills help")},plan:skillsPlan,plannedNotes:()=>["\u3053\u306E\u3042\u3068\u3001\u30B9\u30AD\u30EB\u540D\u3092\u8868\u793A\u3059\u308B\u305F\u3081\u30B9\u30AD\u30EB\u4E00\u89A7\u3092 GET \u3057\u307E\u3059\u3002"],
|
|
@@ -288,7 +200,7 @@ usage:"twp user invite resend <\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9|\u30C8
|
|
|
288
200
|
body,"\u62DB\u5F85\u306E\u518D\u9001")},{name:"delete",summary:"\u62DB\u5F85\u3092\u53D6\u308A\u6D88\u3059\uFF08\u53D7\u8AFE\u7528\u306E\u30EA\u30F3\u30AF\u304C\u4F7F\u3048\u306A\u304F\u306A\u308B\uFF09",usage:"twp user invite delete <\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9|\u30C8\u30FC\u30AF\u30F3> --yes",description:`${INVITE_REF_HELP}
|
|
289
201
|
|
|
290
202
|
\u53D6\u308A\u6D88\u3057\u305F\u62DB\u5F85\u306F\u5143\u306B\u623B\u305B\u307E\u305B\u3093\u3002\u3082\u3046\u4E00\u5EA6\u62DB\u5F85\u3059\u308B\u3068\u304D\u306F twp user invite create \u3092\u4F7F\u3044\u307E\u3059\u3002`,destructive:true,forbidden:FORBIDDEN2,flags:[INVITE_REF_FLAG],prepare:input=>prepareInvite(input,"twp user invite delete help"),plan:input=>refPlan(input,"DELETE"),plannedNotes:refNotes,async execute(input,ctx){return ctx.send({method:"DELETE",path:invitePath(await tokenFor(input,
|
|
291
|
-
ctx))})},summarize:body=>successAck(body,"\u62DB\u5F85\u306E\u53D6\u6D88"),raw:body=>successAck(body,"\u62DB\u5F85\u306E\u53D6\u6D88")}]};var LIST_COLUMNS2=["user_id","user_name","email","employee_code","department_name","position_name","role","display_flg"];var GET_COLUMNS=["user_id","user_name","user_name_kana","email","employee_code","role","auth_type","hire_date","is_locked","display_flg","memberlist_flg","org_chart_flg","dashboard_flg"];var EMPLOYMENT_TYPES=["employee","partner"];var
|
|
203
|
+
ctx))})},summarize:body=>successAck(body,"\u62DB\u5F85\u306E\u53D6\u6D88"),raw:body=>successAck(body,"\u62DB\u5F85\u306E\u53D6\u6D88")}]};var LIST_COLUMNS2=["user_id","user_name","email","employee_code","department_name","position_name","role","display_flg"];var GET_COLUMNS=["user_id","user_name","user_name_kana","email","employee_code","role","auth_type","hire_date","is_locked","display_flg","memberlist_flg","org_chart_flg","dashboard_flg"];var EMPLOYMENT_TYPES=["employee","partner"];var listPaging=envelopePaging({label:"\u30E6\u30FC\u30B6\u30FC\u4E00\u89A7"});function userObject(body){if(!isRecord(body)||typeof body["user_id"]!==
|
|
292
204
|
"string"){throw new ApiResponseError("\u30E6\u30FC\u30B6\u30FC\u8A73\u7D30\u306E\u5FDC\u7B54\u306B user_id \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}const rest={...body};delete rest["result"];return rest}var TEXT_FIELDS=[{flag:"--name",key:"user_name",label:"\u6C0F\u540D",maxChars:255,summary:"\u6C0F\u540D",placeholder:"<\u6C0F\u540D>"},{flag:"--kana",key:"user_name_kana",label:"\u30D5\u30EA\u30AC\u30CA",maxChars:255,
|
|
293
205
|
summary:"\u6C0F\u540D\u306E\u30D5\u30EA\u30AC\u30CA",placeholder:"<\u30D5\u30EA\u30AC\u30CA>"},{flag:"--email",key:"login_id",label:"\u30ED\u30B0\u30A4\u30F3ID",maxChars:255,summary:"\u30ED\u30B0\u30A4\u30F3ID\uFF08\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\uFF09",placeholder:"<\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9>"},{flag:"--employee-code",key:"employee_code",label:"\u793E\u54E1\u756A\u53F7",maxChars:50,summary:"\u793E\u54E1\u756A\u53F7",placeholder:"<\u793E\u54E1\u756A\u53F7>"}];var DISPLAY_FIELDS=[
|
|
294
206
|
{flag:"--display",key:"display_flg",summary:"\u30E6\u30FC\u30B6\u30FC\u4E00\u89A7\u30FB\u9078\u629E\u80A2\u306B\u8868\u793A\u3059\u308B\u304B\uFF08true / false\uFF09"},{flag:"--memberlist",key:"memberlist_flg",summary:"\u30E1\u30F3\u30D0\u30FC\u4E00\u89A7\u306B\u8868\u793A\u3059\u308B\u304B\uFF08true / false\uFF09"},{flag:"--org-chart",key:"org_chart_flg",summary:"\u7D44\u7E54\u56F3\u306B\u8868\u793A\u3059\u308B\u304B\uFF08true / false\uFF09"},{flag:"--dashboard",key:"dashboard_flg",summary:"\u30C0\u30C3\u30B7\
|
|
@@ -299,13 +211,13 @@ var PASSWORD_HINT="\u30D1\u30B9\u30EF\u30FC\u30C9\u306F --password-file \u306B\u
|
|
|
299
211
|
function booleanFlag(input,flag){const raw=input.flags.get(flag);return raw===void 0?void 0:booleanText(flag,raw)}function roleType(input){const raw=input.flags.get("--role");if(raw===void 0)return void 0;const type=ROLE_TO_TYPE[raw.trim().toLowerCase()];if(type===void 0){throw new UsageError(`--role \u306B\u300C${raw}\u300D\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,"\u6307\u5B9A\u3067\u304D\u308B\u306E\u306F admin\uFF08\u7BA1\u7406\u8005\uFF09/ user\uFF08\u4E00\u822C\uFF09\u3067\u3059\u3002")}
|
|
300
212
|
return type}function authType(input){const raw=input.flags.get("--auth-type");if(raw===void 0)return void 0;const value=raw.trim().toLowerCase();if(!AUTH_TYPES.includes(value)){throw new UsageError(`--auth-type \u306B\u300C${raw}\u300D\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,`\u6307\u5B9A\u3067\u304D\u308B\u306E\u306F ${AUTH_TYPES.join(" / ")} \u3067\u3059\uFF08disabled \u3067\u5931\u52B9\uFF09\u3002`)}return value}async function readPassword(input,usage){const file=input.flags.get(PASSWORD_FILE_FLAG.
|
|
301
213
|
name);if(file===void 0)return void 0;let text;if(file==="-"){if(process.stdin.isTTY===true){throw new UsageError("--password-file - \u306F\u6A19\u6E96\u5165\u529B\u304B\u3089\u8AAD\u307F\u307E\u3059\u304C\u3001\u7AEF\u672B\u304C\u7E4B\u304C\u3063\u3066\u3044\u307E\u3059","\u30D1\u30A4\u30D7\u304B\u30EA\u30C0\u30A4\u30EC\u30AF\u30C8\u3067\u6A19\u6E96\u5165\u529B\u306B\u6E21\u3059\u304B\u3001--password-file \u306B\u30D5\u30A1\u30A4\u30EB\u306E\u30D1\u30B9\u3092\u6E21\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}
|
|
302
|
-
const chunks=[];let size=0;for await(const chunk of process.stdin){const buffer=Buffer.from(chunk);size+=buffer.length;if(size>PASSWORD_FILE_MAX_BYTES){throw new UsageError(`\u6A19\u6E96\u5165\u529B\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u5927\u304D\u3059\u304E\u307E\u3059\uFF08${PASSWORD_FILE_MAX_BYTES} \u30D0\u30A4\u30C8\u8D85\uFF09`,usage)}chunks.push(buffer)}text=Buffer.concat(chunks).toString("utf8")}else{try{const stat=
|
|
303
|
-
|
|
304
|
-
\
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
214
|
+
const chunks=[];let size=0;for await(const chunk of process.stdin){const buffer=Buffer.from(chunk);size+=buffer.length;if(size>PASSWORD_FILE_MAX_BYTES){throw new UsageError(`\u6A19\u6E96\u5165\u529B\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u5927\u304D\u3059\u304E\u307E\u3059\uFF08${PASSWORD_FILE_MAX_BYTES} \u30D0\u30A4\u30C8\u8D85\uFF09`,usage)}chunks.push(buffer)}text=Buffer.concat(chunks).toString("utf8")}else{try{const stat=fs.statSync(file);if(!stat.isFile())throw new UsageError(`--password\
|
|
215
|
+
-file \u306B\u901A\u5E38\u306E\u30D5\u30A1\u30A4\u30EB\u4EE5\u5916\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093: ${file}`,usage);if(stat.size>PASSWORD_FILE_MAX_BYTES){throw new UsageError(`--password-file \u306E\u30D5\u30A1\u30A4\u30EB\u304C\u5927\u304D\u3059\u304E\u307E\u3059\uFF08${stat.size} \u30D0\u30A4\u30C8\uFF09: ${file}`,usage)}text=fs.readFileSync(file,"utf8")}catch(err){if(err instanceof UsageError)throw err;const reason=err.code??err.message;throw new UsageError(`--password-file \u306E\u30D5\
|
|
216
|
+
\u30A1\u30A4\u30EB\u3092\u8AAD\u3081\u307E\u305B\u3093: ${file}\uFF08${reason}\uFF09`,usage)}}const password=text.replace(/^\uFEFF/,"").replace(/\r?\n$/,"");if([...password].length<PASSWORD_MIN_CHARS){throw new UsageError(`\u30D1\u30B9\u30EF\u30FC\u30C9\u306F ${PASSWORD_MIN_CHARS} \u6587\u5B57\u4EE5\u4E0A\u306B\u3057\u3066\u304F\u3060\u3055\u3044\uFF08${[...password].length} \u6587\u5B57\uFF09`,usage)}return password}function userFields(input){const body={};for(const field of TEXT_FIELDS){const value=boundedText(
|
|
217
|
+
input,field.flag,{maxChars:field.maxChars,label:field.label});if(value!==void 0)body[field.key]=value}const type=roleType(input);if(type!==void 0)body["type"]=type;const hireDate=isoDate(input,HIRE_DATE_FLAG.name);if(hireDate!==void 0)body["hire_date"]=hireDate;for(const field of DISPLAY_FIELDS){const value=booleanFlag(input,field.flag);if(value!==void 0)body[field.key]=value}return body}function writeAck(body,label2){if(!isRecord(body)||body["result"]!==true){throw new ApiResponseError(`${label2}\
|
|
218
|
+
\u306E\u5FDC\u7B54\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`)}const rest={...body};delete rest["result"];return rest}function licenseNotes(body){const warnings=isRecord(body)?body["license_warnings"]:void 0;if(!Array.isArray(warnings)||warnings.length===0)return[];const texts=warnings.map(warning=>isRecord(warning)?String(warning["message"]??warning["feature_label"]??warning["featur\
|
|
219
|
+
e"]??""):String(warning));return[`\u30E9\u30A4\u30BB\u30F3\u30B9\u306E\u7A7A\u304D\u304C\u8DB3\u308A\u306A\u3044\u305F\u3081\u3001\u4E00\u90E8\u306E\u6A5F\u80FD\u6A29\u9650\u306F\u4ED8\u4E0E\u3055\u308C\u3066\u3044\u307E\u305B\u3093: ${texts.join(" / ")}`]}var createOperation2={name:"create",summary:"\u30E6\u30FC\u30B6\u30FC\u3092\u4F5C\u6210\u3059\u308B\uFF08\u5165\u793E\u30FB\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u307F\uFF09",usage:"twp user create --name <\u6C0F\u540D> --email <\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9> --password-file <\
|
|
220
|
+
\u30D1\u30B9|-> [--role admin|user] [--kana <\u30D5\u30EA\u30AC\u30CA>] [--hire-date <YYYY-MM-DD>] [--employee-code <\u793E\u54E1\u756A\u53F7>] [--display true|false] \u2026",description:`--name / --email / --password-file \u304C\u5FC5\u9808\u3067\u3059\u3002--role \u3092\u7701\u304F\u3068\u4E00\u822C\u30E6\u30FC\u30B6\u30FC\uFF08user\uFF09\u3067\u4F5C\u6210\u3057\u307E\u3059\u3002
|
|
309
221
|
\u8868\u793A\u30D5\u30E9\u30B0\u3092\u7701\u304F\u3068\u3001\u30B5\u30FC\u30D0\u306E\u65E2\u5B9A\uFF08\u3059\u3079\u3066 true\uFF1D\u8868\u793A\u3059\u308B\uFF09\u3067\u4F5C\u6210\u3057\u307E\u3059\u3002
|
|
310
222
|
\u6A5F\u80FD\u6A29\u9650\u306F\u30C6\u30CA\u30F3\u30C8\u306E\u65E2\u5B9A\u3067\u4ED8\u4E0E\u3055\u308C\u307E\u3059\uFF08\u30E9\u30A4\u30BB\u30F3\u30B9\u306E\u7A7A\u304D\u304C\u8DB3\u308A\u306A\u3044\u6A5F\u80FD\u306F\u4ED8\u4E0E\u3055\u308C\u305A\u3001stderr \u306B\u51FA\u307E\u3059\uFF09\u3002
|
|
311
223
|
|
|
@@ -342,10 +254,10 @@ if(ref==="me")notes.push("\u5BFE\u8C61\u306F\u81EA\u5206\u81EA\u8EAB\u3067\u3059
|
|
|
342
254
|
usage:"twp user list [--department <\u90E8\u7F72>] [--position <\u5F79\u8077>] [--employment employee|partner] [--keyword <\u8A9E>] [--include-hidden] [--all] [--limit <\u4EF6\u6570>] [--cursor <\u30AB\u30FC\u30BD\u30EB>]",description:"--department / --position \u306F\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u30FBID \u306E\u3069\u308C\u3067\u3082\u6307\u5B9A\u3067\u304D\u307E\u3059\uFF08\u4E3B\u6240\u5C5E\u3067\u7D5E\u308A\u8FBC\u307F\u307E\u3059\uFF09\u3002\n--employment \u306F employee\uFF08\u793E\u54E1\uFF09\u304B partner\uFF08\u30D1\u30FC\u30C8\u30CA\u30FC\uFF09\u3067\u3059\u3002\n--include-hidden \u306F\u8868\u793A\u30D5\u30E9\u30B0\u3092\u5916\u3057\u305F\u30E6\u30FC\u30B6\u30FC\u3082\u542B\u3081\u307E\u3059\uFF08\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u3068\u304D\u3060\u3051\u52B9\u304D\u307E\u3059\uFF09\u3002\n\u5931\u52B9\uFF08\u30ED\u30B0\u30A4\u30F3\u4E0D\u53EF\uFF09\u3057\u305F\u30E6\u30FC\u30B6\u30FC\u3082\u4E00\u89A7\u306B\u542B\u307E\u308C\u307E\u3059\u3002\u5931\u52B9\u304B\u3069\u3046\u304B\u306F twp user get \u306E auth_type \u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\n\uFF08\u5168\u54E1\u306E\u8A8D\u8A3C\u30BF\u30A4\u30D7\u3092\u4E00\u89A7\u3067\u898B\u308B\u306A\u3089 twp user export \
|
|
343
255
|
--include-disabled\uFF09\u3002\n\n--output json \u306F API \u304C\u8FD4\u3059\u5168\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u51FA\u3057\u307E\u3059\u3002\n--output table / text / tsv \u306F\u8981\u7D04\u5217\uFF08user_id / user_name / email / employee_code / department_name / position_name / role / display_flg\uFF09\u3067\u3059\u3002\n\n"+LIST_PAGING_HELP,flags:[...LIST_FLAGS,{name:"--department",summary:"\u4E3B\u6240\u5C5E\u306E\u90E8\u7F72\u3067\u7D5E\u308A\u8FBC\u3080\uFF08\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u30FBID\uFF09",
|
|
344
256
|
takesValue:true,placeholder:"<\u90E8\u7F72>"},{name:"--position",summary:"\u4E3B\u6240\u5C5E\u306E\u5F79\u8077\u3067\u7D5E\u308A\u8FBC\u3080\uFF08\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u30FBID\uFF09",takesValue:true,placeholder:"<\u5F79\u8077>"},{name:"--employment",summary:"\u96C7\u7528\u533A\u5206\u3067\u7D5E\u308A\u8FBC\u3080\uFF08employee / partner\uFF09",takesValue:true,placeholder:"<\u533A\u5206>"},{name:"--keyword",summary:"\u6C0F\u540D\u30FB\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u306E\u90E8\u5206\u4E00\u81F4\u3067\u7D5E\u308A\u8FBC\u3080",
|
|
345
|
-
takesValue:true,placeholder:"<\u8A9E>"},{name:"--include-hidden",summary:"\u8868\u793A\u30D5\u30E9\u30B0\u3092\u5916\u3057\u305F\u30E6\u30FC\u30B6\u30FC\u3082\u542B\u3081\u308B",takesValue:false}],paging:
|
|
257
|
+
takesValue:true,placeholder:"<\u8A9E>"},{name:"--include-hidden",summary:"\u8868\u793A\u30D5\u30E9\u30B0\u3092\u5916\u3057\u305F\u30E6\u30FC\u30B6\u30FC\u3082\u542B\u3081\u308B",takesValue:false}],paging:listPaging,async prepare(input,ctx){if(input.args.length>0){throw new UsageError(`list \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,"twp user list help")}const employment=nonEmpty(input.flags,"--employment");if(employment!==void 0&&!EMPLOYMENT_TYPES.
|
|
346
258
|
includes(employment)){throw new UsageError(`--employment \u306B\u300C${employment}\u300D\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,`\u6307\u5B9A\u3067\u304D\u308B\u306E\u306F ${EMPLOYMENT_TYPES.join(" / ")} \u3067\u3059`)}const resolved={};const department=nonEmpty(input.flags,"--department");if(department!==void 0)resolved["departmentId"]=(await ctx.resolver.department(department)).id;const position=nonEmpty(input.flags,"--position");if(position!==void 0)resolved["positionId"]=(await ctx.
|
|
347
|
-
resolver.position(position)).id;return withResolved(input,resolved)},plan(input){return{method:"GET",path:"/api/v2/admin/users/list",query:{limit:positiveInteger(input.flags,"--limit"),cursor:nonEmpty(input.flags,"--cursor"),keyword:nonEmpty(input.flags,"--keyword"),department_id:input.resolved?.["departmentId"],position_id:input.resolved?.["positionId"],employment_type:nonEmpty(input.flags,"--employment"),include_hidden:input.flags.has("--include-hidden")?"true":void 0}}},summarize:body=>
|
|
348
|
-
items(body).map(row=>pick(row,LIST_COLUMNS2)),raw:body=>
|
|
259
|
+
resolver.position(position)).id;return withResolved(input,resolved)},plan(input){return{method:"GET",path:"/api/v2/admin/users/list",query:{limit:positiveInteger(input.flags,"--limit"),cursor:nonEmpty(input.flags,"--cursor"),keyword:nonEmpty(input.flags,"--keyword"),department_id:input.resolved?.["departmentId"],position_id:input.resolved?.["positionId"],employment_type:nonEmpty(input.flags,"--employment"),include_hidden:input.flags.has("--include-hidden")?"true":void 0}}},summarize:body=>listPaging.
|
|
260
|
+
items(body).map(row=>pick(row,LIST_COLUMNS2)),raw:body=>listPaging.items(body)},{name:"get",summary:"\u30E6\u30FC\u30B6\u30FC1\u4EBA\u306E\u8A73\u7D30\u3092\u8868\u793A\u3059\u308B\uFF08\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u307F\uFF09",usage:"twp user get <\u30E6\u30FC\u30B6\u30FC>",description:USER_REF_HELP+"\n\nauth_type \u304C disabled \u306E\u30E6\u30FC\u30B6\u30FC\u306F\u5931\u52B9\uFF08\u30ED\u30B0\u30A4\u30F3\u4E0D\u53EF\uFF09\u3057\u3066\u3044\u307E\u3059\u3002\n\u8981\u7D04\uFF08table / text / tsv\uFF09\u306B\u306F\u500B\u4EBA\u9023\u7D61\u5148\u3092\u51FA\u3057\u307E\u305B\u3093\u3002--output json \u306F API \u304C\u8FD4\u3059\u5168\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u51FA\u3057\u307E\u3059\u3002",
|
|
349
261
|
forbidden:"\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u6A29\u9650\u304C\u5FC5\u8981\u3067\u3059\u3002twp user get \u306F\u7D44\u7E54\u7BA1\u7406\u8005\u3060\u3051\u304C\u4F7F\u3048\u307E\u3059",flags:[USER_REF_FLAG],prepare:(input,ctx)=>prepareUser(input,ctx,"twp user get help"),plan:input=>({method:"GET",path:`/api/v2/admin/users/${userPath(input)}`}),summarize:body=>pick(userObject(body),GET_COLUMNS),raw:body=>userObject(body)},{name:"projects",summary:"\u6307\u5B9A\u3057\u305F\u30E6\u30FC\u30B6\u30FC\u304C\u53C2\u753B\u3057\u3066\u3044\u308B\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u4E00\u89A7\u3059\u308B\uFF08\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u307F\uFF09",
|
|
350
262
|
usage:"twp user projects <\u30E6\u30FC\u30B6\u30FC>",description:"GET /api/v2/admin/users/{id}/projects\u3002\u3053\u306E API \u306F\u30DA\u30FC\u30B8\u30F3\u30B0\u3092\u6301\u305F\u305A\u3001\u5E38\u306B\u5168\u4EF6\u3092\u8FD4\u3057\u307E\u3059\u3002\nmember_start_date / member_end_date \u306F\u305D\u306E\u30E6\u30FC\u30B6\u30FC\u306E\u53C2\u753B\u671F\u9593\u3067\u3059\uFF08start_date / end_date \u306F\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u671F\u9593\uFF09\u3002\n\u81EA\u5206\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306F\u7D44\u7E54\u7BA1\u7406\u8005\u3067\u306A\u304F\u3066\u3082 twp project mine \u3067\u8AAD\u3081\u307E\u3059\u3002\n\n"+
|
|
351
263
|
USER_REF_HELP,forbidden:"\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u6A29\u9650\u304C\u5FC5\u8981\u3067\u3059\u3002twp user projects \u306F\u7D44\u7E54\u7BA1\u7406\u8005\u3060\u3051\u304C\u4F7F\u3048\u307E\u3059\uFF08\u81EA\u5206\u306E\u5206\u306F twp project mine\uFF09",flags:[USER_REF_FLAG],prepare:(input,ctx)=>prepareUser(input,ctx,"twp user projects help"),plan:input=>({method:"GET",path:`/api/v2/admin/users/${userPath(input,"/projects")}`}),summarize:body=>assignedProjectItems(body).map(row=>pick(
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
|
+
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
+
import{booleanQuery,cacheNote,createFlags,fieldBody,hasAnyField,idSegment,masterItem,masterRows,referencedDeleteGuidance,targetId,updateFlags}from"./chunk-XGYOJHZC.js";import"./chunk-JJSBBWJ5.js";import"./chunk-MI6HVYR2.js";import{USER_CONTRACT_TYPES_PATH}from"./chunk-HNG6MF26.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import{withResolved}from"./chunk-PS5QFKHB.js";import"./chunk-II5RVJQN.js";import{
|
|
4
|
+
acknowledgement,pick}from"./chunk-3ZRMMBP5.js";import{UsageError}from"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var NAME="user-contract-type";var LABEL="\u5951\u7D04\u5F62\u614B";var ITEM_KEY="contract_type";var CALCULATION_TYPES=["salary_based","salary_executive","salary_manager","hourly_based","contract_based","other_exempt"];var FIELDS=[{kind:"text",flag:"--name",key:"name",label:`${LABEL}\u540D`,maxChars:255,summary:`${LABEL}\u540D`},{kind:"text",flag:"--code",key:"code",label:`${LABEL}\u30B3\u30FC\u30C9`,maxChars:50,summary:`${LABEL}\u30B3\u30FC\u30C9\uFF08\u4EFB\u610F\u30FB\u30C6\u30CA\u30F3\u30C8\u5185\u3067\u4E00\u610F\uFF09`},
|
|
5
|
+
{kind:"enum",flag:"--calculation-type",key:"calculation_type",values:CALCULATION_TYPES,summary:"\u8A08\u7B97\u533A\u5206\uFF08salary_based: \u4E00\u822C\u5F93\u696D\u54E1 / salary_executive: \u5F79\u54E1 / salary_manager: \u7BA1\u7406\u76E3\u7763\u8005 / hourly_based: \u6642\u7D66\u5236 / contract_based: \u696D\u52D9\u59D4\u8A17 / other_exempt: \u8A08\u7B97\u5BFE\u8C61\u5916\uFF09"},{kind:"integer",flag:"--monthly-hours",key:"default_monthly_hours",label:"\u6708\u9593\u6240\u5B9A\u6642\u9593",min:1,
|
|
6
|
+
max:744,summary:"\u6708\u9593\u6240\u5B9A\u6642\u9593\uFF081\u301C744\uFF09"},{kind:"number",flag:"--daily-hours",key:"default_daily_hours",label:"1\u65E5\u306E\u6240\u5B9A\u6642\u9593",min:1,max:24,summary:"1\u65E5\u306E\u6240\u5B9A\u6642\u9593\uFF081\u301C24\u30FB\u5C0F\u6570\u53EF\uFF09"},{kind:"number",flag:"--bonus-months",key:"bonus_months_default",label:"\u8CDE\u4E0E\u6708\u6570",min:0,max:24,summary:"\u8CDE\u4E0E\u6708\u6570\u306E\u65E2\u5B9A\uFF080\u301C24\u30FB\u5C0F\u6570\u53EF\uFF09"},
|
|
7
|
+
{kind:"boolean",flag:"--paid-leave-eligible",key:"is_paid_leave_eligible",summary:"\u6709\u7D66\u4F11\u6687\u306E\u4ED8\u4E0E\u5BFE\u8C61\u304B\uFF08true / false\uFF09"},{kind:"boolean",flag:"--auto-break-correction",key:"auto_break_correction",summary:"\u4F11\u61A9\u306E\u81EA\u52D5\u88DC\u6B63\u3092\u884C\u3046\u304B\uFF08true / false\uFF09"},{kind:"time",flag:"--start-time",key:"default_start_time",summary:"\u59CB\u696D\u6642\u523B\u306E\u65E2\u5B9A\uFF08HH:MM\uFF09"},{kind:"time",flag:"--end\
|
|
8
|
+
-time",key:"default_end_time",summary:"\u7D42\u696D\u6642\u523B\u306E\u65E2\u5B9A\uFF08HH:MM\uFF09"},{kind:"weekdays",flag:"--work-schedule",key:"default_work_schedule",summary:"\u52E4\u52D9\u65E5\u306E\u65E2\u5B9A\uFF08\u65E5\u66DC\u59CB\u307E\u308A\u30FB\u65E5\u6708\u706B\u6C34\u6728\u91D1\u571F\u306E 0 / 1 \u30927\u6841\u3002\u6708\u301C\u91D1\u306A\u3089 0111110\uFF09"},{kind:"integer",flag:"--flex-type",key:"flex_type",label:"\u30D5\u30EC\u30C3\u30AF\u30B9\u533A\u5206",min:0,max:1,summary:"\
|
|
9
|
+
\u30D5\u30EC\u30C3\u30AF\u30B9\u533A\u5206\uFF080: \u901A\u5E38 / 1: \u30D5\u30EC\u30C3\u30AF\u30B9\uFF09"},{kind:"integer",flag:"--flex-settlement-period",key:"flex_settlement_period",label:"\u30D5\u30EC\u30C3\u30AF\u30B9\u306E\u6E05\u7B97\u671F\u9593",min:1,max:3,summary:"\u30D5\u30EC\u30C3\u30AF\u30B9\u306E\u6E05\u7B97\u671F\u9593\uFF081\u301C3\u304B\u6708\uFF09"},{kind:"time",flag:"--core-time-start",key:"default_core_time_start",summary:"\u30B3\u30A2\u30BF\u30A4\u30E0\u958B\u59CB\uFF08HH:MM\uFF09"},
|
|
10
|
+
{kind:"time",flag:"--core-time-end",key:"default_core_time_end",summary:"\u30B3\u30A2\u30BF\u30A4\u30E0\u7D42\u4E86\uFF08HH:MM\uFF09"},{kind:"integer",flag:"--sort-order",key:"sort_order",label:"\u8868\u793A\u9806",min:0,max:9999,summary:"\u8868\u793A\u9806\uFF080\u301C9999\uFF09"},{kind:"boolean",flag:"--active",key:"is_active",summary:"\u6709\u52B9\u304B\uFF08true / false\uFF09"},{kind:"text",flag:"--description",key:"description",label:"\u8AAC\u660E",maxChars:1e3,summary:"\u8AAC\u660E"}];var LIST_COLUMNS=[
|
|
11
|
+
"id","code","name","calculation_type","default_monthly_hours","sort_order","is_active"];var GET_COLUMNS=["id","code","name","calculation_type","default_monthly_hours","default_daily_hours","bonus_months_default","is_paid_leave_eligible","auto_break_correction","default_start_time","default_end_time","default_work_schedule","flex_type","flex_settlement_period","default_core_time_start","default_core_time_end","sort_order","is_active","description"];var DELETE_GUIDANCE=`\u4ECA\u5F8C\u4F7F\u308F\u306A\u3044${LABEL}\
|
|
12
|
+
\u306F\u3001\u524A\u9664\u305B\u305A\u306B\u7121\u52B9\u5316\u3057\u3066\u304F\u3060\u3055\u3044: twp ${NAME} update <${LABEL}> --active false
|
|
13
|
+
\uFF08\u65E2\u5B58\u306E\u5951\u7D04\u306F\u305D\u306E\u307E\u307E\u6B8B\u308A\u307E\u3059\uFF09`;var REF_HELP=`<${LABEL}> \u306F\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u30FBID \u306E\u3069\u308C\u3067\u3082\u6307\u5B9A\u3067\u304D\u307E\u3059\uFF08\u540D\u524D\u304C\u8907\u6570\u306B\u4E00\u81F4\u3059\u308C\u3070\u5019\u88DC\u3092\u51FA\u3057\u3066\u6B62\u307E\u308A\u307E\u3059\uFF09\u3002
|
|
14
|
+
ID \u4EE5\u5916\u306F${LABEL}\u4E00\u89A7\uFF08\u65E2\u5B9A10\u5206\u30AD\u30E3\u30C3\u30B7\u30E5\u30FB--refresh \u3067\u53D6\u308A\u76F4\u3057\uFF09\u3068\u7167\u5408\u3057\u307E\u3059\u3002`;var REF_FLAG={name:`--${NAME}`,summary:`\u5BFE\u8C61\u306E${LABEL}\uFF08\u4F4D\u7F6E\u5F15\u6570\u306E\u4EE3\u308F\u308A\u306B\u4F7F\u3048\u308B\uFF09`,takesValue:true,placeholder:`<${LABEL}>`};var FORBIDDEN=`\u7BA1\u7406\u8005\u306E\u6A29\u9650\u304C\u5FC5\u8981\u3067\u3059\u3002${LABEL}\u306E\u4F5C\u6210\u30FB\u66F4\u65B0\u30FB\u524A\u9664\u306F\u7BA1\u7406\u8005\u3060\u3051\u304C\u884C\u3048\
|
|
15
|
+
\u307E\u3059`;async function prepareTarget(input,ctx,usage){return withResolved(input,{id:await targetId(input,{flag:REF_FLAG.name,label:LABEL,usage,resolve:ref=>ctx.resolver.userContractType(ref,`<${LABEL}>`)})})}var itemPath=input=>`${USER_CONTRACT_TYPES_PATH}/${idSegment(input,LABEL)}`;var item=body=>masterItem(body,ITEM_KEY,LABEL);var userContractTypeDomain={name:NAME,summary:`${LABEL}\u30DE\u30B9\u30BF\uFF08\u4E00\u89A7\u30FB\u53D6\u5F97\u30FB\u4F5C\u6210\u30FB\u66F4\u65B0\u30FB\u524A\u9664\uFF09`,
|
|
16
|
+
operations:[{name:"list",summary:`${LABEL}\u3092\u4E00\u89A7\u3059\u308B`,usage:`twp ${NAME} list [--active true|false]`,description:`\u3053\u306E API \u306F\u5168\u4EF6\u3092\u8FD4\u3057\u307E\u3059\uFF08\u30DA\u30FC\u30B8\u30F3\u30B0\u3082\u6253\u3061\u5207\u308A\u3082\u3042\u308A\u307E\u305B\u3093\uFF09\u3002
|
|
17
|
+
|
|
18
|
+
--output json \u306F API \u304C\u8FD4\u3059\u5168\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u51FA\u3057\u307E\u3059\u3002
|
|
19
|
+
--output table / text / tsv \u306F\u8981\u7D04\u5217\uFF08${LIST_COLUMNS.join(" / ")}\uFF09\u3067\u3059\u3002`,flags:[{name:"--active",summary:"\u6709\u52B9\u304B\u3069\u3046\u304B\u3067\u7D5E\u308A\u8FBC\u3080\uFF08true / false\uFF09",takesValue:true,placeholder:"<true|false>"}],plan(input){if(input.args.length>0){throw new UsageError(`list \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,`twp ${NAME} list help`)}const active=input.flags.get("--active");
|
|
20
|
+
return{method:"GET",path:USER_CONTRACT_TYPES_PATH,query:{is_active:active!==void 0?booleanQuery("--active",active):void 0}}},summarize:body=>masterRows(body,LABEL).map(row=>pick(row,LIST_COLUMNS)),raw:body=>masterRows(body,LABEL)},{name:"get",summary:`${LABEL}1\u4EF6\u306E\u8A73\u7D30\u3092\u8868\u793A\u3059\u308B`,usage:`twp ${NAME} get <${LABEL}>`,description:`${REF_HELP}
|
|
21
|
+
|
|
22
|
+
--output json \u306F API \u304C\u8FD4\u3059\u5168\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u51FA\u3057\u307E\u3059\u3002`,flags:[REF_FLAG],prepare:(input,ctx)=>prepareTarget(input,ctx,`twp ${NAME} get help`),plan:input=>({method:"GET",path:itemPath(input)}),summarize:body=>pick(item(body),GET_COLUMNS),raw:body=>item(body)},{name:"create",summary:`${LABEL}\u3092\u4F5C\u6210\u3059\u308B\uFF08\u7BA1\u7406\u8005\u306E\u307F\uFF09`,usage:`twp ${NAME} create --name <\u540D\u524D> --calculation-type <\u8A08\u7B97\u533A\u5206> [\u9805\u76EE\u2026]`,
|
|
23
|
+
description:`--name \u3068 --calculation-type \u304C\u5FC5\u9808\u3067\u3059\uFF08--code \u306F\u4EFB\u610F\uFF09\u3002\u305D\u306E\u307B\u304B\u306E\u9805\u76EE\u306F\u7701\u304F\u3068\u30B5\u30FC\u30D0\u306E\u65E2\u5B9A\u3067\u4F5C\u6210\u3057\u307E\u3059\u3002
|
|
24
|
+
|
|
25
|
+
\u4F5C\u6210\u3057\u305F${LABEL}\u306E ID \u304C\u8FD4\u308A\u307E\u3059\u3002`,forbidden:FORBIDDEN,flags:createFlags(FIELDS),prepare(input){if(input.args.length>0){throw new UsageError(`create \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,`twp ${NAME} create help`)}const body=fieldBody(input,FIELDS);for(const[flag,key]of[["--name","name"],["--calculation-type","calculation_type"]]){if(body[key]===void 0)throw new UsageError(`${flag} \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044`,
|
|
26
|
+
`twp ${NAME} create help`)}return Promise.resolve(input)},plan:input=>({method:"POST",path:USER_CONTRACT_TYPES_PATH,body:fieldBody(input,FIELDS)}),summarize:body=>pick(item(body),GET_COLUMNS),raw:body=>item(body),notes:()=>[cacheNote(LABEL)]},{name:"update",summary:`${LABEL}\u3092\u66F4\u65B0\u3059\u308B\uFF08\u7BA1\u7406\u8005\u306E\u307F\uFF09`,usage:`twp ${NAME} update <${LABEL}> [\u9805\u76EE\u2026]`,description:`\u6307\u5B9A\u3057\u305F\u9805\u76EE\u3060\u3051\u3092\u5909\u66F4\u3057\u307E\u3059\uFF08\u6307\u5B9A\u3057\u306A\u304B\u3063\u305F\u9805\u76EE\u306F\u5909\u308F\u308A\u307E\u305B\u3093\uFF09\u3002\u5909\u66F4\u3059\u308B\u9805\u76EE\u30921\u3064\u3082\u6307\u5B9A\u3057\u306A\u3044\u3068\u30A8\u30E9\u30FC\u306B\u306A\u308A\u307E\u3059\u3002
|
|
27
|
+
|
|
28
|
+
${REF_HELP}`,forbidden:FORBIDDEN,flags:[...updateFlags(FIELDS),REF_FLAG],async prepare(input,ctx){if(!hasAnyField(input,FIELDS)){throw new UsageError("\u5909\u66F4\u3059\u308B\u9805\u76EE\u30921\u3064\u4EE5\u4E0A\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",`twp ${NAME} update help`)}fieldBody(input,FIELDS);return prepareTarget(input,ctx,`twp ${NAME} update help`)},plan:input=>({method:"PUT",path:itemPath(input),body:fieldBody(input,FIELDS)}),summarize:body=>pick(item(body),GET_COLUMNS),raw:body=>item(
|
|
29
|
+
body),notes:()=>[cacheNote(LABEL)]},{name:"delete",summary:`${LABEL}\u3092\u524A\u9664\u3059\u308B\uFF08\u7BA1\u7406\u8005\u306E\u307F\u30FB--yes \u304C\u8981\u308B\uFF09`,usage:`twp ${NAME} delete <${LABEL}> --yes`,description:`\u5951\u7D04\uFF08\u7D42\u4E86\u6E08\u307F\u306E\u5C65\u6B74\u3092\u542B\u3080\uFF09\u304B\u3089\u53C2\u7167\u3055\u308C\u3066\u3044\u308B${LABEL}\u306F\u3001\u30B5\u30FC\u30D0\u304C\u524A\u9664\u3092\u65AD\u308A\u307E\u3059\u3002
|
|
30
|
+
${DELETE_GUIDANCE}
|
|
31
|
+
|
|
32
|
+
${REF_HELP}`,destructive:true,forbidden:FORBIDDEN,rejected:referencedDeleteGuidance(DELETE_GUIDANCE),flags:[REF_FLAG],prepare:(input,ctx)=>prepareTarget(input,ctx,`twp ${NAME} delete help`),plan:input=>({method:"DELETE",path:itemPath(input)}),summarize:body=>acknowledgement(body,`${LABEL}\u524A\u9664`),raw:body=>acknowledgement(body,`${LABEL}\u524A\u9664`),notes:()=>[cacheNote(LABEL)]}]};export{userContractTypeDomain};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
|
+
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
+
import{SCHEDULE_HELP,parseSchedule,readRunStatus,workerAgentDomain}from"./chunk-HBEOI456.js";import"./chunk-WVCEKC7V.js";import"./chunk-MI6HVYR2.js";import"./chunk-RX5HWI4L.js";import"./chunk-6LSQCOCJ.js";import"./chunk-HNG6MF26.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import"./chunk-PS5QFKHB.js";import"./chunk-II5RVJQN.js";import"./chunk-3ZRMMBP5.js";import"./chunk-VFPY2A23.js";
|
|
4
|
+
import"./chunk-XNLIEUAW.js";import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.js";import"./chunk-RZVI6PMW.js";import"./chunk-QQRJLH6B.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";export{SCHEDULE_HELP,parseSchedule,readRunStatus,workerAgentDomain};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{applyInstancePlan,createInstancePlan,formColumns,parseInstanceContent,workflowDomain,writtenInstance}from"./chunk-
|
|
3
|
+
import{applyInstancePlan,createInstancePlan,formColumns,parseInstanceContent,workflowDomain,writtenInstance}from"./chunk-WBUYPDJH.js";import"./chunk-GLKZ4ZZY.js";import"./chunk-DAOC7VRM.js";import"./chunk-WMEGP2BT.js";import"./chunk-JJSBBWJ5.js";import"./chunk-MI6HVYR2.js";import"./chunk-RX5HWI4L.js";import"./chunk-6LSQCOCJ.js";import"./chunk-HNG6MF26.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";
|
|
4
4
|
import"./chunk-PS5QFKHB.js";import"./chunk-II5RVJQN.js";import"./chunk-3ZRMMBP5.js";import"./chunk-VFPY2A23.js";import"./chunk-XNLIEUAW.js";import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.js";import"./chunk-RZVI6PMW.js";import"./chunk-QQRJLH6B.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";export{applyInstancePlan,createInstancePlan,formColumns,parseInstanceContent,workflowDomain,writtenInstance};
|
package/package.json
CHANGED
package/dist/agent-UAOZYMQM.js
DELETED
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
|
-
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-MI6HVYR2.js";import{readBody}from"./chunk-6LSQCOCJ.js";import{AGENT_REPOSITORIES_PATH,AGENT_SESSIONS_PATH}from"./chunk-ITRTFBV3.js";import{isSafePathSegment}from"./chunk-HVZUXLQ4.js";import{ApiError}from"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import{requireResolved,withResolved}from"./chunk-PS5QFKHB.js";import"./chunk-II5RVJQN.js";import{isRecord,pick}from"./chunk-3ZRMMBP5.js";
|
|
4
|
-
import{ApiRejectedError,ApiResponseError,NetworkError,UsageError,WaitTimeoutError}from"./chunk-VFPY2A23.js";import{NotLoggedInError,SessionExpiredError}from"./chunk-XNLIEUAW.js";import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var SESSION_COLUMNS=["sessionId","status","repositoryFullName","baseBranch","workBranch","prUrl","aiModel","myRole","createdAt"];var SESSION_GET_COLUMNS=["sessionId","status","repositoryFullName","repositoryId","baseBranch","workBranch","branchName","prUrl","errorMessage","aiProvider","aiModel","sessionMode","executionMode","masterUserName","myRole","createdAt","updatedAt","completedAt","instructions"];var CHAT_COLUMNS=["timestamp","role","user_name","content"];var REPOSITORY_COLUMNS=["id","full\
|
|
5
|
-
_name","default_branch","private"];var BRANCH_COLUMNS=["name","protected"];var DIFF_COLUMNS=["path","status","additions","deletions"];var INSTRUCTION_MAX_CHARS=1e4;var ACTIVE=new Set(["created","pending","provisioning","running"]);var FAILED=new Set(["failed","cancelled","expired"]);var WAIT_POLL_INTERVAL_MS=5e3;var WAIT_DEFAULT_SECONDS=300;var WAIT_MAX_SECONDS=540;var WAIT_CHAT_SCAN_LIMIT=2e3;var sleep=ms=>new Promise(resolve=>setTimeout(resolve,ms));var SESSION_REF_HELP="<\u30BB\u30C3\u30B7\u30E7\u30F3> \u306F\u30BB\u30C3\u30B7\u30E7\u30F3 ID\uFF08twp \
|
|
6
|
-
agent session list \u306E sessionId \u5217\uFF09\u3067\u3059\u3002";var CREDIT_CONFIRMATION="AI \u30AF\u30EC\u30B8\u30C3\u30C8\u3092\u6D88\u8CBB\u3059\u308B\u64CD\u4F5C";function usageOf(op){return`twp agent ${op} help`}function noArgs(input,op){if(input.args.length>0)throw new UsageError(`${op} \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,usageOf(op))}function single(input,op,label,hint){const values=input.args.map(arg=>arg.trim());if(values.length>
|
|
7
|
-
1)throw new UsageError(`${op} \u304C\u53D7\u3051\u53D6\u308C\u308B\u5F15\u6570\u306F ${label} \u3060\u3051\u3067\u3059: ${values.slice(1).join(" ")}`,usageOf(op));const value=values[0]??"";if(value==="")throw new UsageError(`${label}\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044`,usageOf(op));if(!isSafePathSegment(value))throw new UsageError(`${label}\u3068\u3057\u3066\u4F7F\u3048\u306A\u3044\u5024\u3067\u3059: ${value}`,hint);return value}function sessionId(input,op){return single(input,
|
|
8
|
-
`session ${op}`,"<\u30BB\u30C3\u30B7\u30E7\u30F3>","\u30BB\u30C3\u30B7\u30E7\u30F3 ID \u306F twp agent session list \u306E sessionId \u5217\u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002")}function sessionPath(id,suffix=""){return`${AGENT_SESSIONS_PATH}/${encodeURIComponent(id)}${suffix}`}function envelope(body,what){if(!isRecord(body)||body["result"]!==true)throw new ApiResponseError(`${what}\u306E\u5FDC\u7B54\u306E\u5F62\u304C\u60F3\u5B9A\u3068\u9055\u3044\u307E\u3059\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`);
|
|
9
|
-
return body}function sessionOf(body,what){const session=envelope(body,what)["session"];if(!isRecord(session)||typeof session["sessionId"]!=="string"){throw new ApiResponseError(`${what}\u306E\u5FDC\u7B54\u306B session.sessionId \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return session}function listOf(body,key,what){const value=envelope(body,what)[key];if(!Array.isArray(value))throw new ApiResponseError(`${what}\u306E\u5FDC\u7B54\u306B ${key}\
|
|
10
|
-
\u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`);return value}function limitIn(input,max){const limit=positiveInteger(input.flags,"--limit");if(limit!==void 0&&limit>max)throw new UsageError(`--limit \u306F 1\u301C${max} \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${limit}`);return limit}function refusedBeforeSending(err){return err instanceof ApiError&&err.status>=400&&err.status<500||err instanceof
|
|
11
|
-
NotLoggedInError||err instanceof SessionExpiredError}var WAIT_FLAG={name:"--wait",summary:"runner \u306E\u4F5C\u696D\u304C\u6B62\u307E\u308B\uFF08\u5B8C\u4E86\u30FB\u5931\u6557\u30FB\u5165\u529B\u5F85\u3061\uFF09\u307E\u3067\u5F85\u3061\u3001\u6700\u5F8C\u306E\u30A2\u30B7\u30B9\u30BF\u30F3\u30C8\u767A\u8A00\u30FB\u4F5C\u696D\u30D6\u30E9\u30F3\u30C1\u30FBPR URL \u3092\u51FA\u3059",takesValue:false};var TIMEOUT_FLAG={name:"--timeout",summary:`--wait \u3067\u5F85\u3064\u4E0A\u9650\u306E\u79D2\u6570\uFF08\u65E2\u5B9A ${WAIT_DEFAULT_SECONDS}\
|
|
12
|
-
\u30FB\u6700\u5927 ${WAIT_MAX_SECONDS}\uFF09`,takesValue:true,placeholder:"<\u79D2>"};function waitSeconds(input,op){const timeout=positiveInteger(input.flags,TIMEOUT_FLAG.name);if(!input.flags.has(WAIT_FLAG.name)){if(timeout!==void 0)throw new UsageError("--timeout \u306F --wait \u3068\u4E00\u7DD2\u306B\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",usageOf(op));return void 0}if(timeout!==void 0&&timeout>WAIT_MAX_SECONDS){throw new UsageError(`--timeout \u306F ${WAIT_MAX_SECONDS} \u79D2\u4EE5\u4E0B\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\
|
|
13
|
-
\uFF08\u305D\u308C\u3088\u308A\u9577\u304F\u5F85\u3064\u306A\u3089 --wait \u3092\u5916\u3057\u3001\u3042\u3068\u3067 twp agent session get \u3067\u78BA\u304B\u3081\u3066\u304F\u3060\u3055\u3044\uFF09`,usageOf(op))}return timeout??WAIT_DEFAULT_SECONDS}function chatRows(body){return listOf(body,"messages","\u30C1\u30E3\u30C3\u30C8")}function lastAssistant(rows){for(let i=rows.length-1;i>=0;i--){const row=rows[i];if(isRecord(row)&&row["role"]==="assistant"&&typeof row["content"]==="string"){return{
|
|
14
|
-
role:"assistant",content:row["content"],timestamp:typeof row["timestamp"]==="string"?row["timestamp"]:""}}}return null}function isAfter(timestamp,since){if(since===null)return true;const a=Date.parse(timestamp);const b=Date.parse(since);return!Number.isNaN(a)&&!Number.isNaN(b)&&a>b}async function waitForSession(ctx,id,seconds,since){const deadline=Date.now()+seconds*1e3;const hint=`twp agent session get ${id}`;ctx.warn(`runner \u306E\u4F5C\u696D\u304C\u6B62\u307E\u308B\u306E\u3092\u5F85\u3061\u307E\u3059\uFF08${WAIT_POLL_INTERVAL_MS/
|
|
15
|
-
1e3} \u79D2\u304A\u304D\u30FB\u6700\u5927 ${seconds} \u79D2\uFF09\u3002`);for(;;){await sleep(WAIT_POLL_INTERVAL_MS);let session;try{session=sessionOf(await ctx.send({method:"GET",path:sessionPath(id)}),"\u30BB\u30C3\u30B7\u30E7\u30F3");const status=String(session["status"]);if(FAILED.has(status)){const reason=typeof session["errorMessage"]==="string"&&session["errorMessage"]!==""?`: ${session["errorMessage"]}`:"";throw new ApiRejectedError(`\u30BB\u30C3\u30B7\u30E7\u30F3\u304C ${status} \u3067\u7D42\u308F\u308A\u307E\u3057\u305F${reason}\
|
|
16
|
-
\u3002\u4F1A\u8A71\u306F twp agent session chat ${id} \u3067\u8AAD\u3081\u307E\u3059`)}if(!ACTIVE.has(status)){const last=lastAssistant(chatRows(await ctx.send({method:"GET",path:sessionPath(id,"/chat-messages"),query:{limit:WAIT_CHAT_SCAN_LIMIT}})));if(last!==null&&isAfter(last.timestamp,since))return{session,last};if(since===null)return{session,last}}}catch(err){if(err instanceof ApiRejectedError)throw err;ctx.warn(`\u6307\u793A\u306F\u53D7\u3051\u4ED8\u3051\u6E08\u307F\u3067\u3059\u304C\u3001\u5F85\u3064\u9014\u4E2D\u3067\u30BB\u30C3\u30B7\u30E7\u30F3\u3092\u8AAD\u3081\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u6253\u3061\u76F4\u3059\u524D\u306B ${hint}\
|
|
17
|
-
\u3067\u78BA\u304B\u3081\u3066\u304F\u3060\u3055\u3044\u3002`);if(err instanceof NetworkError||err instanceof ApiResponseError||err instanceof ApiError&&(err.status>=500||err.status===429)){throw new WaitTimeoutError(`\u5F85\u3064\u9014\u4E2D\u3067\u30BB\u30C3\u30B7\u30E7\u30F3\u3092\u8AAD\u3081\u307E\u305B\u3093\u3067\u3057\u305F\uFF08${err.message}\uFF09\u3002\u4F5C\u696D\u306F\u53D7\u3051\u4ED8\u3051\u6E08\u307F\u3067\u3059\u3002\u6253\u3061\u76F4\u3055\u305A ${hint} \u3067\u78BA\u304B\u3081\u3066\u304F\u3060\u3055\u3044`)}
|
|
18
|
-
throw err}if(Date.now()>=deadline){const status=String(session["status"]);throw new WaitTimeoutError(ACTIVE.has(status)?`${seconds} \u79D2\u5F85\u3061\u307E\u3057\u305F\u304C\u4F5C\u696D\u304C\u6B62\u307E\u308A\u307E\u305B\u3093\u3067\u3057\u305F\uFF08status=${status}\uFF09\u3002\u3042\u3068\u3067 ${hint} \u3068 twp agent session chat ${id} \u3067\u78BA\u304B\u3081\u3066\u304F\u3060\u3055\u3044\uFF08\u4F5C\u696D\u306F runner \u4E0A\u3067\u7D9A\u3044\u3066\u3044\u307E\u3059\uFF09`:`${seconds} \u79D2\u5F85\u3061\
|
|
19
|
-
\u307E\u3057\u305F\u304C\u3001\u9001\u3063\u305F\u6307\u793A\u3088\u308A\u5F8C\u306E\u30A2\u30B7\u30B9\u30BF\u30F3\u30C8\u767A\u8A00\u3092\u78BA\u8A8D\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08status=${status}\uFF09\u3002twp agent session chat ${id} \u3067\u78BA\u304B\u3081\u3066\u304F\u3060\u3055\u3044\uFF08\u6B62\u307E\u3063\u305F\u307E\u307E\u306A\u3089 twp agent session resume \u3067\u518D\u958B\u3067\u304D\u307E\u3059\uFF09`)}}}function startedOf(body,what){const data=envelope(body,
|
|
20
|
-
what);const session=data["session"];if(session!==void 0&&session!==null&&!isRecord(session))throw new ApiResponseError(`${what}\u306E\u5FDC\u7B54\u306E session \u304C\u60F3\u5B9A\u3068\u9055\u3044\u307E\u3059\u3002`);const ts=data["timestamp"];return{session:isRecord(session)?session:null,timestamp:typeof ts==="string"?ts:null,last_assistant_message:typeof data["last_assistant_message"]==="string"?data["last_assistant_message"]:null,last_assistant_at:typeof data["last_assistant_at"]==="string"?data["\
|
|
21
|
-
last_assistant_at"]:null}}function startedRaw(what){return body=>startedOf(body,what)}function startedSummary(what){return body=>{const started=startedOf(body,what);const session=started.session??{};return{sessionId:session["sessionId"]??null,status:session["status"]??null,workBranch:session["workBranch"]??session["branchName"]??null,prUrl:session["prUrl"]??null,last_assistant_message:started.last_assistant_message}}}function startedDocument(what){return body=>{const started=startedOf(body,what);
|
|
22
|
-
const session=started.session??{};const lines=[started.last_assistant_message??"\uFF08\u30A2\u30B7\u30B9\u30BF\u30F3\u30C8\u306E\u767A\u8A00\u306F\u307E\u3060\u3042\u308A\u307E\u305B\u3093\uFF09",""];for(const key of["sessionId","status","workBranch","branchName","prUrl","errorMessage"]){const value=session[key];if(value!==null&&value!==void 0&&value!=="")lines.push(`${key}: ${String(value)}`)}return`${lines.join("\n")}
|
|
23
|
-
`}}function startedNotes(op){return(body,input)=>{const started=startedOf(body,op);const id=started.session?.["sessionId"]??input.args[0]??"<\u30BB\u30C3\u30B7\u30E7\u30F3>";if(input.flags.has(WAIT_FLAG.name))return[];return[`runner \u306F\u975E\u540C\u671F\u3067\u52D5\u304D\u307E\u3059\u3002\u9032\u307F\u5177\u5408\u306F twp agent session get ${String(id)}\u3001\u4F1A\u8A71\u306F twp agent session chat ${String(id)} \u3067\u8AAD\u3081\u307E\u3059\uFF08--wait \u3092\u4ED8\u3051\u308B\u3068\u6B62\u307E\u308B\u307E\u3067\u5F85\u3061\u307E\u3059\uFF09\u3002`]}}
|
|
24
|
-
function waitPlannedNotes(input,idHint){return["\u9001\u308B\u3068\u30C6\u30CA\u30F3\u30C8\u306E AI \u30AF\u30EC\u30B8\u30C3\u30C8\u3092\u6D88\u8CBB\u3057\u307E\u3059\uFF08runner \u304C AI \u3092\u547C\u3076\u305F\u3081\uFF09",...input.flags.has(WAIT_FLAG.name)?[`\u7D9A\u3051\u3066 GET ${AGENT_SESSIONS_PATH}/${idHint} \u3092 ${WAIT_POLL_INTERVAL_MS/1e3} \u79D2\u304A\u304D\u306B\u9001\u308A\u3001\u6B62\u307E\u3063\u305F\u3089\u30C1\u30E3\u30C3\u30C8\u30921\u56DE\u8AAD\u307F\u307E\u3059`]:[]]}async function sendAndMaybeWait(input,ctx,plan,op,idFrom){
|
|
25
|
-
const seconds=waitSeconds(input,op);let sent;try{sent=await ctx.send(plan)}catch(err){if(op==="session instruct"&&err instanceof ApiError&&err.status===400&&String(err.body?.error_description??"").includes("\u53D7\u3051\u4ED8\u3051\u3089\u308C\u308B\u72B6\u614B\u3067\u306F\u3042\u308A\u307E\u305B\u3093")){ctx.warn("\u7D42\u308F\u3063\u305F\u30BB\u30C3\u30B7\u30E7\u30F3\u306B\u306F\u6307\u793A\u3092\u9001\u308C\u307E\u305B\u3093\u3002twp agent session resume <\u30BB\u30C3\u30B7\u30E7\u30F3> --body-file <\u30D1\u30B9> --yes \u3067\u518D\u958B\u306E\u6307\u793A\u3068\u3057\u3066\u9001\u308C\u307E\u3059\u3002")}
|
|
26
|
-
if(!refusedBeforeSending(err)){ctx.warn("\u9001\u4FE1\u306E\u7D50\u679C\u3092\u53D7\u3051\u53D6\u308C\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u30B5\u30FC\u30D0\u3067\u53D7\u3051\u4ED8\u3051\u6E08\u307F\u306E\u3053\u3068\u304C\u3042\u308A\u307E\u3059\uFF08\u6253\u3061\u76F4\u3059\u3068\u4E8C\u91CD\u306B\u30AF\u30EC\u30B8\u30C3\u30C8\u3092\u6D88\u8CBB\u3057\u3046\u308B\uFF09\u3002twp agent session list \u3067\u78BA\u304B\u3081\u3066\u304F\u3060\u3055\u3044\u3002")}throw err}const data=envelope(sent,
|
|
27
|
-
op);if(isRecord(data["session"])&&FAILED.has(String(data["session"]["status"]))){const failed=data["session"];const reason=typeof failed["errorMessage"]==="string"&&failed["errorMessage"]!==""?`: ${failed["errorMessage"]}`:"";throw new ApiRejectedError(`\u30BB\u30C3\u30B7\u30E7\u30F3\u306F ${String(failed["status"])} \u3067\u3059${reason}\uFF08session=${String(failed["sessionId"])}\uFF09`)}const base={result:true,session:isRecord(data["session"])?data["session"]:null,timestamp:typeof data["times\
|
|
28
|
-
tamp"]==="string"?data["timestamp"]:null,last_assistant_message:null,last_assistant_at:null};if(seconds===void 0)return base;const id=idFrom(data);const since=op==="session create"?null:base["timestamp"]??new Date().toISOString();const{session,last}=await waitForSession(ctx,id,seconds,since);return{...base,session,last_assistant_message:last?.content??null,last_assistant_at:last?.timestamp??null}}var sessionPaging=envelopePaging({label:"\u30BB\u30C3\u30B7\u30E7\u30F3\u4E00\u89A7"});function sessionRows(body){
|
|
29
|
-
envelope(body,"\u30BB\u30C3\u30B7\u30E7\u30F3\u4E00\u89A7");return sessionPaging.items(body)}var REPOSITORY_FLAG={name:"--repository",summary:"\u30EA\u30DD\u30B8\u30C8\u30EA\uFF08owner/repo\u30FB\u540D\u524D\u30FBID\u3002twp agent repository list \u3067\u78BA\u8A8D\u3067\u304D\u308B\uFF09",takesValue:true,placeholder:"<owner/repo>"};async function resolveRepository(input,ctx,ref,flag){const repo=await ctx.resolver.agentRepository(ref,flag);if(!isSafePathSegment(repo.id))throw new UsageError(`\u30EA\u30DD\u30B8\
|
|
30
|
-
\u30C8\u30EA ID \u3068\u3057\u3066\u4F7F\u3048\u306A\u3044\u5024\u3067\u3059: ${repo.id}`);return withResolved(input,{repositoryId:repo.id})}var sessionListOperation={name:"list",summary:"\u30B3\u30F3\u30C6\u30CA\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u306E\u30BB\u30C3\u30B7\u30E7\u30F3\u3092\u4E00\u89A7\u3059\u308B\uFF08\u81EA\u5206\u304C\u30DE\u30B9\u30BF\u30FC\u304B\u30E1\u30F3\u30D0\u30FC\u306E\u3082\u306E\u30FB\u65B0\u3057\u3044\u9806\uFF09",usage:"twp agent session list [--status <\u72B6\u614B>] [--rep\
|
|
31
|
-
ository <owner/repo>] [--all] [--limit <\u4EF6\u6570>] [--cursor <\u30AB\u30FC\u30BD\u30EB>]",description:`\u81EA\u5206\u304C\u30DE\u30B9\u30BF\u30FC\uFF08\u8D77\u52D5\u3057\u305F\u4EBA\uFF09\u304B\u30E1\u30F3\u30D0\u30FC\u3068\u3057\u3066\u53C2\u52A0\u3057\u3066\u3044\u308B\u30BB\u30C3\u30B7\u30E7\u30F3\u3060\u3051\u304C\u51FA\u307E\u3059\u3002
|
|
32
|
-
--status \u306F pending / provisioning / running / completed / failed / cancelled \u7B49\u306E\u72B6\u614B\u3067\u7D5E\u308A\u307E\u3059\u3002
|
|
33
|
-
|
|
34
|
-
--output json \u306F API \u304C\u8FD4\u3059\u5168\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u51FA\u3057\u307E\u3059\uFF08\u6307\u793A\u6587\u30FB\u30B7\u30B9\u30C6\u30E0\u30D7\u30ED\u30F3\u30D7\u30C8\u30FB\u6DFB\u4ED8\u306E\u4E00\u89A7\u3092\u542B\u3080\uFF09\u3002
|
|
35
|
-
--output table / text / tsv \u306F\u8981\u7D04\u5217\uFF08${SESSION_COLUMNS.join(" / ")}\uFF09\u3067\u3059\u3002
|
|
36
|
-
|
|
37
|
-
`+LIST_PAGING_HELP,flags:[...LIST_FLAGS,{name:"--status",summary:"\u72B6\u614B\u3067\u7D5E\u308A\u8FBC\u3080",takesValue:true,placeholder:"<\u72B6\u614B>"},REPOSITORY_FLAG],paging:sessionPaging,async prepare(input,ctx){noArgs(input,"session list");limitIn(input,100);const repo=nonEmpty(input.flags,REPOSITORY_FLAG.name);return repo===void 0?input:resolveRepository(input,ctx,repo,REPOSITORY_FLAG.name)},plan:input=>({method:"GET",path:AGENT_SESSIONS_PATH,query:{status:nonEmpty(input.flags,"--status"),
|
|
38
|
-
repositoryId:input.resolved?.["repositoryId"],limit:limitIn(input,100),cursor:nonEmpty(input.flags,"--cursor")}}),summarize:body=>sessionRows(body).map(row=>pick(row,SESSION_COLUMNS)),raw:sessionRows,notes:body=>sessionRows(body).length===0?["\u6761\u4EF6\u306B\u4E00\u81F4\u3059\u308B\u30BB\u30C3\u30B7\u30E7\u30F3\u306F\u3042\u308A\u307E\u305B\u3093\u3002"]:[]};var sessionGetOperation={name:"get",summary:"\u30BB\u30C3\u30B7\u30E7\u30F31\u4EF6\u306E\u72B6\u614B\u30FB\u4F5C\u696D\u30D6\u30E9\u30F3\u30C1\u30FBPR \u3092\u8868\u793A\u3059\u308B",
|
|
39
|
-
usage:"twp agent session get <\u30BB\u30C3\u30B7\u30E7\u30F3>",description:`${SESSION_REF_HELP}
|
|
40
|
-
\u53C2\u52A0\u3057\u3066\u3044\u306A\u3044\u30BB\u30C3\u30B7\u30E7\u30F3\u306F\u300C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u300D\u306B\u306A\u308A\u307E\u3059\u3002
|
|
41
|
-
|
|
42
|
-
--output json \u306F API \u304C\u8FD4\u3059\u5168\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u51FA\u3057\u307E\u3059\u3002`,flags:[],plan:input=>({method:"GET",path:sessionPath(sessionId(input,"get"))}),summarize:body=>pick(sessionOf(body,"\u30BB\u30C3\u30B7\u30E7\u30F3"),SESSION_GET_COLUMNS),raw:body=>sessionOf(body,"\u30BB\u30C3\u30B7\u30E7\u30F3")};var INSTRUCTIONS_SPEC={flag:"--instructions",fileFlag:"--instructions-file",label:"\u521D\u671F\u6307\u793A",maxChars:INSTRUCTION_MAX_CHARS,usage:"twp ag\
|
|
43
|
-
ent session create --repository <owner/repo> --instructions-file <\u30D1\u30B9> --yes"};var BODY_SPEC={flag:"--body",fileFlag:"--body-file",label:"\u6307\u793A",maxChars:INSTRUCTION_MAX_CHARS,usage:"twp agent session instruct <\u30BB\u30C3\u30B7\u30E7\u30F3> --body-file <\u30D1\u30B9> --yes"};var sessionCreateOperation={name:"create",summary:"\u30EA\u30DD\u30B8\u30C8\u30EA\u3067\u4F5C\u696D\u3059\u308B\u30BB\u30C3\u30B7\u30E7\u30F3\u3092\u8D77\u52D5\u3059\u308B\uFF08AI \u30AF\u30EC\u30B8\u30C3\u30C8\u3092\u6D88\u8CBB\u30FB--yes \u304C\u8981\u308B\u30FB--wait \u3067\u6B62\u307E\u308B\u307E\u3067\u5F85\u3064\uFF09",
|
|
44
|
-
usage:"twp agent session create --repository <owner/repo> (--instructions-file <\u30D1\u30B9> | --instructions <\u6587>) [--base <\u30D6\u30E9\u30F3\u30C1>] [--model <\u30E2\u30C7\u30EB>] [--wait [--timeout <\u79D2>]] --yes",description:`\u753B\u9762\u306E\u300C\u65B0\u3057\u3044\u30BB\u30C3\u30B7\u30E7\u30F3\u300D\u3068\u540C\u3058 POST /api/v2/agent/sessions \u3092\u9001\u308A\u307E\u3059\u3002runner \u304C\u8D77\u52D5\u3057\u3066\u30EA\u30DD\u30B8\u30C8\u30EA\u3092\u53D6\u5F97\u3057\u3001
|
|
45
|
-
\u4F5C\u696D\u30D6\u30E9\u30F3\u30C1\uFF08agent/task-<\u30BB\u30C3\u30B7\u30E7\u30F3ID>\uFF09\u3067\u6307\u793A\u3069\u304A\u308A\u306B\u4F5C\u696D\u3057\u307E\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u306E AI \u30AF\u30EC\u30B8\u30C3\u30C8\u3092\u6D88\u8CBB\u3057\u307E\u3059\u3002
|
|
46
|
-
--repository \u306F twp agent repository list \u306E full_name\uFF08owner/repo\uFF09\u304B id \u3067\u3059\u3002
|
|
47
|
-
--base \u3092\u7701\u304F\u3068\u3001\u30B5\u30FC\u30D0\u304C\u30EA\u30DD\u30B8\u30C8\u30EA\u306E\u65E2\u5B9A\u306E\u30D6\u30E9\u30F3\u30C1\u3092\u4F7F\u3044\u307E\u3059\u3002--model \u3092\u7701\u304F\u3068\u30B5\u30FC\u30D0\u306E\u65E2\u5B9A\u306E\u30E2\u30C7\u30EB\u3067\u3059\u3002
|
|
48
|
-
--wait \u3092\u4ED8\u3051\u308B\u3068 5 \u79D2\u304A\u304D\u306B\u72B6\u614B\u3092\u5F15\u304D\u3001\u4F5C\u696D\u304C\u6B62\u307E\u3063\u305F\u3089\u6700\u5F8C\u306E\u30A2\u30B7\u30B9\u30BF\u30F3\u30C8\u767A\u8A00\u30FB\u4F5C\u696D\u30D6\u30E9\u30F3\u30C1\u30FBPR URL \u3092\u51FA\u3057\u307E\u3059
|
|
49
|
-
\uFF08failed / cancelled / expired \u306A\u3089\u7D42\u4E86\u30B3\u30FC\u30C9 3\u3001--timeout \u79D2\u3067\u6B62\u307E\u3089\u306A\u3051\u308C\u3070\u7D42\u4E86\u30B3\u30FC\u30C9 6\uFF1D\u672A\u5B8C\u4E86\u30FB\u6253\u3061\u76F4\u3055\u306A\u3044\u3002\u65E2\u5B9A ${WAIT_DEFAULT_SECONDS} \u79D2\u30FB\u6700\u5927 ${WAIT_MAX_SECONDS} \u79D2\uFF09\u3002
|
|
50
|
-
\u6307\u793A\u6587\u306F\u6539\u884C\u3084 Markdown \u3092\u58CA\u3055\u306A\u3044\u3088\u3046 --instructions-file \u3067\u6E21\u3057\u3066\u304F\u3060\u3055\u3044\uFF08- \u3067\u6A19\u6E96\u5165\u529B\uFF09\u3002`,destructive:true,confirmation:CREDIT_CONFIRMATION,flags:[REPOSITORY_FLAG,{name:"--base",summary:"\u4F5C\u696D\u306E\u8D77\u70B9\u306B\u3059\u308B\u30D6\u30E9\u30F3\u30C1\uFF08twp agent repository branches \u3067\u78BA\u8A8D\u3067\u304D\u308B\uFF09",takesValue:true,placeholder:"<\u30D6\u30E9\u30F3\u30C1>"},
|
|
51
|
-
{name:INSTRUCTIONS_SPEC.fileFlag,summary:"\u521D\u671F\u6307\u793A\u3092\u30D5\u30A1\u30A4\u30EB\u304B\u3089\u8AAD\u3080\uFF08- \u3067\u6A19\u6E96\u5165\u529B\uFF09",takesValue:true,placeholder:"<\u30D1\u30B9>"},{name:INSTRUCTIONS_SPEC.flag,summary:"\u521D\u671F\u6307\u793A\u3092\u76F4\u63A5\u6E21\u3059\uFF08\u6539\u884C\u3092\u542B\u3080\u306A\u3089 --instructions-file\uFF09",takesValue:true,placeholder:"<\u6587>"},{name:"--model",summary:"AI \u30E2\u30C7\u30EB\uFF08claude \u306E\u30E2\u30C7\u30EB\u306E\u307F\u30FB\u7701\u7565\u6642\u306F\u30B5\u30FC\u30D0\u306E\u65E2\u5B9A\uFF09",
|
|
52
|
-
takesValue:true,placeholder:"<\u30E2\u30C7\u30EB>"},WAIT_FLAG,TIMEOUT_FLAG],async prepare(input,ctx){noArgs(input,"session create");waitSeconds(input,"session create");const repo=nonEmpty(input.flags,REPOSITORY_FLAG.name);if(repo===void 0)throw new UsageError("--repository \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044","\u30EA\u30DD\u30B8\u30C8\u30EA\u306F twp agent repository list \u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002");const instructions=await readBody(input,INSTRUCTIONS_SPEC);
|
|
53
|
-
if(instructions===void 0)throw new UsageError("\u521D\u671F\u6307\u793A\u3092 --instructions-file \u304B --instructions \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",INSTRUCTIONS_SPEC.usage);return withResolved(await resolveRepository(input,ctx,repo,REPOSITORY_FLAG.name),{instructions})},plan:input=>({method:"POST",path:AGENT_SESSIONS_PATH,body:{repositoryId:requireResolved(input,"repositoryId"),instructions:requireResolved(input,"instructions"),...nonEmpty(input.flags,"--base")!==void 0?
|
|
54
|
-
{baseBranch:nonEmpty(input.flags,"--base")}:{},...nonEmpty(input.flags,"--model")!==void 0?{aiModel:nonEmpty(input.flags,"--model")}:{}}}),plannedNotes:input=>waitPlannedNotes(input,"{\u4F5C\u6210\u3057\u305F\u30BB\u30C3\u30B7\u30E7\u30F3ID}"),execute:(input,ctx)=>sendAndMaybeWait(input,ctx,sessionCreateOperation.plan(input),"session create",data=>{const session=data["session"];const id=isRecord(session)?session["sessionId"]:void 0;if(typeof id!=="string"||!isSafePathSegment(id))throw new ApiResponseError(
|
|
55
|
-
"\u30BB\u30C3\u30B7\u30E7\u30F3\u4F5C\u6210\u306E\u5FDC\u7B54\u306B session.sessionId \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002");return id}),summarize:startedSummary("\u30BB\u30C3\u30B7\u30E7\u30F3\u4F5C\u6210"),raw:startedRaw("\u30BB\u30C3\u30B7\u30E7\u30F3\u4F5C\u6210"),document:startedDocument("\u30BB\u30C3\u30B7\u30E7\u30F3\u4F5C\u6210"),notes:startedNotes("\u30BB\u30C3\u30B7\u30E7\u30F3\u4F5C\u6210")};var sessionInstructOperation={
|
|
56
|
-
name:"instruct",summary:"\u52D5\u3044\u3066\u3044\u308B\u30BB\u30C3\u30B7\u30E7\u30F3\u3078\u8FFD\u52A0\u306E\u6307\u793A\u3092\u9001\u308B\uFF08AI \u30AF\u30EC\u30B8\u30C3\u30C8\u3092\u6D88\u8CBB\u30FB--yes \u304C\u8981\u308B\u30FB--wait \u3067\u7B54\u3048\u3092\u5F85\u3064\uFF09",usage:"twp agent session instruct <\u30BB\u30C3\u30B7\u30E7\u30F3> (--body-file <\u30D1\u30B9> | --body <\u6587>) [--wait [--timeout <\u79D2>]] --yes",description:`${SESSION_REF_HELP}
|
|
57
|
-
\u753B\u9762\u306E\u30C1\u30E3\u30C3\u30C8\u6B04\u304B\u3089\u9001\u308B\u306E\u3068\u540C\u3058 POST /api/v2/agent/sessions/{id}/instructions \u3067\u3059\u3002\u767A\u8A00\u8005\u306F\u3042\u306A\u305F\u3068\u3057\u3066\u8A18\u9332\u3055\u308C\u307E\u3059\u3002
|
|
58
|
-
\u30BB\u30C3\u30B7\u30E7\u30F3\u304C running / pending / \u5165\u529B\u5F85\u3061\u306E\u3068\u304D\u3060\u3051\u53D7\u3051\u4ED8\u3051\u307E\u3059\uFF08\u7D42\u308F\u3063\u305F\u30BB\u30C3\u30B7\u30E7\u30F3\u306F twp agent session resume \u3067\u518D\u958B\u3057\u307E\u3059\uFF09\u3002
|
|
59
|
-
--wait \u3092\u4ED8\u3051\u308B\u3068\u3001\u9001\u3063\u305F\u6642\u523B\u3088\u308A\u5F8C\u306E\u30A2\u30B7\u30B9\u30BF\u30F3\u30C8\u767A\u8A00\u304C\u51FA\u3066\u4F5C\u696D\u304C\u6B62\u307E\u308B\u307E\u3067\u5F85\u3061\u307E\u3059\u3002`,destructive:true,confirmation:CREDIT_CONFIRMATION,flags:[{name:BODY_SPEC.fileFlag,summary:"\u6307\u793A\u3092\u30D5\u30A1\u30A4\u30EB\u304B\u3089\u8AAD\u3080\uFF08- \u3067\u6A19\u6E96\u5165\u529B\uFF09",takesValue:true,placeholder:"<\u30D1\u30B9>"},{name:BODY_SPEC.
|
|
60
|
-
flag,summary:"\u6307\u793A\u3092\u76F4\u63A5\u6E21\u3059\uFF08\u6539\u884C\u3092\u542B\u3080\u306A\u3089 --body-file\uFF09",takesValue:true,placeholder:"<\u6587>"},WAIT_FLAG,TIMEOUT_FLAG],async prepare(input){sessionId(input,"instruct");waitSeconds(input,"session instruct");const body=await readBody(input,BODY_SPEC);if(body===void 0)throw new UsageError("\u6307\u793A\u3092 --body-file \u304B --body \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",BODY_SPEC.usage);return withResolved(input,
|
|
61
|
-
{instruction:body})},plan:input=>({method:"POST",path:sessionPath(sessionId(input,"instruct"),"/instructions"),body:{instruction:requireResolved(input,"instruction")}}),plannedNotes:input=>waitPlannedNotes(input,input.args[0]??"<\u30BB\u30C3\u30B7\u30E7\u30F3>"),execute:(input,ctx)=>sendAndMaybeWait(input,ctx,sessionInstructOperation.plan(input),"session instruct",()=>sessionId(input,"instruct")),summarize:startedSummary("\u6307\u793A\u306E\u9001\u4FE1"),raw:startedRaw("\u6307\u793A\u306E\u9001\u4FE1"),
|
|
62
|
-
document:startedDocument("\u6307\u793A\u306E\u9001\u4FE1"),notes:startedNotes("\u6307\u793A\u306E\u9001\u4FE1")};var RESUME_SPEC={...BODY_SPEC,label:"\u518D\u958B\u306E\u6307\u793A",usage:"twp agent session resume <\u30BB\u30C3\u30B7\u30E7\u30F3> [--body-file <\u30D1\u30B9>] --yes"};var sessionResumeOperation={name:"resume",summary:"\u6B62\u307E\u3063\u305F\u30BB\u30C3\u30B7\u30E7\u30F3\u3092\u518D\u958B\u3059\u308B\uFF08AI \u30AF\u30EC\u30B8\u30C3\u30C8\u3092\u6D88\u8CBB\u30FB--yes \u304C\u8981\u308B\u30FB--body-file \u3067\u518D\u958B\u306E\u6307\u793A\uFF09",
|
|
63
|
-
usage:"twp agent session resume <\u30BB\u30C3\u30B7\u30E7\u30F3> [--body-file <\u30D1\u30B9> | --body <\u6587>] [--wait [--timeout <\u79D2>]] --yes",description:`${SESSION_REF_HELP}
|
|
64
|
-
\u753B\u9762\u306E\u300C\u518D\u958B\u300D\u3068\u540C\u3058 POST /api/v2/agent/sessions/{id}/resume \u3067\u3059\u3002runner \u3092\u8D77\u52D5\u3057\u76F4\u3057\u3001\u4F5C\u696D\u30D6\u30E9\u30F3\u30C1\u306E\u7D9A\u304D\u304B\u3089\u4F5C\u696D\u3057\u307E\u3059\u3002
|
|
65
|
-
\u518D\u958B\u306E\u6307\u793A\u306F\u4EFB\u610F\u3067\u3059\uFF08\u7701\u304F\u3068\u524D\u56DE\u306E\u7D9A\u304D\u3092\u518D\u958B\u3057\u307E\u3059\uFF09\u3002`,destructive:true,confirmation:CREDIT_CONFIRMATION,flags:[{name:BODY_SPEC.fileFlag,summary:"\u518D\u958B\u306E\u6307\u793A\u3092\u30D5\u30A1\u30A4\u30EB\u304B\u3089\u8AAD\u3080\uFF08- \u3067\u6A19\u6E96\u5165\u529B\uFF09",takesValue:true,placeholder:"<\u30D1\u30B9>"},{name:BODY_SPEC.flag,summary:"\u518D\u958B\u306E\u6307\u793A\u3092\u76F4\u63A5\u6E21\u3059",
|
|
66
|
-
takesValue:true,placeholder:"<\u6587>"},WAIT_FLAG,TIMEOUT_FLAG],async prepare(input){sessionId(input,"resume");waitSeconds(input,"session resume");const body=await readBody(input,RESUME_SPEC);return body===void 0?input:withResolved(input,{resumeInstruction:body})},plan:input=>{const instruction=input.resolved?.["resumeInstruction"];return{method:"POST",path:sessionPath(sessionId(input,"resume"),"/resume"),body:instruction===void 0?{}:{resumeInstruction:instruction}}},plannedNotes:input=>waitPlannedNotes(
|
|
67
|
-
input,input.args[0]??"<\u30BB\u30C3\u30B7\u30E7\u30F3>"),execute:(input,ctx)=>sendAndMaybeWait(input,ctx,sessionResumeOperation.plan(input),"session resume",()=>sessionId(input,"resume")),summarize:startedSummary("\u30BB\u30C3\u30B7\u30E7\u30F3\u306E\u518D\u958B"),raw:startedRaw("\u30BB\u30C3\u30B7\u30E7\u30F3\u306E\u518D\u958B"),document:startedDocument("\u30BB\u30C3\u30B7\u30E7\u30F3\u306E\u518D\u958B"),notes:startedNotes("\u30BB\u30C3\u30B7\u30E7\u30F3\u306E\u518D\u958B")};function messageOf(body,what){
|
|
68
|
-
const data=envelope(body,what);return{message:typeof data["message"]==="string"?data["message"]:null}}var sessionCancelOperation={name:"cancel",summary:"\u52D5\u3044\u3066\u3044\u308B\u30BB\u30C3\u30B7\u30E7\u30F3\u3092\u6B62\u3081\u308B\uFF08runner \u3092\u505C\u6B62\u3059\u308B\u3002\u8A18\u9332\u306F\u6B8B\u308A\u3001resume \u3067\u518D\u958B\u3067\u304D\u308B\uFF09",usage:"twp agent session cancel <\u30BB\u30C3\u30B7\u30E7\u30F3>",description:`${SESSION_REF_HELP}
|
|
69
|
-
\u753B\u9762\u306E\u300C\u505C\u6B62\u300D\u3068\u540C\u3058 DELETE /api/v2/agent/sessions/{id} \u3067\u3059\u3002\u30BB\u30C3\u30B7\u30E7\u30F3\u306E\u8A18\u9332\u306F\u6D88\u3048\u307E\u305B\u3093\uFF08\u6D88\u3059\u306E\u306F delete\uFF09\u3002`,flags:[],plan:input=>({method:"DELETE",path:sessionPath(sessionId(input,"cancel"))}),summarize:body=>messageOf(body,"\u30BB\u30C3\u30B7\u30E7\u30F3\u306E\u505C\u6B62"),raw:body=>messageOf(body,"\u30BB\u30C3\u30B7\u30E7\u30F3\u306E\u505C\u6B62")};var sessionDeleteOperation={
|
|
70
|
-
name:"delete",summary:"\u30BB\u30C3\u30B7\u30E7\u30F3\u3092\u524A\u9664\u3059\u308B\uFF08\u30DE\u30B9\u30BF\u30FC\u306E\u307F\u30FB\u53D6\u308A\u6D88\u305B\u306A\u3044\u30FB--yes \u304C\u8981\u308B\uFF09",usage:"twp agent session delete <\u30BB\u30C3\u30B7\u30E7\u30F3> --yes",description:`${SESSION_REF_HELP}
|
|
71
|
-
DELETE /api/v2/agent/sessions/{id}/delete\u3002\u8D77\u52D5\u3057\u305F\u672C\u4EBA\uFF08\u30DE\u30B9\u30BF\u30FC\uFF09\u3060\u3051\u304C\u524A\u9664\u3067\u304D\u307E\u3059\u3002\u4F5C\u696D\u30D6\u30E9\u30F3\u30C1\u30FBPR \u306F GitHub \u306B\u6B8B\u308A\u307E\u3059\u3002`,destructive:true,flags:[],plan:input=>({method:"DELETE",path:sessionPath(sessionId(input,"delete"),"/delete")}),summarize:body=>messageOf(body,"\u30BB\u30C3\u30B7\u30E7\u30F3\u306E\u524A\u9664"),raw:body=>messageOf(body,"\u30BB\u30C3\u30B7\
|
|
72
|
-
\u30E7\u30F3\u306E\u524A\u9664")};var logPaging=envelopePaging({label:"\u30BB\u30C3\u30B7\u30E7\u30F3\u30ED\u30B0",itemsKey:"logs",readCursor:body=>{const record=isRecord(body)?body:{};return{hasMore:record["hasMore"],cursor:record["nextCursor"]}}});function logRows(body){envelope(body,"\u30BB\u30C3\u30B7\u30E7\u30F3\u30ED\u30B0");return logPaging.items(body)}var sessionLogsOperation={name:"logs",summary:"\u30BB\u30C3\u30B7\u30E7\u30F3\u306E\u5B9F\u884C\u30ED\u30B0\uFF08runner \u306E\u30A4\u30D9\u30F3\u30C8\uFF09\u3092\u4E00\u89A7\u3059\u308B",
|
|
73
|
-
usage:"twp agent session logs <\u30BB\u30C3\u30B7\u30E7\u30F3> [--all] [--limit <\u4EF6\u6570>] [--cursor <\u30AB\u30FC\u30BD\u30EB>]",description:`${SESSION_REF_HELP}
|
|
74
|
-
--output json \u306F API \u304C\u8FD4\u3059\u5168\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u51FA\u3057\u307E\u3059\u3002
|
|
75
|
-
|
|
76
|
-
${LIST_PAGING_HELP}`,flags:[...LIST_FLAGS],paging:logPaging,plan:input=>({method:"GET",path:sessionPath(sessionId(input,"logs"),"/logs"),query:{limit:positiveInteger(input.flags,"--limit"),cursor:nonEmpty(input.flags,"--cursor")}}),summarize:body=>logRows(body),raw:logRows,notes:body=>logRows(body).length===0?["\u30ED\u30B0\u306F\u307E\u3060\u3042\u308A\u307E\u305B\u3093\u3002"]:[]};function chatSummary(row){const metadata=isRecord(row)&&isRecord(row["metadata"])?row["metadata"]:{};return{...pick(
|
|
77
|
-
row,["timestamp","role","content"]),user_name:metadata["userName"]??null}}var sessionChatOperation={name:"chat",summary:"\u30BB\u30C3\u30B7\u30E7\u30F3\u306E\u4F1A\u8A71\uFF08\u6307\u793A\u3068\u30A2\u30B7\u30B9\u30BF\u30F3\u30C8\u306E\u767A\u8A00\u30FB\u30D5\u30A1\u30A4\u30EB\u5909\u66F4\uFF09\u3092\u53E4\u3044\u9806\u306B\u8868\u793A\u3059\u308B",usage:"twp agent session chat <\u30BB\u30C3\u30B7\u30E7\u30F3> [--limit <\u4EF6\u6570>]",description:`${SESSION_REF_HELP}
|
|
78
|
-
--limit \u306F\u30B5\u30FC\u30D0\u304C**\u53E4\u3044\u5074\u304B\u3089**\u8D70\u67FB\u3059\u308B\u30ED\u30B0\u306E\u4EF6\u6570\u3067\u3059\uFF08\u65E2\u5B9A 100\uFF09\u3002\u30C4\u30FC\u30EB\u306E\u30ED\u30B0\u3082\u6570\u3048\u3066\u304B\u3089\u4F1A\u8A71\u3060\u3051\u3092\u6B8B\u3059\u306E\u3067\u3001
|
|
79
|
-
\u9577\u3044\u30BB\u30C3\u30B7\u30E7\u30F3\u3067\u306F\u65E2\u5B9A\u306E\u307E\u307E\u3060\u3068\u6700\u8FD1\u306E\u767A\u8A00\u307E\u3067\u5C4A\u304D\u307E\u305B\u3093\u3002\u6700\u5F8C\u307E\u3067\u8AAD\u3080\u306B\u306F --limit \u3092\u5927\u304D\u304F\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u3053\u306EAPI\u306B\u30DA\u30FC\u30B8\u30F3\u30B0\u306F\u3042\u308A\u307E\u305B\u3093\u3002
|
|
80
|
-
--output text \u306F1\u767A\u8A00\u30921\u6BB5\u843D\u306B\u3057\u3066\u8AAD\u3081\u308B\u5F62\u3067\u51FA\u3057\u307E\u3059\u3002
|
|
81
|
-
|
|
82
|
-
--output json \u306F API \u304C\u8FD4\u3059\u5168\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u51FA\u3057\u307E\u3059\u3002--output table / tsv \u306F\u8981\u7D04\u5217\uFF08${CHAT_COLUMNS.join(" / ")}\uFF09\u3067\u3059\u3002`,flags:[{name:"--limit",summary:"\u30B5\u30FC\u30D0\u304C\u53E4\u3044\u5074\u304B\u3089\u8D70\u67FB\u3059\u308B\u30ED\u30B0\u306E\u4EF6\u6570\uFF08\u65E2\u5B9A 100\uFF09",takesValue:true,placeholder:"<\u4EF6\u6570>"}],plan:input=>({method:"GET",path:sessionPath(sessionId(input,"cha\
|
|
83
|
-
t"),"/chat-messages"),query:{limit:positiveInteger(input.flags,"--limit")}}),summarize:body=>chatRows(body).map(chatSummary).map(row=>pick(row,CHAT_COLUMNS)),raw:chatRows,document(body){const blocks=chatRows(body).map(row=>{const s=chatSummary(row);const who=s["role"]==="user"?`user${s["user_name"]!==null?`\uFF08${String(s["user_name"])}\uFF09`:""}`:String(s["role"]??"");return`[${String(s["timestamp"]??"")}] ${who}
|
|
84
|
-
${String(s["content"]??"")}`});return blocks.length===0?"\uFF08\u4F1A\u8A71\u306F\u307E\u3060\u3042\u308A\u307E\u305B\u3093\uFF09\n":`${blocks.join("\n\n")}
|
|
85
|
-
`},notes:body=>chatRows(body).length===0?["\u4F1A\u8A71\u306F\u307E\u3060\u3042\u308A\u307E\u305B\u3093\uFF08runner \u304C\u8D77\u52D5\u4E2D\u304B\u3001\u4F1A\u8A71\u306E\u4FDD\u5B58\u5148\u306B\u5C4A\u3044\u3066\u3044\u307E\u305B\u3093\uFF09\u3002"]:[]};function diffOf(body){return envelope(body,"Git \u306E\u5DEE\u5206")["gitDiff"]??null}function diffFiles(body){const diff=diffOf(body);if(diff===null)return[];if(Array.isArray(diff))return diff;if(isRecord(diff)&&Array.isArray(diff["files"]))return diff["\
|
|
86
|
-
files"];throw new ApiResponseError("Git \u306E\u5DEE\u5206\u306E\u5FDC\u7B54\u306B files \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}var sessionDiffOperation={name:"diff",summary:"\u4F5C\u696D\u30D6\u30E9\u30F3\u30C1\u306E\u5909\u66F4\u30D5\u30A1\u30A4\u30EB\uFF08\u8D77\u70B9\u30D6\u30E9\u30F3\u30C1\u3068\u306E\u5DEE\u5206\uFF09\u3092\u8868\u793A\u3059\u308B",usage:"twp agent session diff <\u30BB\u30C3\u30B7\u30E7\u30F3>",
|
|
87
|
-
description:`${SESSION_REF_HELP}
|
|
88
|
-
--output table / tsv \u306F\u5909\u66F4\u30D5\u30A1\u30A4\u30EB1\u4EF6\uFF1D1\u884C\uFF08${DIFF_COLUMNS.join(" / ")}\uFF09\u3001--output text \u306F unified diff \u306E\u672C\u6587\u3067\u3059\u3002
|
|
89
|
-
--output json \u306F API \u306E gitDiff\uFF08diff \u672C\u6587\u30FBfiles\u30FBbaseBranch\uFF09\u3092\u305D\u306E\u307E\u307E\u51FA\u3057\u307E\u3059\uFF08runner \u304C\u307E\u3060\u5DEE\u5206\u3092\u5831\u544A\u3057\u3066\u3044\u306A\u3051\u308C\u3070 null\uFF09\u3002`,flags:[],plan:input=>({method:"GET",path:sessionPath(sessionId(input,"diff"),"/git-diff")}),summarize:body=>diffFiles(body).map(row=>pick(row,DIFF_COLUMNS)),raw:diffOf,document(body){const diff=diffOf(body);const text=isRecord(diff)&&
|
|
90
|
-
typeof diff["diff"]==="string"?diff["diff"]:"";return text===""?"\uFF08\u5DEE\u5206\u306F\u3042\u308A\u307E\u305B\u3093\uFF09\n":text.endsWith("\n")?text:`${text}
|
|
91
|
-
`},notes:body=>diffOf(body)===null?["\u5DEE\u5206\u306F\u307E\u3060\u3042\u308A\u307E\u305B\u3093\uFF08runner \u304C\u307E\u3060\u5909\u66F4\u3092\u5831\u544A\u3057\u3066\u3044\u307E\u305B\u3093\uFF09\u3002"]:diffFiles(body).length===0?["\u5909\u66F4\u30D5\u30A1\u30A4\u30EB\u306F\u3042\u308A\u307E\u305B\u3093\u3002"]:[]};function repositoryRows(body){return listOf(body,"list","\u30EA\u30DD\u30B8\u30C8\u30EA\u4E00\u89A7")}var repositoryListOperation={name:"list",summary:"\u30BB\u30C3\u30B7\u30E7\u30F3\u3092\u8D77\u52D5\u3067\u304D\u308B\u30EA\u30DD\u30B8\u30C8\u30EA\u3092\u4E00\u89A7\u3059\u308B\uFF08\u53C2\u52A0\u30D7\
|
|
92
|
-
\u30ED\u30B8\u30A7\u30AF\u30C8\u306B\u7D10\u3065\u3044\u305F\u3082\u306E\uFF09",usage:"twp agent repository list",description:`\u30C6\u30CA\u30F3\u30C8\u306B\u9023\u643A\u3057\u305F GitHub \u30EA\u30DD\u30B8\u30C8\u30EA\u306E\u3046\u3061\u3001\u3042\u306A\u305F\u304C\u53C2\u52A0\u3059\u308B\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306B\u7D10\u3065\u3044\u305F\u3082\u306E\u3060\u3051\u304C\u51FA\u307E\u3059\u3002
|
|
93
|
-
\u3053\u306E API \u306F\u30DA\u30FC\u30B8\u30F3\u30B0\u3092\u6301\u305F\u305A\u3001\u5168\u4EF6\u3092\u8FD4\u3057\u307E\u3059\u3002
|
|
94
|
-
|
|
95
|
-
--output table / text / tsv \u306F\u8981\u7D04\u5217\uFF08${REPOSITORY_COLUMNS.join(" / ")}\uFF09\u3067\u3059\u3002`,flags:[],plan(input){noArgs(input,"repository list");return{method:"GET",path:AGENT_REPOSITORIES_PATH}},summarize:body=>repositoryRows(body).map(row=>pick(row,REPOSITORY_COLUMNS)),raw:repositoryRows,notes:body=>repositoryRows(body).length===0?["\u8D77\u52D5\u3067\u304D\u308B\u30EA\u30DD\u30B8\u30C8\u30EA\u306F\u3042\u308A\u307E\u305B\u3093\uFF08GitHub \u9023\u643A\u304C\u672A\u8A2D\u5B9A\u304B\u3001\u53C2\u52A0\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306B\u30EA\u30DD\u30B8\u30C8\u30EA\u304C\u7D10\u3065\u3044\u3066\u3044\u307E\u305B\u3093\uFF09\u3002"]:
|
|
96
|
-
[]};var repositoryBranchesOperation={name:"branches",summary:"\u30EA\u30DD\u30B8\u30C8\u30EA\u306E\u30D6\u30E9\u30F3\u30C1\u3092\u4E00\u89A7\u3059\u308B\uFF08--base \u306B\u6E21\u305B\u308B\u540D\u524D\uFF09",usage:"twp agent repository branches <\u30EA\u30DD\u30B8\u30C8\u30EA>",description:"<\u30EA\u30DD\u30B8\u30C8\u30EA> \u306F twp agent repository list \u306E full_name\uFF08owner/repo\uFF09\u304B id \u3067\u3059\u3002",flags:[],async prepare(input,ctx){const values=input.args.map(arg=>arg.trim());
|
|
97
|
-
if(values.length!==1||values[0]==="")throw new UsageError("<\u30EA\u30DD\u30B8\u30C8\u30EA>\u30921\u3064\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",usageOf("repository branches"));return resolveRepository(input,ctx,values[0],"<\u30EA\u30DD\u30B8\u30C8\u30EA>")},plan:input=>({method:"GET",path:`${AGENT_REPOSITORIES_PATH}/${encodeURIComponent(requireResolved(input,"repositoryId"))}/branches`}),summarize:body=>listOf(body,"list","\u30D6\u30E9\u30F3\u30C1\u4E00\u89A7").map(row=>pick(row,BRANCH_COLUMNS)),
|
|
98
|
-
raw:body=>listOf(body,"list","\u30D6\u30E9\u30F3\u30C1\u4E00\u89A7")};var sessionResource={name:"session",summary:"\u30BB\u30C3\u30B7\u30E7\u30F3\uFF08\u8D77\u52D5\u30FB\u6307\u793A\u30FB\u518D\u958B\u30FB\u505C\u6B62\u30FB\u524A\u9664\u30FB\u72B6\u614B\u30FB\u4F1A\u8A71\u30FB\u30ED\u30B0\u30FB\u5DEE\u5206\uFF09",operations:[sessionListOperation,sessionGetOperation,sessionCreateOperation,sessionInstructOperation,sessionResumeOperation,sessionCancelOperation,sessionDeleteOperation,sessionLogsOperation,
|
|
99
|
-
sessionChatOperation,sessionDiffOperation]};var repositoryResource={name:"repository",summary:"\u30BB\u30C3\u30B7\u30E7\u30F3\u3092\u8D77\u52D5\u3067\u304D\u308B\u30EA\u30DD\u30B8\u30C8\u30EA\u3068\u305D\u306E\u30D6\u30E9\u30F3\u30C1",operations:[repositoryListOperation,repositoryBranchesOperation]};var agentDomain={name:"agent",summary:"\u30B3\u30F3\u30C6\u30CA\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\uFF08\u30EA\u30DD\u30B8\u30C8\u30EA\u3067\u4F5C\u696D\u3059\u308B AI \u30BB\u30C3\u30B7\u30E7\u30F3\u306E\u8D77\u52D5\u30FB\u6307\u793A\u30FB\u76E3\u8996\uFF09",
|
|
100
|
-
operations:[],subresources:[sessionResource,repositoryResource]};export{WAIT_POLL_INTERVAL_MS,agentDomain};
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
|
-
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{FROM_FLAG,MANHOUR_DESCRIPTION,MANHOUR_FROM_FLAG,MANHOUR_TO_FLAG,MONTH_FLAG,TO_FLAG,analysisDomain,analysisForbidden,currentMonth,dataOf,listIn,manhourNotes,manhourQuery,manhourRows,monthRange,monthsBetween,noArgs,profitRows,rangeNotes,recordOf,staffKpiRows,workloadDistributionNotes,workloadDistributionRows}from"./chunk-LAAKI3GS.js";import"./chunk-RX5HWI4L.js";import"./chunk-YKI7NYBD.js";import"./chunk-EXT4AIDF.js";import"./chunk-6LSQCOCJ.js";import"./chunk-ITRTFBV3.js";
|
|
4
|
-
import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import"./chunk-PS5QFKHB.js";import"./chunk-II5RVJQN.js";import"./chunk-3ZRMMBP5.js";import"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.js";import"./chunk-RZVI6PMW.js";import"./chunk-QQRJLH6B.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";export{FROM_FLAG,MANHOUR_DESCRIPTION,MANHOUR_FROM_FLAG,MANHOUR_TO_FLAG,MONTH_FLAG,TO_FLAG,analysisDomain,analysisForbidden,currentMonth,dataOf,listIn,manhourNotes,manhourQuery,manhourRows,monthRange,monthsBetween,noArgs,profitRows,rangeNotes,recordOf,staffKpiRows,workloadDistributionNotes,workloadDistributionRows};
|