@tocca-systems/twp-cli 0.85.1 → 0.85.3

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.
@@ -11,6 +11,14 @@
11
11
  `CHANGELOG.md` に残してあります。顧客向けの履歴は public 公開以降を対象とします。
12
12
  -->
13
13
 
14
+ ## 0.85.3
15
+
16
+ モデルの切り替えで、会話の形式が異なるモデルへ移るときは新しい会話から始めるようにしました。
17
+
18
+ ## 0.85.2
19
+
20
+ `twp task-loop` で、待ち合わせ中のタスクが先へ進んだときや待ち合わせ先のタスクが完了したときに、次の計画から作業が再開されるようにしました。
21
+
14
22
  ## 0.85.1
15
23
 
16
24
  大きなコンテキスト窓のモデルで長い会話を続けたとき、送信サイズの上限を超えてエラーになることがある問題を修正しました。上限に近づくと古いやり取りから自動で外します。
@@ -1,7 +1,7 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{RESIDENT_TOKEN_CAP,activateModeFiles,activatePermissionSettings,buildResidentSet,buildSystemPrompt,createAuditLogger,createTwpToolkit,currentBranch,describeAuditLog,describeToolCatalog,displayCwd,executeTool,findProjectTwpSubdir,localTools,lstatOrNull,parseFrontMatter,parseRule,persistProjectAllow,projectPermissionsPath,projectRootFor,readFileTool,residentInputs,resolveGitExecutable,runTurn,secretReason}from"./chunk-IMETEGK7.js";import"./chunk-NZ7WI4RZ.js";import{buildDiffLines,
4
- diffStat}from"./chunk-VRBI2NPI.js";import{require_fuzzysort}from"./chunk-DIMZRTLE.js";import"./chunk-N2UVRM3Z.js";import"./chunk-RSSPNFSK.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import"./chunk-IXT2X5BZ.js";import"./chunk-II5RVJQN.js";import"./chunk-VFPY2A23.js";import{RelayError,builtinCatalog,classifyModelSwitch,createRuntime,loadCachedCatalog,modelLabel,pickModel,specFor,toModelInfos}from"./chunk-2QRQXKIM.js";
3
+ import{RESIDENT_TOKEN_CAP,activateModeFiles,activatePermissionSettings,buildResidentSet,buildSystemPrompt,createAuditLogger,createTwpToolkit,currentBranch,describeAuditLog,describeToolCatalog,displayCwd,executeTool,findProjectTwpSubdir,localTools,lstatOrNull,parseFrontMatter,parseRule,persistProjectAllow,projectPermissionsPath,projectRootFor,readFileTool,residentInputs,resolveGitExecutable,runTurn,secretReason}from"./chunk-4DUZIRGL.js";import"./chunk-NZ7WI4RZ.js";import{buildDiffLines,
4
+ diffStat}from"./chunk-VRBI2NPI.js";import{require_fuzzysort}from"./chunk-DIMZRTLE.js";import"./chunk-N2UVRM3Z.js";import"./chunk-RSSPNFSK.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import"./chunk-IXT2X5BZ.js";import"./chunk-II5RVJQN.js";import"./chunk-VFPY2A23.js";import{RelayError,builtinCatalog,classifyModelSwitch,createRuntime,loadCachedCatalog,modelLabel,pickModel,specFor,toModelInfos}from"./chunk-LLBLGHHZ.js";
5
5
  import"./chunk-D233KKXW.js";import"./chunk-PMOUHEJQ.js";import"./chunk-XNLIEUAW.js";import{proxyDiagnostics}from"./chunk-J7QYPKVK.js";import{checkMinSupportedVersion,isBelowMinSupported,minSupportedBlockMessage}from"./chunk-DXXFUNYN.js";import"./chunk-EDF4U5BT.js";import{configReadDirs,twpHomeDir}from"./chunk-RZVI6PMW.js";import{parseArgv}from"./chunk-IVFSEXD3.js";import{applyPermissionMode,checkPermission,describePermissionMode,getMode,isModeId,modeSource,
6
6
  nextMode}from"./chunk-2LOT54OO.js";import"./chunk-MLRBDF44.js";import"./chunk-VERYHAWV.js";import"./chunk-QQRJLH6B.js";import{isFullWidth,isWide,stringWidth,stripAnsi}from"./chunk-UREA4ZIG.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import{__commonJS,__export,__require,__toESM}from"./chunk-VSJBJXZO.js";var require_react_production=__commonJS({"node_modules/react/cjs/react.production.js"(exports){"use strict";var REACT_ELEMENT_TYPE=Symbol.for("react.transitional.element");var REACT_PORTAL_TYPE=Symbol.for("react.portal");var REACT_FRAGMENT_TYPE=Symbol.for("react.fragment");var REACT_STRICT_MODE_TYPE=Symbol.for("react.strict_mode");var REACT_PROFILER_TYPE=Symbol.for("react.profiler");var REACT_CONSUMER_TYPE=Symbol.for("react.consumer");var REACT_CONTEXT_TYPE=Symbol.for("react.context");var REACT_FORWARD_REF_TYPE=Symbol.
7
7
  for("react.forward_ref");var REACT_SUSPENSE_TYPE=Symbol.for("react.suspense");var REACT_MEMO_TYPE=Symbol.for("react.memo");var REACT_LAZY_TYPE=Symbol.for("react.lazy");var REACT_ACTIVITY_TYPE=Symbol.for("react.activity");var REACT_VIEW_TRANSITION_TYPE=Symbol.for("react.view_transition");var MAYBE_ITERATOR_SYMBOL=Symbol.iterator;function getIteratorFn(maybeIterable){if(null===maybeIterable||"object"!==typeof maybeIterable)return null;maybeIterable=MAYBE_ITERATOR_SYMBOL&&maybeIterable[MAYBE_ITERATOR_SYMBOL]||
@@ -1335,14 +1335,14 @@ err.message)}`})})},[buffer,commit]);const onKey=(0,import_react38.useCallback)(
1335
1335
  return}if(bufferRef.current.text!==""){clearBuffer();return}if(ctrlCArmed){exit();return}setCtrlCArmed(true);commit({kind:"notice",tone:"info",text:"\u3082\u3046\u4E00\u5EA6 Ctrl+C \u3067\u7D42\u4E86\u3057\u307E\u3059\uFF08Ctrl+D \u3067\u3082\u7D42\u4E86\uFF09"});return}setCtrlCArmed(false);if(ev.name==="shift-tab"||ev.name==="alt-m"){const to=nextMode(modeRef.current);setMode(to);return}if(ev.name==="ctrl-r"){const last=lastToolRef.current;if(last)commit({kind:"tool",run:{...last,summary:`${last.
1336
1336
  summary}\uFF08\u5C55\u958B\uFF09`},expanded:true});return}if(overlay==="permission"){const resolve=permissionResolver.current;if(!resolve)return;if(ev.name==="paste"&&ev.value&&permStateRef.current.stage!=="instead"){const pasted=ev.value.replace(/\r\n?/g,"\n");setBuffer(b=>insert(b,pasted));return}const step=stepDialog(permStateRef.current,ev,pendingPermissionRef.current??{name:""});if("answer"in step)resolve(step.answer);else setPermState(step.state);return}if(overlay==="doctor"){if(ev.name===
1337
1337
  "escape")setOverlay("none");return}if(overlay==="model"){if(ev.name==="up")setSelected(s=>Math.max(0,s-1));else if(ev.name==="down")setSelected(s=>Math.min(catalog.ids.length-1,s+1));else if(ev.name==="escape")setOverlay("none");else if(ev.name==="enter"){const pickedId=catalog.ids[selectedRef.current];if(pickedId!==void 0&&classifyModelSwitch(catalog,model,pickedId)==="new_conversation"&&!runtime.context.isEmpty()){if(busyRef.current){commit({kind:"notice",tone:"warn",text:`${modelLabel(pickedId)}\
