@tocca-systems/twp-cli 0.40.0 → 0.42.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 +10 -0
- package/README.md +23 -3
- package/dist/{agent-loop-4U5RLC4L.js → agent-loop-6LT46KBQ.js} +2 -2
- package/dist/{ai-dispatch-AHCYPQ5Y.js → ai-dispatch-YEZVZFEV.js} +2 -2
- package/dist/{api-command-7PZCMQO5.js → api-command-FMG2A67V.js} +47 -16
- package/dist/{app-PNHDMD3V.js → app-5NVG34GS.js} +5 -5
- package/dist/{attendance-5KE2JPK4.js → attendance-K2U7RYDU.js} +1 -1
- package/dist/{attendance-lists-MXQNWUIH.js → attendance-lists-NVRU2NLY.js} +1 -1
- package/dist/{auto-update-JNSBIQM6.js → auto-update-PS5HUWVH.js} +1 -1
- package/dist/{auto-update-worker-Y44TD6FD.js → auto-update-worker-ZKODJ45K.js} +2 -2
- package/dist/{backlog-ISEIWKMQ.js → backlog-FC4YK5KD.js} +2 -2
- package/dist/{charter-command-ULFOEZWE.js → charter-command-2RIS2VTQ.js} +1 -1
- package/dist/{chunk-PEM3HR7L.js → chunk-2EJTYKE3.js} +2 -2
- package/dist/{chunk-H54MGGHB.js → chunk-2XP7XHLA.js} +2 -2
- package/dist/{chunk-DDKZ5IPT.js → chunk-2YNZ4MRT.js} +1 -1
- package/dist/{chunk-B7YCG2T7.js → chunk-46ZXIWVU.js} +1 -1
- package/dist/{chunk-3RAGOW6X.js → chunk-4B3T4UE7.js} +1 -1
- package/dist/{chunk-XN5TUZOT.js → chunk-6FKZSOPR.js} +1 -1
- package/dist/{chunk-PWXXCLVZ.js → chunk-6QOT7CHX.js} +1 -1
- package/dist/{chunk-6ZUVESMI.js → chunk-7HVVKEOA.js} +2 -3
- package/dist/{chunk-L52XJFJR.js → chunk-AITUMFCH.js} +1 -1
- package/dist/{chunk-P4AEFKLM.js → chunk-AJO4O5ZF.js} +1 -1
- package/dist/{chunk-GDM2QUBL.js → chunk-ATYA6DG5.js} +1 -1
- package/dist/chunk-DMRXJRMR.js +102 -0
- package/dist/{chunk-IOGVQVGD.js → chunk-F7K37QG6.js} +1 -1
- package/dist/chunk-FPUOK6KV.js +8 -0
- package/dist/chunk-G2THOTBW.js +15 -0
- package/dist/{chunk-VK2Z4QGC.js → chunk-H3WYVFTS.js} +1 -1
- package/dist/{chunk-PKWMJIBM.js → chunk-HNUBM24L.js} +1 -1
- package/dist/{chunk-5R4SEO3I.js → chunk-IOGMOXYF.js} +1 -1
- package/dist/{chunk-BPCK5RAB.js → chunk-IVMPNTY5.js} +1 -1
- package/dist/{chunk-2M2JQ23W.js → chunk-IXFMXUNT.js} +1 -1
- package/dist/{chunk-WV3ZKUF4.js → chunk-JF4XMSPR.js} +3 -3
- package/dist/{chunk-7ACENLLZ.js → chunk-KG53F74X.js} +2 -2
- package/dist/chunk-L25UV7DE.js +13 -0
- package/dist/{chunk-REPGG75N.js → chunk-LNZTJI64.js} +1 -1
- package/dist/{chunk-ZN5EFDH7.js → chunk-LXIAOCUW.js} +1 -1
- package/dist/{chunk-RFBFR567.js → chunk-N6AXAGS2.js} +5 -5
- package/dist/chunk-OAW2GMY4.js +4 -0
- package/dist/{chunk-I6DWJXPC.js → chunk-OHXZO5WK.js} +1 -1
- package/dist/{chunk-HGTG5XQ7.js → chunk-ORUDW52G.js} +1 -1
- package/dist/{chunk-VBX44RKP.js → chunk-QEWI75KI.js} +1 -1
- package/dist/{chunk-BZAXQOLB.js → chunk-R6RTDJJG.js} +1 -1
- package/dist/{chunk-BZ7ULFR3.js → chunk-T6VAND3Z.js} +2 -2
- package/dist/chunk-UFND7FBC.js +4 -0
- package/dist/chunk-UOAJBX5N.js +16 -0
- package/dist/{chunk-FKS2Z34P.js → chunk-UXC3SQ44.js} +2 -2
- package/dist/{chunk-ZWVYVS2A.js → chunk-VTQAI52S.js} +1 -1
- package/dist/{chunk-UDPJ2IGK.js → chunk-XDHLO54T.js} +1 -1
- package/dist/{chunk-X5IVIOGL.js → chunk-XGH2ZKYR.js} +1 -1
- package/dist/{chunk-I4ARX6NM.js → chunk-YLM54X35.js} +1 -0
- package/dist/{chunk-GPIIXDEX.js → chunk-YLXW7TIU.js} +1 -1
- package/dist/{chunk-2NKVGAAE.js → chunk-YM7TKMNO.js} +1 -1
- package/dist/{chunk-43OMEGNH.js → chunk-ZRLIG5QG.js} +2 -2
- package/dist/cli.js +39 -9
- package/dist/{commands-RCDYCU6L.js → commands-5SCCEGSB.js} +13 -13
- package/dist/{commands-PG5VVBKO.js → commands-XZEVVZMV.js} +4 -4
- package/dist/{company-4Z4JJVA7.js → company-KUQFRVIA.js} +3 -3
- package/dist/{completion-EFGQJDIU.js → completion-QW52J6HB.js} +1 -1
- package/dist/{configure-PIOFJFL5.js → configure-XH33RB27.js} +1 -1
- package/dist/{contract-BQ76SGWV.js → contract-OE2PPHHX.js} +5 -4
- package/dist/{department-YHZRSWLB.js → department-EXZZUY7Q.js} +2 -2
- package/dist/deposit-M2RCXBCI.js +4 -0
- package/dist/{estimate-U2K7DPGH.js → estimate-46CPFRGI.js} +6 -6
- package/dist/{inquiry-5D4U6CLU.js → inquiry-MUXVKNAU.js} +2 -2
- package/dist/{invoice-2VLK2BFV.js → invoice-H23UAQPE.js} +5 -5
- package/dist/{job-title-G7MIYWVA.js → job-title-7J7EO37M.js} +1 -1
- package/dist/{knowledge-7QDC775Q.js → knowledge-B6I6UO3G.js} +2 -2
- package/dist/{leave-GHFJOGNC.js → leave-EDBJIDNP.js} +2 -2
- package/dist/{logout-guard-XYVKR47G.js → logout-guard-BIF2B7JE.js} +1 -1
- package/dist/{media-XO6X3UQT.js → media-HP3IUPIJ.js} +2 -2
- package/dist/{notification-SUSR5NGQ.js → notification-WJYUTNMN.js} +2 -2
- package/dist/{oneshot-UGYF2PLB.js → oneshot-VDGNNEC5.js} +2 -2
- package/dist/{position-UY33ETLX.js → position-NV2VT3GP.js} +2 -2
- package/dist/{project-ZGOB5W25.js → project-ZVRVNXWI.js} +1 -1
- package/dist/{prospect-G426O6XL.js → prospect-4OP4ALIZ.js} +3 -3
- package/dist/{purchase-3GGAQRE6.js → purchase-XPGECUBK.js} +4 -4
- package/dist/query-3ZQP4DCN.js +3 -0
- package/dist/receivable-LMQWNKN5.js +4 -0
- package/dist/{registry-ODJB7AS3.js → registry-4HEOQVY4.js} +1 -1
- package/dist/{report-UC2PCK7B.js → report-JR7D2GMJ.js} +2 -2
- package/dist/run-HSRMTAQ6.js +4 -0
- package/dist/sales-ai-review-XLXW5LRA.js +4 -0
- package/dist/{sales-master-ORLR5VK4.js → sales-master-5BET74LP.js} +3 -3
- package/dist/sales-numbering-RPDLRKUK.js +4 -0
- package/dist/{schedule-command-IGTMCOA7.js → schedule-command-7JGQMTQY.js} +1 -1
- package/dist/{server-settings-MVZEW2QI.js → server-settings-326MD7T4.js} +1 -1
- package/dist/{server-skills-NXSUDHBD.js → server-skills-OF7USNRM.js} +1 -1
- package/dist/{setup-CVXGKBTY.js → setup-JGGFVRUW.js} +1 -1
- package/dist/{skill-command-4U7HB7XU.js → skill-command-74MCUHFJ.js} +1 -1
- package/dist/{storage-ANKKJJJO.js → storage-KLLBENBY.js} +1 -1
- package/dist/{supplier-payment-AFJ7G6AP.js → supplier-payment-VD55DOU4.js} +3 -3
- package/dist/{task-S3BBBELE.js → task-A4W5OAMD.js} +3 -3
- package/dist/update-EYFT7STE.js +3 -0
- package/dist/{user-O7H5PD4N.js → user-I7CK2SJX.js} +3 -3
- package/dist/workflow-WU2EFC5V.js +4 -0
- package/package.json +1 -1
- package/dist/chunk-7WSNIXTQ.js +0 -4
- package/dist/chunk-EOSSFTNG.js +0 -4
- package/dist/chunk-L6AHCTQZ.js +0 -8
- package/dist/chunk-QWSXHHFT.js +0 -15
- package/dist/chunk-V3GQEUYI.js +0 -16
- package/dist/chunk-VCZVITWG.js +0 -13
- package/dist/deposit-U4AVQH5O.js +0 -4
- package/dist/query-EEALMOSO.js +0 -3
- package/dist/receivable-TNH4KCUO.js +0 -4
- package/dist/run-GDYEOQQK.js +0 -4
- package/dist/sales-numbering-MBFKVR2C.js +0 -4
- package/dist/update-MAQJ6VWV.js +0 -3
- package/dist/workflow-2YL2OF2Y.js +0 -4
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{
|
|
3
|
+
import{isValidSkillName,skillDigest}from"./chunk-H3WYVFTS.js";import{describeError}from"./chunk-G2THOTBW.js";import{isPrivateProjectId}from"./chunk-GY7KI5E5.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import fs from"fs";import path from"path";var SKILL_REF=/^([ \t]*)\/([a-z][a-z0-9-]*)(?=[ \t\n]|$)([ \t]+[^\n]*)?/gm;function stripFrontmatter(content){if(!content.startsWith("---"))return content;const m=/^---[ \t]*\r?\n[\s\S]*?\r?\n---[ \t]*(?:\r?\n)?/.exec(content);return m===null?content:content.slice(m[0].length)}function referencedSkills(prompt){const out=[];for(const m of prompt.matchAll(SKILL_REF)){const name=m[2]??"";if(!out.includes(name))out.push(name)}return out}function expandServerSkills(prompt,bodies){if(bodies.size===0)return prompt;
|
|
4
4
|
return prompt.replace(SKILL_REF,(whole,_indent,name,args)=>{const body=bodies.get(name);if(body===void 0)return whole;return stripFrontmatter(body).replaceAll("$ARGUMENTS",()=>(args??"").trim())})}function prepareSkillOverlay(root,workspace,bodies,provider){const commands=path.join(root,".claude","commands");fs.rmSync(root,{recursive:true,force:true});fs.mkdirSync(commands,{recursive:true});const src=path.join(workspace,".claude","commands");let names=[];try{names=fs.readdirSync(src).filter(f=>f.
|
|
5
5
|
endsWith(".md"))}catch{}for(const f of names){const from=path.join(src,f);try{if(fs.statSync(from).isFile())fs.copyFileSync(from,path.join(commands,f))}catch{}}for(const[name,body]of bodies){if(!isValidSkillName(name))continue;fs.writeFileSync(path.join(commands,`${name}.md`),body,"utf8")}if(/^[a-z0-9-]+$/.test(provider)){const rel=path.join("scripts","agent-adapters","providers",`${provider}.md`);const from=path.join(workspace,rel);if(fs.existsSync(from)){fs.mkdirSync(path.dirname(path.join(root,
|
|
6
6
|
rel)),{recursive:true});fs.copyFileSync(from,path.join(root,rel))}}}function unwrap(json,key){if(json===null||typeof json!=="object"||Array.isArray(json))return null;const top=json;const data=top["data"];if(data!==null&&typeof data==="object"&&!Array.isArray(data)&&key in data){return data}return top}function isRevision(v){return typeof v==="number"&&Number.isInteger(v)&&v>=0}function parseSkillList(res){const b=unwrap(res.json,"skills");const raw=b?.["skills"];if(!Array.isArray(raw))return null;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{buildDiffLines,diffStat}from"./chunk-VRBI2NPI.js";import{EXIT_API_CLIENT,EXIT_API_SERVER,EXIT_AUTH}from"./chunk-
|
|
3
|
+
import{buildDiffLines,diffStat}from"./chunk-VRBI2NPI.js";import{EXIT_API_CLIENT,EXIT_API_SERVER,EXIT_AUTH}from"./chunk-UFND7FBC.js";import*as fs from"fs";function readUtf8Strict(p){return new TextDecoder("utf-8",{fatal:true,ignoreBOM:true}).decode(fs.readFileSync(p))}function apiExit(res){if(res.status===401)return EXIT_AUTH;if(res.status!==null&&res.status>=400&&res.status<500)return EXIT_API_CLIENT;return EXIT_API_SERVER}function pickNumber(b,key){const v=b[key];return typeof v==="number"&&Number.isInteger(v)&&v>=0?v:null}function str(v){return typeof v==="string"?v:""}function currentRevisionOf(res){const json=res.json??{};const data=json["dat\
|
|
4
4
|
a"]&&typeof json["data"]==="object"?json["data"]:{};return pickNumber(json,"current_revision")??pickNumber(data,"current_revision")}function errorDetail(res){if(res.status===null)return`transport_error=${res.transportError??"\u4E0D\u660E"}`;const json=res.json??{};const data=json["data"]&&typeof json["data"]==="object"?json["data"]:{};const errorField=json["error"];const errorObj=errorField&&typeof errorField==="object"?errorField:{};const reason=(typeof errorField==="string"?errorField:"")||str(
|
|
5
5
|
errorObj["code"])||str(json["reason"])||str(data["reason"]);const message=str(json["error_description"])||str(errorObj["message"])||str(json["message"])||str(data["message"]);const parts=[`http=${res.status}`];if(reason)parts.push(`reason=${reason}`);if(message)parts.push(message.slice(0,300));const errors=json["errors"]??data["errors"]??json["error_list"];if(errors&&typeof errors==="object")parts.push(JSON.stringify(errors).slice(0,300));if(!reason&&!message)parts.push(`\u5FDC\u7B54\u306E\u5148\u982D: ${res.
|
|
6
6
|
raw.slice(0,160)}`);return parts.join(" ")}var HIDDEN_CHARS=/[\x00-\x08\x0B-\x1F\x7F-\x9F\u00AD\u061C\u180E\u200B-\u200F\u2028-\u202E\u2060-\u2069\uFEFF\uFFF9-\uFFFB\u{E0000}-\u{E007F}\u{E0100}-\u{E01EF}]/gu;function printDiff(out,fromLabel,toLabel,before,after){const lines=buildDiffLines(before,after);const{added,removed}=diffStat(lines);out(`--- ${fromLabel}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{UsageError}from"./chunk-
|
|
3
|
+
import{UsageError}from"./chunk-UFND7FBC.js";async function evaluateQuery(expression,value){if(expression.trim()===""){throw new UsageError("--query \u306B\u7A7A\u306E\u5F0F\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093")}const{search}=await import("./dist-HZIZTJ4O.js");try{return search(value??null,expression)}catch(err){throw new UsageError(`--query \u306E\u5F0F\u3092\u8A55\u4FA1\u3067\u304D\u307E\u305B\u3093: ${err.message}`)}}export{evaluateQuery};
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
|
+
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
+
import{salesFeatureDenied}from"./chunk-UOAJBX5N.js";import{charCount,readBody}from"./chunk-ORUDW52G.js";import{featureLicenseGuidance}from"./chunk-T6VAND3Z.js";import{repeatedValues}from"./chunk-F7K37QG6.js";import{isExactNumericId}from"./chunk-R6RTDJJG.js";import{ApiError}from"./chunk-IF2K4PM5.js";import{NotLoggedInError,SessionExpiredError}from"./chunk-XNLIEUAW.js";import{LIST_PAGING_HELP,PAGE_NUMBER_LIST_FLAGS,envelopePaging,nonEmpty,positiveInteger}from"./chunk-IOGMOXYF.js";
|
|
4
|
+
import{requireResolved,withResolved}from"./chunk-LXIAOCUW.js";import{isRecord,pick}from"./chunk-VTQAI52S.js";import{ApiRejectedError,ApiResponseError,NetworkError,UsageError}from"./chunk-UFND7FBC.js";var SALES_PATH="/api/v2/sales";var REASONS_PATH=`${SALES_PATH}/ai-review-reasons`;function documentForbidden(body){if(salesFeatureDenied(body))return featureLicenseGuidance("\u8CA9\u58F2\u7BA1\u7406");const reason=body?.error;if(typeof reason==="string"&&reason.endsWith("\u6A29\u9650\u304C\u3042\u308A\u307E\u305B\u3093")){return`${reason}\uFF08\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306B\u7D10\u3065\u304F\u66F8\u985E\u306F\u305D\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30E1\u30F3\u30D0\u30FC\u3001\u7D10\u3065\u304B\u306A\u3044\u66F8\u985E\u306F\u4F5C\u6210\u8005\u30FB\u62C5\u5F53\u8005\u3068\u7BA1\u7406\u8005\u3060\u3051\u304C\u6271\u3048\u307E\u3059\uFF09`}
|
|
5
|
+
return void 0}function reasonsForbidden(body){if(body?.error==="permission_denied")return featureLicenseGuidance("\u8CA9\u58F2\u7BA1\u7406");return"\u7406\u7531\u306E\u6A2A\u65AD\u4E00\u89A7\u30FB\u6587\u6848\u751F\u6210\u30FBPR \u4F5C\u6210\u306F\u8CA9\u58F2\u7BA1\u7406\u306E\u7BA1\u7406\u8005\u3060\u3051\u304C\u4F7F\u3048\u307E\u3059\uFF08\u66F8\u985E\u3092\u8DE8\u3044\u3067\u7406\u7531\u3092\u8AAD\u3080\u305F\u3081\uFF09\u3002\u30C6\u30CA\u30F3\u30C8\u304C\u8CA9\u58F2\u7BA1\u7406\u3092\u5951\u7D04\u3057\u3066\u3044\u308B\u304B\u30FB\u3042\u306A\u305F\u306E\u8CA9\u58F2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u300C\u7BA1\u7406\u8005\u300D\u304B\u3092\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002"}
|
|
6
|
+
var ESTIMATE={name:"estimate",label:"\u898B\u7A4D",segment:"estimates"};var INVOICE={name:"invoice",label:"\u8ACB\u6C42",segment:"invoices"};var CONTRACT={name:"contract",label:"\u53D6\u5F15\u5951\u7D04",segment:"contracts"};var JUDGMENTS={no_issue:"\u78BA\u8A8D\u3057\u305F\u304C\u554F\u984C\u306A\u3044\u3068\u5224\u65AD\u3057\u305F",corrected:"\u6307\u6458\u3092\u53D7\u3051\u3066\u66F8\u985E\u3092\u4FEE\u6B63\u3057\u305F",not_applicable:"\u3053\u306E\u6848\u4EF6\u306B\u306F\u5F53\u3066\u306F\u307E\u3089\u306A\u3044\u6307\u6458\u3060\u3068\u5224\u65AD\u3057\u305F"};
|
|
7
|
+
var REASON_MAX_CHARS=2e3;var LABEL_MAX_CHARS=255;var CRITERION_RE=/^[A-Za-z0-9_.:-]{1,128}$/;var MAX_REASONS=20;var DRAFT_MAX_CHARS=8e3;var TARGET_PREFIX="checklists/";var DEFAULT_TARGET="checklists/quality/estimation-billing-integrity-check.md";var WAIT_POLL_INTERVAL_MS=5e3;var WAIT_DEFAULT_SECONDS=300;var WAIT_MAX_SECONDS=540;var IN_FLIGHT=new Set(["pending","processing"]);var sleep=ms=>new Promise(resolve=>setTimeout(resolve,ms));function refusedBeforeSending(err){return err instanceof ApiError&&
|
|
8
|
+
err.status>=400&&err.status<500||err instanceof NotLoggedInError||err instanceof SessionExpiredError}async function trimmedBody(input,spec){const text=await readBody(input,{...spec,maxChars:spec.maxChars+1e3});if(text===void 0)return void 0;const length=charCount(text.trim());if(length>spec.maxChars)throw new UsageError(`${spec.label}\u306F ${spec.maxChars.toLocaleString()} \u6587\u5B57\u307E\u3067\u3067\u3059\uFF08${length.toLocaleString()} \u6587\u5B57\uFF09`,spec.usage);return text}function usageOf(doc,resource,op){
|
|
9
|
+
return`twp ${doc.name} ${resource} ${op} help`}function numericDocumentId(raw,doc,usage,what){const id=raw.trim();if(id==="")throw new UsageError(`${doc.label}\u306E ID \u3092${what}\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044`,usage);if(!isExactNumericId(id)){throw new UsageError(`${doc.label}\u306E ID \u306F\u6570\u5B57\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${id}`,`twp ${doc.name} list \u306E id \u5217\u306E\u6570\u5B57\u3067\u3059\uFF08${doc.label}\u756A\u53F7\u3067\u306F\u3042\u308A\u307E\u305B\u3093\uFF09\u3002`)}
|
|
10
|
+
return id}function reviewPath(input,doc,op){const usage=usageOf(doc,"ai-review",op);if(input.args.length>1)throw new UsageError(`\u4F59\u5206\u306A\u5F15\u6570\u304C\u3042\u308A\u307E\u3059: ${input.args.slice(1).join(" ")}`,usage);const id=numericDocumentId(input.args[0]??"",doc,usage,"\u4F4D\u7F6E\u5F15\u6570");return`${SALES_PATH}/${doc.segment}/${encodeURIComponent(id)}/ai-review`}function reasonTarget(input,doc,op){const usage=usageOf(doc,"ai-review-reason",op);if(input.args.length>1)throw new UsageError(
|
|
11
|
+
`\u4F59\u5206\u306A\u5F15\u6570\u304C\u3042\u308A\u307E\u3059: ${input.args.slice(1).join(" ")}\uFF08${doc.label}\u306F --${doc.name} \u3067\u6E21\u3057\u307E\u3059\uFF09`,usage);const criterion=input.args[0]?.trim()??"";if(criterion==="")throw new UsageError("\u6307\u6458\u306E ID\uFF08criterion_id\uFF09\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",`twp ${doc.name} ai-review get <${doc.label}ID> \u306E criterion_id \u5217\u306E\u5024\u3067\u3059\u3002`);if(!CRITERION_RE.test(criterion)||
|
|
12
|
+
/^\.+$/.test(criterion)){throw new UsageError(`\u6307\u6458\u306E ID \u306F\u82F1\u6570\u5B57\u3068 _ . : - \u3060\u3051\u30FB128 \u6587\u5B57\u307E\u3067\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${criterion}`,usage)}const id=numericDocumentId(input.flags.get(`--${doc.name}`)??"",doc,usage,` --${doc.name}`);const base=`${SALES_PATH}/${doc.segment}/${encodeURIComponent(id)}/ai-review`;return{reviewPath:base,reasonPath:`${base}/reasons/${encodeURIComponent(criterion)}`,criterion}}function envelope(body,what){
|
|
13
|
+
if(!isRecord(body)||body["result"]!==true){throw new ApiResponseError(`${what}\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`)}return body}function withoutResult(body){return Object.fromEntries(Object.entries(body).filter(([key])=>key!=="result"))}function reviewOf(body,what){const review=body["review"];if(review===null)return null;if(!isRecord(review)||typeof review["s\
|
|
14
|
+
tatus"]!=="string"){throw new ApiResponseError(`${what}\u306E\u5FDC\u7B54\u306B review.status \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return review}function checksOf(review){const checks=review?.["checks"];return Array.isArray(checks)?checks.filter(isRecord):[]}function checkCounts(review){const checks=checksOf(review);return`\u78BA\u8A8D\u3057\u305F\u89B3\u70B9 ${checks.length} \u4EF6\uFF08\u3046\u3061\u8B66\u544A ${checks.
|
|
15
|
+
filter(check=>check["severity"]==="warning").length} \u4EF6\uFF09`}function reasonsMap(body){return isRecord(body["reasons"])?body["reasons"]:{}}var CHECK_COLUMNS=["criterion_id","label","severity","acknowledged","reason_judgment","message"];function checkRows(body){const data=envelope(body,"\u7533\u8ACB\u524DAI\u30C1\u30A7\u30C3\u30AF");const reasons=reasonsMap(data);return checksOf(reviewOf(data,"\u7533\u8ACB\u524DAI\u30C1\u30A7\u30C3\u30AF")).map(check=>{const criterion=typeof check["criterio\
|
|
16
|
+
n_id"]==="string"?check["criterion_id"]:null;const reason=criterion!==null?reasons[criterion]:void 0;return{...pick(check,["criterion_id","label","severity"]),acknowledged:check["acknowledged"]===true,reason_judgment:isRecord(reason)?reason["judgment"]??null:null,message:check["message"]??null}})}function reviewRaw(body){const data=envelope(body,"\u7533\u8ACB\u524DAI\u30C1\u30A7\u30C3\u30AF");reviewOf(data,"\u7533\u8ACB\u524DAI\u30C1\u30A7\u30C3\u30AF");return withoutResult(data)}function statusNotes(doc,id,review){
|
|
17
|
+
if(review===null)return[`\u307E\u3060\u7533\u8ACB\u524DAI\u30C1\u30A7\u30C3\u30AF\u3092\u5B9F\u884C\u3057\u3066\u3044\u307E\u305B\u3093\uFF08twp ${doc.name} ai-review run ${id} --yes \u3067\u5B9F\u884C\u3067\u304D\u307E\u3059\uFF09`];const status=review["status"];if(IN_FLIGHT.has(String(status))){return[`\u751F\u6210\u4E2D\u3067\u3059\uFF08status=${String(status)}\uFF09\u3002twp ${doc.name} ai-review get ${id} \u3067\u7D50\u679C\u3092\u78BA\u304B\u3081\u3066\u304F\u3060\u3055\u3044\uFF08run \u306B --wait \u3092\u4ED8\u3051\u308B\u3068\u5B8C\u4E86\u307E\u3067\u5F85\u3061\u307E\u3059\uFF09`]}
|
|
18
|
+
if(status==="failed")return[`\u524D\u56DE\u306E\u751F\u6210\u306F\u5931\u6557\u3057\u307E\u3057\u305F\uFF08status=failed\uFF09\u3002twp ${doc.name} ai-review run ${id} --yes \u3067\u518D\u5B9F\u884C\u3067\u304D\u307E\u3059`];return[]}function getNotes(doc){return(body,input)=>{const data=envelope(body,"\u7533\u8ACB\u524DAI\u30C1\u30A7\u30C3\u30AF");const review=reviewOf(data,"\u7533\u8ACB\u524DAI\u30C1\u30A7\u30C3\u30AF");const id=input.args[0]?.trim()??"<ID>";const notes=statusNotes(doc,id,review);
|
|
19
|
+
if(review!==null&&review["status"]==="completed"){if(typeof review["summary"]==="string"&&review["summary"]!=="")notes.push(`\u8981\u7D04: ${review["summary"]}`);notes.push(`${checkCounts(review)}\u3002\u751F\u6210\u65E5\u6642 ${String(review["generated_at"]??"\u4E0D\u660E")}`)}if(data["stale"]===true)notes.push(`\u3053\u306E\u7D50\u679C\u306F${doc.label}\u306E\u4FDD\u5B58\u3088\u308A\u524D\u306E\u3082\u306E\u3067\u3059\uFF08\u5185\u5BB9\u304C\u5909\u308F\u3063\u3066\u3044\u307E\u3059\uFF09\u3002\u627F\u8A8D\u7533\u8ACB\u306E\u524D\u306B\u518D\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044`);
|
|
20
|
+
if(data["reason_editable"]===false){notes.push(data["reason_lock_reason"]==="approved"?"\u627F\u8A8D\u6E08\u307F\u306E\u305F\u3081\u3001\u78BA\u8A8D\u6E08\u307F\u306E\u7406\u7531\u306F\u5909\u66F4\u3067\u304D\u307E\u305B\u3093":"\u627F\u8A8D\u5F85\u3061\u306E\u9593\u306F\u3001\u78BA\u8A8D\u6E08\u307F\u306E\u7406\u7531\u3092\u5909\u66F4\u3067\u304D\u307E\u305B\u3093\uFF08\u5DEE\u3057\u623B\u3055\u308C\u308B\u3068\u5909\u66F4\u3067\u304D\u307E\u3059\uFF09")}notes.push("\u6307\u6458\u306E\u672C\u6587\u30FB\u5185\u8A33\uFF08details\uFF09\u30FB\u7406\u7531\u306E\u5168\u6587\u306F --o\
|
|
21
|
+
utput json \u3067\u51FA\u307E\u3059");return notes}}var WAIT_FLAG={name:"--wait",summary:"\u751F\u6210\u304C\u7D42\u308F\u308B\uFF08completed / failed\uFF09\u307E\u3067\u5F85\u3064",takesValue:false};var TIMEOUT_FLAG={name:"--timeout",summary:`--wait \u3067\u5F85\u3064\u4E0A\u9650\u306E\u79D2\u6570\uFF08\u65E2\u5B9A ${WAIT_DEFAULT_SECONDS}\u30FB\u6700\u5927 ${WAIT_MAX_SECONDS}\uFF09`,takesValue:true,placeholder:"<\u79D2>"};function waitSeconds(input,doc){const timeout=positiveInteger(input.flags,
|
|
22
|
+
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(doc,"ai-review","run"));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\uFF08\u305D\u308C\u3088\u308A\u9577\u304F\u5F85\u3064\u306A\u3089 --wait \u3092\u5916\u3057\u3001\u3042\u3068\u3067 twp ${doc.
|
|
23
|
+
name} ai-review get \u3067\u78BA\u304B\u3081\u3066\u304F\u3060\u3055\u3044\uFF09`,usageOf(doc,"ai-review","run"))}return timeout??WAIT_DEFAULT_SECONDS}function runPlan(doc){return input=>{waitSeconds(input,doc);return{method:"POST",path:reviewPath(input,doc,"run")}}}function runExecute(doc){return async(input,ctx)=>{const plan=runPlan(doc)(input);const id=input.args[0]?.trim()??"";const getHint=`twp ${doc.name} ai-review get ${id}`;let started;try{started=await ctx.send(plan)}catch(err){if(!refusedBeforeSending(
|
|
24
|
+
err))ctx.warn(`\u5B9F\u884C\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\u3002\u6253\u3061\u76F4\u3059\u524D\u306B ${getHint} \u3067\u78BA\u304B\u3081\u3066\u304F\u3060\u3055\u3044\u3002`);throw err}const data=envelope(started,"\u7533\u8ACB\u524DAI\u30C1\u30A7\u30C3\u30AF\u306E\u5B9F\u884C");const review=reviewOf(data,"\u7533\u8ACB\u524DAI\u30C1\u30A7\u30C3\u30AF\u306E\u5B9F\u884C");
|
|
25
|
+
const seconds=waitSeconds(input,doc);if(seconds===void 0||review===null||!IN_FLIGHT.has(String(review["status"]))){return data}const deadline=Date.now()+seconds*1e3;const getPlan={method:"GET",path:plan.path};ctx.warn(`\u751F\u6210\u306E\u5B8C\u4E86\u3092\u5F85\u3061\u307E\u3059\uFF08${WAIT_POLL_INTERVAL_MS/1e3} \u79D2\u304A\u304D\u30FB\u6700\u5927 ${seconds} \u79D2\uFF09\u3002`);for(;;){await sleep(WAIT_POLL_INTERVAL_MS);let latest;try{latest=reviewOf(envelope(await ctx.send(getPlan),"\u7533\u8ACB\u524DAI\u30C1\u30A7\u30C3\u30AF"),
|
|
26
|
+
"\u7533\u8ACB\u524DAI\u30C1\u30A7\u30C3\u30AF")}catch(err){ctx.warn(`\u5B9F\u884C\u306F\u53D7\u3051\u4ED8\u3051\u6E08\u307F\u3067\u3059\u304C\u3001\u5B8C\u4E86\u3092\u5F85\u3064\u9014\u4E2D\u3067\u7D50\u679C\u3092\u8AAD\u3081\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u6253\u3061\u76F4\u3059\u524D\u306B ${getHint} \u3067\u78BA\u304B\u3081\u3066\u304F\u3060\u3055\u3044\u3002`);throw err}const status=latest===null?null:String(latest["status"]);if(latest!==null&&status==="completed")return{...data,review:latest};
|
|
27
|
+
if(latest!==null&&status==="failed"){throw new ApiRejectedError(`\u7533\u8ACB\u524DAI\u30C1\u30A7\u30C3\u30AF\u306E\u751F\u6210\u306B\u5931\u6557\u3057\u307E\u3057\u305F\uFF08status=failed\uFF09\u3002twp ${doc.name} ai-review run ${id} --yes \u3067\u518D\u5B9F\u884C\u3067\u304D\u307E\u3059`)}if(Date.now()>=deadline){throw new NetworkError(`${seconds} \u79D2\u5F85\u3061\u307E\u3057\u305F\u304C\u751F\u6210\u304C\u7D42\u308F\u308A\u307E\u305B\u3093\u3067\u3057\u305F\uFF08status=${status??"\u4E0D\u660E"}\
|
|
28
|
+
\uFF09\u3002\u3042\u3068\u3067 ${getHint} \u3067\u7D50\u679C\u3092\u78BA\u304B\u3081\u3066\u304F\u3060\u3055\u3044\uFF0815 \u5206\u305F\u3063\u3066\u3082 ${status??"pending"} \u306E\u307E\u307E\u306A\u3089\u3001\u751F\u6210\u304C\u6B62\u307E\u3063\u3066\u3044\u307E\u3059\u3002run --yes \u3067\u518D\u5B9F\u884C\u3067\u304D\u307E\u3059\uFF09`)}}}}function runNotes(doc){return(body,input)=>{const data=envelope(body,"\u7533\u8ACB\u524DAI\u30C1\u30A7\u30C3\u30AF\u306E\u5B9F\u884C");const review=reviewOf(
|
|
29
|
+
data,"\u7533\u8ACB\u524DAI\u30C1\u30A7\u30C3\u30AF\u306E\u5B9F\u884C");const id=input.args[0]?.trim()??"<ID>";const notes=[];if(data["regenerated"]===false){notes.push("\u5185\u5BB9\u304C\u524D\u56DE\u306E\u5B9F\u884C\u304B\u3089\u5909\u308F\u3063\u3066\u3044\u306A\u3044\u3001\u307E\u305F\u306F\u524D\u56DE\u306E\u5B9F\u884C\u304C\u9032\u884C\u4E2D\u306E\u305F\u3081\u3001AI \u3092\u547C\u3070\u305A\u306B\u4FDD\u5B58\u6E08\u307F\u306E\u7D50\u679C\u3092\u8FD4\u3057\u307E\u3057\u305F\uFF08\u30AF\u30EC\u30B8\u30C3\u30C8\u306F\u6D88\u8CBB\u3057\u3066\u3044\u307E\u305B\u3093\uFF09")}
|
|
30
|
+
notes.push(...statusNotes(doc,id,review));if(review!==null&&review["status"]==="completed"){notes.push(`${checkCounts(review)}\u3002\u4E00\u89A7\u3068\u78BA\u8A8D\u6E08\u307F\u306E\u7406\u7531\u306F twp ${doc.name} ai-review get ${id} \u3067\u51FA\u307E\u3059`)}return notes}}function aiReviewResource(doc){return{name:"ai-review",summary:`${doc.label}\u306E\u7533\u8ACB\u524DAI\u30C1\u30A7\u30C3\u30AF\uFF08\u5B9F\u884C\u30FB\u7D50\u679C\u306E\u8868\u793A\uFF09`,operations:[{name:"run",summary:`${doc.
|
|
31
|
+
label}\u306E\u7533\u8ACB\u524DAI\u30C1\u30A7\u30C3\u30AF\u3092\u5B9F\u884C\u3059\u308B\uFF08AI \u30AF\u30EC\u30B8\u30C3\u30C8\u3092\u6D88\u8CBB\u30FB--yes \u304C\u8981\u308B\u30FB--wait \u3067\u5B8C\u4E86\u307E\u3067\u5F85\u3064\uFF09`,usage:`twp ${doc.name} ai-review run <${doc.label}ID> [--wait [--timeout <\u79D2>]] --yes`,description:`\u753B\u9762\u306E${doc.label}\u7DE8\u96C6\u306E\u300CAI\u30C1\u30A7\u30C3\u30AF\u3092\u5B9F\u884C\u300D\u3068\u540C\u3058\u304F\u3001POST ${SALES_PATH}/${doc.segment}\
|
|
32
|
+
/{id}/ai-review \u3092\u9001\u308A\u307E\u3059\u3002
|
|
33
|
+
\u3053\u3053\u3067\u30C6\u30CA\u30F3\u30C8\u306E AI \u30AF\u30EC\u30B8\u30C3\u30C8\u3092\u6D88\u8CBB\u3057\u307E\u3059\u3002\u305F\u3060\u3057\u5185\u5BB9\u304C\u524D\u56DE\u306E\u5B9F\u884C\u304B\u3089\u5909\u308F\u3063\u3066\u3044\u306A\u3044\u3001\u307E\u305F\u306F\u524D\u56DE\u306E\u5B9F\u884C\u304C\u9032\u884C\u4E2D\u306A\u3089
|
|
34
|
+
\u30B5\u30FC\u30D0\u306F AI \u3092\u547C\u3070\u305A\u306B\u4FDD\u5B58\u6E08\u307F\u306E\u7D50\u679C\u3092\u8FD4\u3057\u307E\u3059\uFF08regenerated=false\u30FB\u6D88\u8CBB\u3057\u307E\u305B\u3093\uFF09\u3002
|
|
35
|
+
\u751F\u6210\u306F\u975E\u540C\u671F\u3067\u3001\u5FDC\u7B54\u306E status \u306F\u3075\u3064\u3046 pending \u3067\u3059\u3002--wait \u3092\u4ED8\u3051\u308B\u3068 5 \u79D2\u304A\u304D\u306B\u7D50\u679C\u3092\u5F15\u304D\u3001completed \u307E\u3067\u5F85\u3061\u307E\u3059
|
|
36
|
+
\uFF08failed \u306A\u3089\u7D42\u4E86\u30B3\u30FC\u30C9 3\u3001--timeout \u79D2\u3067\u7D42\u308F\u3089\u306A\u3051\u308C\u3070\u7D42\u4E86\u30B3\u30FC\u30C9 4\u3002\u65E2\u5B9A ${WAIT_DEFAULT_SECONDS} \u79D2\u30FB\u6700\u5927 ${WAIT_MAX_SECONDS} \u79D2\uFF09\u3002
|
|
37
|
+
\u627F\u8A8D\u8005\u304C\u898B\u308B\u7533\u8ACB\u6642\u306E\u30C1\u30A7\u30C3\u30AF\uFF08\u30EF\u30FC\u30AF\u30D5\u30ED\u30FC\uFF09\u306B\u306F\u89E6\u308C\u307E\u305B\u3093\u3002ID \u306F twp ${doc.name} list \u306E id \u5217\u306E\u6570\u5B57\u3067\u3059\u3002`,destructive:true,confirmation:"AI \u30AF\u30EC\u30B8\u30C3\u30C8\u3092\u6D88\u8CBB\u3059\u308B\u64CD\u4F5C",flags:[WAIT_FLAG,TIMEOUT_FLAG],forbidden:documentForbidden,plan:runPlan(doc),plannedNotes:input=>["\u30C6\u30CA\u30F3\u30C8\u306E AI \u30AF\u30EC\u30B8\u30C3\u30C8\u3092\u6D88\u8CBB\u3057\u307E\u3059\uFF08\u5185\u5BB9\u304C\u524D\u56DE\u304B\u3089\
|
|
38
|
+
\u5909\u308F\u3063\u3066\u3044\u306A\u3051\u308C\u3070\u6D88\u8CBB\u3057\u307E\u305B\u3093\uFF09",...input.flags.has(WAIT_FLAG.name)?[`\u7D9A\u3051\u3066 GET ${reviewPath(input,doc,"run")} \u3092 ${WAIT_POLL_INTERVAL_MS/1e3} \u79D2\u304A\u304D\u306B\u9001\u308A\u3001\u5B8C\u4E86\u3092\u5F85\u3061\u307E\u3059`]:[]],execute:runExecute(doc),summarize:body=>{const data=envelope(body,"\u7533\u8ACB\u524DAI\u30C1\u30A7\u30C3\u30AF\u306E\u5B9F\u884C");const review=reviewOf(data,"\u7533\u8ACB\u524DAI\u30C1\u30A7\u30C3\u30AF\u306E\u5B9F\u884C");
|
|
39
|
+
return{status:review?.["status"]??null,regenerated:data["regenerated"]??null,checks:checksOf(review).length,generated_at:review?.["generated_at"]??null}},raw:body=>withoutResult(envelope(body,"\u7533\u8ACB\u524DAI\u30C1\u30A7\u30C3\u30AF\u306E\u5B9F\u884C")),notes:runNotes(doc)},{name:"get",summary:`${doc.label}\u306E\u7533\u8ACB\u524DAI\u30C1\u30A7\u30C3\u30AF\u306E\u7D50\u679C\u3068\u3001\u6307\u6458\u306B\u6DFB\u3048\u305F\u78BA\u8A8D\u6E08\u307F\u306E\u7406\u7531\u3092\u8868\u793A\u3059\u308B`,
|
|
40
|
+
usage:`twp ${doc.name} ai-review get <${doc.label}ID>`,description:`GET ${SALES_PATH}/${doc.segment}/{id}/ai-review\u3002\u4FDD\u5B58\u6E08\u307F\u306E\u7D50\u679C\u3092\u8FD4\u3057\u307E\u3059\uFF08AI \u306F\u547C\u3073\u307E\u305B\u3093\uFF09\u3002
|
|
41
|
+
\u4E00\u5EA6\u3082\u5B9F\u884C\u3057\u3066\u3044\u306A\u3044\u66F8\u985E\u3067\u306F\u7D50\u679C\u304C\u7A7A\u3067\u3059\uFF08\u30A8\u30E9\u30FC\u306B\u306F\u306A\u308A\u307E\u305B\u3093\uFF09\u3002
|
|
42
|
+
--output table / text / tsv \u306F\u78BA\u8A8D\u3057\u305F\u89B3\u70B91\u4EF6\uFF1D1\u884C\uFF08${CHECK_COLUMNS.join(" / ")}\uFF09\u3067\u3001severity \u304C warning \u306E\u884C\u304C\u6307\u6458\u3067\u3059\u3002
|
|
43
|
+
reason_judgment \u306F\u305D\u306E\u89B3\u70B9\u306B\u6DFB\u3048\u305F\u78BA\u8A8D\u6E08\u307F\u306E\u7406\u7531\u306E\u5224\u65AD\u3067\u3059\u3002
|
|
44
|
+
\u7406\u7531\u3092\u6DFB\u3048\u308B\u306E\u306F twp ${doc.name} ai-review-reason update <criterion_id> --${doc.name} <${doc.label}ID> \u3067\u3059\u3002`,flags:[],forbidden:documentForbidden,plan:input=>({method:"GET",path:reviewPath(input,doc,"get")}),summarize:checkRows,raw:reviewRaw,notes:getNotes(doc)}]}}function documentFlag(doc){return{name:`--${doc.name}`,summary:`${doc.label}\u306E ID\uFF08twp ${doc.name} list \u306E id \u5217\u306E\u6570\u5B57\u30FB\u5FC5\u9808\uFF09`,takesValue:true,placeholder:`\
|
|
45
|
+
<${doc.label}ID>`}}var JUDGMENT_FLAG={name:"--judgment",summary:`\u5224\u65AD\uFF08${Object.keys(JUDGMENTS).join(" / ")}\u30FB\u5FC5\u9808\uFF09`,takesValue:true,placeholder:"<\u5224\u65AD>"};var REASON_FLAGS=[JUDGMENT_FLAG,{name:"--text",summary:`\u7406\u7531\u306E\u672C\u6587\uFF08${REASON_MAX_CHARS.toLocaleString()} \u6587\u5B57\u307E\u3067\uFF09`,takesValue:true,placeholder:"<\u7406\u7531>"},{name:"--text-file",summary:"\u7406\u7531\u306E\u672C\u6587\u3092\u8AAD\u3080\u30D5\u30A1\u30A4\u30EB\uFF08- \u3067\u6A19\u6E96\u5165\u529B\uFF09",
|
|
46
|
+
takesValue:true,placeholder:"<\u30D1\u30B9>"},{name:"--label",summary:"\u8A18\u9332\u306B\u6B8B\u3059\u6307\u6458\u306E\u30E9\u30D9\u30EB\uFF08\u7701\u7565\u6642\u306F\u4FDD\u5B58\u6E08\u307F\u306E\u30C1\u30A7\u30C3\u30AF\u7D50\u679C\u304B\u3089\u88DC\u3046\uFF09",takesValue:true,placeholder:"<\u30E9\u30D9\u30EB>"}];function judgmentOf(input,doc){const raw=nonEmpty(input.flags,JUDGMENT_FLAG.name)?.trim();const list=Object.entries(JUDGMENTS).map(([key,label])=>`${key}\uFF08${label}\uFF09`).join("\
|
|
47
|
+
/ ");if(raw===void 0)throw new UsageError(`--judgment \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${list}`,usageOf(doc,"ai-review-reason","update"));if(!Object.hasOwn(JUDGMENTS,raw))throw new UsageError(`--judgment \u306F ${list} \u306E\u3069\u308C\u304B\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${raw}`,usageOf(doc,"ai-review-reason","update"));return raw}function truncateChars(text,max){const chars=[...text];return chars.length<=max?text:chars.slice(0,max).join("")}function prepareReason(doc){
|
|
48
|
+
return async(input,ctx)=>{const usage=usageOf(doc,"ai-review-reason","update");const target=reasonTarget(input,doc,"update");const judgment=judgmentOf(input,doc);const text=await trimmedBody(input,{flag:"--text",fileFlag:"--text-file",label:"\u7406\u7531",maxChars:REASON_MAX_CHARS,usage});if(text===void 0||text.trim()==="")throw new UsageError("\u7406\u7531\u3092 --text <\u672C\u6587> \u304B --text-file <\u30D1\u30B9> \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",usage);const explicit=nonEmpty(
|
|
49
|
+
input.flags,"--label");if(explicit!==void 0&&charCount(explicit.trim())>LABEL_MAX_CHARS){throw new UsageError(`--label \u306F ${LABEL_MAX_CHARS} \u6587\u5B57\u307E\u3067\u3067\u3059\uFF08${charCount(explicit.trim())} \u6587\u5B57\uFF09`,usage)}const current=await ctx.resolver.salesJson(target.reviewPath,"\u7533\u8ACB\u524DAI\u30C1\u30A7\u30C3\u30AF\u306E\u7D50\u679C");const check=checksOf(reviewOf(current,"\u7533\u8ACB\u524DAI\u30C1\u30A7\u30C3\u30AF")).find(row=>row["criterion_id"]===target.criterion);
|
|
50
|
+
const label=explicit??(typeof check?.["label"]==="string"?truncateChars(check["label"],LABEL_MAX_CHARS):void 0);return withResolved(input,{judgment,text,missing:check===void 0?"1":"0",...label===void 0||label===""?{}:{label}})}}function reasonPlan(doc){return input=>({method:"PUT",path:reasonTarget(input,doc,"update").reasonPath,body:{judgment:requireResolved(input,"judgment"),reason:requireResolved(input,"text"),criterion_label:input.resolved?.["label"]??null}})}function reasonPlannedNotes(doc){
|
|
51
|
+
return input=>input.resolved?.["missing"]==="1"?[`\u4FDD\u5B58\u6E08\u307F\u306E\u30C1\u30A7\u30C3\u30AF\u7D50\u679C\u306B\u6307\u6458 ${input.args[0]?.trim()??""} \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u7406\u7531\u306F\u4FDD\u5B58\u3055\u308C\u307E\u3059\u304C\u3001\u305D\u306E\u6307\u6458\u304C\u51FA\u308B\u307E\u3067\u753B\u9762\u306B\u306F\u8868\u793A\u3055\u308C\u307E\u305B\u3093\uFF08\u6307\u6458 ID \u306F twp ${doc.name} ai-review get \u306E criterion_id \u5217\u3067\u3059\uFF09`]:[]}
|
|
52
|
+
function reasonOf(body){const data=envelope(body,"\u78BA\u8A8D\u6E08\u307F\u306E\u7406\u7531\u306E\u4FDD\u5B58");if(!isRecord(data["reason"]))throw new ApiResponseError("\u78BA\u8A8D\u6E08\u307F\u306E\u7406\u7531\u306E\u4FDD\u5B58\u306E\u5FDC\u7B54\u306B reason \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002");return data["reason"]}function deleteAck(body){const data=envelope(body,"\u78BA\u8A8D\u6E08\u307F\u306E\u7406\u7531\u306E\u53D6\u6D88");
|
|
53
|
+
return{result:data["result"]}}function aiReviewReasonResource(doc){const flag=documentFlag(doc);return{name:"ai-review-reason",summary:`${doc.label}\u306E\u7533\u8ACB\u524DAI\u30C1\u30A7\u30C3\u30AF\u306E\u6307\u6458\u306B\u6DFB\u3048\u308B\u300C\u78BA\u8A8D\u6E08\u307F\u306E\u7406\u7531\u300D\uFF08\u767B\u9332\u30FB\u66F4\u65B0\u30FB\u53D6\u6D88\uFF09`,operations:[{name:"update",summary:"\u6307\u64581\u4EF6\u306B\u78BA\u8A8D\u6E08\u307F\u306E\u7406\u7531\u3092\u6DFB\u3048\u308B\uFF08\u3042\u308C\u3070\u66F8\u304D\u63DB\u3048\u308B\uFF09",
|
|
54
|
+
usage:`twp ${doc.name} ai-review-reason update <\u6307\u6458ID> --${doc.name} <${doc.label}ID> --judgment <\u5224\u65AD> (--text <\u7406\u7531> | --text-file <\u30D1\u30B9>) [--label <\u30E9\u30D9\u30EB>]`,description:`PUT ${SALES_PATH}/${doc.segment}/{id}/ai-review/reasons/{criterion_id}\u3002\u753B\u9762\u306E\u6307\u6458\u306E\u300C\u7406\u7531\u3092\u8A18\u9332\u300D\u3068\u540C\u3058\u3067\u3059\u3002
|
|
55
|
+
<\u6307\u6458ID> \u306F twp ${doc.name} ai-review get \u306E criterion_id \u5217\u306E\u5024\u3067\u3059\uFF08\u7406\u7531\u306F\u6307\u6458\u306E\u89B3\u70B9\u306B\u4ED8\u304F\u306E\u3067\u3001\u30C1\u30A7\u30C3\u30AF\u3092\u518D\u5B9F\u884C\u3057\u3066\u3082\u6B8B\u308A\u307E\u3059\uFF09\u3002
|
|
56
|
+
--judgment: ${Object.entries(JUDGMENTS).map(([key,label])=>`${key}\uFF08${label}\uFF09`).join(" / ")}
|
|
57
|
+
\u9001\u308B\u524D\u306B\u4FDD\u5B58\u6E08\u307F\u306E\u30C1\u30A7\u30C3\u30AF\u7D50\u679C\u3092\u8AAD\u307F\uFF08--dry-run \u3067\u3082\u8AAD\u307F\u307E\u3059\uFF09\u3001--label \u3092\u7701\u3051\u3070\u305D\u306E\u6307\u6458\u306E\u30E9\u30D9\u30EB\u3092\u88DC\u3044\u307E\u3059\u3002
|
|
58
|
+
\u7D50\u679C\u306B\u7121\u3044\u6307\u6458 ID \u3067\u3082\u4FDD\u5B58\u306F\u3057\u307E\u3059\u304C\u3001\u305D\u306E\u65E8\u3092 stderr \u306B\u51FA\u3057\u307E\u3059\u3002
|
|
59
|
+
\u627F\u8A8D\u5F85\u3061\u30FB\u627F\u8A8D\u6E08\u307F\u306E\u9593\u306F\u30B5\u30FC\u30D0\u304C\u65AD\u308A\u307E\u3059\uFF08\u5DEE\u3057\u623B\u3055\u308C\u308B\u3068\u5909\u66F4\u3067\u304D\u307E\u3059\uFF09\u3002`,flags:[flag,...REASON_FLAGS],forbidden:documentForbidden,prepare:prepareReason(doc),plan:reasonPlan(doc),plannedNotes:reasonPlannedNotes(doc),summarize:body=>pick(reasonOf(body),["criterion_id","criterion_label","judgment","reason","updated_at"]),raw:reasonOf},{name:"delete",summary:"\
|
|
60
|
+
\u6307\u6458\u306B\u6DFB\u3048\u305F\u78BA\u8A8D\u6E08\u307F\u306E\u7406\u7531\u3092\u53D6\u308A\u6D88\u3059\uFF08--yes \u304C\u8981\u308B\uFF09",usage:`twp ${doc.name} ai-review-reason delete <\u6307\u6458ID> --${doc.name} <${doc.label}ID> --yes`,description:`DELETE ${SALES_PATH}/${doc.segment}/{id}/ai-review/reasons/{criterion_id}\u3002\u7406\u7531\u304C\u7121\u3044\u6307\u6458\u3078\u306E\u53D6\u6D88\u3082\u30B5\u30FC\u30D0\u306F\u6210\u529F\u3092\u8FD4\u3057\u307E\u3059\u3002
|
|
61
|
+
\u627F\u8A8D\u5F85\u3061\u30FB\u627F\u8A8D\u6E08\u307F\u306E\u9593\u306F\u30B5\u30FC\u30D0\u304C\u65AD\u308A\u307E\u3059\u3002`,destructive:true,flags:[flag],forbidden:documentForbidden,plan:input=>({method:"DELETE",path:reasonTarget(input,doc,"delete").reasonPath}),summarize:deleteAck,raw:deleteAck}]}}var estimateAiReviewResources=[aiReviewResource(ESTIMATE),aiReviewReasonResource(ESTIMATE)];var invoiceAiReviewResources=[aiReviewResource(INVOICE),aiReviewReasonResource(INVOICE)];var contractAiReviewResources=[
|
|
62
|
+
aiReviewResource(CONTRACT),aiReviewReasonResource(CONTRACT)];function readPageCursor(body){const pagination=isRecord(body)&&isRecord(body["pagination"])?body["pagination"]:void 0;if(pagination===void 0)return{hasMore:"pagination \u304C\u7121\u3044\u5FDC\u7B54",cursor:void 0};const hasMore=pagination["has_more"];const page=pagination["page"];if(hasMore!==true)return{hasMore,cursor:null};return{hasMore,cursor:Number.isInteger(page)?String(page+1):void 0}}var LIST_COLUMNS=["id","document_type","doc\
|
|
63
|
+
ument_no","company_name","criterion_id","judgment","knowledge_pr_number","created_at"];var REASON_LIST_FLAGS=[{name:"--customer",summary:"\u53D6\u5F15\u5148\u3067\u7D5E\u308B\uFF08\u540D\u524D\u304B ID\uFF09",takesValue:true,placeholder:"<\u53D6\u5F15\u5148>"},{name:"--criterion",summary:"\u6307\u6458\u306E ID\uFF08criterion_id\uFF09\u3067\u7D5E\u308B",takesValue:true,placeholder:"<\u6307\u6458ID>"},...PAGE_NUMBER_LIST_FLAGS];async function prepareList(input,ctx){const customer=nonEmpty(input.flags,
|
|
64
|
+
"--customer");if(customer===void 0)return input;return withResolved(input,{customer:(await ctx.resolver.company(customer,{flag:"--customer",source:"sales",mustExist:true})).id})}function listPlan(input){if(input.args.length>0)throw new UsageError(`\u4F59\u5206\u306A\u5F15\u6570\u304C\u3042\u308A\u307E\u3059: ${input.args.join(" ")}`,"twp ai-review-reason list help");const criterion=nonEmpty(input.flags,"--criterion")?.trim();if(criterion!==void 0&&charCount(criterion)>128)throw new UsageError("-\
|
|
65
|
+
-criterion \u306F 128 \u6587\u5B57\u307E\u3067\u3067\u3059","twp ai-review-reason list help");const limit=positiveInteger(input.flags,"--limit");const page=positiveInteger(input.flags,"--cursor");return{method:"GET",path:REASONS_PATH,query:{company_id:input.resolved?.["customer"],criterion_id:criterion,page:page===void 0?void 0:String(page),per_page:limit===void 0?void 0:String(Math.min(limit,100))}}}function listItems(body){const data=envelope(body,"\u78BA\u8A8D\u6E08\u307F\u306E\u7406\u7531\u306E\u4E00\u89A7");
|
|
66
|
+
if(!Array.isArray(data["items"]))throw new ApiResponseError("\u78BA\u8A8D\u6E08\u307F\u306E\u7406\u7531\u306E\u4E00\u89A7\u306E\u5FDC\u7B54\u306B items \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002");return data["items"].filter(isRecord)}function listNotes(body){const data=envelope(body,"\u78BA\u8A8D\u6E08\u307F\u306E\u7406\u7531\u306E\u4E00\u89A7");const pagination=isRecord(data["pagination"])?data["paginatio\
|
|
67
|
+
n"]:{};const{page,per_page:perPage,total}=pagination;if(Array.isArray(data["items"])&&data["items"].length===0&&Number.isInteger(page)&&page>1&&Number.isInteger(total)&&Number.isInteger(perPage)){return[`\u30DA\u30FC\u30B8 ${String(page)} \u306F\u7BC4\u56F2\u5916\u3067\u3059\uFF08\u5168 ${Math.max(1,Math.ceil(total/perPage))} \u30DA\u30FC\u30B8\u30FB${String(total)} \u4EF6\uFF09`]}return[]}function targetPathOf(input){const raw=nonEmpty(input.flags,"--target-path")?.trim();if(raw===void 0)return void 0;
|
|
68
|
+
if(!raw.startsWith(TARGET_PREFIX)||!raw.endsWith(".md")||raw.includes("..")||!/^[A-Za-z0-9][A-Za-z0-9._/-]*$/.test(raw)||charCount(raw)>255){throw new UsageError(`--target-path \u306F ${TARGET_PREFIX} \u914D\u4E0B\u306E Markdown \u30D5\u30A1\u30A4\u30EB\u3060\u3051\u3092\u6307\u5B9A\u3067\u304D\u307E\u3059: ${raw}`,"twp ai-review-reason publish help")}return raw}var REASON_ID_FLAG={name:"--reason",summary:`\u7406\u7531\u306E ID\uFF08twp ai-review-reason list \u306E id \u5217\u3002\u7E70\u308A\u8FD4\u3057\u3066 ${MAX_REASONS}\
|
|
69
|
+
\u4EF6\u307E\u3067\uFF09`,takesValue:true,placeholder:"<\u7406\u7531ID>",repeatable:true};function reasonIds(input,op){const usage=`twp ai-review-reason ${op} help`;if(input.args.length>0)throw new UsageError(`\u4F59\u5206\u306A\u5F15\u6570\u304C\u3042\u308A\u307E\u3059: ${input.args.join(" ")}\uFF08\u7406\u7531\u306F --reason \u3067\u6E21\u3057\u307E\u3059\uFF09`,usage);const raw=repeatedValues(input,REASON_ID_FLAG.name).map(value=>value.trim());if(raw.length===0)throw new UsageError("--reason\
|
|
70
|
+
<\u7406\u7531ID> \u30921\u3064\u4EE5\u4E0A\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08twp ai-review-reason list \u306E id \u5217\uFF09",usage);const bad=raw.filter(value=>!isExactNumericId(value));if(bad.length>0)throw new UsageError(`\u7406\u7531\u306E ID \u306F\u6570\u5B57\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${bad.join(" ")}`,usage);const ids=[...new Set(raw)].map(Number);if(ids.length>MAX_REASONS)throw new UsageError(`--reason \u306F ${MAX_REASONS} \u4EF6\u307E\u3067\u3067\u3059\uFF08${ids.
|
|
71
|
+
length} \u4EF6\uFF09`,usage);return ids}function draftOf(body){const data=envelope(body,"\u8FFD\u8A18\u6587\u6848\u306E\u751F\u6210");if(typeof data["draft"]!=="string")throw new ApiResponseError("\u8FFD\u8A18\u6587\u6848\u306E\u751F\u6210\u306E\u5FDC\u7B54\u306B draft \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002");return data}function prOf(body){const data=envelope(body,"\u8FFD\u8A18PR\u306E\u4F5C\u6210");if(typeof data["\
|
|
72
|
+
pull_request_url"]!=="string")throw new ApiResponseError("\u8FFD\u8A18PR\u306E\u4F5C\u6210\u306E\u5FDC\u7B54\u306B pull_request_url \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002");return data}async function preparePublish(input){const usage="twp ai-review-reason publish help";reasonIds(input,"publish");targetPathOf(input);const draft=await trimmedBody(input,{flag:"--draft",fileFlag:"--draft-file",label:"\u8FFD\u8A18\u6587\u6848",
|
|
73
|
+
maxChars:DRAFT_MAX_CHARS,usage});if(draft===void 0||draft.trim()===""){throw new UsageError("\u8FFD\u8A18\u3059\u308B\u6587\u6848\u3092 --draft-file <\u30D1\u30B9> \u304B --draft <\u6587\u6848> \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08twp ai-review-reason preview \u2026 --output text \u3067\u4F5C\u308C\u307E\u3059\uFF09",usage)}return withResolved(input,{draft})}function draftPlan(input){return{method:"POST",path:`${REASONS_PATH}/knowledge-draft`,body:{reason_ids:reasonIds(input,
|
|
74
|
+
"preview")}}}function publishPlan(input){return{method:"POST",path:`${REASONS_PATH}/knowledge-pr`,body:{reason_ids:reasonIds(input,"publish"),draft:requireResolved(input,"draft"),target_path:targetPathOf(input)??null}}}var aiReviewReasonDomain={name:"ai-review-reason",summary:"\u7533\u8ACB\u524DAI\u30C1\u30A7\u30C3\u30AF\u306E\u78BA\u8A8D\u6E08\u307F\u306E\u7406\u7531\uFF08\u66F8\u985E\u3092\u8DE8\u3050\u4E00\u89A7\u30FB\u793E\u5185\u30CA\u30EC\u30C3\u30B8\u3078\u306E\u8FFD\u8A18\u6587\u6848\u306E\u751F\u6210\u30FB\u8FFD\u8A18PR\u306E\u4F5C\u6210\u3002\u8CA9\u58F2\u7BA1\u7406\u306E\u7BA1\u7406\u8005\uFF09",
|
|
75
|
+
operations:[{name:"list",summary:"\u898B\u7A4D\u30FB\u8ACB\u6C42\u30FB\u53D6\u5F15\u5951\u7D04\u306E\u6307\u6458\u306B\u6DFB\u3048\u3089\u308C\u305F\u78BA\u8A8D\u6E08\u307F\u306E\u7406\u7531\u3092\u4E00\u89A7\u3059\u308B\uFF08\u65B0\u3057\u3044\u9806\uFF09",usage:"twp ai-review-reason list [--customer <\u53D6\u5F15\u5148>] [--criterion <\u6307\u6458ID>] [--limit <\u4EF6\u6570>] [--all]",description:`GET ${REASONS_PATH}\u3002\u753B\u9762\u306E\u300CAI\u30C1\u30A7\u30C3\u30AF\u7406\u7531\u4E00\u89A7\u300D\u3068\u540C\u3058\u3067\u3001\u8CA9\u58F2\u7BA1\u7406\u306E\u7BA1\u7406\u8005\u3060\u3051\u304C\u4F7F\u3048\u307E\u3059\u3002
|
|
76
|
+
--output table / text / tsv \u306F\u8981\u7D04\u5217\uFF08${LIST_COLUMNS.join(" / ")}\uFF09\u3067\u3059\u3002knowledge_pr_number \u304C\u3042\u308B\u3082\u306E\u306F\u8FFD\u8A18PR\u3092\u4F5C\u6210\u6E08\u307F\u3067\u3059\u3002
|
|
77
|
+
\u7D5E\u308A\u8FBC\u307F\u306E\u5019\u88DC\uFF08\u6307\u6458\u306E\u7A2E\u5225\u3068\u4EF6\u6570\uFF09\u3068\u7406\u7531\u306E\u5168\u6587\u306F --output json \u3067\u51FA\u307E\u3059\u3002
|
|
78
|
+
|
|
79
|
+
${LIST_PAGING_HELP}
|
|
80
|
+
\u26A0 \u3053\u306E\u4E00\u89A7\u306F\u30DA\u30FC\u30B8\u756A\u53F7\u3067\u4F4D\u7F6E\u3092\u6307\u5B9A\u3057\u307E\u3059\uFF08--cursor \u306F\u30DA\u30FC\u30B8\u756A\u53F7\u3067\u3059\uFF09\u3002\u4E26\u3073\u306F\u767B\u9332\u306E\u65B0\u3057\u3044\u9806\u3067\u3059\u3002
|
|
81
|
+
\u8FBF\u3063\u3066\u3044\u308B\u6700\u4E2D\u306B\u7406\u7531\u304C\u5897\u6E1B\u3059\u308B\u3068\u3001\u53D6\u308A\u3053\u307C\u3057\u30FB\u91CD\u8907\u304C\u8D77\u3053\u308A\u5F97\u307E\u3059\u3002`,flags:REASON_LIST_FLAGS,forbidden:reasonsForbidden,paging:envelopePaging({label:"\u78BA\u8A8D\u6E08\u307F\u306E\u7406\u7531\u306E\u4E00\u89A7",cursorParam:"page",readCursor:readPageCursor}),prepare:prepareList,plan:listPlan,summarize:body=>listItems(body).map(row=>pick(row,LIST_COLUMNS)),raw:listItems,
|
|
82
|
+
notes:listNotes},{name:"preview",summary:"\u9078\u3093\u3060\u7406\u7531\u304B\u3089\u793E\u5185\u30CA\u30EC\u30C3\u30B8\u3078\u306E\u8FFD\u8A18\u6587\u6848\u3092\u751F\u6210\u3059\u308B\uFF08AI \u30AF\u30EC\u30B8\u30C3\u30C8\u3092\u6D88\u8CBB\u30FB--yes \u304C\u8981\u308B\uFF09",usage:"twp ai-review-reason preview --reason <\u7406\u7531ID> [--reason <\u7406\u7531ID>]... --yes",description:`POST ${REASONS_PATH}/knowledge-draft\u3002\u753B\u9762\u306E\u300C\u6587\u6848\u3092\u751F\u6210\u300D\u3068\u540C\u3058\u3067\u3001\u30C6\u30CA\u30F3\u30C8\u306E AI \u30AF\u30EC\u30B8\u30C3\u30C8\u3092\u6D88\u8CBB\u3057\u307E\u3059\u3002
|
|
83
|
+
\u6587\u6848\u306B\u53D6\u5F15\u5148\u540D\u30FB\u6848\u4EF6\u540D\u304C\u6DF7\u3056\u308B\u3068\u30B5\u30FC\u30D0\u304C\u4F5C\u308A\u76F4\u3057\u3001\u305D\u308C\u3067\u3082\u6DF7\u3056\u308C\u3070\u4E2D\u6B62\u3057\u3066\u8A72\u5F53\u8A9E\u3092\u8FD4\u3057\u307E\u3059\uFF08\u3053\u306E\u3068\u304D\u3082\u30AF\u30EC\u30B8\u30C3\u30C8\u306F\u6D88\u8CBB\u3057\u3066\u3044\u307E\u3059\uFF09\u3002
|
|
84
|
+
\u4E2D\u6B62\u3055\u308C\u305F\u3089\u3001\u7406\u7531\u306E\u672C\u6587\u304B\u3089\u53D6\u5F15\u5148\u540D\u30FB\u6848\u4EF6\u540D\u3092\u5916\u3057\u3066\u304B\u3089\u518D\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u6587\u6848\u3060\u3051\u3092\u76F4\u3057\u3066\u3082\u3001\u7406\u7531\u306E\u539F\u6587\u306F PR \u672C\u6587\u306B\u8F09\u308A\u307E\u3059\uFF09\u3002
|
|
85
|
+
\u751F\u6210\u3059\u308B\u3060\u3051\u3067\u3001\u3069\u3053\u306B\u3082\u53CD\u6620\u3057\u307E\u305B\u3093\u3002--output text \u3067\u6587\u6848\u306E\u672C\u6587\u3060\u3051\u304C\u51FA\u308B\u306E\u3067\u3001\u30D5\u30A1\u30A4\u30EB\u306B\u4FDD\u5B58\u3057\u3066\u78BA\u304B\u3081\u30FB\u76F4\u3057\u3066\u304B\u3089
|
|
86
|
+
twp ai-review-reason publish --reason \u2026 --draft-file <\u30D1\u30B9> --yes
|
|
87
|
+
\u3067\u8FFD\u8A18PR\u3092\u4F5C\u308A\u307E\u3059\u3002`,destructive:true,confirmation:"AI \u30AF\u30EC\u30B8\u30C3\u30C8\u3092\u6D88\u8CBB\u3059\u308B\u64CD\u4F5C",flags:[REASON_ID_FLAG],forbidden:reasonsForbidden,plan:draftPlan,plannedNotes:()=>["\u30C6\u30CA\u30F3\u30C8\u306E AI \u30AF\u30EC\u30B8\u30C3\u30C8\u3092\u6D88\u8CBB\u3057\u307E\u3059\uFF08\u751F\u6210\u3057\u305F\u6587\u6848\u306F\u3069\u3053\u306B\u3082\u53CD\u6620\u3057\u307E\u305B\u3093\uFF09"],execute:async(input,ctx)=>{try{return await ctx.
|
|
88
|
+
send(draftPlan(input))}catch(err){if(err instanceof ApiError&&err.status===422&&err.body?.error==="draft_generation_failed"){ctx.warn("\u6587\u6848\u306E\u751F\u6210\u306F\u5B9F\u884C\u3055\u308C\u307E\u3057\u305F\u304C\u3001\u30B5\u30FC\u30D0\u304C\u4E2D\u6B62\u3057\u307E\u3057\u305F\uFF08AI \u30AF\u30EC\u30B8\u30C3\u30C8\u306F\u6D88\u8CBB\u3057\u3066\u3044\u307E\u3059\uFF09\u3002")}else if(!refusedBeforeSending(err)){ctx.warn("\u6587\u6848\u306E\u751F\u6210\u306F\u9001\u4FE1\u3057\u307E\u3057\u305F\u304C\u3001\u7D50\u679C\u3092\u53D7\u3051\u53D6\u308C\u307E\u305B\u3093\u3067\u3057\u305F\u3002AI \u30AF\u30EC\u30B8\u30C3\u30C8\u3092\u6D88\u8CBB\u3057\u305F\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002\u6253\u3061\u76F4\u3059\u3068\u3082\u3046\u4E00\u5EA6\u6D88\u8CBB\u3057\u307E\u3059\u3002")}
|
|
89
|
+
throw err}},summarize:body=>{const data=draftOf(body);return{reasons:Array.isArray(data["reasons"])?data["reasons"].length:null,regenerated:data["regenerated"]??null,draft:data["draft"]}},raw:body=>withoutResult(draftOf(body)),document:body=>String(draftOf(body)["draft"]),notes:body=>[...draftOf(body)["regenerated"]===true?["1\u56DE\u76EE\u306E\u6587\u6848\u306B\u53D6\u5F15\u5148\u540D\u30FB\u6848\u4EF6\u540D\u304C\u6DF7\u3056\u3063\u305F\u305F\u3081\u3001\u4F5C\u308A\u76F4\u3057\u305F\u6587\u6848\u3067\u3059"]:
|
|
90
|
+
[],"\u6587\u6848\u306F\u4E0B\u66F8\u304D\u3067\u3059\uFF08\u307E\u3060\u3069\u3053\u306B\u3082\u53CD\u6620\u3057\u3066\u3044\u307E\u305B\u3093\uFF09\u3002\u78BA\u304B\u3081\u3066\u304B\u3089 twp ai-review-reason publish --draft-file <\u30D1\u30B9> \u3067\u8FFD\u8A18PR\u3092\u4F5C\u308C\u307E\u3059"]},{name:"publish",summary:"\u78BA\u304B\u3081\u305F\u6587\u6848\u3067\u793E\u5185\u30CA\u30EC\u30C3\u30B8\u3078\u306E\u8FFD\u8A18PR\u3092\u4F5C\u308B\uFF08GitHub \u306B\u66F8\u304D\u8FBC\u3080\u30FB--yes \u304C\u8981\u308B\uFF09",
|
|
91
|
+
usage:"twp ai-review-reason publish --reason <\u7406\u7531ID> [--reason <\u7406\u7531ID>]... (--draft-file <\u30D1\u30B9> | --draft <\u6587\u6848>) [--target-path <checklists/\u2026.md>] --yes",description:`POST ${REASONS_PATH}/knowledge-pr\u3002\u753B\u9762\u306E\u300CPR\u3092\u4F5C\u6210\u300D\u3068\u540C\u3058\u3067\u3059\uFF08AI \u306F\u547C\u3073\u307E\u305B\u3093\uFF09\u3002
|
|
92
|
+
\u30B5\u30FC\u30D0\u306B\u8A2D\u5B9A\u3055\u308C\u305F\u793E\u5185\u30CA\u30EC\u30C3\u30B8\u306E\u30EA\u30DD\u30B8\u30C8\u30EA\u306B\u3001\u65E2\u5B9A\u306E\u30D6\u30E9\u30F3\u30C1\u304B\u3089\u65B0\u3057\u3044\u30D6\u30E9\u30F3\u30C1\u3092\u5207\u3063\u3066 --target-path \u306E\u30D5\u30A1\u30A4\u30EB\u3078\u6587\u6848\u3092\u8FFD\u8A18\u3057\u3001PR \u3092\u958B\u304D\u307E\u3059\u3002
|
|
93
|
+
PR \u306E\u672C\u6587\u306B\u306F\u3001\u9078\u3093\u3060\u7406\u7531\u306E\u6307\u6458\u30FB\u5224\u65AD\u30FB\u7406\u7531\u306E\u539F\u6587\u304C\u305D\u306E\u307E\u307E\u8F09\u308A\u307E\u3059\u3002\u81EA\u52D5\u3067\u306F\u30DE\u30FC\u30B8\u3055\u308C\u307E\u305B\u3093\u3002
|
|
94
|
+
--target-path \u306F ${TARGET_PREFIX} \u914D\u4E0B\u306E .md \u3060\u3051\u3067\u3001\u7701\u7565\u6642\u306F ${DEFAULT_TARGET} \u3067\u3059\u3002
|
|
95
|
+
\u53D6\u5F15\u5148\u540D\u30FB\u6848\u4EF6\u540D\u306E\u6DF7\u5165\u3092\u30B5\u30FC\u30D0\u304C\u76F4\u524D\u306B\u691C\u67FB\u3059\u308B\u306E\u306F**\u6587\u6848\u3060\u3051**\u3067\u3059\u3002\u7406\u7531\u306E\u539F\u6587\u306F\u691C\u67FB\u3055\u308C\u305A\u306B PR \u672C\u6587\u3078\u8F09\u308B\u306E\u3067\u3001
|
|
96
|
+
\u9078\u3076\u7406\u7531\u306E\u672C\u6587\u306B\u53D6\u5F15\u5148\u540D\u30FB\u6848\u4EF6\u540D\u304C\u7121\u3044\u3053\u3068\u3092\u78BA\u304B\u3081\u3066\u304F\u3060\u3055\u3044\uFF08twp ai-review-reason list --output json \u306E reason\uFF09\u3002
|
|
97
|
+
\u4F5C\u3063\u305F PR \u306F\u9589\u3058\u3066\u3082\u672C\u6587\u304C\u5C65\u6B74\u306B\u6B8B\u308A\u3001\u4F7F\u3063\u305F\u7406\u7531\u306B\u306F PR \u756A\u53F7\u304C\u8A18\u9332\u3055\u308C\u3066\u540C\u3058\u7406\u7531\u3067\u306F2\u5EA6\u3068\u4F5C\u308C\u307E\u305B\u3093\uFF08list \u306E knowledge_pr_number \u5217\uFF09\u3002`,destructive:true,confirmation:"GitHub \u306B PR \u3092\u4F5C\u308B\uFF08\u5916\u90E8\u3078\u66F8\u304D\u8FBC\u3080\uFF09\u64CD\u4F5C",flags:[REASON_ID_FLAG,{name:"\
|
|
98
|
+
--draft-file",summary:`\u8FFD\u8A18\u3059\u308B\u6587\u6848\u306E\u30D5\u30A1\u30A4\u30EB\uFF08- \u3067\u6A19\u6E96\u5165\u529B\u30FB${DRAFT_MAX_CHARS.toLocaleString()} \u6587\u5B57\u307E\u3067\uFF09`,takesValue:true,placeholder:"<\u30D1\u30B9>"},{name:"--draft",summary:"\u8FFD\u8A18\u3059\u308B\u6587\u6848\u3092\u76F4\u63A5\u6E21\u3059",takesValue:true,placeholder:"<\u6587\u6848>"},{name:"--target-path",summary:`\u8FFD\u8A18\u5148\u306E\u30D5\u30A1\u30A4\u30EB\uFF08${TARGET_PREFIX} \u914D\u4E0B\u306E .md\u30FB\u65E2\u5B9A ${DEFAULT_TARGET}\
|
|
99
|
+
\uFF09`,takesValue:true,placeholder:"<\u30D1\u30B9>"}],forbidden:reasonsForbidden,prepare:preparePublish,plan:publishPlan,plannedNotes:input=>["GitHub \u306B PR \u3092\u4F5C\u308A\u307E\u3059\u3002\u9589\u3058\u3066\u3082 PR \u306E\u672C\u6587\u306F\u5C65\u6B74\u306B\u6B8B\u308A\u3001\u4F7F\u3063\u305F\u7406\u7531\u306B\u306F PR \u756A\u53F7\u304C\u8A18\u9332\u3055\u308C\u307E\u3059\uFF08\u540C\u3058\u7406\u7531\u3067\u306F2\u5EA6\u3068\u4F5C\u308C\u307E\u305B\u3093\uFF09"," \u5B9B\u5148: \u30B5\u30FC\u30D0\u306B\u8A2D\u5B9A\u3055\u308C\u305F\u793E\u5185\u30CA\u30EC\u30C3\u30B8\
|
|
100
|
+
\u306E\u30EA\u30DD\u30B8\u30C8\u30EA\uFF08\u65E2\u5B9A\u306E\u30D6\u30E9\u30F3\u30C1\u304B\u3089\u65B0\u3057\u3044\u30D6\u30E9\u30F3\u30C1\u3092\u5207\u308A\u307E\u3059\u3002\u30EA\u30DD\u30B8\u30C8\u30EA\u540D\u3068\u30D6\u30E9\u30F3\u30C1\u540D\u306F\u5FDC\u7B54\u306B\u51FA\u307E\u3059\uFF09",` \u8FFD\u8A18\u5148: ${targetPathOf(input)??DEFAULT_TARGET}`,` PR \u672C\u6587: \u9078\u3093\u3060\u7406\u7531 ${reasonIds(input,"publish").length} \u4EF6\u306E\u6307\u6458\u30FB\u5224\u65AD\u30FB\u7406\u7531\u306E\u539F\u6587\uFF08\u539F\u6587\u306F\u53D6\u5F15\u5148\u540D\u30FB\u6848\u4EF6\u540D\u306E\u691C\u67FB\u3092\u53D7\u3051\u307E\u305B\u3093\uFF09`],
|
|
101
|
+
execute:async(input,ctx)=>{try{return await ctx.send(publishPlan(input))}catch(err){if(!refusedBeforeSending(err)){ctx.warn("PR \u306E\u4F5C\u6210\u306F\u9001\u4FE1\u3057\u307E\u3057\u305F\u304C\u3001\u7D50\u679C\u3092\u53D7\u3051\u53D6\u308C\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u4F5C\u6210\u6E08\u307F\u306E\u3053\u3068\u304C\u3042\u308A\u307E\u3059\u3002\u6253\u3061\u76F4\u3059\u524D\u306B twp ai-review-reason list \u306E knowledge_pr_number \u5217\u3067\u78BA\u304B\u3081\u3066\u304F\u3060\u3055\u3044\u3002")}
|
|
102
|
+
throw err}},summarize:body=>pick(prOf(body),["pull_request_number","pull_request_url","repository","branch","target_path"]),raw:body=>withoutResult(prOf(body)),notes:body=>[`PR \u3092\u4F5C\u308A\u307E\u3057\u305F: ${String(prOf(body)["pull_request_url"])}\uFF08\u81EA\u52D5\u3067\u306F\u30DE\u30FC\u30B8\u3055\u308C\u307E\u305B\u3093\u3002\u5185\u5BB9\u3092\u78BA\u304B\u3081\u3066\u30DE\u30FC\u30B8\u3057\u3066\u304F\u3060\u3055\u3044\uFF09`]}]};export{WAIT_POLL_INTERVAL_MS,estimateAiReviewResources,invoiceAiReviewResources,contractAiReviewResources,aiReviewReasonDomain};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{splitFlagToken}from"./chunk-QQRJLH6B.js";import{UsageError}from"./chunk-
|
|
3
|
+
import{splitFlagToken}from"./chunk-QQRJLH6B.js";import{UsageError}from"./chunk-UFND7FBC.js";function parseOperationArgs(argv,specs){const byName=new Map(specs.map(spec=>[spec.name,spec]));const args=[];const flags=new Map;const repeated=new Map;let positionalOnly=false;for(let i=0;i<argv.length;i+=1){const arg=argv[i];if(arg===void 0)continue;if(!positionalOnly&&arg==="--"){positionalOnly=true;continue}if(positionalOnly||!arg.startsWith("-")||arg==="-"){args.push(arg);continue}const{name,value:inline}=splitFlagToken(arg);const spec=byName.get(name);if(spec===void 0){const shortEquals=!arg.
|
|
4
4
|
startsWith("--")&&arg.includes("=");throw new UsageError(`\u4E0D\u660E\u306A\u30AA\u30D7\u30B7\u30E7\u30F3: ${arg}`,shortEquals?`\u77ED\u3044\u30D5\u30E9\u30B0\u306B = \u306F\u4F7F\u3048\u307E\u305B\u3093\u3002\u7A7A\u767D\u3067\u533A\u5207\u3063\u3066\u304F\u3060\u3055\u3044: ${arg.replace("="," ")}`:void 0)}if(spec.repeatable!==true&&flags.has(name)){throw new UsageError(`${name} \u304C\u8907\u6570\u56DE\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u3059`)}if(!spec.takesValue){if(inline!==void 0){
|
|
5
5
|
throw new UsageError(`${name} \u306F\u5024\u3092\u53D6\u308A\u307E\u305B\u3093`,`${name} \u306F\u6307\u5B9A\u306E\u6709\u7121\u3060\u3051\u304C\u610F\u5473\u3092\u6301\u3061\u307E\u3059\u3002`)}flags.set(name,"");continue}if(inline!==void 0){addValue(flags,repeated,spec,name,inline);continue}const next=argv[i+1];if(next===void 0||next.startsWith("-")&&next!=="-"){throw new UsageError(`${name} \u306B\u306F\u5024\u304C\u5FC5\u8981\u3067\u3059`,`\`-\` \u3067\u59CB\u307E\u308B\u5024\u306F ${name}=\u5024 \
|
|
6
6
|
\u306E\u5F62\u3067\u6E21\u305B\u307E\u3059\u3002`)}addValue(flags,repeated,spec,name,next);i+=1}return repeated.size>0?{args,flags,repeated}:{args,flags}}function addValue(flags,repeated,spec,name,value){if(spec.repeatable!==true){flags.set(name,value);return}const bucket=repeated.get(name);if(bucket===void 0)repeated.set(name,[value]);else bucket.push(value)}function repeatedValues(input,name){return input.repeated?.get(name)??[]}export{parseOperationArgs,repeatedValues};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
|
+
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
+
var LOADERS={"agent-loop":async()=>(await import("./agent-loop-6LT46KBQ.js")).agentLoopDomain,"ai-review-reason":async()=>(await import("./sales-ai-review-XLXW5LRA.js")).aiReviewReasonDomain,attendance:async()=>(await import("./attendance-K2U7RYDU.js")).attendanceDomain,backlog:async()=>(await import("./backlog-FC4YK5KD.js")).backlogDomain,"business-place":async()=>(await import("./sales-master-5BET74LP.js")).businessPlaceDomain,company:async()=>(await import("./company-KUQFRVIA.js")).companyDomain,
|
|
4
|
+
contract:async()=>(await import("./contract-OE2PPHHX.js")).contractDomain,customer:async()=>(await import("./company-KUQFRVIA.js")).customerDomain,department:async()=>(await import("./department-EXZZUY7Q.js")).departmentDomain,deposit:async()=>(await import("./deposit-M2RCXBCI.js")).depositDomain,estimate:async()=>(await import("./estimate-46CPFRGI.js")).estimateDomain,inquiry:async()=>(await import("./inquiry-MUXVKNAU.js")).inquiryDomain,invoice:async()=>(await import("./invoice-H23UAQPE.js")).
|
|
5
|
+
invoiceDomain,"job-title":async()=>(await import("./job-title-7J7EO37M.js")).jobTitleDomain,leave:async()=>(await import("./leave-EDBJIDNP.js")).leaveDomain,media:async()=>(await import("./media-HP3IUPIJ.js")).mediaDomain,meeting:async()=>(await import("./knowledge-B6I6UO3G.js")).meetingDomain,note:async()=>(await import("./knowledge-B6I6UO3G.js")).noteDomain,notification:async()=>(await import("./notification-WJYUTNMN.js")).notificationDomain,payee:async()=>(await import("./sales-master-5BET74LP.js")).
|
|
6
|
+
payeeDomain,position:async()=>(await import("./position-NV2VT3GP.js")).positionDomain,project:async()=>(await import("./project-ZVRVNXWI.js")).projectDomain,prospect:async()=>(await import("./prospect-4OP4ALIZ.js")).prospectDomain,purchase:async()=>(await import("./purchase-XPGECUBK.js")).purchaseDomain,receivable:async()=>(await import("./receivable-LMQWNKN5.js")).receivableDomain,report:async()=>(await import("./report-JR7D2GMJ.js")).reportDomain,"rounding-setting":async()=>(await import("./sales-numbering-RPDLRKUK.js")).
|
|
7
|
+
roundingSettingDomain,"seal-impression":async()=>(await import("./sales-master-5BET74LP.js")).sealImpressionDomain,shift:async()=>(await import("./attendance-lists-NVRU2NLY.js")).shiftDomain,storage:async()=>(await import("./storage-KLLBENBY.js")).storageDomain,"supplier-payment":async()=>(await import("./supplier-payment-VD55DOU4.js")).supplierPaymentDomain,task:async()=>(await import("./task-A4W5OAMD.js")).taskDomain,user:async()=>(await import("./user-I7CK2SJX.js")).userDomain,wiki:async()=>(await import("./knowledge-B6I6UO3G.js")).
|
|
8
|
+
wikiDomain,workchange:async()=>(await import("./attendance-lists-NVRU2NLY.js")).workchangeDomain,workflow:async()=>(await import("./workflow-WU2EFC5V.js")).workflowDomain};async function loadDomain(name){return LOADERS[name]()}export{loadDomain};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
|
+
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
+
import{isPrivateProjectId}from"./chunk-GY7KI5E5.js";import{httpFetch}from"./chunk-J7QYPKVK.js";function describeError(res){if(res.status===null)return`transport_error=${res.transportError??"\u4E0D\u660E"}`;const body=res.json;const parts=[`http=${res.status}`];const reason=typeof body?.["reason"]==="string"?body["reason"]:"";if(reason)parts.push(`reason=${reason}`);const error=body?.["error"];const code=typeof error?.["code"]==="string"?error["code"]:"";if(code)parts.push(`code=${code}`);const message=(typeof body?.["message"]==="string"?body["message"]:"")||(typeof error?.["message"]==="\
|
|
4
|
+
string"?error["message"]:"");if(message)parts.push(message.slice(0,160));if(!reason&&!code&&!message)parts.push(`\u5FDC\u7B54\u306E\u5148\u982D: ${res.raw.slice(0,160)}`);return parts.join(" ")}function isPermanent(res){return res.status!==null&&res.status>=400&&res.status<500}var RUNNER_PLATFORMS=["mac","windows","linux"];function normalizeRequiredPlatforms(value){if(!Array.isArray(value))return[];const given=new Set(value.filter(v=>typeof v==="string").map(v=>v.trim().toLowerCase()));return RUNNER_PLATFORMS.
|
|
5
|
+
filter(p=>given.has(p))}function filterByStatus(items,status){return items.filter(item=>item.status===void 0||item.status===status)}var AgentLoopApi=class{constructor(opts){this.opts=opts;const root=opts.apiUrl.replace(/\/+$/,"");this.base=isPrivateProjectId(opts.projectId)?`${root}/api/v2/tasks/private/agent-loop`:`${root}/api/v2/projects/${opts.projectId}/agent-loop`}opts;base;get baseUrl(){return this.base}list(query){const qs=new URLSearchParams;for(const[k,v]of Object.entries(query)){if(v!==
|
|
6
|
+
void 0&&v!=="")qs.set(k,String(v))}const suffix=qs.toString()?`?${qs.toString()}`:"";return this.request("GET",suffix)}create(body){return this.request("POST","",body)}getItem(itemId){return this.request("GET",`/${encodeURIComponent(itemId)}`)}update(itemId,body,runId){return this.request("PUT",`/${encodeURIComponent(itemId)}`,{...body,run_id:runId})}updateUnowned(itemId,body){return this.request("PUT",`/${encodeURIComponent(itemId)}`,body)}logUploadUrl(itemId,runId){return this.request("POST",`\
|
|
7
|
+
/${encodeURIComponent(itemId)}/log-upload-url`,{run_id:runId})}async putPresigned(url,body,contentType){const fetchImpl=this.opts.fetchImpl??httpFetch;const controller=new AbortController;const timer=setTimeout(()=>controller.abort(),this.opts.timeoutMs??6e4);try{const res=await fetchImpl(url,{method:"PUT",headers:{"Content-Type":contentType},signal:controller.signal,body});await res.text().catch(()=>"");return{ok:res.ok,status:res.status,json:null,raw:"",transportError:null}}catch(err){const reason=err.
|
|
8
|
+
name==="AbortError"?"timeout":err.message;return{ok:false,status:null,json:null,raw:"",transportError:reason}}finally{clearTimeout(timer)}}reorder(itemIds){return this.request("PUT","/reorder",{item_ids:itemIds})}claim(runnerId,runId){return this.request("POST","/claim",{runner_id:runnerId,run_id:runId})}reclaim(){return this.request("POST","/reclaim",{})}runners(){return this.request("GET","/runners")}registerRunner(payload){return this.request("POST","/runners/register",payload)}heartbeatRunner(payload){
|
|
9
|
+
return this.request("POST","/runners/heartbeat",payload)}deregisterRunner(payload){return this.request("POST","/runners/deregister",payload)}planStart(runnerId,runId){return this.request("POST","/plan/start",{runner_id:runnerId,run_id:runId})}planFinish(runnerId,runId,planStartedAt,result){return this.request("POST","/plan/finish",{runner_id:runnerId,run_id:runId,plan_started_at:planStartedAt,result})}consumeCounter(key,date,limit){return this.request("POST","/counters/consume",{key,date,limit})}listCounters(date){
|
|
10
|
+
return this.request("GET",`/counters?date=${encodeURIComponent(date)}`)}async queuedSnapshot(){return this.snapshotOf(["pending","processing"])}async processingSnapshot(){return this.snapshotOf(["processing"])}async pendingSnapshot(){return this.snapshotOf(["pending"])}async completedSince(sinceMicros,maxPages=10){const all=[];let cursor=String(Math.trunc(sinceMicros));for(let page=0;page<maxPages;page++){const res=await this.list({status:"completed",limit:100,cursor});if(!res.ok)return null;const body=res.
|
|
11
|
+
json;const items=body?.["items"];if(!Array.isArray(items))return null;all.push(...filterByStatus(items,"completed"));const pagination=body?.["pagination"];const hasMore=(pagination?.["has_more"]??body?.["has_more"])===true;const next=pagination?.["next_cursor"]??body?.["next_cursor"];if(!hasMore||!next)return all;cursor=next}return null}async snapshotOf(statuses){const all=[];for(const status of statuses){let cursor;for(let page=0;page<20;page++){const res=await this.list({status,limit:100,cursor});
|
|
12
|
+
if(!res.ok)return null;const body=res.json;const items=body?.["items"];if(!Array.isArray(items))return null;all.push(...filterByStatus(items,status));const pagination=body?.["pagination"];const hasMore=(pagination?.["has_more"]??body?.["has_more"])===true;const next=pagination?.["next_cursor"]??body?.["next_cursor"];if(!hasMore||!next)break;cursor=next;if(page===19)return null}}return all}async request(method,suffix,body){let token;try{token=await this.opts.session.getAccessToken()}catch(err){return{
|
|
13
|
+
ok:false,status:null,json:null,raw:"",transportError:err.message}}let res=await this.send(method,suffix,token,body);if(res.status===401){try{token=await this.opts.session.refresh(token);res=await this.send(method,suffix,token,body)}catch(err){return{ok:false,status:401,json:null,raw:res.raw,transportError:err.message}}}return res}async send(method,suffix,token,body){const fetchImpl=this.opts.fetchImpl??httpFetch;const controller=new AbortController;const timer=setTimeout(()=>controller.abort(),this.
|
|
14
|
+
opts.timeoutMs??6e4);try{const res=await fetchImpl(`${this.base}${suffix}`,{method,headers:{Authorization:`Bearer ${token}`,"Content-Type":"application/json",Accept:"application/json"},signal:controller.signal,...body===void 0?{}:{body:JSON.stringify(body)}});const raw=await res.text();let json=null;if(raw.trim()!==""){try{json=JSON.parse(raw)}catch{json=null}}return{ok:res.ok,status:res.status,json,raw,transportError:null}}catch(err){const reason=err.name==="AbortError"?"timeout":err.message;return{
|
|
15
|
+
ok:false,status:null,json:null,raw:"",transportError:reason}}finally{clearTimeout(timer)}}};function pick(json,path){let cur=json;for(const part of path.split(".")){if(cur===null||typeof cur!=="object")return void 0;cur=cur[part]}return cur===null?void 0:cur}function pickString(json,path){const v=pick(json,path);if(typeof v==="string")return v;if(typeof v==="number")return String(v);if(typeof v==="boolean")return v?"true":"false";return""}export{describeError,isPermanent,normalizeRequiredPlatforms,filterByStatus,AgentLoopApi,pick,pickString};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{apiExit,currentRevisionOf,errorDetail,pickNumber,printDiff,readUtf8Strict,shellQuote,str,warnHiddenChars}from"./chunk-
|
|
3
|
+
import{apiExit,currentRevisionOf,errorDetail,pickNumber,printDiff,readUtf8Strict,shellQuote,str,warnHiddenChars}from"./chunk-AJO4O5ZF.js";import{EXIT_API_CLIENT,EXIT_API_SERVER,EXIT_FAILURE,EXIT_OK,EXIT_USAGE}from"./chunk-UFND7FBC.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import{createHash}from"crypto";import*as fs from"fs";import*as path from"path";var DEFAULT_SKILL_DIR=".claude/commands";var NAME_PATTERN=/^[a-z][a-z0-9-]*$/;var NAME_MAX_LENGTH=64;var MAX_BODY_BYTES=35e4;var MAX_SKILLS_PER_PROJECT=200;function isValidSkillName(name){return name.length<=NAME_MAX_LENGTH&&NAME_PATTERN.test(name)}function skillDigest(body){return"sha256:"+createHash("sha256").update(Buffer.from(body,"utf8")).digest("hex")}function defaultFileKind(p){try{return fs.lstatSync(p).isFile()?"file":"other"}catch(e){return e.code==="ENOENT"?"missing":"other"}}function defaultWriteFile(p,c){
|
|
4
4
|
const tmp=path.join(path.dirname(p),`.${path.basename(p)}.tmp-${process.pid}`);try{fs.writeFileSync(tmp,c,{encoding:"utf8",flag:"wx"});fs.renameSync(tmp,p)}catch(e){fs.rmSync(tmp,{force:true});throw e}}async function runSkillCommand(deps,opts){const io={out:deps.out??(t=>void process.stdout.write(stripTerminalControls(t))),err:deps.err??(t=>void process.stderr.write(stripTerminalControls(t))),readFile:deps.readFile??readUtf8Strict,writeFile:deps.writeFile??defaultWriteFile,fileKind:deps.fileKind??
|
|
5
5
|
defaultFileKind,listDir:deps.listDir??(d=>{try{return fs.readdirSync(d)}catch{return null}}),mkdir:deps.mkdir??(d=>void fs.mkdirSync(d,{recursive:true}))};if(opts.name===void 0===!opts.all){io.err("\u30B9\u30AD\u30EB\u540D\u304B --all \u306E\u3069\u3061\u3089\u304B\u4E00\u65B9\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\n");return EXIT_USAGE}if(opts.name!==void 0&&!isValidSkillName(opts.name)){io.err(`\u30B9\u30AD\u30EB\u540D\u304C\u4E0D\u6B63\u3067\u3059: ${opts.name}\uFF08\u82F1\u5C0F\u6587\u5B57\u3067\u59CB\u307E\u308A\u3001\u82F1\u5C0F\u6587\u5B57\u30FB\u6570\u5B57\
|
|
6
6
|
\u30FB\u30CF\u30A4\u30D5\u30F3\u3060\u3051\u306E${NAME_MAX_LENGTH}\u6587\u5B57\u4EE5\u5185\uFF09
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{checkUploadQuota}from"./chunk-
|
|
3
|
+
import{checkUploadQuota}from"./chunk-2YNZ4MRT.js";import{isSafePathSegment,safeProjectIdPolicy}from"./chunk-GMBJTG6A.js";import{PRIVATE_PROJECT_REF,isPrivateProjectRef}from"./chunk-GY7KI5E5.js";import{PRIVATE_TASK_KEY_PREFIX,isPrivateTaskKey,isTaskKey}from"./chunk-II5RVJQN.js";import{requireResolved,singleRef,withResolved}from"./chunk-LXIAOCUW.js";import{isRecord,pick}from"./chunk-VTQAI52S.js";import{ApiResponseError,UsageError}from"./chunk-UFND7FBC.js";function classifyTaskRef(ref){const value=ref.trim();if(safeProjectIdPolicy.isDirectId(value))return{kind:"id",value};if(isTaskKey(value))return{kind:"key",value};return{kind:"unknown",value}}function wantsPrivateSurface(input){const project=input.flags.get("--project");return project!==void 0&&isPrivateProjectRef(project)}function taskSurface(input,ref){const project=input.flags.get("--project");const{kind,value}=classifyTaskRef(ref);if(project!==void 0&&isPrivateProjectRef(project)){if(kind===
|
|
4
4
|
"key"&&!isPrivateTaskKey(value)){throw new UsageError(`--project ${PRIVATE_PROJECT_REF}\uFF08\u500B\u4EBA\u30BF\u30B9\u30AF\uFF09\u306B ${value} \u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,`\u500B\u4EBA\u30BF\u30B9\u30AF\u306E\u30AD\u30FC\u306F ${PRIVATE_TASK_KEY_PREFIX}-<\u756A\u53F7> \u306E\u5F62\u3067\u3059\u3002ID\uFF08UUID / ULID\uFF09\u3067\u3082\u6307\u5B9A\u3067\u304D\u307E\u3059\u3002
|
|
5
5
|
\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30BF\u30B9\u30AF\u3092\u6307\u3059\u306A\u3089 --project ${PRIVATE_PROJECT_REF} \u3092\u5916\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return"private"}if(kind==="key"&&isPrivateTaskKey(value)&&project===void 0){throw new UsageError(`${value} \u306F\u500B\u4EBA\u30BF\u30B9\u30AF\u306E\u30AD\u30FC\u306B\u3082\u3001\u30B3\u30FC\u30C9 ${PRIVATE_TASK_KEY_PREFIX} \u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30BF\u30B9\u30AF\u30AD\u30FC\u306B\u3082\u8AAD\u3081\u307E\u3059`,
|
|
6
6
|
`\u3069\u3061\u3089\u3092\u6307\u3059\u304B --project \u3067\u9078\u3093\u3067\u304F\u3060\u3055\u3044\u3002
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{ApiResponseError,UsageError}from"./chunk-
|
|
3
|
+
import{ApiResponseError,UsageError}from"./chunk-UFND7FBC.js";var DEFAULT_MAX_PAGES=100;var DEFAULT_MAX_ITEMS=1e4;var LIST_FLAGS=[{name:"--limit",summary:"\u53D6\u5F97\u4EF6\u6570\uFF08\u30B5\u30FC\u30D0\u5074\u306E\u4E0A\u9650\u3067\u5207\u308A\u6368\u3066\u3089\u308C\u307E\u3059\uFF0F--all \u3068\u4F75\u7528\u3057\u305F\u3068\u304D\u306F1\u30DA\u30FC\u30B8\u306E\u4EF6\u6570\uFF09",takesValue:true,placeholder:"<\u4EF6\u6570>"},{name:"--cursor",summary:"\u7D9A\u304D\u3092\u53D6\u5F97\u3059\u308B\u30AB\u30FC\u30BD\u30EB\uFF08\u524D\u56DE\u306E\u5FDC\u7B54\u306E next_cursor\uFF09",
|
|
4
4
|
takesValue:true,placeholder:"<\u30AB\u30FC\u30BD\u30EB>"},{name:"--all",summary:"\u5168\u30DA\u30FC\u30B8\u3092\u81EA\u52D5\u3067\u8FBF\u308B\uFF08--cursor \u3068\u4F75\u7528\u3059\u308B\u3068\u305D\u306E\u30AB\u30FC\u30BD\u30EB\u4EE5\u964D\u3092\u5168\u4EF6\uFF09",takesValue:false},{name:"--max-pages",summary:`--all \u304C\u7D9A\u304D\u3092\u53D6\u308A\u306B\u884C\u304F\u4E0A\u9650\u30DA\u30FC\u30B8\u6570\uFF08\u65E2\u5B9A ${DEFAULT_MAX_PAGES}\uFF09`,takesValue:true,placeholder:"<\u30DA\u30FC\u30B8\u6570>"},
|
|
5
5
|
{name:"--max-items",summary:`--all \u304C\u7D9A\u304D\u3092\u53D6\u308A\u306B\u884C\u304F\u4E0A\u9650\u4EF6\u6570\uFF08\u65E2\u5B9A ${DEFAULT_MAX_ITEMS}\uFF09`,takesValue:true,placeholder:"<\u4EF6\u6570>"}];var LIST_PAGING_HELP="\u30DA\u30FC\u30B8\u30F3\u30B0:\n --all \u3092\u4ED8\u3051\u308B\u3068\u6700\u5F8C\u306E\u30DA\u30FC\u30B8\u307E\u3067\u81EA\u52D5\u3067\u8FBF\u308A\u307E\u3059\uFF08--limit \u306F1\u30DA\u30FC\u30B8\u306E\u4EF6\u6570\u306B\u306A\u308A\u307E\u3059\uFF09\u3002\n --all \u3068 --cursor \u3092\u4F75\u7528\u3059\u308B\u3068\u3001\u305D\u306E\u30AB\u30FC\u30BD\u30EB\u4EE5\u964D\u3092\u5168\u4EF6\u53D6\u5F97\u3057\u307E\u3059\uFF08\u4E2D\u65AD\u3057\u305F\u53D6\u5F97\u306E\u518D\u958B\uFF09\u3002\n\n \u66B4\u8D70\u3092\u9632\u3050\u305F\u3081 --max-pages / --max-items \u306E\u4E0A\u9650\u304C\u3042\u308A\u307E\u3059\u3002\u3053\u308C\u306F\u300C\u7D9A\u304D\u3092\u53D6\u308A\u306B\u884C\u304F\u304B\u300D\n \u306E\u5224\u5B9A\u306B\u3060\u3051\u4F7F\u308F\u308C\u3001\u7D50\u679C\u3092\u9014\u4E2D\u3067\u5207\u308A\u8A70\u3081\u308B\u3053\u3068\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u8FBF\u308A\u304D\u308B\u524D\u306B\u4E0A\u9650\u3078\u9054\u3057\u305F\n \u5834\u5408\u306F\u300C\u5168\u4EF6\u3067\u306F\u306A\u3044\u300D\u3053\u3068\u3092\u660E\u793A\u3057\u3066\u505C\u6B62\u3057\u3001\u90E8\u5206\u7684\u306A\u7D50\u679C\u306F\u51FA\u529B\u3057\u307E\u305B\u3093\uFF08\u53D6\u5F97\u6E08\u307F\u4EF6\u6570\u3068\n \u518D\u958B\
|
|
6
6
|
\u7528\u306E\u30AB\u30FC\u30BD\u30EB\u306F stderr \u306B\u51FA\u307E\u3059\uFF09\u30021\u5F80\u5FA9\u3067\u5168\u4EF6\u304C\u8FD4\u3063\u305F\u3068\u304D\u306F\u4E0A\u9650\u3092\u8D85\u3048\u3066\u3044\u3066\u3082\u6210\u529F\u3067\u3059\u3002\n \u5F80\u5FA9\u304C\u591A\u3059\u304E\u3066\u4E0A\u9650\u306B\u5F53\u305F\u308B\u5834\u5408\u306F\u3001--max-pages \u3092\u4E0A\u3052\u308B\u3088\u308A --limit \u3092\u5927\u304D\u304F\u3059\u308B\u307B\u3046\u304C\u901F\u3044\n \u3053\u3068\u304C\u3042\u308A\u307E\u3059\uFF081\u5F80\u5FA9\u3042\u305F\u308A\u306E\u4EF6\u6570\u304C\u5897\u3048\u308B\u305F\u3081\uFF09\u3002\n\n \u26A0 --keyword \u3092\u4F75\u7528\u3057\u305F\u4E00\u89A7\u306F\u3001\u30B5\u30FC\u30D0\u5074\u304C\u30DA\u30FC\u30B8\u756A\u53F7\u306B\u3088\u308B\u4F4D\u7F6E\u6307\u5B9A\u3067\u5FDC\u7B54\u3057\u307E\u3059\u3002\n \u8FBF\u3063\u3066\u3044\u308B\u6700\u4E2D\u306B\u30C7\u30FC\u30BF\u304C\u5897\u6E1B\u3059\u308B\u3068\u3001\u53D6\u308A\u3053\u307C\u3057\u30FB\u91CD\u8907\u304C\u8D77\u3053\u308A\u5F97\u307E\u3059\u3002";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{booleanText,boundedText,isoDate}from"./chunk-
|
|
3
|
+
import{booleanText,boundedText,isoDate}from"./chunk-XDHLO54T.js";import{ORG_MASTER_LIMIT}from"./chunk-R6RTDJJG.js";import{ULID_RE,UUID_RE,isSafePathSegment}from"./chunk-GMBJTG6A.js";import{nonEmpty,positiveInteger}from"./chunk-IOGMOXYF.js";import{requireResolved,singleRef,withResolved}from"./chunk-LXIAOCUW.js";import{acknowledgement,isRecord,pick}from"./chunk-VTQAI52S.js";import{ApiResponseError,UsageError}from"./chunk-UFND7FBC.js";var CLEAR_DATE="none";function placeholderOf(field){switch(field.kind){case"text":return`<${field.label}>`;case"integer":return"<\u6574\u6570>";case"boolean":return"<true|false>";case"enum":return`<${field.values.join("|")}>`;case"date":return`<YYYY-MM-DD|${CLEAR_DATE}>`;case"ref":return field.placeholder}}function createFlags(fields){return fields.map(field=>({name:field.flag,summary:field.summary,takesValue:true,placeholder:placeholderOf(field)}))}function updateFlags(fields){const flags=[];for(const field of fields){
|
|
4
4
|
flags.push({name:field.flag,summary:field.summary,takesValue:true,placeholder:placeholderOf(field)});if(field.kind==="ref")flags.push({name:field.clearFlag,summary:field.clearSummary,takesValue:false})}return flags}function integerValue(field,raw){const trimmed=raw.trim();const value=/^\d+$/.test(trimmed)?Number(trimmed):Number.NaN;const tooLarge=field.max!==void 0&&value>field.max;if(!Number.isSafeInteger(value)||value<field.min||tooLarge){const range=field.max!==void 0?`${field.min} \u4EE5\u4E0A ${field.
|
|
5
5
|
max} \u4EE5\u4E0B`:`${field.min} \u4EE5\u4E0A`;throw new UsageError(`${field.flag} \u306F ${range}\u306E\u6574\u6570\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${raw}`,`${field.label}\u3092\u6574\u6570\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return value}function fieldBody(input,fields){const body={};for(const field of fields){switch(field.kind){case"text":{const value=boundedText(input,field.flag,{maxChars:field.maxChars,label:field.label});if(value!==void 0)body[field.
|
|
6
6
|
key]=value;break}case"integer":{const raw=input.flags.get(field.flag);if(raw!==void 0)body[field.key]=integerValue(field,raw);break}case"boolean":{const raw=input.flags.get(field.flag);if(raw!==void 0)body[field.key]=booleanText(field.flag,raw);break}case"enum":{const raw=input.flags.get(field.flag);if(raw===void 0)break;const value=raw.trim().toLowerCase();if(!field.values.includes(value)){throw new UsageError(`${field.flag} \u306B\u300C${raw}\u300D\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{isSafePathSegment}from"./chunk-GMBJTG6A.js";import{requireResolved,singleRef,withResolved}from"./chunk-
|
|
3
|
+
import{isSafePathSegment}from"./chunk-GMBJTG6A.js";import{requireResolved,singleRef,withResolved}from"./chunk-LXIAOCUW.js";import{ApiResponseError}from"./chunk-UFND7FBC.js";var USER_REF_HELP="<\u30E6\u30FC\u30B6\u30FC> \u306F ID\u30FB\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u30FB\u793E\u54E1\u756A\u53F7\u30FB\u6C0F\u540D\u30FBme\uFF08\u81EA\u5206\uFF09\u306E\u3069\u308C\u3067\u3082\u6307\u5B9A\u3067\u304D\u307E\u3059\u3002\n\u6C0F\u540D\u306F\u5B8C\u5168\u4E00\u81F4\u30671\u4EBA\u306B\u7D5E\u308C\u305F\u3068\u304D\u3060\u3051\u53D7\u3051\u4ED8\u3051\u307E\u3059\uFF08\u540C\u59D3\u540C\u540D\u306A\u3089\u5019\u88DC\u3092\u51FA\u3057\u3066\u6B62\u307E\u308B\u306E\u3067\u3001\n\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u304B\u793E\u54E1\u756A\u53F7\u3067\u6307\u5B9A\u3057\u76F4\u3057\u3066\u304F\u3060\u3055\u3044\uFF09\u3002ID \u4EE5\u5916\u306F\u3001\u30C6\u30CA\u30F3\u30C8\u306E\u30E6\u30FC\u30B6\u30FC\u4E00\u89A7\n\uFF08\u65E2\u5B9A10\u5206\u30AD\u30E3\u30C3\u30B7\u30E5\u30FB--refresh \u3067\u53D6\u308A\u76F4\u3057\uFF09\u3068\u7167\u5408\u3057\u307E\u3059\u3002\n\u8868\u793A\u30D5\u30E9\u30B0\u3092\u5916\u3057\u305F\u30E6\u30FC\u30B6\u30FC\u306F\u793E\u54E1\u756A\u53F7\u3067\u306F\u5F15\u3051\u307E\u305B\u3093\u3002\u7D44\u7E54\u7BA1\u7406\u8005\u3067\u306A\u3044\u5834\u5408\u306F ID \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002";
|
|
4
4
|
function userPath(input,suffix=""){const userId=requireResolved(input,"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}\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return`${encodeURIComponent(userId)}${suffix}`}var USER_REF_FLAG={name:"--user",summary:"\u5BFE\u8C61\u306E\u30E6\u30FC\u30B6\u30FC\uFF08\u4F4D\u7F6E\u5F15\u6570\u306E\u4EE3\u308F\u308A\u306B\u4F7F\u3048\u308B\uFF09",
|
|
5
5
|
takesValue:true,placeholder:"<\u30E6\u30FC\u30B6\u30FC>"};async function prepareUser(input,ctx,usage){const ref=singleRef(input,{flag:"--user",label:"\u30E6\u30FC\u30B6\u30FC",usage});const user=await ctx.resolver.user(ref);return withResolved(input,{userId:user.id})}export{USER_REF_HELP,userPath,USER_REF_FLAG,prepareUser};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{evaluateQuery}from"./chunk-
|
|
4
|
-
import{GLOBAL_OPTIONS_HELP}from"./chunk-
|
|
5
|
-
|
|
3
|
+
import{evaluateQuery}from"./chunk-ATYA6DG5.js";import{renderDocument,renderOutput}from"./chunk-VK5T7ULK.js";import{redactSecretValues,redactSecrets,withDebug}from"./chunk-UT4FACHN.js";import{loadDomain}from"./chunk-FPUOK6KV.js";import{parseOperationArgs}from"./chunk-F7K37QG6.js";import{Resolver,requireDefaultProject}from"./chunk-R6RTDJJG.js";import{ApiError,MultipartBody,TwpApiClient,appendQuery}from"./chunk-IF2K4PM5.js";import{ResolveError}from"./chunk-GMBJTG6A.js";
|
|
4
|
+
import{GLOBAL_OPTIONS_HELP}from"./chunk-YLM54X35.js";import{AuthSession,NotLoggedInError,SessionExpiredError,loadCredentials}from"./chunk-XNLIEUAW.js";import{effectiveApiUrl,loadUserConfig,resolveConfiguredOutput,resolveProfile}from"./chunk-4VZKNEVN.js";import{HELP_TOKEN}from"./chunk-OAW2GMY4.js";import{OUTPUT_FORMATS,resolveOutputFormat}from"./chunk-K2ONOH3L.js";import{stringWidth}from"./chunk-WVS4W5FY.js";import{DEFAULT_MAX_ITEMS,DEFAULT_MAX_PAGES,nextPageNotes,
|
|
5
|
+
positiveInteger,shellQuote}from"./chunk-IOGMOXYF.js";import{isRecord}from"./chunk-VTQAI52S.js";import{ApiRejectedError,ApiResponseError,EXIT_API_CLIENT,EXIT_API_SERVER,EXIT_AUTH,EXIT_FAILURE,EXIT_OK,EXIT_USAGE,NetworkError,UsageError}from"./chunk-UFND7FBC.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import fs from"fs";import path from"path";var NO_REDACT_FLAG={name:"--no-redact",summary:"\u5FDC\u7B54\u306E\u4F0F\u5B57\u5316\u3092\u89E3\u9664\u3057\u3066\u751F\u306E\u5024\u3092\u51FA\u3059\uFF08\u9375\u306E\u53D7\u3051\u53D6\u308A\u7B49\uFF09",takesValue:false};var NO_REDACT_NOTICE="\u6CE8\u8A18: --no-redact \u306E\u305F\u3081\u51FA\u529B\u3092\u4F0F\u5B57\u5316\u3057\u307E\u305B\u3093\uFF08\u7AEF\u672B\u3068\u30ED\u30B0\u306B\u5E73\u6587\u3067\u6B8B\u308A\u307E\u3059\uFF09\u3002";function withCommonFlags(flags){return flags.some(flag=>flag.
|
|
6
6
|
name===NO_REDACT_FLAG.name)?flags:[...flags,NO_REDACT_FLAG]}function alignedList(entries,indent=" "){const width=entries.reduce((max,[left])=>Math.max(max,stringWidth(left)),0);return entries.map(([left,right])=>`${indent}${left}${" ".repeat(Math.max(0,width-stringWidth(left)))} ${right}`).join("\n")}function subresourcesOf(resource){return resource.subresources??[]}function renderResourceHelp(resource,path2){const subresources=subresourcesOf(resource);const operationSection=resource.operations.length===0?"":`
|
|
7
7
|
\u64CD\u4F5C:
|
|
8
8
|
${alignedList(resource.operations.map(op=>[op.name,op.summary]))}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{
|
|
4
|
-
STABLE_PAGE_ORDER,nonEmpty,pageNumberPaging,pageNumberQuery,pageRangeNotes}from"./chunk-
|
|
3
|
+
import{readBody}from"./chunk-ORUDW52G.js";import{readCsvFileText}from"./chunk-OHXZO5WK.js";import{featureLicenseGuidance,invoiceFilters}from"./chunk-T6VAND3Z.js";import{repeatedValues}from"./chunk-F7K37QG6.js";import{boundedText,isoDate}from"./chunk-XDHLO54T.js";import{SALES_DEPOSITS_PATH,isExactNumericId,resolveNamed}from"./chunk-R6RTDJJG.js";import{ApiError}from"./chunk-IF2K4PM5.js";import{LIST_PAGING_HELP,PAGE_NUMBER_LIST_FLAGS,PAGE_NUMBER_PAGING_HELP,
|
|
4
|
+
STABLE_PAGE_ORDER,nonEmpty,pageNumberPaging,pageNumberQuery,pageRangeNotes}from"./chunk-IOGMOXYF.js";import{requireResolved,withResolved}from"./chunk-LXIAOCUW.js";import{acknowledgement,isRecord,pick}from"./chunk-VTQAI52S.js";import{ApiResponseError,UsageError}from"./chunk-UFND7FBC.js";var PATH=SALES_DEPOSITS_PATH;function salesAdminForbidden(what){return body=>body?.error==="permission_denied"?featureLicenseGuidance("\u8CA9\u58F2\u7BA1\u7406"):`${what}\u306B\u306F\u8CA9\u58F2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u300C\u7BA1\u7406\u8005\u300D\u3067\u3042\u308B\u3053\u3068\u304C\u8981\u308A\u307E\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`}var FORBIDDEN=salesAdminForbidden("\u5165\u91D1");var ALLOCATION_STATUSES={
|
|
5
5
|
allocated:"\u5F15\u5F53\u6E08",shortage:"\u672A\u5165\u91D1\u6709",excess:"\u5165\u91D1\u8D85\u904E\u6709",transfer_fee_resolved:"\u624B\u6570\u6599\u51E6\u7406\u6E08"};var EXCESS_REASONS={transfer_fee:"\u632F\u8FBC\u624B\u6570\u6599",agency_fee:"\u4EE3\u884C\u624B\u6570\u6599\uFF08\u53E3\u5EA7\u632F\u66FF \u57FA\u672C\u5229\u7528\u6599\uFF09",partial:"\u4E00\u90E8\u5165\u91D1",offset:"\u76F8\u6BBA",overpayment:"\u904E\u5165\u91D1",other:"\u305D\u306E\u4ED6"};var EXCESS_TAX_CATEGORIES={taxable_purchase_10:"\
|
|
6
6
|
\u8AB2\u7A0E\u4ED5\u5165 10%",not_applicable:"\u5BFE\u8C61\u5916"};var BULK_MAX_ROWS=100;var PLAN_MAX_ITEMS=50;var PLAN_MAX_ALLOCATIONS=100;var FILE_MAX_BYTES=1024*1024;var EXCESS_NOTE_MAX_CHARS=255;var PLAN_MEMO_MAX_CHARS=1e3;var CONTENT_MAX_CHARS=1e6;var LIST_COLUMNS=["id","deposit_date","company_name","payee_name","deposit_amount","allocated_amount","unallocated_amount","allocation_status"];var GET_COLUMNS=[...LIST_COLUMNS,"memo","excess_reason","excess_amount","excess_note","excess_tax_categ\
|
|
7
7
|
ory","excess_tax_amount"];var ALLOCATION_COLUMNS=["id","invoice_id","invoice_no","invoice_title","invoice_date","allocated_amount","invoice_remaining_amount"];function labelsHelp(table){return Object.entries(table).map(([code,name])=>`${code}\uFF08${name}\uFF09`).join(" / ")}function refsOf(table){return Object.entries(table).map(([code,name])=>({id:code,name,code}))}function usageOf(op){return`twp deposit ${op} help`}function yen(value){return typeof value==="number"?`${value.toLocaleString("ja\
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
|
+
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
+
import{normalizeRequiredPlatforms}from"./chunk-G2THOTBW.js";import{extractLeadingTaskKey}from"./chunk-II5RVJQN.js";var LEDGER_TASK_KEY_MAX=50;var CONTROL_CHAR_RE=/[\u0000-\u001f\u007f]/;var FLAG_TOKEN_RE=/(?:^|\s)-/;function loosen(source){let t=source.replace(/^[ \t]*\/\/[^\n]*$/gm,"");t=t.replace(/\/\*[\s\S]*?\*\//g,"");t=t.replace(/,(\s*[}\]])/g,"$1");return t===source?null:t}function tryParsePlan(source){for(const candidate of[source,loosen(source)]){if(candidate===null)continue;try{const obj=JSON.parse(candidate);if(obj!==null&&typeof obj==="object"&&Array.isArray(obj.steps)){return obj}}catch{}}return null}
|
|
4
|
+
function fencedBlocks(text,tag){const re=new RegExp("```"+tag+"\\s*\\n([\\s\\S]*?)\\n```","g");const out=[];for(const m of text.matchAll(re)){if(m[1]!==void 0)out.push(m[1])}return out}function extractGeminiEnvelope(text){const anchor=/\{[^{}]*"session_id"[^{}]*"response"\s*:\s*"/g;for(const m of text.matchAll(anchor)){const start=m.index;if(start===void 0)continue;let depth=0;let inStr=false;let escape=false;for(let i=start;i<text.length;i++){const c=text[i];if(escape){escape=false;continue}if(c===
|
|
5
|
+
"\\"){escape=true;continue}if(c==='"'){inStr=!inStr;continue}if(inStr)continue;if(c==="{")depth++;else if(c==="}"){depth--;if(depth===0){try{const obj=JSON.parse(text.slice(start,i+1));if(obj!==null&&typeof obj==="object"&&typeof obj.response==="string"){return obj.response}}catch{}break}}}}return null}function extractPlanJson(rawText){const text=rawText.replace(/^\s*\[\d{2}:\d{2}:\d{2}\]\s*/gm,"");for(const tag of["json:execution-plan","json"]){for(const block of fencedBlocks(text,tag).reverse()){
|
|
6
|
+
const plan=tryParsePlan(block);if(plan)return plan}}const resp=extractGeminiEnvelope(text);if(resp!==null){for(const block of[...fencedBlocks(resp,"json:execution-plan"),...fencedBlocks(resp,"json")].reverse()){const plan2=tryParsePlan(block);if(plan2)return plan2}const plan=tryParsePlan(resp);if(plan)return plan}const whole=tryParsePlan(text.trim());if(whole)return whole;for(const m of[...text.matchAll(/\{[^{}]*"steps"[^{}]*\[[\s\S]*?\][\s\S]*?\}/g)].reverse()){const plan=tryParsePlan(m[0]);if(plan)
|
|
7
|
+
return plan}return null}function ledgerTaskKey(args){const key=extractLeadingTaskKey(args);if(key.length>LEDGER_TASK_KEY_MAX)return"";if(CONTROL_CHAR_RE.test(key))return"";if(FLAG_TOKEN_RE.test(key))return"";return key}function placeholderTaskKey(args){for(const token of args.split(/\s+/)){if(token==="")continue;if(token.startsWith("-"))continue;const m=/^[A-Z]{2,}[A-Z0-9]*-([A-Za-z0-9_<>{}]*)$/.exec(token);if(!m)return null;if(/^\d+$/.test(m[1]??""))return null;return token}return null}function stepToItem(step,assign){
|
|
8
|
+
const skill=typeof step.skill==="string"?step.skill.trim():"";if(!skill)return null;const args=(step.args??"").trim();const priority=step.priority??"P2";const prompt=`/twp-${skill}${args?` ${args}`:""}`;let label=(step.label??"").trim();if(!label||label.startsWith("/twp-")||label.startsWith("[P"))label=prompt;const taskKey=ledgerTaskKey(args);const category=assign?.categoryForSkill(skill)??step.ai_category??"complex";const display=taskKey&&!label.includes(taskKey)?`[${priority}] ${taskKey} ${label}\
|
|
9
|
+
#ai:${category}`:`[${priority}] ${label} #ai:${category}`;const item={label:display.slice(0,200),prompt,task_key:taskKey};const platforms=normalizeRequiredPlatforms(step.required_platforms);if(platforms.length>0)item.required_platforms=platforms;if(assign!==void 0){const ai=assign.selectPrimary(category,skill,priority,display);if(ai!=="")item.ai_type=ai}return item}function parsePlanExcludeKeys(prefetchSection){const m=/OPS_PLAN_EXCLUDE_KEYS\s+([^\s]*)\s+-->/.exec(prefetchSection);const keys=new Set;
|
|
10
|
+
if(!m||!m[1])return keys;for(const raw of m[1].split(",")){const key=raw.trim();if(key!=="")keys.add(key)}return keys}function excludedKeyInArgs(args,excluded){if(excluded.size===0)return null;for(const key of[...excluded].sort()){const re=new RegExp(`(?<![A-Za-z0-9-])${key.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}(?![0-9])`);if(re.test(args))return key}return null}function parseOpsCount(prefetchSection,field){const marker=/OPS_COUNTS\s+([^>]*?)-->/.exec(prefetchSection);if(!marker||!marker[1])return null;
|
|
11
|
+
const escaped=field.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");const hit=new RegExp(`(?:^|\\s)${escaped}=(-?\\d+)(?:\\s|$)`).exec(marker[1]);if(!hit||hit[1]===void 0)return null;const n=Number.parseInt(hit[1],10);if(!Number.isFinite(n)||n<0)return null;return n}function releaseDeployDropReason(verifyBacklog,devVerifyPlanned){if(verifyBacklog===null){return"\u52D5\u4F5C\u78BA\u8A8D\u306E\u4EF6\u6570\u3092\u53D6\u5F97\u3067\u304D\u306A\u304B\u3063\u305F\uFF08\u5224\u5B9A\u4E0D\u80FD\u306E\u305F\u3081\u30EA\u30EA\u30FC\u30B9\u306F\u898B\u9001\u308B\uFF09"}
|
|
12
|
+
if(verifyBacklog>devVerifyPlanned){return`\u52D5\u4F5C\u78BA\u8A8D${verifyBacklog}\u4EF6 > \u8A08\u753B\u5185dev-verify${devVerifyPlanned}\u4EF6\uFF08Phase 1\u306E0\u4EF6\u898B\u8FBC\u307F\u304C\u7ACB\u305F\u306A\u3044\uFF09`}return null}function duplicateTaskKeyDropReason(enqueuedKeys,taskKey){if(!taskKey)return null;if(!enqueuedKeys.has(taskKey))return null;return`${taskKey} \u306F\u672C\u8A08\u753B\u3067\u65E2\u306B\u6295\u5165\u6E08\u307F\uFF08\u540C\u4E00\u30AD\u30FC\u306F1\u8A08\u753B1\u4EF6\uFF09`}
|
|
13
|
+
var NO_ZERO_TARGET_GATES={};function zeroTargetDropReasons(prefetchSection,gates=NO_ZERO_TARGET_GATES){const reasons=new Map;for(const[skill,gate]of Object.entries(gates)){const n=parseOpsCount(prefetchSection,gate.field);if(n===null)reasons.set(skill,`${gate.label}\u4EF6\u6570\u304C\u5224\u5B9A\u4E0D\u80FD\u306E\u305F\u3081\u898B\u9001\u308A`);else if(n===0)reasons.set(skill,`${gate.label}0\u4EF6\u306E\u305F\u3081\u5BFE\u8C61\u306A\u3057`)}return reasons}export{extractPlanJson,placeholderTaskKey,stepToItem,parsePlanExcludeKeys,excludedKeyInArgs,parseOpsCount,releaseDeployDropReason,duplicateTaskKeyDropReason,zeroTargetDropReasons};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{createRuntime}from"./chunk-
|
|
3
|
+
import{createRuntime}from"./chunk-6QOT7CHX.js";import{describeAutoUpdate}from"./chunk-YM7TKMNO.js";import{PACKAGE_NAME,UPDATE_COMMAND,compareVersionCores,isBelowMinSupported,parseVersionCore}from"./chunk-DXXFUNYN.js";import{findExecutable}from"./chunk-PMOUHEJQ.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import{execFile}from"child_process";import fs from"fs";import path from"path";function resolveNpmCommand(deps={}){const platform=deps.platform??process.platform;const env=deps.env??process.env;const npmPath=(deps.find??(name=>findExecutable(name,{env,platform})))("npm");if(npmPath===null)return null;if(platform!=="win32")return{file:npmPath,prefix:[]};if(/\.exe$/i.test(npmPath))return{file:npmPath,prefix:[]};const cliJs=path.win32.join(path.win32.dirname(npmPath),"node_modules","npm","bin","npm-cli.js");return(deps.exists??fs.existsSync)(cliJs)?{file:deps.nodePath??process.
|
|
4
4
|
execPath,prefix:[cliJs]}:null}var DEFAULT_REGISTRY="https://registry.npmjs.org";function registryBase(env=process.env){const configured=env["npm_config_registry"]?.trim();if(configured===void 0||configured==="")return DEFAULT_REGISTRY;try{const url=new URL(configured);if(url.protocol!=="https:"&&url.protocol!=="http:")return DEFAULT_REGISTRY}catch{return DEFAULT_REGISTRY}return configured.replace(/\/+$/,"")}async function fetchFromRegistry(fetchImpl=httpFetch,env=process.env){const url=`${registryBase(env)}/${PACKAGE_NAME.replace(
|
|
5
5
|
"/","%2f")}`;const res=await fetchImpl(url,{headers:{Accept:"application/vnd.npm.install-v1+json"},signal:AbortSignal.timeout(5e3)});if(!res.ok){throw new Error(`registry \u304C ${res.status} \u3092\u8FD4\u3057\u307E\u3057\u305F`)}const body=await res.json();const latest=body["dist-tags"]?.latest;if(typeof latest!=="string"||parseVersionCore(latest)===null){throw new Error("registry \u306E\u5FDC\u7B54\u306B dist-tags.latest \u304C\u3042\u308A\u307E\u305B\u3093")}return{version:latest.trim(),source:"\
|
|
6
6
|
registry"}}async function fetchFromNpmCli(){const npm=resolveNpmCommand();if(npm===null){throw new Error("npm \u304C PATH \u306B\u898B\u3064\u304B\u308A\u307E\u305B\u3093")}const stdout=await new Promise((resolve,reject)=>{execFile(npm.file,[...npm.prefix,"view",PACKAGE_NAME,"version","--json"],{timeout:15e3,windowsHide:true},(error,out)=>error?reject(error):resolve(out))});const parsed=JSON.parse(stdout.trim());const latest=typeof parsed==="string"?parsed:null;if(latest===null||parseVersionCore(
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{UsageError}from"./chunk-
|
|
3
|
+
import{UsageError}from"./chunk-UFND7FBC.js";function singleRef(input,options){const fromFlag=input.flags.get(options.flag);const[fromArg,...rest]=input.args;if(rest.length>0){throw new UsageError(`\u53D7\u3051\u53D6\u308C\u308B${options.label}\u306F1\u3064\u3060\u3051\u3067\u3059: ${rest.join(" ")}`,options.usage)}if(fromArg!==void 0&&fromFlag!==void 0){throw new UsageError(`${options.label}\u304C\u4F4D\u7F6E\u5F15\u6570\uFF08${fromArg}\uFF09\u3068 ${options.flag} ${fromFlag} \u306E\u4E21\u65B9\u3067\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u3059`,
|
|
4
4
|
`\u3069\u3061\u3089\u304B\u4E00\u65B9\u3060\u3051\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u3069\u3061\u3089\u3067\u3082\u540C\u3058\u610F\u5473\u3067\u3059\uFF09\u3002`)}const value=fromArg??fromFlag;if(value===void 0||value.trim()===""){if(options.required===false)return void 0;throw new UsageError(`${options.label}\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044`,options.usage)}return value.trim()}function requireResolved(input,key){const value=input.resolved?.[key];if(value===
|
|
5
5
|
void 0||value===""){throw new Error(`\u5185\u90E8\u30A8\u30E9\u30FC: ${key} \u304C\u89E3\u6C7A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\uFF08prepare() \u306E\u914D\u7DDA\u6F0F\u308C\uFF09`)}return value}function withResolved(input,values){return{...input,resolved:{...input.resolved,...values}}}export{singleRef,requireResolved,withResolved};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{describeError}from"./chunk-
|
|
3
|
+
import{describeError,normalizeRequiredPlatforms}from"./chunk-G2THOTBW.js";import{httpFetch}from"./chunk-J7QYPKVK.js";var ScheduleApi=class{constructor(api){this.api=api}api;async definitions(){const res=await this.api.request("GET","/schedules/definitions");if(!res.ok)return fetchError("\u5B9A\u671F\u30B9\u30B1\u30B8\u30E5\u30FC\u30EB\u306E\u5B9A\u7FA9\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093",res);const body=res.json??{};const schedules=body["schedules"];if(!Array.isArray(schedules)){return{kind:"error",message:`\u5B9A\u7FA9\u306E\u5FDC\u7B54\u306B schedules \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\uFF08\u5FDC\u7B54\u306E\u5148\u982D: ${res.
|
|
4
4
|
raw.slice(0,120)}\uFF09`,status:res.status}}const gates=Array.isArray(body["gates"])?body["gates"]:[];return{kind:"ok",config:{schedules,gates,max_per_cycle:body["max_per_cycle"],warnings:Array.isArray(body["warnings"])?body["warnings"]:[]}}}async history(since){const suffix=since?`/schedules/history?since=${encodeURIComponent(since)}`:"/schedules/history";const res=await this.api.request("GET",suffix);if(!res.ok)return fetchError("\u5B9A\u671F\u30B9\u30B1\u30B8\u30E5\u30FC\u30EB\u306E\u5C65\u6B74\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093",
|
|
5
5
|
res);const body=res.json??{};const rows=body["rows"];if(!Array.isArray(rows)){return{kind:"error",message:`\u5C65\u6B74\u306E\u5FDC\u7B54\u306B rows \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\uFF08\u5FDC\u7B54\u306E\u5148\u982D: ${res.raw.slice(0,120)}\uFF09`,status:res.status}}if(body["truncated"]===true||body["reason"]==="history_truncated"){return{kind:"error",message:"\u5C65\u6B74\u306E\u8D70\u67FB\u304C\u6253\u3061\u5207\u3089\u308C\u307E\u3057\u305F\uFF08\u5224\u5B9A\u306B\u4F7F\u3048\u307E\u305B\u3093\uFF09",
|
|
6
6
|
status:res.status}}const windowCounts={};const counts=body["window_counts"];if(counts&&typeof counts==="object"){for(const[k,v]of Object.entries(counts)){if(typeof v==="number"){if(Number.isInteger(v))windowCounts[k]=v}else if(/^-?\d+$/.test(String(v))){windowCounts[k]=Number(String(v))}}}const normalized=rows.map(r=>{const row=r??{};return{ts:str(row["ts"]),schedule_id:str(row["schedule_id"]),window_key:str(row["window_key"]),status:str(row["status"]),item_id:str(row["item_id"]),args:str(row["a\
|
|
@@ -39,10 +39,10 @@ if("items"in obj)rows=obj["items"];else if("data"in obj)rows=obj["data"]}if(!Arr
|
|
|
39
39
|
exec(raw);if(!m)return null;const[,y,mo,d,h,mi,sec]=m;return Date.UTC(Number(y),Number(mo)-1,Number(d),Number(h),Number(mi),Number(sec))}function releaseRunningBlocked(skill,running,exclusiveSkills){if(!exclusiveSkills.has(skill))return null;if(running.unavailable)return"\u30EA\u30EA\u30FC\u30B9\u72B6\u6CC1\u3092\u5224\u5B9A\u3067\u304D\u306A\u3044\u305F\u3081\u67A0\u3092\u6368\u3066\u308B";if(running.ids.length>0)return`${running.ids.join(",")} \u304C\u5B9F\u884C\u4E2D\u306E\u305F\u3081\u67A0\u3092\u6368\u3066\u308B`;
|
|
40
40
|
return null}async function collectDue(input){const{config,now,history,windowCounts,safeMode,warn,verbose}=input;const gates=config.gates??[];const counts=input.counts??{};const exclusiveSkills=input.exclusiveSkills??new Set;const statusEndpoint=input.statusEndpoint??null;let running=null;const items=[];for(const sch of config.schedules??[]){const{due,reason,windowKey}=isDue(sch,now,history,safeMode,warn);const sid="id"in sch?pyStr(sch.id):"?";if(!due){verbose?.(` skip ${pad28(sid)} ${reason}`);
|
|
41
41
|
continue}const skill=String(sch.skill);const gate=gateStatus(skill,now,gates);if(!gate.allowed){verbose?.(` hold ${pad28(sid)} \u6642\u9593\u5E2F\u30B2\u30FC\u30C8: ${gate.reason}`);continue}const blocked=await requireZeroBlocked(sch,counts,input.fetchCount);if(blocked){verbose?.(` hold ${pad28(sid)} \u4EF6\u6570\u30B2\u30FC\u30C8: ${blocked}`);continue}if(exclusiveSkills.has(skill)){running??=await(input.fetchRunning??(()=>fetchRunningReleases(statusEndpoint)))();const held=releaseRunningBlocked(
|
|
42
|
-
skill,running,exclusiveSkills);if(held){verbose?.(` hold ${pad28(sid)} \u30EA\u30EA\u30FC\u30B9\u6392\u4ED6: ${held}`);continue}}items.push({scheduleId:sid,skill,args:rotationArgs(sch,history,windowCounts,windowKey),priority:truthyStr("priority"in sch?sch.priority:"P3")||"P3",label:sch.label||`\u5B9A\u671F: /twp-${skill}`,windowKey,reason,order:num(sch.order,50,"float")})}items.sort((a,b)=>{const pa=priorityRank(a.priority);const pb=priorityRank(
|
|
43
|
-
b.order});let limit=num(config.max_per_cycle,2);if(limit===0&&config.max_per_cycle!==void 0&&config.max_per_cycle!==null){warn?.("# max_per_cycle=0 \u306F\u7121\u5236\u9650\u3067\u306F\u306A\u304F\u8A2D\u5B9A\u30DF\u30B9\u3068\u307F\u306A\u3057\u65E2\u5B9A(2)\u3092\u4F7F\u3044\u307E\u3059\u3002\u7121\u5236\u9650\u306B\u3057\u305F\u3044\u5834\u5408\u306F -1 \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002");limit=2}let out=items;if(limit>
|
|
44
|
-
slice(limit)){verbose?.(` hold ${pad28(held.scheduleId)} max_per_cycle=${limit} \u306E\u305F\u3081\u6B21\u30B5\u30A4\u30AF\u30EB\u3078`)}out=items.slice(0,limit)}return out.map(({order:_order,...row})=>row)}function truthyStr(v){if(v===null||v===void 0||v===false||v===0||v==="")return"";return String(v)}function pad28(s){return s.padEnd(28)}function promptSection(config,now,history,enqueuedLines,includeUpcoming=true){const blocked=gatedSkills(config,
|
|
45
|
-
schedules??[]){if(!flag(sch,"enabled",true))continue;const nxt=nextWindowStart(sch,now,history);if(!nxt)continue;upcoming.push([nxt,sch])}upcoming.sort((a,b)=>a[0].getTime()-b[0].getTime());const out=["\u3010\u5B9A\u671F\u30B9\u30B1\u30B8\u30E5\u30FC\u30EB\uFF08scripts/ops-schedule.json\uFF09\u3011"];if(enqueuedLines.length>0){out.push("\u4ECA\u30B5\u30A4\u30AF\u30EB\u306E\u5B9A\u671F\u5B9F\u884C\u5206\u3068\u3057\u3066\u3001\u4EE5\u4E0B\u306F**\u30B9\u30AF\u30EA\u30D7\u30C8\u304C\u65E2\u306B\u30AD\u30E5\u30FC\u3078\u6295\u5165\u6E08\u307F**\u3067\u3059\u3002steps \u306B\u91CD\u8907\u3057\u3066\u542B\u3081\u306A\u3044\u3067\u304F\u3060\u3055\u3044\uFF08\u91CD\u8907\u3059\u308B\u3068\u30AD\u30E5\u30FC\u306B\u4E8C\u91CD\u767B\u9332\u3055\u308C\u307E\u3059\uFF09:");
|
|
42
|
+
skill,running,exclusiveSkills);if(held){verbose?.(` hold ${pad28(sid)} \u30EA\u30EA\u30FC\u30B9\u6392\u4ED6: ${held}`);continue}}items.push({scheduleId:sid,skill,args:rotationArgs(sch,history,windowCounts,windowKey),priority:truthyStr("priority"in sch?sch.priority:"P3")||"P3",label:sch.label||`\u5B9A\u671F: /twp-${skill}`,windowKey,reason,requiredPlatforms:normalizeRequiredPlatforms(sch.required_platforms),order:num(sch.order,50,"float")})}items.sort((a,b)=>{const pa=priorityRank(a.priority);const pb=priorityRank(
|
|
43
|
+
b.priority);if(pa!==pb)return pa-pb;return a.order-b.order});let limit=num(config.max_per_cycle,2);if(limit===0&&config.max_per_cycle!==void 0&&config.max_per_cycle!==null){warn?.("# max_per_cycle=0 \u306F\u7121\u5236\u9650\u3067\u306F\u306A\u304F\u8A2D\u5B9A\u30DF\u30B9\u3068\u307F\u306A\u3057\u65E2\u5B9A(2)\u3092\u4F7F\u3044\u307E\u3059\u3002\u7121\u5236\u9650\u306B\u3057\u305F\u3044\u5834\u5408\u306F -1 \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002");limit=2}let out=items;if(limit>
|
|
44
|
+
0&&items.length>limit){for(const held of items.slice(limit)){verbose?.(` hold ${pad28(held.scheduleId)} max_per_cycle=${limit} \u306E\u305F\u3081\u6B21\u30B5\u30A4\u30AF\u30EB\u3078`)}out=items.slice(0,limit)}return out.map(({order:_order,...row})=>row)}function truthyStr(v){if(v===null||v===void 0||v===false||v===0||v==="")return"";return String(v)}function pad28(s){return s.padEnd(28)}function promptSection(config,now,history,enqueuedLines,includeUpcoming=true){const blocked=gatedSkills(config,
|
|
45
|
+
now);const upcoming=[];for(const sch of config.schedules??[]){if(!flag(sch,"enabled",true))continue;const nxt=nextWindowStart(sch,now,history);if(!nxt)continue;upcoming.push([nxt,sch])}upcoming.sort((a,b)=>a[0].getTime()-b[0].getTime());const out=["\u3010\u5B9A\u671F\u30B9\u30B1\u30B8\u30E5\u30FC\u30EB\uFF08scripts/ops-schedule.json\uFF09\u3011"];if(enqueuedLines.length>0){out.push("\u4ECA\u30B5\u30A4\u30AF\u30EB\u306E\u5B9A\u671F\u5B9F\u884C\u5206\u3068\u3057\u3066\u3001\u4EE5\u4E0B\u306F**\u30B9\u30AF\u30EA\u30D7\u30C8\u304C\u65E2\u306B\u30AD\u30E5\u30FC\u3078\u6295\u5165\u6E08\u307F**\u3067\u3059\u3002steps \u306B\u91CD\u8907\u3057\u3066\u542B\u3081\u306A\u3044\u3067\u304F\u3060\u3055\u3044\uFF08\u91CD\u8907\u3059\u308B\u3068\u30AD\u30E5\u30FC\u306B\u4E8C\u91CD\u767B\u9332\u3055\u308C\u307E\u3059\uFF09:");
|
|
46
46
|
out.push(...enqueuedLines)}else{out.push("\u4ECA\u30B5\u30A4\u30AF\u30EB\u3067\u767A\u706B\u3057\u305F\u5B9A\u671F\u30BF\u30B9\u30AF\u306F\u3042\u308A\u307E\u305B\u3093\u3002")}if(blocked.length>0){out.push("");out.push("\u73FE\u5728\u6642\u523B\u306F\u4EE5\u4E0B\u306E\u30B9\u30AD\u30EB\u306E\u5B9F\u884C\u6642\u9593\u5E2F\u5916\u3067\u3059\u3002**steps \u306B\u542B\u3081\u306A\u3044\u3067\u304F\u3060\u3055\u3044**:");for(const[skill,reason]of blocked)out.push(`- ${skill} \u2014 ${reason}`)}if(includeUpcoming&&
|
|
47
47
|
upcoming.length>0){out.push("");out.push("\u5B9A\u671F\u30BF\u30B9\u30AF\u306E\u6B21\u56DE\u767A\u706B\u4E88\u5B9A\uFF08\u53C2\u8003\u3002\u8A08\u753B\u306B\u542B\u3081\u308B\u5FC5\u8981\u306F\u3042\u308A\u307E\u305B\u3093\uFF09:");for(const[nxt,sch]of upcoming.slice(0,8)){const whenTxt=nxt.getTime()<=now.getTime()?"\u767A\u706B\u5F85\u3061\uFF08\u6B21\u30B5\u30A4\u30AF\u30EB\u4EE5\u964D\u306B\u81EA\u52D5\u6295\u5165\uFF09":fmtMonthDayTime(nxt);out.push(`- ${whenTxt} ${sch.label||`/twp-${String(
|
|
48
48
|
sch.skill)}`}\uFF08${describeWhen(sch)}\uFF09`)}}out.push("");out.push("\u5B9A\u671F\u30BF\u30B9\u30AF\u306F\u6642\u9593\u30D9\u30FC\u30B9\u3067\u30B9\u30AF\u30EA\u30D7\u30C8\u304C\u7BA1\u7406\u3057\u3066\u3044\u307E\u3059\u3002\u300C\u524D\u56DE\u5B9F\u884C\u304B\u3089\u6642\u9593\u304C\u7D4C\u3063\u305F\u304B\u300D\u3092\u63A8\u6E2C\u3057\u3066\u8A08\u753B\u306B\u5165\u308C\u308B\u5FC5\u8981\u306F\u3042\u308A\u307E\u305B\u3093\u3002");return out.join("\n")}export{ScheduleApi,nowInZone,parseTs,gateStatus,REQUIRE_ZERO_STATUS,parseCounts,collectDue,promptSection};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
|
+
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
+
var DOMAIN_NAMES=["agent-loop","ai-review-reason","attendance","backlog","business-place","company","contract","customer","department","deposit","estimate","inquiry","invoice","job-title","leave","media","meeting","note","notification","payee","position","project","prospect","purchase","receivable","report","rounding-setting","seal-impression","shift","storage","supplier-payment","task","user","wiki","workchange","workflow"];function isDomainName(value){return value!==void 0&&DOMAIN_NAMES.includes(
|
|
4
|
+
value)}var HELP_TOKEN="help";var API_TOKEN="api";export{DOMAIN_NAMES,isDomainName,HELP_TOKEN,API_TOKEN};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{UsageError}from"./chunk-
|
|
3
|
+
import{UsageError}from"./chunk-UFND7FBC.js";import fs from"fs";var BOM=new RegExp(`^${String.fromCharCode(65279)}`);function decodeCsvText(bytes){try{return new TextDecoder("utf-8",{fatal:true}).decode(bytes).replace(BOM,"")}catch{return new TextDecoder("shift_jis").decode(bytes)}}function readCsvFileText(file,usage,maxBytes,tooLarge){try{const stat=fs.statSync(file);if(!stat.isFile())throw new UsageError(`--file \u306B\u901A\u5E38\u306E\u30D5\u30A1\u30A4\u30EB\u4EE5\u5916\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093: ${file}`,usage);if(stat.size>maxBytes)
|
|
4
4
|
throw tooLarge(stat.size);return decodeCsvText(fs.readFileSync(file))}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`,usage)}}export{decodeCsvText,readCsvFileText};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{UsageError}from"./chunk-
|
|
3
|
+
import{UsageError}from"./chunk-UFND7FBC.js";import fs from"fs";var BOM="\uFEFF";async function readStdin(spec){if(process.stdin.isTTY===true){throw new UsageError(`${spec.fileFlag} - \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\u6E21\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u4F8B: cat review.md | twp \u2026 ${spec.fileFlag} -\uFF09\u3002`)}const chunks=[];for await(const chunk of process.stdin)chunks.
|
|
4
4
|
push(Buffer.from(chunk));return Buffer.concat(chunks).toString("utf8")}function charCount(text){return[...text].length}async function readBody(input,spec){const inline=input.flags.get(spec.flag);const file=input.flags.get(spec.fileFlag);if(inline!==void 0&&file!==void 0){throw new UsageError(`${spec.label}\u304C ${spec.flag} \u3068 ${spec.fileFlag} \u306E\u4E21\u65B9\u3067\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u3059`,`\u3069\u3061\u3089\u304B\u4E00\u65B9\u3060\u3051\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08${spec.
|
|
5
5
|
fileFlag} - \u3067\u6A19\u6E96\u5165\u529B\u304B\u3089\u8AAD\u3081\u307E\u3059\uFF09\u3002`)}if(inline===void 0&&file===void 0)return void 0;const text=inline??await readFrom(file,spec);const stripped=text.startsWith(BOM)?text.slice(BOM.length):text;if(stripped.trim()===""){throw new UsageError(`${spec.label}\u304C\u7A7A\u3067\u3059\uFF08${inline!==void 0?spec.flag:`${spec.fileFlag} ${file}`}\uFF09`,spec.usage)}const count=charCount(stripped);if(count>spec.maxChars){throw new UsageError(`${spec.
|
|
6
6
|
label}\u304C\u9577\u3059\u304E\u307E\u3059\uFF08${count} \u6587\u5B57\u30FB\u4E0A\u9650 ${spec.maxChars} \u6587\u5B57\uFF09`,"\u5206\u5272\u3057\u3066\u6295\u7A3F\u3059\u308B\u304B\u3001\u8A73\u7D30\u306F\u6DFB\u4ED8\u30D5\u30A1\u30A4\u30EB\u306B\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return stripped}async function readFrom(file,spec){if(file==="-")return readStdin(spec);try{const stat=fs.statSync(file);if(!stat.isFile()){throw new UsageError(`${spec.label}\u306B\u901A\u5E38\u306E\u30D5\u30A1\u30A4\u30EB\u4EE5\u5916\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093: ${file}`,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{describeError}from"./chunk-
|
|
3
|
+
import{describeError}from"./chunk-G2THOTBW.js";import{CHAIN_KEYS,reloadAiConfig}from"./chunk-AEJHDFXB.js";import{isPrivateProjectId}from"./chunk-GY7KI5E5.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import fs from"fs";import path from"path";var PROMPT_KEYS=["charter","charter_prefix","charter_suffix","plan_preamble","step_budget","non_interactive_note","safe_mode_note"];function parseServerSettings(res){const json=res.json;if(json===null||typeof json!=="object"||Array.isArray(json))return null;const top=json;const data=top["data"];const b=data!==null&&typeof data==="object"&&!Array.isArray(data)&&"revision"in data?data:top;const revision=b["revision"];if(typeof revision!=="number"||!Number.isInteger(revision)||revision<0)return null;
|
|
4
4
|
const rawAi=b["ai"];const ai=rawAi!==null&&typeof rawAi==="object"&&!Array.isArray(rawAi)?Object.fromEntries(Object.entries(rawAi).filter(([,v])=>v!==null&&v!==void 0)):{};const prompts={};const rawPrompts=b["prompts"];if(rawPrompts!==null&&typeof rawPrompts==="object"&&!Array.isArray(rawPrompts)){for(const key of PROMPT_KEYS){const v=rawPrompts[key];if(typeof v==="string")prompts[key]=v}}return{revision,ai,prompts}}function formatConfigHash(aiHash,revision,ai,charter){return`${aiHash};r=${revision}\
|
|
5
5
|
;ai=${ai};charter=${charter}`}function renderStepBudget(template,vars){return template.replaceAll("{timeout_min}",String(vars.timeoutMin)).replaceAll("{soft_min}",String(vars.softMin)).replaceAll("{wrap_up_min}",String(vars.wrapUpMin))}var LoopSettingsApplier=class{constructor(deps){this.deps=deps}deps;last=null;lastWarning="";lastAiWarning="";lastSummary="";serverAiApplied=false;lastSafeWarning="";async apply(){const{config,log}=this.deps;const outcome=await this.fetch();const warning=outcome.warning??
|
|
6
6
|
"";if(warning!==""&&warning!==this.lastWarning)log(` \u26A0\uFE0F ${warning}`);else if(warning===""&&this.lastWarning!=="")log("\u30EB\u30FC\u30D7\u8A2D\u5B9A\u3092\u30B5\u30FC\u30D0\u304B\u3089\u518D\u3073\u53D6\u5F97\u3067\u304D\u308B\u3088\u3046\u306B\u306A\u308A\u307E\u3057\u305F");this.lastWarning=warning;const settings=outcome.settings;config.serverPrompts=settings?.prompts??{};const safeNote=config.serverPrompts.safe_mode_note;const safeWarning=config.safeMode&&safeNote!==void 0?safeNote===
|