@tocca-systems/twp-cli 0.79.0 → 0.81.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.
@@ -62,12 +62,20 @@ return}const keys=parseKeysLine(logText,keysLine);if(keys===null){log.log(` \u2
62
62
  return}let enqueued=0;const seen=new Set;for(const key of keys){if(seen.has(key))continue;seen.add(key);if(queueContainsKey(queued,key)){log.log(` \u23ED ${key} \u306E\u30A2\u30A4\u30C6\u30E0\u306F\u65E2\u306B\u30AD\u30E5\u30FC\u306B\u3042\u308A\u307E\u3059 \u2192 dev\u691C\u8A3C\u306E\u6295\u5165\u3092\u30B9\u30AD\u30C3\u30D7`);continue}const{itemId,detail}=await createItem(api,{label:`[P1] ${key} \u306Edev\u691C\u8A3C\uFF08develop\u30DE\u30FC\u30B8\u76F4\u5F8C\u30FB\u6DF7\u5165\u30DE\u30FC\u30B8\u9632\u6B62\u306E\u305F\u3081\u81EA\u52D5\u6295\u5165\uFF09 #ai:verify`,
63
63
  prompt:`${verifySkill} ${key}`,ai_type:"claude",task_key:key});if(!itemId){log.log(` \u26A0\uFE0F ${key} \u306Edev\u691C\u8A3C\u30A2\u30A4\u30C6\u30E0\u6295\u5165\u306B\u5931\u6557\u3057\u307E\u3057\u305F: ${detail}`);continue}enqueued+=1;log.log(` \u{1F50E} ${key} \u306Edev\u691C\u8A3C\u3092\u30AD\u30E5\u30FC\u3078\u6295\u5165\u3057\u307E\u3057\u305F\uFF08${itemId}\uFF09`)}if(enqueued>0){log.log(` \u2192 develop\u30DE\u30FC\u30B8\u6E08\u307F ${enqueued} \u4EF6\u306Edev\u691C\u8A3C\u3092\u81EA\u52D5\u6295\u5165\u3057\u307E\u3057\u305F\uFF08\u8A08\u753BAI\u306E\u5224\u65AD\u306B\u59D4\u306D\u306A\u3044\uFF09`)}}var RECENT_ADVANCE_WINDOW_HOURS=6;function normalizeOutcomeCode(raw){const m=/\b([A-Z][A-Z0-9_]*_RESULT)\s*:\s*([A-Za-z_][A-Za-z0-9_]*)/.exec(raw??"");if(!m)return null;return`${m[1]}: ${(m[2]??"").toUpperCase()}`}function skillOfLedgerItem(item){const explicit=(item.skill??"").trim();if(explicit)return normalizeSkillName(explicit);return skillOfItem(item)}function advanceKey(taskKey,skill){return`${taskKey}#${normalizeSkillName(skill)}`}function buildRecentCandidateIndex(items,opts={}){const nowMicros=(opts.
64
64
  now??new Date).getTime()*1e3;const latest=new Map;for(const item of items){if(item.status!==void 0&&item.status!=="completed")continue;const taskKey=(item.task_key??"").trim();if(taskKey==="")continue;const skill=skillOfLedgerItem(item);if(skill==="")continue;const sortOrder=typeof item.sort_order==="number"?item.sort_order:0;const key=advanceKey(taskKey,skill);const prev=latest.get(key);if(prev&&prev.sortOrder>=sortOrder)continue;latest.set(key,{sortOrder,candidate:{taskKey,skill,itemId:item.item_id,
65
- outcomeCode:normalizeOutcomeCode(item.outcome_code),ageMinutes:sortOrder>0?Math.floor((nowMicros-sortOrder)/6e7):null}})}const index=new Map;for(const[key,value]of latest)index.set(key,value.candidate);return index}function findRecentCandidate(index,taskKey,skill){if(taskKey.trim()===""||skill.trim()==="")return null;return index.get(advanceKey(taskKey.trim(),skill))??null}async function resolveRecentAdvance(candidate,fetchResult,advancing){if(advancing.size===0)return null;let outcome=candidate.
66
- outcomeCode;if(outcome===null){const result=await fetchResult(candidate.itemId);outcome=result?normalizeOutcomeCode(parseOutcomeCode(result)):null}if(outcome===null||!advancing.has(outcome))return null;return{taskKey:candidate.taskKey,skill:candidate.skill,outcome,itemId:candidate.itemId,ageMinutes:candidate.ageMinutes}}function formatRecentAdvance(advance){const age=advance.ageMinutes===null?"\u4E0D\u660E":`${advance.ageMinutes}\u5206\u524D`;return`${advance.outcome}\uFF08${age} / item=${advance.
67
- itemId}\uFF09`}function windowStartMicros(now,hours=RECENT_ADVANCE_WINDOW_HOURS){return Math.trunc((now.getTime()-hours*36e5)*1e3)}var MARKER_PAIR_RE=/^([^=\s,]+)=([a-z]+)$/;function decodeMarkerKey(raw){let key;try{key=decodeURIComponent(raw)}catch{return null}return isTaskKey(key)&&key.trim()===key?key:null}function parseTaskStatusSnapshot(prefetchSection){const m=/<!--\s*OPS_TASK_STATUS\s([^>]*?)-->/.exec(prefetchSection);if(!m||m[1]===void 0)return null;const body=m[1];const windowMatch=/\bwindow_hours=(\d+)\b/.
68
- exec(body);const byKey=new Map;for(const token of body.trim().split(/\s+/)){for(const part of token.split(",")){const pair=MARKER_PAIR_RE.exec(part);if(!pair)continue;const key=decodeMarkerKey(pair[1]);if(key!==null)byKey.set(key,pair[2])}}return{complete:/\bcomplete=1\b/.test(body),windowHours:windowMatch?Number(windowMatch[1]):0,byKey}}function shouldSuppressForStatus(advance,snapshot,advancing){if(snapshot===null){return{suppress:false,reason:"\u30B9\u30C6\u30FC\u30BF\u30B9\u306E\u30DE\u30FC\u30AB\u30FC\uFF08OPS_TASK_STATUS\uFF09\u304C prefetch \u306B\u7121\u3044"}}
69
- if(!snapshot.complete){return{suppress:false,reason:"\u30B9\u30C6\u30FC\u30BF\u30B9\u306E\u53D6\u5F97\u306B\u5931\u6557\u3057\u305F\u3082\u306E\u304C\u3042\u308B\uFF08complete=0\uFF09"}}if(snapshot.windowHours<RECENT_ADVANCE_WINDOW_HOURS){return{suppress:false,reason:`\u30DE\u30FC\u30AB\u30FC\u306E\u7A93\uFF08${snapshot.windowHours}h\uFF09\u304C\u6291\u6B62\u306E\u7A93\uFF08${RECENT_ADVANCE_WINDOW_HOURS}h\uFF09\u3088\u308A\u72ED\u3044`}}const expected=advancing.get(advance.outcome);if(expected===
70
- void 0){return{suppress:false,reason:`${advance.outcome} \u306E\u60F3\u5B9A\u30B9\u30C6\u30FC\u30BF\u30B9\u304C\u5BFE\u5FDC\u8868\u306B\u7121\u3044`}}const current=snapshot.byKey.get(advance.taskKey);if(current===void 0){return{suppress:true,reason:""}}if(current===expected)return{suppress:true,reason:""};return{suppress:false,reason:`\u524D\u56DE\u306E\u5B9F\u884C\u306E\u5F8C\u306B\u30BF\u30B9\u30AF\u304C\u52D5\u3044\u305F\uFF08${expected} \u2192 ${current}\uFF09\uFF1D\u65B0\u3057\u3044\u4ED5\u4E8B`}}function pendingTaskKeys(items){return new Set(items.map(p=>(p.task_key??"").trim()).filter(k=>k!==""))}async function buildDynamicBlocks(src){const now=src.now??new Date;let inflight=null;if(src.processing!==null){inflight={};for(const entry of inflightEntries(src.processing,now,src.staleHours)){inflight[entry.key]=`\u4ED6\u30E9\u30F3\u30CA\u30FC\u304C\u51E6\u7406\u4E2D\u3067\u3059\uFF08${formatInflightEntry(entry)}\uFF09`}}const pending=src.pending===null?null:[...pendingTaskKeys(src.pending)].
65
+ outcomeCode:normalizeOutcomeCode(item.outcome_code),outcomeRaw:(item.outcome_code??"").trim()===""?null:item.outcome_code,ageMinutes:sortOrder>0?Math.floor((nowMicros-sortOrder)/6e7):null}})}const index=new Map;for(const[key,value]of latest)index.set(key,value.candidate);return index}function findRecentCandidate(index,taskKey,skill){if(taskKey.trim()===""||skill.trim()==="")return null;return index.get(advanceKey(taskKey.trim(),skill))??null}async function resolveRecentAdvance(candidate,fetchResult,advancing){
66
+ if(advancing.size===0)return null;let outcome=candidate.outcomeCode;if(outcome===null){const result=await fetchResult(candidate.itemId);outcome=result?normalizeOutcomeCode(parseOutcomeCode(result)):null}if(outcome===null||!advancing.has(outcome))return null;return{taskKey:candidate.taskKey,skill:candidate.skill,outcome,itemId:candidate.itemId,ageMinutes:candidate.ageMinutes}}function formatRecentAdvance(advance){const age=advance.ageMinutes===null?"\u4E0D\u660E":`${advance.ageMinutes}\u5206\u524D`;
67
+ return`${advance.outcome}\uFF08${age} / item=${advance.itemId}\uFF09`}function windowStartMicros(now,hours=RECENT_ADVANCE_WINDOW_HOURS){return Math.trunc((now.getTime()-hours*36e5)*1e3)}var MARKER_PAIR_RE=/^([^=\s,]+)=([a-z]+)$/;function decodeMarkerKey(raw){let key;try{key=decodeURIComponent(raw)}catch{return null}return isTaskKey(key)&&key.trim()===key?key:null}function parseTaskStatusSnapshot(prefetchSection){const m=/<!--\s*OPS_TASK_STATUS\s([^>]*?)-->/.exec(prefetchSection);if(!m||m[1]===void 0)
68
+ return null;const body=m[1];const windowMatch=/\bwindow_hours=(\d+)\b/.exec(body);const byKey=new Map;for(const token of body.trim().split(/\s+/)){for(const part of token.split(",")){const pair=MARKER_PAIR_RE.exec(part);if(!pair)continue;const key=decodeMarkerKey(pair[1]);if(key!==null)byKey.set(key,pair[2])}}return{complete:/\bcomplete=1\b/.test(body),windowHours:windowMatch?Number(windowMatch[1]):0,byKey}}function shouldSuppressForStatus(advance,snapshot,advancing){if(snapshot===null){return{suppress:false,
69
+ reason:"\u30B9\u30C6\u30FC\u30BF\u30B9\u306E\u30DE\u30FC\u30AB\u30FC\uFF08OPS_TASK_STATUS\uFF09\u304C prefetch \u306B\u7121\u3044"}}if(!snapshot.complete){return{suppress:false,reason:"\u30B9\u30C6\u30FC\u30BF\u30B9\u306E\u53D6\u5F97\u306B\u5931\u6557\u3057\u305F\u3082\u306E\u304C\u3042\u308B\uFF08complete=0\uFF09"}}if(snapshot.windowHours<RECENT_ADVANCE_WINDOW_HOURS){return{suppress:false,reason:`\u30DE\u30FC\u30AB\u30FC\u306E\u7A93\uFF08${snapshot.windowHours}h\uFF09\u304C\u6291\u6B62\u306E\u7A93\uFF08${RECENT_ADVANCE_WINDOW_HOURS}\
70
+ h\uFF09\u3088\u308A\u72ED\u3044`}}const expected=advancing.get(advance.outcome);if(expected===void 0){return{suppress:false,reason:`${advance.outcome} \u306E\u60F3\u5B9A\u30B9\u30C6\u30FC\u30BF\u30B9\u304C\u5BFE\u5FDC\u8868\u306B\u7121\u3044`}}const current=snapshot.byKey.get(advance.taskKey);if(current===void 0){return{suppress:true,reason:""}}if(current===expected)return{suppress:true,reason:""};return{suppress:false,reason:`\u524D\u56DE\u306E\u5B9F\u884C\u306E\u5F8C\u306B\u30BF\u30B9\u30AF\u304C\u52D5\u3044\u305F\uFF08${expected}\
71
+ \u2192 ${current}\uFF09\uFF1D\u65B0\u3057\u3044\u4ED5\u4E8B`}}var RESUME_HOLD_CAP_HOURS=6;function parseResumeCondition(raw){const head=/\b[A-Z][A-Z0-9_]*_RESULT\s*:([^|\n]*)/.exec(raw??"")?.[1]??"";let resumeAfter=null;const blockedBy=[];const prHeads=[];for(const token of head.trim().split(/\s+/)){const eq=token.indexOf("=");if(eq<=0)continue;const name=token.slice(0,eq);const value=token.slice(eq+1);if(name==="resume_after"){if(!/(Z|[+-]\d{2}:?\d{2})$/.test(value))continue;const t=new Date(value);
72
+ if(Number.isNaN(t.getTime()))continue;if(resumeAfter===null||t.getTime()<resumeAfter.getTime())resumeAfter=t}else if(name==="blocked_by"){for(const key of value.split(",")){if(isTaskKey(key)&&key.trim()===key)blockedBy.push(key)}}else if(name==="pr_head"){const m=/^([A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+)#(\d+)@([0-9a-fA-F]{7,40})$/.exec(value);if(m)prHeads.push({repo:m[1],number:Number(m[2]),sha:m[3].toLowerCase()})}}if(resumeAfter===null&&blockedBy.length===0&&prHeads.length===0)return null;return{resumeAfter,
73
+ blockedBy,prHeads}}async function resolveResumeHold(candidate,fetchResult,advancing){let raw=candidate.outcomeRaw??null;if(raw===null){const result=await fetchResult(candidate.itemId);raw=result?parseOutcomeCode(result):null}const outcome=normalizeOutcomeCode(raw);if(outcome===null||advancing.has(outcome))return null;const condition=parseResumeCondition(raw);if(condition===null)return null;return{taskKey:candidate.taskKey,skill:candidate.skill,outcome,condition,itemId:candidate.itemId,ageMinutes:candidate.
74
+ ageMinutes}}var HUMAN_HELD_STATUS_CODES=new Set(["humanjudge","humanwork","datafix","reqwait","spec","hold"]);function shaMatches(recorded,current){const c=current.toLowerCase();return c.startsWith(recorded)||recorded.startsWith(c)}async function shouldSuppressForResume(hold,snapshot,lookupPrHead,now=new Date){if(hold.ageMinutes===null){return{suppress:false,reason:"\u5148\u767A\u306E\u7D4C\u904E\u6642\u9593\u304C\u5206\u304B\u3089\u306A\u3044"}}if(hold.ageMinutes>=RESUME_HOLD_CAP_HOURS*60){return{
75
+ suppress:false,reason:`\u4E0A\u9650${RESUME_HOLD_CAP_HOURS}\u6642\u9593\u306B\u9054\u3057\u305F`}}const{resumeAfter,blockedBy,prHeads}=hold.condition;if(resumeAfter!==null&&now.getTime()>=resumeAfter.getTime()){return{suppress:false,reason:`resume_after\uFF08${resumeAfter.toISOString()}\uFF09\u3092\u904E\u304E\u305F`}}if(blockedBy.length>0){if(snapshot===null||!snapshot.complete||snapshot.windowHours<RESUME_HOLD_CAP_HOURS){return{suppress:false,reason:"blocked_by \u3092\u5224\u5B9A\u3067\u304D\u306A\u3044\uFF08OPS_TASK_STATUS \u304C\u7121\u3044\u30FB\u4E0D\u5B8C\u5168\u30FB\
76
+ \u7A93\u304C\u72ED\u3044\uFF09"}}const moved=blockedBy.find(key=>{const code=snapshot.byKey.get(key);return code!==void 0&&!HUMAN_HELD_STATUS_CODES.has(code)});if(moved!==void 0){return{suppress:false,reason:`\u963B\u5BB3\u30BF\u30B9\u30AF ${moved} \u304C\u76F4\u8FD1\u306B\u52D5\u3044\u305F\uFF08\u73FE\u5728 ${snapshot.byKey.get(moved)}\uFF09`}}}for(const pr of prHeads){const current=await lookupPrHead(pr.repo,pr.number);if(current===null){return{suppress:false,reason:`${pr.repo}#${pr.number} \u306E \
77
+ head \u3092\u53D6\u5F97\u3067\u304D\u306A\u3044`}}if(!shaMatches(pr.sha,current)){return{suppress:false,reason:`${pr.repo}#${pr.number} \u306E head \u304C\u5909\u308F\u3063\u305F\uFF08${pr.sha} \u2192 ${current.slice(0,12)}\uFF09`}}}return{suppress:true,reason:""}}function formatResumeHold(hold){const age=hold.ageMinutes===null?"\u4E0D\u660E":`${hold.ageMinutes}\u5206\u524D`;const parts=[];if(hold.condition.resumeAfter!==null)parts.push(`resume_after=${hold.condition.resumeAfter.toISOString()}`);
78
+ if(hold.condition.blockedBy.length>0)parts.push(`blocked_by=${hold.condition.blockedBy.join(",")}`);for(const pr of hold.condition.prHeads)parts.push(`pr_head=${pr.repo}#${pr.number}@${pr.sha}`);return`${hold.outcome} ${parts.join(" ")}\uFF08${age} / item=${hold.itemId}\uFF09`}function pendingTaskKeys(items){return new Set(items.map(p=>(p.task_key??"").trim()).filter(k=>k!==""))}async function buildDynamicBlocks(src){const now=src.now??new Date;let inflight=null;if(src.processing!==null){inflight={};for(const entry of inflightEntries(src.processing,now,src.staleHours)){inflight[entry.key]=`\u4ED6\u30E9\u30F3\u30CA\u30FC\u304C\u51E6\u7406\u4E2D\u3067\u3059\uFF08${formatInflightEntry(entry)}\uFF09`}}const pending=src.pending===null?null:[...pendingTaskKeys(src.pending)].
71
79
  sort();let advanced=src.advancing.size===0?{}:null;const statusUsable=src.taskStatus!==null&&src.taskStatus.complete&&src.taskStatus.windowHours>=RECENT_ADVANCE_WINDOW_HOURS;if(src.recent!==null&&src.advancing.size>0&&statusUsable){advanced={};for(const[key,candidate]of buildRecentCandidateIndex(src.recent,{now})){const advance=await resolveRecentAdvance(candidate,async()=>null,src.advancing);if(advance===null)continue;if(!shouldSuppressForStatus(advance,src.taskStatus,src.advancing).suppress)continue;
72
80
  advanced[key]=`\u76F4\u8FD1\u306B\u540C\u3058\u30B9\u30AD\u30EB\u304C\u72B6\u614B\u3092\u9032\u3081\u3066\u3044\u307E\u3059\uFF08${formatRecentAdvance(advance)}\uFF09`}}return{taken_at:now.toISOString(),inflight,pending,advanced}}function dynamicStepReasons(blocks,taskKey,skill){if(!blocks)return[];const key=taskKey.trim();if(key==="")return[];const reasons=[];const inflight=blocks.inflight?.[key];if(inflight!==void 0)reasons.push(`${key} \u306F${inflight}`);if(blocks.pending?.includes(key))reasons.
73
81
  push(`${key} \u306F\u65E2\u306B\u30AD\u30E5\u30FC\u5F85\u3061\uFF08pending\uFF09\u306B\u5C45\u307E\u3059`);const advanced=skill.trim()===""?void 0:blocks.advanced?.[advanceKey(key,skill)];if(advanced!==void 0)reasons.push(`${key} \u306F${advanced}`);return reasons}function unavailableChecks(blocks){if(blocks===null)return["\u51E6\u7406\u4E2D","\u30AD\u30E5\u30FC\u5F85\u3061","\u76F4\u8FD1\u3067\u72B6\u614B\u3092\u9032\u3081\u305F"];const out=[];if(blocks.inflight===null)out.push("\u51E6\u7406\u4E2D");
@@ -94,5 +102,5 @@ ${JSON.stringify(check,null,2)}
94
102
  `)}finally{setSkillPrefix(before)}if(!check.accepted){if(!opts.check)recordRejection(dir,token,check);deps.stderr("\u68C4\u5374\u304C\u3042\u308B\u305F\u3081\u63D0\u51FA\u3057\u3066\u3044\u307E\u305B\u3093\u3002\u7406\u7531\u3092\u76F4\u3057\u3066\u51FA\u3057\u76F4\u3057\u3066\u304F\u3060\u3055\u3044\n");if(readSubmission(submissionPath(dir,token))!==null){deps.stderr("\uFF08\u524D\u56DE\u53D7\u7406\u3057\u305F\u63D0\u51FA\u304C\u6709\u52B9\u306A\u307E\u307E\u3067\u3059\u3002\u51FA\u3057\u76F4\u3055\u306A\u3051\u308C\u3070\u30EB\u30FC\u30D7\u306F\u305D\u308C\u3092\u767B\u9332\u3057\u307E\u3059\uFF09\n")}
95
103
  return 1}plan=parsed}if(opts.check){deps.stdout(opts.empty?"\u691C\u67FB\u306E\u307F: \u7A7A\u306E\u8A08\u753B\uFF080\u4EF6\uFF09\n":"\u691C\u67FB\u306E\u307F: \u7F6E\u3044\u3066\u3044\u307E\u305B\u3093\uFF08--check\uFF09\n");return 0}const submitted={plan,empty:opts.empty,submitted_at:new Date().toISOString()};writeAtomic(submissionPath(dir,token),JSON.stringify(submitted));deps.stdout(opts.empty?"\u7A7A\u306E\u8A08\u753B\uFF080\u4EF6\uFF09\u3092\u63D0\u51FA\u3057\u307E\u3057\u305F\u3002\u8A08\u753B\u30D5\u30A7\u30FC\u30BA\u306E\u7D42\u4E86\u5F8C\u3001\u4F55\u3082\u7A4D\u307F\u307E\u305B\u3093\n":
96
104
  `\u8A08\u753B\uFF08${plan.steps.length}\u4EF6\uFF09\u3092\u63D0\u51FA\u3057\u307E\u3057\u305F\u3002\u8A08\u753B\u30D5\u30A7\u30FC\u30BA\u306E\u7D42\u4E86\u5F8C\u306B\u30EB\u30FC\u30D7\u304C\u4E00\u5EA6\u306B\u767B\u9332\u3057\u307E\u3059\uFF08\u51FA\u3057\u76F4\u3059\u3068\u6700\u5F8C\u306E\u63D0\u51FA\u304C\u6709\u52B9\uFF09
97
- `);return 0}export{createItem,ReleaseOutcomeLog,parseReleaseResult,parseOutcomeCode,enqueueBlockerRecovery,enqueueReleasePhase5Recovery,enqueueReleasePartialMergeRerun,enqueueDevVerifyForMerged,staleFloorHours,inflightStaleHours,inflightEntries,formatInflightEntry,RECENT_ADVANCE_WINDOW_HOURS,buildRecentCandidateIndex,findRecentCandidate,resolveRecentAdvance,formatRecentAdvance,windowStartMicros,parseTaskStatusSnapshot,shouldSuppressForStatus,pendingTaskKeys,buildDynamicBlocks,unavailableChecks,formatPlanResultLine,
98
- PLAN_TOKEN_ENV,PLAN_DIR_ENV,NO_PLAN_SESSION,fileSkillNames,openPlanSession,checkPlan,formatCheck,runPlanSubmit};
105
+ `);return 0}export{createItem,ReleaseOutcomeLog,parseReleaseResult,parseOutcomeCode,enqueueBlockerRecovery,enqueueReleasePhase5Recovery,enqueueReleasePartialMergeRerun,enqueueDevVerifyForMerged,staleFloorHours,inflightStaleHours,inflightEntries,formatInflightEntry,RECENT_ADVANCE_WINDOW_HOURS,buildRecentCandidateIndex,findRecentCandidate,resolveRecentAdvance,formatRecentAdvance,windowStartMicros,parseTaskStatusSnapshot,shouldSuppressForStatus,resolveResumeHold,shouldSuppressForResume,formatResumeHold,pendingTaskKeys,
106
+ buildDynamicBlocks,unavailableChecks,formatPlanResultLine,PLAN_TOKEN_ENV,PLAN_DIR_ENV,NO_PLAN_SESSION,fileSkillNames,openPlanSession,checkPlan,formatCheck,runPlanSubmit};
@@ -1,7 +1,7 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{CommandModelMissingError,MAX_REPORTED_VIOLATIONS,loadCommandModelDomain,loadCommandModelIndex,validateBody,validateQuery}from"./chunk-NZ7WI4RZ.js";import{isForceOnly,killProcessTree,system32}from"./chunk-N2UVRM3Z.js";import{redactSecretValues}from"./chunk-LDBYJPRD.js";import{isSafePathSegment}from"./chunk-HVZUXLQ4.js";import{ApiError,TwpApiClient,appendQuery}from"./chunk-JA5A6UJ2.js";import{DEFAULT_MAX_TOKENS,emptyUsage}from"./chunk-JQBXLZTJ.js";import{
4
- isPrivateTwpHome,isTrustworthyCacheFile,writePrivateFileAtomic}from"./chunk-D233KKXW.js";import{findExecutable,isWindowsDriveAbsolute}from"./chunk-PMOUHEJQ.js";import{AuthSession,NotLoggedInError,SessionExpiredError,withFileLock}from"./chunk-XNLIEUAW.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import{configReadDirs,ensureTwpHome,twpHomeDir}from"./chunk-RZVI6PMW.js";import{MODES,applyPermissionMode,checkPermission,isModeId,setActiveModes}from"./chunk-2LOT54OO.js";
3
+ import{CommandModelMissingError,MAX_REPORTED_VIOLATIONS,loadCommandModelDomain,loadCommandModelIndex,validateBody,validateQuery}from"./chunk-NZ7WI4RZ.js";import{isForceOnly,killProcessTree,system32}from"./chunk-N2UVRM3Z.js";import{redactSecretValues}from"./chunk-LDBYJPRD.js";import{isSafePathSegment}from"./chunk-HVZUXLQ4.js";import{ApiError,TwpApiClient,appendQuery}from"./chunk-JA5A6UJ2.js";import{DEFAULT_MAX_TOKENS,effectiveModelSpec,emptyUsage}from"./chunk-TVTJRNUC.js";
4
+ import{isPrivateTwpHome,isTrustworthyCacheFile,writePrivateFileAtomic}from"./chunk-D233KKXW.js";import{findExecutable,isWindowsDriveAbsolute}from"./chunk-PMOUHEJQ.js";import{AuthSession,NotLoggedInError,SessionExpiredError,withFileLock}from"./chunk-XNLIEUAW.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import{configReadDirs,ensureTwpHome,twpHomeDir}from"./chunk-RZVI6PMW.js";import{MODES,applyPermissionMode,checkPermission,isModeId,setActiveModes}from"./chunk-2LOT54OO.js";
5
5
  import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import fs2 from"fs";import path3 from"path";import os2 from"os";import{realpathSync}from"fs";import{homedir}from"os";import{dirname,isAbsolute,relative,resolve,sep}from"path";var PathDeniedError=class extends Error{constructor(message){super(message);this.name="PathDeniedError"}};function resolveToolPath(input,cwd,home=homedir()){if(typeof input!=="string"||input.trim()===""){throw new PathDeniedError("path must be a non-empty string")}const expanded=expandHome(input,home);const abs=isAbsolute(expanded)?resolve(expanded):resolve(cwd,expanded);const root=realOrSelf(resolve(cwd));assertInside(abs,resolve(cwd),abs);assertNotSecret(abs,home);const real=realOrSelf(abs);if(real!==
6
6
  abs){assertInside(real,root,abs);assertNotSecret(real,home)}return abs}function realToolPath(input,cwd,home=homedir()){return realOrSelf(resolveToolPath(input,cwd,home))}function assertInside(target,root,reported){const rel=relative(root,target);const outside=rel===".."||rel.startsWith(`..${sep}`)||isAbsolute(rel);if(outside){throw new PathDeniedError(`path escapes the working directory (${reported}). Only paths under ${root} can be accessed.`)}}function realOrSelf(target){let current=target;const rest=[];
7
7
  for(;;){try{const real=realpathSync(current);return rest.length===0?real:resolve(real,...rest.reverse())}catch{const parent=dirname(current);if(parent===current)return target;rest.push(current.slice(parent.length+1));current=parent}}}function assertNotSecret(absPath,home=homedir(),env=process.env){const reason=secretReason(absPath,home,env);if(reason!==null)throw new PathDeniedError(`refusing to access ${absPath}: ${reason}`)}function secretReason(absPath,_home=homedir(),env=process.env){const lower=absPath.
@@ -97,14 +97,15 @@ return`\u30EB\u30FC\u30EB ${verdict.rule??""}`}}function safePreview(tool,input)
97
97
  "- \u30C4\u30FC\u30EB\u304C\u62D2\u5426\u3055\u308C\u305F\uFF08permission denied\uFF09\u3068\u304D\u306F\u3001\u540C\u3058\u547C\u3073\u51FA\u3057\u3092\u7E70\u308A\u8FD4\u3055\u305A\u3001\u4F55\u3092\u3057\u305F\u3044\u306E\u304B\u3092\u5229\u7528\u8005\u306B\u8AAC\u660E\u3057\u3066\u304F\u3060\u3055\u3044\u3002**\u305F\u3060\u3057\u62D2\u5426\u306E\u7D50\u679C\u306B\u5229\u7528\u8005\u306E\u4EE3\u308F\u308A\u306E\u6307\u793A\uFF08asked you to do this instead\uFF09\u304C\u4ED8\u3044\u3066\u3044\u308C\u3070\u3001\u8AAC\u660E\u3067\u306F\u306A\u304F\u305D\u306E\u6307\u793A\u306B\u5F93\u3063\u3066\u304F\u3060\u3055\u3044**"];
98
98
  return[`\u3042\u306A\u305F\u306F TWP\uFF08Tocca Working Platform\uFF09\u306E CLI\u300Ctwp\u300D${ctx.cliVersion} \u306E\u4E2D\u3067\u52D5\u304F\u30A2\u30B7\u30B9\u30BF\u30F3\u30C8\u3067\u3059\u3002`,"\u51FA\u529B\u306F\u7AEF\u672B\u306B\u8868\u793A\u3055\u308C\u307E\u3059\u3002\u65E5\u672C\u8A9E\u3067\u3001\u7D50\u8AD6\u3092\u5148\u306B\u3001\u7C21\u6F54\u306B\u7B54\u3048\u3066\u304F\u3060\u3055\u3044\u3002","","## \u3044\u307E\u3067\u304D\u308B\u3053\u3068\u30FB\u3067\u304D\u306A\u3044\u3053\u3068",
99
99
  "",...capability,"- \u898B\u3066\u3044\u306A\u3044\u30D5\u30A1\u30A4\u30EB\u306E\u5185\u5BB9\u3084\u5B9F\u884C\u3057\u3066\u3044\u306A\u3044\u30B3\u30DE\u30F3\u30C9\u306E\u7D50\u679C\u3092\u3001\u898B\u305F\u30FB\u5B9F\u884C\u3057\u305F\u304B\u306E\u3088\u3046\u306B\u66F8\u304B\u306A\u3044\u3067\u304F\u3060\u3055\u3044","","## \u5229\u7528\u8005\u306E\u74B0\u5883","",`- \u4F5C\u696D\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA: ${ctx.cwd}`,...ctx.branch?[`- git \u30D6\u30E9\u30F3\u30C1: ${ctx.branch}`]:[],
100
- `- \u30E2\u30FC\u30C9: ${ctx.modeLabel}\uFF08\u30E2\u30FC\u30C9\u304C\u30C4\u30FC\u30EB\u306E\u8A31\u53EF\u7BC4\u56F2\u3092\u6C7A\u3081\u307E\u3059\uFF09`,...ctx.modePrompt!==void 0&&ctx.modePrompt.trim()!==""?["","## \u3053\u306E\u30E2\u30FC\u30C9\u306E\u6307\u793A","",ctx.modePrompt.trim()]:[]].join("\n")}async function runTurn(client,context,request){const maxTokens=request.maxTokens??DEFAULT_MAX_TOKENS;const maxSteps=request.maxSteps??DEFAULT_MAX_STEPS;const tools=request.tools??[];const wire=tools.
101
- map(toWireTool);context.addUser(request.input);let droppedMessages=context.trimToFit(maxTokens);const totals=emptyUsage();let lastText="";let toolCalls=0;for(let step=0;step<maxSteps;step++){let outcome;try{outcome=await client.stream({model:request.model,maxTokens,...request.system!==void 0?{system:request.system}:{},...wire.length>0?{tools:wire}:{},messages:context.history()},{onTextDelta:request.onTextDelta,...request.signal?{signal:request.signal}:{}})}catch(err){context.completeTurn("");err.
102
- usage=totals;throw err}add(totals,outcome.usage);context.applyUsage(outcome.usage);lastText=outcome.text;if(outcome.aborted||outcome.upstreamError!==null||outcome.toolUses.length===0){const kept=context.completeTurn(outcome.text);return{text:outcome.text,usage:totals,aborted:outcome.aborted,upstreamError:outcome.upstreamError,stopReason:outcome.stopReason,droppedMessages,emptyResponse:!kept,toolCalls,maxStepsReached:false}}const results=await runToolUses(outcome.toolUses,tools,request);toolCalls+=
103
- results.length;context.addToolExchange(outcome.text,outcome.toolUses,results);if(request.signal?.aborted===true){return{text:outcome.text,usage:totals,aborted:true,upstreamError:null,stopReason:outcome.stopReason,droppedMessages,emptyResponse:false,toolCalls,maxStepsReached:false}}droppedMessages+=context.trimToFit(maxTokens)}return{text:lastText,usage:totals,aborted:false,upstreamError:null,stopReason:"max_steps",droppedMessages,emptyResponse:false,toolCalls,maxStepsReached:true}}async function runToolUses(toolUses,tools,request){
104
- const results=[];for(const call of toolUses){request.onToolUse?.({name:call.name,input:call.input});const result=await runOne(call,tools,request);request.onToolResult?.({name:call.name,input:call.input},result);results.push({type:"tool_result",tool_use_id:call.id,content:result.content===""?"(no output)":result.content,...result.isError===true?{is_error:true}:{}})}return results}async function runOne(call,tools,request){const auditUnexecuted=(reasonCode,reason)=>{if(!request.execute)return;request.
105
- execute.audit.record({event:"decision",tool:call.name,risk:"unknown",decision:"deny",reasonCode,reason,mode:request.execute.mode.id,rawInput:typeof call.input==="object"&&call.input!==null?call.input:{},callId:call.id})};if(request.signal?.aborted===true){auditUnexecuted("interrupted","\u5229\u7528\u8005\u304C\u4E2D\u65AD\u3057\u305F\u305F\u3081\u5B9F\u884C\u3057\u306A\u3044");return{content:"interrupted by the user before this tool ran",isError:true,summary:`${call.name} \xB7 \u4E2D\u65AD`}}const tool=tools.
106
- find(t=>t.name===call.name);if(!tool){auditUnexecuted("unknown_tool","\u30E2\u30C7\u30EB\u306B\u6E21\u3057\u3066\u3044\u306A\u3044\u30C4\u30FC\u30EB\u540D\uFF08\u5E38\u99D0\u30BB\u30C3\u30C8\u306B\u7121\u3044\uFF09");return{content:`Unknown tool: ${call.name}. Available tools: ${tools.map(t=>t.name).join(", ")||"(none)"}`,isError:true,summary:`${call.name} \xB7 \u672A\u77E5\u306E\u30C4\u30FC\u30EB`}}if(!request.execute){return{content:`Tool ${call.name} cannot run: this session has no tool execu\
107
- tion context.`,isError:true,summary:`${call.name} \xB7 \u5B9F\u884C\u74B0\u5883\u306A\u3057`}}return executeTool(tool,call.input,{...request.execute,ctx:{...request.execute.ctx,...request.signal?{signal:request.signal}:{}}},call.id)}function add(target,source){target.inputTokens+=source.inputTokens;target.cacheReadTokens+=source.cacheReadTokens;target.cacheWriteTokens+=source.cacheWriteTokens;target.outputTokens+=source.outputTokens}import fs3 from"fs";import path4 from"path";var KNOWN_KEYS=new Set(["id","label","color","description","tools","permissions"]);var NOT_YET_KEYS=new Map([["commands","commands \u306F\u30E2\u30FC\u30C9\u5B9A\u7FA9\u3067\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093\uFF08\u30B3\u30DE\u30F3\u30C9\u3092\u51FA\u3059\u30E2\u30FC\u30C9\u306F\u3001\u30B3\u30DE\u30F3\u30C9\u5B9A\u7FA9 .twp/commands/*.md \u306E front-matter \u306E mode: \u3067\u6307\u5B9A\u3057\u307E\u3059\uFF09"]]);var DECISIONS=new Set(["allow","ask","deny"]);var COLORS=new Set(
100
+ `- \u30E2\u30FC\u30C9: ${ctx.modeLabel}\uFF08\u30E2\u30FC\u30C9\u304C\u30C4\u30FC\u30EB\u306E\u8A31\u53EF\u7BC4\u56F2\u3092\u6C7A\u3081\u307E\u3059\uFF09`,...ctx.modePrompt!==void 0&&ctx.modePrompt.trim()!==""?["","## \u3053\u306E\u30E2\u30FC\u30C9\u306E\u6307\u793A","",ctx.modePrompt.trim()]:[]].join("\n")}async function runTurn(client,context,request){const spec=request.spec??effectiveModelSpec(void 0);const maxTokens=turnMaxTokens(request.maxTokens??DEFAULT_MAX_TOKENS,spec);const maxSteps=request.
101
+ maxSteps??DEFAULT_MAX_STEPS;const tools=spec.tools?request.tools??[]:[];const wire=tools.map(toWireTool);context.setContextWindow(spec.contextWindow);context.addUser(request.input);let droppedMessages=context.trimToFit(maxTokens);const totals=emptyUsage();let lastText="";let toolCalls=0;for(let step=0;step<maxSteps;step++){let outcome;try{outcome=await client.stream({model:request.model,maxTokens,protocol:spec.protocol,promptCache:spec.promptCache,...request.system!==void 0?{system:request.system}:
102
+ {},...wire.length>0?{tools:wire}:{},messages:context.history()},{onTextDelta:request.onTextDelta,...request.signal?{signal:request.signal}:{}})}catch(err){context.completeTurn("");err.usage=totals;throw err}add(totals,outcome.usage);context.applyUsage(outcome.usage);lastText=outcome.text;if(outcome.aborted||outcome.upstreamError!==null||outcome.toolUses.length===0){const kept=context.completeTurn(outcome.text);return{text:outcome.text,usage:totals,aborted:outcome.aborted,upstreamError:outcome.upstreamError,
103
+ stopReason:outcome.stopReason,droppedMessages,emptyResponse:!kept,toolCalls,maxStepsReached:false}}const results=await runToolUses(outcome.toolUses,tools,request);toolCalls+=results.length;context.addToolExchange(outcome.text,outcome.toolUses,results);if(request.signal?.aborted===true){return{text:outcome.text,usage:totals,aborted:true,upstreamError:null,stopReason:outcome.stopReason,droppedMessages,emptyResponse:false,toolCalls,maxStepsReached:false}}droppedMessages+=context.trimToFit(maxTokens)}
104
+ return{text:lastText,usage:totals,aborted:false,upstreamError:null,stopReason:"max_steps",droppedMessages,emptyResponse:false,toolCalls,maxStepsReached:true}}async function runToolUses(toolUses,tools,request){const results=[];for(const call of toolUses){request.onToolUse?.({name:call.name,input:call.input});const result=await runOne(call,tools,request);request.onToolResult?.({name:call.name,input:call.input},result);results.push({type:"tool_result",tool_use_id:call.id,content:result.content===""?
105
+ "(no output)":result.content,...result.isError===true?{is_error:true}:{}})}return results}async function runOne(call,tools,request){const auditUnexecuted=(reasonCode,reason)=>{if(!request.execute)return;request.execute.audit.record({event:"decision",tool:call.name,risk:"unknown",decision:"deny",reasonCode,reason,mode:request.execute.mode.id,rawInput:typeof call.input==="object"&&call.input!==null?call.input:{},callId:call.id})};if(request.signal?.aborted===true){auditUnexecuted("interrupted","\u5229\u7528\
106
+ \u8005\u304C\u4E2D\u65AD\u3057\u305F\u305F\u3081\u5B9F\u884C\u3057\u306A\u3044");return{content:"interrupted by the user before this tool ran",isError:true,summary:`${call.name} \xB7 \u4E2D\u65AD`}}const tool=tools.find(t=>t.name===call.name);if(!tool){auditUnexecuted("unknown_tool","\u30E2\u30C7\u30EB\u306B\u6E21\u3057\u3066\u3044\u306A\u3044\u30C4\u30FC\u30EB\u540D\uFF08\u5E38\u99D0\u30BB\u30C3\u30C8\u306B\u7121\u3044\uFF09");return{content:`Unknown tool: ${call.name}. Available tools: ${tools.
107
+ map(t=>t.name).join(", ")||"(none)"}`,isError:true,summary:`${call.name} \xB7 \u672A\u77E5\u306E\u30C4\u30FC\u30EB`}}if(!request.execute){return{content:`Tool ${call.name} cannot run: this session has no tool execution context.`,isError:true,summary:`${call.name} \xB7 \u5B9F\u884C\u74B0\u5883\u306A\u3057`}}return executeTool(tool,call.input,{...request.execute,ctx:{...request.execute.ctx,...request.signal?{signal:request.signal}:{}}},call.id)}function turnMaxTokens(requested,spec){let limit=requested;
108
+ if(spec.maxOutputTokens!==null)limit=Math.min(limit,spec.maxOutputTokens);if(spec.contextWindow!==null)limit=Math.min(limit,Math.floor(spec.contextWindow/4));return Math.max(1,limit)}function add(target,source){target.inputTokens+=source.inputTokens;target.cacheReadTokens+=source.cacheReadTokens;target.cacheWriteTokens+=source.cacheWriteTokens;target.outputTokens+=source.outputTokens}import fs3 from"fs";import path4 from"path";var KNOWN_KEYS=new Set(["id","label","color","description","tools","permissions"]);var NOT_YET_KEYS=new Map([["commands","commands \u306F\u30E2\u30FC\u30C9\u5B9A\u7FA9\u3067\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093\uFF08\u30B3\u30DE\u30F3\u30C9\u3092\u51FA\u3059\u30E2\u30FC\u30C9\u306F\u3001\u30B3\u30DE\u30F3\u30C9\u5B9A\u7FA9 .twp/commands/*.md \u306E front-matter \u306E mode: \u3067\u6307\u5B9A\u3057\u307E\u3059\uFF09"]]);var DECISIONS=new Set(["allow","ask","deny"]);var COLORS=new Set(
108
109
  ["black","red","green","yellow","blue","magenta","cyan","white","gray","grey","blackBright","redBright","greenBright","yellowBright","blueBright","magentaBright","cyanBright","whiteBright"]);var RESERVED_PERMISSION_KEYS=new Set(["__proto__","constructor","prototype"]);var STRICTNESS={allow:0,ask:1,deny:2};var LABEL_MAX=24;var PROMPT_MAX_BYTES=8192;var FILE_COUNT_MAX=32;var FILE_BYTES_MAX=256*1024;function parseFrontMatter(text){const normalized=text.replace(/^\uFEFF/,"").replace(/\r\n/g,"\n");const lines=normalized.
109
110
  split("\n");let i=0;while(i<lines.length&&(lines[i]??"").trim()==="")i+=1;if((lines[i]??"").trim()!=="---")return null;i+=1;const data=new Map;const warnings=[];let currentKey=null;let list=null;let map=null;let closed=false;let skipBlock=false;const flush=()=>{if(currentKey===null)return;if(list!==null)data.set(currentKey,list);else if(map!==null)data.set(currentKey,map);else data.set(currentKey,"");currentKey=null;list=null;map=null};for(;i<lines.length;i+=1){const raw=lines[i]??"";const trimmed=raw.
110
111
  trim();if(trimmed==="---"||trimmed==="..."){i+=1;closed=true;break}if(trimmed===""||trimmed.startsWith("#"))continue;const indented=/^\s/.test(raw);const isListItem=trimmed.startsWith("- ");if(skipBlock){if(indented||isListItem)continue;skipBlock=false}if((indented||isListItem)&&currentKey!==null){if(isListItem){if(map!==null){warnings.push(`${currentKey}: \u30EA\u30B9\u30C8\u3068\u30DE\u30C3\u30D7\u304C\u6DF7\u5728\u3057\u3066\u3044\u307E\u3059\uFF08\u3053\u306E\u884C\u306F\u7121\u8996\u3057\u307E\u3059\uFF09: ${trimmed}`);
@@ -0,0 +1,46 @@
1
+ import { createRequire as __twpCreateRequire } from 'node:module';
2
+ const require = __twpCreateRequire(import.meta.url);
3
+ import{isTrustworthyCacheFile,writePrivateFileAtomic}from"./chunk-D233KKXW.js";import{AuthSession,loadCredentials,withFileLock}from"./chunk-XNLIEUAW.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import{parseVersionCore}from"./chunk-DXXFUNYN.js";import{effectiveApiUrl,effectiveRelayUrl,resolveConfiguredModel,resolveProfile}from"./chunk-EDF4U5BT.js";import{ensureTwpHome,twpHomeDir}from"./chunk-RZVI6PMW.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import fs from"fs";import path from"path";var MODELS=[{id:"claude-opus-5",label:"Claude Opus 5",note:"\u6700\u3082\u9AD8\u6027\u80FD\u3002\u65E2\u5B9A"},{id:"claude-sonnet-5",label:"Claude Sonnet 5",note:"\u30D0\u30E9\u30F3\u30B9\u578B"},{id:"claude-haiku-4-5",label:"Claude Haiku 4.5",note:"\u9AD8\u901F\u30FB\u4F4E\u30B3\u30B9\u30C8"}];var DEFAULT_MODEL="claude-opus-5";function isSafeModelId(id){return/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/.test(id)}function modelLabel(id){const known=MODELS.find(m=>m.id===id);if(known)return known.label;
4
+ return prettifyClaudeId(id)??stripTerminalControls(id).slice(0,128)}function prettifyClaudeId(id){const match=/^claude-([a-z]+)((?:-\d+)+)$/.exec(id);if(!match)return null;const family=match[1]??"";const version=(match[2]??"").replace(/^-/,"").split("-").join(".");return`Claude ${family.charAt(0).toUpperCase()}${family.slice(1)} ${version}`}function modelNote(id){return MODELS.find(m=>m.id===id)?.note??""}function toModelInfos(ids){return ids.map(id=>({id,label:modelLabel(id),note:modelNote(id)}))}var anthropicAdapter={protocol:"anthropic",streamPath:"/api/cli/v1/messages/stream",toRequestBody,decode};function toRequestBody(request){const explicitCache=request.promptCache==="explicit";const messages=request.messages.map((m,i)=>({role:m.role,content:m.content.map((block,j)=>{const isLastBlockOfLastMessage=i===request.messages.length-1&&j===m.content.length-1;return explicitCache&&isLastBlockOfLastMessage&&m.role==="user"?{...block,cache_control:{type:"ephemeral"}}:block})}));return{model:request.
5
+ model,max_tokens:request.maxTokens,...request.system!==void 0?{system:request.system}:{},...request.tools&&request.tools.length>0?{tools:request.tools}:{},messages}}function decode(ev){const parsed=safeJson(ev.data);if(!parsed)return[];const type=typeof parsed["type"]==="string"?parsed["type"]:ev.event;if(type==="message_start"){const message=parsed["message"];return usageEvent(message?.usage)}if(type==="content_block_start"){const block=parsed["content_block"];const index=numberOr(parsed["index"],
6
+ -1);if(block?.type==="tool_use"&&typeof block.id==="string"&&typeof block.name==="string"){const seeded=block.input;const initial=typeof seeded==="object"&&seeded!==null&&!Array.isArray(seeded)?JSON.stringify(seeded):"";return[{kind:"tool_start",index,id:block.id,name:block.name,initialJson:initial==="{}"?"":initial}]}return[]}if(type==="content_block_delta"){const delta=parsed["delta"];if(delta?.type==="text_delta"&&typeof delta.text==="string"&&delta.text!==""){return[{kind:"text",delta:delta.
7
+ text}]}if(delta?.type==="input_json_delta"&&typeof delta.partial_json==="string"){return[{kind:"tool_delta",index:numberOr(parsed["index"],-1),json:delta.partial_json}]}return[]}if(type==="content_block_stop"){return[{kind:"tool_end",index:numberOr(parsed["index"],-1)}]}if(type==="message_delta"){const out=usageEvent(parsed["usage"]);const delta=parsed["delta"];if(typeof delta?.stop_reason==="string")out.push({kind:"stop",reason:delta.stop_reason});return out}if(type==="error"){const err=parsed["\
8
+ error"];return[{kind:"error",message:typeof err?.message==="string"?err.message:"\u30B9\u30C8\u30EA\u30FC\u30E0\u304C\u4E2D\u65AD\u3055\u308C\u307E\u3057\u305F"}]}return[]}function usageEvent(source){if(typeof source!=="object"||source===null)return[];const raw=source;const usage={};const pick=(key,field)=>{const v=raw[key];if(typeof v==="number"&&Number.isFinite(v))usage[field]=v};pick("input_tokens","inputTokens");pick("cache_read_input_tokens","cacheReadTokens");pick("cache_creation_input_tok\
9
+ ens","cacheWriteTokens");pick("output_tokens","outputTokens");return[{kind:"usage",usage}]}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}}var ADAPTERS={anthropic:anthropicAdapter};var PROTOCOLS_HEADER="X-TWP-CLI-Protocols";function supportedProtocols(){return Object.keys(ADAPTERS)}function isModelProtocol(value){return value==="anthropic"||value==="openai-chat"||value==="gemini"}function adapterFor(protocol){return ADAPTERS[protocol]??null}var DEFAULT_PROVIDER="anthropic";function effectiveModelSpec(spec){return{provider:spec?.provider??DEFAULT_PROVIDER,protocol:spec?.protocol??"anthropic",contextWindow:spec?.contextWindow??null,maxOutputTokens:spec?.maxOutputTokens??null,tools:spec?.capabilities?.tools??true,promptCache:spec?.capabilities?.promptCache??"explicit"}}var PROVIDER_PATTERN=/^[a-z0-9-]{1,32}$/;function positiveInt(value){return typeof value==="number"&&Number.isInteger(value)&&value>0?value:void 0}function parseModelSpec(id,raw){
10
+ const spec={id};if(typeof raw!=="object"||raw===null)return spec;const r=raw;if(typeof r["provider"]==="string"&&PROVIDER_PATTERN.test(r["provider"]))spec.provider=r["provider"];if(isModelProtocol(r["protocol"]))spec.protocol=r["protocol"];const contextWindow=positiveInt(r["context_window"]);if(contextWindow!==void 0)spec.contextWindow=contextWindow;const maxOutputTokens=positiveInt(r["max_output_tokens"]);if(maxOutputTokens!==void 0)spec.maxOutputTokens=maxOutputTokens;const caps=r["capabilitie\
11
+ s"];if(typeof caps==="object"&&caps!==null){const c=caps;const capabilities={};if(typeof c["tools"]==="boolean")capabilities.tools=c["tools"];const cache=c["prompt_cache"];if(cache==="explicit"||cache==="automatic"||cache==="none")capabilities.promptCache=cache;if(Object.keys(capabilities).length>0)spec.capabilities=capabilities}return spec}function toWireSpec(spec){return{id:spec.id,...spec.provider!==void 0?{provider:spec.provider}:{},...spec.protocol!==void 0?{protocol:spec.protocol}:{},...spec.
12
+ contextWindow!==void 0?{context_window:spec.contextWindow}:{},...spec.maxOutputTokens!==void 0?{max_output_tokens:spec.maxOutputTokens}:{},...spec.capabilities!==void 0?{capabilities:{...spec.capabilities.tools!==void 0?{tools:spec.capabilities.tools}:{},...spec.capabilities.promptCache!==void 0?{prompt_cache:spec.capabilities.promptCache}:{}}}:{}}}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(fs.readFileSync(file,"utf8"));if(!parsed||typeof parsed!==
13
+ "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.
14
+ 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;const specById=new Map;if(Array.isArray(parsed.specs)){for(const raw of parsed.specs){const id=typeof raw===
15
+ "object"&&raw!==null?raw.id:void 0;if(typeof id==="string"&&ids.includes(id))specById.set(id,raw)}}return{ids,models:ids.map(id=>parseModelSpec(id,specById.get(id))),source:"cache",fetchedAt:typeof parsed.fetched_at==="string"?parsed.fetched_at:null,minSupportedVersion:readFloor(parsed)}}catch{return null}}async function saveCatalog(profile,relayUrl,ids,minSupportedVersion,env=process.env,now=Date.now,specs=[]){try{ensureTwpHome(env);await withFileLock(modelCacheLockPath(env),async()=>{let file;
16
+ 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,specs:specs.map(toWireSpec),min_supported_version:minSupportedVersion};writePrivateFileAtomic(modelCachePath(env),`${JSON.stringify({version:1,entries},null,2)}
17
+ `)})}catch{}}async function loadCatalog(client,profile,relayUrl,env=process.env){try{const{ids,models,minSupportedVersion}=await client.fetchModelCatalog();await saveCatalog(profile,relayUrl,ids,minSupportedVersion,env,Date.now,models);return{ids,models,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||
18
+ configured==="")return{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{
19
+ model:fallback,warning:`${configured} \u306F\u5229\u7528\u3067\u304D\u306A\u3044\u305F\u3081 ${fallback} \u3092\u4F7F\u3044\u307E\u3059\uFF08\u5229\u7528\u53EF\u80FD: ${catalog.ids.join(" / ")}\uFF09`}}function specFor(catalog,id){return effectiveModelSpec(catalog.models?.find(m=>m.id===id))}function classifyModelSwitch(catalog,from,to){if(from===to)return"same";return specFor(catalog,from).provider===specFor(catalog,to).provider?"keep":"new_conversation"}var MAX_EVENT_BYTES=8*1024*1024;var SseBufferOverflowError=class extends Error{constructor(limit){super(`SSE \u306E\u30A4\u30D9\u30F3\u30C8\u5883\u754C\uFF08\u7A7A\u884C\uFF09\u304C ${limit} \u30D0\u30A4\u30C8\u4EE5\u5185\u306B\u73FE\u308C\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u4E0A\u6D41\u306E\u5FDC\u7B54\u304C\u58CA\u308C\u3066\u3044\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002`)}};var SseParser=class{constructor(maxEventBytes=MAX_EVENT_BYTES){this.maxEventBytes=maxEventBytes}maxEventBytes;buffer="";pendingCr=false;push(chunk){
20
+ let pending=this.pendingCr?`\r${chunk}`:chunk;this.pendingCr=pending.endsWith("\r");if(this.pendingCr)pending=pending.slice(0,-1);this.buffer+=pending.replace(/\r\n/g,"\n").replace(/\r/g,"\n");if(this.buffer.length>this.maxEventBytes){this.buffer="";this.pendingCr=false;throw new SseBufferOverflowError(this.maxEventBytes)}const events=[];for(;;){const boundary=this.buffer.indexOf("\n\n");if(boundary===-1)break;const block=this.buffer.slice(0,boundary);this.buffer=this.buffer.slice(boundary+2);const parsed=parseBlock(
21
+ block);if(parsed)events.push(parsed)}return events}flush(){const rest=(this.pendingCr?`${this.buffer}
22
+ `:this.buffer).trim();this.buffer="";this.pendingCr=false;if(rest==="")return[];const parsed=parseBlock(rest);return parsed?[parsed]:[]}};function parseBlock(block){let event="message";const data=[];for(const line of block.split("\n")){if(line.startsWith(":"))continue;const colon=line.indexOf(":");const field=colon===-1?line:line.slice(0,colon);let value=colon===-1?"":line.slice(colon+1);if(value.startsWith(" "))value=value.slice(1);if(field==="event")event=value;else if(field==="data")data.push(
23
+ value)}if(data.length===0)return null;return{event,data:data.join("\n")}}function blockLength(block){if(block.type==="text")return block.text.length;if(block.type==="tool_result")return block.content.length;return block.name.length+JSON.stringify(block.input).length}function emptyUsage(){return{inputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,outputTokens:0}}var RelayError=class extends Error{constructor(kind,message,status){super(message);this.kind=kind;this.status=status;this.name="RelayError"}kind;status};var MODELS_TIMEOUT_MS=5e3;var RelayClient=class{constructor(relayUrl,session,fetchImpl=httpFetch,cliVersion="0.0.0-dev"){this.relayUrl=relayUrl;this.session=session;this.fetchImpl=fetchImpl;this.cliVersion=cliVersion}relayUrl;session;fetchImpl;cliVersion;async fetchModelCatalog(){const res=await this.send("GET","/api/cli/v1/models",void 0,AbortSignal.
24
+ timeout(MODELS_TIMEOUT_MS));const body=await res.json().catch(()=>null);const models=(Array.isArray(body?.models)?body.models:[]).filter(m=>{const id=typeof m==="object"&&m!==null?m.id:void 0;return typeof id==="string"&&isSafeModelId(id)}).map(m=>parseModelSpec(m.id,m));const ids=models.map(m=>m.id);if(ids.length===0){throw new RelayError("upstream","\u30E2\u30C7\u30EB\u4E00\u89A7\u304C\u7A7A\u3067\u3057\u305F\uFF08\u30EA\u30EC\u30FC\u306E\u8A2D\u5B9A\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\uFF09")}
25
+ const floor=body?.min_supported_version;const minSupportedVersion=typeof floor==="string"&&parseVersionCore(floor)!==null?floor.trim():null;return{ids,models,minSupportedVersion}}async stream(request,hooks){const protocol=request.protocol??"anthropic";const adapter=adapterFor(protocol);if(!adapter){throw new RelayError("validation",`\u30E2\u30C7\u30EB ${request.model} \u306F ${protocol} \u30D7\u30ED\u30C8\u30B3\u30EB\u306E\u305F\u3081\u3001\u3053\u306E\u7248\u306E twp \u3067\u306F\u5229\u7528\u3067\u304D\u307E\u305B\u3093\uFF08twp \u3092\u66F4\u65B0\u3057\u3066\u304F\u3060\u3055\u3044\uFF09`)}
26
+ let res;try{res=await this.send("POST",adapter.streamPath,adapter.toRequestBody({model:request.model,maxTokens:request.maxTokens,...request.system!==void 0?{system:request.system}:{},messages:request.messages,...request.tools!==void 0?{tools:request.tools}:{},promptCache:request.promptCache??"explicit"}),hooks.signal)}catch(err){if(isAbortError(err)||hooks.signal?.aborted===true){return{text:"",usage:emptyUsage(),toolUses:[],stopReason:null,aborted:true,upstreamError:null}}throw err}const body=res.
27
+ body;if(!body){throw new RelayError("upstream","\u30EA\u30EC\u30FC\u304C\u5FDC\u7B54\u672C\u6587\u3092\u8FD4\u3057\u307E\u305B\u3093\u3067\u3057\u305F")}const parser=new SseParser;const decoder=new TextDecoder;const usage=emptyUsage();let text="";let stopReason=null;let streamError=null;const reader=body.getReader();const building=new Map;const toolUses=[];const finalizeBlock=index=>{const pending=building.get(index);if(!pending)return;building.delete(index);const input=pending.json.trim()===""?
28
+ {}:safeJson2(pending.json);if(input===null){streamError=`\u30C4\u30FC\u30EB ${pending.name} \u306E\u5F15\u6570\u3092\u89E3\u91C8\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F`;return}toolUses.push({type:"tool_use",id:pending.id,name:pending.name,input})};const apply=ev=>{switch(ev.kind){case"usage":Object.assign(usage,ev.usage);return;case"text":text+=ev.delta;hooks.onTextDelta(ev.delta);return;case"tool_start":building.set(ev.index,{id:ev.id,name:ev.name,json:ev.initialJson});return;case"tool\
29
+ _delta":{const pending=building.get(ev.index);if(pending)pending.json+=ev.json;return}case"tool_end":finalizeBlock(ev.index);return;case"stop":stopReason=ev.reason;return;case"error":streamError=ev.message;return}};const handle=events=>{for(const ev of events){for(const neutral of adapter.decode(ev))apply(neutral)}};const onAbort=()=>{void reader.cancel().catch(()=>void 0)};if(hooks.signal){if(hooks.signal.aborted)onAbort();else hooks.signal.addEventListener("abort",onAbort,{once:true})}try{for(;;){
30
+ const{done,value}=await reader.read();if(done)break;handle(parser.push(decoder.decode(value,{stream:true})))}handle(parser.flush())}catch(err){if(err instanceof SseBufferOverflowError){streamError=err.message}else if(!isAbortError(err)&&hooks.signal?.aborted!==true){throw new RelayError("network",`\u30B9\u30C8\u30EA\u30FC\u30E0\u304C\u5207\u65AD\u3055\u308C\u307E\u3057\u305F: ${errorMessage(err)}`)}}finally{hooks.signal?.removeEventListener("abort",onAbort);void reader.cancel().catch(()=>void 0)}
31
+ for(const index of[...building.keys()])finalizeBlock(index);return{text,usage,toolUses,stopReason,aborted:hooks.signal?.aborted===true,upstreamError:streamError===null?null:stripTerminalControls(streamError)}}async send(method,path2,body,signal){let token;try{token=await this.session.getAccessToken()}catch(err){throw new RelayError("not_logged_in",errorMessage(err))}let res=await this.fetchOrThrow(method,path2,token,body,signal);if(res.status===401){try{token=await this.session.refresh(token)}catch(err){
32
+ throw new RelayError("not_logged_in",errorMessage(err))}res=await this.fetchOrThrow(method,path2,token,body,signal)}if(!res.ok)throw await toRelayError(res);return res}async fetchOrThrow(method,path2,token,body,signal){try{return await this.fetchImpl(`${this.relayUrl}${path2}`,{method,headers:{Accept:body===void 0?"application/json":"text/event-stream, application/json",Authorization:`Bearer ${token}`,"User-Agent":`twp-cli/${this.cliVersion}`,[PROTOCOLS_HEADER]:supportedProtocols().join(","),...body!==
33
+ void 0?{"Content-Type":"application/json"}:{}},...body!==void 0?{body:JSON.stringify(body)}:{},...signal?{signal}:{}})}catch(err){if(isAbortError(err))throw err;throw new RelayError("network",`\u30E2\u30C7\u30EB\u53D6\u6B21\u30B5\u30FC\u30D0\u306B\u63A5\u7D9A\u3067\u304D\u307E\u305B\u3093\uFF08${this.relayUrl}\uFF09: ${errorMessage(err)}`)}}};async function toRelayError(res){const body=await res.json().catch(()=>null);const nested=typeof body?.error==="object"&&body.error!==null?body.error:void 0;
34
+ const message=stripTerminalControls(body?.message??nested?.message??`HTTP ${res.status}`);if(res.status===401){return new RelayError("unauthorized","\u30E2\u30C7\u30EB\u53D6\u6B21\u306E\u8A8D\u8A3C\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002`twp login`\uFF08\u30D6\u30E9\u30A6\u30B6\u59D4\u8B72\uFF09\u307E\u305F\u306F `twp login --password` \u3067\u30ED\u30B0\u30A4\u30F3\u3057\u76F4\u3057\u3066\u304F\u3060\u3055\u3044\uFF08`twp login --token` \u3067\u4FDD\u5B58\u3057\u305F\u901A\u5E38\u30C8\u30FC\u30AF\u30F3\u306F\u30E2\u30C7\u30EB\u53D6\u6B21\u306B\u306F\u4F7F\u3048\u307E\u305B\u3093\uFF09\u3002",
35
+ 401)}if(res.status===403){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}
36
+ \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 safeJson2(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==="AbortError"||err.name==="Timeo\
37
+ utError")}function errorMessage(err){return err instanceof Error?err.message:String(err)}var DEFAULT_CONTEXT_WINDOW_TOKENS=2e5;var DEFAULT_MAX_TOKENS=8192;var TRIM_THRESHOLD=.8;var ContextManager=class{constructor(defaultContextWindowTokens=DEFAULT_CONTEXT_WINDOW_TOKENS){this.defaultContextWindowTokens=defaultContextWindowTokens;this.contextWindowTokens=defaultContextWindowTokens}defaultContextWindowTokens;messages=[];totals=emptyUsage();turns=0;lastPromptTokens=0;pendingChars=0;droppedMessages=0;contextWindowTokens;setContextWindow(tokens){this.contextWindowTokens=tokens!==null&&tokens>
38
+ 0?tokens:this.defaultContextWindowTokens}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.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});
39
+ 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){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}]});
40
+ this.pendingChars+=assistantText.length;this.turns+=1;return true}applyUsage(usage){this.totals={inputTokens:this.totals.inputTokens+usage.inputTokens,cacheReadTokens:this.totals.cacheReadTokens+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.
41
+ 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=0;this.pendingChars=0;this.droppedMessages=0}trimToFit(maxTokens=DEFAULT_MAX_TOKENS){const limit=Math.max(1,Math.floor((this.contextWindowTokens-maxTokens)*TRIM_THRESHOLD));let dropped=0;while(this.estimatedPromptTokens()>limit&&this.messages.length>1){const removed=this.messages.shift();if(!removed)break;
42
+ const removedTokens=Math.ceil(lengthOf(removed)/4);this.lastPromptTokens=Math.max(0,this.lastPromptTokens-removedTokens);dropped+=1}while(this.messages.length>0){const head2=this.messages[0];if(!head2)break;const orphanResult=hasToolResult(head2)&&this.messages.length>1;if(head2.role!=="assistant"&&!orphanResult)break;this.messages.shift();this.lastPromptTokens=Math.max(0,this.lastPromptTokens-Math.ceil(lengthOf(head2)/4));dropped+=1}const head=this.messages[0];if(head&&hasToolResult(head)){const before=lengthOf(
43
+ head);const kept=head.content.filter(block=>block.type!=="tool_result");head.content=kept.length>0?kept:[{type:"text",text:"\uFF08\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u4E0A\u9650\u306E\u305F\u3081\u3001\u76F4\u524D\u306E\u30C4\u30FC\u30EB\u5B9F\u884C\u7D50\u679C\u306F\u5C65\u6B74\u304B\u3089\u5916\u308C\u307E\u3057\u305F\uFF09"}];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+=
44
+ 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*100);return{totals:{...this.totals},turns:this.turns,lastPromptTokens:this.lastPromptTokens,remainingPercent:Math.max(0,Math.min(100,remaining)),droppedMessages:this.
45
+ 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.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,
46
+ 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),loadCachedCatalog:()=>loadCachedCatalog(profile.name,relayUrl,env)}}export{emptyUsage,DEFAULT_MAX_TOKENS,modelLabel,toModelInfos,effectiveModelSpec,builtinCatalog,loadCachedCatalog,pickModel,specFor,classifyModelSwitch,RelayError,createRuntime};
@@ -3,9 +3,9 @@ const require = __twpCreateRequire(import.meta.url);
3
3
  var LOADERS={agent:async()=>(await import("./agent-WTDLGRNM.js")).agentDomain,"agent-loop":async()=>(await import("./agent-loop-ZGHJGHFQ.js")).agentLoopDomain,"ai-review-reason":async()=>(await import("./sales-ai-review-L5VW3DU3.js")).aiReviewReasonDomain,analysis:async()=>(await import("./analysis-H52FJIFO.js")).analysisDomain,announcement:async()=>(await import("./announcement-RTTVGW4K.js")).announcementDomain,attendance:async()=>(await import("./attendance-correct-OLWRCDP4.js")).attendanceDomainWithRecords,
4
4
  backlog:async()=>(await import("./backlog-HDDV2NTC.js")).backlogDomain,budget:async()=>(await import("./budget-T246BG2P.js")).budgetDomain,"business-hours":async()=>(await import("./business-hours-I4X6YQS3.js")).businessHoursDomain,"business-place":async()=>(await import("./sales-master-BQML5IJT.js")).businessPlaceDomain,company:async()=>(await import("./company-2CRWKBJL.js")).companyDomain,contract:async()=>(await import("./contract-73RVPBYM.js")).contractDomain,customer:async()=>(await import("./company-2CRWKBJL.js")).
5
5
  customerDomain,department:async()=>(await import("./department-GPVHVFFP.js")).departmentDomain,deposit:async()=>(await import("./deposit-3I3NV556.js")).depositDomain,estimate:async()=>(await import("./estimate-NLKTWCYI.js")).estimateDomain,evaluation:async()=>(await import("./evaluation-VP7OFTBS.js")).evaluationDomain,expense:async()=>(await import("./expense-O2O4623X.js")).expenseDomain,"fiscal-year":async()=>(await import("./fiscal-year-ZTCSF46U.js")).fiscalYearDomain,holiday:async()=>(await import("./holiday-WDI4CSNL.js")).
6
- holidayDomain,"goal-sheet":async()=>(await import("./evaluation-VP7OFTBS.js")).goalSheetDomain,inquiry:async()=>(await import("./inquiry-4Q4BRYM3.js")).inquiryDomain,invoice:async()=>(await import("./invoice-BXSI6SMA.js")).invoiceDomain,"job-title":async()=>(await import("./job-title-NCFHCA4M.js")).jobTitleDomain,knowledge:async()=>(await import("./domain-knowledge-5SCZLCPF.js")).knowledgeDomain,leave:async()=>(await import("./leave-W4GHXMSE.js")).leaveDomain,license:async()=>(await import("./license-XSWDXSJE.js")).
7
- licenseDomain,media:async()=>(await import("./media-D7BZTPXD.js")).mediaDomain,meeting:async()=>(await import("./knowledge-TCADQEPU.js")).meetingDomain,note:async()=>(await import("./knowledge-TCADQEPU.js")).noteDomain,notification:async()=>(await import("./notification-WP7CH734.js")).notificationDomain,onedrive:async()=>(await import("./onedrive-KWVOUGG6.js")).onedriveDomain,outlook:async()=>(await import("./outlook-GYRF5TXA.js")).outlookDomain,payee:async()=>(await import("./sales-master-BQML5IJT.js")).
8
- payeeDomain,position:async()=>(await import("./position-H3NSDVKQ.js")).positionDomain,project:async()=>(await import("./project-HGUUMTEE.js")).projectDomain,prospect:async()=>(await import("./prospect-QY3NYP2A.js")).prospectDomain,purchase:async()=>(await import("./purchase-7XCGCQ2G.js")).purchaseDomain,qualification:async()=>(await import("./skill-4TSTVUXY.js")).qualificationDomain,receivable:async()=>(await import("./receivable-GW5WCVJ7.js")).receivableDomain,redmine:async()=>(await import("./redmine-644RTL42.js")).
6
+ holidayDomain,"goal-sheet":async()=>(await import("./evaluation-VP7OFTBS.js")).goalSheetDomain,inquiry:async()=>(await import("./inquiry-4Q4BRYM3.js")).inquiryDomain,invoice:async()=>(await import("./invoice-BXSI6SMA.js")).invoiceDomain,"job-title":async()=>(await import("./job-title-NCFHCA4M.js")).jobTitleDomain,knowledge:async()=>(await import("./domain-knowledge-SZZCV6IO.js")).knowledgeDomain,leave:async()=>(await import("./leave-W4GHXMSE.js")).leaveDomain,license:async()=>(await import("./license-XSWDXSJE.js")).
7
+ licenseDomain,media:async()=>(await import("./media-KWSFHGAQ.js")).mediaDomain,meeting:async()=>(await import("./knowledge-TCADQEPU.js")).meetingDomain,note:async()=>(await import("./knowledge-TCADQEPU.js")).noteDomain,notification:async()=>(await import("./notification-WP7CH734.js")).notificationDomain,onedrive:async()=>(await import("./onedrive-KWVOUGG6.js")).onedriveDomain,outlook:async()=>(await import("./outlook-GYRF5TXA.js")).outlookDomain,payee:async()=>(await import("./sales-master-BQML5IJT.js")).
8
+ payeeDomain,position:async()=>(await import("./position-H3NSDVKQ.js")).positionDomain,project:async()=>(await import("./project-UDHRIZZN.js")).projectDomain,prospect:async()=>(await import("./prospect-QY3NYP2A.js")).prospectDomain,purchase:async()=>(await import("./purchase-7XCGCQ2G.js")).purchaseDomain,qualification:async()=>(await import("./skill-4TSTVUXY.js")).qualificationDomain,receivable:async()=>(await import("./receivable-GW5WCVJ7.js")).receivableDomain,redmine:async()=>(await import("./redmine-644RTL42.js")).
9
9
  redmineDomain,report:async()=>(await import("./report-P74LSHTE.js")).reportDomain,"rounding-setting":async()=>(await import("./sales-numbering-OW4O6WH6.js")).roundingSettingDomain,"seal-impression":async()=>(await import("./sales-master-BQML5IJT.js")).sealImpressionDomain,search:async()=>(await import("./search-BLMSVPIL.js")).searchDomain,segment:async()=>(await import("./segment-G4IPD43F.js")).segmentDomain,shift:async()=>(await import("./attendance-lists-TBUZCRKK.js")).shiftDomain,skill:async()=>(await import("./skill-4TSTVUXY.js")).
10
- skillDomain,"staffing-board":async()=>(await import("./staffing-board-MQREMSVJ.js")).staffingBoardDomain,storage:async()=>(await import("./storage-AQDCEBDJ.js")).storageDomain,"supplier-payment":async()=>(await import("./supplier-payment-KRLYWEKY.js")).supplierPaymentDomain,support:async()=>(await import("./support-ITRXFVMK.js")).supportDomain,task:async()=>(await import("./task-AGNMPS4F.js")).taskDomain,teams:async()=>(await import("./teams-MZR3256V.js")).teamsDomain,user:async()=>(await import("./user-U4VHKBLE.js")).
10
+ skillDomain,"staffing-board":async()=>(await import("./staffing-board-MQREMSVJ.js")).staffingBoardDomain,storage:async()=>(await import("./storage-AQDCEBDJ.js")).storageDomain,"supplier-payment":async()=>(await import("./supplier-payment-KRLYWEKY.js")).supplierPaymentDomain,support:async()=>(await import("./support-ITRXFVMK.js")).supportDomain,task:async()=>(await import("./task-AGNMPS4F.js")).taskDomain,teams:async()=>(await import("./teams-MZR3256V.js")).teamsDomain,user:async()=>(await import("./user-3IHEIFAT.js")).
11
11
  userDomain,"user-contract-type":async()=>(await import("./user-contract-type-HDA5TITL.js")).userContractTypeDomain,wiki:async()=>(await import("./knowledge-TCADQEPU.js")).wikiDomain,workchange:async()=>(await import("./attendance-lists-TBUZCRKK.js")).workchangeDomain,"worker-agent":async()=>(await import("./worker-agent-52PXQO4N.js")).workerAgentDomain,workflow:async()=>(await import("./workflow-4NC2C4TX.js")).workflowDomain};async function loadDomain(name){return LOADERS[name]()}export{loadDomain};
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-IVFSEXD3.js";import"./chunk-2LOT54OO.js";import"./chunk-MLRBDF44.js";import"./chunk-VERYHAWV.js";import"./chunk-QQRJLH6B.js";import"./chunk-VSJBJXZO.js";var VERSION=true?"0.79.0":"0.0.0-dev";var HELP=`twp ${VERSION} \u2014 TWP CLI
4
+ import{GLOBAL_OPTIONS_HELP}from"./chunk-PECIBNFD.js";import{parseArgv}from"./chunk-IVFSEXD3.js";import"./chunk-2LOT54OO.js";import"./chunk-MLRBDF44.js";import"./chunk-VERYHAWV.js";import"./chunk-QQRJLH6B.js";import"./chunk-VSJBJXZO.js";var VERSION=true?"0.81.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
@@ -971,15 +971,15 @@ import{GLOBAL_OPTIONS_HELP}from"./chunk-PECIBNFD.js";import{parseArgv}from"./chu
971
971
  twp knowledge doc list <KB>
972
972
  KB \u306E\u8A18\u4E8B\u3092\u4E00\u89A7\u3059\u308B\uFF08--prefix\u30FB--depth\uFF09
973
973
  twp knowledge doc get <KB> <\u30D1\u30B9>
974
- \u8A18\u4E8B\u3092\u8868\u793A\u3059\u308B\uFF08--output text \u3067\u672C\u6587\u306E Markdown \u3092\u8AAD\u3080\uFF09
974
+ \u8A18\u4E8B\u3092\u8868\u793A\u3059\u308B\uFF08--output text \u3067\u672C\u6587\u306E Markdown \u3092\u8AAD\u3080\u30FB\u7248 revision \u3082\u51FA\u3059\uFF09
975
975
  twp knowledge doc create <KB> <\u30D1\u30B9>
976
976
  \u8A18\u4E8B\u3092\u4F5C\u6210\u3059\u308B\uFF08\u672C\u6587\u306F --content-file \u306E\u30D5\u30A1\u30A4\u30EB\u304B\u3089\uFF09
977
977
  twp knowledge doc update <KB> <\u30D1\u30B9>
978
- \u8A18\u4E8B\u306E\u4EF6\u540D\u30FB\u672C\u6587\u30FB\u8981\u7D04\u30FB\u30BF\u30B0\u3092\u66F4\u65B0\u3059\u308B
978
+ \u8A18\u4E8B\u306E\u4EF6\u540D\u30FB\u672C\u6587\u30FB\u8981\u7D04\u30FB\u30BF\u30B0\u3092\u66F4\u65B0\u3059\u308B\uFF08--if-revision \u3067\u7248\u3092\u7167\u5408\uFF09
979
979
  twp knowledge doc move <KB> <\u79FB\u52D5\u5143> <\u79FB\u52D5\u5148>
980
- \u8A18\u4E8B\u306E\u30D1\u30B9\u3092\u5909\u3048\u308B\uFF08\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u5909\u66F4\u30FB\u30EA\u30CD\u30FC\u30E0\uFF09
980
+ \u8A18\u4E8B\u306E\u30D1\u30B9\u3092\u5909\u3048\u308B\uFF08\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u5909\u66F4\u30FB\u30EA\u30CD\u30FC\u30E0\u30FB--if-revision \u3067\u7248\u3092\u7167\u5408\uFF09
981
981
  twp knowledge doc delete <KB> <\u30D1\u30B9>
982
- \u8A18\u4E8B\u3092\u524A\u9664\u3059\u308B\uFF08--yes \u304C\u8981\u308B\uFF09
982
+ \u8A18\u4E8B\u3092\u524A\u9664\u3059\u308B\uFF08--yes \u304C\u8981\u308B\u30FB--if-revision \u3067\u7248\u3092\u7167\u5408\uFF09
983
983
  twp estimate list \u898B\u7A4D\u3092\u4E00\u89A7\u3059\u308B\uFF08--status\u30FB--customer\u30FB--assignee\u30FB--from/--to\uFF09
984
984
  twp estimate get <\u898B\u7A4DID>
985
985
  \u898B\u7A4D1\u4EF6\u306E\u8A73\u7D30\u3092\u8868\u793A\u3059\u308B
@@ -1391,16 +1391,16 @@ TUI \u5185:
1391
1391
  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
1392
1392
  \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
1393
1393
  `;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
1394
- `);process.exit(1)}ignoreEpipe(process.stdout);ignoreEpipe(process.stderr);if(process.env["TWP_AUTO_UPDATE_WORKER"]==="1"){const{runAutoUpdateWorker}=await import("./auto-update-worker-6K24JYLQ.js");await runAutoUpdateWorker().catch(()=>void 0);return}const[first,...rest]=process.argv.slice(2);if(first==="__complete"||first==="completion"){const completion=await import("./completion-C6ZQCDT2.js");if(first==="completion"){process.exitCode=completion.runCompletion(rest,process.stdout,process.stderr);return}
1395
- const[{loadDomain},{loadUserConfig}]=await Promise.all([import("./registry-TFHSCQK3.js"),import("./config-XYWRBIC6.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-FXXQHBV5.js");autoUpdate2.registerRunning();autoUpdate2.onStartup(VERSION);const{runConfigure}=await import("./configure-3JID6MQ5.js");process.exitCode=
1394
+ `);process.exit(1)}ignoreEpipe(process.stdout);ignoreEpipe(process.stderr);if(process.env["TWP_AUTO_UPDATE_WORKER"]==="1"){const{runAutoUpdateWorker}=await import("./auto-update-worker-5J4XXQ6J.js");await runAutoUpdateWorker().catch(()=>void 0);return}const[first,...rest]=process.argv.slice(2);if(first==="__complete"||first==="completion"){const completion=await import("./completion-C6ZQCDT2.js");if(first==="completion"){process.exitCode=completion.runCompletion(rest,process.stdout,process.stderr);return}
1395
+ const[{loadDomain},{loadUserConfig}]=await Promise.all([import("./registry-QXXEYQZZ.js"),import("./config-XYWRBIC6.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-FXXQHBV5.js");autoUpdate2.registerRunning();autoUpdate2.onStartup(VERSION);const{runConfigure}=await import("./configure-3JID6MQ5.js");process.exitCode=
1396
1396
  await runConfigure(rest);return}const args=parseArgv(process.argv.slice(2));if(args.command==="version"){process.stdout.write(`${VERSION}
1397
1397
  `);return}if(args.command==="help"){process.stdout.write(HELP);return}if(args.movedCommand!==void 0){const{MOVED_QUEUE_COMMAND_MESSAGE}=await import("./dispatch-HHWTJ3P4.js");process.stderr.write(MOVED_QUEUE_COMMAND_MESSAGE);process.exitCode=2;return}if(args.unknown.length>0){process.stderr.write(`\u4E0D\u660E\u306A\u5F15\u6570: ${args.unknown.join(" ")}
1398
1398
 
1399
- ${HELP}`);process.exitCode=2;return}const autoUpdate=await import("./auto-update-FXXQHBV5.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-EO7J3QYK.js");process.exitCode=await runDomain({domain:args.domain,...args.operation!==void 0?{operation:args.operation}:
1400
- {},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-Y6J7EAOT.js");process.exitCode=await runApiCommand({argv:args.domainArgv,help:args.domainHelp,globals:{...args.profile!==void 0?{profile:args.
1401
- 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-7GYGZEK3.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-ZIRZVBH6.js");
1402
- 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-UDG7E3X3.js");process.exitCode=await runTaskLoop(
1399
+ ${HELP}`);process.exitCode=2;return}const autoUpdate=await import("./auto-update-FXXQHBV5.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-SUYWHFJS.js");process.exitCode=await runDomain({domain:args.domain,...args.operation!==void 0?{operation:args.operation}:
1400
+ {},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-IKQCTKPH.js");process.exitCode=await runApiCommand({argv:args.domainArgv,help:args.domainHelp,globals:{...args.profile!==void 0?{profile:args.
1401
+ 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-ZKZGDGMC.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-ZIRZVBH6.js");
1402
+ 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-D65LPET6.js");process.exitCode=await runTaskLoop(
1403
1403
  {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.
1404
1404
  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,runnerOp:args.runnerOp,runnerId:args.runnerTargetId,planEmpty:args.planEmpty,planCheck:args.planCheck,yes:args.yes,ais:args.ais,workspace:args.
1405
- workspace,aiConfigFile:args.aiConfigFile,noAiConfigFile:args.noAiConfigFile});return}if(args.command==="print"){const{runOneShot}=await import("./oneshot-EAXT2LLB.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.
1406
- profile}:{},version:VERSION});return}const{startTui}=await import("./app-YVRIMXZY.js");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();
1405
+ workspace,aiConfigFile:args.aiConfigFile,noAiConfigFile:args.noAiConfigFile});return}if(args.command==="print"){const{runOneShot}=await import("./oneshot-TH4PFDWC.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.
1406
+ profile}:{},version:VERSION});return}const{startTui}=await import("./app-JGYZPOH7.js");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();