1338
- \u306F\u63A5\u7D9A\u5148\u304C\u7570\u306A\u308B\u305F\u3081\u65B0\u3057\u3044\u4F1A\u8A71\u304C\u5FC5\u8981\u3067\u3059\u3002\u5FDC\u7B54\u304C\u7D42\u308F\u3063\u3066\u304B\u3089\u5207\u308A\u66FF\u3048\u3066\u304F\u3060\u3055\u3044`});setOverlay("none");return}setPendingSwitch(pickedId);setSelected(0);setOverlay("model-confirm");return}if(pickedId!==void 0){setModel(pickedId);commit({kind:"notice",tone:"info",text:`\u30E2\u30C7\u30EB\u3092 ${modelLabel(pickedId)} \u306B\u5207\u308A\u66FF\u3048\u307E\u3057\u305F\uFF08\u30E2\u30FC\u30C9\u306F ${getMode(
1339
- modeRef.current).label} \u306E\u307E\u307E\uFF09`})}setOverlay("none")}return}if(overlay==="model-confirm"){if(ev.name==="up")setSelected(0);else if(ev.name==="down")setSelected(1);else if(ev.name==="escape"||ev.name==="enter"&&selectedRef.current!==0){setPendingSwitch(null);setOverlay("none");commit({kind:"notice",tone:"info",text:`\u30E2\u30C7\u30EB\u306F ${modelLabel(model)} \u306E\u307E\u307E\u3067\u3059`})}else if(ev.name==="enter"&&pendingSwitch!==null){setItems([]);runtime.context.clear();
1340
- setContext(runtime.context.snapshot());setModel(pendingSwitch);commit({kind:"notice",tone:"info",text:`\u65B0\u3057\u3044\u4F1A\u8A71\u3092\u59CB\u3081\u3001\u30E2\u30C7\u30EB\u3092 ${modelLabel(pendingSwitch)} \u306B\u5207\u308A\u66FF\u3048\u307E\u3057\u305F\uFF08\u63A5\u7D9A\u5148\u304C\u7570\u306A\u308B\u305F\u3081\u524D\u306E\u4F1A\u8A71\u306F\u5F15\u304D\u7D99\u3044\u3067\u3044\u307E\u305B\u3093\uFF09`});setPendingSwitch(null);setOverlay("none")}return}const mention=mentionAtCursor(bufferRef.
1341
- current.text,bufferRef.current.cursor);if(mention===null||mention.start!==dismissedMentionRef.current)dismissedMentionRef.current=null;const files=busyRef.current?null:fileCompletionFor(bufferRef.current,fileIndexRef.current);if(files!==null&&files.start!==dismissedMentionRef.current){if(ev.name==="up"){setSelected(s=>Math.max(0,s-1));return}if(ev.name==="down"){setSelected(s=>Math.min(files.items.length-1,s+1));return}if(ev.name==="tab"){const picked=files.items[Math.min(selectedRef.current,files.
1342
- items.length-1)];if(picked!==void 0){const insertText=`@${picked} `;setBuffer(b=>({text:b.text.slice(0,files.start)+insertText+b.text.slice(files.end),cursor:files.start+insertText.length}));setSelected(0)}return}if(ev.name==="escape"){dismissedMentionRef.current=files.start;setBuffer(b=>({...b}));return}}const palette=busyRef.current?[]:paletteFor(bufferRef.current.text,modeRef.current);if(palette.length>0){if(ev.name==="up"){setSelected(s=>Math.max(0,s-1));return}if(ev.name==="down"){setSelected(
1343
- s=>Math.min(palette.length-1,s+1));return}if(ev.name==="tab"){const picked=palette[selectedRef.current];if(picked){setBuffer(()=>({text:picked.name,cursor:picked.name.length}));setSelected(0)}return}if(ev.name==="enter"){const typed=bufferRef.current.text.trim();const exact=palette.find(c=>c.name===typed||c.aliases?.includes(typed));const picked=exact??palette[Math.min(selectedRef.current,palette.length-1)];if(picked){if(exact===void 0&&picked.argumentHint?.startsWith("<")===true){setBuffer(()=>({
1344
- text:`${picked.name} `,cursor:picked.name.length+1}));setSelected(0);return}clearBuffer();runCommand(picked.name)}return}if(ev.name==="escape"){clearBuffer();return}}switch(ev.name){case"char":if(ev.value){setBuffer(b=>insert(b,ev.value??""));setSelected(0)}return;case"paste":if(ev.value){const pasted=ev.value.replace(/\r\n?/g,"\n");setBuffer(b=>insert(b,pasted));setSelected(0)}return;case"newline":setBuffer(b=>insert(b,"\n"));return;case"enter":{const b=bufferRef.current;if(b.cursor>0&&b.text[b.
1345
- cursor-1]==="\\"){setBuffer(prev=>({text:`${prev.text.slice(0,prev.cursor-1)}
1338
+ \u306F\u63A5\u7D9A\u5148\u307E\u305F\u306F\u4F1A\u8A71\u306E\u5F62\u5F0F\u304C\u7570\u306A\u308B\u305F\u3081\u65B0\u3057\u3044\u4F1A\u8A71\u304C\u5FC5\u8981\u3067\u3059\u3002\u5FDC\u7B54\u304C\u7D42\u308F\u3063\u3066\u304B\u3089\u5207\u308A\u66FF\u3048\u3066\u304F\u3060\u3055\u3044`});setOverlay("none");return}setPendingSwitch(pickedId);setSelected(0);setOverlay("model-confirm");return}if(pickedId!==void 0){setModel(pickedId);commit({kind:"notice",tone:"info",text:`\u30E2\u30C7\u30EB\u3092 ${modelLabel(
1339
+ pickedId)} \u306B\u5207\u308A\u66FF\u3048\u307E\u3057\u305F\uFF08\u30E2\u30FC\u30C9\u306F ${getMode(modeRef.current).label} \u306E\u307E\u307E\uFF09`})}setOverlay("none")}return}if(overlay==="model-confirm"){if(ev.name==="up")setSelected(0);else if(ev.name==="down")setSelected(1);else if(ev.name==="escape"||ev.name==="enter"&&selectedRef.current!==0){setPendingSwitch(null);setOverlay("none");commit({kind:"notice",tone:"info",text:`\u30E2\u30C7\u30EB\u306F ${modelLabel(model)} \u306E\u307E\u307E\u3067\u3059`})}else if(ev.
1340
+ name==="enter"&&pendingSwitch!==null){setItems([]);runtime.context.clear();setContext(runtime.context.snapshot());setModel(pendingSwitch);commit({kind:"notice",tone:"info",text:`\u65B0\u3057\u3044\u4F1A\u8A71\u3092\u59CB\u3081\u3001\u30E2\u30C7\u30EB\u3092 ${modelLabel(pendingSwitch)} \u306B\u5207\u308A\u66FF\u3048\u307E\u3057\u305F\uFF08\u63A5\u7D9A\u5148\u307E\u305F\u306F\u4F1A\u8A71\u306E\u5F62\u5F0F\u304C\u7570\u306A\u308B\u305F\u3081\u524D\u306E\u4F1A\u8A71\u306F\u5F15\u304D\u7D99\u3044\u3067\u3044\u307E\u305B\u3093\uFF09`});
1341
+ setPendingSwitch(null);setOverlay("none")}return}const mention=mentionAtCursor(bufferRef.current.text,bufferRef.current.cursor);if(mention===null||mention.start!==dismissedMentionRef.current)dismissedMentionRef.current=null;const files=busyRef.current?null:fileCompletionFor(bufferRef.current,fileIndexRef.current);if(files!==null&&files.start!==dismissedMentionRef.current){if(ev.name==="up"){setSelected(s=>Math.max(0,s-1));return}if(ev.name==="down"){setSelected(s=>Math.min(files.items.length-1,s+
1342
+ 1));return}if(ev.name==="tab"){const picked=files.items[Math.min(selectedRef.current,files.items.length-1)];if(picked!==void 0){const insertText=`@${picked} `;setBuffer(b=>({text:b.text.slice(0,files.start)+insertText+b.text.slice(files.end),cursor:files.start+insertText.length}));setSelected(0)}return}if(ev.name==="escape"){dismissedMentionRef.current=files.start;setBuffer(b=>({...b}));return}}const palette=busyRef.current?[]:paletteFor(bufferRef.current.text,modeRef.current);if(palette.length>
1343
+ 0){if(ev.name==="up"){setSelected(s=>Math.max(0,s-1));return}if(ev.name==="down"){setSelected(s=>Math.min(palette.length-1,s+1));return}if(ev.name==="tab"){const picked=palette[selectedRef.current];if(picked){setBuffer(()=>({text:picked.name,cursor:picked.name.length}));setSelected(0)}return}if(ev.name==="enter"){const typed=bufferRef.current.text.trim();const exact=palette.find(c=>c.name===typed||c.aliases?.includes(typed));const picked=exact??palette[Math.min(selectedRef.current,palette.length-
1344
+ 1)];if(picked){if(exact===void 0&&picked.argumentHint?.startsWith("<")===true){setBuffer(()=>({text:`${picked.name} `,cursor:picked.name.length+1}));setSelected(0);return}clearBuffer();runCommand(picked.name)}return}if(ev.name==="escape"){clearBuffer();return}}switch(ev.name){case"char":if(ev.value){setBuffer(b=>insert(b,ev.value??""));setSelected(0)}return;case"paste":if(ev.value){const pasted=ev.value.replace(/\r\n?/g,"\n");setBuffer(b=>insert(b,pasted));setSelected(0)}return;case"newline":setBuffer(
1345
+ b=>insert(b,"\n"));return;case"enter":{const b=bufferRef.current;if(b.cursor>0&&b.text[b.cursor-1]==="\\"){setBuffer(prev=>({text:`${prev.text.slice(0,prev.cursor-1)}
1346
1346
  ${prev.text.slice(prev.cursor)}`,cursor:prev.cursor}));return}submit();return}case"backspace":setBuffer(b=>{const prev=prevBoundary(b.text,b.cursor);return prev===b.cursor?b:{text:b.text.slice(0,prev)+b.text.slice(b.cursor),cursor:prev}});setSelected(0);return;case"delete":setBuffer(b=>({text:b.text.slice(0,b.cursor)+b.text.slice(nextBoundary(b.text,b.cursor)),cursor:b.cursor}));return;case"left":setBuffer(b=>({...b,cursor:prevBoundary(b.text,b.cursor)}));return;case"right":setBuffer(b=>({...b,cursor:nextBoundary(
1347
1347
  b.text,b.cursor)}));return;case"home":setBuffer(b=>({...b,cursor:0}));return;case"end":setBuffer(b=>({...b,cursor:b.text.length}));return;case"ctrl-u":clearBuffer();return;default:return}},[busy,catalog,clearBuffer,commit,ctrlCArmed,exit,model,overlay,pendingSwitch,runtime,setBuffer,setSelected,stream,submit,runCommand]);useTerminalInput(onKey,setPasting);const streamRows=fitTailRows(stream.text,size.columns,budget.body).rows;const diffBudget=budget.body-13;const listBudget=Math.max(1,budget.body-
1348
1348
  6);const doctorBudget=Math.max(1,budget.body-11-doctorNetworkRows(networkDiagnostics));return(0,import_jsx_runtime9.jsxs)(Box_default,{flexDirection:"column",children:[(0,import_jsx_runtime9.jsx)(Static,{items,children:item=>(0,import_jsx_runtime9.jsx)(ItemView,{item},item.id)}),(0,import_jsx_runtime9.jsxs)(Box_default,{flexDirection:"column",marginTop:1,children:[stream.streaming||stream.text!==""?(0,import_jsx_runtime9.jsx)(Box_default,{flexDirection:"column",children:streamRows.map((line,i)=>(0,import_jsx_runtime9.jsx)(
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{fetchLatestVersion,isBehindLatest,resolveNpmCommand}from"./chunk-DVBFLDHZ.js";import"./chunk-2QRQXKIM.js";import"./chunk-D233KKXW.js";import"./chunk-PMOUHEJQ.js";import"./chunk-XNLIEUAW.js";import"./chunk-J7QYPKVK.js";import{PARENT_PID_ENV,WORKER_ENV,autoUpdateDisabledReason,classifyInstall,isCheckDue,listRegisteredPids,lockFilePath,readUpdateState,resolveCliPath,runDirPath,writeUpdateState}from"./chunk-CH6QU76P.js";import{PACKAGE_NAME,parseVersionCore}from"./chunk-DXXFUNYN.js";
3
+ import{fetchLatestVersion,isBehindLatest,resolveNpmCommand}from"./chunk-6EIW4KTU.js";import"./chunk-LLBLGHHZ.js";import"./chunk-D233KKXW.js";import"./chunk-PMOUHEJQ.js";import"./chunk-XNLIEUAW.js";import"./chunk-J7QYPKVK.js";import{PARENT_PID_ENV,WORKER_ENV,autoUpdateDisabledReason,classifyInstall,isCheckDue,listRegisteredPids,lockFilePath,readUpdateState,resolveCliPath,runDirPath,writeUpdateState}from"./chunk-CH6QU76P.js";import{PACKAGE_NAME,parseVersionCore}from"./chunk-DXXFUNYN.js";
4
4
  import"./chunk-5WGOHFAS.js";import"./chunk-EDF4U5BT.js";import"./chunk-RZVI6PMW.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";import{execFile}from"child_process";import fs from"fs";import path from"path";var PARENT_WAIT_MAX_MS=12*60*60*1e3;var PARENT_POLL_MS=1e3;var LOCK_STALE_MS=PARENT_WAIT_MAX_MS+60*60*1e3;var INSTALL_TIMEOUT_MS=0;function childEnv(env){const next={...env};delete next[WORKER_ENV];delete next[PARENT_PID_ENV];return next}function createNpmRunner(env=process.env){const cmd=resolveNpmCommand({env});if(cmd===null)return null;return(args,timeoutMs)=>new Promise(resolve=>{execFile(cmd.file,[...cmd.prefix,...args],{timeout:timeoutMs,windowsHide:true,maxBuffer:8*1024*1024,cwd:path.dirname(lockFilePath(env)),env:childEnv(env)},(error,stdout,stderr)=>{if(error===null){resolve({ok:true,stdout:String(stdout),stderr:String(
5
5
  stderr)});return}const e=error;resolve({ok:false,stdout:String(stdout??""),stderr:String(stderr??""),...e.killed?{error:"\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8\u3057\u307E\u3057\u305F"}:typeof e.code==="string"?{error:e.code}:{}})})})}function summarizeNpmFailure(result){const text=`${result.stderr}
