@tocca-systems/twp-cli 0.23.0 → 0.25.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 +14 -0
- package/README.md +240 -6
- package/command-model/department.json +1 -1
- package/dist/agent-loop-ZP47LTUE.js +75 -0
- package/dist/{api-command-CLARDKAL.js → api-command-VWJXBUCJ.js} +3 -3
- package/dist/{app-X3IKIAKB.js → app-3JIU5OUX.js} +49 -48
- package/dist/attendance-42XLURM7.js +21 -0
- package/dist/{auto-update-FBZGOQFI.js → auto-update-CV2MM32C.js} +1 -1
- package/dist/{auto-update-worker-SI7TVSCN.js → auto-update-worker-OBFGN6FY.js} +2 -2
- package/dist/{backlog-X2MQTA6F.js → backlog-KSMQIC2R.js} +2 -2
- package/dist/charter-command-ULFOEZWE.js +26 -0
- package/dist/{chunk-APYYF7H6.js → chunk-5Q2CH4E7.js} +1 -1
- package/dist/{chunk-M3GWY6NT.js → chunk-7WSNIXTQ.js} +2 -1
- package/dist/chunk-BKZGBJWT.js +15 -0
- package/dist/chunk-DDKZ5IPT.js +11 -0
- package/dist/chunk-FTYJZFEK.js +10 -0
- package/dist/{chunk-2VISRLWS.js → chunk-G4OO4M44.js} +9 -9
- package/dist/{chunk-E4H22AO5.js → chunk-GDM2QUBL.js} +1 -1
- package/dist/{chunk-X4RS5VBH.js → chunk-GMBJTG6A.js} +1 -1
- package/dist/{chunk-QVXZEUKN.js → chunk-HGTG5XQ7.js} +1 -1
- package/dist/{chunk-DSDVIU6A.js → chunk-ILKQDXI5.js} +1 -1
- package/dist/{chunk-O52CUEDO.js → chunk-IOGVQVGD.js} +1 -1
- package/dist/chunk-IRAZ27WL.js +38 -0
- package/dist/{chunk-7PRQ7JW2.js → chunk-KEP5QSS4.js} +40 -15
- package/dist/chunk-KUIFIN7P.js +57 -0
- package/dist/{chunk-JB27KNCX.js → chunk-NIAOX77K.js} +29 -25
- package/dist/chunk-P4AEFKLM.js +13 -0
- package/dist/{chunk-SJRK4AVE.js → chunk-PK6CUUAQ.js} +1 -1
- package/dist/chunk-SP27PYHC.js +3 -0
- package/dist/chunk-UDPJ2IGK.js +7 -0
- package/dist/chunk-VCZVITWG.js +13 -0
- package/dist/{chunk-XLE4HW6B.js → chunk-VGMWPPGD.js} +12 -10
- package/dist/{chunk-UG2I6VRD.js → chunk-VYDEUFGU.js} +1 -1
- package/dist/{chunk-Y2QAP6SU.js → chunk-WQ66EYZS.js} +1 -1
- package/dist/chunk-X45SJNT2.js +62 -0
- package/dist/{chunk-EQWW2F5V.js → chunk-YVAN3H5W.js} +4 -4
- package/dist/chunk-YWGYRISN.js +34 -0
- package/dist/{chunk-WOUKWOAR.js → chunk-Z2MNO3FT.js} +10 -9
- package/dist/chunk-ZN5EFDH7.js +5 -0
- package/dist/chunk-ZWVYVS2A.js +4 -0
- package/dist/cli.js +100 -8
- package/dist/{commands-BE67IDNQ.js → commands-OFLBUP6O.js} +8 -8
- package/dist/{commands-JNG5TZ77.js → commands-RG7M6E5K.js} +79 -84
- package/dist/department-GH475WCF.js +33 -0
- package/dist/job-title-FC2GWDE7.js +8 -0
- package/dist/{logout-guard-CMZZBRUL.js → logout-guard-3PB3VMGP.js} +1 -1
- package/dist/media-TD7D4TXF.js +64 -0
- package/dist/{oneshot-NA756EBO.js → oneshot-QQOOZZDT.js} +5 -5
- package/dist/position-4RHTV3IK.js +8 -0
- package/dist/{project-2LJZW747.js → project-DBNWB47J.js} +1 -1
- package/dist/query-EEALMOSO.js +3 -0
- package/dist/{render-ICZOK3HV.js → render-K45EOLHX.js} +1 -1
- package/dist/{run-XCAJDHFU.js → run-VNHAQO24.js} +2 -2
- package/dist/{schedule-command-GKXKNMLG.js → schedule-command-FJU7JFNR.js} +1 -1
- package/dist/{server-settings-CG3EM7R7.js → server-settings-YL6KALXG.js} +1 -1
- package/dist/{setup-UI6V2Q3V.js → setup-BJKIHANC.js} +1 -1
- package/dist/skill-command-V26WGVXU.js +61 -0
- package/dist/storage-ANKKJJJO.js +3 -0
- package/dist/{task-GKNM3G4K.js → task-7VOYCG26.js} +7 -63
- package/dist/{update-TVVBJNN7.js → update-RLKK6N7U.js} +1 -1
- package/dist/user-UU2SLVC4.js +336 -0
- package/package.json +1 -1
- package/dist/charter-command-UPKTVL7H.js +0 -36
- package/dist/chunk-7LTTKKQA.js +0 -56
- package/dist/chunk-GFC2ASHE.js +0 -6
- package/dist/chunk-JKSXUBND.js +0 -9
- package/dist/chunk-LD3AKGH6.js +0 -30
- package/dist/chunk-ODLJ2LNQ.js +0 -13
- package/dist/chunk-PEGUHUTD.js +0 -3
- package/dist/query-NJMVSQR6.js +0 -3
- package/dist/user-EU7Z3DAO.js +0 -24
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
|
+
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
+
var DOMAIN_NAMES=["agent-loop","attendance","backlog","department","job-title","media","position","project","storage","task","user"];function isDomainName(value){return value!==void 0&&DOMAIN_NAMES.includes(value)}var HELP_TOKEN="help";var API_TOKEN="api";export{isDomainName,HELP_TOKEN,API_TOKEN};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
|
+
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
+
import{UsageError}from"./chunk-7WSNIXTQ.js";var ISO_DATE_RE=/^\d{4}-\d{2}-\d{2}$/;function isoDate(input,flag){const raw=input.flags.get(flag);if(raw===void 0)return void 0;return isoDateValue(raw,flag)}function isoDateValue(raw,label){const value=raw.trim();if(!ISO_DATE_RE.test(value)){throw new UsageError(`${label} \u306F YYYY-MM-DD \u306E\u5F62\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${raw}`,"\u4F8B: 2026-09-30")}const[y,m,d]=value.split("-").map(Number);const probe=new Date(Date.UTC(y,m-1,d));if(probe.getUTCFullYear()!==
|
|
4
|
+
y||probe.getUTCMonth()+1!==m||probe.getUTCDate()!==d){throw new UsageError(`${label} \u306B\u5B58\u5728\u3057\u306A\u3044\u65E5\u4ED8\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u3059: ${raw}`,"\u4F8B: 2026-09-30")}return value}function booleanText(flag,raw){const value=raw.trim().toLowerCase();if(value==="true")return true;if(value==="false")return false;throw new UsageError(`${flag} \u306F true \u304B false \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${raw}`,`\u4F8B: ${flag} fa\
|
|
5
|
+
lse`)}function priority(input,flag="--priority"){const raw=input.flags.get(flag);if(raw===void 0)return void 0;const trimmed=raw.trim();const value=/^\d+$/.test(trimmed)?Number(trimmed):Number.NaN;if(!Number.isInteger(value)||value<1||value>3){throw new UsageError(`${flag} \u306F 1 / 2 / 3 \u306E\u3044\u305A\u308C\u304B\u3067\u3059: ${raw}`,"1: \u9AD8 \uFF0F 2: \u4E2D \uFF0F 3: \u4F4E")}return value}function decimal(input,flag,options){const raw=input.flags.get(flag);if(raw===void 0)return void 0;
|
|
6
|
+
const trimmed=raw.trim();const value=/^\d+(\.\d+)?$/.test(trimmed)?Number(trimmed):Number.NaN;if(!Number.isFinite(value)||value<options.min||value>options.max){throw new UsageError(`${flag} \u306F ${options.min} \u4EE5\u4E0A ${options.max} \u4EE5\u4E0B\u306E\u6570\u5024\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${raw}`,"\u4F8B: 3 / 3.5")}return value}function boundedText(input,flag,options){const raw=input.flags.get(flag);if(raw===void 0)return void 0;if(raw.trim()===""){throw new UsageError(
|
|
7
|
+
`${flag} \u306B\u7A7A\u306E\u5024\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,`${options.label}\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}const count=[...raw].length;if(count>options.maxChars){throw new UsageError(`${options.label}\u304C\u9577\u3059\u304E\u307E\u3059\uFF08${count} \u6587\u5B57\u30FB\u4E0A\u9650 ${options.maxChars} \u6587\u5B57\uFF09`,`${flag} \u3092 ${options.maxChars} \u6587\u5B57\u4EE5\u5185\u306B\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return raw}export{isoDate,isoDateValue,booleanText,priority,decimal,boundedText};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
|
+
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
+
import{extractLeadingTaskKey}from"./chunk-II5RVJQN.js";var LEDGER_TASK_KEY_MAX=50;var CONTROL_CHAR_RE=/[\u0000-\u001f\u007f]/;var FLAG_TOKEN_RE=/(?:^|\s)-/;function loosen(source){let t=source.replace(/^[ \t]*\/\/[^\n]*$/gm,"");t=t.replace(/\/\*[\s\S]*?\*\//g,"");t=t.replace(/,(\s*[}\]])/g,"$1");return t===source?null:t}function tryParsePlan(source){for(const candidate of[source,loosen(source)]){if(candidate===null)continue;try{const obj=JSON.parse(candidate);if(obj!==null&&typeof obj==="object"&&Array.isArray(obj.steps)){return obj}}catch{}}return null}
|
|
4
|
+
function fencedBlocks(text,tag){const re=new RegExp("```"+tag+"\\s*\\n([\\s\\S]*?)\\n```","g");const out=[];for(const m of text.matchAll(re)){if(m[1]!==void 0)out.push(m[1])}return out}function extractGeminiEnvelope(text){const anchor=/\{[^{}]*"session_id"[^{}]*"response"\s*:\s*"/g;for(const m of text.matchAll(anchor)){const start=m.index;if(start===void 0)continue;let depth=0;let inStr=false;let escape=false;for(let i=start;i<text.length;i++){const c=text[i];if(escape){escape=false;continue}if(c===
|
|
5
|
+
"\\"){escape=true;continue}if(c==='"'){inStr=!inStr;continue}if(inStr)continue;if(c==="{")depth++;else if(c==="}"){depth--;if(depth===0){try{const obj=JSON.parse(text.slice(start,i+1));if(obj!==null&&typeof obj==="object"&&typeof obj.response==="string"){return obj.response}}catch{}break}}}}return null}function extractPlanJson(rawText){const text=rawText.replace(/^\s*\[\d{2}:\d{2}:\d{2}\]\s*/gm,"");for(const tag of["json:execution-plan","json"]){for(const block of fencedBlocks(text,tag).reverse()){
|
|
6
|
+
const plan=tryParsePlan(block);if(plan)return plan}}const resp=extractGeminiEnvelope(text);if(resp!==null){for(const block of[...fencedBlocks(resp,"json:execution-plan"),...fencedBlocks(resp,"json")].reverse()){const plan2=tryParsePlan(block);if(plan2)return plan2}const plan=tryParsePlan(resp);if(plan)return plan}const whole=tryParsePlan(text.trim());if(whole)return whole;for(const m of[...text.matchAll(/\{[^{}]*"steps"[^{}]*\[[\s\S]*?\][\s\S]*?\}/g)].reverse()){const plan=tryParsePlan(m[0]);if(plan)
|
|
7
|
+
return plan}return null}function ledgerTaskKey(args){const key=extractLeadingTaskKey(args);if(key.length>LEDGER_TASK_KEY_MAX)return"";if(CONTROL_CHAR_RE.test(key))return"";if(FLAG_TOKEN_RE.test(key))return"";return key}function placeholderTaskKey(args){for(const token of args.split(/\s+/)){if(token==="")continue;if(token.startsWith("-"))continue;const m=/^[A-Z]{2,}[A-Z0-9]*-([A-Za-z0-9_<>{}]*)$/.exec(token);if(!m)return null;if(/^\d+$/.test(m[1]??""))return null;return token}return null}function stepToItem(step,assign){
|
|
8
|
+
const skill=typeof step.skill==="string"?step.skill.trim():"";if(!skill)return null;const args=(step.args??"").trim();const priority=step.priority??"P2";const prompt=`/twp-${skill}${args?` ${args}`:""}`;let label=(step.label??"").trim();if(!label||label.startsWith("/twp-")||label.startsWith("[P"))label=prompt;const taskKey=ledgerTaskKey(args);const category=assign?.categoryForSkill(skill)??step.ai_category??"complex";const display=taskKey&&!label.includes(taskKey)?`[${priority}] ${taskKey} ${label}\
|
|
9
|
+
#ai:${category}`:`[${priority}] ${label} #ai:${category}`;const item={label:display.slice(0,200),prompt,task_key:taskKey};if(assign!==void 0){const ai=assign.selectPrimary(category,skill,priority,display);if(ai!=="")item.ai_type=ai}return item}function parsePlanExcludeKeys(prefetchSection){const m=/OPS_PLAN_EXCLUDE_KEYS\s+([^\s]*)\s+-->/.exec(prefetchSection);const keys=new Set;if(!m||!m[1])return keys;for(const raw of m[1].split(",")){const key=raw.trim();if(key!=="")keys.add(key)}return keys}
|
|
10
|
+
function excludedKeyInArgs(args,excluded){if(excluded.size===0)return null;for(const key of[...excluded].sort()){const re=new RegExp(`(?<![A-Za-z0-9-])${key.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}(?![0-9])`);if(re.test(args))return key}return null}function parseOpsCount(prefetchSection,field){const marker=/OPS_COUNTS\s+([^>]*?)-->/.exec(prefetchSection);if(!marker||!marker[1])return null;const escaped=field.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");const hit=new RegExp(`(?:^|\\s)${escaped}=(-?\\d+)(?:\
|
|
11
|
+
\\s|$)`).exec(marker[1]);if(!hit||hit[1]===void 0)return null;const n=Number.parseInt(hit[1],10);if(!Number.isFinite(n)||n<0)return null;return n}function releaseDeployDropReason(verifyBacklog,devVerifyPlanned){if(verifyBacklog===null){return"\u52D5\u4F5C\u78BA\u8A8D\u306E\u4EF6\u6570\u3092\u53D6\u5F97\u3067\u304D\u306A\u304B\u3063\u305F\uFF08\u5224\u5B9A\u4E0D\u80FD\u306E\u305F\u3081\u30EA\u30EA\u30FC\u30B9\u306F\u898B\u9001\u308B\uFF09"}if(verifyBacklog>devVerifyPlanned){return`\u52D5\u4F5C\u78BA\u8A8D${verifyBacklog}\
|
|
12
|
+
\u4EF6 > \u8A08\u753B\u5185dev-verify${devVerifyPlanned}\u4EF6\uFF08Phase 1\u306E0\u4EF6\u898B\u8FBC\u307F\u304C\u7ACB\u305F\u306A\u3044\uFF09`}return null}function duplicateTaskKeyDropReason(enqueuedKeys,taskKey){if(!taskKey)return null;if(!enqueuedKeys.has(taskKey))return null;return`${taskKey} \u306F\u672C\u8A08\u753B\u3067\u65E2\u306B\u6295\u5165\u6E08\u307F\uFF08\u540C\u4E00\u30AD\u30FC\u306F1\u8A08\u753B1\u4EF6\uFF09`}var NO_ZERO_TARGET_GATES={};function zeroTargetDropReasons(prefetchSection,gates=NO_ZERO_TARGET_GATES){
|
|
13
|
+
const reasons=new Map;for(const[skill,gate]of Object.entries(gates)){const n=parseOpsCount(prefetchSection,gate.field);if(n===null)reasons.set(skill,`${gate.label}\u4EF6\u6570\u304C\u5224\u5B9A\u4E0D\u80FD\u306E\u305F\u3081\u898B\u9001\u308A`);else if(n===0)reasons.set(skill,`${gate.label}0\u4EF6\u306E\u305F\u3081\u5BFE\u8C61\u306A\u3057`)}return reasons}export{extractPlanJson,placeholderTaskKey,stepToItem,parsePlanExcludeKeys,excludedKeyInArgs,parseOpsCount,releaseDeployDropReason,duplicateTaskKeyDropReason,zeroTargetDropReasons};
|
|
@@ -44,19 +44,21 @@ e \u306E\u51FA\u529B\u304C ${probe.format} \u306E\u60F3\u5B9A\u3068\u9055\u3044\
|
|
|
44
44
|
ected_shape")}}var CapacityReporter=class{constructor(probe,cwd,log,env=process.env,now=()=>Date.now()){this.probe=probe;this.cwd=cwd;this.log=log;this.env=env;this.now=now}probe;cwd;log;env;now;cached=null;lastProbedAt=0;pending=false;running=false;async refreshIfDue(){const at=this.now();if(this.cached!==null&&at-this.lastProbedAt<this.probe.interval*1e3)return;await this.refresh()}async refresh(){if(this.running)return;this.running=true;try{this.cached=await probeCapacity(this.probe,this.cwd,
|
|
45
45
|
this.log,this.env);this.lastProbedAt=this.now();this.pending=true}finally{this.running=false}}take(){if(!this.pending||this.cached===null)return null;this.pending=false;return this.cached}rearm(){if(this.cached!==null)this.pending=true}};function evaluateOwnership(item,runnerId,runId){if(!item){return{verdict:"unknown",reason:"\u30A2\u30A4\u30C6\u30E0\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F"}}if(runnerId===""||runId===""){return{verdict:"unknown",reason:"\u81EA\u5206\u306E runner_id / run_id \u304C\u7A7A\u3067\u3059"}}const status=(item.status??"").trim();if(status===""){return{verdict:"unknown",reason:"\u5FDC\u7B54\u306B status \u304C\u3042\u308A\u307E\u305B\u3093"}}if(status!=="processing"){return{verdict:"\
|
|
46
46
|
lost",reason:`status=${status}\uFF08processing \u3067\u306F\u3042\u308A\u307E\u305B\u3093\uFF09`}}const itemRunner=(item.runner_id??"").trim();const itemRun=(item.run_id??"").trim();if(itemRunner===""||itemRun===""){return{verdict:"unknown",reason:"\u5FDC\u7B54\u306B runner_id / run_id \u304C\u3042\u308A\u307E\u305B\u3093"}}if(itemRunner!==runnerId){return{verdict:"lost",reason:`\u5225\u306E\u30E9\u30F3\u30CA\u30FC\u304C\u4FDD\u6301\u3057\u3066\u3044\u307E\u3059\uFF08runner=${itemRunner}\uFF09`}}
|
|
47
|
-
if(itemRun!==runId){return{verdict:"lost",reason:`\u540C\u3058\u6A5F\u4F53\u306E\u5225\u306E\u8D77\u52D5\u304C\u4FDD\u6301\u3057\u3066\u3044\u307E\u3059\uFF08run_id \u304C\u4E00\u81F4\u3057\u307E\u305B\u3093\uFF09`}}return{verdict:"held",reason:"processing \u304B\u3064 runner_id / run_id \u304C\u4E00\u81F4"}}var OWNERSHIP_CHECK_INTERVAL_SEC=60;var NO_OPERATIONS={exclusiveSkills:new Set,statusEndpoint:null,highRiskSkills:new Set,preflightHosts:[],releaseRecoverySkill:null,postSuccessEnqueue:new Map,contractSkills:new Set,zeroTargetGates:{}};var DEFAULT_STATUS_PATH="/api/release/list";var DEFAULT_STATUS_HEADER="X-API-Key";function stringArray(value,label,warnings){if(value===void 0||value===null)return[];if(!Array.isArray(value)){warnings.push(`operations.${label} \u306F\u914D\u5217\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u7121\u8996\u3057\u307E\u3059\uFF09`);
|
|
47
|
+
if(itemRun!==runId){return{verdict:"lost",reason:`\u540C\u3058\u6A5F\u4F53\u306E\u5225\u306E\u8D77\u52D5\u304C\u4FDD\u6301\u3057\u3066\u3044\u307E\u3059\uFF08run_id \u304C\u4E00\u81F4\u3057\u307E\u305B\u3093\uFF09`}}return{verdict:"held",reason:"processing \u304B\u3064 runner_id / run_id \u304C\u4E00\u81F4"}}var OWNERSHIP_CHECK_INTERVAL_SEC=60;var NO_OPERATIONS={exclusiveSkills:new Set,statusEndpoint:null,highRiskSkills:new Set,preflightHosts:[],releaseRecoverySkill:null,postSuccessEnqueue:new Map,contractSkills:new Set,zeroTargetGates:{},countHooks:new Map};var DEFAULT_STATUS_PATH="/api/release/list";var DEFAULT_STATUS_HEADER="X-API-Key";function stringArray(value,label,warnings){if(value===void 0||value===null)return[];if(!Array.isArray(value)){warnings.push(`operations.${label} \u306F\u914D\u5217\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u7121\u8996\u3057\u307E\u3059\uFF09`);
|
|
48
48
|
return[]}const out=[];for(const v of value){if(typeof v!=="string"||v.trim()===""){warnings.push(`operations.${label} \u306E\u8981\u7D20\u306F\u7A7A\u3067\u306A\u3044\u6587\u5B57\u5217\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u3053\u306E\u8981\u7D20\u306F\u7121\u8996\u3057\u307E\u3059\uFF09`);continue}out.push(v.trim())}return out}function stringMap(value,label,warnings){const out=new Map;if(value===void 0||value===null)return out;if(typeof value!=="object"||Array.isArray(value)){
|
|
49
49
|
warnings.push(`operations.${label} \u306F\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u7121\u8996\u3057\u307E\u3059\uFF09`);return out}for(const[k,v]of Object.entries(value)){if(typeof v!=="string"||v.trim()===""){warnings.push(`operations.${label}.${k} \u306F\u7A7A\u3067\u306A\u3044\u6587\u5B57\u5217\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u3053\u306E\u9805\u76EE\u306F\u7121\u8996\u3057\u307E\u3059\uFF09`);continue}out.set(
|
|
50
50
|
k,v.trim())}return out}function parseZeroTargetGates(value,warnings){const out={};if(value===void 0||value===null)return out;if(typeof value!=="object"||Array.isArray(value)){warnings.push("operations.zero_target_gates \u306F\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u7121\u8996\u3057\u307E\u3059\uFF09");return out}for(const[skill,v]of Object.entries(value)){if(typeof v!=="object"||v===null||Array.isArray(v)){warnings.push(`operations.zero_ta\
|
|
51
51
|
rget_gates.${skill} \u306F\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u7121\u8996\u3057\u307E\u3059\uFF09`);continue}const g=v;const field=typeof g["field"]==="string"?g["field"].trim():"";const label=typeof g["label"]==="string"?g["label"].trim():"";if(field===""||label===""){warnings.push(`operations.zero_target_gates.${skill} \u306B\u306F field \u3068 label \u304C\u8981\u308A\u307E\u3059\uFF08\u7121\u8996\u3057\u307E\u3059\uFF09`);continue}
|
|
52
|
-
out[skill]={field,label}}return out}function
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
if(
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
52
|
+
out[skill]={field,label}}return out}function parseCountHooks(value,warnings){const out=new Map;if(value===void 0||value===null)return out;if(typeof value!=="object"||Array.isArray(value)){warnings.push("operations.count_hooks \u306F\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u7121\u8996\u3057\u307E\u3059\uFF09");return out}for(const[key,v]of Object.entries(value)){const entry=v!==null&&typeof v==="object"&&!Array.isArray(v)?{id:`count:${key}`,
|
|
53
|
+
...v}:v;const{hooks,warnings:w}=validateHooks([entry],`operations.count_hooks.${key}`);warnings.push(...w);const hook=hooks[0];if(hook)out.set(key,hook)}return out}function parseEndpoint(value,warnings){if(value===void 0||value===null)return null;if(typeof value!=="object"||Array.isArray(value)){warnings.push("operations.status_endpoint \u306F\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u6392\u4ED6\u3092\u7121\u52B9\u306B\u3057\u307E\u3059\uFF09");
|
|
54
|
+
return null}const o=value;const url=typeof o["url"]==="string"?o["url"].trim():"";if(url===""){warnings.push("operations.status_endpoint.url \u304C\u7121\u3044\u305F\u3081\u6392\u4ED6\u3092\u7121\u52B9\u306B\u3057\u307E\u3059");return null}if(!/^https?:\/\//i.test(url)){warnings.push(`operations.status_endpoint.url \u306F http(s) \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${url}\uFF08\u6392\u4ED6\u3092\u7121\u52B9\u306B\u3057\u307E\u3059\uFF09`);return null}const path2=typeof o["pat\
|
|
55
|
+
h"]==="string"&&o["path"].trim()!==""?o["path"].trim():DEFAULT_STATUS_PATH;const apiKeyEnvRaw=o["api_key_env"];const apiKeyEnv=typeof apiKeyEnvRaw==="string"&&apiKeyEnvRaw.trim()!==""?apiKeyEnvRaw.trim():null;const headerRaw=o["header"];const header=typeof headerRaw==="string"&&headerRaw.trim()!==""?headerRaw.trim():DEFAULT_STATUS_HEADER;return{url:url.replace(/\/+$/,""),path:path2.startsWith("/")?path2:`/${path2}`,apiKeyEnv,header}}function parseOperations(value){const warnings=[];if(value===void 0||
|
|
56
|
+
value===null)return{operations:NO_OPERATIONS,warnings};if(typeof value!=="object"||Array.isArray(value)){warnings.push("operations \u306F\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u7121\u8996\u3057\u307E\u3059\uFF09");return{operations:NO_OPERATIONS,warnings}}const o=value;const exclusiveSkills=new Set(stringArray(o["exclusive_skills"],"exclusive_skills",warnings));const statusEndpoint=parseEndpoint(o["status_endpoint"],warnings);if(exclusiveSkills.
|
|
57
|
+
size>0&&statusEndpoint===null){warnings.push("operations.exclusive_skills \u306F\u3042\u308A\u307E\u3059\u304C status_endpoint \u304C\u7121\u3044\u305F\u3081\u3001\u5B9A\u671F\u67A0\u306E\u6392\u4ED6\u306F\u884C\u3044\u307E\u305B\u3093")}if(exclusiveSkills.size===0&&statusEndpoint!==null){warnings.push("operations.status_endpoint \u306F\u3042\u308A\u307E\u3059\u304C exclusive_skills \u304C\u7A7A\u306E\u305F\u3081\u3001\u554F\u3044\u5408\u308F\u305B\u306F\u884C\u3044\u307E\u305B\u3093")}const releaseRecoveryRaw=o["\
|
|
58
|
+
release_recovery_skill"];const releaseRecoverySkill=typeof releaseRecoveryRaw==="string"&&releaseRecoveryRaw.trim()!==""?releaseRecoveryRaw.trim():null;return{operations:{exclusiveSkills,statusEndpoint,highRiskSkills:new Set(stringArray(o["high_risk_skills"],"high_risk_skills",warnings)),preflightHosts:stringArray(o["preflight_hosts"],"preflight_hosts",warnings),releaseRecoverySkill,postSuccessEnqueue:stringMap(o["post_success_enqueue"],"post_success_enqueue",warnings),contractSkills:new Set(stringArray(
|
|
59
|
+
o["contract_skills"],"contract_skills",warnings)),zeroTargetGates:parseZeroTargetGates(o["zero_target_gates"],warnings),countHooks:parseCountHooks(o["count_hooks"],warnings)},warnings}}function describeOperations(ops){if(ops===NO_OPERATIONS||ops.exclusiveSkills.size===0&&ops.highRiskSkills.size===0){return"\u904B\u7528\u8A2D\u5B9A: \u306A\u3057\uFF08\u30B9\u30AD\u30EB\u540D\u306B\u3088\u308B\u7279\u5225\u6271\u3044\u306F\u884C\u3044\u307E\u305B\u3093\uFF09"}const parts=[];if(ops.exclusiveSkills.
|
|
60
|
+
size>0&&ops.statusEndpoint){parts.push(`\u6392\u4ED6 ${[...ops.exclusiveSkills].join(",")} \u2190 ${ops.statusEndpoint.url}`)}else if(ops.exclusiveSkills.size>0){parts.push(`\u6392\u4ED6 ${[...ops.exclusiveSkills].join(",")}\uFF08\u554F\u3044\u5408\u308F\u305B\u5148\u304C\u7121\u3044\u305F\u3081\u7121\u52B9\uFF09`)}if(ops.highRiskSkills.size>0)parts.push(`\u9AD8\u30EA\u30B9\u30AF ${ops.highRiskSkills.size}\u4EF6`);if(ops.releaseRecoverySkill)parts.push(`\u56DE\u53CE ${ops.releaseRecoverySkill}`);
|
|
61
|
+
return`\u904B\u7528\u8A2D\u5B9A: ${parts.join(" / ")}`}function sanitizeInt(value,fallback,min=1){const n=typeof value==="number"?value:Number.parseInt(String(value??""),10);if(Number.isInteger(n)&&n>=min)return{value:n,warning:null};if(value===void 0||value===null||value==="")return{value:fallback,warning:null};return{value:fallback,warning:`'${String(value)}' \u306F${min}\u4EE5\u4E0A\u306E\u6574\u6570\u3067\u306F\u3042\u308A\u307E\u305B\u3093 \u2192 \u65E2\u5B9A ${fallback} \u3092\u4F7F\u3044\u307E\u3059`}}function nonEmpty(value){const t=value?.trim();
|
|
60
62
|
return t===void 0||t===""?void 0:value}function resolveCharterEnabled(raw,local,warn){return resolveBoolSetting(raw,local,"charter_enabled",true,"\u61B2\u7AE0\u3092\u524D\u7F6E\u3057\u307E\u3059",warn)}function resolveBoolSetting(raw,local,key,fallback,fallbackNote,warn){const v=(raw??"").trim();if(v!=="")return isBoolishTrue(v);if(local===void 0)return fallback;if(typeof local==="boolean")return local;if(typeof local==="string")return isBoolishTrue(local.trim()===""?String(fallback):local);warn(
|
|
61
63
|
`${key} \u306F\u771F\u507D\u5024\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08'${String(local)}' \u306F\u89E3\u91C8\u3067\u304D\u306A\u3044\u305F\u3081\u3001${fallbackNote}\uFF09`);return fallback}function charterWrapper(raw,local,key,warn){if(raw!==void 0)return raw;if(local===void 0)return null;if(typeof local==="string")return local;warn(`${key} \u306F\u6587\u5B57\u5217\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08'${String(local)}' \u306F\u7121\u8996\u3057\u3001\u65E2\u5B9A\u306E\u56F2\u307F\u6587\u3092\u4F7F\u3044\u307E\u3059\uFF09`);
|
|
62
64
|
return null}function loopStateDir(env=process.env){const explicit=env.TWP_OPS_STATE_DIR?.trim();if(explicit)return explicit;return path.join(os.homedir(),".twp-ops")}function releaseOutcomeLogPath(env=process.env){const explicit=env.RELEASE_OUTCOME_LOG?.trim();if(explicit)return explicit;return path.join(loopStateDir(env),"release-outcomes.tsv")}function localConfigPath(projectId,env=process.env){return path.join(twpHomeDir(env),"loops",`${projectFileKey(projectId)}.json`)}function loadLocalConfig(projectId,env=process.
|
|
@@ -75,4 +77,4 @@ env.PLAN_LOCK_RENEW_INTERVAL,Math.trunc(planLockTtlSec/3),1,"PLAN_LOCK_RENEW_INT
|
|
|
75
77
|
"false",releaseRerunMaxPerCause:num2(env.RELEASE_RERUN_MAX_PER_CAUSE,2,1,"RELEASE_RERUN_MAX_PER_CAUSE="),writebackMaxAgeDays:num2(env.AGENT_LOOP_WRITEBACK_MAX_AGE_DAYS,7,1,"AGENT_LOOP_WRITEBACK_MAX_AGE_DAYS="),scheduleTimezone:nonEmpty(env.AGENT_LOOP_SCHEDULE_TZ)??"Asia/Tokyo",counterTimezone:nonEmpty(env.AGENT_LOOP_COUNTER_TZ)??"Asia/Tokyo",compileCommand:local.compile_command!==void 0&&local.compile_command.length>0?local.compile_command:null,charterFile:nonEmpty(env.CHARTER_FILE)??nonEmpty(local.
|
|
76
78
|
charter_file)??"CONSTITUTION.md",charterEnabled:resolveCharterEnabled(env.CHARTER_ENABLED,local.charter_enabled,m=>warnings.push(m)),charterPrefix:charterWrapper(env.CHARTER_PREFIX,local.charter_prefix,"charter_prefix",m=>warnings.push(m)),charterSuffix:charterWrapper(env.CHARTER_SUFFIX,local.charter_suffix,"charter_suffix",m=>warnings.push(m)),planEnabled:resolveBoolSetting(env.PLAN_ENABLED,local.plan_enabled,"plan_enabled",true,"\u8A08\u753B\u30D5\u30A7\u30FC\u30BA\u3092\u5B9F\u884C\u3057\u307E\u3059",
|
|
77
79
|
m=>warnings.push(m)),ai:ai.config,aiSource:{inline:local.ai,file:local.ai_config_file},operations:operations.operations,claudeLauncher:claudeLauncher.launcher,capacityProbe:capacityProbe.probe,prefetch:prefetch.hooks,preflight:preflight.hooks,configHash:ai.config.hash(),version:input.version,warnings,releaseOutcomeLogPath:releaseOutcomeLogPath(env)}}function localDate(timezone,now=new Date){const fmt=new Intl.DateTimeFormat("en-CA",{timeZone:timezone,year:"numeric",month:"2-digit",day:"2-digit"});
|
|
78
|
-
return fmt.format(now)}export{runPrefetch,runPreflight,formatHookWiring,formatHookIds,CapacityReporter,parseClaudeLauncher,evaluateOwnership,describeOperations,loopStateDir,localConfigPath,buildLoopConfig,localDate};
|
|
80
|
+
return fmt.format(now)}export{runHook,runPrefetch,runPreflight,formatHookWiring,formatHookIds,CapacityReporter,parseClaudeLauncher,evaluateOwnership,describeOperations,loopStateDir,localConfigPath,loadLocalConfig,buildLoopConfig,localDate};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{describeError}from"./chunk-
|
|
3
|
+
import{describeError}from"./chunk-BKZGBJWT.js";import{httpFetch}from"./chunk-J7QYPKVK.js";var ScheduleApi=class{constructor(api){this.api=api}api;async definitions(){const res=await this.api.request("GET","/schedules/definitions");if(!res.ok)return fetchError("\u5B9A\u671F\u30B9\u30B1\u30B8\u30E5\u30FC\u30EB\u306E\u5B9A\u7FA9\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093",res);const body=res.json??{};const schedules=body["schedules"];if(!Array.isArray(schedules)){return{kind:"error",message:`\u5B9A\u7FA9\u306E\u5FDC\u7B54\u306B schedules \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\uFF08\u5FDC\u7B54\u306E\u5148\u982D: ${res.
|
|
4
4
|
raw.slice(0,120)}\uFF09`,status:res.status}}const gates=Array.isArray(body["gates"])?body["gates"]:[];return{kind:"ok",config:{schedules,gates,max_per_cycle:body["max_per_cycle"],warnings:Array.isArray(body["warnings"])?body["warnings"]:[]}}}async history(since){const suffix=since?`/schedules/history?since=${encodeURIComponent(since)}`:"/schedules/history";const res=await this.api.request("GET",suffix);if(!res.ok)return fetchError("\u5B9A\u671F\u30B9\u30B1\u30B8\u30E5\u30FC\u30EB\u306E\u5C65\u6B74\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093",
|
|
5
5
|
res);const body=res.json??{};const rows=body["rows"];if(!Array.isArray(rows)){return{kind:"error",message:`\u5C65\u6B74\u306E\u5FDC\u7B54\u306B rows \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\uFF08\u5FDC\u7B54\u306E\u5148\u982D: ${res.raw.slice(0,120)}\uFF09`,status:res.status}}if(body["truncated"]===true||body["reason"]==="history_truncated"){return{kind:"error",message:"\u5C65\u6B74\u306E\u8D70\u67FB\u304C\u6253\u3061\u5207\u3089\u308C\u307E\u3057\u305F\uFF08\u5224\u5B9A\u306B\u4F7F\u3048\u307E\u305B\u3093\uFF09",
|
|
6
6
|
status:res.status}}const windowCounts={};const counts=body["window_counts"];if(counts&&typeof counts==="object"){for(const[k,v]of Object.entries(counts)){if(typeof v==="number"){if(Number.isInteger(v))windowCounts[k]=v}else if(/^-?\d+$/.test(String(v))){windowCounts[k]=Number(String(v))}}}const normalized=rows.map(r=>{const row=r??{};return{ts:str(row["ts"]),schedule_id:str(row["schedule_id"]),window_key:str(row["window_key"]),status:str(row["status"]),item_id:str(row["item_id"]),args:str(row["a\
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{describeError}from"./chunk-
|
|
3
|
+
import{describeError}from"./chunk-BKZGBJWT.js";import{CHAIN_KEYS,reloadAiConfig}from"./chunk-TYNCXQSN.js";import{isPrivateProjectId}from"./chunk-GY7KI5E5.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import fs from"fs";import path from"path";var PROMPT_KEYS=["charter","charter_prefix","charter_suffix","plan_preamble","step_budget","non_interactive_note","safe_mode_note"];function parseServerSettings(res){const json=res.json;if(json===null||typeof json!=="object"||Array.isArray(json))return null;const top=json;const data=top["data"];const b=data!==null&&typeof data==="object"&&!Array.isArray(data)&&"revision"in data?data:top;const revision=b["revision"];if(typeof revision!=="number"||!Number.isInteger(revision)||revision<0)return null;
|
|
4
4
|
const rawAi=b["ai"];const ai=rawAi!==null&&typeof rawAi==="object"&&!Array.isArray(rawAi)?Object.fromEntries(Object.entries(rawAi).filter(([,v])=>v!==null&&v!==void 0)):{};const prompts={};const rawPrompts=b["prompts"];if(rawPrompts!==null&&typeof rawPrompts==="object"&&!Array.isArray(rawPrompts)){for(const key of PROMPT_KEYS){const v=rawPrompts[key];if(typeof v==="string")prompts[key]=v}}return{revision,ai,prompts}}function formatConfigHash(aiHash,revision,ai,charter){return`${aiHash};r=${revision}\
|
|
5
5
|
;ai=${ai};charter=${charter}`}function renderStepBudget(template,vars){return template.replaceAll("{timeout_min}",String(vars.timeoutMin)).replaceAll("{soft_min}",String(vars.softMin)).replaceAll("{wrap_up_min}",String(vars.wrapUpMin))}var LoopSettingsApplier=class{constructor(deps){this.deps=deps}deps;last=null;lastWarning="";lastAiWarning="";lastSummary="";serverAiApplied=false;lastSafeWarning="";async apply(){const{config,log}=this.deps;const outcome=await this.fetch();const warning=outcome.warning??
|
|
6
6
|
"";if(warning!==""&&warning!==this.lastWarning)log(` \u26A0\uFE0F ${warning}`);else if(warning===""&&this.lastWarning!=="")log("\u30EB\u30FC\u30D7\u8A2D\u5B9A\u3092\u30B5\u30FC\u30D0\u304B\u3089\u518D\u3073\u53D6\u5F97\u3067\u304D\u308B\u3088\u3046\u306B\u306A\u308A\u307E\u3057\u305F");this.lastWarning=warning;const settings=outcome.settings;config.serverPrompts=settings?.prompts??{};const safeNote=config.serverPrompts.safe_mode_note;const safeWarning=config.safeMode&&safeNote!==void 0?safeNote===
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
|
+
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
+
import{parseOperationArgs}from"./chunk-IOGVQVGD.js";import{renderOutput}from"./chunk-5Q2CH4E7.js";import{redactSecretValues,redactSecrets,withDebug}from"./chunk-YVAN3H5W.js";import{DEFAULT_MAX_ITEMS,DEFAULT_MAX_PAGES,nextPageNotes,positiveInteger,shellQuote}from"./chunk-G4OO4M44.js";import{Resolver,requireDefaultProject}from"./chunk-NIAOX77K.js";import{ResolveError}from"./chunk-GMBJTG6A.js";import{ApiError,TwpApiClient,appendQuery}from"./chunk-FTYJZFEK.js";
|
|
4
|
+
import{GLOBAL_OPTIONS_HELP}from"./chunk-TAN5I2DP.js";import{HELP_TOKEN}from"./chunk-SP27PYHC.js";import{AuthSession,NotLoggedInError,SessionExpiredError,loadCredentials}from"./chunk-XNLIEUAW.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import{effectiveApiUrl,loadUserConfig,resolveConfiguredOutput,resolveProfile}from"./chunk-NERYSBA4.js";import{OUTPUT_FORMATS,resolveOutputFormat}from"./chunk-K2ONOH3L.js";import{stringWidth}from"./chunk-WVS4W5FY.js";import{
|
|
5
|
+
stripTerminalControls}from"./chunk-NHYMHCAT.js";import{evaluateQuery}from"./chunk-GDM2QUBL.js";import{ApiRejectedError,ApiResponseError,EXIT_API_CLIENT,EXIT_API_SERVER,EXIT_AUTH,EXIT_FAILURE,EXIT_OK,EXIT_USAGE,NetworkError,UsageError}from"./chunk-7WSNIXTQ.js";import fs from"fs";import path from"path";var NO_REDACT_FLAG={name:"--no-redact",summary:"\u5FDC\u7B54\u306E\u4F0F\u5B57\u5316\u3092\u89E3\u9664\u3057\u3066\u751F\u306E\u5024\u3092\u51FA\u3059\uFF08\u9375\u306E\u53D7\u3051\u53D6\u308A\u7B49\uFF09",takesValue:false};var NO_REDACT_NOTICE="\u6CE8\u8A18: --no-redact \u306E\u305F\u3081\u51FA\u529B\u3092\u4F0F\u5B57\u5316\u3057\u307E\u305B\u3093\uFF08\u7AEF\u672B\u3068\u30ED\u30B0\u306B\u5E73\u6587\u3067\u6B8B\u308A\u307E\u3059\uFF09\u3002";function withCommonFlags(flags){return flags.some(flag=>flag.
|
|
6
|
+
name===NO_REDACT_FLAG.name)?flags:[...flags,NO_REDACT_FLAG]}function alignedList(entries,indent=" "){const width=entries.reduce((max,[left])=>Math.max(max,stringWidth(left)),0);return entries.map(([left,right])=>`${indent}${left}${" ".repeat(Math.max(0,width-stringWidth(left)))} ${right}`).join("\n")}function subresourcesOf(resource){return resource.subresources??[]}function renderResourceHelp(resource,path2){const subresources=subresourcesOf(resource);const operationSection=resource.operations.length===0?"":`
|
|
7
|
+
\u64CD\u4F5C:
|
|
8
|
+
${alignedList(resource.operations.map(op=>[op.name,op.summary]))}
|
|
9
|
+
`;const subSection=subresources.length===0?"":`
|
|
10
|
+
\u30B5\u30D6\u8CC7\u6E90:
|
|
11
|
+
${alignedList(subresources.map(sub=>[`${sub.name} <\u64CD\u4F5C>`,sub.summary]))}
|
|
12
|
+
`;return`twp ${path2} \u2014 ${resource.summary}
|
|
13
|
+
|
|
14
|
+
\u4F7F\u3044\u65B9:
|
|
15
|
+
twp ${path2} <\u64CD\u4F5C> [\u5F15\u6570] [\u30AA\u30D7\u30B7\u30E7\u30F3]
|
|
16
|
+
twp ${path2} <\u64CD\u4F5C> ${HELP_TOKEN} \u305D\u306E\u64CD\u4F5C\u306E\u8A73\u3057\u3044\u30D8\u30EB\u30D7
|
|
17
|
+
${operationSection}${subSection}
|
|
18
|
+
${GLOBAL_OPTIONS_HELP}
|
|
19
|
+
`}function renderOperationHelp(op,path2){const sections=[`twp ${path2} ${op.name} \u2014 ${op.summary}`,"","\u4F7F\u3044\u65B9:",` ${op.usage}`];if(op.description!==void 0){sections.push("",...op.description.split("\n"))}if(op.destructive===true){sections.push("","\u26A0 \u7834\u58CA\u7684\u306A\u64CD\u4F5C\u3067\u3059\u3002\u5B9F\u884C\u3059\u308B\u306B\u306F --yes \u304C\u5FC5\u8981\u3067\u3059\u3002")}const flags=withCommonFlags(op.flags);if(flags.length>0){sections.push("","\u30AA\u30D7\u30B7\u30E7\u30F3:",
|
|
20
|
+
alignedList(flags.map(flag=>[flag.takesValue?`${flag.name} ${flag.placeholder??"<\u5024>"}`:flag.name,flag.summary])))}sections.push("",GLOBAL_OPTIONS_HELP,"");return sections.join("\n")}function renderUnknownOperation(resource,path2,attempted){const names=[...resource.operations.map(op=>op.name),...subresourcesOf(resource).map(sub=>`${sub.name} <\u64CD\u4F5C>`)].join(" / ");return attempted===void 0?`twp ${path2} \u306B\u306F\u64CD\u4F5C\u306E\u6307\u5B9A\u304C\u5FC5\u8981\u3067\u3059\uFF08${names}\
|
|
21
|
+
\uFF09\u3002\u8A73\u3057\u304F\u306F twp ${path2} ${HELP_TOKEN}`:`twp ${path2} \u306B\u300C${attempted}\u300D\u3068\u3044\u3046\u64CD\u4F5C\u306F\u3042\u308A\u307E\u305B\u3093\uFF08${names}\uFF09\u3002\u8A73\u3057\u304F\u306F twp ${path2} ${HELP_TOKEN}`}var LOADERS={"agent-loop":async()=>(await import("./agent-loop-ZP47LTUE.js")).agentLoopDomain,attendance:async()=>(await import("./attendance-42XLURM7.js")).attendanceDomain,backlog:async()=>(await import("./backlog-KSMQIC2R.js")).backlogDomain,department:async()=>(await import("./department-GH475WCF.js")).departmentDomain,"job-title":async()=>(await import("./job-title-FC2GWDE7.js")).jobTitleDomain,media:async()=>(await import("./media-TD7D4TXF.js")).mediaDomain,position:async()=>(await import("./position-4RHTV3IK.js")).
|
|
22
|
+
positionDomain,project:async()=>(await import("./project-DBNWB47J.js")).projectDomain,storage:async()=>(await import("./storage-ANKKJJJO.js")).storageDomain,task:async()=>(await import("./task-7VOYCG26.js")).taskDomain,user:async()=>(await import("./user-UU2SLVC4.js")).userDomain};async function loadDomain(name){return LOADERS[name]()}var writeOut=text=>void process.stdout.write(text);var writeErr=text=>void process.stderr.write(text);function line(text){return text===""?"":text.endsWith("\n")?text:`${text}
|
|
23
|
+
`}function outputValue(operation,format,body){return format==="json"?operation.raw(body):operation.summarize(body)}function requiresYes(operation,yes){return operation.destructive===true&&!yes}function exitCodeForStatus(status){if(status===401)return EXIT_AUTH;if(status===429)return EXIT_API_SERVER;if(status>=400&&status<500)return EXIT_API_CLIENT;return EXIT_API_SERVER}function exitCodeFor(err){if(err instanceof UsageError)return EXIT_USAGE;if(err instanceof NotLoggedInError||err instanceof SessionExpiredError)
|
|
24
|
+
return EXIT_AUTH;if(err instanceof ApiError)return exitCodeForStatus(err.status);if(err instanceof ApiRejectedError)return EXIT_API_CLIENT;if(err instanceof ApiResponseError||err instanceof NetworkError)return EXIT_API_SERVER;if(err instanceof ResolveError){return err.status===null?EXIT_API_SERVER:exitCodeForStatus(err.status)}return EXIT_FAILURE}function safeText(text){return redactSecrets(stripTerminalControls(text))}function reportError(err,format,code,write=writeErr){const message=safeText(err instanceof
|
|
25
|
+
Error?err.message:String(err));const rawHint=err instanceof UsageError?err.hint:void 0;const hint=rawHint!==void 0?safeText(rawHint):void 0;if(format==="json"){const body={code,message};if(err instanceof ApiError)body["status"]=err.status;if(err instanceof ResolveError&&err.status!==null)body["status"]=err.status;if(hint!==void 0)body["hint"]=hint;write(`${JSON.stringify({error:body},null,2)}
|
|
26
|
+
`);return}write(`${message}
|
|
27
|
+
`);if(hint!==void 0)write(`${hint}
|
|
28
|
+
`)}function dryRunValue(apiUrl,plan){const value={method:plan.method,url:`${apiUrl}${appendQuery(plan.path,plan.query)}`};if(plan.body!==void 0)value["body"]=plan.body;return value}async function send(client,apiUrl,plan){try{return await client.request(plan.method,appendQuery(plan.path,plan.query),plan.body)}catch(err){if(err instanceof ApiError||err instanceof NotLoggedInError||err instanceof SessionExpiredError){throw err}throw new NetworkError(`${apiUrl} \u3078\u306E\u901A\u4FE1\u306B\u5931\u6557\u3057\u307E\u3057\u305F: ${err.
|
|
29
|
+
message}`,{cause:err})}}async function putSigned(fetchImpl,url,bytes,contentType){let res;try{res=await fetchImpl(url,{method:"PUT",headers:{"Content-Type":contentType},body:bytes})}catch(err){throw new NetworkError(`\u30B9\u30C8\u30EC\u30FC\u30B8\u3078\u306E\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u306B\u5931\u6557\u3057\u307E\u3057\u305F: ${err.message}`,{cause:err})}if(!res.ok){throw new NetworkError(`\u30B9\u30C8\u30EC\u30FC\u30B8\u3078\u306E\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u304C\u62D2\u5426\u3055\u308C\u307E\u3057\u305F\uFF08HTTP ${res.
|
|
30
|
+
status}\uFF09`)}}async function getSigned(fetchImpl,url){let res;try{res=await fetchImpl(url,{method:"GET"})}catch(err){throw new NetworkError(`\u30B9\u30C8\u30EC\u30FC\u30B8\u304B\u3089\u306E\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u306B\u5931\u6557\u3057\u307E\u3057\u305F: ${err.message}`,{cause:err})}if(!res.ok){throw new NetworkError(`\u30B9\u30C8\u30EC\u30FC\u30B8\u304B\u3089\u306E\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u304C\u62D2\u5426\u3055\u308C\u307E\u3057\u305F\uFF08HTTP ${res.status}\uFF09`)}
|
|
31
|
+
return{bytes:new Uint8Array(await res.arrayBuffer()),contentType:res.headers.get("content-type")}}function resolveDownloadTarget(spec,commandPath,operationName,input){const raw=input.flags.get(spec.outFlag);if(raw===void 0||raw.trim()===""){throw new UsageError(`${spec.outFlag} \u306F\u5FC5\u9808\u3067\u3059\uFF08twp ${commandPath} ${operationName}\uFF09`,`\u66F8\u304D\u51FA\u3057\u5148\u306E\u30D5\u30A1\u30A4\u30EB\u30D1\u30B9\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u6A19\u6E96\u51FA\u529B\u3078\u306F\u51FA\u3057\u307E\u305B\u3093\uFF09\u3002`)}
|
|
32
|
+
return{out:path.resolve(raw.trim()),force:input.flags.has(spec.forceFlag)}}function assertWritableTarget(target,forceFlag){if(!target.force&&fs.existsSync(target.out)){throw new UsageError(`\u66F8\u304D\u51FA\u3057\u5148\u304C\u65E2\u306B\u3042\u308A\u307E\u3059: ${target.out}`,`\u4E0A\u66F8\u304D\u3059\u308B\u306A\u3089 ${forceFlag} \u3092\u4ED8\u3051\u3066\u304F\u3060\u3055\u3044\uFF08\u65E2\u5B9A\u3067\u306F\u4E0A\u66F8\u304D\u3057\u307E\u305B\u3093\uFF09\u3002`)}const dir=path.dirname(target.
|
|
33
|
+
out);if(!fs.existsSync(dir)){throw new UsageError(`\u66F8\u304D\u51FA\u3057\u5148\u306E\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u304C\u3042\u308A\u307E\u305B\u3093: ${dir}`,"\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3092\u4F5C\u3063\u3066\u304B\u3089\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u81EA\u52D5\u3067\u306F\u4F5C\u6210\u3057\u307E\u305B\u3093\uFF09\u3002")}}async function download(args){let received;if(args.signed!==void 0){const url=args.signed.signedUrl(await send(args.client,args.
|
|
34
|
+
apiUrl,args.plan),args.plan);received=await getSigned(args.signed.fetchImpl,url)}else{try{received=await args.client.requestBinary(args.plan.method,appendQuery(args.plan.path,args.plan.query))}catch(err){if(err instanceof ApiError||err instanceof NotLoggedInError||err instanceof SessionExpiredError)throw err;throw new NetworkError(`${args.apiUrl} \u3078\u306E\u901A\u4FE1\u306B\u5931\u6557\u3057\u307E\u3057\u305F: ${err.message}`,{cause:err})}}try{fs.writeFileSync(args.target.out,received.bytes,{
|
|
35
|
+
flag:args.target.force?"w":"wx"})}catch(err){const code=err.code;if(code==="EEXIST"){throw new UsageError(`\u66F8\u304D\u51FA\u3057\u5148\u304C\u65E2\u306B\u3042\u308A\u307E\u3059: ${args.target.out}`,"\u4E0A\u66F8\u304D\u3059\u308B\u306A\u3089 --force \u3092\u4ED8\u3051\u3066\u304F\u3060\u3055\u3044\u3002")}throw new Error(`\u66F8\u304D\u51FA\u3057\u306B\u5931\u6557\u3057\u307E\u3057\u305F\uFF08${args.target.out}\uFF09: ${err.message}`,{cause:err})}return{path:args.target.out,size:received.bytes.
|
|
36
|
+
byteLength,contentType:received.contentType}}var CURATED_PAGING_VOCABULARY={mode:"--all",resumeFlag:"--cursor",capAdvice:"--limit \u3092\u5927\u304D\u304F\u3057\u3066\u5F80\u5FA9\u3092\u6E1B\u3089\u3059\u304B\u3001--max-pages / --max-items \u3092\u4E0A\u3052\u3066\u304F\u3060\u3055\u3044\u3002"};function capExceeded(vocabulary,reason,pages,count,cursor){return new UsageError(`${vocabulary.mode} \u304C\u4E0A\u9650\u306B\u9054\u3057\u305F\u305F\u3081\u4E2D\u65AD\u3057\u307E\u3057\u305F\uFF08${reason}\
|
|
37
|
+
\uFF0F${pages} \u30DA\u30FC\u30B8\u30FB${count} \u4EF6\u3092\u53D6\u5F97\u6E08\u307F\uFF09\u3002\u3053\u308C\u306F\u5168\u4EF6\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002`,`${vocabulary.capAdvice}\u7D9A\u304D\u3060\u3051\u3092\u53D6\u308B\u306A\u3089 ${vocabulary.resumeFlag} ${shellQuote(cursor)} \u304B\u3089\u518D\u958B\u3067\u304D\u307E\u3059`)}async function fetchAllPages(args){const{paging,maxPages,maxItems}=args;const vocabulary=args.vocabulary??CURATED_PAGING_VOCABULARY;const merged=[];
|
|
38
|
+
const first=args.plan.query?.[paging.cursorParam];let sent=typeof first==="string"?first:"";for(let page=1;;page+=1){const plan=page===1?args.plan:{...args.plan,query:{...args.plan.query,[paging.cursorParam]:sent}};let body;try{body=page===1&&"firstPage"in args?args.firstPage:await send(args.client,args.apiUrl,plan)}catch(err){if(page>1){(args.warn??writeErr)(`${vocabulary.mode} \u306F ${page} \u30DA\u30FC\u30B8\u76EE\u3067\u5931\u6557\u3057\u307E\u3057\u305F\uFF08${page-1} \u30DA\u30FC\u30B8\u30FB${merged.
|
|
39
|
+
length} \u4EF6\u3092\u53D6\u5F97\u6E08\u307F\uFF09\u3002\u3053\u308C\u306F\u5168\u4EF6\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u7D9A\u304D\u306F ${vocabulary.resumeFlag} ${shellQuote(stripTerminalControls(sent))} \u304B\u3089\u518D\u958B\u3067\u304D\u307E\u3059\u3002
|
|
40
|
+
`)}throw err}for(const item of paging.items(body))merged.push(item);const next=paging.nextCursor(body);if(next===null)return{body:paging.withItems(body,merged),pages:page,count:merged.length};if(merged.length>=maxItems)throw capExceeded(vocabulary,`\u6700\u5927\u4EF6\u6570 ${maxItems} \u4EF6`,page,merged.length,next);if(page>=maxPages)throw capExceeded(vocabulary,`\u6700\u5927\u30DA\u30FC\u30B8\u6570 ${maxPages}`,page,merged.length,next);if(next===sent){throw new ApiResponseError(`\u540C\u3058\u30AB\u30FC\u30BD\u30EB\uFF08${next}\
|
|
41
|
+
\uFF09\u304C\u7E70\u308A\u8FD4\u3057\u8FD4\u3055\u308C\u305F\u305F\u3081\u4E2D\u65AD\u3057\u307E\u3057\u305F\u3002${merged.length} \u4EF6\u3092\u53D6\u5F97\u3057\u305F\u6642\u70B9\u3067\u3001\u3053\u308C\u306F\u5168\u4EF6\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002`)}sent=next}}function resolvePaging(operation,path2,input){const all=input.flags.has("--all");const maxPages=positiveInteger(input.flags,"--max-pages")??DEFAULT_MAX_PAGES;const maxItems=positiveInteger(input.flags,"--max-items")??
|
|
42
|
+
DEFAULT_MAX_ITEMS;positiveInteger(input.flags,"--limit");if(all&&operation.paging===void 0){throw new UsageError(`twp ${path2} ${operation.name} \u306F --all \u306B\u5BFE\u5FDC\u3057\u3066\u3044\u307E\u305B\u3093`)}for(const name of["--max-pages","--max-items"]){if(!all&&input.flags.has(name)){throw new UsageError(`${name} \u306F --all \u3068\u4F75\u305B\u3066\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044`,`${name} \u3060\u3051\u3067\u306F\u4F55\u3082\u5909\u308F\u308A\u307E\u305B\u3093`)}}return{
|
|
43
|
+
all,maxPages,maxItems}}function profileAliases(profileName){const aliases=loadUserConfig().profiles?.[profileName]?.aliases;return aliases!==void 0?{aliases}:{}}function buildPrepareContext(args){const cache=new Map;return{resolver:args.resolver,projectId(explicit){if(explicit!==void 0&&explicit.trim()===""){throw new UsageError("--project \u306B\u7A7A\u306E\u5024\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093","--project <\u30B3\u30FC\u30C9|ID> \u3092\u6307\u5B9A\u3059\u308B\u304B\u3001--project \u3054\u3068\u5916\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}
|
|
44
|
+
const ref=requireDefaultProject(explicit,args.profileName,args.env,args.cwd).ref;const hit=cache.get(ref);if(hit!==void 0)return hit;const resolved=args.resolver.project(ref).then(project=>project.id);cache.set(ref,resolved);return resolved}}}async function runDomain(options){const{globals}=options;const out=options.io?.out??writeOut;const errOut=options.io?.err??writeErr;let format=null;let forbidden;let rejected;try{const profile=resolveProfile(globals.profile);format=resolveOutputFormat({...globals.
|
|
45
|
+
output!==void 0?{flag:globals.output}:{},...(()=>{const configured=resolveConfiguredOutput(profile.name);return configured!==void 0?{configured}:{}})(),isTty:options.io?.isTty??process.stdout.isTTY===true});if(format===null){throw new UsageError(`--output \u306B\u300C${globals.output??""}\u300D\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,`\u6307\u5B9A\u3067\u304D\u308B\u306E\u306F ${OUTPUT_FORMATS.join(" / ")} \u3067\u3059`)}const domain=await loadDomain(options.domain);if(options.operation===
|
|
46
|
+
HELP_TOKEN||options.help&&options.operation===void 0){const[extra,...rest2]=options.argv;if(extra===void 0){out(renderResourceHelp(domain,domain.name));return EXIT_OK}const target=domain.subresources?.find(resource2=>resource2.name===extra);if(target===void 0||rest2.length>0){throw new UsageError(renderUnknownOperation(domain,domain.name,extra))}out(renderResourceHelp(target,`${domain.name} ${extra}`));return EXIT_OK}const sub=domain.subresources?.find(resource2=>resource2.name===options.operation);
|
|
47
|
+
const resource=sub??domain;const path2=sub===void 0?domain.name:`${domain.name} ${sub.name}`;const operationName=sub===void 0?options.operation:options.argv[0];const rest=sub===void 0?options.argv:options.argv.slice(1);if(sub!==void 0&&(operationName===HELP_TOKEN||options.help&&operationName===void 0)){out(renderResourceHelp(sub,path2));return EXIT_OK}const operation=resource.operations.find(op=>op.name===operationName);if(operation===void 0){throw new UsageError(renderUnknownOperation(resource,
|
|
48
|
+
path2,operationName))}forbidden=operation.forbidden;rejected=operation.rejected;if(options.help||rest[0]===HELP_TOKEN){out(renderOperationHelp(operation,path2));return EXIT_OK}const input=parseOperationArgs(rest,withCommonFlags(operation.flags));const noRedact=input.flags.has("--no-redact");if(!globals.dryRun&&requiresYes(operation,globals.yes)){throw new UsageError(`twp ${path2} ${operation.name} \u306F\u7834\u58CA\u7684\u306A\u64CD\u4F5C\u3067\u3059\u3002\u5B9F\u884C\u3059\u308B\u306B\u306F --yes \u3092\u4ED8\u3051\u3066\u304F\u3060\u3055\u3044\u3002`)}
|
|
49
|
+
const paging=resolvePaging(operation,path2,input);const downloadTarget=operation.download===void 0?void 0:resolveDownloadTarget(operation.download,path2,operation.name,input);const stored=loadCredentials(profile.name);const apiUrl=effectiveApiUrl(profile,stored?.api_url);const transport=options.fetchImpl??httpFetch;const fetchImpl=globals.debug?withDebug(transport,{write:errOut}):transport;const session=new AuthSession(profile.name,apiUrl,process.env,fetchImpl);const client=new TwpApiClient(apiUrl,
|
|
50
|
+
session,fetchImpl,options.version);const ctx=buildPrepareContext({resolver:new Resolver(client,{profile:profile.name,refresh:globals.refresh,...profileAliases(profile.name)}),profileName:profile.name,env:process.env,cwd:process.cwd()});const prepared=operation.prepare===void 0?input:await operation.prepare(input,ctx);const plan=operation.plan(prepared);if(operation.execute!==void 0&&(operation.download!==void 0||operation.paging!==void 0||operation.fetchCached!==void 0)){throw new Error(`twp ${path2}\
|
|
51
|
+
${operation.name}: execute \u306F download / paging / fetchCached \u3068\u540C\u6642\u306B\u5BA3\u8A00\u3067\u304D\u307E\u305B\u3093\uFF08\u914D\u7DDA\u306E\u8AA4\u308A\uFF09`)}if(operation.fetchCached!==void 0&&(operation.download!==void 0||operation.paging!==void 0||operation.destructive===true||plan.method!=="GET")){throw new Error(`twp ${path2} ${operation.name}: fetchCached \u306F\u9001\u4FE1\u3057\u306A\u3044\u8AAD\u307F\u53D6\u308A\u5C02\u7528\u306E\u64CD\u4F5C\u306B\u3060\u3051\u5BA3\u8A00\u3067\u304D\u307E\u3059\uFF08\u914D\u7DDA\u306E\u8AA4\u308A\uFF09`)}
|
|
52
|
+
for(const note of operation.plannedNotes?.(prepared)??[])errOut(`${safeText(note)}
|
|
53
|
+
`);if(noRedact)errOut(`${NO_REDACT_NOTICE}
|
|
54
|
+
`);if(globals.dryRun){out(line(renderOutput(dryRunValue(apiUrl,plan),format,noRedact)));return EXIT_OK}let body;let paged;if(operation.execute!==void 0){const executeCtx={send:next=>send(client,apiUrl,next),putSigned:(url,bytes,contentType)=>putSigned(fetchImpl,url,bytes,contentType),warn:text=>errOut(`${safeText(text)}
|
|
55
|
+
`)};body=await operation.execute(prepared,executeCtx)}else if(operation.fetchCached!==void 0){body=await operation.fetchCached(prepared,ctx)}else if(operation.download!==void 0&&downloadTarget!==void 0){assertWritableTarget(downloadTarget,operation.download.forceFlag);const signedUrl=operation.download.signedUrl;body=await download({client,apiUrl,plan,target:downloadTarget,...signedUrl===void 0?{}:{signed:{fetchImpl,signedUrl}}})}else if(paging.all&&operation.paging!==void 0){paged=await fetchAllPages(
|
|
56
|
+
{client,apiUrl,plan,paging:operation.paging,maxPages:paging.maxPages,maxItems:paging.maxItems,warn:errOut});body=paged.body}else{body=await send(client,apiUrl,plan)}const visible=noRedact?body:redactSecretValues(body);const value=globals.query!==void 0?await evaluateQuery(globals.query,operation.raw(visible)):outputValue(operation,format,visible);out(line(renderOutput(value,format,noRedact)));if(paged!==void 0){errOut(`--all: ${paged.pages} \u30DA\u30FC\u30B8\u3092\u8FBF\u3063\u3066 ${paged.count}\
|
|
57
|
+
\u4EF6\u3092\u53D6\u5F97\u3057\u307E\u3057\u305F\u3002
|
|
58
|
+
`)}const pagingNotes=operation.paging===void 0?[]:nextPageNotes(body,prepared,{command:`twp ${path2} ${operation.name}`,flags:operation.flags,profile:globals.profile});for(const note of[...pagingNotes,...operation.notes?.(visible,prepared)??[]]){errOut(`${safeText(note)}
|
|
59
|
+
`)}return EXIT_OK}catch(caught){const err=withRejectedGuidance(withForbiddenGuidance(caught,forbidden),rejected);const code=exitCodeFor(err);reportError(err,format,code,errOut);return code}}function withForbiddenGuidance(err,guidance){if(guidance===void 0||!(err instanceof ApiError)||err.status!==403)return err;const server=err.body?.error_description??err.body?.message;const wrapped=new ApiError(err.status,err.body,"","");wrapped.message=server!==void 0&&server!==""?`${guidance}\uFF08\u30B5\u30FC\u30D0\u306E\u5FDC\u7B54: ${server}\
|
|
60
|
+
\uFF09`:guidance;return wrapped}function withRejectedGuidance(err,guidance){if(guidance===void 0||!(err instanceof ApiError)||err.status!==422)return err;const description=err.body?.error_description;const fallback=err.body?.message;const server=(typeof description==="string"&&description!==""?description:void 0)??(typeof fallback==="string"?fallback:"");const extra=guidance(server);if(extra===void 0)return err;const wrapped=new ApiError(err.status,err.body,"","");wrapped.message=server!==""?`${server}\
|
|
61
|
+
|
|
62
|
+
${extra}`:extra;return wrapped}export{NO_REDACT_FLAG,NO_REDACT_NOTICE,outputValue,requiresYes,exitCodeFor,reportError,CURATED_PAGING_VOCABULARY,fetchAllPages,resolvePaging,buildPrepareContext,runDomain};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{stripTerminalControls}from"./chunk-NHYMHCAT.js";var SENSITIVE_HEADERS=new Set(["authorization","proxy-authorization","cookie","set-cookie","x-api-key","x-auth-token","x-vercel-protection-bypass"]);var REDACTED="***\uFF08\u4F0F\u5B57\uFF09";var SECRET_KEY_PATTERN="[A-Za-z0-9_-]*(?:token|secret|password|passwd|api[_-]?key|credential|signature)[A-Za-z0-9_-]*";var NOT_SECRET_FLAGS="(?:starting-token)";function redactSecrets(text){return text.replace(/\bBearer\s+[^\s"'`,;)\]}]+/gi,`Bearer ${REDACTED}`).replace(
|
|
4
|
-
s*:\\s*)"(?:[^"\\\\]|\\\\.)*"`,"gi"),`$1"${REDACTED}"`).replace(new RegExp(`([?&]${SECRET_KEY_PATTERN}=)[^&\\s"'\`,;)\\]}]+`,"gi"),`$1${REDACTED}`).replace(new RegExp(`(--(?!${NOT_SECRET_FLAGS}(?:=|\\s))${SECRET_KEY_PATTERN}(?:=|\\s+))('[^']*'|"[^"]*"|[A-Za-z0-9_.~+/=|:%-]+)`,"gi"),`$1${REDACTED}`)}var SECRET_KEY_NAME=new RegExp(`^${SECRET_KEY_PATTERN}$`,"i");function redactSecretValues(value){if(Array.isArray(value))return value.map(
|
|
5
|
-
"object"){const out={};for(const[key,item]of Object.entries(value)){out[key]=SECRET_KEY_NAME.test(key)?REDACTED:redactSecretValues(item)}return out}return value}function formatHeaders(headers){if(!headers)return[];const entries=headers instanceof Headers?[...headers.entries()]:Array.isArray(headers)?headers:Object.entries(headers);return entries.map(([name,value])=>{const shown=SENSITIVE_HEADERS.has(name.toLowerCase())?REDACTED:redactSecrets(
|
|
6
|
-
var BODY_LIMIT=4e3;function formatBody(raw){const safe=redactSecrets(stripTerminalControls(raw));return safe.length>BODY_LIMIT?`${safe.slice(0,BODY_LIMIT)}
|
|
3
|
+
import{stripTerminalControls}from"./chunk-NHYMHCAT.js";var SENSITIVE_HEADERS=new Set(["authorization","proxy-authorization","cookie","set-cookie","x-api-key","x-auth-token","x-vercel-protection-bypass"]);var REDACTED="***\uFF08\u4F0F\u5B57\uFF09";var SECRET_KEY_PATTERN="[A-Za-z0-9_-]*(?:token|secret|password|passwd|api[_-]?key|credential|signature)[A-Za-z0-9_-]*";var NOT_SECRET_FLAGS="(?:starting-token)";function redactSecrets(text){return text.replace(/\bBearer\s+[^\s"'`,;)\]}]+/gi,`Bearer ${REDACTED}`).replace(/(\/v2\/(?:admin\/)?invitations\/)[A-Za-z0-9_-]{16,}/g,
|
|
4
|
+
`$1${REDACTED}`).replace(new RegExp(`("${SECRET_KEY_PATTERN}"\\s*:\\s*)"(?:[^"\\\\]|\\\\.)*"`,"gi"),`$1"${REDACTED}"`).replace(new RegExp(`([?&]${SECRET_KEY_PATTERN}=)[^&\\s"'\`,;)\\]}]+`,"gi"),`$1${REDACTED}`).replace(new RegExp(`(--(?!${NOT_SECRET_FLAGS}(?:=|\\s))${SECRET_KEY_PATTERN}(?:=|\\s+))('[^']*'|"[^"]*"|[A-Za-z0-9_.~+/=|:%-]+)`,"gi"),`$1${REDACTED}`)}var SECRET_KEY_NAME=new RegExp(`^${SECRET_KEY_PATTERN}$`,"i");function redactSecretValues(value){if(Array.isArray(value))return value.map(
|
|
5
|
+
item=>redactSecretValues(item));if(value!==null&&typeof value==="object"){const out={};for(const[key,item]of Object.entries(value)){out[key]=SECRET_KEY_NAME.test(key)?REDACTED:redactSecretValues(item)}return out}return value}function formatHeaders(headers){if(!headers)return[];const entries=headers instanceof Headers?[...headers.entries()]:Array.isArray(headers)?headers:Object.entries(headers);return entries.map(([name,value])=>{const shown=SENSITIVE_HEADERS.has(name.toLowerCase())?REDACTED:redactSecrets(
|
|
6
|
+
String(value));return` ${name.toLowerCase()}: ${shown}`})}var BODY_LIMIT=4e3;function formatBody(raw){const safe=redactSecrets(stripTerminalControls(raw));return safe.length>BODY_LIMIT?`${safe.slice(0,BODY_LIMIT)}
|
|
7
7
|
\u2026\uFF08\u4EE5\u964D ${safe.length-BODY_LIMIT} \u6587\u5B57\u3092\u7701\u7565\uFF09`:safe}function isTextualContentType(contentType){if(contentType===null)return false;return/^\s*(text\/|application\/(json|xml|javascript|x-www-form-urlencoded)|application\/[\w.+-]*\+(json|xml))/i.test(contentType)}function withDebug(inner,options={}){const write=options.write??(text=>void process.stderr.write(text));const now=options.now??(()=>Date.now());return async(input,init)=>{const method=init?.method??
|
|
8
8
|
"GET";const lines=[`[debug] \u2192 ${method} ${redactSecrets(input)}`,...formatHeaders(init?.headers)];if(typeof init?.body==="string")lines.push(` ${formatBody(init.body)}`);write(`${lines.join("\n")}
|
|
9
9
|
`);const started=now();let res;try{res=await inner(input,init)}catch(err){write(`[debug] \u2717 \u901A\u4FE1\u306B\u5931\u6557\u3057\u307E\u3057\u305F (${now()-started}ms): ${redactSecrets(err.message)}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
|
+
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
+
import{isModeId,isPermissionModeId}from"./chunk-NAUH75MM.js";import{API_TOKEN,HELP_TOKEN,isDomainName}from"./chunk-SP27PYHC.js";import{splitFlagToken}from"./chunk-QQRJLH6B.js";var BUILTIN_COMMANDS=["login","logout","whoami","update","task-loop"];var TASK_LOOP_ACTIONS=["run","status","stop","schedule","setup","charter","skill"];var VALUE_FLAGS=new Set(["-p","--print","--profile","--tenant","--mode","--permission-mode","--model","--allowed-tools","--disallowed-tools","--project","--engine","--interval","--max-cycles","--ai","--workspace","--ai-config-file","--now","--counts","--gate","--file","--out","--revision","--dir","--output","--query"]);var BOOLEAN_FLAGS=new Set(
|
|
4
|
+
["-h","--help","-v","--version","--no-tui","--doctor","--password","--token","--no-browser","--safe","--daemon","--force-runner","--force","--drain","--yes","-y","--no-ai-config-file","--verbose","--all","--dry-run","--debug","--refresh"]);function dispatch(argv,limit=2){const tokens=[];const indexes=[];let truncated=false;for(let i=0;i<argv.length;i++){const arg=argv[i];if(arg===void 0)continue;if(arg.startsWith("-")&&arg!=="-"){const{name,value:inline}=splitFlagToken(arg);if(BOOLEAN_FLAGS.has(
|
|
5
|
+
name)){if(inline!==void 0){truncated=true;break}continue}if(VALUE_FLAGS.has(name)){if(inline!==void 0)continue;const next=argv[i+1];if(next!==void 0&&(!next.startsWith("-")||next==="-"))i++;continue}truncated=true;break}if(arg===""||arg==="-")continue;if(tokens.length>=limit)break;tokens.push(arg);indexes.push(i)}return{tokens,indexes,truncated}}function isBuiltin(token){return token!==void 0&&BUILTIN_COMMANDS.includes(token)}function isTaskLoopAction(token){return token!==void 0&&TASK_LOOP_ACTIONS.
|
|
6
|
+
includes(token)}function resolveRoute(result){const{tokens,indexes}=result;const[first,second]=tokens;const firstIndex=indexes[0];if(first===void 0||firstIndex===void 0)return{kind:"none",consumed:[]};const consumed=[firstIndex];const secondIndex=indexes[1];if(isBuiltin(first)){if(first==="task-loop"&&isTaskLoopAction(second)){if(secondIndex!==void 0)consumed.push(secondIndex);return{kind:"builtin",command:first,action:second,consumed}}return{kind:"builtin",command:first,...first==="task-loop"?{
|
|
7
|
+
action:"run"}:{},consumed}}if(second!==void 0&&secondIndex!==void 0)consumed.push(secondIndex);return{kind:"domain",domain:first,...second!==void 0?{operation:second}:{},consumed}}var GLOBAL_FLAGS=new Set(["-h","--help","-v","--version","--profile","--output","--query","--dry-run","--debug","--yes","-y","--refresh"]);function parseArgv(argv){const out={command:"tui",safe:false,daemon:false,forceRunner:false,stopForce:false,logoutForce:false,stopDrain:false,noTui:false,doctor:false,yes:false,skillAll:false,noAiConfigFile:false,verbose:false,loginMethod:"browser",loginNoBrowser:false,promptFromStdin:false,domainArgv:[],domainHelp:false,dryRun:false,debug:false,refresh:false,
|
|
8
|
+
unknown:[],allowedTools:[],disallowedTools:[]};const route=resolveRoute(dispatch(argv));const consumed=new Set;const[firstIndex,secondIndex]=route.consumed;if(route.kind==="builtin"){out.command=route.command;if(route.action!==void 0)out.taskLoopAction=route.action;for(const index of route.consumed)consumed.add(index)}else if(route.kind==="domain"){if(route.domain===HELP_TOKEN){if(route.operation===void 0){out.command="help";if(firstIndex!==void 0)consumed.add(firstIndex)}else if(isDomainName(route.
|
|
9
|
+
operation)){out.command="domain";out.domain=route.operation;out.domainHelp=true;if(firstIndex!==void 0)consumed.add(firstIndex);if(secondIndex!==void 0)consumed.add(secondIndex)}else if(route.operation===API_TOKEN){out.command="api";out.domainHelp=true;if(firstIndex!==void 0)consumed.add(firstIndex);if(secondIndex!==void 0)consumed.add(secondIndex)}}else if(route.domain===API_TOKEN){out.command="api";if(firstIndex!==void 0)consumed.add(firstIndex)}else if(isDomainName(route.domain)){out.command=
|
|
10
|
+
"domain";out.domain=route.domain;if(route.operation!==void 0)out.operation=route.operation;for(const index of route.consumed)consumed.add(index)}}const hasSubcommandToken=route.kind==="builtin"||route.kind==="domain"&&(route.domain===HELP_TOKEN||route.domain===API_TOKEN||isDomainName(route.domain));const isDomainRoute=out.command==="domain"||out.command==="api";const takeValue=(i,flag,inline)=>{const value=inline??argv[i+1];if(value===void 0||inline===void 0&&value.startsWith("-")){out.unknown.push(
|
|
11
|
+
flag);return{step:0}}if(value.trim()===""){out.unknown.push(inline===void 0?`${flag} `:`${flag}=${inline}`);return{step:0}}return{value,step:inline===void 0?1:0}};let optionsClosed=false;for(let i=0;i<argv.length;i++){if(consumed.has(i))continue;const raw=argv[i];if(raw===void 0)continue;if(isDomainRoute&&raw==="--")optionsClosed=true;const{name:arg,value:inline}=splitFlagToken(raw);if(isDomainRoute&&(optionsClosed||!GLOBAL_FLAGS.has(arg))){out.domainArgv.push(raw);continue}if(inline!==void 0&&BOOLEAN_FLAGS.
|
|
12
|
+
has(arg)){out.unknown.push(raw);continue}switch(arg){case"-h":case"--help":if(isDomainRoute)out.domainHelp=true;else out.command="help";break;case"-v":case"--version":out.command="version";break;case"--no-tui":out.noTui=true;break;case"--doctor":out.doctor=true;break;case"--password":out.loginMethod="password";break;case"--token":out.loginMethod="token";break;case"--no-browser":out.loginNoBrowser=true;break;case"--profile":{const{value,step}=takeValue(i,"--profile",inline);if(value!==void 0){out.
|
|
13
|
+
profile=value;i+=step}break}case"-p":case"--print":{const next=inline??argv[i+1];const step=inline===void 0?1:0;if(hasSubcommandToken){out.unknown.push(raw)}else if(next==="-"){out.command="print";out.promptFromStdin=true;out.prompt="";i+=step}else if(next!==void 0&&(inline!==void 0||!next.startsWith("-"))){out.command="print";out.prompt=next;i+=step}else{out.unknown.push(raw)}break}case"--output":{const{value,step}=takeValue(i,"--output",inline);if(value!==void 0){out.output=value;i+=step}break}case"\
|
|
14
|
+
--query":{const{value,step}=takeValue(i,"--query",inline);if(value!==void 0){out.query=value;i+=step}break}case"--dry-run":out.dryRun=true;break;case"--debug":out.debug=true;break;case"--refresh":out.refresh=true;break;case"--tenant":{const{value,step}=takeValue(i,"--tenant",inline);if(value!==void 0){out.tenant=value;i+=step}break}case"--mode":{const next=inline??argv[i+1];const step=inline===void 0?1:0;if(isModeId(next)){out.mode=next;i+=step}else if(next!==void 0&&(inline!==void 0||!next.startsWith(
|
|
15
|
+
"-"))){out.unknown.push(inline!==void 0?raw:`--mode ${next}`);i+=step}else{out.unknown.push("--mode")}break}case"--permission-mode":{const next=inline??argv[i+1];const step=inline===void 0?1:0;if(isPermissionModeId(next)){out.permissionMode=next;i+=step}else if(next!==void 0&&(inline!==void 0||!next.startsWith("-"))){out.unknown.push(inline!==void 0?raw:`--permission-mode ${next}`);i+=step}else{out.unknown.push("--permission-mode")}break}case"--allowed-tools":case"--disallowed-tools":{const{value,
|
|
16
|
+
step}=takeValue(i,arg,inline);if(value!==void 0){(arg==="--allowed-tools"?out.allowedTools:out.disallowedTools).push(value);i+=step}break}case"--model":{const{value,step}=takeValue(i,"--model",inline);if(value!==void 0){out.model=value;i+=step}break}case"--safe":out.safe=true;break;case"--daemon":out.daemon=true;break;case"--force-runner":out.forceRunner=true;break;case"--force":out.stopForce=true;break;case"--drain":out.stopDrain=true;break;case"--project":{const{value,step}=takeValue(i,"--proj\
|
|
17
|
+
ect",inline);if(value!==void 0){out.project=value;i+=step}break}case"--engine":{const{value,step}=takeValue(i,"--engine",inline);if(value!==void 0){out.engine=value;i+=step}break}case"--interval":case"--max-cycles":{const{value,step}=takeValue(i,arg,inline);if(value!==void 0){const n=Number.parseInt(value,10);if(Number.isInteger(n)&&n>0){if(arg==="--interval")out.interval=n;else out.maxCycles=n}else{out.unknown.push(inline!==void 0?raw:`${arg} ${value}`)}i+=step}break}case"--yes":case"-y":out.yes=
|
|
18
|
+
true;break;case"--ai":{const{value:v,step}=takeValue(i,"--ai",inline);if(v!==void 0){out.ais=[...out.ais??[],v];i+=step}break}case"--no-ai-config-file":out.noAiConfigFile=true;break;case"--workspace":{const{value:v,step}=takeValue(i,"--workspace",inline);if(v!==void 0){out.workspace=v;i+=step}break}case"--ai-config-file":{const{value:v,step}=takeValue(i,"--ai-config-file",inline);if(v!==void 0){out.aiConfigFile=v;i+=step}break}case"--verbose":out.verbose=true;break;case"--now":{const{value:v,step}=takeValue(
|
|
19
|
+
i,"--now",inline);if(v!==void 0){out.scheduleNow=v;i+=step}break}case"--counts":{const{value:v,step}=takeValue(i,"--counts",inline);if(v!==void 0){out.scheduleCounts=v;i+=step}break}case"--gate":{const{value:v,step}=takeValue(i,"--gate",inline);if(v!==void 0){out.scheduleGate=v;i+=step}break}case"--file":{const{value:v,step}=takeValue(i,"--file",inline);if(v!==void 0){out.charterFile=v;i+=step}break}case"--out":{const{value:v,step}=takeValue(i,"--out",inline);if(v!==void 0){out.charterOut=v;i+=step}
|
|
20
|
+
break}case"--revision":{const{value:v,step}=takeValue(i,"--revision",inline);if(v!==void 0){out.charterRevision=v;i+=step}break}case"--dir":{const{value:v,step}=takeValue(i,"--dir",inline);if(v!==void 0){out.skillDir=v;i+=step}break}case"--all":out.skillAll=true;break;default:if(out.command==="task-loop"&&out.taskLoopAction==="charter"&&out.charterOp===void 0&&(raw==="push"||raw==="pull")){out.charterOp=raw;break}if(out.command==="task-loop"&&out.taskLoopAction==="skill"){if(out.skillOp===void 0&&
|
|
21
|
+
(raw==="push"||raw==="pull")){out.skillOp=raw;break}if(out.skillOp!==void 0&&out.skillName===void 0&&!raw.startsWith("-")){out.skillName=raw;break}}out.unknown.push(raw)}}if(out.command!=="login"&&out.loginMethod!=="browser"){out.unknown.push(out.loginMethod==="password"?"--password":"--token");out.loginMethod="browser"}if(out.permissionMode!==void 0&&out.command!=="tui"&&out.command!=="print"){out.unknown.push("--permission-mode");delete out.permissionMode}if(out.command!=="tui"&&out.command!==
|
|
22
|
+
"print"){if(out.allowedTools.length>0)out.unknown.push("--allowed-tools");if(out.disallowedTools.length>0)out.unknown.push("--disallowed-tools");out.allowedTools=[];out.disallowedTools=[]}if(out.loginNoBrowser&&!(out.command==="login"&&out.loginMethod==="browser")){out.unknown.push("--no-browser");out.loginNoBrowser=false}if(out.command==="logout"&&out.stopForce){out.logoutForce=true;out.stopForce=false}if(out.command!=="task-loop"){if(out.safe)out.unknown.push("--safe");if(out.daemon)out.unknown.
|
|
23
|
+
push("--daemon");if(out.forceRunner)out.unknown.push("--force-runner");if(out.stopForce)out.unknown.push("--force");if(out.stopDrain)out.unknown.push("--drain");if(out.engine!==void 0)out.unknown.push("--engine");if(out.interval!==void 0)out.unknown.push("--interval");if(out.maxCycles!==void 0)out.unknown.push("--max-cycles");if(out.project!==void 0)out.unknown.push("--project");if(out.verbose)out.unknown.push("--verbose");if(out.scheduleNow!==void 0)out.unknown.push("--now");if(out.scheduleCounts!==
|
|
24
|
+
void 0)out.unknown.push("--counts");if(out.scheduleGate!==void 0)out.unknown.push("--gate");if(out.ais!==void 0)out.unknown.push("--ai");if(out.workspace!==void 0)out.unknown.push("--workspace");if(out.aiConfigFile!==void 0)out.unknown.push("--ai-config-file");if(out.noAiConfigFile)out.unknown.push("--no-ai-config-file");if(out.charterFile!==void 0)out.unknown.push("--file");if(out.charterOut!==void 0)out.unknown.push("--out");if(out.charterRevision!==void 0)out.unknown.push("--revision");if(out.
|
|
25
|
+
skillDir!==void 0)out.unknown.push("--dir");if(out.skillAll)out.unknown.push("--all")}if(out.yes&&out.command!=="task-loop"&&!isDomainRoute)out.unknown.push("--yes");const acceptsOutput=isDomainRoute||out.command==="whoami";if(!acceptsOutput){if(out.output!==void 0)out.unknown.push("--output");if(out.query!==void 0)out.unknown.push("--query")}if(!isDomainRoute){if(out.dryRun)out.unknown.push("--dry-run");if(out.debug)out.unknown.push("--debug");if(out.refresh)out.unknown.push("--refresh")}if(out.
|
|
26
|
+
command==="api"&&out.refresh){out.unknown.push("--refresh");out.refresh=false}if(out.command==="task-loop"&&out.taskLoopAction!=="schedule"){if(out.verbose)out.unknown.push("--verbose");if(out.scheduleNow!==void 0)out.unknown.push("--now");if(out.scheduleCounts!==void 0)out.unknown.push("--counts");if(out.scheduleGate!==void 0)out.unknown.push("--gate")}if(out.command==="task-loop"&&out.taskLoopAction!=="stop"&&out.stopForce){out.unknown.push("--force")}if(out.command==="task-loop"&&out.taskLoopAction!==
|
|
27
|
+
"stop"&&out.stopDrain){out.unknown.push("--drain")}if(out.command==="task-loop"&&out.taskLoopAction==="stop"&&out.stopForce&&out.stopDrain){out.unknown.push("--force \u3068 --drain \u306F\u540C\u6642\u306B\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093");out.stopForce=false;out.stopDrain=false}if(out.command==="task-loop"&&out.taskLoopAction!=="setup"){if(out.yes&&out.taskLoopAction!=="charter"&&out.taskLoopAction!=="skill")out.unknown.push("--yes");if(out.ais!==void 0)out.unknown.push("--ai");if(out.
|
|
28
|
+
workspace!==void 0)out.unknown.push("--workspace");if(out.aiConfigFile!==void 0)out.unknown.push("--ai-config-file");if(out.noAiConfigFile)out.unknown.push("--no-ai-config-file")}if(out.command==="task-loop"&&(out.taskLoopAction==="stop"||out.taskLoopAction==="status")){if(out.safe)out.unknown.push("--safe");if(out.daemon)out.unknown.push("--daemon");if(out.forceRunner)out.unknown.push("--force-runner");if(out.engine!==void 0)out.unknown.push("--engine");if(out.interval!==void 0)out.unknown.push(
|
|
29
|
+
"--interval");if(out.maxCycles!==void 0)out.unknown.push("--max-cycles")}if(out.command==="task-loop"&&out.taskLoopAction==="setup"){if(out.engine!==void 0)out.unknown.push("--engine");if(out.safe)out.unknown.push("--safe");if(out.daemon)out.unknown.push("--daemon");if(out.forceRunner)out.unknown.push("--force-runner");if(out.interval!==void 0)out.unknown.push("--interval");if(out.maxCycles!==void 0)out.unknown.push("--max-cycles")}if(out.command==="task-loop"&&out.taskLoopAction==="charter"){if(out.
|
|
30
|
+
charterOp===void 0){out.unknown.push("charter \u306B\u306F push \u304B pull \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044")}if(out.charterOp!=="push"&&out.charterFile!==void 0)out.unknown.push("--file");if(out.charterOp!=="push"&&out.charterRevision!==void 0)out.unknown.push("--revision");if(out.charterOp!=="pull"&&out.charterOut!==void 0)out.unknown.push("--out");if(out.safe)out.unknown.push("--safe");if(out.daemon)out.unknown.push("--daemon");if(out.forceRunner)out.unknown.push("--for\
|
|
31
|
+
ce-runner");if(out.engine!==void 0)out.unknown.push("--engine");if(out.interval!==void 0)out.unknown.push("--interval");if(out.maxCycles!==void 0)out.unknown.push("--max-cycles")}else if(out.command==="task-loop"&&out.taskLoopAction==="skill"){if(out.skillOp===void 0){out.unknown.push("skill \u306B\u306F push \u304B pull \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044")}else if(out.skillName===void 0&&!out.skillAll){out.unknown.push(`skill ${out.skillOp} \u306B\u306F\u30B9\u30AD\u30EB\u540D\u304B --all \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044`)}else if(out.
|
|
32
|
+
skillName!==void 0&&out.skillAll){out.unknown.push("\u30B9\u30AD\u30EB\u540D\u3068 --all \u306F\u540C\u6642\u306B\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093")}if(out.skillOp!=="push"&&out.charterRevision!==void 0)out.unknown.push("--revision");if(out.charterFile!==void 0)out.unknown.push("--file");if(out.charterOut!==void 0)out.unknown.push("--out");if(out.safe)out.unknown.push("--safe");if(out.daemon)out.unknown.push("--daemon");if(out.forceRunner)out.unknown.push("--force-runner");if(out.engine!==
|
|
33
|
+
void 0)out.unknown.push("--engine");if(out.interval!==void 0)out.unknown.push("--interval");if(out.maxCycles!==void 0)out.unknown.push("--max-cycles")}else if(out.command==="task-loop"){if(out.charterFile!==void 0)out.unknown.push("--file");if(out.charterOut!==void 0)out.unknown.push("--out");if(out.charterRevision!==void 0)out.unknown.push("--revision")}if(out.command==="task-loop"&&out.taskLoopAction!=="skill"){if(out.skillDir!==void 0)out.unknown.push("--dir");if(out.skillAll)out.unknown.push(
|
|
34
|
+
"--all")}return out}export{parseArgv};
|
|
@@ -22,14 +22,15 @@ ephemeral"}}:block})}));return{model:request.model,max_tokens:request.maxTokens,
|
|
|
22
22
|
return new RelayError("cli_disabled",message,403)}if(res.status===429){return new RelayError("rate_limit",message,429)}if(res.status===400){const detail=body?.details;if(Array.isArray(detail?.allowed_models)){return new RelayError("model_not_allowed",`${message}
|
|
23
23
|
\u5229\u7528\u3067\u304D\u308B\u30E2\u30C7\u30EB: ${detail.allowed_models.join(" / ")}`,400)}return new RelayError("validation",message,400)}if(res.status===503){return new RelayError("unavailable",message,503)}return new RelayError("upstream",message,res.status)}function applyUsage(target,source){if(typeof source!=="object"||source===null)return;const usage=source;target.inputTokens=numberOr(usage["input_tokens"],target.inputTokens);target.cacheReadTokens=numberOr(usage["cache_read_input_tokens"],
|
|
24
24
|
target.cacheReadTokens);target.cacheWriteTokens=numberOr(usage["cache_creation_input_tokens"],target.cacheWriteTokens);target.outputTokens=numberOr(usage["output_tokens"],target.outputTokens)}function numberOr(value,fallback){return typeof value==="number"&&Number.isFinite(value)?value:fallback}function safeJson(text){try{const parsed=JSON.parse(text);return typeof parsed==="object"&&parsed!==null?parsed:null}catch{return null}}function isAbortError(err){return err instanceof Error&&(err.name===
|
|
25
|
-
"AbortError"||err.name==="TimeoutError")}function errorMessage(err){return err instanceof Error?err.message:String(err)}import
|
|
26
|
-
uid)return false;return(st.mode&18)===0}catch{return false}}function readCacheFile(env){const file=modelCachePath(env);if(!
|
|
27
|
-
trim():null}function loadCachedVersionFloor(profile,relayUrl,env=process.env){try{const entry=readCacheFile(env).entries?.[profile];if(!entry||entry.relay_url!==relayUrl)return{minSupportedVersion:null,fetchedAt:null};return{minSupportedVersion:readFloor(entry),fetchedAt:typeof entry.
|
|
28
|
-
if(!parsed||parsed.relay_url!==relayUrl)return null;const ids=Array.isArray(parsed.models)?parsed.models.filter(id=>typeof id==="string"&&isSafeModelId(id)):[];if(ids.length===0)return null;return{ids,source:"cache",fetchedAt:typeof parsed.fetched_at==="string"?parsed.fetched_at:null,
|
|
29
|
-
env),async()=>{let file;try{file=readCacheFile(env)}catch{file={version:1,entries:{}}}const entries={...file.entries??{}};entries[profile]={relay_url:relayUrl,fetched_at:new Date(now()).toISOString(),models:ids,min_supported_version:minSupportedVersion};
|
|
30
|
-
|
|
31
|
-
relayUrl,env)??builtinCatalog()}}function pickModel(catalog,configured){const fallback=catalog.ids[0]??MODELS[0]?.id??DEFAULT_MODEL;if(!configured||configured==="")return{
|
|
32
|
-
return{model:
|
|
25
|
+
"AbortError"||err.name==="TimeoutError")}function errorMessage(err){return err instanceof Error?err.message:String(err)}import fs2 from"fs";import path from"path";import fs from"fs";function isTrustworthyCacheFile(file){try{const st=fs.lstatSync(file);if(process.platform==="win32")return st.isFile();if(st.isSymbolicLink())return false;const uid=process.getuid?.();if(uid!==void 0&&st.uid!==uid)return false;return(st.mode&18)===0}catch{return false}}function writePrivateFileAtomic(file,content){const tmp=`${file}.${process.pid}.tmp`;fs.rmSync(tmp,{force:true});fs.writeFileSync(tmp,content,{mode:384,flag:"wx"});try{fs.renameSync(tmp,file)}catch(err){fs.rmSync(
|
|
26
|
+
tmp,{force:true});throw err}if(process.platform!=="win32"){try{fs.chmodSync(file,384)}catch{}}}function isPrivateTwpHome(dir){if(process.platform==="win32")return true;try{const st=fs.lstatSync(dir);const uid=process.getuid?.();if(st.isSymbolicLink()||uid!==void 0&&st.uid!==uid)return false;return(st.mode&18)===0}catch{return false}}function modelCachePath(env=process.env){return path.join(twpHomeDir(env),"models.json")}function modelCacheLockPath(env=process.env){return path.join(twpHomeDir(env),"models.lock")}function builtinCatalog(){return{ids:MODELS.map(m=>m.id),source:"builtin",fetchedAt:null,minSupportedVersion:null}}function readCacheFile(env){const file=modelCachePath(env);if(!isTrustworthyCacheFile(file)){return{version:1,entries:{}}}const parsed=JSON.parse(fs2.readFileSync(file,"utf8"));if(!parsed||typeof parsed!==
|
|
27
|
+
"object"||typeof parsed.entries!=="object"||parsed.entries===null){return{version:1,entries:{}}}return parsed}function readFloor(entry){const raw=entry.min_supported_version;return typeof raw==="string"&&parseVersionCore(raw)!==null?raw.trim():null}function loadCachedVersionFloor(profile,relayUrl,env=process.env){try{const entry=readCacheFile(env).entries?.[profile];if(!entry||entry.relay_url!==relayUrl)return{minSupportedVersion:null,fetchedAt:null};return{minSupportedVersion:readFloor(entry),fetchedAt:typeof entry.
|
|
28
|
+
fetched_at==="string"?entry.fetched_at:null}}catch{return{minSupportedVersion:null,fetchedAt:null}}}function loadCachedCatalog(profile,relayUrl,env=process.env){try{const parsed=readCacheFile(env).entries?.[profile];if(!parsed||parsed.relay_url!==relayUrl)return null;const ids=Array.isArray(parsed.models)?parsed.models.filter(id=>typeof id==="string"&&isSafeModelId(id)):[];if(ids.length===0)return null;return{ids,source:"cache",fetchedAt:typeof parsed.fetched_at==="string"?parsed.fetched_at:null,
|
|
29
|
+
minSupportedVersion:readFloor(parsed)}}catch{return null}}async function saveCatalog(profile,relayUrl,ids,minSupportedVersion,env=process.env,now=Date.now){try{ensureTwpHome(env);await withFileLock(modelCacheLockPath(env),async()=>{let file;try{file=readCacheFile(env)}catch{file={version:1,entries:{}}}const entries={...file.entries??{}};entries[profile]={relay_url:relayUrl,fetched_at:new Date(now()).toISOString(),models:ids,min_supported_version:minSupportedVersion};writePrivateFileAtomic(modelCachePath(
|
|
30
|
+
env),`${JSON.stringify({version:1,entries},null,2)}
|
|
31
|
+
`)})}catch{}}async function loadCatalog(client,profile,relayUrl,env=process.env){try{const{ids,minSupportedVersion}=await client.fetchModelCatalog();await saveCatalog(profile,relayUrl,ids,minSupportedVersion,env);return{ids,source:"server",fetchedAt:new Date().toISOString(),minSupportedVersion}}catch{return loadCachedCatalog(profile,relayUrl,env)??builtinCatalog()}}function pickModel(catalog,configured){const fallback=catalog.ids[0]??MODELS[0]?.id??DEFAULT_MODEL;if(!configured||configured==="")return{
|
|
32
|
+
model:fallback};if(catalog.ids.includes(configured))return{model:configured};if(catalog.source==="builtin"){return{model:configured,warning:`\u30E2\u30C7\u30EB\u4E00\u89A7\u3092\u53D6\u5F97\u3067\u304D\u306A\u304B\u3063\u305F\u305F\u3081\u3001\u6307\u5B9A\u3055\u308C\u305F ${configured} \u3092\u305D\u306E\u307E\u307E\u4F7F\u3044\u307E\u3059\uFF08\u5229\u7528\u3067\u304D\u306A\u3044\u5834\u5408\u306F\u30EA\u30EC\u30FC\u304C 400 \u3092\u8FD4\u3057\u307E\u3059\uFF09`}}return{model:fallback,warning:`${configured}\
|
|
33
|
+
\u306F\u5229\u7528\u3067\u304D\u306A\u3044\u305F\u3081 ${fallback} \u3092\u4F7F\u3044\u307E\u3059\uFF08\u5229\u7528\u53EF\u80FD: ${catalog.ids.join(" / ")}\uFF09`}}var DEFAULT_CONTEXT_WINDOW_TOKENS=2e5;var DEFAULT_MAX_TOKENS=8192;var TRIM_THRESHOLD=.8;var ContextManager=class{constructor(contextWindowTokens=DEFAULT_CONTEXT_WINDOW_TOKENS){this.contextWindowTokens=contextWindowTokens}contextWindowTokens;messages=[];totals=emptyUsage();turns=0;lastPromptTokens=0;pendingChars=0;droppedMessages=0;addUser(text){this.pendingChars+=text.length;const last=this.messages[this.messages.length-1];if(last?.role==="user"){last.content.push({type:"text",text});return}this.
|
|
33
34
|
messages.push({role:"user",content:[{type:"text",text}]})}addToolExchange(assistantText,toolUses,results){if(toolUses.length===0)return;const blocks=[];if(assistantText.trim()!=="")blocks.push({type:"text",text:assistantText});blocks.push(...toolUses);this.messages.push({role:"assistant",content:blocks});this.messages.push({role:"user",content:results});this.pendingChars+=blocks.reduce((n,b)=>n+blockLength(b),0);this.pendingChars+=results.reduce((n,b)=>n+blockLength(b),0)}completeTurn(assistantText){
|
|
34
35
|
const text=assistantText.trim();if(text===""){const last=this.messages[this.messages.length-1];if(last?.role==="user"&&!hasToolResult(last)){this.messages.pop();this.pendingChars=Math.max(0,this.pendingChars-lengthOf(last))}return false}this.messages.push({role:"assistant",content:[{type:"text",text:assistantText}]});this.pendingChars+=assistantText.length;this.turns+=1;return true}applyUsage(usage){this.totals={inputTokens:this.totals.inputTokens+usage.inputTokens,cacheReadTokens:this.totals.cacheReadTokens+
|
|
35
36
|
usage.cacheReadTokens,cacheWriteTokens:this.totals.cacheWriteTokens+usage.cacheWriteTokens,outputTokens:this.totals.outputTokens+usage.outputTokens};const prompt=usage.inputTokens+usage.cacheReadTokens+usage.cacheWriteTokens;if(prompt>0){this.lastPromptTokens=prompt;this.pendingChars=0}}history(){return this.messages.map(m=>({role:m.role,content:m.content.map(copyBlock)}))}isEmpty(){return this.messages.length===0}clear(){this.messages=[];this.totals=emptyUsage();this.turns=0;this.lastPromptTokens=
|
|
@@ -38,4 +39,4 @@ break;const orphanResult=hasToolResult(head2)&&this.messages.length>1;if(head2.r
|
|
|
38
39
|
const freed=before-lengthOf(head);this.lastPromptTokens=Math.max(0,this.lastPromptTokens-Math.ceil(freed/4));this.pendingChars=Math.max(0,this.pendingChars-freed);dropped+=1}this.droppedMessages+=dropped;return dropped}estimatedPromptTokens(){if(this.lastPromptTokens===0){return Math.ceil(this.totalChars()/4)}return this.lastPromptTokens+Math.ceil(this.pendingChars/4)}snapshot(){const used=this.estimatedPromptTokens();const remaining=Math.round((this.contextWindowTokens-used)/this.contextWindowTokens*
|
|
39
40
|
100);return{totals:{...this.totals},turns:this.turns,lastPromptTokens:this.lastPromptTokens,remainingPercent:Math.max(0,Math.min(100,remaining)),droppedMessages:this.droppedMessages}}totalChars(){return this.messages.reduce((sum,m)=>sum+lengthOf(m),0)}};function lengthOf(message){return message.content.reduce((sum,block)=>sum+blockLength(block),0)}function copyBlock(block){return block.type==="tool_use"?{...block,input:{...block.input}}:{...block}}function hasToolResult(message){return message.content.
|
|
40
41
|
some(block=>block.type==="tool_result")}function createRuntime(opts){const env=opts.env??process.env;const cwd=opts.cwd??process.cwd();const profile=resolveProfile(opts.profile,env,cwd);const creds=loadCredentials(profile.name,env);const apiUrl=effectiveApiUrl(profile,creds?.api_url,env);const relayUrl=effectiveRelayUrl(profile,creds?.relay_url,env);const session=new AuthSession(profile.name,apiUrl,env);const client=new RelayClient(relayUrl,session,httpFetch,opts.cliVersion);const configured=resolveConfiguredModel(opts.model,profile.name,
|
|
41
|
-
env,cwd);return{profileName:profile.name,apiUrl,relayUrl,client,session,context:new ContextManager,loggedIn:creds!==null,configuredModel:configured?.model??null,loadCatalog:()=>loadCatalog(client,profile.name,relayUrl,env),loadCachedFloor:()=>loadCachedVersionFloor(profile.name,relayUrl,env)}}export{modelLabel,toModelInfos,emptyUsage,RelayError,DEFAULT_MAX_TOKENS,builtinCatalog,loadCachedCatalog,pickModel,createRuntime};
|
|
42
|
+
env,cwd);return{profileName:profile.name,apiUrl,relayUrl,client,session,context:new ContextManager,loggedIn:creds!==null,configuredModel:configured?.model??null,loadCatalog:()=>loadCatalog(client,profile.name,relayUrl,env),loadCachedFloor:()=>loadCachedVersionFloor(profile.name,relayUrl,env)}}export{modelLabel,toModelInfos,emptyUsage,RelayError,DEFAULT_MAX_TOKENS,isTrustworthyCacheFile,writePrivateFileAtomic,isPrivateTwpHome,builtinCatalog,loadCachedCatalog,pickModel,createRuntime};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
|
+
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
+
import{UsageError}from"./chunk-7WSNIXTQ.js";function singleRef(input,options){const fromFlag=input.flags.get(options.flag);const[fromArg,...rest]=input.args;if(rest.length>0){throw new UsageError(`\u53D7\u3051\u53D6\u308C\u308B${options.label}\u306F1\u3064\u3060\u3051\u3067\u3059: ${rest.join(" ")}`,options.usage)}if(fromArg!==void 0&&fromFlag!==void 0){throw new UsageError(`${options.label}\u304C\u4F4D\u7F6E\u5F15\u6570\uFF08${fromArg}\uFF09\u3068 ${options.flag} ${fromFlag} \u306E\u4E21\u65B9\u3067\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u3059`,
|
|
4
|
+
`\u3069\u3061\u3089\u304B\u4E00\u65B9\u3060\u3051\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u3069\u3061\u3089\u3067\u3082\u540C\u3058\u610F\u5473\u3067\u3059\uFF09\u3002`)}const value=fromArg??fromFlag;if(value===void 0||value.trim()===""){if(options.required===false)return void 0;throw new UsageError(`${options.label}\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044`,options.usage)}return value.trim()}function requireResolved(input,key){const value=input.resolved?.[key];if(value===
|
|
5
|
+
void 0||value===""){throw new Error(`\u5185\u90E8\u30A8\u30E9\u30FC: ${key} \u304C\u89E3\u6C7A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\uFF08prepare() \u306E\u914D\u7DDA\u6F0F\u308C\uFF09`)}return value}function withResolved(input,values){return{...input,resolved:{...input.resolved,...values}}}export{singleRef,requireResolved,withResolved};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
|
+
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
+
import{ApiResponseError}from"./chunk-7WSNIXTQ.js";function isRecord(value){return typeof value==="object"&&value!==null&&!Array.isArray(value)}function pick(row,columns){const source=isRecord(row)?row:{};const out={};for(const column of columns)out[column]=source[column]??null;return out}function acknowledgement(body,label){if(!isRecord(body)||body["result"]!==true){throw new ApiResponseError(`${label}\u306E\u5FDC\u7B54\u304C\u60F3\u5B9A\u306E\u5F62\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}
|
|
4
|
+
return{result:true,message:body["message"]??null}}export{isRecord,pick,acknowledgement};
|