@tocca-systems/twp-cli 0.73.0 → 0.74.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 +12 -0
- package/README.md +28 -5
- package/dist/{agent-WJ4JMQMQ.js → agent-6E62JWPN.js} +1 -1
- package/dist/{agent-loop-XFYCEK5S.js → agent-loop-UTS4MYW6.js} +2 -2
- package/dist/{ai-dispatch-GONY4JAY.js → ai-dispatch-OAT752RN.js} +1 -1
- package/dist/analysis-MVKADQHU.js +1 -1
- package/dist/{announcement-UYVAY54K.js → announcement-BFQAI6UE.js} +2 -2
- package/dist/{api-command-WMT5U2VG.js → api-command-46GLOIHL.js} +2 -2
- package/dist/{app-LPO4HFRV.js → app-SQZCZANA.js} +4 -4
- package/dist/{attendance-correct-WDQM63AH.js → attendance-correct-72KQR4UG.js} +2 -2
- package/dist/attendance-lists-6RP7UGA5.js +1 -1
- package/dist/{backlog-RYESVWII.js → backlog-22NXQQDL.js} +1 -1
- package/dist/budget-LJY3YFVB.js +4 -0
- package/dist/business-hours-I4X6YQS3.js +18 -0
- package/dist/{chunk-JOQKYENT.js → chunk-3QQF4MOB.js} +2 -2
- package/dist/{chunk-AGI5KT4C.js → chunk-3WFZOOXZ.js} +1 -1
- package/dist/{chunk-B6FHTFUJ.js → chunk-46Q7TUND.js} +1 -1
- package/dist/{chunk-I4TR55UF.js → chunk-5KJ5OIKI.js} +1 -1
- package/dist/chunk-DMXMQGGZ.js +11 -0
- package/dist/{chunk-CCHPF23L.js → chunk-GAXJPIKO.js} +1 -1
- package/dist/{chunk-7PDUN5MS.js → chunk-GTRKN2YS.js} +1 -1
- package/dist/{chunk-WYYHMKF7.js → chunk-HOLKWMS2.js} +1 -1
- package/dist/{chunk-NBOA4T7F.js → chunk-J2NRDFCR.js} +1 -1
- package/dist/{budget-BF3P55KH.js → chunk-JIOZ47AX.js} +2 -3
- package/dist/{chunk-UFGJSWKU.js → chunk-LDBYJPRD.js} +1 -1
- package/dist/{chunk-4NZG4FJQ.js → chunk-OO7GDI2D.js} +1 -1
- package/dist/{chunk-YXVN6OCH.js → chunk-PO35MCYP.js} +1 -1
- package/dist/{chunk-T3C2BAVA.js → chunk-QQCWGMZN.js} +1 -1
- package/dist/{chunk-DZQFMC4U.js → chunk-R5UIH2SI.js} +1 -1
- package/dist/chunk-W4E4F2ZA.js +4 -0
- package/dist/cli.js +24 -8
- package/dist/{commands-GMUQCBFQ.js → commands-U52UBWSU.js} +2 -2
- package/dist/{commands-MYGPEYBE.js → commands-ZCXAJXHW.js} +40 -38
- package/dist/{company-4J4BZMZ4.js → company-UYDQAJ5O.js} +2 -2
- package/dist/{completion-EMY4WDII.js → completion-YBKZ3GXD.js} +1 -1
- package/dist/{contract-55LGGLGZ.js → contract-PJRMXIXY.js} +1 -1
- package/dist/{department-5FADSH5C.js → department-JFHUX32Y.js} +1 -1
- package/dist/deposit-YSCEG5QY.js +1 -1
- package/dist/{domain-knowledge-LGBPHMWX.js → domain-knowledge-HJHKFS3S.js} +1 -1
- package/dist/{estimate-KNQ5T7KZ.js → estimate-ZY3NFOY2.js} +2 -2
- package/dist/{expense-HCX2L5BN.js → expense-2EDPVAQL.js} +2 -2
- package/dist/{fiscal-year-W3JOTNNF.js → fiscal-year-5S74MAHA.js} +1 -1
- package/dist/holiday-PFBME3RI.js +48 -0
- package/dist/{inquiry-WM4FEQFW.js → inquiry-LVJE53LY.js} +1 -1
- package/dist/{invoice-PYROWI6V.js → invoice-JJ46ZXMJ.js} +1 -1
- package/dist/job-title-PFLVTRNO.js +1 -1
- package/dist/{knowledge-ZUC67H2H.js → knowledge-43B64GGG.js} +62 -37
- package/dist/{leave-4ITLO6SD.js → leave-6L3CTABK.js} +1 -1
- package/dist/{license-PAFHCG2V.js → license-HHAOMEWC.js} +2 -2
- package/dist/{logout-guard-3B767ADS.js → logout-guard-IWHF33DM.js} +1 -1
- package/dist/{media-BAMQWQ4H.js → media-YEWKZ2QS.js} +3 -3
- package/dist/{notification-HJP3LWU7.js → notification-LNRNOLVW.js} +1 -1
- package/dist/{oneshot-TMUK55OV.js → oneshot-7H3SFK7Q.js} +1 -1
- package/dist/{outlook-KYTXHDAV.js → outlook-YG7GFF44.js} +1 -1
- package/dist/{plan-submit-YBTGYQD7.js → plan-submit-CZRVVZZB.js} +1 -1
- package/dist/position-YFC6XZQL.js +1 -1
- package/dist/project-3RTD63II.js +1 -1
- package/dist/{prospect-ZGNWEQN7.js → prospect-5EXTP5D2.js} +2 -2
- package/dist/{purchase-ZNMJHMP6.js → purchase-KJ3XVCXG.js} +2 -2
- package/dist/receivable-LF3DYPOO.js +2 -2
- package/dist/{redmine-OTZNVLZY.js → redmine-6FJPODIM.js} +1 -1
- package/dist/{registry-I3BPWCZE.js → registry-5IKYCMRP.js} +1 -1
- package/dist/{render-YD4B7OH5.js → render-4SBLHU4J.js} +1 -1
- package/dist/{report-H4OJWUQP.js → report-TDPP7SF7.js} +1 -1
- package/dist/{run-DGBJ2EHB.js → run-EQQOJ76O.js} +2 -2
- package/dist/sales-ai-review-WIVJOOFW.js +1 -1
- package/dist/{sales-master-FR3ZJQXG.js → sales-master-SJSFHAT6.js} +2 -2
- package/dist/sales-numbering-EWYVI3RF.js +1 -1
- package/dist/{search-IX67TAAB.js → search-FCXHO5NB.js} +1 -1
- package/dist/segment-3Q64YOMR.js +1 -1
- package/dist/{server-settings-ELHHMBBK.js → server-settings-WH4F2SLC.js} +1 -1
- package/dist/{setup-74LO2SXN.js → setup-H22WRMPN.js} +1 -1
- package/dist/skill-MWYX74XM.js +1 -1
- package/dist/{skill-check-2ILLHGDQ.js → skill-check-YVIMYT2H.js} +1 -1
- package/dist/{skill-manage-command-HPJQOTQK.js → skill-manage-command-QYJLCLDK.js} +2 -2
- package/dist/{supplier-payment-NR6KRZ7V.js → supplier-payment-H4E65YFZ.js} +1 -1
- package/dist/{support-3UK7KKKI.js → support-CCE7DP2O.js} +2 -2
- package/dist/{task-CPKP4DOL.js → task-OA6YUFL3.js} +2 -2
- package/dist/{teams-QRVCFJS4.js → teams-AUFHZRDH.js} +1 -1
- package/dist/{user-BHDF42QA.js → user-KQX327AS.js} +1 -1
- package/dist/{user-contract-type-FXV6WYC4.js → user-contract-type-KS3HMLHY.js} +1 -1
- package/dist/worker-agent-BEH65D3X.js +1 -1
- package/dist/workflow-EBAADQLR.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-35MQ27I6.js +0 -4
- package/dist/chunk-R3WFIQPJ.js +0 -11
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{redactSecretValues,redactSecrets}from"./chunk-
|
|
3
|
+
import{redactSecretValues,redactSecrets}from"./chunk-LDBYJPRD.js";import{formatOutput}from"./chunk-74BPZOKU.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";function renderOutput(value,format,noRedact=false){if(noRedact)return formatOutput(value,format);const formatted=formatOutput(redactSecretValues(value),format);return format==="json"?formatted:redactSecrets(formatted)}function renderDocument(text,noRedact=false){const visible=stripTerminalControls(text);return noRedact?visible:redactSecrets(visible)}export{renderOutput,renderDocument};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{isModeId,isPermissionModeId}from"./chunk-2LOT54OO.js";import{API_TOKEN,HELP_TOKEN,isDomainName}from"./chunk-
|
|
3
|
+
import{isModeId,isPermissionModeId}from"./chunk-2LOT54OO.js";import{API_TOKEN,HELP_TOKEN,isDomainName}from"./chunk-W4E4F2ZA.js";import{splitFlagToken}from"./chunk-QQRJLH6B.js";var BUILTIN_COMMANDS=["login","logout","whoami","update","task-loop"];var TASK_LOOP_ACTIONS=["run","status","stop","schedule","setup","charter","skill","settings","plan","capacity"];var VALUE_FLAGS=new Set(["-p","--print","--profile","--tenant","--mode","--permission-mode","--model","--allowed-tools","--disallowed-tools","--project","--engine","--interval","--max-cycles","--ai","--workspace","--ai-config-file","--now","--counts","--gate","--file","--out","--revision","--dir","--from","--to","--c\
|
|
4
4
|
onfig","--output","--query"]);var BOOLEAN_FLAGS=new Set(["-h","--help","-v","--version","--no-tui","--doctor","--password","--token","--no-browser","--safe","--daemon","--force-runner","--force","--drain","--yes","-y","--no-ai-config-file","--verbose","--all","--empty","--check","--dry-run","--debug","--refresh"]);function dispatch(argv,limit=2){const tokens=[];const indexes=[];let truncated=false;for(let i=0;i<argv.length;i++){const arg=argv[i];if(arg===void 0)continue;if(arg.startsWith("-")&&arg!==
|
|
5
5
|
"-"){const{name,value:inline}=splitFlagToken(arg);if(BOOLEAN_FLAGS.has(name)){if(inline!==void 0){truncated=true;break}continue}if(VALUE_FLAGS.has(name)){if(inline!==void 0)continue;const next=argv[i+1];if(next!==void 0&&(!next.startsWith("-")||next==="-"))i++;continue}truncated=true;break}if(arg===""||arg==="-")continue;if(tokens.length>=limit)break;tokens.push(arg);indexes.push(i)}return{tokens,indexes,truncated}}function isBuiltin(token){return token!==void 0&&BUILTIN_COMMANDS.includes(token)}
|
|
6
6
|
function isTaskLoopAction(token){return token!==void 0&&TASK_LOOP_ACTIONS.includes(token)}function resolveRoute(result){const{tokens,indexes}=result;const[first,second]=tokens;const firstIndex=indexes[0];if(first===void 0||firstIndex===void 0)return{kind:"none",consumed:[]};const consumed=[firstIndex];const secondIndex=indexes[1];if(isBuiltin(first)){if(first==="task-loop"&&isTaskLoopAction(second)){if(secondIndex!==void 0)consumed.push(secondIndex);return{kind:"builtin",command:first,action:second,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{FORCE_FLAG,OUT_FLAG,REV_FLAG,revOf,singleId,uploadStaged}from"./chunk-
|
|
3
|
+
import{FORCE_FLAG,OUT_FLAG,REV_FLAG,revOf,singleId,uploadStaged}from"./chunk-46Q7TUND.js";import{CUSTOMER_LICENSE,childForbidden,levelForbidden}from"./chunk-OO7GDI2D.js";import{inspectLocalFile}from"./chunk-5KJ5OIKI.js";import{createFlags,fieldBody,hasAnyField,updateFlags}from"./chunk-FHOJFKR3.js";import{nonEmpty}from"./chunk-MI6HVYR2.js";import{SALES_ESTIMATES_PATH,isExactNumericId}from"./chunk-4B6GJBYP.js";import{requireResolved,withResolved}from"./chunk-PS5QFKHB.js";
|
|
4
4
|
import{acknowledgement,isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import fs from"fs";import path from"path";var DOCUMENT_TYPES=["order_form","individual_contract","other"];var DOCUMENT_TYPE_HELP="order_form\uFF1D\u6CE8\u6587\u66F8 / individual_contract\uFF1D\u500B\u5225\u5951\u7D04\u66F8 / other\uFF1D\u305D\u306E\u4ED6\u6848\u4EF6\u66F8\u985E";var MAGIC_BYTES={pdf:["%PDF-"],jpg:["\xFF\xD8\xFF"],jpeg:["\xFF\xD8\xFF"],png:["\x89PNG\r\n\n"],xlsx:["PK","PK","PK\x07\b"],docx:["PK","PK","PK\x07\b"],xls:["\xD0\xCF\xE0\xA1\xB1\xE1"],doc:["\xD0\xCF\xE0\xA1\xB1\xE1"]};var FILE_NAME_MAX_CHARS=255;var FIELDS=[
|
|
5
5
|
{kind:"text",flag:"--name",key:"document_name",label:"\u66F8\u985E\u540D",maxChars:255,summary:"\u66F8\u985E\u540D\uFF08create \u3067\u306F\u5FC5\u9808\uFF09"},{kind:"enum",flag:"--type",key:"document_type",values:DOCUMENT_TYPES,summary:`\u66F8\u985E\u7A2E\u5225\uFF08${DOCUMENT_TYPE_HELP}\u30FBcreate \u3067\u306F\u5FC5\u9808\uFF09`}];var COLUMNS=["document_id","estimate_id","document_type","document_type_label","document_name","current_version","updated_by_name","updated_at"];var VERSION_COLUMNS=[
|
|
6
6
|
"version_number","file_name","file_size","is_current","created_by_name","created_at"];var ESTIMATE_FLAG={name:"--estimate",summary:"\u898B\u7A4D\u306E ID\uFF08twp estimate list \u306E id \u5217\u306E\u6570\u5B57\u30FB\u5FC5\u9808\uFF09",takesValue:true,placeholder:"<\u898B\u7A4DID>"};var FILE_FLAG={name:"--file",summary:"\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3059\u308B\u30D5\u30A1\u30A4\u30EB\uFF08PDF\u30FBJPEG\u30FBPNG\u30FBWord\u30FBExcel\u3002\u5FC5\u9808\uFF09",takesValue:true,placeholder:"<\
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
|
+
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
+
var DOMAIN_NAMES=["agent","agent-loop","ai-review-reason","analysis","announcement","attendance","backlog","budget","business-hours","business-place","company","contract","customer","department","deposit","estimate","evaluation","expense","fiscal-year","goal-sheet","holiday","inquiry","invoice","job-title","knowledge","leave","license","media","meeting","note","notification","onedrive","outlook","payee","position","project","prospect","purchase","qualification","receivable","redmine","report","r\
|
|
4
|
+
ounding-setting","seal-impression","search","segment","shift","skill","storage","supplier-payment","support","task","teams","user","user-contract-type","wiki","workchange","worker-agent","workflow"];function isDomainName(value){return value!==void 0&&DOMAIN_NAMES.includes(value)}var HELP_TOKEN="help";var API_TOKEN="api";export{DOMAIN_NAMES,isDomainName,HELP_TOKEN,API_TOKEN};
|
package/dist/cli.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
3
3
|
const require = __twpCreateRequire(import.meta.url);
|
|
4
|
-
import{GLOBAL_OPTIONS_HELP}from"./chunk-PECIBNFD.js";import{parseArgv}from"./chunk-
|
|
4
|
+
import{GLOBAL_OPTIONS_HELP}from"./chunk-PECIBNFD.js";import{parseArgv}from"./chunk-QQCWGMZN.js";import"./chunk-2LOT54OO.js";import"./chunk-W4E4F2ZA.js";import"./chunk-QQRJLH6B.js";import"./chunk-VSJBJXZO.js";var VERSION=true?"0.74.0":"0.0.0-dev";var HELP=`twp ${VERSION} \u2014 TWP CLI
|
|
5
5
|
|
|
6
6
|
\u4F7F\u3044\u65B9:
|
|
7
7
|
twp \u5BFE\u8A71 TUI \u3092\u8D77\u52D5
|
|
@@ -767,6 +767,22 @@ import{GLOBAL_OPTIONS_HELP}from"./chunk-PECIBNFD.js";import{parseArgv}from"./chu
|
|
|
767
767
|
\u4E8B\u696D\u5E74\u5EA6\u8A2D\u5B9A\u3092\u66F4\u65B0\u3059\u308B\uFF08\u7BA1\u7406\u8005\u306E\u307F\uFF09
|
|
768
768
|
twp fiscal-year delete <\u5E74\u5EA6>
|
|
769
769
|
\u4E8B\u696D\u5E74\u5EA6\u8A2D\u5B9A\u3092\u524A\u9664\u3059\u308B\uFF08--yes \u304C\u8981\u308B\u30FB\u7BA1\u7406\u8005\u306E\u307F\uFF09
|
|
770
|
+
twp holiday list \u795D\u65E5\u3092\u4E00\u89A7\u3059\u308B\uFF08--year\uFF09
|
|
771
|
+
twp holiday create <\u65E5\u4ED8>
|
|
772
|
+
\u795D\u65E5\u3092\u767B\u9332\u3059\u308B\uFF08--name\u30FB--yes \u304C\u8981\u308B\u30FB\u7BA1\u7406\u8005\u306E\u307F\uFF09
|
|
773
|
+
twp holiday update <\u65E5\u4ED8>
|
|
774
|
+
\u795D\u65E5\u306E\u540D\u524D\u3092\u5909\u3048\u308B\uFF08--yes \u304C\u8981\u308B\u30FB\u7BA1\u7406\u8005\u306E\u307F\uFF09
|
|
775
|
+
twp holiday delete <\u65E5\u4ED8>
|
|
776
|
+
\u795D\u65E5\u3092\u524A\u9664\u3059\u308B\uFF08--yes \u304C\u8981\u308B\u30FB\u7BA1\u7406\u8005\u306E\u307F\uFF09
|
|
777
|
+
twp holiday business-days --from <\u65E5\u4ED8> --to <\u65E5\u4ED8>
|
|
778
|
+
\u671F\u9593\u306E\u55B6\u696D\u65E5\u6570\u3092\u6570\u3048\u308B
|
|
779
|
+
twp holiday export --out <\u30D1\u30B9>
|
|
780
|
+
\u795D\u65E5\u3092 CSV \u306B\u66F8\u304D\u51FA\u3059\uFF08\u7BA1\u7406\u8005\u306E\u307F\uFF09
|
|
781
|
+
twp holiday import --file <CSV>
|
|
782
|
+
\u795D\u65E5\u3092 CSV \u3067\u53D6\u308A\u8FBC\u3080\uFF08--yes \u304C\u8981\u308B\u30FB--dry-run \u3067\u5DEE\u5206\u30FB\u7BA1\u7406\u8005\u306E\u307F\uFF09
|
|
783
|
+
twp business-hours get \u55B6\u696D\u65E5\u30FB\u55B6\u696D\u6642\u9593\u3092\u8868\u793A\u3059\u308B\uFF08\u7BA1\u7406\u8005\u306E\u307F\uFF09
|
|
784
|
+
twp business-hours set --day <\u66DC\u65E5>=<HH:MM>-<HH:MM>|off
|
|
785
|
+
\u55B6\u696D\u65E5\u30FB\u55B6\u696D\u6642\u9593\u3092\u5909\u3048\u308B\uFF08--yes \u304C\u8981\u308B\u30FB--dry-run \u3067\u5DEE\u5206\u30FB\u7BA1\u7406\u8005\u306E\u307F\uFF09
|
|
770
786
|
twp evaluation list \u898B\u3066\u3088\u3044\u7BC4\u56F2\u306E\u4EBA\u4E8B\u8A55\u4FA1\u3092\u4E00\u89A7\u3059\u308B\uFF08--period\u30FB--status\uFF09
|
|
771
787
|
twp evaluation subordinates --period <\u8A55\u4FA1\u671F\u9593ID>
|
|
772
788
|
\u8A55\u4FA1\u8005\u3068\u3057\u3066\u6301\u3064\u90E8\u4E0B\u3068\u8A55\u4FA1\u306E\u72B6\u614B\u3092\u4E00\u89A7\u3059\u308B
|
|
@@ -1312,16 +1328,16 @@ TUI \u5185:
|
|
|
1312
1328
|
TWP API \u3092\u547C\u3079\u307E\u3059\u3002TWP API \u306E\u30C4\u30FC\u30EB\u306F\u65E2\u5B9A\u3067\u78BA\u8A8D\u304C\u51FA\u307E\u3059\uFF08-p \u3067\u306F\u62D2\u5426\u3002--allowed-tools \u3067\u540D\u524D\u3092\u8A31\u53EF\uFF09\u3002
|
|
1313
1329
|
\u4F1A\u8A71\u30FB\u30ED\u30FC\u30AB\u30EB\u30C4\u30FC\u30EB\uFF08\u30D5\u30A1\u30A4\u30EB\u30FB\u30B3\u30DE\u30F3\u30C9\u30FBgit\uFF09\u306F\u30C6\u30CA\u30F3\u30C8\u306E\u30AF\u30EC\u30B8\u30C3\u30C8\u3067\u5B9F\u969B\u306B\u52D5\u304D\u307E\u3059\u3002
|
|
1314
1330
|
`;function ignoreEpipe(stream){stream.on("error",err=>{if(err.code==="EPIPE")process.exit(0);throw err})}async function main(){const nodeMajor=Number(process.versions.node.split(".")[0]);if(nodeMajor<22){process.stderr.write(`twp-cli \u306B\u306F Node.js 22 \u4EE5\u4E0A\u304C\u5FC5\u8981\u3067\u3059\uFF08\u73FE\u5728: ${process.versions.node}\uFF09
|
|
1315
|
-
`);process.exit(1)}ignoreEpipe(process.stdout);ignoreEpipe(process.stderr);if(process.env["TWP_AUTO_UPDATE_WORKER"]==="1"){const{runAutoUpdateWorker}=await import("./auto-update-worker-VG77U4UA.js");await runAutoUpdateWorker().catch(()=>void 0);return}const[first,...rest]=process.argv.slice(2);if(first==="__complete"||first==="completion"){const completion=await import("./completion-
|
|
1316
|
-
const[{loadDomain},{loadUserConfig}]=await Promise.all([import("./registry-
|
|
1331
|
+
`);process.exit(1)}ignoreEpipe(process.stdout);ignoreEpipe(process.stderr);if(process.env["TWP_AUTO_UPDATE_WORKER"]==="1"){const{runAutoUpdateWorker}=await import("./auto-update-worker-VG77U4UA.js");await runAutoUpdateWorker().catch(()=>void 0);return}const[first,...rest]=process.argv.slice(2);if(first==="__complete"||first==="completion"){const completion=await import("./completion-YBKZ3GXD.js");if(first==="completion"){process.exitCode=completion.runCompletion(rest,process.stdout,process.stderr);return}
|
|
1332
|
+
const[{loadDomain},{loadUserConfig}]=await Promise.all([import("./registry-5IKYCMRP.js"),import("./config-3CNEQ7KN.js")]);process.exitCode=await completion.runComplete(rest,process.stdout,{loadDomain,profileNames:()=>Object.keys(loadUserConfig().profiles??{})});return}if(first==="configure"){const autoUpdate2=await import("./auto-update-YMI3F44R.js");autoUpdate2.registerRunning();autoUpdate2.onStartup(VERSION);const{runConfigure}=await import("./configure-3H3CGGBI.js");process.exitCode=
|
|
1317
1333
|
await runConfigure(rest);return}const args=parseArgv(process.argv.slice(2));if(args.command==="version"){process.stdout.write(`${VERSION}
|
|
1318
1334
|
`);return}if(args.command==="help"){process.stdout.write(HELP);return}if(args.unknown.length>0){process.stderr.write(`\u4E0D\u660E\u306A\u5F15\u6570: ${args.unknown.join(" ")}
|
|
1319
1335
|
|
|
1320
|
-
${HELP}`);process.exitCode=2;return}const autoUpdate=await import("./auto-update-YMI3F44R.js");autoUpdate.registerRunning();if(args.command==="task-loop"&&args.taskLoopAction!=="capacity"){process.env[autoUpdate.DISABLE_ENV]="1"}else if(args.command!=="update"){autoUpdate.onStartup(VERSION)}if(args.command==="domain"&&args.domain!==void 0){const{runDomain}=await import("./run-
|
|
1321
|
-
{},argv:args.domainArgv,help:args.domainHelp,globals:{...args.profile!==void 0?{profile:args.profile}:{},...args.output!==void 0?{output:args.output}:{},...args.query!==void 0?{query:args.query}:{},dryRun:args.dryRun,debug:args.debug,yes:args.yes,refresh:args.refresh},version:VERSION});return}if(args.command==="api"){const{runApiCommand}=await import("./api-command-
|
|
1322
|
-
profile}:{},...args.output!==void 0?{output:args.output}:{},...args.query!==void 0?{query:args.query}:{},dryRun:args.dryRun,debug:args.debug,yes:args.yes},version:VERSION});return}if(args.command==="update"){const{runUpdate}=await import("./update-NCAVUXSX.js");process.exitCode=await runUpdate({...args.profile!==void 0?{profile:args.profile}:{},version:VERSION});return}if(args.command==="login"||args.command==="logout"||args.command==="whoami"){const{runLogin,runLogout,runWhoami}=await import("./commands-
|
|
1323
|
-
const options={profile:args.profile,method:args.loginMethod,tenant:args.tenant,noBrowser:args.loginNoBrowser,cliVersion:VERSION,force:args.logoutForce,...args.output!==void 0?{output:args.output}:{},...args.query!==void 0?{query:args.query}:{}};const runner=args.command==="login"?runLogin:args.command==="logout"?runLogout:runWhoami;process.exitCode=await runner(options);return}if(args.command==="task-loop"){const{runTaskLoop}=await import("./commands-
|
|
1336
|
+
${HELP}`);process.exitCode=2;return}const autoUpdate=await import("./auto-update-YMI3F44R.js");autoUpdate.registerRunning();if(args.command==="task-loop"&&args.taskLoopAction!=="capacity"){process.env[autoUpdate.DISABLE_ENV]="1"}else if(args.command!=="update"){autoUpdate.onStartup(VERSION)}if(args.command==="domain"&&args.domain!==void 0){const{runDomain}=await import("./run-EQQOJ76O.js");process.exitCode=await runDomain({domain:args.domain,...args.operation!==void 0?{operation:args.operation}:
|
|
1337
|
+
{},argv:args.domainArgv,help:args.domainHelp,globals:{...args.profile!==void 0?{profile:args.profile}:{},...args.output!==void 0?{output:args.output}:{},...args.query!==void 0?{query:args.query}:{},dryRun:args.dryRun,debug:args.debug,yes:args.yes,refresh:args.refresh},version:VERSION});return}if(args.command==="api"){const{runApiCommand}=await import("./api-command-46GLOIHL.js");process.exitCode=await runApiCommand({argv:args.domainArgv,help:args.domainHelp,globals:{...args.profile!==void 0?{profile:args.
|
|
1338
|
+
profile}:{},...args.output!==void 0?{output:args.output}:{},...args.query!==void 0?{query:args.query}:{},dryRun:args.dryRun,debug:args.debug,yes:args.yes},version:VERSION});return}if(args.command==="update"){const{runUpdate}=await import("./update-NCAVUXSX.js");process.exitCode=await runUpdate({...args.profile!==void 0?{profile:args.profile}:{},version:VERSION});return}if(args.command==="login"||args.command==="logout"||args.command==="whoami"){const{runLogin,runLogout,runWhoami}=await import("./commands-U52UBWSU.js");
|
|
1339
|
+
const options={profile:args.profile,method:args.loginMethod,tenant:args.tenant,noBrowser:args.loginNoBrowser,cliVersion:VERSION,force:args.logoutForce,...args.output!==void 0?{output:args.output}:{},...args.query!==void 0?{query:args.query}:{}};const runner=args.command==="login"?runLogin:args.command==="logout"?runLogout:runWhoami;process.exitCode=await runner(options);return}if(args.command==="task-loop"){const{runTaskLoop}=await import("./commands-ZCXAJXHW.js");process.exitCode=await runTaskLoop(
|
|
1324
1340
|
{action:args.taskLoopAction??"run",project:args.project,profile:args.profile,safe:args.safe,daemon:args.daemon,interval:args.interval,maxCycles:args.maxCycles,forceRunner:args.forceRunner,force:args.stopForce,drain:args.stopDrain,engine:args.engine,version:VERSION,verbose:args.verbose,scheduleNow:args.scheduleNow,scheduleCounts:args.scheduleCounts,scheduleGate:args.scheduleGate,scheduleOp:args.scheduleOp,scheduleConfigOp:args.scheduleConfigOp,scheduleId:args.scheduleId,charterOp:args.charterOp,charterInput:args.
|
|
1325
1341
|
charterFile,charterOutput:args.charterOut,charterRevision:args.charterRevision,settingsOp:args.settingsOp,skillOp:args.skillOp,skillName:args.skillName,skillAll:args.skillAll,skillDir:args.skillDir,skillConfig:args.skillConfig,output:args.output,query:args.query,revisionFrom:args.revisionFrom,revisionTo:args.revisionTo,planOp:args.planOp,capacityOp:args.capacityOp,planEmpty:args.planEmpty,planCheck:args.planCheck,yes:args.yes,ais:args.ais,workspace:args.workspace,aiConfigFile:args.aiConfigFile,noAiConfigFile:args.
|
|
1326
|
-
noAiConfigFile});return}if(args.command==="print"){const{runOneShot}=await import("./oneshot-
|
|
1342
|
+
noAiConfigFile});return}if(args.command==="print"){const{runOneShot}=await import("./oneshot-7H3SFK7Q.js");process.exitCode=await runOneShot({prompt:args.prompt??"",fromStdin:args.promptFromStdin,mode:args.mode??"dev",...args.permissionMode!==void 0?{permissionMode:args.permissionMode}:{},allowedTools:args.allowedTools,disallowedTools:args.disallowedTools,...args.model!==void 0?{model:args.model}:{},...args.profile!==void 0?{profile:args.profile}:{},version:VERSION});return}const{startTui}=await import("./app-SQZCZANA.js");
|
|
1327
1343
|
await startTui({mode:args.mode,permissionMode:args.permissionMode,allowedTools:args.allowedTools,disallowedTools:args.disallowedTools,model:args.model,profile:args.profile,noTui:args.noTui||!process.stdout.isTTY,doctor:args.doctor,version:VERSION})}await main();
|
|
@@ -50,12 +50,12 @@ ${err.hint?`${err.hint}
|
|
|
50
50
|
`);return 1}writeErr(`\u30A8\u30E9\u30FC: ${err.message}
|
|
51
51
|
`);return 1}}async function runLogin(options){return run(async()=>{const profile=resolveProfile(options.profile);const io=makeIo(options.cliVersion);if(options.method==="password"){await passwordLogin(profile,{tenantCode:options.tenant??void 0},process.env,io)}else if(options.method==="token"){await tokenLogin(profile,process.env,io)}else{await browserLogin(profile,process.env,io,{noBrowser:options.noBrowser})}})}async function runLogout(options){return run(async()=>{const profile=resolveProfile(
|
|
52
52
|
options.profile);const creds=loadCredentials(profile.name);if(!creds){writeOut(`\u30D7\u30ED\u30D5\u30A1\u30A4\u30EB\u300C${profile.name}\u300D\u306F\u30ED\u30B0\u30A4\u30F3\u3057\u3066\u3044\u307E\u305B\u3093\u3002
|
|
53
|
-
`);return}const{describeLogoutImpact,findLoopsUsingProfile}=await import("./logout-guard-
|
|
53
|
+
`);return}const{describeLogoutImpact,findLoopsUsingProfile}=await import("./logout-guard-IWHF33DM.js");const found=findLoopsUsingProfile(profile.name,options.logoutGuard);if(found.users.length>0||found.undetermined.length>0){writeErr(describeLogoutImpact(profile.name,found,options.force===true));if(options.force!==true)throw new LogoutRefusedError}const apiUrl=effectiveApiUrl(profile,creds.api_url);const revoked=await httpFetch(`${apiUrl}/api/v2/auth/logout`,{method:"POST",headers:{Accept:"applic\
|
|
54
54
|
ation/json",Authorization:`Bearer ${creds.token}`}}).then(res=>res.ok,()=>false);await deleteCredentials(profile.name);writeOut(`\u2705 \u30ED\u30B0\u30A2\u30A6\u30C8\u3057\u307E\u3057\u305F\uFF08\u30D7\u30ED\u30D5\u30A1\u30A4\u30EB: ${profile.name} / \u30C8\u30FC\u30AF\u30F3: ${maskToken(creds.token)}\uFF09
|
|
55
55
|
`);if(!revoked){writeOut("\u26A0 \u30B5\u30FC\u30D0\u5074\u306E\u30C8\u30FC\u30AF\u30F3\u5931\u52B9\u306B\u5931\u6557\u3057\u307E\u3057\u305F\uFF08\u30AA\u30D5\u30E9\u30A4\u30F3\u7B49\uFF09\u3002TWP \u306E\u300C\u8A2D\u5B9A > CLI\u7AEF\u672B\u300D\u304B\u3089\u3082\u5931\u52B9\u3067\u304D\u307E\u3059\u3002\n")}})}async function runWhoami(options){return run(async()=>{const profile=resolveProfile(options.profile);const structured=options.output!==void 0||options.query!==void 0;let format=null;if(structured){
|
|
56
56
|
const{resolveOutputFormat,OUTPUT_FORMATS}=await import("./format-F6PPBPY5.js");format=resolveOutputFormat({...options.output!==void 0?{flag:options.output}:{},isTty:process.stdout.isTTY===true});if(format===null){throw new UsageError(`--output \u306B\u300C${options.output??""}\u300D\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,`\u6307\u5B9A\u3067\u304D\u308B\u306E\u306F ${OUTPUT_FORMATS.join(" / ")} \u3067\u3059`)}}const stored=loadCredentials(profile.name);const apiUrl=effectiveApiUrl(
|
|
57
57
|
profile,stored?.api_url);const session=new AuthSession(profile.name,apiUrl);const client=new TwpApiClient(apiUrl,session,httpFetch,options.cliVersion);const me=await client.get("/api/v2/user");const user=me.user;const creds=loadCredentials(profile.name);if(format!==null){const value={id:user?.id??null,name:user?.name??null,email:user?.email??null,tenant_code:user?.tenant_code??null,role:user?.role??null,is_admin:user?.is_admin??null,profile:profile.name,api_url:apiUrl,expires_at:creds?.token_expires_at??
|
|
58
|
-
null};const{evaluateQuery}=await import("./query-XEOVFI4D.js");const{renderOutput}=await import("./render-
|
|
58
|
+
null};const{evaluateQuery}=await import("./query-XEOVFI4D.js");const{renderOutput}=await import("./render-4SBLHU4J.js");const selected=options.query===void 0?value:await evaluateQuery(options.query,value);const text=renderOutput(selected,format);process.stdout.write(text.endsWith("\n")?text:`${text}
|
|
59
59
|
`);return}writeOut(`\u30E6\u30FC\u30B6\u30FC: ${user?.name??"?"}\uFF08${user?.email??"?"}\uFF09
|
|
60
60
|
`);writeOut(`ID: ${user?.id??"?"}
|
|
61
61
|
`);writeOut(`\u30C6\u30CA\u30F3\u30C8: ${user?.tenant_code??"?"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{ScheduleApi,collectDue,gateStatus,nowInZone,parseCounts,promptSection}from"./chunk-BYUV3D5Z.js";import{InstanceLock,buildLockOwner,defaultIsLoopProcess,writeLockOwner}from"./chunk-3WHC4FSG.js";import{LoopSettingsApplier,renderStepBudget}from"./chunk-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
buildLoopConfig,evaluateOwnership,exportStateDirEnv,localConfigPath,loopStateDir}from"./chunk-
|
|
3
|
+
import{EngineNotConfiguredError,NoopEngine,UnknownEngineError,aiUnavailableLabel,assertKnownEngine,failureHint,isAiUnavailable,needsHumanToRestoreAi}from"./chunk-ZOOEH7ZE.js";import{claudeConfigDir,resolveDetectDeps}from"./chunk-5SONMN6K.js";import{ScheduleApi,collectDue,gateStatus,nowInZone,parseCounts,promptSection}from"./chunk-BYUV3D5Z.js";import{InstanceLock,buildLockOwner,defaultIsLoopProcess,writeLockOwner}from"./chunk-3WHC4FSG.js";import{LoopSettingsApplier,renderStepBudget}from"./chunk-J2NRDFCR.js";
|
|
4
|
+
import{ServerSkillCatalog,formatSkillOrigins}from"./chunk-DPIJF3EN.js";import"./chunk-MYBIPHZ7.js";import"./chunk-A4LFG7MW.js";import{NO_PLAN_SESSION,RECENT_ADVANCE_WINDOW_HOURS,ReleaseOutcomeLog,buildDynamicBlocks,buildRecentCandidateIndex,createItem,enqueueBlockerRecovery,enqueueDevVerifyForMerged,enqueueReleasePartialMergeRerun,enqueueReleasePhase5Recovery,fileSkillNames,findRecentCandidate,formatInflightEntry,formatPlanResultLine,formatRecentAdvance,inflightEntries,inflightStaleHours,
|
|
5
|
+
openPlanSession,parseOutcomeCode,parseReleaseResult,parseTaskStatusSnapshot,pendingTaskKeys,resolveRecentAdvance,shouldSuppressForStatus,staleFloorHours,unavailableChecks,windowStartMicros}from"./chunk-HOLKWMS2.js";import"./chunk-VRBI2NPI.js";import{REDACTED,redactSecrets}from"./chunk-LDBYJPRD.js";import{duplicateTaskKeyDropReason,excludedKeyInArgs,extractPlanJson,parseOpsCount,parsePlanExcludeKeys,placeholderTaskKey,releaseDeployDropReason,stepToItem,zeroTargetDropReasons}from"./chunk-QS5VWTI3.js";
|
|
6
|
+
import"./chunk-DXUFECE7.js";import{buildLoopConfig,evaluateOwnership,exportStateDirEnv,localConfigPath,loopStateDir}from"./chunk-GAXJPIKO.js";import{CapacityReporter}from"./chunk-VYDPW2YO.js";import{exclusiveInflightEntries,formatExclusiveEntry,normalizeSkillName,spawnSyncResolved}from"./chunk-FABDZBDZ.js";import{describeOperations,evaluatePlanGate,planGateStatePath,recordPlanned}from"./chunk-XMPHGOW4.js";import{formatHookIds,formatHookWiring,runHook,runPrefetch,runPreflight}from"./chunk-TTST7UDR.js";
|
|
7
7
|
import{setSkillPrefix,skillCommand,skillFromPrompt,stripSkillCommand}from"./chunk-6CS5L24D.js";import{killProcessTree}from"./chunk-N2UVRM3Z.js";import{AgentLoopApi,describeError,filterByStatus,isPermanent,pick,pickString}from"./chunk-5KAWCLYN.js";import{PRIVATE_PROJECT_REF,isPrivateProjectId,isPrivateProjectRef,privateProjectId,projectFileKey}from"./chunk-GY7KI5E5.js";import{ULID_RE,loopProjectIdPolicy,resolveProjectRef}from"./chunk-HVZUXLQ4.js";import"./chunk-II5RVJQN.js";
|
|
8
8
|
import"./chunk-VFPY2A23.js";import{joinFor}from"./chunk-PMOUHEJQ.js";import{AuthSession}from"./chunk-XNLIEUAW.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import{compareVersionCores,parseVersionCore}from"./chunk-DXXFUNYN.js";import"./chunk-5WGOHFAS.js";import{effectiveApiUrl,resolveProfile}from"./chunk-4VZKNEVN.js";import{twpHomeDir}from"./chunk-RZVI6PMW.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";import fs9 from"fs";import path7 from"path";import fs from"fs";import path from"path";var LoopLogger=class{constructor(runnerId,logFile,out=process.stdout,now=()=>new Date){this.runnerId=runnerId;this.out=out;this.now=now;if(logFile){fs.mkdirSync(path.dirname(logFile),{recursive:true});this.stream=fs.createWriteStream(logFile,{flags:"a"})}}runnerId;out;now;stream=null;log(message){const d=this.now();const ts=`${d.getFullYear()}-${pad(d.getMonth()+1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`;const line=`[${ts}] [${this.runnerId}] ${stripTerminalControls(
|
|
9
9
|
message)}
|
|
@@ -18,7 +18,8 @@ r.outcomeDetail)}`;const runner=r.runnerId===null?"\u4E0D\u660E":sanitizeForProm
|
|
|
18
18
|
`- ${r.skill}: \u6700\u7D42\u6210\u529F ${s.lastSuccessAt??"\u306A\u3057\uFF08\u9061\u308C\u305F\u7BC4\u56F2\u5185\uFF09"} \uFF0F \u9023\u7D9A\u5931\u6557 ${s.failureStreak}${s.streakIsLowerBound?"\u56DE\u4EE5\u4E0A":"\u56DE"}${s.streakAlert!==null?`\uFF08\u8B66\u544A\u3057\u304D\u3044\u5024 ${s.streakAlert}\uFF09`:""} \uFF0F \u6700\u7D42\u6210\u529F\u4EE5\u964D\u306E\u5951\u7D04\u884C\u306A\u3057 ${s.noContractSinceSuccess}\u4EF6${s.alerting?" \u26A0\uFE0F \u8B66\u544A\u4E2D":""}${r.truncated?"\
|
|
19
19
|
\uFF08\u8D70\u67FB\u6253\u3061\u5207\u308A: \u8B66\u544A\u306A\u3057\u3092\u300C\u7570\u5E38\u306A\u3057\u300D\u3068\u8AAD\u307E\u306A\u3044\u3053\u3068\uFF09":""}`;lines.push(head);if(s!==null&&s.streakReasons.length>0){const shown=s.streakReasons.slice(0,MAX_STREAK_REASONS_IN_PROMPT);const rest=s.streakReasons.length-shown.length;lines.push(` \u9023\u7D9A\u5931\u6557\u306E\u5185\u8A33\uFF08\u65B0\u3057\u3044\u9806${rest>0?`\u30FB\u5148\u982D${shown.length}\u4EF6`:""}\uFF09:`);lines.push(...shown.
|
|
20
20
|
map(runLine));if(rest>0)lines.push(` - \u2026\u307B\u304B ${rest} \u4EF6\uFF08\u7701\u7565\uFF09`)}lines.push(r.recent.length>0?" \u76F4\u8FD1\u306E\u5B9F\u884C\uFF08\u65B0\u3057\u3044\u9806\uFF09:":" \u76F4\u8FD1\u306E\u5B9F\u884C: \u671F\u9593\u5185\u306B\u306A\u3057");lines.push(...r.recent.map(runLine))}return lines.join("\n")}function outcomeStreakWarnings(reports){return reports.filter(r=>r.summary?.alerting===true).map(r=>{const s=r.summary;const last=s.streakReasons[0];return`${sanitizeForPrompt(
|
|
21
|
-
r.skill)} \u304C ${s.failureStreak}${s.streakIsLowerBound?"\u56DE\u4EE5\u4E0A":"\u56DE"}\u9023\u7D9A\u3067\u5931\u6557\u3057\u3066\u3044\u307E\u3059\uFF08\u5168\u6A5F\u4F53\u901A\u7B97\u30FB\u30B5\u30FC\u30D0\u96C6\u8A08\uFF09${last?.outcomeDetail?`\u3002\u76F4\u8FD1: ${sanitizeForPrompt(last.outcomeDetail)}`:""}\u3002\u6B21\u30B5\u30A4\u30AF\u30EB\u3067\u30D6\u30ED\u30C3\u30AB\u30FC\u89E3\u6D88\u3092\u6700\u512A\u5148\u3059\u308B\u3053\u3068`})}
|
|
21
|
+
r.skill)} \u304C ${s.failureStreak}${s.streakIsLowerBound?"\u56DE\u4EE5\u4E0A":"\u56DE"}\u9023\u7D9A\u3067\u5931\u6557\u3057\u3066\u3044\u307E\u3059\uFF08\u5168\u6A5F\u4F53\u901A\u7B97\u30FB\u30B5\u30FC\u30D0\u96C6\u8A08\uFF09${last?.outcomeDetail?`\u3002\u76F4\u8FD1: ${sanitizeForPrompt(last.outcomeDetail)}`:""}\u3002\u6B21\u30B5\u30A4\u30AF\u30EB\u3067\u30D6\u30ED\u30C3\u30AB\u30FC\u89E3\u6D88\u3092\u6700\u512A\u5148\u3059\u308B\u3053\u3068`})}var ENV_SECRET_ASSIGNMENT=/\b([A-Z0-9_]{0,128}?(?:TOKEN|SECRET|PASSWORD|PASSWD|API_?KEY|CREDENTIALS?|PRIVATE_KEY)(?:_[A-Z0-9_]{0,128})?=)(?:\\?"(?!\$)[^"\n]+?\\?"|\\?'(?!\$)[^'\n]+?\\?'|(?![$(])[^\s"'`;&)]{8,})/g;var KNOWN_TOKEN_PATTERNS=[/\b(?:gh[pousr]_[A-Za-z0-9]{20,}|github_pat_[A-Za-z0-9_]{20,}|sk-ant-[A-Za-z0-9_-]{20,}|(?:AKIA|ASIA)[0-9A-Z]{16}|npm_[A-Za-z0-9]{30,}|xox[abprs]-[A-Za-z0-9-]{10,})\b/g,/\beyJ[A-Za-z0-9_-]{8,}\.eyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}/g,/-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]*?-----END [A-Z ]*PRIVATE KEY-----/g];
|
|
22
|
+
var URL_USERINFO=/(\b[a-z][a-z0-9+.-]*:\/\/)[^\s/@:"'`]+:[^\s/@"'`]+@/gi;function redactLoopOutput(text){if(text==="")return text;let out=redactSecrets(text).replace(URL_USERINFO,`$1${REDACTED}@`).replace(ENV_SECRET_ASSIGNMENT,(match,name)=>{const value=match.slice(name.length);const quote=/^\\?["']/.exec(value)?.[0]??"";return`${name}${quote}${REDACTED}${quote}`});for(const pattern of KNOWN_TOKEN_PATTERNS)out=out.replace(pattern,REDACTED);return out}import{spawnSync}from"child_process";import fs2 from"fs";import path2 from"path";var GIT_IDENTITY_ENV_KEYS=["GIT_AUTHOR_NAME","GIT_AUTHOR_EMAIL","GIT_COMMITTER_NAME","GIT_COMMITTER_EMAIL"];function resolveDeps(deps){return{run:deps.run??spawnSync,readdirSync:deps.readdirSync??(dir=>fs2.readdirSync(dir,{withFileTypes:true})),existsSync:deps.existsSync??fs2.existsSync,env:deps.env??process.env}}function expectedIdentity(configured,env=process.env){const pick2=(envKey,fromConfig)=>{const fromEnv=(env[envKey]??"").trim();if(fromEnv!=="")return fromEnv;return(fromConfig??"").trim()};
|
|
22
23
|
const name=pick2("TWP_GIT_IDENTITY_NAME",configured?.name);const email=pick2("TWP_GIT_IDENTITY_EMAIL",configured?.email);if(name===""||email==="")return null;return{name,email}}var GIT_IDENTITY_UNSET_LOG=' git identity \u306E\u671F\u5F85\u5024\u304C\u672A\u8A2D\u5B9A\u306E\u305F\u3081\u63C3\u3048\u307E\u305B\u3093\u3067\u3057\u305F\uFF08~/.twp/loops/<project>.json \u306E "git_identity": {"name","email"}\u3001\u307E\u305F\u306F TWP_GIT_IDENTITY_NAME / TWP_GIT_IDENTITY_EMAIL\uFF09\u3002GitHub \u30A2\u30AB\u30A6\u30F3\u30C8\u306B\u7D10\u3065\u304B\u306A\u3044 author \u306E commit \u306F Vercel Preview \u304C BLOCKED \u306B\u306A\u308A\u307E\u3059';
|
|
23
24
|
var SKIP_DIRS=new Set(["node_modules","vendor","dist","build","target"]);function isScannable(name){return!name.startsWith(".")&&!SKIP_DIRS.has(name)}function workspaceRepos(workspace,deps={}){const d=resolveDeps(deps);if(!d.existsSync(path2.join(workspace,".git")))return[];const repos=[workspace];for(const child of childDirs(workspace,d)){if(d.existsSync(path2.join(child,".git"))){repos.push(child);continue}for(const grandchild of childDirs(child,d)){if(d.existsSync(path2.join(grandchild,".git")))
|
|
24
25
|
repos.push(grandchild)}}return repos}function childDirs(dir,d){let entries;try{entries=d.readdirSync(dir)}catch{return[]}return[...entries].filter(e=>e.isDirectory()&&isScannable(e.name)).sort((a,b)=>a.name.localeCompare(b.name)).map(e=>path2.join(dir,e.name))}function git(args,d){const options={encoding:"utf8",timeout:1e4};return spawnSyncResolved("git",args,options,{},d.run)}function gitConfigGet(repo,key,d,local){const scope=local?["--local"]:[];const r=git(["-C",repo,"config",...scope,"--get",
|
|
@@ -80,28 +81,29 @@ renewIntervalSec=derived}isLost(){return this.lostReason!==null}lostReasonText()
|
|
|
80
81
|
if(why==="runner_not_registered"){this.deps.log.log(" \u539F\u56E0\u306F\u30E9\u30F3\u30CA\u30FC\u767B\u9332\u306E\u5931\u52B9\u3067\u3059\uFF08heartbeat \u5207\u308C\u30FB\u540C\u3058 runner_id \u3092\u5225\u30D7\u30ED\u30BB\u30B9\u304C\u53D6\u5F97\uFF09\u3002\u4EE5\u5F8C\u3053\u306E\u8A08\u753B\u4E2D\u306F\u5EF6\u9577\u3067\u304D\u3066\u3044\u307E\u305B\u3093")}else if(why==="acquired"||why==="reacquired"){this.deps.log.log(` \u4E00\u5EA6\u5931\u3063\u305F\u30ED\u30C3\u30AF\u3092\u53D6\u308A\u76F4\u3057\u3066\u3044\u307E\u3059\u3002\u8A08\u753B\u304C\u671F\u9650\u3088\u308A\u9577\u3044\u304B\u3001\u671F\u9650\u306E\u60F3\u5B9A\uFF08${this.
|
|
81
82
|
deps.config.planLockTtlSec}\u79D2\uFF09\u304C\u30B5\u30FC\u30D0\u8A2D\u5B9A\u3068\u305A\u308C\u3066\u3044\u307E\u3059`)}}};function describeOwner(json){const live=pickString(json,"state.owner_is_live");const liveText=live==="true"?"\u7A3C\u50CD\u4E2D":live==="false"?"\u5FDC\u7B54\u306A\u3057":"\u5224\u5B9A\u4E0D\u80FD";return[`runner=${pickString(json,"state.plan_owner_runner_id")||"\u4E0D\u660E"}`,`run=${pickString(json,"state.plan_owner")||"\u4E0D\u660E"}`,`\u958B\u59CB=${pickString(json,"stat\
|
|
82
83
|
e.plan_started_at")||"\u4E0D\u660E"}`,`\u671F\u9650=${pickString(json,"state.plan_lock_expires_at")||"\u4E0D\u660E"}`,`\u6B7B\u6D3B=${liveText}`].join(" ")}import fs4 from"fs";import path3 from"path";var MAX_RESULT_BYTES=1e5;function truncateResult(text,maxBytes=MAX_RESULT_BYTES){const encoded=Buffer.from(text,"utf8");if(encoded.length<=maxBytes)return text;const tail=encoded.subarray(encoded.length-maxBytes).toString("utf8");return`... (truncated, showing last ${Math.trunc(maxBytes/1e3)}KB) ...
|
|
83
|
-
${tail}`}function buildPayload(input){const payload={status:input.status,run_id:input.runId,result:
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
void 0
|
|
87
|
-
if(
|
|
88
|
-
|
|
89
|
-
api.
|
|
90
|
-
|
|
91
|
-
this.log.log(
|
|
92
|
-
|
|
93
|
-
\
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
\
|
|
97
|
-
|
|
84
|
+
${tail}`}function serverResult(text){return truncateResult(redactLoopOutput(text))}function buildPayload(input){const payload={status:input.status,run_id:input.runId,result:serverResult(input.logText)};if(input.aiType!==null)payload.ai_type=input.aiType;if(input.errorMessage)payload.error_message=redactLoopOutput(input.errorMessage).slice(0,10240);applyMetrics(payload,input.metrics);return payload}function redactOptional(value){return typeof value==="string"?redactLoopOutput(value):value}function redactStashedPayload(payload){
|
|
85
|
+
const out={...payload};if(typeof out.result==="string")out.result=serverResult(out.result);if(typeof out.error_message==="string")out.error_message=redactLoopOutput(out.error_message);if(typeof out.outcome_code==="string")out.outcome_code=redactLoopOutput(out.outcome_code);if(typeof out.outcome_detail==="string")out.outcome_detail=redactLoopOutput(out.outcome_detail);return out}var MAX_OUTCOME_CODE_LENGTH=200;var MAX_SKILL_LENGTH=100;function applyMetrics(payload,metrics){if(metrics===void 0)return;
|
|
86
|
+
const num=value=>typeof value==="number"&&Number.isFinite(value)&&value>=0?value:void 0;const str2=(value,max)=>{const trimmed=(value??"").trim();return trimmed===""?void 0:trimmed.slice(0,max)};const durationMs=num(metrics.durationMs);if(durationMs!==void 0)payload.duration_ms=Math.trunc(durationMs);const turns=num(metrics.turns);if(turns!==void 0)payload.turns=Math.trunc(turns);const tokensIn=num(metrics.tokensIn);if(tokensIn!==void 0)payload.tokens_in=Math.trunc(tokensIn);const tokensOut=num(
|
|
87
|
+
metrics.tokensOut);if(tokensOut!==void 0)payload.tokens_out=Math.trunc(tokensOut);const costUsd=num(metrics.costUsd);if(costUsd!==void 0)payload.cost_usd=costUsd;const skill=str2(metrics.skill,MAX_SKILL_LENGTH);if(skill!==void 0)payload.skill=skill;const effort=str2(metrics.effort,32);if(effort!==void 0)payload.effort=effort;const exitReason=str2(metrics.exitReason,32);if(exitReason!==void 0)payload.exit_reason=exitReason;const outcomeCode=str2(redactOptional(metrics.outcomeCode),MAX_OUTCOME_CODE_LENGTH);
|
|
88
|
+
if(outcomeCode!==void 0)payload.outcome_code=outcomeCode;const outcomeDetail=outcomeCode===void 0?void 0:str2(redactOptional(metrics.outcomeDetail),MAX_OUTCOME_DETAIL_LENGTH);if(outcomeDetail!==void 0)payload.outcome_detail=outcomeDetail}var NO_TURN_OUTCOME_CODE="no_turns_no_contract";function isNoTurnExecution(metrics,logText){const turns=metrics?.turns;if(typeof turns!=="number"||!Number.isFinite(turns)||turns!==0)return false;return parseOutcomeCode(logText)===null}var Writeback=class{constructor(api,config,log){
|
|
89
|
+
this.api=api;this.config=config;this.log=log}api;config;log;async uploadFullLog(itemId,runId,logText){if(isPrivateProjectId(this.config.projectId))return null;const fallback=reason=>{this.log.log(` \u26A0\uFE0F \u30B9\u30C6\u30C3\u30D7\u30ED\u30B0\u5168\u6587\u3092S3\u3078\u7F6E\u3051\u307E\u305B\u3093\u3067\u3057\u305F\uFF08${reason}\uFF09: item=${itemId}\u3002result\uFF08\u672B\u5C3E100KB\uFF09\u3078\u30D5\u30A9\u30FC\u30EB\u30D0\u30C3\u30AF\u3057\u307E\u3059`);return null};const issued=await this.
|
|
90
|
+
api.logUploadUrl(itemId,runId);if(!issued.ok)return fallback(`URL\u767A\u884C: ${describeError(issued)}`);const url=pickString(issued.json,"upload_url")||pickString(issued.json,"data.upload_url");const key=pickString(issued.json,"log_s3_key")||pickString(issued.json,"data.log_s3_key");const contentType=pickString(issued.json,"content_type")||pickString(issued.json,"data.content_type")||"text/plain";if(url===""||key==="")return fallback("URL\u767A\u884C: \u5FDC\u7B54\u306B upload_url / log_s3_key \u304C\u3042\u308A\u307E\u305B\u3093");
|
|
91
|
+
const body=redactLoopOutput(logText);const bytes=Buffer.byteLength(body,"utf8");const put=await this.api.putPresigned(url,body,contentType);if(!put.ok){return fallback(put.status===null?`PUT: transport_error=${put.transportError??"\u4E0D\u660E"}`:`PUT: http=${put.status}`)}this.log.log(` \u30B9\u30C6\u30C3\u30D7\u30ED\u30B0\u5168\u6587\u3092S3\u3078\u4FDD\u5B58\u3057\u307E\u3057\u305F\uFF08${bytes} bytes\uFF09: ${key}`);return key}pendingDir(){return path3.join(this.config.stateDir,"pending-wri\
|
|
92
|
+
teback")}async write(itemId,payload){const{run_id:runId,...rest}=payload;const res=await this.api.update(itemId,rest,runId);if(res.ok)return"ok";if(res.status===409){this.log.log(` \u26A0\uFE0F \u5B9F\u884C\u7D50\u679C\u3092\u66F8\u304D\u623B\u305B\u307E\u305B\u3093\u3067\u3057\u305F\uFF08409\u30FB\u3053\u306E\u30A2\u30A4\u30C6\u30E0\u306F\u65E2\u306B\u5225\u306E\u30E9\u30F3\u30CA\u30FC\u304C\u4FDD\u6301\u3057\u3066\u3044\u307E\u3059\uFF09: item=${itemId}`);this.log.log(" \u81EA\u5206\u306E claim \u306F\u5931\u52B9\u3057\u3066\u3044\u307E\
|
|
93
|
+
\u3059\uFF08heartbeat \u304C\u9014\u7D76\u3048\u3066\u56DE\u53CE\u3055\u308C\u305F\u53EF\u80FD\u6027\uFF09\u3002**\u7D50\u679C\u306F\u7834\u68C4\u3057\u307E\u3059**");this.log.log(" \u540C\u3058\u4F5C\u696D\u304C\u4ED6\u6A5F\u3067\u8D70\u3063\u3066\u3044\u308B\u53EF\u80FD\u6027\u304C\u3042\u308B\u305F\u3081\u3001\u30E9\u30F3\u30CA\u30FC\u306E\u6B7B\u6D3B\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\uFF08twp task-loop status\uFF09");return"lost"}this.log.log(` \u26A0\uFE0F \u5B9F\u884C\u7D50\u679C\u306E\u66F8\u304D\u623B\u3057\u306B\u5931\u6557\uFF08${describeError(
|
|
94
|
+
res)}\uFF09: item=${itemId}\u3002`);if(this.stash(itemId,payload)){this.log.log(` \u7D50\u679C\u306F ${this.pendingDir()}/${itemId}.json \u306B\u9000\u907F\u3057\u307E\u3057\u305F\u3002**\u6B21\u30B5\u30A4\u30AF\u30EB\u5192\u982D\u3067\u518D\u9001\u3057\u307E\u3059**`);this.log.log(" \u518D\u9001\u3067\u304D\u306A\u3044\u307E\u307E\u306A\u3089\u3001\u30B5\u30FC\u30D0\u304C\u300Clive \u3060\u304C\u5225\u30A2\u30A4\u30C6\u30E0\u3078\u79FB\u3063\u305F\u300D\u3068\u5224\u5B9A\u3057\u3066\u56DE\u53CE\u3057\u307E\u3059")}else{
|
|
95
|
+
this.log.log(" \u26D4 \u9000\u907F\u306B\u3082\u5931\u6557\u3057\u305F\u305F\u3081\u3001\u3053\u306E\u7D50\u679C\u306F\u5931\u308F\u308C\u307E\u3057\u305F\uFF08\u30B5\u30FC\u30D0\u306E\u56DE\u53CE\u3067 pending \u306B\u623B\u308A\u518D\u5B9F\u884C\u3055\u308C\u307E\u3059\uFF09")}this.log.log(" \u5B8C\u4E86\u6271\u3044\u306E\u5F8C\u51E6\u7406\uFF08\u5B9A\u671F\u67A0\u306E\u7D42\u7AEF\u30FB\u30EA\u30EA\u30FC\u30B9\u7D50\u679C\u306E\u8A18\u9332\u30FB\u5F8C\u7D9A\u6295\u5165\uFF09\u306F\u884C\u3044\u307E\u305B\u3093");
|
|
96
|
+
return"failed"}stash(itemId,payload){if(!/^[A-Za-z0-9_-]+$/.test(itemId))return false;const dir=this.pendingDir();try{fs4.mkdirSync(dir,{recursive:true,mode:448});if(process.platform!=="win32")fs4.chmodSync(dir,448);fs4.writeFileSync(path3.join(dir,`${itemId}.json`),JSON.stringify(payload),{mode:384});return true}catch{return false}}async retryPending(now=Date.now()){const dir=this.pendingDir();let files;try{files=fs4.readdirSync(dir).filter(f=>f.endsWith(".json"))}catch{return[]}if(files.length===
|
|
97
|
+
0)return[];this.log.log(` \u672A\u9001\u4FE1\u306E\u5B9F\u884C\u7D50\u679C\u304C ${files.length} \u4EF6\u3042\u308A\u307E\u3059\uFF08\u524D\u30B5\u30A4\u30AF\u30EB\u307E\u3067\u306B\u66F8\u304D\u623B\u305B\u306A\u304B\u3063\u305F\u3082\u306E\uFF09\u2192 \u518D\u9001\u3057\u307E\u3059`);const recorded=[];for(const name of files){const itemId=name.replace(/\.json$/,"");const file=path3.join(dir,name);if(!/^[A-Za-z0-9_-]+$/.test(itemId)){this.log.log(` \u26A0\uFE0F \u9000\u907F\u30D5\u30A1\u30A4\u30EB\u540D\u304C item_id \u306E\u5F62\u5F0F\u3067\u306F\u306A\u3044\u305F\u3081\u9001\u4FE1\u3057\u307E\u305B\u3093: ${name}`);
|
|
98
|
+
continue}try{const ageDays=(now-fs4.statSync(file).mtimeMs)/864e5;if(ageDays>this.config.writebackMaxAgeDays){fs4.rmSync(file,{force:true});this.log.log(` \u26D4 \u9000\u907F\u304B\u3089 ${this.config.writebackMaxAgeDays} \u65E5\u3092\u8D85\u3048\u305F\u305F\u3081\u7834\u68C4\u3057\u307E\u3057\u305F: item=${itemId}`);continue}}catch{continue}let payload;try{payload=JSON.parse(fs4.readFileSync(file,"utf8"))}catch{fs4.rmSync(file,{force:true});this.log.log(` \u26A0\uFE0F \u9000\u907F\u30D5\u30A1\u30A4\u30EB\u3092\u8AAD\u3081\u306A\u304B\u3063\u305F\u305F\u3081\u7834\u68C4\u3057\u307E\u3057\u305F: item=${itemId}`);
|
|
99
|
+
continue}const{run_id:runId,...rest}=redactStashedPayload(payload);const res=await this.api.update(itemId,rest,runId||this.config.runId);if(res.ok){fs4.rmSync(file,{force:true});this.log.log(` \u2705 \u5B9F\u884C\u7D50\u679C\u3092\u518D\u9001\u3057\u307E\u3057\u305F: item=${itemId}\uFF08status=${payload.status}\uFF09`);if(payload.status==="completed")recorded.push(itemId)}else if(res.status===409){fs4.rmSync(file,{force:true});this.log.log(` \u26A0\uFE0F \u518D\u9001\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08409\u30FB\u65E2\u306B\u5225\u306E\u30E9\u30F3\u30CA\u30FC/\u5225\u306E run \u304C\u4FDD\u6301\uFF09: item=${itemId}\
|
|
98
100
|
\u2192 \u7D50\u679C\u306F\u7834\u68C4\u3057\u307E\u3059`)}else if(res.status!==null&&res.status>=400&&res.status<500&&res.status!==408&&res.status!==429){fs4.rmSync(file,{force:true});this.log.log(` \u26D4 \u30B5\u30FC\u30D0\u306B\u6052\u4E45\u7684\u306B\u62D2\u5426\u3055\u308C\u305F\u305F\u3081\u7834\u68C4\u3057\u307E\u3059\uFF08http=${res.status}\uFF09: item=${itemId}`)}else{this.log.log(` \u26A0\uFE0F \u518D\u9001\u306B\u5931\u6557\uFF08${describeError(res)}\uFF09: item=${itemId}\u3002\u6B21\u30B5\u30A4\u30AF\u30EB\u3067\u518D\u8A66\
|
|
99
101
|
\u884C\u3057\u307E\u3059`)}}return recorded}};var PLAN_SUPPRESS_REASONS={"step \u306E\u5F62\u304C\u4E0D\u6B63":"invalid_step","\u30BF\u30B9\u30AF\u30AD\u30FC\u304C\u30D7\u30EC\u30FC\u30B9\u30DB\u30EB\u30C0":"placeholder_key","release-deploy \u306E\u7A7A\u632F\u308A\u9632\u6B62":"release_deploy_guard","\u5BFE\u8C610\u4EF6":"zero_target","\u4ED6\u30E9\u30F3\u30CA\u30FC\u304C\u51E6\u7406\u4E2D":"inflight","\u65E2\u306B\u30AD\u30E5\u30FC\u5F85\u3061":"already_pending","\u540C\u4E00\u8A08\u753B\u5185\u306E\u91CD\u8907\u30AD\u30FC":"duplicate_in_\
|
|
100
102
|
plan","\u4EBA\u306B\u30DC\u30FC\u30EB\u304C\u3042\u308B":"human_ball","\u524D\u56DE\u304C\u72B6\u614B\u3092\u9032\u3081\u305F":"recently_advanced","\u6642\u9593\u5E2F\u30B2\u30FC\u30C8":"schedule_gate","\u8A08\u753B\u30ED\u30C3\u30AF\u55AA\u5931\u3067\u672A\u51E6\u7406":"lock_lost","\u5916\u90E8\u6295\u7A3F\u30B9\u30AD\u30EB\u306E\u540C\u6642\u5B9F\u884C":"exclusive_skill"};var ENQUEUE_ERROR_PREFIX="\u6295\u5165\u30A8\u30E9\u30FC: ";var MAX_STEPS=100;var MAX_SCHEDULED=100;var MAX_CONTRACT_LINES=20;
|
|
101
|
-
var MAX_CONTRACT_LINE_CHARS=1e3;var MAX_LABEL_CHARS=300;var MAX_DETAIL_CHARS=500;var MAX_TASK_KEY_CHARS=64;function clip(value,max){const s=(value??"").trim();return s===""?null:s.slice(0,max)}function dropToStep(drop){const base={task_key:clip(drop.task_key,MAX_TASK_KEY_CHARS),label:clip(drop.skill,MAX_LABEL_CHARS),item_id:null};if(drop.reason.startsWith(ENQUEUE_ERROR_PREFIX)){return{...base,outcome:"error",reason:"enqueue_error",detail:clip(drop.reason.slice(ENQUEUE_ERROR_PREFIX.
|
|
102
|
-
const code=PLAN_SUPPRESS_REASONS[drop.reason];return{...base,outcome:"suppressed",reason:code??"other",detail:code===void 0?clip(drop.reason,MAX_DETAIL_CHARS):null}}function extractContractLines(output){const lines=[...output.matchAll(/^.*\b[A-Z][A-Z0-9_]*_RESULT:.*$/gm)].map(m=>m[0].trim().slice(0,MAX_CONTRACT_LINE_CHARS)).filter(l=>l!=="");return lines.slice(-MAX_CONTRACT_LINES)}function standaloneRecord(result,scheduled){return{result,ai_type:null,ai_model:null,cost_usd:null,
|
|
103
|
-
turns:null,duration_ms:null,final_report:null,contract_lines:[],steps:[],scheduled:scheduled.slice(0,MAX_SCHEDULED)}}function planRecord(input){const{engine,summary}=input;const metrics=engine?.metrics;const steps=[...input.enqueuedSteps.map(s=>({outcome:"enqueued",task_key:clip(s.task_key,MAX_TASK_KEY_CHARS),label:clip(s.label,MAX_LABEL_CHARS),item_id:s.item_id,reason:null,detail:null})),...(summary?.dropped??[]).map(dropToStep)];const output=engine?.
|
|
104
|
-
serverAiType??null,ai_model:null,cost_usd:metrics?.costUsd??null,tokens_in:metrics?.tokensIn??null,tokens_out:metrics?.tokensOut??null,turns:metrics?.turns??null,duration_ms:input.durationMs===null?null:Math.max(0,Math.trunc(input.durationMs)),final_report:output.trim()===""?null:truncateResult(output),contract_lines:extractContractLines(output),steps:steps.slice(0,MAX_STEPS),scheduled:input.scheduled.slice(0,MAX_SCHEDULED)}}var USER_ID_RE=/^[A-Za-z0-9._-]{1,64}$/;var ProjectApi=class{constructor(apiUrl,session,fetchImpl=httpFetch){this.apiUrl=apiUrl;this.session=session;this.fetchImpl=fetchImpl}apiUrl;session;fetchImpl;async resolve(ref){if(isPrivateProjectRef(ref))return this.resolvePrivate();return resolveProjectRef(ref,path8=>this.get(path8),loopProjectIdPolicy)}async resolvePrivate(){const res=await this.get("/api/v2/user");if(!res.ok){throw new Error(`\u30ED\u30B0\u30A4\u30F3\u4E2D\u306E\u30E6\u30FC\u30B6\u30FC\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08HTTP ${res.
|
|
103
|
+
var MAX_CONTRACT_LINE_CHARS=1e3;var MAX_LABEL_CHARS=300;var MAX_DETAIL_CHARS=500;var MAX_TASK_KEY_CHARS=64;function clip(value,max){const s=(value??"").trim();return s===""?null:s.slice(0,max)}function dropToStep(drop){const base={task_key:clip(drop.task_key,MAX_TASK_KEY_CHARS),label:clip(drop.skill,MAX_LABEL_CHARS),item_id:null};if(drop.reason.startsWith(ENQUEUE_ERROR_PREFIX)){return{...base,outcome:"error",reason:"enqueue_error",detail:clip(redactLoopOutput(drop.reason.slice(ENQUEUE_ERROR_PREFIX.
|
|
104
|
+
length)),MAX_DETAIL_CHARS)}}const code=PLAN_SUPPRESS_REASONS[drop.reason];return{...base,outcome:"suppressed",reason:code??"other",detail:code===void 0?clip(drop.reason,MAX_DETAIL_CHARS):null}}function extractContractLines(output){const lines=[...output.matchAll(/^.*\b[A-Z][A-Z0-9_]*_RESULT:.*$/gm)].map(m=>m[0].trim().slice(0,MAX_CONTRACT_LINE_CHARS)).filter(l=>l!=="");return lines.slice(-MAX_CONTRACT_LINES)}function standaloneRecord(result,scheduled){return{result,ai_type:null,ai_model:null,cost_usd:null,
|
|
105
|
+
tokens_in:null,tokens_out:null,turns:null,duration_ms:null,final_report:null,contract_lines:[],steps:[],scheduled:scheduled.slice(0,MAX_SCHEDULED)}}function planRecord(input){const{engine,summary}=input;const metrics=engine?.metrics;const steps=[...input.enqueuedSteps.map(s=>({outcome:"enqueued",task_key:clip(s.task_key,MAX_TASK_KEY_CHARS),label:clip(s.label,MAX_LABEL_CHARS),item_id:s.item_id,reason:null,detail:null})),...(summary?.dropped??[]).map(dropToStep)];const output=redactLoopOutput(engine?.
|
|
106
|
+
output??"");return{result:input.result,ai_type:engine?.serverAiType??null,ai_model:null,cost_usd:metrics?.costUsd??null,tokens_in:metrics?.tokensIn??null,tokens_out:metrics?.tokensOut??null,turns:metrics?.turns??null,duration_ms:input.durationMs===null?null:Math.max(0,Math.trunc(input.durationMs)),final_report:output.trim()===""?null:truncateResult(output),contract_lines:extractContractLines(output),steps:steps.slice(0,MAX_STEPS),scheduled:input.scheduled.slice(0,MAX_SCHEDULED)}}var USER_ID_RE=/^[A-Za-z0-9._-]{1,64}$/;var ProjectApi=class{constructor(apiUrl,session,fetchImpl=httpFetch){this.apiUrl=apiUrl;this.session=session;this.fetchImpl=fetchImpl}apiUrl;session;fetchImpl;async resolve(ref){if(isPrivateProjectRef(ref))return this.resolvePrivate();return resolveProjectRef(ref,path8=>this.get(path8),loopProjectIdPolicy)}async resolvePrivate(){const res=await this.get("/api/v2/user");if(!res.ok){throw new Error(`\u30ED\u30B0\u30A4\u30F3\u4E2D\u306E\u30E6\u30FC\u30B6\u30FC\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08HTTP ${res.
|
|
105
107
|
status}\uFF09\u3002\u500B\u4EBA\u30AD\u30E5\u30FC\u3092\u56DE\u3059\u306B\u306F \`twp login\` \u304C\u5FC5\u8981\u3067\u3059\u3002\u63A5\u7D9A\u5148\u3068\u30ED\u30B0\u30A4\u30F3\u72B6\u614B\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}const userId=res.json?.user?.id;if(typeof userId!=="string"||!USER_ID_RE.test(userId)){throw new Error(`\u30B5\u30FC\u30D0\u304C\u8FD4\u3057\u305F\u30E6\u30FC\u30B6\u30FCID\u3092\u500B\u4EBA\u30AD\u30E5\u30FC\u306EID\u306B\u4F7F\u3048\u307E\u305B\u3093\uFF08${String(
|
|
106
108
|
userId).slice(0,60)}\uFF09\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return{id:privateProjectId(userId),code:PRIVATE_PROJECT_REF,name:"\u500B\u4EBA\u30BF\u30B9\u30AF"}}async countByStatus(projectId,statusId){const res=await this.get(`/api/v2/projects/${projectId}/tasks?status_id=${encodeURIComponent(statusId)}&limit=1`);if(!res.ok){return{total:null,error:res.status===null?res.error??"\u901A\u4FE1\u5931\u6557":`HTTP ${res.status}`}}const total=res.json?.
|
|
107
109
|
pagination?.total;if(typeof total!=="number"){return{total:null,error:"\u5FDC\u7B54\u304B\u3089 pagination.total \u3092\u8AAD\u3081\u306A\u3044"}}return{total,error:null}}async get(path8){let token;try{token=await this.session.getAccessToken()}catch(err){return{ok:false,status:null,json:null,error:err.message}}try{const res=await this.fetchImpl(`${this.apiUrl}${path8}`,{headers:{Authorization:`Bearer ${token}`,"Content-Type":"application/json",Accept:"application/json"}});const raw=await res.text();
|
|
@@ -118,11 +120,11 @@ log.log(` \u5B9A\u671F\u30B9\u30B1\u30B8\u30E5\u30FC\u30EB\u5C65\u6B74\u3092\u6
|
|
|
118
120
|
\u3093\u3067\u3057\u305F\uFF08\u7406\u7531: ${why}\uFF09\u3002\u30EA\u30FC\u30B9\u671F\u9650\u307E\u3067\u518D\u8A66\u884C\u3067\u304D\u307E\u305B\u3093`)}}async promptSection(enqueuedFile){const cfg=await this.loadConfig();if("error"in cfg){this.deps.log.log(` \u26A0\uFE0F \u8A08\u753B\u30D7\u30ED\u30F3\u30D7\u30C8\u7528\u306E\u5B9A\u671F\u30BB\u30AF\u30B7\u30E7\u30F3\u3092\u751F\u6210\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F: ${cfg.error}`);this.deps.log.log(" \u8A08\u753BAI\u306B\u300C\u6295\u5165\u6E08\u307F\u306E\u5B9A\u671F\u30BF\u30B9\u30AF\u300D\u3092\u4F1D\u3048\
|
|
119
121
|
\u3089\u308C\u306A\u3044\u305F\u3081\u3001\u91CD\u8907\u6295\u5165\u306E\u6291\u6B62\u304C\u5F31\u307E\u308A\u307E\u3059");return""}const hist=await this.loadHistory();if("error"in hist){this.deps.log.log(` \u26A0\uFE0F \u5B9A\u671F\u30BB\u30AF\u30B7\u30E7\u30F3\u306E\u300C\u6B21\u56DE\u767A\u706B\u4E88\u5B9A\u300D\u3092\u7701\u7565\u3057\u307E\u3059\uFF08\u5C65\u6B74\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093: ${hist.error}\uFF09`)}const lines=readEnqueuedLines(enqueuedFile);return promptSection(
|
|
120
122
|
cfg.config,this.now(),"error"in hist?[]:hist.rows,lines,!("error"in hist))}};function readEnqueuedLines(file){if(!file)return[];let text;try{text=fs5.readFileSync(file,"utf8")}catch{return[]}return text.split("\n").filter(l=>l.trim()!=="").map(l=>l.replace(/\n$/,""))}async function refineCount(key,raw,hooks,cwd,run=(hook,dir)=>runHook(hook,dir)){const hook=hooks.get(key);if(!hook||raw===null||raw===0)return{total:raw,note:null};const r=await run(hook,cwd);const out=r.stdout.trim();if(!r.ok||!/^\d+$/.test(out)){return{total:raw,note:`${key}: \u6570\u3048\u76F4\u3057\u306B\u5931\u6557\u3057\u305F\u305F\u3081\u7D20\u306E\u4EF6\u6570 ${raw} \u3092\u4F7F\u3044\u307E\u3059\uFF08${r.ok?"\u51FA\u529B\u304C\u6574\u65701\u884C\u3067\u306F\u306A\u3044":r.reason}\uFF09`}}
|
|
121
|
-
const n=Number.parseInt(out,10);if(n>raw){return{total:raw,note:`${key}: \u6570\u3048\u76F4\u3057\u306E\u7D50\u679C ${n} \u304C\u7D20\u306E\u4EF6\u6570 ${raw} \u3092\u8D85\u3048\u308B\u305F\u3081\u7D20\u306E\u4EF6\u6570\u3092\u4F7F\u3044\u307E\u3059`}}return{total:n,note:`${key}: ${raw}\u4EF6\u306E\u3046\u3061\u30B2\u30FC\u30C8\u306B\u52B9\u304F\u3082\u306E ${n}\u4EF6\uFF08${hook.id}\uFF09`}}function exitReasonFor(outcome){if(outcome==="ok")return"ok";if(outcome==="timeout")return"timeout";if(outcome==="rate-limited")return"rate_limited";if(outcome==="aborted")return"interrupted";if(outcome==="max-turns")return"max_turns";return"error"}function withFailureHint(base,output){const hint=failureHint(output);return hint===""?base:`${base} | ${hint}`}var STOP_WAIT_MAX_SEC=3600;var AI_RECOVERY_HINT="\u78BA\u8A8D: claude-auto-switch status \uFF0F \u5404AI CLI\u306E\u30ED\u30B0\u30A4\u30F3\u72B6\u614B\uFF08twp task-loop setup \u3067\u691C\u51FA\u7D50\u679C\u304C\
|
|
122
|
-
var ABORT_DRAIN_TIMEOUT_MS=15e3;function lastContractLine(logText,line){const prefix=line!==null&&/^[A-Z][A-Z0-9_]*$/.test(line)?line:"[A-Z][A-Z0-9_]*_RESULT";return[...logText.matchAll(new RegExp(`^(?:${prefix}):[^\\n]*`,"gm"))].at(-1)?.[0]??""}var TaskLoop=class{constructor(deps){this.deps=deps;this.writeback=new Writeback(deps.api,deps.config,deps.log);this.schedule=new ScheduleBridge({config:deps.config,log:deps.log,api:new ScheduleApi(deps.api),fetchCount:async(key,statusId)=>{
|
|
123
|
-
projectApi.countByStatus(deps.config.projectId,statusId);if(error){deps.log.log(` \u26A0\uFE0F require_zero\u300C${key}\u300D\u306E\u4EF6\u6570\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08${error}\uFF09\u3002\u3053\u306E\u67A0\u306F\u767A\u706B\u3057\u307E\u305B\u3093\uFF08fail-closed\uFF09`)}const refined=await refineCount(key,total,deps.config.operations.countHooks,deps.config.workspace);if(refined.note)deps.log.log(` ${refined.note}`);
|
|
124
|
-
engine=deps.engine;this.releaseLog=new ReleaseOutcomeLog(deps.config.releaseOutcomeLogPath);this.postDeps={api:deps.api,config:deps.config,log:deps.log,releaseLog:this.releaseLog};this.planLock=new PlanLock({api:deps.api,config:deps.config,log:deps.log,runner:deps.runner,hasPendingItems:async()=>await this.hasPendingItems()&&!this.nothingClaimableBacklog,reregister:async()=>{deps.runner.registered=false;await deps.runner.registerOrThrow()},...deps.sleepFn?{sleepFn:deps.
|
|
125
|
-
deps.trustGate??new TrustGate({enabled:()=>deps.config.ai.usesAi("claude"),check:()=>checkWorkspaceTrust(deps.config.workspace,{launcherBin:deps.config.claudeLauncher.bin})});this.timestamp=new Date().toISOString().replace(/[-:]/g,"").replace(/\..*$/,"");this.settings=deps.settings??new LoopSettingsApplier({api:deps.api,config:deps.config,log:m=>deps.log.log(m)});this.skills=deps.skills??new ServerSkillCatalog({api:deps.api,config:deps.config,log:m=>deps.log.log(m)})}deps;planGateFingerprint=null;lastPlanWasEmpty=false;writeback;schedule;planLock;planRunScheduled=[];planRunRecord=null;engine;releaseLog;postDeps;timestamp;deferredIds=new Set;midcycleEnqueued=0;aborting=false;draining=false;nothingClaimableBacklog=false;drainExitCode=0;drainWaiters=new Set;itemInFlight=null;ownershipLostItemId=null;abortDrained=null;cyclePreflightSection="";trustGate;settings;skills;sleep(ms){
|
|
123
|
+
const n=Number.parseInt(out,10);if(n>raw){return{total:raw,note:`${key}: \u6570\u3048\u76F4\u3057\u306E\u7D50\u679C ${n} \u304C\u7D20\u306E\u4EF6\u6570 ${raw} \u3092\u8D85\u3048\u308B\u305F\u3081\u7D20\u306E\u4EF6\u6570\u3092\u4F7F\u3044\u307E\u3059`}}return{total:n,note:`${key}: ${raw}\u4EF6\u306E\u3046\u3061\u30B2\u30FC\u30C8\u306B\u52B9\u304F\u3082\u306E ${n}\u4EF6\uFF08${hook.id}\uFF09`}}function exitReasonFor(outcome){if(outcome==="ok")return"ok";if(outcome==="timeout")return"timeout";if(outcome==="rate-limited")return"rate_limited";if(outcome==="aborted")return"interrupted";if(outcome==="max-turns")return"max_turns";return"error"}function withFailureHint(base,output){const hint=failureHint(redactLoopOutput(output));return hint===""?base:`${base} | ${hint}`}var STOP_WAIT_MAX_SEC=3600;var AI_RECOVERY_HINT="\u78BA\u8A8D: claude-auto-switch status \uFF0F \u5404AI CLI\u306E\u30ED\u30B0\u30A4\u30F3\u72B6\u614B\uFF08twp task-loop setup \u3067\u691C\u51FA\u7D50\u679C\u304C\
|
|
124
|
+
\u51FA\u307E\u3059\uFF09";var ABORT_DRAIN_TIMEOUT_MS=15e3;function lastContractLine(logText,line){const prefix=line!==null&&/^[A-Z][A-Z0-9_]*$/.test(line)?line:"[A-Z][A-Z0-9_]*_RESULT";return[...logText.matchAll(new RegExp(`^(?:${prefix}):[^\\n]*`,"gm"))].at(-1)?.[0]??""}var TaskLoop=class{constructor(deps){this.deps=deps;this.writeback=new Writeback(deps.api,deps.config,deps.log);this.schedule=new ScheduleBridge({config:deps.config,log:deps.log,api:new ScheduleApi(deps.api),fetchCount:async(key,statusId)=>{
|
|
125
|
+
const{total,error}=await deps.projectApi.countByStatus(deps.config.projectId,statusId);if(error){deps.log.log(` \u26A0\uFE0F require_zero\u300C${key}\u300D\u306E\u4EF6\u6570\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08${error}\uFF09\u3002\u3053\u306E\u67A0\u306F\u767A\u706B\u3057\u307E\u305B\u3093\uFF08fail-closed\uFF09`)}const refined=await refineCount(key,total,deps.config.operations.countHooks,deps.config.workspace);if(refined.note)deps.log.log(` ${refined.note}`);
|
|
126
|
+
return refined.total}});this.engine=deps.engine;this.releaseLog=new ReleaseOutcomeLog(deps.config.releaseOutcomeLogPath);this.postDeps={api:deps.api,config:deps.config,log:deps.log,releaseLog:this.releaseLog};this.planLock=new PlanLock({api:deps.api,config:deps.config,log:deps.log,runner:deps.runner,hasPendingItems:async()=>await this.hasPendingItems()&&!this.nothingClaimableBacklog,reregister:async()=>{deps.runner.registered=false;await deps.runner.registerOrThrow()},...deps.sleepFn?{sleepFn:deps.
|
|
127
|
+
sleepFn}:{}});this.trustGate=deps.trustGate??new TrustGate({enabled:()=>deps.config.ai.usesAi("claude"),check:()=>checkWorkspaceTrust(deps.config.workspace,{launcherBin:deps.config.claudeLauncher.bin})});this.timestamp=new Date().toISOString().replace(/[-:]/g,"").replace(/\..*$/,"");this.settings=deps.settings??new LoopSettingsApplier({api:deps.api,config:deps.config,log:m=>deps.log.log(m)});this.skills=deps.skills??new ServerSkillCatalog({api:deps.api,config:deps.config,log:m=>deps.log.log(m)})}deps;planGateFingerprint=null;lastPlanWasEmpty=false;writeback;schedule;planLock;planRunScheduled=[];planRunRecord=null;engine;releaseLog;postDeps;timestamp;deferredIds=new Set;midcycleEnqueued=0;aborting=false;draining=false;nothingClaimableBacklog=false;drainExitCode=0;drainWaiters=new Set;itemInFlight=null;ownershipLostItemId=null;abortDrained=null;cyclePreflightSection="";trustGate;settings;skills;sleep(ms){
|
|
126
128
|
return(this.deps.sleepFn??sleep)(ms)}sleepUnlessDraining(ms){if(this.draining)return Promise.resolve();return new Promise(resolve=>{let timer=null;let settled=false;const wake=()=>{if(settled)return;settled=true;if(timer!==null)clearTimeout(timer);this.drainWaiters.delete(wake);resolve()};this.drainWaiters.add(wake);const injected=this.deps.sleepFn;if(injected)void injected(ms).then(wake);else timer=setTimeout(wake,ms)})}requestDrain(reason,exitCode=0){if(this.draining)return;this.draining=true;
|
|
127
129
|
this.drainExitCode=exitCode;const running=this.itemInFlight;const why=reason.trim()===""?"\u7406\u7531\u4E0D\u660E":reason;this.deps.log.log(running===null?`\u30C9\u30EC\u30A4\u30F3\u8981\u6C42\u3092\u53D7\u3051\u53D6\u308A\u307E\u3057\u305F\uFF08${why}\uFF09\u3002\u5B9F\u884C\u4E2D\u306E\u30A2\u30A4\u30C6\u30E0\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u65B0\u3057\u3044\u30A2\u30A4\u30C6\u30E0\u3092\u53D6\u3089\u305A\u306B\u7D42\u4E86\u3057\u307E\u3059\u3002`:`\u30C9\u30EC\u30A4\u30F3\u8981\u6C42\u3092\u53D7\u3051\u53D6\u308A\u307E\u3057\u305F\uFF08${why}\
|
|
128
130
|
\uFF09\u3002\u5B9F\u884C\u4E2D\u306E\u30A2\u30A4\u30C6\u30E0\uFF08${running}\uFF09\u3092\u5B8C\u8D70\u3055\u305B\u3066\u304B\u3089\u7D42\u4E86\u3057\u307E\u3059\u3002`);const waiters=[...this.drainWaiters];this.drainWaiters.clear();for(const w of waiters)w()}cooldownNote(outcome){if(outcome!=="rate-limited")return"";const remaining=this.deps.config.ai.minCooldownRemainingSec();return remaining===null?"":`\uFF08\u6700\u77ED\u306E\u89E3\u9664\u307E\u3067\u7D04${remaining}\u79D2\uFF09`}startOwnershipWatch(itemId){
|
|
@@ -236,12 +238,12 @@ stripSkillCommand(prompt));if(promptPlaceholder!==null){const reason=`\u30BF\u30
|
|
|
236
238
|
exec(label)?.[1];this.itemInFlight=itemId;const resolvedSkills=await this.skills.resolve(prompt);const skillOrigins=formatSkillOrigins(resolvedSkills.origins);if(skillOrigins!=="")log.log(` \u30B9\u30AD\u30EB: ${skillOrigins}`);const ownershipWatch=this.startOwnershipWatch(itemId);let result;try{result=await this.engine.run({serverSkills:resolvedSkills.bodies,prompt:buildStepPrompt(config,prompt),promptPrefix:this.cyclePreflightSection,logFile:stepLog,aiType:item.ai_type??void 0,aiModel:item.ai_model??
|
|
237
239
|
void 0,aiEffort:item.ai_effort??void 0,timeoutSec:config.aiTimeoutSec,cwd:config.workspace,skill:skillName,...skillName===""&&taggedCategory!==void 0?{category:taggedCategory}:{}})}finally{ownershipWatch.stop();this.itemInFlight=null}writeLogFile(stepLog,skillOrigins===""?result.output:`[skill] ${skillOrigins}
|
|
238
240
|
${result.output}`);const durationSec=Math.trunc((Date.now()-startedAt)/1e3);if(this.ownershipLostItemId===itemId){this.ownershipLostItemId=null;log.log(`[${stepNum}] ${label} \u2192 \u26A0\uFE0F \u6240\u6709\u6A29\u3092\u5931\u3063\u3066\u3044\u305F\u305F\u3081\u7D50\u679C\u3092\u7834\u68C4\u3057\u307E\u3057\u305F [ai=${result.usedAi||"-"}] (${durationSec}s)`);log.log(" \u3053\u306E\u30A2\u30A4\u30C6\u30E0\u306E\u5F8C\u51E6\u7406\uFF08\u5B9A\u671F\u67A0\u306E\u8A18\u9332\u30FB\u30EA\u30EA\u30FC\u30B9\u7D50\u679C\u306E\u8A18\u9332\u30FB\u5F8C\u7D9A\u6295\u5165\uFF09\u306F\u884C\u3044\u307E\u305B\u3093");
|
|
239
|
-
this.abortDrained?.();this.abortDrained=null;continue dequeue}if(result.outcome==="aborted"){log.log(`[${stepNum}] ${label} \u2192 \u4E2D\u65AD [ai=${result.usedAi||"-"}] (${durationSec}s)`);const res=await api.update(itemId,{status:"pending",result:
|
|
241
|
+
this.abortDrained?.();this.abortDrained=null;continue dequeue}if(result.outcome==="aborted"){log.log(`[${stepNum}] ${label} \u2192 \u4E2D\u65AD [ai=${result.usedAi||"-"}] (${durationSec}s)`);const res=await api.update(itemId,{status:"pending",result:serverResult(result.output),error_message:"aborted: \u4E2D\u65AD\u30B7\u30B0\u30CA\u30EB\u306B\u3088\u308A AI \u3092\u505C\u6B62\u3057\u307E\u3057\u305F\uFF08\u4F5C\u696D\u306F\u9014\u4E2D\u306E\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\uFF09"},
|
|
240
242
|
config.runId);if(res.status===409){log.log(` \u26A0\uFE0F \u30AD\u30E5\u30FC\u3078\u8FD4\u305D\u3046\u3068\u3057\u305F\u30A2\u30A4\u30C6\u30E0\u306F\u65E2\u306B\u5225\u306E\u30E9\u30F3\u30CA\u30FC\u304C\u4FDD\u6301\u3057\u3066\u3044\u307E\u3059\uFF08409\uFF09: item=${itemId}`)}else if(res.ok){log.log(" \u2192 \u30A2\u30A4\u30C6\u30E0\u3092 pending \u306B\u623B\u3057\u307E\u3057\u305F\uFF08\u6B21\u306E\u8D77\u52D5\u3067\u62FE\u3044\u76F4\u3057\u307E\u3059\uFF09")}else{log.log(` \u26A0\uFE0F pending \u3078\u623B\
|
|
241
243
|
\u305B\u307E\u305B\u3093\u3067\u3057\u305F\uFF08${describeError(res)}\uFF09\u3002\u30B5\u30FC\u30D0\u306E\u56DE\u53CE\u3092\u5F85\u3061\u307E\u3059: item=${itemId}`)}log.log(" \u2192 \u5B9A\u671F\u30B9\u30B1\u30B8\u30E5\u30FC\u30EB\u5C65\u6B74\u306B\u306F\u8A18\u9332\u3057\u307E\u305B\u3093\uFF08\u505C\u6B62\u64CD\u4F5C\u304C\u539F\u56E0\u306E\u305F\u3081\uFF09");this.abortDrained?.();this.abortDrained=null;stop=true;break}if(isAiUnavailable(result.outcome)){unexecuted+=1;if(needsHumanToRestoreAi(
|
|
242
|
-
result.outcome))unexecutedNeedsHuman=true;log.log(`[${stepNum}] ${label} \u2192 \u672A\u5B9F\u884C [ai=${result.usedAi||"-"}] (${durationSec}s)`);log.log(` \u23ED AI \u3092\u8D77\u52D5\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08outcome=${result.outcome}\uFF09`);if(needsHumanToRestoreAi(result.outcome))log.log(` ${AI_RECOVERY_HINT}`);const res=await api.update(itemId,{status:"pending",result:
|
|
243
|
-
|
|
244
|
-
|
|
244
|
+
result.outcome))unexecutedNeedsHuman=true;log.log(`[${stepNum}] ${label} \u2192 \u672A\u5B9F\u884C [ai=${result.usedAi||"-"}] (${durationSec}s)`);log.log(` \u23ED AI \u3092\u8D77\u52D5\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08outcome=${result.outcome}\uFF09`);if(needsHumanToRestoreAi(result.outcome))log.log(` ${AI_RECOVERY_HINT}`);const res=await api.update(itemId,{status:"pending",result:serverResult(result.output),error_message:withFailureHint(`not executed: ${result.outcome}`,result.
|
|
245
|
+
output)},config.runId);if(res.status===409){log.log(` \u26A0\uFE0F \u30AD\u30E5\u30FC\u3078\u8FD4\u305D\u3046\u3068\u3057\u305F\u30A2\u30A4\u30C6\u30E0\u306F\u65E2\u306B\u5225\u306E\u30E9\u30F3\u30CA\u30FC\u304C\u4FDD\u6301\u3057\u3066\u3044\u307E\u3059\uFF08409\uFF09: item=${itemId}`)}else if(res.ok){log.log(" \u2192 \u30A2\u30A4\u30C6\u30E0\u3092 pending \u306B\u623B\u3057\u307E\u3057\u305F\uFF08\u4ED6\u306E\u53F0\u304C\u5B9F\u884C\u3067\u304D\u307E\u3059\uFF09")}else{log.log(` \u26A0\uFE0F pending\
|
|
246
|
+
\u3078\u623B\u305B\u307E\u305B\u3093\u3067\u3057\u305F\uFF08${describeError(res)}\uFF09\u3002\u30B5\u30FC\u30D0\u306E\u56DE\u53CE\u3092\u5F85\u3061\u307E\u3059: item=${itemId}`)}log.log(" \u2192 \u5B9A\u671F\u30B9\u30B1\u30B8\u30E5\u30FC\u30EB\u5C65\u6B74\u306B\u306F\u8A18\u9332\u3057\u307E\u305B\u3093\uFF08\u67A0\u306F\u4ED6\u306E\u53F0\u304C\u6D88\u5316\u3067\u304D\u307E\u3059\uFF09");log.log(" \u2192 AI \u304C1\u3064\u3082\u4F7F\u3048\u306A\u3044\u305F\u3081\u3001\u3053\u306E\u30B5\u30A4\u30AF\u30EB\u306E Phase 2 \u306F\u6253\u3061\u5207\u308A\u307E\u3059");
|
|
245
247
|
break}const metrics={durationMs:Date.now()-startedAt,turns:result.metrics?.turns??null,tokensIn:result.metrics?.tokensIn??null,tokensOut:result.metrics?.tokensOut??null,costUsd:result.metrics?.costUsd??null,skill:skillName===""?null:skillName,effort:result.metrics?.effort??null,exitReason:exitReasonFor(result.outcome),outcomeCode:parseOutcomeCode(result.output),outcomeDetail:parseOutcomeDetail(result.output)};const noTurn=result.outcome==="ok"&&isNoTurnExecution(metrics,result.output);const status=result.
|
|
246
248
|
outcome==="ok"&&!noTurn?"completed":"failed";const errorMessage=noTurn?`outcome: ${NO_TURN_OUTCOME_CODE}`:result.outcome==="ok"?void 0:withFailureHint(`outcome: ${result.outcome}`,result.output);const payload=buildPayload({status,aiType:result.serverAiType,runId:config.runId,logText:result.output,...errorMessage?{errorMessage}:{},metrics});const logS3Key=await this.writeback.uploadFullLog(itemId,config.runId,result.output);if(logS3Key!==null)payload.log_s3_key=logS3Key;const outcome=await this.writeback.
|
|
247
249
|
write(itemId,payload);if(outcome!=="ok"){log.log(outcome==="lost"?`[${stepNum}] ${label} \u2192 \u26A0\uFE0F \u6240\u6709\u6A29\u3092\u5931\u3063\u3066\u3044\u305F\u305F\u3081\u7D50\u679C\u3092\u7834\u68C4\u3057\u307E\u3057\u305F [ai=${result.usedAi}] (${durationSec}s)`:`[${stepNum}] ${label} \u2192 \u26A0\uFE0F \u5B9F\u884C\u306F\u7D42\u308F\u3063\u305F\u304C\u7D50\u679C\u3092\u66F8\u304D\u623B\u305B\u307E\u305B\u3093\u3067\u3057\u305F [ai=${result.usedAi}] (${durationSec}s)`);log.log(" \u3053\u306E\u30A2\u30A4\u30C6\u30E0\
|
|
@@ -288,21 +290,21 @@ const startedAtMs=now();let warned="";let done=false;const check=()=>{if(done)re
|
|
|
288
290
|
decision.key)return;warned=decision.key;handlers.onWarn(decision.reason);return}done=true;const recorded=writeRestartAttempt(opts.stateDir,opts.projectKey,{from:decision.from,to:decision.to,at:new Date(now()).toISOString()},opts.store);if(!recorded){handlers.onWarn(`\u518D\u8D77\u52D5\u8A18\u9332\u3092\u66F8\u3051\u307E\u305B\u3093\u3067\u3057\u305F\uFF08${restartAttemptPath(opts.stateDir,opts.projectKey)}\uFF09\u3002\u540C\u3058\u7248\u30C9\u30EA\u30D5\u30C8\u304C\u89E3\u6D88\u3057\u306A\u3044\u5834\u5408\u3001\u518D\u8D77\u52D5\u3092\u7E70\u308A\u8FD4\u3059\u9632\u6CE2\u5824\u304C\u52B9\u304D\u307E\u305B\u3093`)}
|
|
289
291
|
handlers.onRestart({from:decision.from,to:decision.to})};const timer=setInterval(check,opts.intervalMs??DRIFT_POLL_MS);timer.unref?.();return{stop:()=>{done=true;clearInterval(timer)},check}}import fs8 from"fs";import path6 from"path";var POLL_MS=1e3;var MAX_STOP_BYTES=4096;var MAX_AT_LENGTH=64;function markerPath(lockDir2,kind){return path6.join(lockDir2,kind)}function requestMarker(lockDir2,kind,pid,deps={}){const target=markerPath(lockDir2,kind);const write=deps.writeFileSync??((p,d)=>fs8.writeFileSync(p,d,{flag:"wx",mode:384}));const now=deps.now??(()=>new Date);clearMarker(lockDir2,kind,deps);try{write(target,`${JSON.stringify({pid,at:now().toISOString()})}
|
|
290
292
|
`);return{ok:true}}catch(err){const e=err;return{ok:false,reason:e.code??"UNKNOWN"}}}function readMarker(lockDir2,kind,deps={}){const target=markerPath(lockDir2,kind);const read=deps.readFileSync??(p=>fs8.readFileSync(p,"utf8"));const size=deps.statSize??(p=>fs8.statSync(p).size);let raw;try{if(size(target)>MAX_STOP_BYTES)return null;raw=read(target)}catch{return null}if(raw.length>MAX_STOP_BYTES)return null;try{const parsed=JSON.parse(raw);if(typeof parsed!=="object"||parsed===null)return null;const pid=parsed.pid;const at=parsed.at;if(typeof pid!=="number"||!Number.isInteger(pid)||
|
|
291
|
-
pid<=0)return null;return{pid,at:sanitizeAt(at)}}catch{return null}}function sanitizeAt(at){if(typeof at!=="string")return"";return at.replace(/[\u0000-\u001f\u007f]/g," ").slice(0,MAX_AT_LENGTH)}function clearMarker(lockDir2,kind,deps={}){const rm=deps.rmSync??(p=>fs8.rmSync(p,{recursive:true,force:true}));try{rm(markerPath(lockDir2,kind))}catch{}}function watchMarker(lockDir2,kind,selfPid,onStop,deps={}){let fired=false;const timer=setInterval(()=>{if(fired)return;const req=readMarker(lockDir2,kind,deps);if(req===null||req.pid!==selfPid)return;fired=true;onStop(req)},deps.intervalMs??POLL_MS);timer.unref?.();return()=>{fired=true;clearInterval(timer)}}function safe(s){return stripTerminalControls(s)}function compactTimestamp(at=new Date){const p2=n=>String(n).padStart(2,"0");return`${at.getFullYear()}${p2(at.getMonth()+1)}${p2(at.getDate())}-${p2(at.getHours())}${p2(at.getMinutes())}${p2(at.getSeconds())}`}async function buildEngine(config,log){if(config.engine==="noop")return new NoopEngine;const{DispatchEngine}=await import("./ai-dispatch-
|
|
293
|
+
pid<=0)return null;return{pid,at:sanitizeAt(at)}}catch{return null}}function sanitizeAt(at){if(typeof at!=="string")return"";return at.replace(/[\u0000-\u001f\u007f]/g," ").slice(0,MAX_AT_LENGTH)}function clearMarker(lockDir2,kind,deps={}){const rm=deps.rmSync??(p=>fs8.rmSync(p,{recursive:true,force:true}));try{rm(markerPath(lockDir2,kind))}catch{}}function watchMarker(lockDir2,kind,selfPid,onStop,deps={}){let fired=false;const timer=setInterval(()=>{if(fired)return;const req=readMarker(lockDir2,kind,deps);if(req===null||req.pid!==selfPid)return;fired=true;onStop(req)},deps.intervalMs??POLL_MS);timer.unref?.();return()=>{fired=true;clearInterval(timer)}}function safe(s){return stripTerminalControls(s)}function compactTimestamp(at=new Date){const p2=n=>String(n).padStart(2,"0");return`${at.getFullYear()}${p2(at.getMonth()+1)}${p2(at.getDate())}-${p2(at.getHours())}${p2(at.getMinutes())}${p2(at.getSeconds())}`}async function buildEngine(config,log){if(config.engine==="noop")return new NoopEngine;const{DispatchEngine}=await import("./ai-dispatch-OAT752RN.js");const{DEFAULT_PREFLIGHT_HOSTS}=await import("./ai-dispatch-OAT752RN.js");const extraHosts=config.
|
|
292
294
|
operations.preflightHosts;return new DispatchEngine(config.ai,log,{workspace:config.workspace,charterFile:config.charterFile??void 0,charterEnabled:config.charterEnabled,...config.charterPrefix===null?{}:{charterPrefix:config.charterPrefix},...config.charterSuffix===null?{}:{charterSuffix:config.charterSuffix},serverPrompts:()=>config.serverPrompts??{},compileCommand:config.compileCommand??void 0,skillOverlayDir:path7.join(config.stateDir,"skill-overlay",projectFileKey(config.projectId)),launcherBin:config.
|
|
293
295
|
claudeLauncher.bin,...extraHosts.length>0?{preflightHosts:[...DEFAULT_PREFLIGHT_HOSTS,...extraHosts]}:{}})}function lockDir(config){return path7.join(config.stateDir,`task-loop-${projectFileKey(config.projectId)}.lock.d`)}function runnerIdPersisted(stateDir,env=process.env){if((env.RUNNER_ID?.trim()??"")!=="")return true;const file=env.RUNNER_ID_FILE&&env.RUNNER_ID_FILE.trim()!==""?env.RUNNER_ID_FILE:path7.join(stateDir,"runner-id");return fs9.existsSync(file)}async function runTaskLoop(opts){if(opts.
|
|
294
|
-
action==="stop")return await stopLoop(opts);if(opts.action==="plan"){if(opts.planOp!=="submit"){process.stderr.write("plan \u306B\u306F submit \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\n");return 2}const{runPlanSubmit}=await import("./plan-submit-
|
|
296
|
+
action==="stop")return await stopLoop(opts);if(opts.action==="plan"){if(opts.planOp!=="submit"){process.stderr.write("plan \u306B\u306F submit \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\n");return 2}const{runPlanSubmit}=await import("./plan-submit-CZRVVZZB.js");return runPlanSubmit({file:opts.charterInput,empty:opts.planEmpty===true,check:opts.planCheck===true},{env:process.env,readStdin:()=>fs9.readFileSync(0,"utf8"),stdout:s=>process.stdout.write(s),stderr:s=>process.stderr.write(s)})}
|
|
295
297
|
const profile=resolveProfile(opts.profile);let creds;try{creds=new AuthSession(profile.name,profile.apiUrl).loadOrThrow()}catch(err){process.stderr.write(`${err.message}
|
|
296
298
|
`);return 1}const apiUrl=effectiveApiUrl(profile,creds.api_url);const session=new AuthSession(profile.name,apiUrl);const projectRef=opts.project??process.env.TWP_PROJECT??"";if(projectRef===""){process.stderr.write("--project <\u30AD\u30FC|UUID> \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08TWP_PROJECT \u3067\u3082\u53EF\uFF09\n");return 2}const projectApi=new ProjectApi(apiUrl,session);let project;try{project=await projectApi.resolve(projectRef)}catch(err){process.stderr.write(`${err.
|
|
297
299
|
message}
|
|
298
|
-
`);return 1}const projectId=project.id;if(opts.action==="setup"){const{runSetup,parseAiList}=await import("./setup-
|
|
300
|
+
`);return 1}const projectId=project.id;if(opts.action==="setup"){const{runSetup,parseAiList}=await import("./setup-H22WRMPN.js");let ais;if(opts.ais!==void 0&&opts.ais.length>0){const parsed=parseAiList(opts.ais.join(","));if(parsed.unknown.length>0){process.stderr.write(`--ai \u306B\u672A\u77E5\u306E\u5024\u304C\u3042\u308A\u307E\u3059: ${parsed.unknown.join(" / ")}
|
|
299
301
|
`);return 2}ais=parsed.ais}return runSetup({projectId,projectRef,projectName:project.name===project.id?projectRef:`${project.code} / ${project.name}`,apiUrl,yes:opts.yes===true,...ais!==void 0?{ais}:{},...opts.workspace!==void 0?{workspace:opts.workspace}:{},...opts.aiConfigFile!==void 0?{aiConfigFile:opts.aiConfigFile}:{},...opts.noAiConfigFile===true?{noAiConfigFile:true}:{},...opts.profile!==void 0?{profile:opts.profile}:{}})}if(opts.action==="charter"){if(opts.charterOp===void 0){process.stderr.
|
|
300
302
|
write("charter \u306B\u306F push / pull / history / diff / revert \u306E\u3044\u305A\u308C\u304B\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\n");return 2}if(isPrivateProjectId(projectId)){process.stderr.write("\u500B\u4EBA\u30BF\u30B9\u30AF\u306E\u30AD\u30E5\u30FC\uFF08--project __private__\uFF09\u306B\u306F\u61B2\u7AE0\u306E\u8A2D\u5B9A\u304C\u3042\u308A\u307E\u305B\u3093\n");return 2}if(opts.charterOp!=="push"&&opts.charterOp!=="pull"){const{runRevisionCommand}=await import("./revision-command-KT7NMRES.js");
|
|
301
303
|
return runRevisionCommand({api:new AgentLoopApi({apiUrl,projectId,session})},{target:"charter",op:opts.charterOp,from:opts.revisionFrom,to:opts.revisionTo,revision:opts.charterRevision,yes:opts.yes===true,projectRef,profile:opts.profile})}const{runCharterCommand}=await import("./charter-command-A4MFFBGE.js");return runCharterCommand({api:new AgentLoopApi({apiUrl,projectId,session})},{op:opts.charterOp,file:opts.charterInput,out:opts.charterOutput,revision:opts.charterRevision,yes:opts.yes===true,projectRef,
|
|
302
304
|
profile:opts.profile})}if(opts.action==="schedule"&&opts.scheduleOp!==void 0){const{runScheduleDefCommand}=await import("./schedule-def-command-OFCA5VH3.js");return runScheduleDefCommand({api:new AgentLoopApi({apiUrl,projectId,session})},{op:opts.scheduleOp,configOp:opts.scheduleConfigOp,id:opts.scheduleId,file:opts.charterInput,out:opts.charterOutput,revision:opts.charterRevision,yes:opts.yes===true,projectRef,profile:opts.profile})}if(opts.action==="settings"){if(opts.settingsOp===void 0){process.stderr.
|
|
303
305
|
write("settings \u306B\u306F push / pull \u306E\u3044\u305A\u308C\u304B\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\n");return 2}if(isPrivateProjectId(projectId)){process.stderr.write("\u500B\u4EBA\u30BF\u30B9\u30AF\u306E\u30AD\u30E5\u30FC\uFF08--project __private__\uFF09\u306B\u306F\u30EB\u30FC\u30D7\u8A2D\u5B9A\u304C\u3042\u308A\u307E\u305B\u3093\n");return 2}const{runSettingsCommand}=await import("./settings-command-TEVH2MNY.js");return runSettingsCommand({api:new AgentLoopApi({apiUrl,projectId,
|
|
304
306
|
session})},{op:opts.settingsOp,file:opts.charterInput,out:opts.charterOutput,revision:opts.charterRevision,yes:opts.yes===true,projectRef,profile:opts.profile})}if(opts.action==="skill"){if(opts.skillOp===void 0){process.stderr.write("skill \u306B\u306F push / pull / list / show / delete / history / diff / revert / check \u306E\u3044\u305A\u308C\u304B\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\n");return 2}if(isPrivateProjectId(projectId)){process.stderr.write("\u500B\u4EBA\u30BF\u30B9\u30AF\u306E\u30AD\u30E5\u30FC\uFF08--project __p\
|
|
305
|
-
rivate__\uFF09\u306B\u306F\u30B9\u30AD\u30EB\u5B9A\u7FA9\u306E\u8A2D\u5B9A\u304C\u3042\u308A\u307E\u305B\u3093\n");return 2}if(opts.skillOp==="check"){const{runSkillCheck}=await import("./skill-check-
|
|
307
|
+
rivate__\uFF09\u306B\u306F\u30B9\u30AD\u30EB\u5B9A\u7FA9\u306E\u8A2D\u5B9A\u304C\u3042\u308A\u307E\u305B\u3093\n");return 2}if(opts.skillOp==="check"){const{runSkillCheck}=await import("./skill-check-YVIMYT2H.js");return runSkillCheck({api:new AgentLoopApi({apiUrl,projectId,session})},{configPath:opts.skillConfig,defaultConfigPath:localConfigPath(projectId),output:opts.output})}if(opts.skillOp==="list"||opts.skillOp==="show"||opts.skillOp==="delete"){const{runSkillManageCommand}=await import("./skill-manage-command-QYJLCLDK.js");
|
|
306
308
|
return runSkillManageCommand({api:new AgentLoopApi({apiUrl,projectId,session})},{op:opts.skillOp,name:opts.skillName,output:opts.output,query:opts.query,revision:opts.charterRevision,yes:opts.yes===true,projectRef,profile:opts.profile})}if(opts.skillOp!=="push"&&opts.skillOp!=="pull"){const{runRevisionCommand}=await import("./revision-command-KT7NMRES.js");return runRevisionCommand({api:new AgentLoopApi({apiUrl,projectId,session})},{target:"skill",op:opts.skillOp,name:opts.skillName,from:opts.revisionFrom,
|
|
307
309
|
to:opts.revisionTo,revision:opts.charterRevision,yes:opts.yes===true,projectRef,profile:opts.profile})}const{runSkillCommand}=await import("./skill-command-4VMZ2H6A.js");return runSkillCommand({api:new AgentLoopApi({apiUrl,projectId,session})},{op:opts.skillOp,name:opts.skillName,all:opts.skillAll===true,dir:opts.skillDir,revision:opts.charterRevision,yes:opts.yes===true,projectRef,profile:opts.profile})}const config=buildLoopConfig({projectId,projectRef,apiUrl,safeMode:opts.safe,daemon:opts.daemon,
|
|
308
310
|
...opts.maxCycles!==void 0?{maxCycles:opts.maxCycles}:{},...opts.interval!==void 0?{intervalSec:opts.interval}:{},forceRunner:opts.forceRunner,...opts.engine!==void 0?{engine:opts.engine}:{},version:opts.version});const api=new AgentLoopApi({apiUrl,projectId,session});if(opts.action==="capacity"){if(opts.capacityOp!=="report"){process.stderr.write("capacity \u306B\u306F report \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\n");return 2}for(const warning of config.warnings)process.stderr.
|
|
@@ -325,7 +327,7 @@ log.log("\u4E2D\u65AD\u30B7\u30B0\u30CA\u30EB\u3092\u53D7\u4FE1\u3057\u307E\u305
|
|
|
325
327
|
"\u6642\u523B\u4E0D\u660E"}\uFF09\u3002\u7D42\u4E86\u3057\u307E\u3059...`);stopWatcher?.();drainWatcher?.();driftWatcher?.();void shutdown().catch(()=>void 0).then(()=>process.exit(130))});drainWatcher=watchMarker(lockDir(config),"drain",process.pid,req=>{drainWatcher?.();if(loop===null){pendingDrain.value={reason:`stop --drain\u30FB${req.at||"\u6642\u523B\u4E0D\u660E"}`,exitCode:0};log.log(`\u30C9\u30EC\u30A4\u30F3\u8981\u6C42\u3092\u53D7\u3051\u53D6\u308A\u307E\u3057\u305F\uFF08${req.at||"\u6642\u523B\u4E0D\u660E"}\
|
|
326
328
|
\uFF09\u3002\u8D77\u52D5\u51E6\u7406\u306E\u5B8C\u4E86\u5F8C\u306B\u53CD\u6620\u3057\u307E\u3059\u3002`);return}loop.requestDrain(`stop --drain\u30FB${req.at||"\u6642\u523B\u4E0D\u660E"}`)});if(installed!==null){const watch=watchVersionDrift({runningVersion:opts.version,stateDir:config.stateDir,projectKey:projectFileKey(config.projectId),supervised:autoRestart.supervised,disabled:autoRestart.disabled},{onWarn:reason=>log.log(`\u26A0\uFE0F ${reason}`),onRestart:({from,to})=>{driftWatcher?.();log.
|
|
327
329
|
log(`\u7248\u30C9\u30EA\u30D5\u30C8\u3092\u691C\u51FA\u3057\u307E\u3057\u305F\uFF08${from} \u2192 ${to}\uFF09\u3002`);log.log(` \u5B9F\u884C\u4E2D\u306E\u30A2\u30A4\u30C6\u30E0\u3092\u5B8C\u8D70\u3055\u305B\u3066\u304B\u3089\u7D42\u4E86\u3057\u307E\u3059\uFF08\u7D42\u4E86\u30B3\u30FC\u30C9 ${EXIT_VERSION_DRIFT}\uFF09\u3002\u518D\u8D77\u52D5\u306F systemd\uFF08Restart=always\uFF09\u304C\u884C\u3044\u307E\u3059`);const reason=`\u7248\u30C9\u30EA\u30D5\u30C8 ${from} \u2192 ${to} \u306B\u3088\u308B\u81EA\u52D5\u518D\u8D77\u52D5`;
|
|
328
|
-
if(loop===null)pendingDrain.value={reason,exitCode:EXIT_VERSION_DRIFT};else loop.requestDrain(reason,EXIT_VERSION_DRIFT)}});driftWatcher=watch.stop}try{const{LoopSettingsApplier:LoopSettingsApplier2}=await import("./server-settings-
|
|
330
|
+
if(loop===null)pendingDrain.value={reason,exitCode:EXIT_VERSION_DRIFT};else loop.requestDrain(reason,EXIT_VERSION_DRIFT)}});driftWatcher=watch.stop}try{const{LoopSettingsApplier:LoopSettingsApplier2}=await import("./server-settings-WH4F2SLC.js");const settings=new LoopSettingsApplier2({api,config,log:m=>log.log(m)});await settings.apply();const{ServerSkillCatalog:ServerSkillCatalog2}=await import("./server-skills-EEPBSOPO.js");const skills=new ServerSkillCatalog2({api,config,log:m=>log.log(m)});await skills.
|
|
329
331
|
refresh();await runner.checkHeartbeatInterval();await runner.registerOrThrow();runner.startHeartbeatWorker();log.log(` heartbeat: ${config.heartbeatIntervalSec}\u79D2\u3054\u3068\u306B\u9001\u4FE1${runner.heartbeatTimeoutServer?`\uFF08\u30B5\u30FC\u30D0\u306E\u6B7B\u6D3B\u3057\u304D\u3044\u5024 ${runner.heartbeatTimeoutServer}\u79D2\uFF09`:""}`);loop=new TaskLoop({api,projectApi,config,log,runner,engine:await buildEngine(config,m=>log.log(m)),settings,skills});if(pendingDrain.value!==null){loop.
|
|
330
332
|
requestDrain(pendingDrain.value.reason,pendingDrain.value.exitCode)}exitCode=await loop.run()}catch(err){if(err instanceof RunnerRegistrationError){exitCode=1}else{log.log(`\u26D4 \u4E88\u671F\u3057\u306A\u3044\u30A8\u30E9\u30FC\u3067\u7D42\u4E86\u3057\u307E\u3059: ${err.message}`);exitCode=1}}finally{await shutdown()}return exitCode}async function showStatus(api,config){const out={write:text=>process.stdout.write(stripTerminalControls(text))};out.write(`\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8: ${config.
|
|
331
333
|
projectRef}\uFF08${config.projectId}\uFF09
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{customerDocumentSubresources}from"./chunk-
|
|
3
|
+
import{customerDocumentSubresources}from"./chunk-46Q7TUND.js";import{COMPANY_FIELDS,COMPANY_LICENSE,CUSTOMER_LICENSE,customerSubresources,customerWriteOperations,dataOf,levelForbidden}from"./chunk-OO7GDI2D.js";import"./chunk-5KJ5OIKI.js";import"./chunk-V64CGX7V.js";import"./chunk-QLENN5DD.js";import"./chunk-GY7KI5E5.js";import{featureLicenseGuidance,licenseForbidden}from"./chunk-MNJYY3PR.js";import{createFlags,fieldBody,hasAnyField,updateFlags}from"./chunk-FHOJFKR3.js";
|
|
4
4
|
import"./chunk-JJSBBWJ5.js";import{LIST_FLAGS,LIST_PAGING_HELP,PAGE_NUMBER_LIST_FLAGS,PAGE_NUMBER_PAGING_HELP,STABLE_PAGE_ORDER,envelopePaging,nonEmpty,pageNumberPaging,pageNumberQuery,pageRangeNotes,positiveInteger}from"./chunk-MI6HVYR2.js";import{repeatedValues}from"./chunk-RX5HWI4L.js";import{CUSTOMERS_PATH,SALES_COMPANIES_PATH,isExactNumericId}from"./chunk-4B6GJBYP.js";import{isSafePathSegment}from"./chunk-HVZUXLQ4.js";import{ApiError}from"./chunk-JA5A6UJ2.js";
|
|
5
|
-
import"./chunk-H4CDX4TX.js";import{requireResolved,singleRef,withResolved}from"./chunk-PS5QFKHB.js";import
|
|
5
|
+
import"./chunk-H4CDX4TX.js";import"./chunk-II5RVJQN.js";import{requireResolved,singleRef,withResolved}from"./chunk-PS5QFKHB.js";import{acknowledgement,isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import"./chunk-XNLIEUAW.js";import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.js";import"./chunk-RZVI6PMW.js";import"./chunk-QQRJLH6B.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var CUSTOMER_FLAG_FIELD={kind:"boolean",flag:"--customer",key:"customer_flg",summary:"\u9867\u5BA2\u3068\u3057\u3066\u6271\u3046\u304B\uFF08true / false\uFF09"};var FIELDS=[...COMPANY_FIELDS,CUSTOMER_FLAG_FIELD];var COLUMNS=["id","company_name","company_name_kana","company_short_name","customer_flg","supplier_flg","tel","address1"];var WRITE_FORBIDDEN=levelForbidden(COMPANY_LICENSE,"\u53D6\u5F15\u5148\u306E\u4F5C\u6210\u30FB\u66F4\u65B0\u306B\u306F\u3001\u8CA9\u58F2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u300C\u30E1\u30F3\u30D0\u30FC\u300D\u4EE5\u4E0A\u304B\u3001\u9867\u5BA2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u300C\u7DE8\u96C6\u8005\u300D\u4EE5\u4E0A\u306E\u3069\u3061\u3089\u304B\u304C\u8981\u308A\u307E\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002");
|
|
6
6
|
var DELETE_FORBIDDEN=levelForbidden(COMPANY_LICENSE,"\u53D6\u5F15\u5148\u306E\u524A\u9664\u306B\u306F\u3001\u8CA9\u58F2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u300C\u30E1\u30F3\u30D0\u30FC\u300D\u4EE5\u4E0A\u304B\u3001\u9867\u5BA2\u7BA1\u7406\u306E\u6A29\u9650\u304C\u300C\u7BA1\u7406\u8005\u300D\u306E\u3069\u3061\u3089\u304B\u304C\u8981\u308A\u307E\u3059\u3002\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u306B\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002");var REF_HELP="<\u53D6\u5F15\u5148> \u306F\u4F01\u696D\u540D\u30FB\u7565\u79F0\u30FB\u30AB\u30CA\u306E\u5B8C\u5168\u4E00\u81F4\u304B\
|
|
7
7
|
ID\uFF08twp company list \u306E id \u5217\u306E\u6570\u5B57\uFF09\u3067\u6307\u5B9A\u3057\u307E\u3059\u3002\u9867\u5BA2\u30FB\u4ED5\u5165\u5148\u306E\u3069\u3061\u3089\u3082\u6307\u5B9A\u3067\u304D\u307E\u3059\u3002";function companyPath(input){const id=requireResolved(input,"companyId");if(!isExactNumericId(id))throw new UsageError(`\u53D6\u5F15\u5148 ID \u3092\u30D1\u30B9\u306B\u4F7F\u3048\u307E\u305B\u3093: ${id}`);return`${SALES_COMPANIES_PATH}/${id}`}async function resolveCompany(input,ctx,usage){
|
|
8
8
|
const raw=singleRef(input,{flag:"<\u53D6\u5F15\u5148>",label:"\u53D6\u5F15\u5148",usage});return withResolved(input,{companyId:(await ctx.resolver.company(raw,{flag:"<\u53D6\u5F15\u5148>",source:"sales",mustExist:true})).id})}var createOperation={name:"create",summary:"\u53D6\u5F15\u5148\u4F01\u696D\u3092\u767B\u9332\u3059\u308B\uFF08\u9867\u5BA2\u30FB\u4ED5\u5165\u5148\u306E\u3069\u3061\u3089\u304B\u4E00\u65B9\u4EE5\u4E0A\uFF09",usage:"twp company create --name <\u4F01\u696D\u540D> (--customer true | --suppli\
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{BUILTIN_COMMANDS,GLOBAL_FLAGS,TASK_LOOP_ACTIONS,VALUE_FLAGS}from"./chunk-
|
|
3
|
+
import{BUILTIN_COMMANDS,GLOBAL_FLAGS,TASK_LOOP_ACTIONS,VALUE_FLAGS}from"./chunk-QQCWGMZN.js";import"./chunk-2LOT54OO.js";import{API_TOKEN,DOMAIN_NAMES,HELP_TOKEN,isDomainName}from"./chunk-W4E4F2ZA.js";import"./chunk-QQRJLH6B.js";import{OUTPUT_FORMATS}from"./chunk-74BPZOKU.js";import"./chunk-UREA4ZIG.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var EXTRA_TOP_LEVEL=[API_TOKEN,HELP_TOKEN,"completion","configure"];var COMPLETION_SHELLS=["bash","zsh","fish","powershell"];var TOP_LEVEL_FLAGS=["--help","--version","-p","--print","--profile","--mode","--permission-mode","--model","--allowed-tools","--disallowed-tools","--no-tui","--doctor"];var DOMAIN_GLOBAL_FLAGS=[...GLOBAL_FLAGS].filter(flag=>flag.startsWith("--"));function staticValues(flag,ctx){if(flag==="--output")return OUTPUT_FORMATS;if(flag==="--profile")return ctx.profileNames();return void 0}
|
|
4
4
|
function positionals(words,takesValue){const out=[];for(let i=0;i<words.length;i++){const word=words[i]??"";if(word==="--"){out.push(...words.slice(i+1));break}if(word.startsWith("-")){if(!word.includes("=")&&takesValue(word))i++;continue}out.push(word)}return out}function byPrefix(candidates,current){const seen=new Set;for(const candidate of candidates){if(candidate.startsWith(current))seen.add(candidate)}return[...seen]}function remainingFlags(flags,words){const used=new Set(words.filter(w=>w.
|
|
5
5
|
startsWith("--")).map(w=>w.split("=")[0]));return[...flags.filter(f=>f.repeatable===true||!used.has(f.name)).map(f=>f.name),...DOMAIN_GLOBAL_FLAGS.filter(f=>!used.has(f))]}async function complete(words,current,ctx){const previous=words[words.length-1];if(previous!==void 0&&previous.startsWith("--")&&!previous.includes("=")){const values=staticValues(previous,ctx);if(values!==void 0)return byPrefix(values,current)}const eq=current.indexOf("=");if(current.startsWith("--")&&eq>0){const flag=current.
|
|
6
6
|
slice(0,eq);const values=staticValues(flag,ctx);return values===void 0?[]:byPrefix(values.map(v=>`${flag}=${v}`),current)}const pos=positionals(words,flag=>VALUE_FLAGS.has(flag));const[first,second]=pos;if(first===void 0){if(current.startsWith("-"))return byPrefix([...TOP_LEVEL_FLAGS,...DOMAIN_GLOBAL_FLAGS],current);return byPrefix([...BUILTIN_COMMANDS,...DOMAIN_NAMES,...EXTRA_TOP_LEVEL],current)}if(first==="completion")return pos.length===1?byPrefix(COMPLETION_SHELLS,current):[];if(first==="con\
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
3
|
import{contractAiReviewResources}from"./chunk-7SYIYLHX.js";import"./chunk-5P22UEUF.js";import{featureLicenseGuidance,licenseForbidden}from"./chunk-MNJYY3PR.js";import{isoDate}from"./chunk-JJSBBWJ5.js";import{LIST_PAGING_HELP,PAGE_NUMBER_LIST_FLAGS,PAGE_NUMBER_PAGING_HELP,STABLE_PAGE_ORDER,nonEmpty,pageNumberPaging,pageNumberQuery,pageRangeNotes}from"./chunk-MI6HVYR2.js";import{repeatedValues}from"./chunk-RX5HWI4L.js";import{readBody}from"./chunk-6LSQCOCJ.js";
|
|
4
|
-
import{SALES_CONTRACTS_PATH,isExactNumericId,resolveNamed}from"./chunk-4B6GJBYP.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import
|
|
4
|
+
import{SALES_CONTRACTS_PATH,isExactNumericId,resolveNamed}from"./chunk-4B6GJBYP.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import"./chunk-II5RVJQN.js";import{requireResolved,withResolved}from"./chunk-PS5QFKHB.js";import{acknowledgement,isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import"./chunk-XNLIEUAW.js";import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.js";
|
|
5
5
|
import"./chunk-RZVI6PMW.js";import"./chunk-QQRJLH6B.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var PATH=SALES_CONTRACTS_PATH;var SALES_FORBIDDEN=licenseForbidden(featureLicenseGuidance("\u8CA9\u58F2\u7BA1\u7406"));var DISAMBIGUATION="\u53D6\u5F15\u5951\u7D04\u306F\u898B\u7A4D\u304B\u3089\u4F5C\u308B\u8CA9\u58F2\u7BA1\u7406\u306E\u66F8\u985E\u3067\u3059\uFF08\u660E\u7D30\u30FB\u91D1\u984D\u3092\u6301\u3061\u3001\u627F\u8A8D\u30EF\u30FC\u30AF\u30D5\u30ED\u30FC\u306B\u4E57\u308A\u307E\u3059\uFF09\u3002\n\u9867\u5BA2\u306B\u7D10\u3065\u3051\u3066\u4FDD\u7BA1\u3059\u308B\u5951\u7D04\u66F8\u306E PDF \u306F\u5225\u7269\u3067\u3001twp customer contract \u3067\u6271\u3044\u307E\u3059\u3002\n\n";
|
|
6
6
|
var CONTRACT_STATUSES={new:"\u4F5C\u6210\u4E2D",create_completed:"\u4F5C\u6210\u5B8C\u4E86",in_progress:"\u7533\u8ACB\u4E2D",approved:"\u627F\u8A8D\u6E08",rejected:"\u5DEE\u3057\u623B\u3057",submitted:"\u63D0\u793A\u6E08",contracted:"\u5951\u7D04\u7DE0\u7D50\u6E08",deleted:"\u524A\u9664\u6E08"};var RENEWAL_TYPES={auto_renewal:"\u81EA\u52D5\u66F4\u65B0",application_renewal:"\u7533\u8FBC\u306B\u3088\u308B\u66F4\u65B0"};function statusName(code){return CONTRACT_STATUSES[code]??code}function tableHelp(table){
|
|
7
7
|
return Object.entries(table).map(([code,name])=>`${code}\uFF08${name}\uFF09`).join(" / ")}var STORE_KEYS=["estimate_id","contract_no","title","status","contract_date","start_date","end_date","renewal_type","cancellation_notice_days","next_renewal_date","memo","manage_form_data","contract_document_file_ids","details","recipients"];var CREATE_ONLY_KEYS=["estimate_id"];var UPDATE_KEYS=STORE_KEYS.filter(key=>!CREATE_ONLY_KEYS.includes(key));var DETAIL_KEYS=["item_name","description","quantity","unit",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{cacheNote,createFlags,fieldBody,hasAnyField,idSegment,masterFields,masterItem,masterListOperation,masterRows,referencedDeleteGuidance,resolveRefFields,targetId,updateFlags}from"./chunk-FHOJFKR3.js";import"./chunk-JJSBBWJ5.js";import"./chunk-MI6HVYR2.js";import{DEPARTMENTS_PATH}from"./chunk-4B6GJBYP.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import
|
|
3
|
+
import{cacheNote,createFlags,fieldBody,hasAnyField,idSegment,masterFields,masterItem,masterListOperation,masterRows,referencedDeleteGuidance,resolveRefFields,targetId,updateFlags}from"./chunk-FHOJFKR3.js";import"./chunk-JJSBBWJ5.js";import"./chunk-MI6HVYR2.js";import{DEPARTMENTS_PATH}from"./chunk-4B6GJBYP.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import"./chunk-II5RVJQN.js";import{withResolved}from"./chunk-PS5QFKHB.js";
|
|
4
4
|
import{acknowledgement,isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var LABEL="\u90E8\u7F72";var LIST_COLUMNS=["id","code","name","parent_id","level","effective_status","valid_from","valid_to","member_count"];var GET_COLUMNS=["id","code","name","name_short","parent_id","level","sort","effective_status","valid_from","valid_to","description"];var TREE_COLUMNS=["depth","name","code","id","effective_status","valid_to"];var MEMBER_COLUMNS=["id","user_id","position_id","job_title_id","start_date","end_date","is_primary","is_current","effective_status"];var REF_FLAG={name:"\
|
|
5
5
|
--department",summary:"\u5BFE\u8C61\u306E\u90E8\u7F72\uFF08\u4F4D\u7F6E\u5F15\u6570\u306E\u4EE3\u308F\u308A\u306B\u4F7F\u3048\u308B\uFF09",takesValue:true,placeholder:"<\u90E8\u7F72>"};var REF_HELP="<\u90E8\u7F72> \u306F\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u30FBID \u306E\u3069\u308C\u3067\u3082\u6307\u5B9A\u3067\u304D\u307E\u3059\uFF08\u540D\u524D\u304C\u8907\u6570\u306B\u4E00\u81F4\u3059\u308C\u3070\u5019\u88DC\u3092\u51FA\u3057\u3066\u6B62\u307E\u308A\u307E\u3059\uFF09\u3002\nID \u4EE5\u5916\u306F\u90E8\u7F72\u4E00\u89A7\uFF08\u65E2\u5B9A10\u5206\u30AD\u30E3\u30C3\u30B7\u30E5\u30FB--refresh \u3067\u53D6\u308A\u76F4\u3057\uFF09\u3068\u7167\u5408\u3057\u307E\u3059\u3002";
|
|
6
6
|
var FIELDS=masterFields(LABEL,[{kind:"text",flag:"--name-short",key:"name_short",label:"\u7565\u79F0",maxChars:50,summary:"\u7565\u79F0"},{kind:"ref",flag:"--parent",key:"parent_id",summary:"\u89AA\u90E8\u7F72\uFF08\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u30FBID\uFF09",placeholder:"<\u90E8\u7F72>",clearFlag:"--no-parent",clearSummary:"\u89AA\u90E8\u7F72\u3092\u5916\u3057\u3066\u6700\u4E0A\u4F4D\u306B\u3059\u308B",resolve:(ctx,ref,flag)=>ctx.resolver.department(ref,flag)},{kind:"integer",flag:"--sor\
|
package/dist/deposit-YSCEG5QY.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
3
|
import{depositDomain,depositIdArg,describeDeposit,excerpt,parseAllocationRows,parsePlanBody,planSkeleton,salesAdminForbidden,sendAtomic}from"./chunk-5SPWQAUX.js";import"./chunk-QLENN5DD.js";import"./chunk-MNJYY3PR.js";import"./chunk-JJSBBWJ5.js";import"./chunk-MI6HVYR2.js";import"./chunk-RX5HWI4L.js";import"./chunk-6LSQCOCJ.js";import"./chunk-4B6GJBYP.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";
|
|
4
|
-
import"./chunk-
|
|
4
|
+
import"./chunk-II5RVJQN.js";import"./chunk-PS5QFKHB.js";import"./chunk-3ZRMMBP5.js";import"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.js";import"./chunk-RZVI6PMW.js";import"./chunk-QQRJLH6B.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";export{depositDomain,depositIdArg,describeDeposit,excerpt,parseAllocationRows,parsePlanBody,planSkeleton,salesAdminForbidden,sendAtomic};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{composeDocument,metaLine}from"./chunk-C7MO3RHJ.js";import{nonEmpty,positiveInteger}from"./chunk-MI6HVYR2.js";import{repeatedValues}from"./chunk-RX5HWI4L.js";import{charCount,readBody}from"./chunk-6LSQCOCJ.js";import{DOMAIN_KNOWLEDGES_PATH,DOMAIN_KNOWLEDGE_SLUG_RE}from"./chunk-4B6GJBYP.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import
|
|
3
|
+
import{composeDocument,metaLine}from"./chunk-C7MO3RHJ.js";import{nonEmpty,positiveInteger}from"./chunk-MI6HVYR2.js";import{repeatedValues}from"./chunk-RX5HWI4L.js";import{charCount,readBody}from"./chunk-6LSQCOCJ.js";import{DOMAIN_KNOWLEDGES_PATH,DOMAIN_KNOWLEDGE_SLUG_RE}from"./chunk-4B6GJBYP.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import"./chunk-II5RVJQN.js";import{requireResolved,withResolved}from"./chunk-PS5QFKHB.js";
|
|
4
4
|
import{acknowledgement,isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.js";import"./chunk-RZVI6PMW.js";import"./chunk-QQRJLH6B.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var KB_LABEL="\u30CA\u30EC\u30C3\u30B8\u30D9\u30FC\u30B9";var DOC_LABEL="\u8A18\u4E8B";var ACCESS_LEVELS=["tenant","authenticated","public"];var KB_STATUSES=["draft","active","archived"];var KB_NAME_MAX_CHARS=255;var KB_DESCRIPTION_MAX_CHARS=2e3;var DOC_TITLE_MAX_CHARS=255;var DOC_SUMMARY_MAX_CHARS=2e3;var DOC_TAGS_MAX=30;var DOC_TAG_MAX_CHARS=64;var PATH_SEGMENT_RE=/^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$/;var PATH_MAX_BYTES=512;var DOC_BODY_MAX_BYTES=300*1024;var DOC_DEPTH_MAX=20;var KB_LIST_COLUMNS=[
|
|
5
5
|
"id","slug","name","status","access_level","updated_at"];var KB_GET_COLUMNS=["id","slug","name","status","access_level","description","revision","updated_at","updated_by"];var DOC_LIST_COLUMNS=["path","title","depth","size_bytes","updated_at"];var DOC_GET_COLUMNS=["path","title","summary","tags","size_bytes","updated_at","updated_by"];var KB_ARG="<KB>";var KB_ARG_HELP="<KB> \u306F\u30CA\u30EC\u30C3\u30B8\u30D9\u30FC\u30B9\u306E ID \u304B slug \u3067\u3059\uFF08twp knowledge list \u306E id / slug \u5217\uFF09\u3002";
|
|
6
6
|
function positional(input,names,usage){const values=input.args.map(arg=>arg.trim());if(values.length<names.length){throw new UsageError(`${names[values.length]}\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044`,usage)}if(values.length>names.length){throw new UsageError(`\u4F4D\u7F6E\u5F15\u6570\u304C\u591A\u3059\u304E\u307E\u3059: ${input.args.slice(names.length).join(" ")}`,usage)}return values}function oneOf(input,flag,allowed){const raw=nonEmpty(input.flags,flag);if(raw===void 0)return void 0;
|