6
6
  ${result.stdout}`;const code=/npm (?:ERR!|error) code (\S+)/.exec(text)?.[1]??result.error;let reason;if(code==="EACCES"||code==="EPERM"){reason=`\u30B0\u30ED\u30FC\u30D0\u30EB\u306E\u5C0E\u5165\u5148\u306B\u66F8\u304D\u8FBC\u3080\u6A29\u9650\u304C\u3042\u308A\u307E\u305B\u3093\uFF08${code}\uFF09`}else if(code!==void 0&&/^(ENOTFOUND|ETIMEDOUT|ECONNREFUSED|ECONNRESET|EAI_AGAIN|ENETUNREACH)$/.test(code)){reason=`npm registry \u306B\u63A5\u7D9A\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08${code}\
@@ -1,6 +1,6 @@
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{isSafePathSegment}from"./chunk-HVZUXLQ4.js";import{ApiError,TwpApiClient,appendQuery}from"./chunk-JA5A6UJ2.js";import{redactSecretValues}from"./chunk-IXT2X5BZ.js";import{DEFAULT_MAX_HISTORY_BYTES,DEFAULT_MAX_TOKENS,effectiveModelSpec,emptyUsage}from"./chunk-2QRQXKIM.js";
3
+ import{CommandModelMissingError,MAX_REPORTED_VIOLATIONS,loadCommandModelDomain,loadCommandModelIndex,validateBody,validateQuery}from"./chunk-NZ7WI4RZ.js";import{isForceOnly,killProcessTree,system32}from"./chunk-N2UVRM3Z.js";import{isSafePathSegment}from"./chunk-HVZUXLQ4.js";import{ApiError,TwpApiClient,appendQuery}from"./chunk-JA5A6UJ2.js";import{redactSecretValues}from"./chunk-IXT2X5BZ.js";import{DEFAULT_MAX_HISTORY_BYTES,DEFAULT_MAX_TOKENS,effectiveModelSpec,emptyUsage}from"./chunk-LLBLGHHZ.js";
4
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=[];
@@ -61,21 +61,24 @@ return}const keys=parseKeysLine(logText,keysLine);if(keys===null){log.log(` \u2
61
61
  ${verifySkill} \u306E\u81EA\u52D5\u6295\u5165\u306A\u3057`);return}const queued=await api.queuedSnapshot();if(queued===null){log.log(" \u26A0\uFE0F \u30AD\u30E5\u30FC\u306E\u4E00\u89A7\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F \u2192 dev\u691C\u8A3C\u306E\u6295\u5165\u3092\u898B\u9001\u308A\u307E\u3059");log.log(" \uFF08\u5224\u5B9A\u3067\u304D\u306A\u3044\u72B6\u614B\u3067\u6295\u5165\u3059\u308B\u3068\u3001\u540C\u4E00\u30BF\u30B9\u30AF\u306Edev\u691C\u8A3C\u304C\u4E8C\u91CD\u306B\u8D70\u308A\u307E\u3059\uFF09");
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
- 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),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)].
64
+ now??new Date).getTime()*1e3;const latest=new Map;const byTask=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 runs=byTask.get(taskKey)??[];runs.push({skill,itemId:item.item_id,sortOrder});byTask.set(taskKey,runs);const key=advanceKey(taskKey,skill);const prev=latest.
65
+ get(key);if(prev&&prev.sortOrder>=sortOrder)continue;latest.set(key,{sortOrder,candidate:{taskKey,skill,itemId:item.item_id,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){let later=null;if(value.sortOrder>0){for(const run of byTask.get(value.candidate.taskKey)??[]){if(run.skill===value.candidate.skill||run.
66
+ sortOrder<=value.sortOrder)continue;if(later===null||run.sortOrder>later.sortOrder)later=run}}index.set(key,{...value.candidate,supersededBy:later===null?null:{skill:later.skill,itemId:later.itemId}})}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.
67
+ 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.
68
+ 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/.
69
+ 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"}}
70
+ 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===
71
+ 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`}}
72
+ 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);if(Number.isNaN(t.getTime()))continue;if(resumeAfter===null||
73
+ 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,blockedBy,prHeads}}async function resolveResumeHold(candidate,fetchResult,advancing){
74
+ 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.ageMinutes,supersededBy:candidate.supersededBy??null}}var HUMAN_HELD_STATUS_CODES=new Set(
75
+ ["humanjudge","humanwork","datafix","reqwait","spec","hold"]);var DONE_STATUS_ID="default:done";function shaMatches(recorded,current){const c=current.toLowerCase();return c.startsWith(recorded)||recorded.startsWith(c)}async function shouldSuppressForResume(hold,snapshot,lookupPrHead,now=new Date,lookupTaskStatus){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{
76
+ suppress:false,reason:`\u4E0A\u9650${RESUME_HOLD_CAP_HOURS}\u6642\u9593\u306B\u9054\u3057\u305F`}}if(hold.supersededBy){return{suppress:false,reason:`\u636E\u3048\u7F6E\u3044\u305F\u5F8C\u306B ${hold.supersededBy.skill} \u304C\u540C\u3058\u30BF\u30B9\u30AF\u3092\u6271\u3063\u305F\uFF08item=${hold.supersededBy.itemId}\uFF09\uFF1D\u65B0\u3057\u3044\u4ED5\u4E8B`}}const{resumeAfter,blockedBy,prHeads}=hold.condition;if(resumeAfter!==null&&now.getTime()>=resumeAfter.getTime()){return{suppress:false,reason:`\
77
+ 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\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!==
78
+ 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`}}if(lookupTaskStatus!==void 0){for(const key of blockedBy){if(snapshot.byKey.has(key))continue;const statusId=await lookupTaskStatus(key);if(statusId===null){return{suppress:false,reason:`\u963B\u5BB3\u30BF\u30B9\u30AF ${key} \u306E\u30B9\u30C6\u30FC\u30BF\u30B9\u3092\u53D6\u5F97\u3067\u304D\u306A\u3044`}}if(statusId===DONE_STATUS_ID){
79
+ return{suppress:false,reason:`\u963B\u5BB3\u30BF\u30B9\u30AF ${key} \u304C\u5B8C\u4E86\u3057\u305F`}}}}}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 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{
80
+ 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()}`);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}\
81
+ / 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)].
79
82
  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;
80
83
  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.
81
84
  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");
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{createRuntime}from"./chunk-2QRQXKIM.js";import{findExecutable}from"./chunk-PMOUHEJQ.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import{describeAutoUpdate}from"./chunk-CH6QU76P.js";import{PACKAGE_NAME,UPDATE_COMMAND,compareVersionCores,isBelowMinSupported,parseVersionCore}from"./chunk-DXXFUNYN.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import{execFile}from"child_process";import fs from"fs";import path from"path";function resolveNpmCommand(deps={}){const platform=deps.platform??process.platform;const env=deps.env??process.env;const npmPath=(deps.find??(name=>findExecutable(name,{env,platform})))("npm");if(npmPath===null)return null;if(platform!=="win32")return{file:npmPath,prefix:[]};if(/\.exe$/i.test(npmPath))return{file:npmPath,prefix:[]};const cliJs=path.win32.join(path.win32.dirname(npmPath),"node_modules","npm","bin","npm-cli.js");return(deps.exists??fs.existsSync)(cliJs)?{file:deps.nodePath??process.
3
+ import{createRuntime}from"./chunk-LLBLGHHZ.js";import{findExecutable}from"./chunk-PMOUHEJQ.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import{describeAutoUpdate}from"./chunk-CH6QU76P.js";import{PACKAGE_NAME,UPDATE_COMMAND,compareVersionCores,isBelowMinSupported,parseVersionCore}from"./chunk-DXXFUNYN.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import{execFile}from"child_process";import fs from"fs";import path from"path";function resolveNpmCommand(deps={}){const platform=deps.platform??process.platform;const env=deps.env??process.env;const npmPath=(deps.find??(name=>findExecutable(name,{env,platform})))("npm");if(npmPath===null)return null;if(platform!=="win32")return{file:npmPath,prefix:[]};if(/\.exe$/i.test(npmPath))return{file:npmPath,prefix:[]};const cliJs=path.win32.join(path.win32.dirname(npmPath),"node_modules","npm","bin","npm-cli.js");return(deps.exists??fs.existsSync)(cliJs)?{file:deps.nodePath??process.
4
4
  execPath,prefix:[cliJs]}:null}var DEFAULT_REGISTRY="https://registry.npmjs.org";function registryBase(env=process.env){const configured=env["npm_config_registry"]?.trim();if(configured===void 0||configured==="")return DEFAULT_REGISTRY;try{const url=new URL(configured);if(url.protocol!=="https:"&&url.protocol!=="http:")return DEFAULT_REGISTRY}catch{return DEFAULT_REGISTRY}return configured.replace(/\/+$/,"")}async function fetchFromRegistry(fetchImpl=httpFetch,env=process.env){const url=`${registryBase(env)}/${PACKAGE_NAME.replace(
5
5
  "/","%2f")}`;const res=await fetchImpl(url,{headers:{Accept:"application/vnd.npm.install-v1+json"},signal:AbortSignal.timeout(5e3)});if(!res.ok){throw new Error(`registry \u304C ${res.status} \u3092\u8FD4\u3057\u307E\u3057\u305F`)}const body=await res.json();const latest=body["dist-tags"]?.latest;if(typeof latest!=="string"||parseVersionCore(latest)===null){throw new Error("registry \u306E\u5FDC\u7B54\u306B dist-tags.latest \u304C\u3042\u308A\u307E\u305B\u3093")}return{version:latest.trim(),source:"\
6
6
  registry"}}async function fetchFromNpmCli(){const npm=resolveNpmCommand();if(npm===null){throw new Error("npm \u304C PATH \u306B\u898B\u3064\u304B\u308A\u307E\u305B\u3093")}const stdout=await new Promise((resolve,reject)=>{execFile(npm.file,[...npm.prefix,"view",PACKAGE_NAME,"version","--json"],{timeout:15e3,windowsHide:true},(error,out)=>error?reject(error):resolve(out))});const parsed=JSON.parse(stdout.trim());const latest=typeof parsed==="string"?parsed:null;if(latest===null||parseVersionCore(
@@ -32,7 +32,8 @@ fetched_at==="string"?entry.fetched_at:null}}catch{return{minSupportedVersion:nu
32
32
  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)}
33
33
  `)})}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||
34
34
  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{
35
- 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){
35
+ 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";const a=specFor(catalog,from);const b=specFor(catalog,to);return a.provider===b.provider&&a.protocol===b.protocol?"keep":"new_conversat\
36
+ ion"}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){
36
37
  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(
37
38
  block);if(parsed)events.push(parsed)}return events}flush(){const rest=(this.pendingCr?`${this.buffer}
38
39
  `: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(
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.85.1":"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.85.3":"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
@@ -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-AGHPI7CM.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}
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-XT4VB4LJ.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
1395
  const[{loadDomain},{loadUserConfig}]=await Promise.all([import("./registry-BHBN22YL.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
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-XJQ6DBKV.js");process.exitCode=await runDomain({domain:args.domain,...args.operation!==void 0?{operation:args.operation}:
1400
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-HQSOCK4P.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-RXDALEOA.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-KKEZJCLF.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-RFMJMNHY.js");process.exitCode=await runTaskLoop(
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-5NJSC26F.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-KKEZJCLF.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-GQBRPBFW.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-STBDDXPF.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-FPPF7CJH.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-S6T7VJNY.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-QMIEA7MG.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();
@@ -1,7 +1,7 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
3
  import{ScheduleApi,collectDue,gateStatus,nowInZone,parseCounts,promptSection}from"./chunk-IIK77LSC.js";import{NO_PLAN_SESSION,RECENT_ADVANCE_WINDOW_HOURS,ReleaseOutcomeLog,buildDynamicBlocks,buildRecentCandidateIndex,createItem,enqueueBlockerRecovery,enqueueDevVerifyForMerged,enqueueReleasePartialMergeRerun,enqueueReleasePhase5Recovery,fileSkillNames,findRecentCandidate,formatInflightEntry,formatPlanResultLine,formatRecentAdvance,formatResumeHold,inflightEntries,inflightStaleHours,openPlanSession,
4
- parseOutcomeCode,parseReleaseResult,parseTaskStatusSnapshot,pendingTaskKeys,resolveRecentAdvance,resolveResumeHold,shouldSuppressForResume,shouldSuppressForStatus,staleFloorHours,unavailableChecks,windowStartMicros}from"./chunk-DXMWSUZA.js";import{EngineNotConfiguredError,NoopEngine,UnknownEngineError,aiUnavailableLabel,assertKnownEngine,failureHint,isAiUnavailable,needsHumanToRestoreAi}from"./chunk-MBPJV745.js";import{ServerSkillCatalog,formatSkillOrigins}from"./chunk-QGRBZ2C2.js";
4
+ parseOutcomeCode,parseReleaseResult,parseTaskStatusSnapshot,pendingTaskKeys,resolveRecentAdvance,resolveResumeHold,shouldSuppressForResume,shouldSuppressForStatus,staleFloorHours,unavailableChecks,windowStartMicros}from"./chunk-5LFUD7K3.js";import{EngineNotConfiguredError,NoopEngine,UnknownEngineError,aiUnavailableLabel,assertKnownEngine,failureHint,isAiUnavailable,needsHumanToRestoreAi}from"./chunk-MBPJV745.js";import{ServerSkillCatalog,formatSkillOrigins}from"./chunk-QGRBZ2C2.js";
5
5
  import{claudeConfigDir,resolveDetectDeps}from"./chunk-5SONMN6K.js";import{InstanceLock,buildLockOwner,defaultIsLoopProcess,writeLockOwner}from"./chunk-3WHC4FSG.js";import{LoopSettingsApplier,renderStepBudget}from"./chunk-4FCPLEZN.js";import"./chunk-MYBIPHZ7.js";import"./chunk-A4LFG7MW.js";import"./chunk-VRBI2NPI.js";import{duplicateTaskKeyDropReason,excludedKeyInArgs,extractPlanJson,parseOpsCount,parsePlanExcludeKeys,placeholderTaskKey,releaseDeployDropReason,
6
6
  stepToItem,zeroTargetDropReasons}from"./chunk-DR6BUZXT.js";import{redactLoopOutput}from"./chunk-NXPLTDN4.js";import{buildLoopConfig,evaluateOwnership,exportStateDirEnv,localConfigPath,loopStateDir}from"./chunk-Y24FMUYU.js";import{describeOperations,evaluatePlanGate,planGateStatePath,recordPlanned}from"./chunk-CVX2YWHC.js";import{CapacityReporter}from"./chunk-VYDPW2YO.js";import{formatHookIds,formatHookWiring,runHook,runPrefetch,runPreflight}from"./chunk-TTST7UDR.js";
7
7
  import{exclusiveInflightEntries,formatExclusiveEntry,normalizeSkillName,spawnSyncResolved}from"./chunk-FABDZBDZ.js";import{setSkillPrefix,skillCommand,skillFromPrompt,stripSkillCommand}from"./chunk-6CS5L24D.js";import{killProcessTree}from"./chunk-N2UVRM3Z.js";import{AgentLoopApi,describeError,filterByStatus,isPermanent,pick,pickString}from"./chunk-O52RKZCC.js";import{PRIVATE_PROJECT_REF,isPrivateProjectId,isPrivateProjectRef,privateProjectId,projectFileKey}from"./chunk-RMFLTSOV.js";
@@ -108,8 +108,8 @@ output),contract_lines:extractContractLines(output),steps:steps.slice(0,MAX_STEP
108
108
  exec(viaGit??"")?.[1]??null}function run(file,args,timeoutMs){return new Promise(resolve=>{execFile(file,args,{timeout:timeoutMs,env:{...process.env,GIT_TERMINAL_PROMPT:"0",GH_PROMPT_DISABLED:"1"}},(err,stdout)=>resolve(err?null:String(stdout)))})}var USER_ID_RE=/^[A-Za-z0-9._-]{1,64}$/;var ProjectApi=class{constructor(apiUrl,session,fetchImpl=httpFetch){this.apiUrl=apiUrl;this.session=session;this.fetchImpl=fetchImpl}apiUrl;session;fetchImpl;async resolve(ref){if(isPrivateProjectRef(ref))return this.resolvePrivate();return resolveProjectRef(ref,path8=>this.get(path8),loopProjectIdPolicy)}async resolvePrivate(){const res=await this.get("/api/v2/user");if(!res.ok){throw new Error(`\u30ED\u30B0\u30A4\u30F3\u4E2D\u306E\u30E6\u30FC\u30B6\u30FC\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08HTTP ${res.
109
109
  status}\uFF09\u3002\u500B\u4EBA\u30AD\u30E5\u30FC\u3092\u56DE\u3059\u306B\u306F \`twp login\` \u304C\u5FC5\u8981\u3067\u3059\u3002\u63A5\u7D9A\u5148\u3068\u30ED\u30B0\u30A4\u30F3\u72B6\u614B\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}const userId=res.json?.user?.id;if(typeof userId!=="string"||!USER_ID_RE.test(userId)){throw new Error(`\u30B5\u30FC\u30D0\u304C\u8FD4\u3057\u305F\u30E6\u30FC\u30B6\u30FCID\u3092\u500B\u4EBA\u30AD\u30E5\u30FC\u306EID\u306B\u4F7F\u3048\u307E\u305B\u3093\uFF08${String(
110
110
  userId).slice(0,60)}\uFF09\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return{id:privateProjectId(userId),code:PRIVATE_PROJECT_REF,name:"\u500B\u4EBA\u30BF\u30B9\u30AF"}}async countByStatus(projectId,statusId){const res=await this.get(`/api/v2/projects/${projectId}/tasks?status_id=${encodeURIComponent(statusId)}&limit=1`);if(!res.ok){return{total:null,error:res.status===null?res.error??"\u901A\u4FE1\u5931\u6557":`HTTP ${res.status}`}}const total=res.json?.
111
- pagination?.total;if(typeof total!=="number"){return{total:null,error:"\u5FDC\u7B54\u304B\u3089 pagination.total \u3092\u8AAD\u3081\u306A\u3044"}}return{total,error:null}}async get(path8){let token;try{token=await this.session.getAccessToken()}catch(err){return{ok:false,status:null,json:null,error:err.message}}try{const res=await this.fetchImpl(`${this.apiUrl}${path8}`,{headers:{Authorization:`Bearer ${token}`,"Content-Type":"application/json",Accept:"application/json"}});const raw=await res.text();
112
- let json=null;try{json=raw.trim()===""?null:JSON.parse(raw)}catch{json=null}return{ok:res.ok,status:res.status,json,error:null}}catch(err){return{ok:false,status:null,json:null,error:err.message}}}};import fs5 from"fs";var ScheduleBridge=class{constructor(deps){this.deps=deps}deps;tzWarned=false;zoneWarned=false;lastStatusesSummary="";unmappedWarned=new Set;now(){if(this.deps.now)return this.deps.now();return nowInZone(this.deps.config.scheduleTimezone,m=>{if(this.zoneWarned)return;this.zoneWarned=true;this.deps.log.log(` ${m}`)})}warn(message){this.deps.log.log(` \u26A0\uFE0F \u5B9A\u671F\u30B9\u30B1\u30B8\u30E5\u30FC\u30EB: ${message}`)}async loadConfig(){const res=await this.deps.api.definitions();if(res.
111
+ pagination?.total;if(typeof total!=="number"){return{total:null,error:"\u5FDC\u7B54\u304B\u3089 pagination.total \u3092\u8AAD\u3081\u306A\u3044"}}return{total,error:null}}async taskStatusIdByKey(taskKey){const res=await this.get(`/api/v2/tasks/resolve-by-key/${encodeURIComponent(taskKey)}`);if(!res.ok)return null;const statusId=res.json?.task?.status_id;return typeof statusId==="string"&&statusId!==""?statusId:null}async get(path8){let token;try{token=await this.session.getAccessToken()}catch(err){
112
+ return{ok:false,status:null,json:null,error:err.message}}try{const res=await this.fetchImpl(`${this.apiUrl}${path8}`,{headers:{Authorization:`Bearer ${token}`,"Content-Type":"application/json",Accept:"application/json"}});const raw=await res.text();let json=null;try{json=raw.trim()===""?null:JSON.parse(raw)}catch{json=null}return{ok:res.ok,status:res.status,json,error:null}}catch(err){return{ok:false,status:null,json:null,error:err.message}}}};import fs5 from"fs";var ScheduleBridge=class{constructor(deps){this.deps=deps}deps;tzWarned=false;zoneWarned=false;lastStatusesSummary="";unmappedWarned=new Set;now(){if(this.deps.now)return this.deps.now();return nowInZone(this.deps.config.scheduleTimezone,m=>{if(this.zoneWarned)return;this.zoneWarned=true;this.deps.log.log(` ${m}`)})}warn(message){this.deps.log.log(` \u26A0\uFE0F \u5B9A\u671F\u30B9\u30B1\u30B8\u30E5\u30FC\u30EB: ${message}`)}async loadConfig(){const res=await this.deps.api.definitions();if(res.
113
113
  kind==="error")return{error:res.message};if(res.config.schedules.length===0){const warn=(res.config.warnings??[]).map(w=>w&&typeof w==="object"?String(w["message"]??""):"").filter(m=>m!=="").join("; ");this.deps.log.log(" \u3053\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306B\u306F\u5B9A\u671F\u30B9\u30B1\u30B8\u30E5\u30FC\u30EB\u5B9A\u7FA9\u304C\u3042\u308A\u307E\u305B\u3093\uFF08\u5B9A\u671F\u30BF\u30B9\u30AF\u306F\u6295\u5165\u3055\u308C\u307E\u305B\u3093\uFF09"+(warn?` / ${warn}`:""))}this.
114
114
  describeStatuses(res.config);return{config:res.config}}describeStatuses(config){const keys=Object.keys(config.require_zero_statuses??{}).sort();const used=[...new Set((config.schedules??[]).flatMap(s=>{const raw=s.require_zero??[];const list=Array.isArray(raw)?raw:typeof raw==="string"?[raw]:[];return list.filter(k=>typeof k==="string")}))].sort();const missing=used.filter(k=>!keys.includes(k));const summary=`\u4EF6\u6570\u30B2\u30FC\u30C8\u306E\u5BFE\u5FDC\uFF08\u30B5\u30FC\u30D0\u8A2D\u5B9A require_zero_statuses\uFF09: ${keys.
115
115
  length>0?keys.join(","):"\u306A\u3057"}`+(missing.length>0?` \uFF0F \u26A0\uFE0F \u5BFE\u5FDC\u306A\u3057: ${missing.join(",")}\uFF08\u3053\u308C\u3092 require_zero \u306B\u6301\u3064\u67A0\u306F\u767A\u706B\u3057\u307E\u305B\u3093\uFF09`:"");if(summary!==this.lastStatusesSummary){this.deps.log.log(` ${summary}`);this.unmappedWarned.clear()}this.lastStatusesSummary=summary}async loadHistory(){const res=await this.deps.api.history();if(res.kind==="error")return{error:res.message};const serverTz=res.
@@ -209,7 +209,8 @@ new Set(exclusive.map(e=>e.skill));return exclusiveQueued};let recentCandidates=
209
209
  if(resultCache.has(itemId))return resultCache.get(itemId)??null;if(resultFetchBudget<=0)return null;resultFetchBudget-=1;const res=await this.deps.api.getItem(itemId);if(!res.ok){log.log(` \u26A0\uFE0F \u76F4\u8FD1\u30A2\u30A4\u30C6\u30E0\u306E\u7D50\u679C\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08${describeError(res)}\uFF09\u3002${taskKey} \u306E\u518D\u6295\u5165\u306F\u6291\u6B62\u3057\u307E\u305B\u3093`);return null}const result2=res.json?.item?.result??null;resultCache.
210
210
  set(itemId,result2);return result2};const recentAdvanceFor=async(taskKey,skill)=>{if(config.operations.advancingOutcomes.size===0)return null;const candidate=await recentCandidateFor(taskKey,skill);if(candidate===null)return null;return resolveRecentAdvance(candidate,fetchResultFor(taskKey),config.operations.advancingOutcomes)};const resumeHoldFor=async(taskKey,skill)=>{const candidate=await recentCandidateFor(taskKey,skill);if(candidate===null)return null;return resolveResumeHold(candidate,fetchResultFor(
211
211
  taskKey),config.operations.advancingOutcomes)};const prHeadCache=new Map;const prHeadLookup=async(repo,n)=>{const key=`${repo}#${n}`;if(prHeadCache.has(key))return prHeadCache.get(key)??null;const sha=await(this.deps.prHeadLookup??lookupPrHead)(repo,n);if(sha===null)log.log(` \u26A0\uFE0F ${key} \u306E head \u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08pr_head \u6761\u4EF6\u306F\u6210\u7ACB\u6271\u3044\uFF1D\u6291\u6B62\u3057\u307E\u305B\u3093\uFF09`);prHeadCache.set(
212
- key,sha);return sha};const exclusiveEnqueued=new Set;const enqueuedTaskKeys=new Set;let enqueued=0;const dropped=[];let lockLostMidway=false;for(const[stepIndex,step]of plan.steps.entries()){const item=stepToItem(step,config.ai);if(!item){dropped.push({skill:String(step.skill??""),task_key:null,reason:"step \u306E\u5F62\u304C\u4E0D\u6B63"});continue}if(!/^[a-z][a-z0-9-]*$/.test(step.skill)){log.log(` \u26A0\uFE0F \u30B9\u30AD\u30EB\u540D\u304C\u60F3\u5B9A\u306E\u6587\u5B57\u7A2E\u3067\u306F\u3042\u308A\u307E\u305B\u3093\uFF08skill='${step.
212
+ key,sha);return sha};const taskStatusCache=new Map;const taskStatusLookup=async taskKey=>{if(taskStatusCache.has(taskKey))return taskStatusCache.get(taskKey)??null;let statusId;try{statusId=await(this.deps.taskStatusLookup??(k=>this.deps.projectApi.taskStatusIdByKey(k)))(taskKey)}catch{statusId=null}if(statusId===null)log.log(` \u26A0\uFE0F ${taskKey} \u306E\u30B9\u30C6\u30FC\u30BF\u30B9\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08blocked_by \u6761\u4EF6\u306F\u6210\u7ACB\u6271\u3044\uFF1D\u6291\u6B62\u3057\u307E\u305B\u3093\uFF09`);
213
+ taskStatusCache.set(taskKey,statusId);return statusId};const exclusiveEnqueued=new Set;const enqueuedTaskKeys=new Set;let enqueued=0;const dropped=[];let lockLostMidway=false;for(const[stepIndex,step]of plan.steps.entries()){const item=stepToItem(step,config.ai);if(!item){dropped.push({skill:String(step.skill??""),task_key:null,reason:"step \u306E\u5F62\u304C\u4E0D\u6B63"});continue}if(!/^[a-z][a-z0-9-]*$/.test(step.skill)){log.log(` \u26A0\uFE0F \u30B9\u30AD\u30EB\u540D\u304C\u60F3\u5B9A\u306E\u6587\u5B57\u7A2E\u3067\u306F\u3042\u308A\u307E\u305B\u3093\uFF08skill='${step.
213
214
  skill}'\uFF09\u3002\u6642\u9593\u5E2F\u30B2\u30FC\u30C8\u3068\u30AB\u30C6\u30B4\u30EA\u5224\u5B9A\u304C\u52B9\u304D\u307E\u305B\u3093`)}const placeholder=placeholderTaskKey(step.args??"");if(placeholder!==null){log.log(` \u30A8\u30F3\u30AD\u30E5\u30FC\u6291\u6B62\uFF08\u30BF\u30B9\u30AF\u30AD\u30FC\u304C\u30D7\u30EC\u30FC\u30B9\u30DB\u30EB\u30C0\uFF09: ${step.skill} \u2014 args \u306B '${placeholder}' \u304C\u6B8B\u3063\u3066\u3044\u307E\u3059 | ${item.label}`);dropped.push({skill:step.skill,task_key:item.
214
215
  task_key||null,reason:"\u30BF\u30B9\u30AF\u30AD\u30FC\u304C\u30D7\u30EC\u30FC\u30B9\u30DB\u30EB\u30C0"});continue}const stepSkill=normalizeSkillName(step.skill??"");if(releaseSkill!==null&&stepSkill===releaseSkill&&releaseDeployDrop!==null){log.log(` \u30A8\u30F3\u30AD\u30E5\u30FC\u6291\u6B62\uFF08${releaseSkill} \u306E\u7A7A\u632F\u308A\u9632\u6B62\uFF09: ${releaseDeployDrop} | ${item.label}`);dropped.push({skill:step.skill,task_key:item.task_key||null,reason:`${releaseSkill} \u306E\u7A7A\u632F\u308A\u9632\u6B62`});
215
216
  continue}const zeroTargetReason=zeroTargetDrops.get(stepSkill);if(zeroTargetReason!==void 0){log.log(` \u30A8\u30F3\u30AD\u30E5\u30FC\u6291\u6B62\uFF08\u5BFE\u8C610\u4EF6\uFF09: ${step.skill} \u2014 ${zeroTargetReason} | ${item.label}`);dropped.push({skill:step.skill,task_key:item.task_key||null,reason:"\u5BFE\u8C610\u4EF6"});continue}if(item.task_key&&inflightKeys.has(item.task_key)){log.log(` \u30A8\u30F3\u30AD\u30E5\u30FC\u6291\u6B62\uFF08\u4ED6\u30E9\u30F3\u30CA\u30FC\u304C\u51E6\u7406\u4E2D\uFF09: ${step.
@@ -217,7 +218,7 @@ skill} \u2014 ${item.task_key} \u306F\u4ED6\u30E9\u30F3\u30CA\u30FC\u304C\u51E6\
217
218
  label}`);dropped.push({skill:step.skill,task_key:item.task_key||null,reason:"\u65E2\u306B\u30AD\u30E5\u30FC\u5F85\u3061"});continue}const duplicateKey=duplicateTaskKeyDropReason(enqueuedTaskKeys,item.task_key);if(duplicateKey!==null){log.log(` \u30A8\u30F3\u30AD\u30E5\u30FC\u6291\u6B62\uFF08\u540C\u4E00\u8A08\u753B\u5185\u306E\u91CD\u8907\u30AD\u30FC\uFF09: ${step.skill} \u2014 ${duplicateKey} | ${item.label}`);dropped.push({skill:step.skill,task_key:item.task_key||null,reason:"\u540C\u4E00\u8A08\u753B\u5185\u306E\u91CD\u8907\u30AD\u30FC"});
218
219
  continue}const excludedKey=excludedKeyInArgs(step.args??"",excludeKeys);if(excludedKey!==null){log.log(` \u30A8\u30F3\u30AD\u30E5\u30FC\u6291\u6B62\uFF08\u4EBA\u306B\u30DC\u30FC\u30EB\u304C\u3042\u308B\uFF09: ${step.skill} \u2014 ${excludedKey} \u306F\u672A\u56DE\u7B54\u306E\u8CEA\u554F\u3092\u6301\u3064\u4EBA\u9593\u5F85\u3061\u30BF\u30B9\u30AF | ${item.label}`);dropped.push({skill:step.skill,task_key:item.task_key||null,reason:"\u4EBA\u306B\u30DC\u30FC\u30EB\u304C\u3042\u308B"});continue}if(item.
219
220
  task_key){const advance=await recentAdvanceFor(item.task_key,step.skill);if(advance!==null){const gate2=shouldSuppressForStatus(advance,taskStatusSnapshot,config.operations.advancingOutcomes);if(gate2.suppress){log.log(` \u30A8\u30F3\u30AD\u30E5\u30FC\u6291\u6B62\uFF08\u524D\u56DE\u304C\u72B6\u614B\u3092\u9032\u3081\u305F\uFF09: ${step.skill} \u2014 ${item.task_key} \u306F ${formatRecentAdvance(advance)} | ${item.label}`);dropped.push({skill:step.skill,task_key:item.task_key||null,reason:"\u524D\u56DE\u304C\u72B6\u614B\
220
- \u3092\u9032\u3081\u305F"});continue}log.log(` \u6291\u6B62\u3092\u898B\u9001\u308A: ${step.skill} \u2014 ${item.task_key} \u306F ${formatRecentAdvance(advance)} \u3060\u304C ${gate2.reason} | ${item.label}`)}}if(item.task_key){const hold=await resumeHoldFor(item.task_key,step.skill);if(hold!==null){const gate2=await shouldSuppressForResume(hold,taskStatusSnapshot,prHeadLookup);if(gate2.suppress){log.log(` \u30A8\u30F3\u30AD\u30E5\u30FC\u6291\u6B62\uFF08\u518D\u958B\u6761\u4EF6\u304C\u672A\u6210\u7ACB\uFF09: ${step.
221
+ \u3092\u9032\u3081\u305F"});continue}log.log(` \u6291\u6B62\u3092\u898B\u9001\u308A: ${step.skill} \u2014 ${item.task_key} \u306F ${formatRecentAdvance(advance)} \u3060\u304C ${gate2.reason} | ${item.label}`)}}if(item.task_key){const hold=await resumeHoldFor(item.task_key,step.skill);if(hold!==null){const gate2=await shouldSuppressForResume(hold,taskStatusSnapshot,prHeadLookup,new Date,taskStatusLookup);if(gate2.suppress){log.log(` \u30A8\u30F3\u30AD\u30E5\u30FC\u6291\u6B62\uFF08\u518D\u958B\u6761\u4EF6\u304C\u672A\u6210\u7ACB\uFF09: ${step.
221
222
  skill} \u2014 ${item.task_key} \u306F ${formatResumeHold(hold)} | ${item.label}`);dropped.push({skill:step.skill,task_key:item.task_key||null,reason:"\u518D\u958B\u6761\u4EF6\u304C\u672A\u6210\u7ACB"});continue}log.log(` \u636E\u3048\u7F6E\u304D\u306E\u518D\u958B: ${step.skill} \u2014 ${item.task_key} \u306F ${formatResumeHold(hold)} \u3060\u304C ${gate2.reason} | ${item.label}`)}}const gate=await this.schedule.gateAllows(step.skill);if(!gate.allowed){log.log(` \u30A8\u30F3\u30AD\u30E5\u30FC\u6291\u6B62\uFF08\u6642\u9593\u5E2F\u30B2\u30FC\u30C8\uFF09: ${step.
222
223
  skill} \u2014 ${gate.reason} | ${item.label}`);dropped.push({skill:step.skill,task_key:item.task_key||null,reason:"\u6642\u9593\u5E2F\u30B2\u30FC\u30C8"});continue}if(this.planLock.isLost()){log.log(` \u26D4 \u30A8\u30F3\u30AD\u30E5\u30FC\u4E2D\u306B\u8A08\u753B\u30ED\u30C3\u30AF\u3092\u5931\u3044\u307E\u3057\u305F\uFF08reason=${this.planLock.lostReasonText()}\uFF09\u2192 \u3053\u3053\u3067\u4E2D\u6B62\u3057\u307E\u3059\uFF08\u6295\u5165\u6E08\u307F: ${enqueued}\u4EF6\uFF09`);lockLostMidway=true;
223
224
  for(const rest of plan.steps.slice(stepIndex)){dropped.push({skill:String(rest.skill??""),task_key:stepToItem(rest,config.ai)?.task_key||null,reason:"\u8A08\u753B\u30ED\u30C3\u30AF\u55AA\u5931\u3067\u672A\u51E6\u7406"})}break}const exclusiveSkill=config.ai.isExclusiveSkill(step.skill)?normalizeSkillName(step.skill):null;if(exclusiveSkill!==null){if(exclusiveEnqueued.has(exclusiveSkill)){log.log(` \u30A8\u30F3\u30AD\u30E5\u30FC\u6291\u6B62\uFF08\u5916\u90E8\u6295\u7A3F\u30B9\u30AD\u30EB\u306E\u540C\u6642\u5B9F\u884C\uFF09: ${step.
@@ -298,7 +299,7 @@ handlers.onRestart({from:decision.from,to:decision.to})};const timer=setInterval
298
299
  pid<=0)return null;return{pid,at:sanitizeAt(at)}}catch{return null}}function sanitizeAt(at){if(typeof at!=="string")return"";return at.replace(/[\u0000-\u001f\u007f]/g," ").slice(0,MAX_AT_LENGTH)}function clearMarker(lockDir2,kind,deps={}){const rm=deps.rmSync??(p=>fs8.rmSync(p,{recursive:true,force:true}));try{rm(markerPath(lockDir2,kind))}catch{}}function watchMarker(lockDir2,kind,selfPid,onStop,deps={}){let fired=false;const timer=setInterval(()=>{if(fired)return;const req=readMarker(lockDir2,kind,deps);if(req===null||req.pid!==selfPid)return;fired=true;onStop(req)},deps.intervalMs??POLL_MS);timer.unref?.();return()=>{fired=true;clearInterval(timer)}}function safe(s){return stripTerminalControls(s)}function compactTimestamp(at=new Date){const p2=n=>String(n).padStart(2,"0");return`${at.getFullYear()}${p2(at.getMonth()+1)}${p2(at.getDate())}-${p2(at.getHours())}${p2(at.getMinutes())}${p2(at.getSeconds())}`}async function buildEngine(config,log){if(config.engine==="noop")return new NoopEngine;const{DispatchEngine}=await import("./ai-dispatch-QKGK4P7P.js");const{DEFAULT_PREFLIGHT_HOSTS}=await import("./ai-dispatch-QKGK4P7P.js");const extraHosts=config.
299
300
  operations.preflightHosts;return new DispatchEngine(config.ai,log,{workspace:config.workspace,charterFile:config.charterFile??void 0,charterEnabled:config.charterEnabled,...config.charterPrefix===null?{}:{charterPrefix:config.charterPrefix},...config.charterSuffix===null?{}:{charterSuffix:config.charterSuffix},serverPrompts:()=>config.serverPrompts??{},compileCommand:config.compileCommand??void 0,skillOverlayDir:path7.join(config.stateDir,"skill-overlay",projectFileKey(config.projectId)),launcherBin:config.
300
301
  claudeLauncher.bin,...extraHosts.length>0?{preflightHosts:[...DEFAULT_PREFLIGHT_HOSTS,...extraHosts]}:{}})}function lockDir(config){return path7.join(config.stateDir,`task-loop-${projectFileKey(config.projectId)}.lock.d`)}function runnerIdPersisted(stateDir,env=process.env){if((env.RUNNER_ID?.trim()??"")!=="")return true;const file=env.RUNNER_ID_FILE&&env.RUNNER_ID_FILE.trim()!==""?env.RUNNER_ID_FILE:path7.join(stateDir,"runner-id");return fs9.existsSync(file)}async function runTaskLoop(opts){if(opts.
301
- action==="stop")return await stopLoop(opts);if(opts.action==="plan"){if(opts.planOp!=="submit"){process.stderr.write("plan \u306B\u306F submit \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\n");return 2}const{runPlanSubmit}=await import("./plan-submit-BBUR6LYU.js");return runPlanSubmit({file:opts.charterInput,empty:opts.planEmpty===true,check:opts.planCheck===true},{env:process.env,readStdin:()=>fs9.readFileSync(0,"utf8"),stdout:s=>process.stdout.write(s),stderr:s=>process.stderr.write(s)})}
302
+ action==="stop")return await stopLoop(opts);if(opts.action==="plan"){if(opts.planOp!=="submit"){process.stderr.write("plan \u306B\u306F submit \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\n");return 2}const{runPlanSubmit}=await import("./plan-submit-F5VH3T37.js");return runPlanSubmit({file:opts.charterInput,empty:opts.planEmpty===true,check:opts.planCheck===true},{env:process.env,readStdin:()=>fs9.readFileSync(0,"utf8"),stdout:s=>process.stdout.write(s),stderr:s=>process.stderr.write(s)})}
302
303
  const profile=resolveProfile(opts.profile);let creds;try{creds=new AuthSession(profile.name,profile.apiUrl).loadOrThrow()}catch(err){process.stderr.write(`${err.message}
303
304
  `);return 1}const apiUrl=effectiveApiUrl(profile,creds.api_url);const session=new AuthSession(profile.name,apiUrl);const projectRef=opts.project??process.env.TWP_PROJECT??"";if(projectRef===""){process.stderr.write("--project <\u30AD\u30FC|UUID> \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08TWP_PROJECT \u3067\u3082\u53EF\uFF09\n");return 2}const projectApi=new ProjectApi(apiUrl,session);let project;try{project=await projectApi.resolve(projectRef)}catch(err){process.stderr.write(`${err.
304
305
  message}
@@ -1,7 +1,7 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{activateModeFiles,activatePermissionSettings,buildResidentSet,buildSystemPrompt,createAuditLogger,createTwpToolkit,currentBranch,displayCwd,residentInputs,runTurn}from"./chunk-IMETEGK7.js";import"./chunk-NZ7WI4RZ.js";import"./chunk-N2UVRM3Z.js";import"./chunk-RSSPNFSK.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import"./chunk-IXT2X5BZ.js";import"./chunk-II5RVJQN.js";import"./chunk-VFPY2A23.js";
4
- import{RelayError,createRuntime,pickModel,specFor}from"./chunk-2QRQXKIM.js";import"./chunk-D233KKXW.js";import"./chunk-PMOUHEJQ.js";import"./chunk-XNLIEUAW.js";import"./chunk-J7QYPKVK.js";import{checkMinSupportedVersion,enforceMinSupportedVersion,floorNeedsRefresh}from"./chunk-DXXFUNYN.js";import"./chunk-EDF4U5BT.js";import"./chunk-RZVI6PMW.js";import{getMode}from"./chunk-2LOT54OO.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";
3
+ import{activateModeFiles,activatePermissionSettings,buildResidentSet,buildSystemPrompt,createAuditLogger,createTwpToolkit,currentBranch,displayCwd,residentInputs,runTurn}from"./chunk-4DUZIRGL.js";import"./chunk-NZ7WI4RZ.js";import"./chunk-N2UVRM3Z.js";import"./chunk-RSSPNFSK.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import"./chunk-IXT2X5BZ.js";import"./chunk-II5RVJQN.js";import"./chunk-VFPY2A23.js";
4
+ import{RelayError,createRuntime,pickModel,specFor}from"./chunk-LLBLGHHZ.js";import"./chunk-D233KKXW.js";import"./chunk-PMOUHEJQ.js";import"./chunk-XNLIEUAW.js";import"./chunk-J7QYPKVK.js";import{checkMinSupportedVersion,enforceMinSupportedVersion,floorNeedsRefresh}from"./chunk-DXXFUNYN.js";import"./chunk-EDF4U5BT.js";import"./chunk-RZVI6PMW.js";import{getMode}from"./chunk-2LOT54OO.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";
5
5
  import"./chunk-VSJBJXZO.js";async function runOneShot(opts,deps={}){const out=deps.out??(text=>void process.stdout.write(stripTerminalControls(text)));const err=deps.err??(text=>void process.stderr.write(stripTerminalControls(text)));activateModeFiles(err);const permissionLayers=activatePermissionSettings(err,{...opts.allowedTools?{allowedTools:opts.allowedTools}:{},...opts.disallowedTools?{disallowedTools:opts.disallowedTools}:{}});const prompt=opts.fromStdin?await(deps.readStdin??readStdin)():opts.prompt;if(prompt.trim()===
6
6
  ""){err('\u30D7\u30ED\u30F3\u30D7\u30C8\u304C\u7A7A\u3067\u3059\u3002`twp -p "\u8CEA\u554F"`\uFF08`-p -` \u3067\u6A19\u6E96\u5165\u529B\uFF09\n');return 2}const runtime=deps.runtime??createRuntime({...opts.profile!==void 0?{profile:opts.profile}:{},...opts.model!==void 0?{model:opts.model}:{},cliVersion:opts.version});const cachedFloor=runtime.loadCachedFloor();if(await checkMinSupportedVersion({current:opts.version,cachedFloor:cachedFloor.minSupportedVersion,refresh:async()=>(await runtime.loadCatalog()).
7
7
  minSupportedVersion,write:err})){return 1}if(!runtime.loggedIn){err("\u30ED\u30B0\u30A4\u30F3\u3057\u3066\u3044\u307E\u305B\u3093\u3002`twp login` \u3092\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044\u3002\n");return 1}let model=runtime.configuredModel??"";let catalog=null;if(model===""){catalog=await runtime.loadCatalog();const picked=pickModel(catalog,void 0);model=picked.model;if(catalog.source!=="server"){err(`\u26A0 \u30E2\u30C7\u30EB\u4E00\u89A7\u3092\u53D6\u5F97\u3067\u304D\u306A\u304B\u3063\u305F\u305F\u3081 ${model}\
@@ -1,4 +1,4 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{NO_PLAN_SESSION,PLAN_DIR_ENV,PLAN_TOKEN_ENV,checkPlan,fileSkillNames,formatCheck,openPlanSession,runPlanSubmit}from"./chunk-DXMWSUZA.js";import"./chunk-DR6BUZXT.js";import"./chunk-NXPLTDN4.js";import"./chunk-Y24FMUYU.js";import"./chunk-CVX2YWHC.js";import"./chunk-VYDPW2YO.js";import"./chunk-TTST7UDR.js";import"./chunk-FABDZBDZ.js";import"./chunk-6CS5L24D.js";import"./chunk-N2UVRM3Z.js";import"./chunk-O52RKZCC.js";import"./chunk-RMFLTSOV.js";
3
+ import{NO_PLAN_SESSION,PLAN_DIR_ENV,PLAN_TOKEN_ENV,checkPlan,fileSkillNames,formatCheck,openPlanSession,runPlanSubmit}from"./chunk-5LFUD7K3.js";import"./chunk-DR6BUZXT.js";import"./chunk-NXPLTDN4.js";import"./chunk-Y24FMUYU.js";import"./chunk-CVX2YWHC.js";import"./chunk-VYDPW2YO.js";import"./chunk-TTST7UDR.js";import"./chunk-FABDZBDZ.js";import"./chunk-6CS5L24D.js";import"./chunk-N2UVRM3Z.js";import"./chunk-O52RKZCC.js";import"./chunk-RMFLTSOV.js";
4
4
  import"./chunk-IXT2X5BZ.js";import"./chunk-II5RVJQN.js";import"./chunk-PMOUHEJQ.js";import"./chunk-J7QYPKVK.js";import"./chunk-5WGOHFAS.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";export{NO_PLAN_SESSION,PLAN_DIR_ENV,PLAN_TOKEN_ENV,checkPlan,fileSkillNames,formatCheck,openPlanSession,runPlanSubmit};
@@ -1,3 +1,3 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{fetchLatestVersion,isBehindLatest,runUpdate}from"./chunk-DVBFLDHZ.js";import"./chunk-2QRQXKIM.js";import"./chunk-D233KKXW.js";import"./chunk-PMOUHEJQ.js";import"./chunk-XNLIEUAW.js";import"./chunk-J7QYPKVK.js";import"./chunk-CH6QU76P.js";import"./chunk-DXXFUNYN.js";import"./chunk-5WGOHFAS.js";import"./chunk-EDF4U5BT.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";export{fetchLatestVersion,isBehindLatest,runUpdate};
3
+ import{fetchLatestVersion,isBehindLatest,runUpdate}from"./chunk-6EIW4KTU.js";import"./chunk-LLBLGHHZ.js";import"./chunk-D233KKXW.js";import"./chunk-PMOUHEJQ.js";import"./chunk-XNLIEUAW.js";import"./chunk-J7QYPKVK.js";import"./chunk-CH6QU76P.js";import"./chunk-DXXFUNYN.js";import"./chunk-5WGOHFAS.js";import"./chunk-EDF4U5BT.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";export{fetchLatestVersion,isBehindLatest,runUpdate};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tocca-systems/twp-cli",
3
- "version": "0.85.1",
3
+ "version": "0.85.3",
4
4
  "description": "TWP CLI — Tocca Working Platform の CLI 型統合インターフェース(AIエージェントハーネス)",
5
5
  "type": "module",
6
6
  "bin": {