@tocca-systems/twp-cli 0.20.0 → 0.22.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.
Files changed (52) hide show
  1. package/CHANGELOG.public.md +12 -0
  2. package/README.md +55 -4
  3. package/command-model/user-management.json +1137 -2
  4. package/dist/{ai-dispatch-PNA4UF4I.js → ai-dispatch-VSCKUY6J.js} +33 -33
  5. package/dist/{api-command-2OPQMSTE.js → api-command-Q2CSB4PV.js} +3 -3
  6. package/dist/{app-FZT4U3VG.js → app-THTQX3A5.js} +70 -71
  7. package/dist/{auto-update-CV2MM32C.js → auto-update-FBZGOQFI.js} +1 -1
  8. package/dist/{auto-update-worker-ML7EBNQW.js → auto-update-worker-Z3XKBFMQ.js} +2 -2
  9. package/dist/{backlog-NV7Z76R3.js → backlog-X2MQTA6F.js} +2 -2
  10. package/dist/charter-command-UPKTVL7H.js +36 -0
  11. package/dist/{chunk-DEVIQH5U.js → chunk-24ZZFFA3.js} +1 -1
  12. package/dist/chunk-3XG457E3.js +12 -0
  13. package/dist/{chunk-3SNMDSCW.js → chunk-5ISIXBKD.js} +91 -70
  14. package/dist/{chunk-ILKQDXI5.js → chunk-DSDVIU6A.js} +1 -1
  15. package/dist/chunk-E4H22AO5.js +3 -0
  16. package/dist/chunk-I2QFW7EK.js +30 -0
  17. package/dist/chunk-JB27KNCX.js +52 -0
  18. package/dist/{chunk-GTABFTZP.js → chunk-JDMNIUVX.js} +1 -1
  19. package/dist/chunk-K2ONOH3L.js +9 -0
  20. package/dist/chunk-ODLJ2LNQ.js +13 -0
  21. package/dist/chunk-PEGUHUTD.js +3 -0
  22. package/dist/{chunk-FOFV2MNL.js → chunk-PI5DUWNZ.js} +1 -1
  23. package/dist/chunk-RKJ6B2KL.js +56 -0
  24. package/dist/chunk-TYNCXQSN.js +38 -0
  25. package/dist/{chunk-N56AWWTM.js → chunk-UG2I6VRD.js} +2 -12
  26. package/dist/chunk-VRBI2NPI.js +15 -0
  27. package/dist/{chunk-5QCAIKFE.js → chunk-X4RS5VBH.js} +1 -1
  28. package/dist/{chunk-BYRM4NSC.js → chunk-XLE4HW6B.js} +1 -1
  29. package/dist/chunk-Y2QAP6SU.js +15 -0
  30. package/dist/cli.js +22 -10
  31. package/dist/{commands-EWRHQZYM.js → commands-ET4F34OD.js} +26 -25
  32. package/dist/{commands-7D5EEQBY.js → commands-NXBQ5OWL.js} +12 -7
  33. package/dist/format-NMW6Y2E5.js +3 -0
  34. package/dist/{logout-guard-Q4MQFEGR.js → logout-guard-CMZZBRUL.js} +1 -1
  35. package/dist/{oneshot-AXS5LWUY.js → oneshot-QVFA2SUM.js} +2 -2
  36. package/dist/{project-BATJQR3F.js → project-2LJZW747.js} +1 -1
  37. package/dist/query-NJMVSQR6.js +3 -0
  38. package/dist/render-XMVI3AKB.js +3 -0
  39. package/dist/run-IS46BQBB.js +4 -0
  40. package/dist/{schedule-command-YPKIO3FK.js → schedule-command-GKXKNMLG.js} +1 -1
  41. package/dist/server-settings-CG3EM7R7.js +3 -0
  42. package/dist/{setup-ROGEF3UO.js → setup-UI6V2Q3V.js} +1 -1
  43. package/dist/{task-6QUH5OXF.js → task-GKNM3G4K.js} +2 -2
  44. package/dist/{update-EXFIHTMW.js → update-3QHRK5BP.js} +1 -1
  45. package/dist/user-EU7Z3DAO.js +24 -0
  46. package/package.json +1 -1
  47. package/dist/chunk-MIMDLO52.js +0 -43
  48. package/dist/chunk-NWABK3RZ.js +0 -36
  49. package/dist/chunk-OVYHOZ3C.js +0 -27
  50. package/dist/chunk-SPZO6C5N.js +0 -69
  51. package/dist/chunk-ZGG7TRAM.js +0 -3
  52. package/dist/run-2OQQAOHL.js +0 -4
@@ -1,8 +1,8 @@
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,currentBranch,describeAuditLog,displayCwd,executeTool,findProjectTwpSubdir,localTools,lstatOrNull,parseFrontMatter,parseRule,readFileTool,resolveGitExecutable,runTurn,secretReason}from"./chunk-3SNMDSCW.js";import{isFullWidth,isWide,stringWidth,stripAnsi}from"./chunk-WVS4W5FY.js";import"./chunk-N2UVRM3Z.js";import{parseArgv}from"./chunk-OVYHOZ3C.js";import{
4
- applyPermissionMode,checkPermission,describePermissionMode,getMode,isModeId,modeSource,nextMode}from"./chunk-BOBSH3QN.js";import"./chunk-ZGG7TRAM.js";import"./chunk-QQRJLH6B.js";import{RelayError,builtinCatalog,createRuntime,loadCachedCatalog,modelLabel,pickModel,toModelInfos}from"./chunk-FOFV2MNL.js";import"./chunk-XNLIEUAW.js";import"./chunk-PMOUHEJQ.js";import{checkMinSupportedVersion,isBelowMinSupported,minSupportedBlockMessage}from"./chunk-DXXFUNYN.js";
5
- import{require_fuzzysort}from"./chunk-DIMZRTLE.js";import{proxyDiagnostics}from"./chunk-J7QYPKVK.js";import"./chunk-NERYSBA4.js";import{configReadDirs,twpHomeDir}from"./chunk-RZVI6PMW.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.
3
+ import{buildDiffLines,diffStat}from"./chunk-VRBI2NPI.js";import{RESIDENT_TOKEN_CAP,activateModeFiles,activatePermissionSettings,buildResidentSet,buildSystemPrompt,createAuditLogger,currentBranch,describeAuditLog,displayCwd,executeTool,findProjectTwpSubdir,localTools,lstatOrNull,parseFrontMatter,parseRule,persistProjectAllow,projectPermissionsPath,projectRootFor,readFileTool,resolveGitExecutable,runTurn,secretReason}from"./chunk-5ISIXBKD.js";import"./chunk-N2UVRM3Z.js";import{parseArgv}from"./chunk-I2QFW7EK.js";
4
+ import{applyPermissionMode,checkPermission,describePermissionMode,getMode,isModeId,modeSource,nextMode}from"./chunk-BOBSH3QN.js";import"./chunk-PEGUHUTD.js";import"./chunk-QQRJLH6B.js";import{RelayError,builtinCatalog,createRuntime,loadCachedCatalog,modelLabel,pickModel,toModelInfos}from"./chunk-PI5DUWNZ.js";import"./chunk-XNLIEUAW.js";import{proxyDiagnostics}from"./chunk-J7QYPKVK.js";import"./chunk-PMOUHEJQ.js";import{checkMinSupportedVersion,isBelowMinSupported,
5
+ minSupportedBlockMessage}from"./chunk-DXXFUNYN.js";import"./chunk-NERYSBA4.js";import{configReadDirs,twpHomeDir}from"./chunk-RZVI6PMW.js";import{require_fuzzysort}from"./chunk-DIMZRTLE.js";import{isFullWidth,isWide,stringWidth,stripAnsi}from"./chunk-WVS4W5FY.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.
6
6
  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]||
7
7
  maybeIterable["@@iterator"];return"function"===typeof maybeIterable?maybeIterable:null}var ReactNoopUpdateQueue={isMounted:function(){return false},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}};var assign=Object.assign;var emptyObject={};function Component(props,context,updater){this.props=props;this.context=context;this.refs=emptyObject;this.updater=updater||ReactNoopUpdateQueue}Component.prototype.isReactComponent={};Component.prototype.setState=
8
8
  function(partialState,callback){if("object"!==typeof partialState&&"function"!==typeof partialState&&null!=partialState)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,partialState,callback,"setState")};Component.prototype.forceUpdate=function(callback){this.updater.enqueueForceUpdate(this,callback,"forceUpdate")};function ComponentDummy(){}ComponentDummy.prototype=Component.prototype;function PureComponent2(props,context,updater){
@@ -1060,12 +1060,12 @@ i);if(ch===CC_BEL)return i;if(ch===CC_C1_ST)return i;if(ch===CC_ESC&&i+1<string.
1060
1060
  if(endIndex===-1)return;return string.slice(0,endIndex+1)}function splitCompoundSGRSequences(code){if(!code.includes(";")){return[code]}const codeParts=code.slice(2,-1).split(";");const ret=[];for(let i=0;i<codeParts.length;i++){const rawCode=codeParts[i];if(rawCode==="38"||rawCode==="48"){if(i+2<codeParts.length&&codeParts[i+1]==="5"){ret.push(codeParts.slice(i,i+3).join(";"));i+=2;continue}else if(i+4<codeParts.length&&codeParts[i+1]==="2"){ret.push(codeParts.slice(i,i+5).join(";"));i+=4;continue}}
1061
1061
  ret.push(rawCode)}return ret.map(part=>`\x1B[${part}m`)}function tokenize(str2,endChar=Number.POSITIVE_INFINITY){const ret=[];let visible=0;let codeEndIndex=0;for(const{segment,index}of segmenter2.segment(str2)){if(index<codeEndIndex)continue;const codePoint=segment.codePointAt(0);if(ESCAPES3.has(codePoint)){let code;const nextCodePoint=str2.codePointAt(index+1);if(nextCodePoint===CC_OSC){code=parseLinkCode(str2,index);if(code){ret.push({type:"ansi",code,endCode:getEndCode(code)})}else{code=parseOSCSequence(
1062
1062
  str2,index);if(code){ret.push({type:"control",code})}}}else if(nextCodePoint===CC_CSI){code=parseSGRSequence(str2,index);if(code){const codes=splitCompoundSGRSequences(code);for(const individualCode of codes){ret.push({type:"ansi",code:individualCode,endCode:getEndCode(individualCode)})}}}if(code){codeEndIndex=index+code.length;continue}}const fullWidth=isFullwidthGrapheme(segment,codePoint);ret.push({type:"char",value:segment,fullWidth});visible+=fullWidth?2:1;if(visible>=endChar){break}}return ret}var OutputCaches=class{widths=new Map;blockWidths=new Map;styledChars=new Map;getStyledChars(line){let cached=this.styledChars.get(line);if(cached===void 0){cached=styledCharsFromTokens(tokenize(line));this.styledChars.set(line,cached)}return cached}getStringWidth(text){let cached=this.widths.get(text);if(cached===void 0){cached=stringWidth(text);this.widths.set(text,cached)}return cached}getWidestLine(text){let cached=this.blockWidths.get(text);if(cached===void 0){let lineWidth=0;for(const line of text.
1063
- split("\n")){lineWidth=Math.max(lineWidth,this.getStringWidth(line))}cached=lineWidth;this.blockWidths.set(text,cached)}return cached}};var Output=class{width;height;operations=[];caches=new OutputCaches;constructor(options){const{width,height}=options;this.width=width;this.height=height}write(x,y,text,options){const{transformers}=options;if(!text){return}this.operations.push({type:"write",x,y,text,transformers})}clip(clip){this.operations.push({type:"clip",clip})}unclip(){this.operations.push({
1064
- type:"unclip"})}get(){const output=[];for(let y=0;y<this.height;y++){const row=[];for(let x=0;x<this.width;x++){row.push({type:"char",value:" ",fullWidth:false,styles:[]})}output.push(row)}const clips=[];for(const operation of this.operations){if(operation.type==="clip"){clips.push(operation.clip)}if(operation.type==="unclip"){clips.pop()}if(operation.type==="write"){const{text,transformers}=operation;let{x,y}=operation;let lines=text.split("\n");const clip=clips.at(-1);if(clip){const clipHorizontally=typeof clip?.
1065
- x1==="number"&&typeof clip?.x2==="number";const clipVertically=typeof clip?.y1==="number"&&typeof clip?.y2==="number";if(clipHorizontally){const width=this.caches.getWidestLine(text);if(x+width<clip.x1||x>clip.x2){continue}}if(clipVertically){const height=lines.length;if(y+height<clip.y1||y>clip.y2){continue}}if(clipHorizontally){lines=lines.map(line=>{const from=x<clip.x1?clip.x1-x:0;const width=this.caches.getStringWidth(line);const to=x+width>clip.x2?clip.x2-x:width;return sliceAnsi(line,from,
1066
- to)});if(x<clip.x1){x=clip.x1}}if(clipVertically){const from=y<clip.y1?clip.y1-y:0;const height=lines.length;const to=y+height>clip.y2?clip.y2-y:height;lines=lines.slice(from,to);if(y<clip.y1){y=clip.y1}}}let offsetY=0;for(let[index,line]of lines.entries()){const currentLine=output[y+offsetY];if(!currentLine){continue}for(const transformer of transformers){line=transformer(line,index)}const characters=this.caches.getStyledChars(line);let offsetX=x;if(characters.length===0){offsetY++;continue}const spaceCell={
1067
- type:"char",value:" ",fullWidth:false,styles:[]};if(currentLine[offsetX]?.value===""&&offsetX>0&&this.caches.getStringWidth(currentLine[offsetX-1]?.value??"")>1){currentLine[offsetX-1]=spaceCell}for(const character of characters){currentLine[offsetX]=character;const characterWidth=Math.max(1,this.caches.getStringWidth(character.value));if(characterWidth>1){for(let index2=1;index2<characterWidth;index2++){currentLine[offsetX+index2]={type:"char",value:"",fullWidth:false,styles:character.styles}}}
1068
- offsetX+=characterWidth}if(currentLine[offsetX]?.value===""){currentLine[offsetX]=spaceCell}offsetY++}}}const generatedOutput=output.map(line=>{const lineWithoutEmptyItems=line.filter(item=>item!==void 0);return styledCharsToString(lineWithoutEmptyItems).trimEnd()}).join("\n");return{output:generatedOutput,height:output.length}}};var renderer=(node,isScreenReaderEnabled)=>{if(node.yogaNode){if(isScreenReaderEnabled){const output2=renderNodeToScreenReaderOutput(node,{skipStaticElements:true});const outputHeight2=output2===""?0:output2.split("\n").length;let staticOutput2="";if(node.staticNode){staticOutput2=renderNodeToScreenReaderOutput(node.staticNode,{skipStaticElements:false})}return{output:output2,outputHeight:outputHeight2,staticOutput:staticOutput2?`${staticOutput2}
1063
+ split("\n")){lineWidth=Math.max(lineWidth,this.getStringWidth(line))}cached=lineWidth;this.blockWidths.set(text,cached)}return cached}};var Output=class{width;height;operations=[];caches=new OutputCaches;constructor(options){const{width,height}=options;this.width=width;this.height=height}write(x,y,text,options){const{transformers}=options;if(!text){return}this.operations.push({type:"write",x,y,text,transformers})}clip(clip2){this.operations.push({type:"clip",clip:clip2})}unclip(){this.operations.
1064
+ push({type:"unclip"})}get(){const output=[];for(let y=0;y<this.height;y++){const row=[];for(let x=0;x<this.width;x++){row.push({type:"char",value:" ",fullWidth:false,styles:[]})}output.push(row)}const clips=[];for(const operation of this.operations){if(operation.type==="clip"){clips.push(operation.clip)}if(operation.type==="unclip"){clips.pop()}if(operation.type==="write"){const{text,transformers}=operation;let{x,y}=operation;let lines=text.split("\n");const clip2=clips.at(-1);if(clip2){const clipHorizontally=typeof clip2?.
1065
+ x1==="number"&&typeof clip2?.x2==="number";const clipVertically=typeof clip2?.y1==="number"&&typeof clip2?.y2==="number";if(clipHorizontally){const width=this.caches.getWidestLine(text);if(x+width<clip2.x1||x>clip2.x2){continue}}if(clipVertically){const height=lines.length;if(y+height<clip2.y1||y>clip2.y2){continue}}if(clipHorizontally){lines=lines.map(line=>{const from=x<clip2.x1?clip2.x1-x:0;const width=this.caches.getStringWidth(line);const to=x+width>clip2.x2?clip2.x2-x:width;return sliceAnsi(
1066
+ line,from,to)});if(x<clip2.x1){x=clip2.x1}}if(clipVertically){const from=y<clip2.y1?clip2.y1-y:0;const height=lines.length;const to=y+height>clip2.y2?clip2.y2-y:height;lines=lines.slice(from,to);if(y<clip2.y1){y=clip2.y1}}}let offsetY=0;for(let[index,line]of lines.entries()){const currentLine=output[y+offsetY];if(!currentLine){continue}for(const transformer of transformers){line=transformer(line,index)}const characters=this.caches.getStyledChars(line);let offsetX=x;if(characters.length===0){offsetY++;
1067
+ continue}const spaceCell={type:"char",value:" ",fullWidth:false,styles:[]};if(currentLine[offsetX]?.value===""&&offsetX>0&&this.caches.getStringWidth(currentLine[offsetX-1]?.value??"")>1){currentLine[offsetX-1]=spaceCell}for(const character of characters){currentLine[offsetX]=character;const characterWidth=Math.max(1,this.caches.getStringWidth(character.value));if(characterWidth>1){for(let index2=1;index2<characterWidth;index2++){currentLine[offsetX+index2]={type:"char",value:"",fullWidth:false,
1068
+ styles:character.styles}}}offsetX+=characterWidth}if(currentLine[offsetX]?.value===""){currentLine[offsetX]=spaceCell}offsetY++}}}const generatedOutput=output.map(line=>{const lineWithoutEmptyItems=line.filter(item=>item!==void 0);return styledCharsToString(lineWithoutEmptyItems).trimEnd()}).join("\n");return{output:generatedOutput,height:output.length}}};var renderer=(node,isScreenReaderEnabled)=>{if(node.yogaNode){if(isScreenReaderEnabled){const output2=renderNodeToScreenReaderOutput(node,{skipStaticElements:true});const outputHeight2=output2===""?0:output2.split("\n").length;let staticOutput2="";if(node.staticNode){staticOutput2=renderNodeToScreenReaderOutput(node.staticNode,{skipStaticElements:false})}return{output:output2,outputHeight:outputHeight2,staticOutput:staticOutput2?`${staticOutput2}
1069
1069
  `:""}}const output=new Output({width:node.yogaNode.getComputedWidth(),height:node.yogaNode.getComputedHeight()});render_node_to_output_default(node,output,{skipStaticElements:true});let staticOutput;if(node.staticNode?.yogaNode){staticOutput=new Output({width:node.staticNode.yogaNode.getComputedWidth(),height:node.staticNode.yogaNode.getComputedHeight()});render_node_to_output_default(node.staticNode,staticOutput,{skipStaticElements:false})}const{output:generatedOutput,height:outputHeight}=output.
1070
1070
  get();return{output:generatedOutput,outputHeight,staticOutput:staticOutput?`${staticOutput.get().output}
1071
1071
  `:""}}return{output:"",outputHeight:0,staticOutput:""}};var renderer_default=renderer;var showCursorEscape="\x1B[?25h";var hideCursorEscape="\x1B[?25l";var cursorPositionChanged=(a,b)=>a?.x!==b?.x||a?.y!==b?.y;var buildCursorSuffix=(visibleLineCount2,cursorPosition)=>{if(!cursorPosition){return""}const moveUp=visibleLineCount2-cursorPosition.y;return(moveUp>0?base_exports.cursorUp(moveUp):"")+base_exports.cursorTo(cursorPosition.x)+showCursorEscape};var buildReturnToBottom=(previousLineCount,previousCursorPosition)=>{if(!previousCursorPosition){return""}const down=previousLineCount-1-previousCursorPosition.y;return(down>0?base_exports.cursorDown(
@@ -1211,7 +1211,7 @@ cwd()){const listed=await gitListFiles(cwd2);const raw=listed??await walkFiles(c
1211
1211
  1;const after=/^[^\s]*/.exec(text.slice(cursor))?.[0]??"";return{query,start,end:cursor+after.length}}var TWP_SLASH_ROUTES={"/tasks":{domain:"task",operation:"list"},"/task":{domain:"task",operation:"get"},"/projects":{domain:"project",operation:"list"}};function isTwpSlashCommand(name){return Object.hasOwn(TWP_SLASH_ROUTES,name)}async function runTwpSlashCommand(name,args,deps){const route=TWP_SLASH_ROUTES[name];if(!Object.hasOwn(TWP_SLASH_ROUTES,name)||route===void 0){return{code:2,out:"",err:`\u4E0D\u660E\u306A\u30B3\u30DE\u30F3\u30C9: ${name}
1212
1212
  `}}const parsed=parseArgv([route.domain,route.operation,...args]);if(parsed.command!=="domain"||parsed.domain!==route.domain){return{code:2,out:"",err:`${name}: \u3053\u306E\u5F15\u6570\u306F\u4F7F\u3048\u307E\u305B\u3093\uFF08${args.join(" ")}\uFF09
1213
1213
  `}}if(parsed.unknown.length>0){return{code:2,out:"",err:`\u4E0D\u660E\u306A\u5F15\u6570: ${parsed.unknown.join(" ")}
1214
- `}}let out="";let err="";const io={out:text=>void(out+=text),err:text=>void(err+=text),isTty:true};const globals={profile:parsed.profile??deps.profile,...parsed.output!==void 0?{output:parsed.output}:{},...parsed.query!==void 0?{query:parsed.query}:{},dryRun:parsed.dryRun,debug:parsed.debug,yes:parsed.yes,refresh:parsed.refresh};const{runDomain}=await import("./run-2OQQAOHL.js");try{const code=await runDomain({domain:route.domain,...parsed.operation!==void 0?{operation:parsed.operation}:
1214
+ `}}let out="";let err="";const io={out:text=>void(out+=text),err:text=>void(err+=text),isTty:true};const globals={profile:parsed.profile??deps.profile,...parsed.output!==void 0?{output:parsed.output}:{},...parsed.query!==void 0?{query:parsed.query}:{},dryRun:parsed.dryRun,debug:parsed.debug,yes:parsed.yes,refresh:parsed.refresh};const{runDomain}=await import("./run-IS46BQBB.js");try{const code=await runDomain({domain:route.domain,...parsed.operation!==void 0?{operation:parsed.operation}:
1215
1215
  {},argv:parsed.domainArgv,help:parsed.domainHelp,globals,version:deps.version,io,...deps.fetchImpl!==void 0?{fetchImpl:deps.fetchImpl}:{}});return{code,out,err}}catch(e){return{code:1,out,err:`${err}${e.message}
1216
1216
  `}}}var GIT_LOG_OUTPUT=["9f3c1a2 feat(ui): \u4E00\u89A7\u306E\u30D5\u30A3\u30EB\u30BF\u3092 URL \u30AF\u30A8\u30EA\u3068\u540C\u671F\u3059\u308B","4b8e0d7 fix(ui): \u4EEE\u60F3\u30B9\u30AF\u30ED\u30FC\u30EB\u306E\u884C\u9AD8\u3055\u3092\u5B9F\u6E2C\u5024\u306B\u5408\u308F\u305B\u308B","c15a99e refactor(api): \u4E00\u89A7\u53D6\u5F97\u306E\u30DA\u30FC\u30B8\u30F3\u30B0\u51E6\u7406\u3092\u5171\u901A\u5316\u3059\u308B","2d70f4b test: \u4E00\u89A7\u30D5\u30A3\u30EB\u30BF\u306E\u56DE\u5E30\u30C6\u30B9\u30C8\u3092\u8FFD\u52A0\u3059\u308B",
1217
1217
  "a6e2b38 fix(api): \u7A7A\u306E\u691C\u7D22\u6761\u4EF6\u3067\u5168\u4EF6\u8FD4\u3089\u306A\u3044\u3088\u3046\u306B\u3059\u308B","7c40d51 chore(deps): \u958B\u767A\u4F9D\u5B58\u3092\u6700\u65B0\u3078\u66F4\u65B0\u3059\u308B","e83b1c6 docs: \u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u624B\u9806\u306B Node 22 \u306E\u524D\u63D0\u3092\u8FFD\u8A18\u3059\u308B","b91f7a4 fix(ui): \u30E2\u30FC\u30C0\u30EB\u306E\u91CD\u306A\u308A\u9806\u3092\u6307\u5B9A\u3059\u308B","5a2c8e0 perf(api): \u4E00\u89A7\u306E N+1 \u3092\u89E3\u6D88\u3059\u308B",
@@ -1236,7 +1236,13 @@ return rows}function fitTailRows(text,columns,budget){const limit=Math.max(1,bud
1236
1236
  for(let pass=0;pass<3;pass++){const avail=Math.max(1,limit-reserve);({start,end}=windowAround(total,cursorRow,avail));const need=Math.min((start>0?1:0)+(end<total?1:0),Math.max(0,limit-1));if(need===reserve)break;reserve=need}return{rows:rows.slice(start,end),hiddenAbove:start,hiddenBelow:total-end,markerRows:reserve,cursorRow:cursorRow-start,cursorCol,totalRows:total,shownRows:end-start+reserve}}function windowAround(count,anchor,limit){const a=Math.max(0,Math.min(anchor,count-1));let start=a;while(start>
1237
1237
  0&&a-start+1<limit)start--;let end=a+1;while(end<count&&end-start<limit)end++;return{start,end}}function layoutInputRows(value,cursor,columns){const width=Math.max(1,columns);const clamped=Math.max(0,Math.min(cursor,value.length));const rows=[];let cursorRow=0;let cursorCol=0;let offset=0;for(const line of value.split("\n")){const segs=wrapHard(line,width);let segStart=0;for(let si=0;si<segs.length;si++){const seg=segs[si]??"";rows.push({text:seg,start:offset+segStart,firstOfInput:rows.length===
1238
1238
  0});const segEnd=segStart+seg.length;const cin=clamped-offset;const inLine=clamped>=offset&&clamped<=offset+line.length;if(inLine&&cin>=segStart&&(cin<segEnd||si===segs.length-1&&cin===segEnd)){cursorRow=rows.length-1;cursorCol=cin-segStart}segStart=segEnd}const lastSeg=segs[segs.length-1]??"";if(line!==""&&clamped===offset+line.length&&stringWidth(lastSeg)>=width){rows.push({text:"",start:offset+line.length,firstOfInput:false});cursorRow=rows.length-1;cursorCol=0}offset+=line.length+1}return{rows,
1239
- cursorRow,cursorCol}}function prevBoundary(text,cursor){const i=Math.max(0,Math.min(cursor,text.length));if(i===0)return 0;const chars=Array.from(text.slice(0,i));const last=chars[chars.length-1]??"";return i-last.length}function nextBoundary(text,cursor){const i=Math.max(0,Math.min(cursor,text.length));if(i>=text.length)return text.length;const cp=text.codePointAt(i)??0;return i+(cp>65535?2:1)}import{readFileSync as readFileSync2}from"fs";import{homedir,userInfo}from"os";import{join}from"path";function displayName(){const fromEnv=process.env["GIT_AUTHOR_NAME"]??process.env["GIT_COMMITTER_NAME"];if(fromEnv)return fromEnv;const fromGitConfig=readGitUserName(join(homedir(),".gitconfig"));if(fromGitConfig)return fromGitConfig;try{return userInfo().username}catch{return"there"}}function readGitUserName(path3){let text;try{text=readFileSync2(path3,"utf8")}catch{return null}let inUser=false;
1239
+ cursorRow,cursorCol}}function prevBoundary(text,cursor){const i=Math.max(0,Math.min(cursor,text.length));if(i===0)return 0;const chars=Array.from(text.slice(0,i));const last=chars[chars.length-1]??"";return i-last.length}function nextBoundary(text,cursor){const i=Math.max(0,Math.min(cursor,text.length));if(i>=text.length)return text.length;const cp=text.codePointAt(i)??0;return i+(cp>65535?2:1)}var MAX_DETAILS=6;var MAX_VALUE=60;var TARGET_KEYS=["task_key","key","task_id","id","project_code","project_id","comment_id","user_id"];var TITLE_KEYS=["subject","title","name"];var DESTRUCTIVE=/(^|_)(delete|remove|destroy|archive|purge|revoke|close|cancel|reset)(_|$)/;function isTwpTool(name){return name.startsWith("twp_")&&name!=="twp_call"}function toolCardFor(name,input){const used=new Set;const pick=keys=>{for(const key of keys){const value=input[key];if(typeof value==="string"&&value.trim()!==
1240
+ ""||typeof value==="number"){used.add(key);return clip(String(value))}}return null};const target=pick(TARGET_KEYS);const title=pick(TITLE_KEYS);const headline=[clip(name),target].filter(p=>p!==null).join(" ")+(title===null?"":`\u300C${title}\u300D`);const details=Object.entries(input).filter(([key])=>!used.has(key)).slice(0,MAX_DETAILS).map(([key,value])=>`${clip(key)}: ${clip(typeof value==="string"?value:JSON.stringify(value)??String(value))}`);const rest=Object.keys(input).length-used.size-details.
1241
+ length;if(rest>0)details.push(`\u2026 \u4ED6 ${rest} \u9805\u76EE`);return{headline,destructive:DESTRUCTIVE.test(name),details}}function clip(text){const flat=stripTerminalControls(text).replace(/\s+/g," ").trim();return flat.length>MAX_VALUE?`${flat.slice(0,MAX_VALUE)}\u2026`:flat}var INITIAL_DIALOG_STATE={stage:"choose",selected:0,text:""};function scopeItems(spec){if(spec.noAlwaysReason)return[];return[{key:"session",label:`\u3053\u306E\u30BB\u30C3\u30B7\u30E7\u30F3\u4E2D\u306F ${spec.name} \u3092\u78BA\u8A8D\u3057\u306A\u3044`,answer:"always"},...(spec.persistOptions??[]).map((o,i)=>({key:`persist${i}`,label:o.label,answer:{kind:"persist",rule:o.rule}}))]}function topItems(spec){return[{key:"yes",label:"\u306F\u3044\uFF08\u4ECA\u56DE\u3060\u3051\uFF09"},...scopeItems(spec).
1242
+ length>0?[{key:"always",label:"\u306F\u3044\u3001\u4ECA\u5F8C\u805E\u304B\u306A\u3044\u2026"}]:[],spec.allowInstead===false?{key:"no",label:"\u3044\u3044\u3048\uFF08\u62D2\u5426\uFF09"}:{key:"instead",label:"\u3044\u3044\u3048\u3001\u4EE3\u308F\u308A\u306B\u3053\u3046\u3057\u3066\u2026"}]}function itemsFor(state,spec){if(state.stage==="scope")return scopeItems(spec);if(state.stage==="instead")return[];return topItems(spec)}function stepDialog(state,ev,spec){if(state.stage==="instead"){if(ev.name===
1243
+ "escape")return{state:{...state,stage:"choose",selected:indexOf(topItems(spec),"instead")}};if(ev.name==="enter"){const text=state.text.trim();return{answer:text===""?"no":{kind:"instead",text}}}if(ev.name==="backspace")return{state:{...state,text:Array.from(state.text).slice(0,-1).join("")}};if((ev.name==="char"||ev.name==="paste")&&ev.value){const added=stripTerminalControls(ev.value.replace(/\r\n?|\n/g," "));return{state:{...state,text:state.text+added}}}return{state}}const items=itemsFor(state,
1244
+ spec);const choose=index=>{const item=items[index];if(item===void 0)return{state};if(state.stage==="scope"){const scope=scopeItems(spec)[index];return scope?{answer:scope.answer}:{state}}if(item.key==="yes")return{answer:"yes"};if(item.key==="no")return{answer:"no"};if(item.key==="always")return{state:{...state,stage:"scope",selected:0}};return{state:{...state,stage:"instead",selected:0}}};if(ev.name==="up")return{state:{...state,selected:Math.max(0,state.selected-1)}};if(ev.name==="down")return{
1245
+ state:{...state,selected:Math.min(items.length-1,state.selected+1)}};if(ev.name==="enter")return choose(state.selected);if(ev.name==="escape"){return state.stage==="scope"?{state:{...state,stage:"choose",selected:indexOf(topItems(spec),"always")}}:{answer:"no"}}if(ev.name==="char"&&ev.value&&/^[1-9]$/.test(ev.value)){const index=Number(ev.value)-1;return index<items.length?choose(index):{state}}return{state}}function indexOf(items,key){return Math.max(0,items.findIndex(i=>i.key===key))}import{readFileSync as readFileSync2}from"fs";import{homedir,userInfo}from"os";import{join}from"path";function displayName(){const fromEnv=process.env["GIT_AUTHOR_NAME"]??process.env["GIT_COMMITTER_NAME"];if(fromEnv)return fromEnv;const fromGitConfig=readGitUserName(join(homedir(),".gitconfig"));if(fromGitConfig)return fromGitConfig;try{return userInfo().username}catch{return"there"}}function readGitUserName(path3){let text;try{text=readFileSync2(path3,"utf8")}catch{return null}let inUser=false;
1240
1246
  for(const raw of text.split("\n")){const line=raw.trim();if(line.startsWith("[")){inUser=line.startsWith("[user");continue}if(!inUser)continue;const m=/^name\s*=\s*(.+)$/.exec(line);if(m?.[1])return m[1].trim()}return null}var LOGO=["\u2580\u2588\u2580 \u2584 \u2584 \u2588\u2580\u2580\u2584"," \u2588 \u2588\u2584\u2588\u2584\u2588 \u2588\u2580\u2580\u2598"," \u2588 \u2580 \u2580 \u2588 "];function buildBanner(opts){const cwd2=displayCwd();return{title:`twp-cli v${opts.version}`,welcome:`Welcome back ${displayName()}!`,logo:LOGO,meta:[`${modelLabel(opts.model)} \xB7 Tocca Systems`,opts.branch?`${cwd2} \u2387 ${opts.branch}`:cwd2],sections:[{heading:"\u306F\u3058\u3081\u304B\u305F",lines:["/help \u3067\u30B3\u30DE\u30F3\u30C9\u4E00\u89A7\u3001/de\
1241
1247
  mo \u3067\u4E00\u9023\u306E\u6D41\u308C\u3092\u518D\u751F","Shift+Tab\uFF08\u52B9\u304B\u306A\u3044\u7AEF\u672B\u306F Alt+M\uFF09\u3067\u30E2\u30FC\u30C9\u3092\u5DE1\u56DE","/model \u3067\u30E2\u30C7\u30EB\u5207\u66FF\uFF08\u30E2\u30FC\u30C9\u3068\u306F\u72EC\u7ACB\uFF09","/doctor \u3067\u7AEF\u672B\u306E\u30AD\u30FC\u5165\u529B\u3092\u5B9F\u6E2C"]},{heading:"\u3053\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u306B\u3064\u3044\u3066",lines:["\u4F1A\u8A71\u3068\u30ED\u30FC\u30AB\u30EB\u30C4\u30FC\u30EB\u306F\u5B9F\u7269\u3067\u3059\uFF08\u30C6\u30CA\u30F3\u30C8\u306E\u30AF\u30EC\u30B8\u30C3\u30C8\u3067\u8AB2\u91D1\u3055\u308C\u307E\u3059\uFF09",
1242
1248
  `\u30B9\u30E9\u30C3\u30B7\u30E5\u30B3\u30DE\u30F3\u30C9${COMMANDS.length}\u672C / \u4F1A\u8A71\u4E2D\u306E AI \u304B\u3089 TWP \u3092\u64CD\u4F5C\u3059\u308B\u6A5F\u80FD\u306F\u6E96\u5099\u4E2D`,"\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8: https://docs.tocca.systems/"]}],width:opts.width}}var import_react35=__toESM(require_react(),1);var FLUSH_INTERVAL_MS=33;var TOKEN_INTERVAL_MS=9;function tokenize2(text){return text.match(/[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}]{1,3}|[A-Za-z0-9_./-]+|\s|./gu)??[]}function useTokenStream(){const[text,setText]=(0,import_react35.useState)("");const[streaming,setStreaming]=(0,import_react35.useState)(false);const bufferRef=(0,import_react35.useRef)("");const timersRef=(0,import_react35.useRef)([]);const cancelRef=(0,import_react35.useRef)(
@@ -1261,65 +1267,59 @@ null]})}var import_jsx_runtime5=__toESM(require_jsx_runtime(),1);function Status
1261
1267
  Box_default,{width,children:[(0,import_jsx_runtime5.jsx)(Text,{backgroundColor:mode.color,color:"black",bold:true,wrap:"truncate",children:badge}),(0,import_jsx_runtime5.jsx)(Text,{dimColor:true,wrap:"truncate",children:hint}),(0,import_jsx_runtime5.jsx)(Box_default,{flexGrow:1,justifyContent:"flex-end",children:(0,import_jsx_runtime5.jsx)(Text,{dimColor:true,wrap:"truncate",children:rightText})})]})}function HintLine({width}){const full=" / \u30B3\u30DE\u30F3\u30C9 \xB7 Shift+Tab / Alt+M \u30E2\u30FC\u30C9 \xB7 Shift+Enter/Ctrl+J \u6539\u884C \
1262
1268
  \xB7 Ctrl+R \u5C55\u958B \xB7 Ctrl+C \u4E2D\u65AD \xB7 Ctrl+D \u7D42\u4E86";const short=" / \u30B3\u30DE\u30F3\u30C9 \xB7 Alt+M \u30E2\u30FC\u30C9 \xB7 Ctrl+J \u6539\u884C \xB7 Ctrl+C \u4E2D\u65AD \xB7 Ctrl+D \u7D42\u4E86";const text=stringWidth(full)<=width?full:short;return(0,import_jsx_runtime5.jsx)(Text,{dimColor:true,wrap:"truncate",children:truncateToWidth(text,width)})}var import_jsx_runtime6=__toESM(require_jsx_runtime(),1);function SelectList({title,items,selected,maxRows=8,footer}){const start=Math.max(0,Math.min(selected-Math.floor(maxRows/2),Math.max(0,items.length-maxRows)));const visible=items.slice(start,start+maxRows);return(0,import_jsx_runtime6.jsxs)(Box_default,{flexDirection:"column",borderStyle:"round",borderColor:"gray",paddingX:1,children:[(0,import_jsx_runtime6.jsx)(Text,{bold:true,children:title}),visible.length===0?(0,import_jsx_runtime6.jsx)(
1263
1269
  Text,{dimColor:true,children:"\u8A72\u5F53\u306A\u3057"}):null,visible.map((item,i)=>{const idx=start+i;const active=idx===selected;return(0,import_jsx_runtime6.jsxs)(Text,{wrap:"truncate",color:active?"black":void 0,backgroundColor:active?"cyan":void 0,children:[active?"\u276F ":" ",item.label,item.hint?(0,import_jsx_runtime6.jsxs)(Text,{dimColor:!active,children:[" ",item.hint]}):null]},item.key)}),items.length>maxRows?(0,import_jsx_runtime6.jsxs)(Text,{dimColor:true,children:["\u2026 \u5168 ",
1264
- items.length," \u4EF6"]}):null,footer?(0,import_jsx_runtime6.jsx)(Text,{dimColor:true,children:footer}):null]})}var Diff=class{diff(oldStr,newStr,options={}){let callback;if(typeof options==="function"){callback=options;options={}}else if("callback"in options){callback=options.callback}const oldString=this.castInput(oldStr,options);const newString=this.castInput(newStr,options);const oldTokens=this.removeEmpty(this.tokenize(oldString,options));const newTokens=this.removeEmpty(this.tokenize(newString,options));return this.diffWithOptionsObj(oldTokens,newTokens,options,callback)}diffWithOptionsObj(oldTokens,newTokens,options,callback){
1265
- var _a;const done=value=>{value=this.postProcess(value,options);if(callback){setTimeout(function(){callback(value)},0);return void 0}else{return value}};const newLen=newTokens.length,oldLen=oldTokens.length;let editLength=1;let maxEditLength=newLen+oldLen;if(options.maxEditLength!=null){maxEditLength=Math.min(maxEditLength,options.maxEditLength)}const maxExecutionTime=(_a=options.timeout)!==null&&_a!==void 0?_a:Infinity;const abortAfterTimestamp=Date.now()+maxExecutionTime;const bestPath=[{oldPos:-1,
1266
- lastComponent:void 0}];let newPos=this.extractCommon(bestPath[0],newTokens,oldTokens,0,options);if(bestPath[0].oldPos+1>=oldLen&&newPos+1>=newLen){return done(this.buildValues(bestPath[0].lastComponent,newTokens,oldTokens))}let minDiagonalToConsider=-Infinity,maxDiagonalToConsider=Infinity;const execEditLength=()=>{for(let diagonalPath=Math.max(minDiagonalToConsider,-editLength);diagonalPath<=Math.min(maxDiagonalToConsider,editLength);diagonalPath+=2){let basePath;const removePath=bestPath[diagonalPath-
1267
- 1],addPath=bestPath[diagonalPath+1];if(removePath){bestPath[diagonalPath-1]=void 0}let canAdd=false;if(addPath){const addPathNewPos=addPath.oldPos-diagonalPath;canAdd=addPath&&0<=addPathNewPos&&addPathNewPos<newLen}const canRemove=removePath&&removePath.oldPos+1<oldLen;if(!canAdd&&!canRemove){bestPath[diagonalPath]=void 0;continue}if(!canRemove||canAdd&&removePath.oldPos<addPath.oldPos){basePath=this.addToPath(addPath,true,false,0,options)}else{basePath=this.addToPath(removePath,false,true,1,options)}
1268
- newPos=this.extractCommon(basePath,newTokens,oldTokens,diagonalPath,options);if(basePath.oldPos+1>=oldLen&&newPos+1>=newLen){return done(this.buildValues(basePath.lastComponent,newTokens,oldTokens))||true}else{bestPath[diagonalPath]=basePath;if(basePath.oldPos+1>=oldLen){maxDiagonalToConsider=Math.min(maxDiagonalToConsider,diagonalPath-1)}if(newPos+1>=newLen){minDiagonalToConsider=Math.max(minDiagonalToConsider,diagonalPath+1)}}}editLength++};if(callback){(function exec3(){setTimeout(function(){
1269
- if(editLength>maxEditLength||Date.now()>abortAfterTimestamp){return callback(void 0)}if(!execEditLength()){exec3()}},0)})()}else{while(editLength<=maxEditLength&&Date.now()<=abortAfterTimestamp){const ret=execEditLength();if(ret){return ret}}}}addToPath(path3,added,removed,oldPosInc,options){const last=path3.lastComponent;if(last&&!options.oneChangePerToken&&last.added===added&&last.removed===removed){return{oldPos:path3.oldPos+oldPosInc,lastComponent:{count:last.count+1,added,removed,previousComponent:last.
1270
- previousComponent}}}else{return{oldPos:path3.oldPos+oldPosInc,lastComponent:{count:1,added,removed,previousComponent:last}}}}extractCommon(basePath,newTokens,oldTokens,diagonalPath,options){const newLen=newTokens.length,oldLen=oldTokens.length;let oldPos=basePath.oldPos,newPos=oldPos-diagonalPath,commonCount=0;while(newPos+1<newLen&&oldPos+1<oldLen&&this.equals(oldTokens[oldPos+1],newTokens[newPos+1],options)){newPos++;oldPos++;commonCount++;if(options.oneChangePerToken){basePath.lastComponent={
1271
- count:1,previousComponent:basePath.lastComponent,added:false,removed:false}}}if(commonCount&&!options.oneChangePerToken){basePath.lastComponent={count:commonCount,previousComponent:basePath.lastComponent,added:false,removed:false}}basePath.oldPos=oldPos;return newPos}equals(left,right,options){if(options.comparator){return options.comparator(left,right)}else{return left===right||!!options.ignoreCase&&left.toLowerCase()===right.toLowerCase()}}removeEmpty(array){const ret=[];for(let i=0;i<array.length;i++){
1272
- if(array[i]){ret.push(array[i])}}return ret}castInput(value,options){return value}tokenize(value,options){return Array.from(value)}join(chars){return chars.join("")}postProcess(changeObjects,options){return changeObjects}get useLongestToken(){return false}buildValues(lastComponent,newTokens,oldTokens){const components=[];let nextComponent;while(lastComponent){components.push(lastComponent);nextComponent=lastComponent.previousComponent;delete lastComponent.previousComponent;lastComponent=nextComponent}
1273
- components.reverse();const componentLen=components.length;let componentPos=0,newPos=0,oldPos=0;for(;componentPos<componentLen;componentPos++){const component=components[componentPos];if(!component.removed){if(!component.added&&this.useLongestToken){let value=newTokens.slice(newPos,newPos+component.count);value=value.map(function(value2,i){const oldValue=oldTokens[oldPos+i];return oldValue.length>value2.length?oldValue:value2});component.value=this.join(value)}else{component.value=this.join(newTokens.
1274
- slice(newPos,newPos+component.count))}newPos+=component.count;if(!component.added){oldPos+=component.count}}else{component.value=this.join(oldTokens.slice(oldPos,oldPos+component.count));oldPos+=component.count}}return components}};var LineDiff=class extends Diff{constructor(){super(...arguments);this.tokenize=tokenize3}equals(left,right,options){if(options.ignoreWhitespace){if(!options.newlineIsToken||!left.includes("\n")){left=left.trim()}if(!options.newlineIsToken||!right.includes("\n")){right=right.trim()}}else if(options.ignoreNewlineAtEof&&!options.newlineIsToken){if(left.endsWith("\n")){left=left.slice(0,-1)}if(right.endsWith("\n")){right=right.slice(0,-1)}}return super.equals(left,right,options)}};var lineDiff=new LineDiff;
1275
- function diffLines(oldStr,newStr,options){return lineDiff.diff(oldStr,newStr,options)}function tokenize3(value,options){if(options.stripTrailingCr){value=value.replace(/\r\n/g,"\n")}const retLines=[],linesAndNewlines=value.split(/(\n|\r\n)/);if(!linesAndNewlines[linesAndNewlines.length-1]){linesAndNewlines.pop()}for(let i=0;i<linesAndNewlines.length;i++){const line=linesAndNewlines[i];if(i%2&&!options.newlineIsToken){retLines[retLines.length-1]+=line}else{retLines.push(line)}}return retLines}function buildDiffLines(before,after,contextLines=3){const parts=diffLines(before,after);const out=[];for(const part of parts){const lines=part.value.replace(/\n$/,"").split("\n");if(part.added){for(const l of lines)out.push({sign:"+",text:l})}else if(part.removed){for(const l of lines)out.push({sign:"-",text:l})}else if(lines.length>contextLines*2+1){for(const l of lines.slice(0,contextLines))out.push({sign:" ",text:l});out.push({sign:" ",text:`\u22EF ${lines.length-contextLines*2} \u884C\u7701\u7565`});
1276
- for(const l of lines.slice(-contextLines))out.push({sign:" ",text:l})}else{for(const l of lines)out.push({sign:" ",text:l})}}return out}function diffStat(lines){return{added:lines.filter(l=>l.sign==="+").length,removed:lines.filter(l=>l.sign==="-").length}}var import_jsx_runtime7=__toESM(require_jsx_runtime(),1);var PERMISSION_CHOICES=[{key:"yes",label:"\u306F\u3044\uFF08\u4ECA\u56DE\u3060\u3051\uFF09"},{key:"always",label:"\u306F\u3044\u3001\u3053\u306E\u30BB\u30C3\u30B7\u30E7\u30F3\u4E2D\u306F\u3053\u306E\u30C4\u30FC\u30EB\u3092\u78BA\u8A8D\u3057\u306A\u3044"},{key:"no",label:"\u3044\u3044\u3048\uFF08\u62D2\u5426\uFF09"}];function PermissionDialog({spec,selected,maxDiffLines=14}){const diff2=spec.diff&&maxDiffLines>0?buildDiffLines(spec.diff.before,
1277
- spec.diff.after):null;const stat=diff2?diffStat(diff2):null;return(0,import_jsx_runtime7.jsxs)(Box_default,{flexDirection:"column",borderStyle:"round",borderColor:"yellow",paddingX:1,children:[(0,import_jsx_runtime7.jsx)(Text,{bold:true,color:"yellow",children:"\u8A31\u53EF\u304C\u5FC5\u8981\u3067\u3059"}),(0,import_jsx_runtime7.jsxs)(Text,{wrap:"truncate",children:[(0,import_jsx_runtime7.jsx)(Text,{bold:true,children:stripTerminalControls(spec.name)}),(0,import_jsx_runtime7.jsxs)(Text,{dimColor:true,
1278
- children:[" ",stripTerminalControls(spec.diff?spec.diff.path:spec.input)]})]}),diff2?(0,import_jsx_runtime7.jsxs)(Box_default,{flexDirection:"column",marginTop:1,children:[(0,import_jsx_runtime7.jsxs)(Text,{dimColor:true,children:[stripTerminalControls(spec.diff?.path??"")," \uFF08+",stat?.added??0," / -",stat?.removed??0,"\uFF09"]}),diff2.slice(0,maxDiffLines).map((line,i)=>(0,import_jsx_runtime7.jsxs)(Text,{wrap:"truncate",color:line.sign==="+"?"green":line.sign==="-"?"red":void 0,dimColor:line.
1279
- sign===" ",children:[line.sign," ",stripTerminalControls(line.text)]},i)),diff2.length>maxDiffLines?(0,import_jsx_runtime7.jsxs)(Text,{dimColor:true,children:["\u2026 \u4ED6 ",diff2.length-maxDiffLines," \u884C"]}):null]}):spec.diff?null:(0,import_jsx_runtime7.jsx)(Box_default,{flexDirection:"column",marginTop:1,children:commandLines(spec.input,maxDiffLines).map((line,i)=>(0,import_jsx_runtime7.jsxs)(Text,{dimColor:true,wrap:"truncate",children:[i===0?"$ ":" ",line]},i))}),spec.noAlwaysReason?(0,import_jsx_runtime7.jsx)(
1280
- Box_default,{marginTop:1,children:(0,import_jsx_runtime7.jsxs)(Text,{color:"yellow",wrap:"truncate",children:["\u26A0 ",stripTerminalControls(spec.noAlwaysReason)]})}):null,(0,import_jsx_runtime7.jsx)(Box_default,{flexDirection:"column",marginTop:1,children:choicesFor(spec).map((choice,i)=>(0,import_jsx_runtime7.jsxs)(Text,{color:i===selected?"black":void 0,backgroundColor:i===selected?"yellow":void 0,children:[i===selected?"\u276F ":" ",i+1,") ",choice.label]},choice.key))}),(0,import_jsx_runtime7.jsx)(
1281
- Text,{dimColor:true,children:"\u2191\u2193 \u3067\u9078\u629E \xB7 Enter \u3067\u6C7A\u5B9A \xB7 \u6570\u5B57\u30AD\u30FC\u3067\u3082\u9078\u3079\u307E\u3059"})]})}function commandLines(input,budget){const max=Math.max(1,budget);const lines=stripTerminalControls(input).split("\n");if(lines.length<=max)return lines;return[...lines.slice(0,max),`\u2026 \u4ED6 ${lines.length-max} \u884C\uFF08\u3059\u3079\u3066\u5B9F\u884C\u3055\u308C\u307E\u3059\uFF09`]}function choicesFor(spec){return spec.noAlwaysReason?
1282
- PERMISSION_CHOICES.filter(c=>c.key!=="always"):PERMISSION_CHOICES}var import_react36=__toESM(require_react(),1);var import_jsx_runtime8=__toESM(require_jsx_runtime(),1);function doctorNetworkRows(network){const hasCaWarn=network.some(l=>l.label==="NODE_EXTRA_CA_CERTS"&&l.warn===true);return 2+network.length+(hasCaWarn?3:0)+2}function padDisplay(text,width){const pad=Math.max(0,width-stringWidth(text));return text+" ".repeat(pad)}function Doctor({events,maxRows=12,network}){const diagnostics=(0,import_react36.useMemo)(()=>network??proxyDiagnostics(),[network]);const shown=events.slice(-maxRows);const caWarn=diagnostics.
1270
+ items.length," \u4EF6"]}):null,footer?(0,import_jsx_runtime6.jsx)(Text,{dimColor:true,children:footer}):null]})}var import_jsx_runtime7=__toESM(require_jsx_runtime(),1);function PermissionDialog({spec,state,maxDiffLines=14}){const items=itemsFor(state,spec);const diff2=spec.diff&&maxDiffLines>0?buildDiffLines(spec.diff.before,spec.diff.after):null;const stat=diff2?diffStat(diff2):null;return(0,import_jsx_runtime7.jsxs)(Box_default,{flexDirection:"column",borderStyle:"round",borderColor:"yellow",paddingX:1,children:[(0,import_jsx_runtime7.jsx)(Text,{bold:true,color:"yellow",children:"\u8A31\u53EF\u304C\u5FC5\u8981\u3067\u3059"}),
1271
+ (0,import_jsx_runtime7.jsxs)(Text,{wrap:"truncate",children:[(0,import_jsx_runtime7.jsx)(Text,{bold:true,children:stripTerminalControls(spec.name)}),(0,import_jsx_runtime7.jsxs)(Text,{dimColor:true,children:[" ",stripTerminalControls(spec.diff?spec.diff.path:spec.input)]})]}),diff2?(0,import_jsx_runtime7.jsxs)(Box_default,{flexDirection:"column",marginTop:1,children:[(0,import_jsx_runtime7.jsxs)(Text,{dimColor:true,children:[stripTerminalControls(spec.diff?.path??"")," \uFF08+",stat?.added??0," \
1272
+ / -",stat?.removed??0,"\uFF09"]}),diff2.slice(0,maxDiffLines).map((line,i)=>(0,import_jsx_runtime7.jsxs)(Text,{wrap:"truncate",color:line.sign==="+"?"green":line.sign==="-"?"red":void 0,dimColor:line.sign===" ",children:[line.sign," ",stripTerminalControls(line.text)]},i)),diff2.length>maxDiffLines?(0,import_jsx_runtime7.jsxs)(Text,{dimColor:true,children:["\u2026 \u4ED6 ",diff2.length-maxDiffLines," \u884C"]}):null]}):spec.diff?null:spec.card&&maxDiffLines>0?(0,import_jsx_runtime7.jsxs)(Box_default,
1273
+ {flexDirection:"column",marginTop:1,children:[(0,import_jsx_runtime7.jsxs)(Text,{wrap:"truncate",bold:true,color:spec.card.destructive?"red":void 0,children:[spec.card.destructive?"\u26A0 ":"",spec.card.headline]}),fitLines(spec.card.details,maxDiffLines-1).map((line,i)=>(0,import_jsx_runtime7.jsxs)(Text,{dimColor:true,wrap:"truncate",children:[" ",line]},i))]}):(0,import_jsx_runtime7.jsx)(Box_default,{flexDirection:"column",marginTop:1,children:commandLines(spec.input,maxDiffLines).map((line,i)=>(0,import_jsx_runtime7.jsxs)(
1274
+ Text,{dimColor:true,wrap:"truncate",children:[i===0?"$ ":" ",line]},i))}),spec.noAlwaysReason?(0,import_jsx_runtime7.jsx)(Box_default,{marginTop:1,children:(0,import_jsx_runtime7.jsxs)(Text,{color:"yellow",wrap:"truncate",children:["\u26A0 ",stripTerminalControls(spec.noAlwaysReason)]})}):null,state.stage==="instead"?(0,import_jsx_runtime7.jsxs)(Box_default,{flexDirection:"column",marginTop:1,children:[(0,import_jsx_runtime7.jsx)(Text,{wrap:"truncate",children:"\u4EE3\u308F\u308A\u306B\u3069\u3046\u3057\u3066\u307B\u3057\u3044\u304B\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u305D\u306E\u307E\u307E\u30E2\u30C7\u30EB\u3078\u4F1D\u3048\u307E\
1275
+ \u3059\uFF09"}),(0,import_jsx_runtime7.jsxs)(Text,{wrap:"truncate-start",children:[(0,import_jsx_runtime7.jsx)(Text,{color:"yellow",children:"\u203A "}),stripTerminalControls(state.text),(0,import_jsx_runtime7.jsx)(Text,{inverse:true,children:" "})]}),(0,import_jsx_runtime7.jsx)(Text,{dimColor:true,wrap:"truncate",children:"Enter \u3067\u9001\u4FE1\uFF08\u7A7A\u306A\u3089\u62D2\u5426\u3060\u3051\uFF09 \xB7 Esc \u3067\u623B\u308B"})]}):(0,import_jsx_runtime7.jsxs)(import_jsx_runtime7.Fragment,{children:[
1276
+ (0,import_jsx_runtime7.jsxs)(Box_default,{flexDirection:"column",marginTop:1,children:[state.stage==="scope"?(0,import_jsx_runtime7.jsx)(Text,{dimColor:true,children:"\u3069\u306E\u7BC4\u56F2\u3067\u805E\u304B\u306A\u3044\u3088\u3046\u306B\u3057\u307E\u3059\u304B\uFF1F"}):null,items.map((item,i)=>(0,import_jsx_runtime7.jsxs)(Text,{wrap:"truncate",color:i===state.selected?"black":void 0,backgroundColor:i===state.selected?"yellow":void 0,children:[i===state.selected?"\u276F ":" ",i+1,") ",stripTerminalControls(
1277
+ item.label)]},item.key)),state.stage==="scope"&&(spec.persistOptions?.length??0)>0&&spec.persistTarget?(0,import_jsx_runtime7.jsxs)(Text,{dimColor:true,wrap:"truncate",children:["\u4FDD\u5B58\u5148: ",stripTerminalControls(spec.persistTarget)]}):null]}),(0,import_jsx_runtime7.jsxs)(Text,{dimColor:true,wrap:"truncate",children:["\u2191\u2193 \u3067\u9078\u629E \xB7 Enter \u3067\u6C7A\u5B9A \xB7 \u6570\u5B57\u30AD\u30FC\u3067\u3082\u9078\u3079\u307E\u3059 \xB7 ",state.stage==="scope"?"Esc \u3067\u623B\u308B":
1278
+ "Esc \u3067\u62D2\u5426"]})]})]})}function fitLines(lines,budget){if(budget<=0)return[];if(lines.length<=budget)return[...lines];return[...lines.slice(0,budget-1),`\u2026 \u4ED6 ${lines.length-budget+1} \u884C`]}function commandLines(input,budget){const max=Math.max(1,budget);const lines=stripTerminalControls(input).split("\n");if(lines.length<=max)return lines;return[...lines.slice(0,max),`\u2026 \u4ED6 ${lines.length-max} \u884C\uFF08\u3059\u3079\u3066\u5B9F\u884C\u3055\u308C\u307E\u3059\uFF09`]}var import_react36=__toESM(require_react(),1);var import_jsx_runtime8=__toESM(require_jsx_runtime(),1);function doctorNetworkRows(network){const hasCaWarn=network.some(l=>l.label==="NODE_EXTRA_CA_CERTS"&&l.warn===true);return 2+network.length+(hasCaWarn?3:0)+2}function padDisplay(text,width){const pad=Math.max(0,width-stringWidth(text));return text+" ".repeat(pad)}function Doctor({events,maxRows=12,network}){const diagnostics=(0,import_react36.useMemo)(()=>network??proxyDiagnostics(),[network]);const shown=events.slice(-maxRows);const caWarn=diagnostics.
1283
1279
  some(l=>l.label==="NODE_EXTRA_CA_CERTS"&&l.warn===true);const shiftTab2=events.filter(e=>e.name==="shift-tab").at(-1);const tab2=events.filter(e=>e.name==="tab").at(-1);return(0,import_jsx_runtime8.jsxs)(Box_default,{flexDirection:"column",borderStyle:"round",borderColor:"blue",paddingX:1,children:[(0,import_jsx_runtime8.jsx)(Text,{bold:true,color:"blue",children:"/doctor \u2014 \u30AD\u30FC\u30A8\u30B3\u30FC\uFF08\u5B9F\u6E2C\uFF09"}),(0,import_jsx_runtime8.jsxs)(Text,{dimColor:true,children:["\
1284
1280
  TERM=",process.env["TERM"]??"(unset)"," \xB7 TERM_PROGRAM=",process.env["TERM_PROGRAM"]??"(unset)"," \xB7"," ",process.env["WSL_DISTRO_NAME"]?`WSL=${process.env["WSL_DISTRO_NAME"]}`:`platform=${process.platform}`]}),(0,import_jsx_runtime8.jsxs)(Box_default,{flexDirection:"column",marginTop:1,children:[shown.length===0?(0,import_jsx_runtime8.jsx)(Text,{dimColor:true,children:"\u30AD\u30FC\u3092\u62BC\u3057\u3066\u304F\u3060\u3055\u3044\uFF08Esc \u3067\u623B\u308B\uFF09"}):null,shown.map((ev,i)=>(0,import_jsx_runtime8.jsxs)(
1285
1281
  Text,{children:[(0,import_jsx_runtime8.jsx)(Text,{color:"cyan",children:ev.name.padEnd(12)}),(0,import_jsx_runtime8.jsxs)(Text,{children:[" ",describeRaw(ev.raw).padEnd(18)]}),(0,import_jsx_runtime8.jsx)(Text,{dimColor:true,children:hexRaw(ev.raw)})]},i))]}),(0,import_jsx_runtime8.jsxs)(Box_default,{flexDirection:"column",marginTop:1,children:[(0,import_jsx_runtime8.jsx)(Text,{bold:true,children:"Shift+Tab \u306E\u5B9F\u6E2C"}),(0,import_jsx_runtime8.jsx)(Text,{children:shiftTab2?`\u691C\u51FA: ${describeRaw(
1286
1282
  shiftTab2.raw)}\uFF08${hexRaw(shiftTab2.raw)}\uFF09`:"\u672A\u691C\u51FA \u2014 Shift+Tab \u3092\u62BC\u3057\u3066\u304F\u3060\u3055\u3044"}),!shiftTab2&&tab2?(0,import_jsx_runtime8.jsx)(Text,{color:"yellow",children:"Tab \u306E\u307F\u691C\u51FA\u3002\u3053\u306E\u7AEF\u672B\u306F Shift+Tab \u3092\u7D20\u306E TAB \u3068\u3057\u3066\u9001\u3063\u3066\u3044\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\uFF08Alt+M / /mode \u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\uFF09"}):null]}),(0,import_jsx_runtime8.jsxs)(
1287
1283
  Box_default,{flexDirection:"column",marginTop:1,children:[(0,import_jsx_runtime8.jsx)(Text,{bold:true,children:"\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\uFF08\u30D7\u30ED\u30AD\u30B7 / CA\uFF09"}),diagnostics.map(line=>(0,import_jsx_runtime8.jsxs)(Text,{children:[(0,import_jsx_runtime8.jsx)(Text,{color:"cyan",children:padDisplay(line.label,22)}),(0,import_jsx_runtime8.jsx)(Text,{color:line.warn===true?"yellow":void 0,children:line.value})]},line.label)),caWarn?(0,import_jsx_runtime8.jsx)(Text,{color:"\
1288
1284
  yellow",children:"\u26A0 TLS \u508D\u53D7\u30D7\u30ED\u30AD\u30B7\u914D\u4E0B\u3067\u306F NODE_EXTRA_CA_CERTS \u306B\u30D7\u30ED\u30AD\u30B7\u306E CA \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08Node \u8D77\u52D5\u6642\u306B\u3057\u304B\u8AAD\u307E\u308C\u306A\u3044\u305F\u3081\u3001\u8A2D\u5B9A\u5F8C\u306B twp \u3092\u518D\u8D77\u52D5\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\uFF09"}):null]}),(0,import_jsx_runtime8.jsx)(Text,{dimColor:true,children:"Esc \u3067\u623B\u308B"})]})}var import_react37=__toESM(require_react(),1);function useTerminalSize(){const read=()=>({rows:process.stdout.rows||24,columns:process.stdout.columns||80});const[size,setSize]=(0,import_react37.useState)(read);(0,import_react37.useEffect)(()=>{const onResize=()=>setSize(read());process.stdout.on("resize",onResize);return()=>{process.stdout.off("resize",onResize)}},[]);return size}var import_jsx_runtime9=__toESM(require_jsx_runtime(),1);function paletteFor(text,mode){return text.startsWith("/")&&!/\s/.test(text)?filterCommands(text,mode):[]}function fileCompletionFor(b,index){const mention=mentionAtCursor(b.text,b.cursor);if(mention===null||index===null)return null;const items=filterFiles(mention.query,index.files);return items.length===0?null:{items,start:mention.start,end:mention.end}}function originLabel(cmd){if(cmd.origin==="project")return" \xB7 \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5B9A\u7FA9";
1289
- if(cmd.origin==="user")return" \xB7 \u30E6\u30FC\u30B6\u30FC\u5B9A\u7FA9";return""}function insert(b,value){return{text:b.text.slice(0,b.cursor)+value+b.text.slice(b.cursor),cursor:b.cursor+value.length}}var seq=0;var nextId=()=>`i${++seq}`;function fullInputFor(request){const command=request.input["command"];if(typeof command==="string"&&command!=="")return command;return request.preview}function catalogTitleSuffix(source){if(source==="server")return"";return source==="cache"?" \u2014 \u30AD\u30E3\u30C3\u30B7\u30E5":
1285
+ if(cmd.origin==="user")return" \xB7 \u30E6\u30FC\u30B6\u30FC\u5B9A\u7FA9";return""}function insert(b,value){return{text:b.text.slice(0,b.cursor)+value+b.text.slice(b.cursor),cursor:b.cursor+value.length}}var seq=0;var nextId=()=>`i${++seq}`;function fullInputFor(request){const command=request.input["command"];if(typeof command==="string"&&command!=="")return command;return request.preview}function promptFor(request){const target=request.target??{tool:request.tool,input:request.input};const persist=request.
1286
+ persistOptions??[];return{name:target.tool.name,input:fullInputFor(request),...request.diff?{diff:request.diff}:{},noAlwaysReason:request.noAlwaysReason,...persist.length>0?{persistOptions:persist,persistTarget:`${projectPermissionsPath()}\uFF08${projectRootFor(process.cwd())}\uFF09`}:{},...isTwpTool(target.tool.name)?{card:toolCardFor(target.tool.name,target.input)}:{}}}function catalogTitleSuffix(source){if(source==="server")return"";return source==="cache"?" \u2014 \u30AD\u30E3\u30C3\u30B7\u30E5":
1290
1287
  " \u2014 \u7D44\u307F\u8FBC\u307F\u4E00\u89A7\uFF08\u672A\u53D6\u5F97\uFF09"}function App2({initialMode,initialModel,initialCatalog,initialModelWarning,runtime,version,startInDoctor,permissionMode,permissionLayers,audit}){const{exit}=use_app_default();const size=useTerminalSize();const stream=useTokenStream();const[items,setItems]=(0,import_react38.useState)(()=>[{id:nextId(),kind:"banner",banner:buildBanner({version,model:initialModel,width:process.stdout.columns||80,branch:currentBranch()})}]);
1291
1288
  const bufferRef=(0,import_react38.useRef)({text:"",cursor:0});const[buffer,setBufferState]=(0,import_react38.useState)(bufferRef.current);const[mode,setMode]=(0,import_react38.useState)(initialMode);const[model,setModel]=(0,import_react38.useState)(initialModel);const[catalog,setCatalog]=(0,import_react38.useState)(initialCatalog);const[busy,setBusy]=(0,import_react38.useState)(false);const[context,setContext]=(0,import_react38.useState)(()=>runtime.context.snapshot());const[runningTool,setRunningTool]=(0,import_react38.useState)(
1292
- null);const[overlay,setOverlay]=(0,import_react38.useState)(startInDoctor?"doctor":"none");const[pendingPermission,setPendingPermission]=(0,import_react38.useState)(null);const[keyLog,setKeyLog]=(0,import_react38.useState)([]);const[ctrlCArmed,setCtrlCArmed]=(0,import_react38.useState)(false);const[pasting,setPasting]=(0,import_react38.useState)(false);const[fileIndex,setFileIndex]=(0,import_react38.useState)(null);const fileIndexRef=(0,import_react38.useRef)(null);fileIndexRef.current=fileIndex;
1293
- const fileIndexLoading=(0,import_react38.useRef)(false);const setBuffer=(0,import_react38.useCallback)(fn=>{bufferRef.current=fn(bufferRef.current);setBufferState(bufferRef.current)},[]);const clearBuffer=(0,import_react38.useCallback)(()=>setBuffer(()=>({text:"",cursor:0})),[setBuffer]);const selectedRef=(0,import_react38.useRef)(0);const[selectedState,setSelectedState]=(0,import_react38.useState)(0);const setSelected=(0,import_react38.useCallback)(next=>{selectedRef.current=typeof next==="func\
1294
- tion"?next(selectedRef.current):next;setSelectedState(selectedRef.current)},[]);const modeRef=(0,import_react38.useRef)(mode);modeRef.current=mode;const modelRef=(0,import_react38.useRef)(model);modelRef.current=model;const busyRef=(0,import_react38.useRef)(false);const abortRef=(0,import_react38.useRef)(false);const streamAbortRef=(0,import_react38.useRef)(null);const sleepRef=(0,import_react38.useRef)(null);const permissionResolver=(0,import_react38.useRef)(null);const sessionAllow=(0,import_react38.useRef)(
1295
- new Set);const demoSessionAllow=(0,import_react38.useRef)(new Set);const lastToolRef=(0,import_react38.useRef)(null);(0,import_react38.useEffect)(()=>()=>{abortRef.current=true;streamAbortRef.current?.abort();const s=sleepRef.current;if(s){clearTimeout(s.timer);sleepRef.current=null;s.resolve()}},[]);const modeDef=getMode(mode);const branch=(0,import_react38.useMemo)(()=>currentBranch(),[]);const cwd2=(0,import_react38.useMemo)(()=>displayCwd(),[]);const networkDiagnostics=(0,import_react38.useMemo)(
1296
- ()=>proxyDiagnostics(),[]);const fixedChrome=1+2+(busy?1:0)+(pasting?1:0)+1+1;const liveTotal=Math.max(MIN_LIVE_ROWS,size.rows-1);const inputContentWidth=Math.max(1,size.columns-6);const inputMaxRows=Math.max(1,Math.min(6,liveTotal-fixedChrome-1));const inputWindow=layoutInputWindow(buffer.text,buffer.cursor,inputContentWidth,inputMaxRows);const budget=liveAreaBudget(size.rows,fixedChrome+inputWindow.shownRows);const commit=(0,import_react38.useCallback)(item=>{setItems(prev=>[...prev,{...item,id:nextId()}])},
1297
- []);const catalogFetchRef=(0,import_react38.useRef)(null);const blockOnMinSupported=(0,import_react38.useCallback)(floor=>{const text=minSupportedBlockMessage(version,floor??"");commit({kind:"notice",tone:"error",text});process.exitCode=1;exit();process.stderr.write(stripTerminalControls(text))},[commit,exit,version]);(0,import_react38.useEffect)(()=>{if(!runtime.loggedIn){commit({kind:"notice",tone:"warn",text:"\u30ED\u30B0\u30A4\u30F3\u3057\u3066\u3044\u307E\u305B\u3093\u3002\u4F1A\u8A71\u3092\u59CB\u3081\u308B\u306B\u306F\u5225\u306E\u7AEF\u672B\u3067 `twp login` \u3092\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044\u3002"});
1289
+ null);const[overlay,setOverlay]=(0,import_react38.useState)(startInDoctor?"doctor":"none");const[pendingPermission,setPendingPermissionState]=(0,import_react38.useState)(null);const pendingPermissionRef=(0,import_react38.useRef)(null);const setPendingPermission=(0,import_react38.useCallback)(next=>{pendingPermissionRef.current=next;setPendingPermissionState(next)},[]);const[keyLog,setKeyLog]=(0,import_react38.useState)([]);const[ctrlCArmed,setCtrlCArmed]=(0,import_react38.useState)(false);const[
1290
+ pasting,setPasting]=(0,import_react38.useState)(false);const[fileIndex,setFileIndex]=(0,import_react38.useState)(null);const fileIndexRef=(0,import_react38.useRef)(null);fileIndexRef.current=fileIndex;const fileIndexLoading=(0,import_react38.useRef)(false);const setBuffer=(0,import_react38.useCallback)(fn=>{bufferRef.current=fn(bufferRef.current);setBufferState(bufferRef.current)},[]);const clearBuffer=(0,import_react38.useCallback)(()=>setBuffer(()=>({text:"",cursor:0})),[setBuffer]);const selectedRef=(0,import_react38.useRef)(
1291
+ 0);const[selectedState,setSelectedState]=(0,import_react38.useState)(0);const setSelected=(0,import_react38.useCallback)(next=>{selectedRef.current=typeof next==="function"?next(selectedRef.current):next;setSelectedState(selectedRef.current)},[]);const modeRef=(0,import_react38.useRef)(mode);modeRef.current=mode;const modelRef=(0,import_react38.useRef)(model);modelRef.current=model;const busyRef=(0,import_react38.useRef)(false);const abortRef=(0,import_react38.useRef)(false);const streamAbortRef=(0,import_react38.useRef)(
1292
+ null);const sleepRef=(0,import_react38.useRef)(null);const permissionResolver=(0,import_react38.useRef)(null);const permStateRef=(0,import_react38.useRef)(INITIAL_DIALOG_STATE);const[permState,setPermStateRaw]=(0,import_react38.useState)(INITIAL_DIALOG_STATE);const setPermState=(0,import_react38.useCallback)(next=>{permStateRef.current=next;setPermStateRaw(next)},[]);const sessionAllow=(0,import_react38.useRef)(new Set);const sessionRules=(0,import_react38.useRef)([]);const demoSessionAllow=(0,import_react38.useRef)(
1293
+ new Set);const lastToolRef=(0,import_react38.useRef)(null);(0,import_react38.useEffect)(()=>()=>{abortRef.current=true;streamAbortRef.current?.abort();const s=sleepRef.current;if(s){clearTimeout(s.timer);sleepRef.current=null;s.resolve()}},[]);const modeDef=getMode(mode);const branch=(0,import_react38.useMemo)(()=>currentBranch(),[]);const cwd2=(0,import_react38.useMemo)(()=>displayCwd(),[]);const networkDiagnostics=(0,import_react38.useMemo)(()=>proxyDiagnostics(),[]);const fixedChrome=1+2+(busy?
1294
+ 1:0)+(pasting?1:0)+1+1;const liveTotal=Math.max(MIN_LIVE_ROWS,size.rows-1);const inputContentWidth=Math.max(1,size.columns-6);const inputMaxRows=Math.max(1,Math.min(6,liveTotal-fixedChrome-1));const inputWindow=layoutInputWindow(buffer.text,buffer.cursor,inputContentWidth,inputMaxRows);const budget=liveAreaBudget(size.rows,fixedChrome+inputWindow.shownRows);const commit=(0,import_react38.useCallback)(item=>{setItems(prev=>[...prev,{...item,id:nextId()}])},[]);const catalogFetchRef=(0,import_react38.useRef)(
1295
+ null);const blockOnMinSupported=(0,import_react38.useCallback)(floor=>{const text=minSupportedBlockMessage(version,floor??"");commit({kind:"notice",tone:"error",text});process.exitCode=1;exit();process.stderr.write(stripTerminalControls(text))},[commit,exit,version]);(0,import_react38.useEffect)(()=>{if(!runtime.loggedIn){commit({kind:"notice",tone:"warn",text:"\u30ED\u30B0\u30A4\u30F3\u3057\u3066\u3044\u307E\u305B\u3093\u3002\u4F1A\u8A71\u3092\u59CB\u3081\u308B\u306B\u306F\u5225\u306E\u7AEF\u672B\u3067 `twp login` \u3092\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044\u3002"});
1298
1296
  return}if(initialModelWarning!==null){commit({kind:"notice",tone:"warn",text:initialModelWarning})}let cancelled=false;const pending=runtime.loadCatalog();catalogFetchRef.current=pending;void pending.then(fetched=>{if(cancelled)return;if(isBelowMinSupported(version,fetched.minSupportedVersion)){blockOnMinSupported(fetched.minSupportedVersion);return}setCatalog(fetched);const picked=pickModel(fetched,modelRef.current);if(picked.model!==modelRef.current){setModel(picked.model);if(picked.warning!==
1299
1297
  void 0)commit({kind:"notice",tone:"warn",text:picked.warning})}});return()=>{cancelled=true}},[blockOnMinSupported,commit,initialModelWarning,runtime,version]);const sleep=ms=>new Promise(resolve=>{const timer=setTimeout(()=>{sleepRef.current=null;resolve()},ms);sleepRef.current={timer,resolve}});const abortSleep=()=>{const s=sleepRef.current;if(!s)return;clearTimeout(s.timer);sleepRef.current=null;s.resolve()};const askPermission=spec=>new Promise(resolve=>{setPendingPermission(spec);setSelected(
1300
- 0);setOverlay("permission");permissionResolver.current=choice=>{setOverlay("none");setPendingPermission(null);permissionResolver.current=null;resolve(choice)}});const runTurn2=(0,import_react38.useCallback)(async(text,opts={})=>{if(busyRef.current){commit({kind:"notice",tone:"warn",text:"\u5B9F\u884C\u4E2D\u3067\u3059\u3002Ctrl+C \u3067\u4E2D\u65AD\u3057\u3066\u304B\u3089\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044"});return}busyRef.current=true;abortRef.current=false;setBusy(true);commit({kind:"\
1301
- user",text:opts.display??text});const startupCatalog=await catalogFetchRef.current;if(startupCatalog&&isBelowMinSupported(version,startupCatalog.minSupportedVersion)){blockOnMinSupported(startupCatalog.minSupportedVersion);return}const controller=new AbortController;streamAbortRef.current=controller;try{const expandMode=getMode(modeRef.current);const expandDeps={aborted:()=>abortRef.current,isFile:p=>{const cwdNow=process.cwd();if(isAbsolute(p)||p.startsWith("~")||/^[\\/]{2}/.test(p))return false;
1302
- const abs=resolvePath(cwdNow,p);const rel=relativePath(cwdNow,abs);if(rel===""||rel===".."||rel.startsWith(`..${sep}`)||isAbsolute(rel))return false;try{return statSync(abs).isFile()}catch{return false}},readFile:async p=>{try{const size2=statSync(resolvePath(process.cwd(),p)).size;if(size2>MAX_ATTACHED_BYTES)return{ok:false,reason:`${size2} \u30D0\u30A4\u30C8\u3042\u308A\u3001\u6DFB\u4ED8\u306E\u4E0A\u9650 ${MAX_ATTACHED_BYTES} \u30D0\u30A4\u30C8\u3092\u8D85\u3048\u307E\u3059`}}catch{}const result2=await executeTool(
1303
- readFileTool,{path:p},{mode:expandMode,ctx:{cwd:process.cwd()},sessionAllow:sessionAllow.current,permissionLayers,...permissionMode!==void 0?{permissionMode}:{},audit,askPermission:request=>askPermission({name:(request.target?.tool??request.tool).name,input:fullInputFor(request),noAlwaysReason:request.noAlwaysReason})});if(result2.isError===true||result2.denied===true){const reason=stripTerminalControls(result2.content.split("\n")[0]??"").slice(0,200);return{ok:false,reason:reason===""?"\u8AAD\u3081\u307E\u305B\u3093\u3067\u3057\u305F":
1304
- reason}}return{ok:true,content:result2.content,truncated:/\[truncated/.test(result2.content)}},fetchTask:async key=>{const got=await runTwpSlashCommand("/task",[key,"--output","json"],{profile:runtime.profileName,version});if(got.code!==0){const reason=stripTerminalControls(got.err.trim().split("\n")[0]??"").slice(0,200);return{ok:false,reason:reason===""?`\u7D42\u4E86\u30B3\u30FC\u30C9 ${got.code}`:reason}}try{const parsed=JSON.parse(got.out);if(parsed!==null&&typeof parsed==="object"&&!Array.isArray(
1305
- parsed)){return{ok:true,task:parsed}}}catch{}return{ok:false,reason:"\u5FDC\u7B54\u3092\u8AAD\u3081\u307E\u305B\u3093\u3067\u3057\u305F"}}};const expanded=await expandInput(text,expandDeps);for(const note of expanded.notices)commit({kind:"notice",tone:"info",text:note});if(abortRef.current){commit({kind:"notice",tone:"warn",text:"\u4E2D\u65AD\u3057\u307E\u3057\u305F\uFF08Ctrl+C\uFF09\u2014 \u9001\u4FE1\u3057\u3066\u3044\u307E\u305B\u3093"});return}stream.begin();const turnMode=getMode(modeRef.current);
1306
- const resident=buildResidentSet(turnMode,{...permissionMode!==void 0?{permissionMode}:{},permissionLayers});const turnTools=opts.allowedTools===void 0?resident.tools:resident.tools.filter(t=>opts.allowedTools?.includes(t.name)===true);const result=await runTurn(runtime.client,runtime.context,{input:expanded.input,model:modelRef.current,system:buildSystemPrompt({cwd:cwd2,branch,modeLabel:turnMode.label,cliVersion:version,toolNames:turnTools.map(t=>t.name),...turnMode.prompt!==void 0?{modePrompt:turnMode.
1307
- prompt}:{}}),signal:controller.signal,onTextDelta:delta=>stream.push(stripTerminalControls(delta)),tools:turnTools,execute:{mode:turnMode,ctx:{cwd:process.cwd()},sessionAllow:sessionAllow.current,permissionLayers,...permissionMode!==void 0?{permissionMode}:{},audit,askPermission:request=>askPermission({name:(request.target?.tool??request.tool).name,input:fullInputFor(request),...request.diff?{diff:request.diff}:{},noAlwaysReason:request.noAlwaysReason}),onStart:(tool,preview)=>{const safe=stripTerminalControls(
1308
- preview);setRunningTool({name:stripTerminalControls(tool.name),summary:safe,input:safe,output:"",status:"running"})}},onToolUse:()=>{const partial=stream.end();stream.clear();if(partial.trim()!=="")commit({kind:"assistant",text:partial})},onToolResult:(call,toolResult)=>{setRunningTool(null);const label=stripTerminalControls(toolResult.summary??call.name);const run={name:stripTerminalControls(call.name),summary:label,input:label,output:stripTerminalControls(toolResult.content),status:toolResult.
1309
- denied===true?"denied":toolResult.isError===true?"error":"done",...toolResult.diff?{diff:toolResult.diff}:{}};lastToolRef.current=run;commit({kind:"tool",run});stream.begin()}});const full=stream.end();stream.clear();if(full.trim()!=="")commit({kind:"assistant",text:full});if(result.maxStepsReached){commit({kind:"notice",tone:"warn",text:"\u30C4\u30FC\u30EB\u5B9F\u884C\u306E\u5F80\u5FA9\u304C\u4E0A\u9650\u306B\u9054\u3057\u305F\u305F\u3081\u6253\u3061\u5207\u308A\u307E\u3057\u305F\u3002\u7D9A\u304D\u306F\u540C\u3058\u4F1A\u8A71\u3067\u6307\u793A\u3057\u3066\u304F\u3060\u3055\u3044"})}
1310
- if(result.droppedMessages>0){commit({kind:"notice",tone:"warn",text:`\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u4E0A\u9650\u306B\u8FD1\u3065\u3044\u305F\u305F\u3081\u3001\u53E4\u3044\u3084\u308A\u53D6\u308A ${result.droppedMessages} \u4EF6\u3092\u5C65\u6B74\u304B\u3089\u843D\u3068\u3057\u307E\u3057\u305F\uFF08/clear \u3067\u660E\u793A\u7684\u306B\u6D88\u305B\u307E\u3059\uFF09`})}if(result.upstreamError!==null){commit({kind:"notice",tone:"error",text:`\u30E2\u30C7\u30EB\u306E\u5FDC\u7B54\u304C\u9014\u4E2D\u3067\u7D42\u308F\u308A\u307E\u3057\u305F: ${result.
1311
- upstreamError}`})}if(result.aborted){commit({kind:"notice",tone:"warn",text:"\u4E2D\u65AD\u3057\u307E\u3057\u305F\uFF08Ctrl+C\uFF09\u2014 \u3053\u3053\u307E\u3067\u306E\u6D88\u8CBB\u306F\u30C6\u30CA\u30F3\u30C8\u306E\u30AF\u30EC\u30B8\u30C3\u30C8\u306B\u8A08\u4E0A\u3055\u308C\u307E\u3059"})}else if(result.emptyResponse){commit({kind:"notice",tone:"warn",text:"\u30E2\u30C7\u30EB\u304B\u3089\u30C6\u30AD\u30B9\u30C8\u5FDC\u7B54\u304C\u3042\u308A\u307E\u305B\u3093\u3067\u3057\u305F"})}}catch(err){const partial=stream.
1312
- end();stream.clear();if(partial.trim()!=="")commit({kind:"assistant",text:partial});commit({kind:"notice",tone:"error",text:err instanceof RelayError?err.message:`\u30E2\u30C7\u30EB\u53D6\u6B21\u3067\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F: ${err.message}`})}finally{streamAbortRef.current=null;setRunningTool(null);setContext(runtime.context.snapshot());busyRef.current=false;setBusy(false)}},[audit,blockOnMinSupported,branch,commit,cwd2,permissionLayers,permissionMode,runtime,
1313
- stream,version]);const runDemo=(0,import_react38.useCallback)(async text=>{if(busyRef.current){commit({kind:"notice",tone:"warn",text:"\u5B9F\u884C\u4E2D\u3067\u3059\u3002Ctrl+C \u3067\u4E2D\u65AD\u3057\u3066\u304B\u3089\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044"});return}busyRef.current=true;abortRef.current=false;setBusy(true);commit({kind:"user",text});for(const step of buildScenario(text)){if(abortRef.current)break;if(step.type==="text"){await stream.start(step.text);stream.clear();if(!abortRef.
1314
- current)commit({kind:"assistant",text:step.text});continue}const spec=step.spec;const policy=applyPermissionMode(checkPermission(spec.name,getMode(modeRef.current)),spec.risk??"exec",permissionMode).decision;const decision=policy!=="deny"&&demoSessionAllow.current.has(spec.name)?"allow":policy;if(decision==="deny"){const run={name:spec.name,summary:spec.summary,input:spec.input,output:`permission denied: ${getMode(modeRef.current).label}\u30E2\u30FC\u30C9\u3067\u306F ${spec.name} \u306F deny \u3067\u3059`,
1315
- status:"denied"};commit({kind:"tool",run});commit({kind:"notice",tone:"warn",text:"deny-and-continue: \u62D2\u5426\u3092 tool result \u3068\u3057\u3066\u30E2\u30C7\u30EB\u3078\u8FD4\u3057\u3001\u30EB\u30FC\u30D7\u306F\u7D9A\u884C\u3057\u307E\u3059\uFF08\u7121\u8A00\u306E allow \u306B\u306F\u3057\u306A\u3044\uFF09"});continue}if(decision==="ask"){const choice=await askPermission(spec);if(choice==="no"){commit({kind:"tool",run:{name:spec.name,summary:spec.summary,input:spec.input,output:"\u30E6\u30FC\u30B6\u30FC\u304C\u62D2\u5426\u3057\u307E\
1316
- \u3057\u305F",status:"denied"}});commit({kind:"notice",tone:"info",text:"\u300C\u4EE3\u308F\u308A\u306B\u3053\u3046\u3057\u3066\u300D\u306E\u5165\u529B\u6B04\u306F\u3053\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u306B\u306F\u3042\u308A\u307E\u305B\u3093\uFF08\u3053\u3053\u3067\u6253\u3061\u5207\u308A\u307E\u3059\uFF09"});break}if(choice==="always")demoSessionAllow.current.add(spec.name)}setRunningTool({name:spec.name,summary:spec.summary,input:spec.input,output:"",status:"running"});await sleep(spec.durationMs);
1317
- setRunningTool(null);if(abortRef.current)break;const done={name:spec.name,summary:spec.summary,input:spec.input,output:spec.output,status:"done",durationMs:spec.durationMs};lastToolRef.current=done;commit({kind:"tool",run:done})}stream.clear();busyRef.current=false;setBusy(false)},[commit,stream]);const runTwp=(0,import_react38.useCallback)(async(line,name,args)=>{const result=await runTwpSlashCommand(name,args,{profile:runtime.profileName,version});const out=stripTerminalControls(result.out).replace(
1318
- /\n+$/,"");const err=stripTerminalControls(result.err).replace(/\n+$/,"");if(result.code===0){commit({kind:"notice",tone:"info",text:[line,out===""?"\uFF080 \u4EF6\uFF09":out,...err!==""?[err]:[]].join("\n")});return}commit({kind:"notice",tone:"error",text:[line,err===""?`\u7D42\u4E86\u30B3\u30FC\u30C9 ${result.code}`:err].join("\n")})},[commit,runtime,version]);const runPromptCommand=(0,import_react38.useCallback)((line,cmd,rest,args)=>{const body=expandArguments(cmd.template??"",rest,args);void runTurn2(
1319
- frameCommandPrompt(cmd,body),{display:line,...cmd.allowedTools!==void 0?{allowedTools:cmd.allowedTools}:{}})},[runTurn2]);const runCommand=(0,import_react38.useCallback)(line=>{const parsed=parseCommandLine(line);if(!parsed)return;const{args}=parsed;const name=resolveCommandName(parsed.name);const cmd=findCommand(name);if(cmd!==void 0&&!isAvailableInMode(cmd,modeRef.current)){commit({kind:"notice",tone:"warn",text:`${name} \u306F ${getMode(modeRef.current).label}\u30E2\u30FC\u30C9\u3067\u306F\u4F7F\u3048\u307E\u305B\u3093\uFF08\u4F7F\u3048\u308B\u30E2\u30FC\u30C9: ${(cmd.
1320
- modes??[]).join(" / ")}\uFF09`});return}if(isTwpSlashCommand(name)){void runTwp(line.trim(),name,args);return}if(cmd?.template!==void 0){runPromptCommand(line.trim(),cmd,parsed.rest,args);return}switch(name){case"/exit":exit();return;case"/clear":setItems([]);runtime.context.clear();setContext(runtime.context.snapshot());return;case"/doctor":setOverlay("doctor");return;case"/model":setSelected(Math.max(0,catalog.ids.indexOf(model)));setOverlay("model");return;case"/mode":{const target=args[0];if(target!==
1321
- void 0&&!isModeId(target)){commit({kind:"notice",tone:"warn",text:`\u4E0D\u660E\u306A\u30E2\u30FC\u30C9: ${target}\uFF08dev | biz | plan\uFF09`});return}const to=target??nextMode(modeRef.current);setMode(to);commit({kind:"notice",tone:"info",text:`\u30E2\u30FC\u30C9\u3092 ${getMode(to).label}\uFF08${to}\uFF09\u306B\u5207\u308A\u66FF\u3048\u307E\u3057\u305F \u2014 ${getMode(to).description}`});return}case"/help":commit({kind:"notice",tone:"info",text:["\u4F1A\u8A71\u306F\u30C6\u30CA\u30F3\u30C8\u306E\u30AF\u30EC\u30B8\u30C3\u30C8\u3067\u5B9F\u969B\u306B\u30E2\u30C7\u30EB\u3078\u9001\u3089\u308C\u307E\u3059",
1322
- `\u4F7F\u3048\u308B\u30B3\u30DE\u30F3\u30C9: ${commandsForMode(modeRef.current).map(c=>c.name).join(" ")}\uFF08/exit \u306F /quit \u3082\u53EF\uFF09`,...commandsForMode(modeRef.current).filter(c=>c.source!==void 0).map(c=>` ${c.name} \u2014 ${c.origin==="project"?"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5B9A\u7FA9":"\u30E6\u30FC\u30B6\u30FC\u5B9A\u7FA9"}: ${c.source??""}`),"\u30B3\u30DE\u30F3\u30C9\u306F .twp/commands/*.md\uFF08\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\uFF09\u3068 ~/.twp/commands/*.md\uFF08\u30E6\u30FC\u30B6\u30FC\uFF09\u306B\u7F6E\u3051\u307E\u3059 \xB7 @\u30D1\u30B9 \u3067\u30D5\u30A1\u30A4\u30EB\u6DFB\u4ED8 \xB7 #ABC-123 \u306E\u3088\u3046\u306A\u30BF\u30B9\u30AF\u30AD\u30FC\u3067\u30BF\u30B9\u30AF\u6DFB\u4ED8",
1298
+ 0);setPermState(INITIAL_DIALOG_STATE);setOverlay("permission");permissionResolver.current=choice=>{setOverlay("none");setPendingPermission(null);permissionResolver.current=null;resolve(choice)}});const persistAllow=isAbsolute(twpHomeDir())?rule=>{const result=persistProjectAllow(rule,{cwd:process.cwd()});if(result.ok){commit({kind:"notice",tone:"info",text:`\u300C${stripTerminalControls(rule)}\u300D\u3092 ${stripTerminalControls(result.file)} \u306B\u4FDD\u5B58\u3057\u307E\u3057\u305F\uFF08${stripTerminalControls(
1299
+ result.root)} \u3067\u306F\u4ECA\u5F8C\u805E\u304D\u307E\u305B\u3093\uFF09`})}else{commit({kind:"notice",tone:"warn",text:`\u4ECA\u5F8C\u805E\u304B\u306A\u3044\u306E\u4FDD\u5B58\u306B\u5931\u6557\u3057\u307E\u3057\u305F\uFF08\u4ECA\u56DE\u3060\u3051\u8A31\u53EF\u3057\u307E\u3057\u305F\uFF09: ${stripTerminalControls(result.reason)}`})}return result.ok}:void 0;const runTurn2=(0,import_react38.useCallback)(async(text,opts={})=>{if(busyRef.current){commit({kind:"notice",tone:"warn",text:"\u5B9F\u884C\u4E2D\u3067\u3059\u3002Ctrl+\
1300
+ C \u3067\u4E2D\u65AD\u3057\u3066\u304B\u3089\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044"});return}busyRef.current=true;abortRef.current=false;setBusy(true);commit({kind:"user",text:opts.display??text});const startupCatalog=await catalogFetchRef.current;if(startupCatalog&&isBelowMinSupported(version,startupCatalog.minSupportedVersion)){blockOnMinSupported(startupCatalog.minSupportedVersion);return}const controller=new AbortController;streamAbortRef.current=controller;try{const expandMode=getMode(
1301
+ modeRef.current);const expandDeps={aborted:()=>abortRef.current,isFile:p=>{const cwdNow=process.cwd();if(isAbsolute(p)||p.startsWith("~")||/^[\\/]{2}/.test(p))return false;const abs=resolvePath(cwdNow,p);const rel=relativePath(cwdNow,abs);if(rel===""||rel===".."||rel.startsWith(`..${sep}`)||isAbsolute(rel))return false;try{return statSync(abs).isFile()}catch{return false}},readFile:async p=>{try{const size2=statSync(resolvePath(process.cwd(),p)).size;if(size2>MAX_ATTACHED_BYTES)return{ok:false,reason:`${size2}\
1302
+ \u30D0\u30A4\u30C8\u3042\u308A\u3001\u6DFB\u4ED8\u306E\u4E0A\u9650 ${MAX_ATTACHED_BYTES} \u30D0\u30A4\u30C8\u3092\u8D85\u3048\u307E\u3059`}}catch{}const result2=await executeTool(readFileTool,{path:p},{mode:expandMode,ctx:{cwd:process.cwd()},sessionAllow:sessionAllow.current,sessionRules:sessionRules.current,...persistAllow?{persistAllow}:{},permissionLayers,...permissionMode!==void 0?{permissionMode}:{},audit,askPermission:request=>askPermission({...promptFor(request),allowInstead:false})});if(result2.
1303
+ isError===true||result2.denied===true){const reason=stripTerminalControls(result2.content.split("\n")[0]??"").slice(0,200);return{ok:false,reason:reason===""?"\u8AAD\u3081\u307E\u305B\u3093\u3067\u3057\u305F":reason}}return{ok:true,content:result2.content,truncated:/\[truncated/.test(result2.content)}},fetchTask:async key=>{const got=await runTwpSlashCommand("/task",[key,"--output","json"],{profile:runtime.profileName,version});if(got.code!==0){const reason=stripTerminalControls(got.err.trim().split(
1304
+ "\n")[0]??"").slice(0,200);return{ok:false,reason:reason===""?`\u7D42\u4E86\u30B3\u30FC\u30C9 ${got.code}`:reason}}try{const parsed=JSON.parse(got.out);if(parsed!==null&&typeof parsed==="object"&&!Array.isArray(parsed)){return{ok:true,task:parsed}}}catch{}return{ok:false,reason:"\u5FDC\u7B54\u3092\u8AAD\u3081\u307E\u305B\u3093\u3067\u3057\u305F"}}};const expanded=await expandInput(text,expandDeps);for(const note of expanded.notices)commit({kind:"notice",tone:"info",text:note});if(abortRef.current){
1305
+ commit({kind:"notice",tone:"warn",text:"\u4E2D\u65AD\u3057\u307E\u3057\u305F\uFF08Ctrl+C\uFF09\u2014 \u9001\u4FE1\u3057\u3066\u3044\u307E\u305B\u3093"});return}stream.begin();const turnMode=getMode(modeRef.current);const resident=buildResidentSet(turnMode,{...permissionMode!==void 0?{permissionMode}:{},permissionLayers});const turnTools=opts.allowedTools===void 0?resident.tools:resident.tools.filter(t=>opts.allowedTools?.includes(t.name)===true);const result=await runTurn(runtime.client,runtime.
1306
+ context,{input:expanded.input,model:modelRef.current,system:buildSystemPrompt({cwd:cwd2,branch,modeLabel:turnMode.label,cliVersion:version,toolNames:turnTools.map(t=>t.name),...turnMode.prompt!==void 0?{modePrompt:turnMode.prompt}:{}}),signal:controller.signal,onTextDelta:delta=>stream.push(stripTerminalControls(delta)),tools:turnTools,execute:{mode:turnMode,ctx:{cwd:process.cwd()},sessionAllow:sessionAllow.current,sessionRules:sessionRules.current,...persistAllow?{persistAllow}:{},permissionLayers,
1307
+ ...permissionMode!==void 0?{permissionMode}:{},audit,askPermission:request=>askPermission(promptFor(request)),onStart:(tool,preview)=>{const safe=stripTerminalControls(preview);setRunningTool({name:stripTerminalControls(tool.name),summary:safe,input:safe,output:"",status:"running"})}},onToolUse:()=>{const partial=stream.end();stream.clear();if(partial.trim()!=="")commit({kind:"assistant",text:partial})},onToolResult:(call,toolResult)=>{setRunningTool(null);const label=stripTerminalControls(toolResult.
1308
+ summary??call.name);const run={name:stripTerminalControls(call.name),summary:label,input:label,output:stripTerminalControls(toolResult.content),status:toolResult.denied===true?"denied":toolResult.isError===true?"error":"done",...toolResult.diff?{diff:toolResult.diff}:{}};lastToolRef.current=run;commit({kind:"tool",run});stream.begin()}});const full=stream.end();stream.clear();if(full.trim()!=="")commit({kind:"assistant",text:full});if(result.maxStepsReached){commit({kind:"notice",tone:"warn",text:"\
1309
+ \u30C4\u30FC\u30EB\u5B9F\u884C\u306E\u5F80\u5FA9\u304C\u4E0A\u9650\u306B\u9054\u3057\u305F\u305F\u3081\u6253\u3061\u5207\u308A\u307E\u3057\u305F\u3002\u7D9A\u304D\u306F\u540C\u3058\u4F1A\u8A71\u3067\u6307\u793A\u3057\u3066\u304F\u3060\u3055\u3044"})}if(result.droppedMessages>0){commit({kind:"notice",tone:"warn",text:`\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u4E0A\u9650\u306B\u8FD1\u3065\u3044\u305F\u305F\u3081\u3001\u53E4\u3044\u3084\u308A\u53D6\u308A ${result.droppedMessages} \u4EF6\u3092\u5C65\u6B74\u304B\u3089\u843D\u3068\u3057\u307E\u3057\u305F\uFF08/clear \u3067\u660E\
1310
+ \u793A\u7684\u306B\u6D88\u305B\u307E\u3059\uFF09`})}if(result.upstreamError!==null){commit({kind:"notice",tone:"error",text:`\u30E2\u30C7\u30EB\u306E\u5FDC\u7B54\u304C\u9014\u4E2D\u3067\u7D42\u308F\u308A\u307E\u3057\u305F: ${result.upstreamError}`})}if(result.aborted){commit({kind:"notice",tone:"warn",text:"\u4E2D\u65AD\u3057\u307E\u3057\u305F\uFF08Ctrl+C\uFF09\u2014 \u3053\u3053\u307E\u3067\u306E\u6D88\u8CBB\u306F\u30C6\u30CA\u30F3\u30C8\u306E\u30AF\u30EC\u30B8\u30C3\u30C8\u306B\u8A08\u4E0A\u3055\u308C\u307E\u3059"})}else if(result.
1311
+ emptyResponse){commit({kind:"notice",tone:"warn",text:"\u30E2\u30C7\u30EB\u304B\u3089\u30C6\u30AD\u30B9\u30C8\u5FDC\u7B54\u304C\u3042\u308A\u307E\u305B\u3093\u3067\u3057\u305F"})}}catch(err){const partial=stream.end();stream.clear();if(partial.trim()!=="")commit({kind:"assistant",text:partial});commit({kind:"notice",tone:"error",text:err instanceof RelayError?err.message:`\u30E2\u30C7\u30EB\u53D6\u6B21\u3067\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F: ${err.message}`})}finally{streamAbortRef.
1312
+ current=null;setRunningTool(null);setContext(runtime.context.snapshot());busyRef.current=false;setBusy(false)}},[audit,blockOnMinSupported,branch,commit,cwd2,permissionLayers,permissionMode,runtime,stream,version]);const runDemo=(0,import_react38.useCallback)(async text=>{if(busyRef.current){commit({kind:"notice",tone:"warn",text:"\u5B9F\u884C\u4E2D\u3067\u3059\u3002Ctrl+C \u3067\u4E2D\u65AD\u3057\u3066\u304B\u3089\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044"});return}busyRef.current=true;abortRef.
1313
+ current=false;setBusy(true);commit({kind:"user",text});for(const step of buildScenario(text)){if(abortRef.current)break;if(step.type==="text"){await stream.start(step.text);stream.clear();if(!abortRef.current)commit({kind:"assistant",text:step.text});continue}const spec=step.spec;const policy=applyPermissionMode(checkPermission(spec.name,getMode(modeRef.current)),spec.risk??"exec",permissionMode).decision;const decision=policy!=="deny"&&demoSessionAllow.current.has(spec.name)?"allow":policy;if(decision===
1314
+ "deny"){const run={name:spec.name,summary:spec.summary,input:spec.input,output:`permission denied: ${getMode(modeRef.current).label}\u30E2\u30FC\u30C9\u3067\u306F ${spec.name} \u306F deny \u3067\u3059`,status:"denied"};commit({kind:"tool",run});commit({kind:"notice",tone:"warn",text:"deny-and-continue: \u62D2\u5426\u3092 tool result \u3068\u3057\u3066\u30E2\u30C7\u30EB\u3078\u8FD4\u3057\u3001\u30EB\u30FC\u30D7\u306F\u7D9A\u884C\u3057\u307E\u3059\uFF08\u7121\u8A00\u306E allow \u306B\u306F\u3057\u306A\u3044\uFF09"});
1315
+ continue}if(decision==="ask"){const choice=await askPermission(spec);if(choice==="no"||typeof choice==="object"&&choice.kind==="instead"){commit({kind:"tool",run:{name:spec.name,summary:spec.summary,input:spec.input,output:"\u30E6\u30FC\u30B6\u30FC\u304C\u62D2\u5426\u3057\u307E\u3057\u305F",status:"denied"}});commit({kind:"notice",tone:"info",text:"/demo \u306F\u518D\u751F\u306E\u305F\u3081\u3001\u3053\u3053\u3067\u6253\u3061\u5207\u308A\u307E\u3059\uFF08\u5B9F\u969B\u306E\u4F1A\u8A71\u3067\u306F\u300C\u4EE3\u308F\u308A\u306B\u3053\u3046\u3057\u3066\u300D\u306E\u5165\u529B\u304C\u30E2\u30C7\u30EB\u3078\u8FD4\u308A\u307E\u3059\uFF09"});
1316
+ break}if(choice==="always")demoSessionAllow.current.add(spec.name)}setRunningTool({name:spec.name,summary:spec.summary,input:spec.input,output:"",status:"running"});await sleep(spec.durationMs);setRunningTool(null);if(abortRef.current)break;const done={name:spec.name,summary:spec.summary,input:spec.input,output:spec.output,status:"done",durationMs:spec.durationMs};lastToolRef.current=done;commit({kind:"tool",run:done})}stream.clear();busyRef.current=false;setBusy(false)},[commit,stream]);const runTwp=(0,import_react38.useCallback)(
1317
+ async(line,name,args)=>{const result=await runTwpSlashCommand(name,args,{profile:runtime.profileName,version});const out=stripTerminalControls(result.out).replace(/\n+$/,"");const err=stripTerminalControls(result.err).replace(/\n+$/,"");if(result.code===0){commit({kind:"notice",tone:"info",text:[line,out===""?"\uFF080 \u4EF6\uFF09":out,...err!==""?[err]:[]].join("\n")});return}commit({kind:"notice",tone:"error",text:[line,err===""?`\u7D42\u4E86\u30B3\u30FC\u30C9 ${result.code}`:err].join("\n")})},
1318
+ [commit,runtime,version]);const runPromptCommand=(0,import_react38.useCallback)((line,cmd,rest,args)=>{const body=expandArguments(cmd.template??"",rest,args);void runTurn2(frameCommandPrompt(cmd,body),{display:line,...cmd.allowedTools!==void 0?{allowedTools:cmd.allowedTools}:{}})},[runTurn2]);const runCommand=(0,import_react38.useCallback)(line=>{const parsed=parseCommandLine(line);if(!parsed)return;const{args}=parsed;const name=resolveCommandName(parsed.name);const cmd=findCommand(name);if(cmd!==
1319
+ void 0&&!isAvailableInMode(cmd,modeRef.current)){commit({kind:"notice",tone:"warn",text:`${name} \u306F ${getMode(modeRef.current).label}\u30E2\u30FC\u30C9\u3067\u306F\u4F7F\u3048\u307E\u305B\u3093\uFF08\u4F7F\u3048\u308B\u30E2\u30FC\u30C9: ${(cmd.modes??[]).join(" / ")}\uFF09`});return}if(isTwpSlashCommand(name)){void runTwp(line.trim(),name,args);return}if(cmd?.template!==void 0){runPromptCommand(line.trim(),cmd,parsed.rest,args);return}switch(name){case"/exit":exit();return;case"/clear":setItems(
1320
+ []);runtime.context.clear();setContext(runtime.context.snapshot());return;case"/doctor":setOverlay("doctor");return;case"/model":setSelected(Math.max(0,catalog.ids.indexOf(model)));setOverlay("model");return;case"/mode":{const target=args[0];if(target!==void 0&&!isModeId(target)){commit({kind:"notice",tone:"warn",text:`\u4E0D\u660E\u306A\u30E2\u30FC\u30C9: ${target}\uFF08dev | biz | plan\uFF09`});return}const to=target??nextMode(modeRef.current);setMode(to);commit({kind:"notice",tone:"info",text:`\
1321
+ \u30E2\u30FC\u30C9\u3092 ${getMode(to).label}\uFF08${to}\uFF09\u306B\u5207\u308A\u66FF\u3048\u307E\u3057\u305F \u2014 ${getMode(to).description}`});return}case"/help":commit({kind:"notice",tone:"info",text:["\u4F1A\u8A71\u306F\u30C6\u30CA\u30F3\u30C8\u306E\u30AF\u30EC\u30B8\u30C3\u30C8\u3067\u5B9F\u969B\u306B\u30E2\u30C7\u30EB\u3078\u9001\u3089\u308C\u307E\u3059",`\u4F7F\u3048\u308B\u30B3\u30DE\u30F3\u30C9: ${commandsForMode(modeRef.current).map(c=>c.name).join(" ")}\uFF08/exit \u306F /quit \u3082\u53EF\uFF09`,
1322
+ ...commandsForMode(modeRef.current).filter(c=>c.source!==void 0).map(c=>` ${c.name} \u2014 ${c.origin==="project"?"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5B9A\u7FA9":"\u30E6\u30FC\u30B6\u30FC\u5B9A\u7FA9"}: ${c.source??""}`),"\u30B3\u30DE\u30F3\u30C9\u306F .twp/commands/*.md\uFF08\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\uFF09\u3068 ~/.twp/commands/*.md\uFF08\u30E6\u30FC\u30B6\u30FC\uFF09\u306B\u7F6E\u3051\u307E\u3059 \xB7 @\u30D1\u30B9 \u3067\u30D5\u30A1\u30A4\u30EB\u6DFB\u4ED8 \xB7 #ABC-123 \u306E\u3088\u3046\u306A\u30BF\u30B9\u30AF\u30AD\u30FC\u3067\u30BF\u30B9\u30AF\u6DFB\u4ED8",
1323
1323
  ...(()=>{const pending=PENDING_COMMANDS.filter(c=>findCommand(c.name)===void 0);return pending.length>0?[`\u672A\u5B9F\u88C5\u306E\u305F\u3081\u767B\u9332\u3057\u3066\u3044\u306A\u3044\u30B3\u30DE\u30F3\u30C9: ${pending.map(c=>c.name).join(" ")}`]:[]})(),"\u30AD\u30FC: Shift+Tab \u307E\u305F\u306F Alt+M \u3067\u30E2\u30FC\u30C9\u5DE1\u56DE \xB7 Ctrl+R \u3067\u76F4\u524D\u306E\u30C4\u30FC\u30EB\u51FA\u529B\u3092\u5C55\u958B","\u6539\u884C: Shift+Enter\uFF08kitty \u5BFE\u5FDC\u7AEF\u672B\uFF09\xB7 Ctrl+J\uFF08\u5168\u7AEF\u672B\uFF09\xB7 \\ \u3092\u6253\u3063\u3066\u304B\u3089 Enter \u3067\u3082\u53EF"].
1324
1324
  join("\n")});return;case"/context":{const snapshot=runtime.context.snapshot();const t=snapshot.totals;const resident=buildResidentSet(getMode(modeRef.current),{...permissionMode!==void 0?{permissionMode}:{},permissionLayers});commit({kind:"notice",tone:"info",text:[`\u30E2\u30C7\u30EB: ${modelLabel(model)}\uFF08\u30E2\u30FC\u30C9\u3068\u306F\u72EC\u7ACB\uFF09`,`\u30E2\u30FC\u30C9: ${getMode(modeRef.current).label} \u2014 \u6709\u52B9\u30C4\u30FC\u30EB glob: ${getMode(modeRef.current).tools.join(
1325
1325
  " ")}`,`\u30E2\u30FC\u30C9\u5B9A\u7FA9: ${modeSource(modeRef.current)??"\u7D44\u307F\u8FBC\u307F\uFF08\u5B9A\u7FA9\u30D5\u30A1\u30A4\u30EB\u306A\u3057\uFF09"}`,`\u63A5\u7D9A\u5148: ${runtime.relayUrl}\uFF08\u30D7\u30ED\u30D5\u30A1\u30A4\u30EB: ${runtime.profileName}\uFF09`,`\u30BF\u30FC\u30F3\u6570: ${snapshot.turns} \xB7 \u76F4\u8FD1\u306E\u30D7\u30ED\u30F3\u30D7\u30C8\u9577: ${snapshot.lastPromptTokens} tok`,`\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u6B8B\u91CF: ${snapshot.remainingPercent}%\uFF08\u7A93 200\
@@ -1330,19 +1330,18 @@ join("\n")});return}case"/demo":void runDemo("\uFF08\u30C7\u30E2\u518D\u751F\uFF
1330
1330
  ()=>{const c=fileCompletionFor(buffer,fileIndex);return c!==null&&c.start!==dismissedMentionRef.current?c:null},[buffer,fileIndex]);(0,import_react38.useEffect)(()=>{if(fileIndexRef.current!==null||fileIndexLoading.current)return;if(mentionAtCursor(buffer.text,buffer.cursor)===null)return;fileIndexLoading.current=true;void buildFileIndex(process.cwd()).then(index=>{setFileIndex(index);if(index.note!==null)commit({kind:"notice",tone:"info",text:`@ \u88DC\u5B8C: ${index.note}`})},err=>{fileIndexLoading.
1331
1331
  current=false;commit({kind:"notice",tone:"warn",text:`@ \u88DC\u5B8C\u306E\u5019\u88DC\u3092\u4F5C\u308C\u307E\u305B\u3093\u3067\u3057\u305F: ${stripTerminalControls(err.message)}`})})},[buffer,commit]);const onKey=(0,import_react38.useCallback)(ev=>{setKeyLog(prev=>[...prev.slice(-49),ev]);if(ev.name==="ctrl-d"){exit();return}if(ev.name==="ctrl-c"){if(busyRef.current){if(abortRef.current){permissionResolver.current?.("no");return}abortRef.current=true;streamAbortRef.current?.abort();permissionResolver.
1332
1332
  current?.("no");stream.cancel();abortSleep();setRunningTool(null);if(!streamAbortRef.current){commit({kind:"notice",tone:"warn",text:"\u4E2D\u65AD\u3057\u307E\u3057\u305F\uFF08Ctrl+C\uFF09"})}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==="sh\
1333
- ift-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.summary}\uFF08\u5C55\u958B\uFF09`},expanded:true});return}if(overlay==="permission"){const resolve=permissionResolver.current;if(!resolve)return;if(ev.name==="paste"&&ev.value){const pasted=ev.value.replace(/\r\n?/g,"\n");setBuffer(b=>insert(b,pasted));return}const choices=pendingPermission?choicesFor(pendingPermission):
1334
- PERMISSION_CHOICES;if(ev.name==="up")setSelected(s=>Math.max(0,s-1));else if(ev.name==="down")setSelected(s=>Math.min(choices.length-1,s+1));else if(ev.name==="enter")resolve(choices[selectedRef.current]?.key??"no");else if(ev.name==="escape")resolve("no");else if(ev.name==="char"&&ev.value&&"123".includes(ev.value)){resolve(choices[Number(ev.value)-1]?.key??"no")}return}if(overlay==="doctor"){if(ev.name==="escape")setOverlay("none");return}if(overlay==="model"){if(ev.name==="up")setSelected(s=>Math.
1335
- 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){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(modeRef.current).label} \u306E\u307E\u307E\uFF09`})}setOverlay("none")}return}
1336
- 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+1));return}if(ev.name==="tab"){const picked=files.
1337
- 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>0){if(ev.name==="up"){setSelected(s=>Math.max(0,s-
1338
- 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-1)];if(picked){if(exact===void 0&&picked.argumentHint?.
1339
- 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(b=>insert(b,"\n"));return;case"enter":{const b=bufferRef.
1340
- current;if(b.cursor>0&&b.text[b.cursor-1]==="\\"){setBuffer(prev=>({text:`${prev.text.slice(0,prev.cursor-1)}
1333
+ ift-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.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(
1334
+ permStateRef.current,ev,pendingPermissionRef.current??{name:""});if("answer"in step)resolve(step.answer);else setPermState(step.state);return}if(overlay==="doctor"){if(ev.name==="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){
1335
+ 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(modeRef.current).label} \u306E\u307E\u307E\uFF09`})}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(
1336
+ 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.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}));
1337
+ 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(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(
1338
+ 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(()=>({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"\
1339
+ 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.cursor-1]==="\\"){setBuffer(prev=>({text:`${prev.text.slice(0,prev.cursor-1)}
1341
1340
  ${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(
1342
- 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,clearBuffer,commit,ctrlCArmed,exit,overlay,setBuffer,setSelected,stream,submit,runCommand]);useTerminalInput(onKey,setPasting);const streamRows=fitTailRows(stream.text,size.columns,budget.body).rows;const diffBudget=budget.body-12;const listBudget=Math.max(1,budget.body-6);const doctorBudget=Math.max(1,budget.
1341
+ 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,clearBuffer,commit,ctrlCArmed,exit,overlay,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-6);const doctorBudget=Math.max(1,budget.
1343
1342
  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)(Text,{wrap:"\
1344
- truncate",children:line===""?" ":line},i))}):null,runningTool?(0,import_jsx_runtime9.jsx)(ToolCard,{run:runningTool,expanded:false,maxLines:budget.body}):null,overlay==="permission"&&pendingPermission?(0,import_jsx_runtime9.jsx)(PermissionDialog,{spec:pendingPermission,selected:selectedState,maxDiffLines:diffBudget}):null,overlay==="model"?(0,import_jsx_runtime9.jsx)(SelectList,{title:`\u30E2\u30C7\u30EB\u3092\u9078\u629E\uFF08\u30E2\u30FC\u30C9\u3068\u306F\u72EC\u7ACB\uFF09${catalogTitleSuffix(
1345
- catalog.source)}`,items:toModelInfos(catalog.ids).map(m=>({key:m.id,label:m.label,hint:m.note})),selected:selectedState,maxRows:Math.min(catalog.ids.length,listBudget),footer:"\u2191\u2193 \u3067\u9078\u629E \xB7 Enter \u3067\u6C7A\u5B9A \xB7 Esc \u3067\u53D6\u6D88"}):null,overlay==="doctor"?(0,import_jsx_runtime9.jsx)(Doctor,{events:keyLog,maxRows:doctorBudget,network:networkDiagnostics}):null,overlay==="none"&&!busy&&fileCompletion!==null?(0,import_jsx_runtime9.jsx)(SelectList,{title:"\u30D5\u30A1\u30A4\u30EB",
1343
+ truncate",children:line===""?" ":line},i))}):null,runningTool?(0,import_jsx_runtime9.jsx)(ToolCard,{run:runningTool,expanded:false,maxLines:budget.body}):null,overlay==="permission"&&pendingPermission?(0,import_jsx_runtime9.jsx)(PermissionDialog,{spec:pendingPermission,state:permState,maxDiffLines:diffBudget}):null,overlay==="model"?(0,import_jsx_runtime9.jsx)(SelectList,{title:`\u30E2\u30C7\u30EB\u3092\u9078\u629E\uFF08\u30E2\u30FC\u30C9\u3068\u306F\u72EC\u7ACB\uFF09${catalogTitleSuffix(catalog.
1344
+ source)}`,items:toModelInfos(catalog.ids).map(m=>({key:m.id,label:m.label,hint:m.note})),selected:selectedState,maxRows:Math.min(catalog.ids.length,listBudget),footer:"\u2191\u2193 \u3067\u9078\u629E \xB7 Enter \u3067\u6C7A\u5B9A \xB7 Esc \u3067\u53D6\u6D88"}):null,overlay==="doctor"?(0,import_jsx_runtime9.jsx)(Doctor,{events:keyLog,maxRows:doctorBudget,network:networkDiagnostics}):null,overlay==="none"&&!busy&&fileCompletion!==null?(0,import_jsx_runtime9.jsx)(SelectList,{title:"\u30D5\u30A1\u30A4\u30EB",
1346
1345
  items:fileCompletion.items.map(f=>({key:f,label:stripTerminalControls(f),hint:""})),selected:selectedState,maxRows:Math.min(8,listBudget),footer:"\u2191\u2193 \u9078\u629E \xB7 Tab \u78BA\u5B9A \xB7 Esc \u9589\u3058\u308B\uFF08Enter \u306F\u305D\u306E\u307E\u307E\u9001\u4FE1\uFF09"}):null,overlay==="none"&&!busy&&paletteItems.length>0?(0,import_jsx_runtime9.jsx)(SelectList,{title:"\u30B9\u30E9\u30C3\u30B7\u30E5\u30B3\u30DE\u30F3\u30C9",items:paletteItems.map(c=>({key:c.name,label:`${c.name}${c.argumentHint?
1347
1346
  ` ${c.argumentHint}`:""}`,hint:`${c.description}${originLabel(c)}`})),selected:selectedState,maxRows:Math.min(8,listBudget),footer:"\u2191\u2193 \u9078\u629E \xB7 Tab \u88DC\u5B8C \xB7 Enter \u5B9F\u884C \xB7 Esc \u53D6\u6D88"}):null,(0,import_jsx_runtime9.jsx)(InputBox,{value:buffer.text,window:inputWindow,busy,pasting,width:size.columns}),(0,import_jsx_runtime9.jsx)(StatusLine,{mode:modeDef,model,cwd:cwd2,branch,contextRemaining:context.remainingPercent,width:size.columns}),(0,import_jsx_runtime9.jsx)(
1348
1347
  HintLine,{width:size.columns})]})]})}import fs4 from"fs";import path2 from"path";var KNOWN_KEYS=new Set(["description","argument-hint","allowed-tools","mode"]);var TEXT_MAX=80;var TEMPLATE_MAX_BYTES=16384;var FILE_COUNT_MAX=128;var FILE_BYTES_MAX=64*1024;var DEPTH_MAX=3;var WARNING_MAX=30;var KNOWN_TOOLS=new Set([...localTools().map(t=>t.name),"bash","shell"]);var SEGMENT=/^[A-Za-z0-9][A-Za-z0-9_-]*$/;function samePath(a,b){const real=p=>{try{return fs4.realpathSync(p)}catch{return path2.resolve(p)}};const x=real(a);const y=real(b);return process.platform==="win32"||process.
@@ -1,4 +1,4 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{CHECK_INTERVAL_MS,DISABLE_ENV,PARENT_PID_ENV,WORKER_ENV,autoUpdateDisabledReason,classifyInstall,describeAutoUpdate,isCheckDue,listRegisteredPids,lockFilePath,onStartup,pickNotice,readUpdateState,registerRunning,resolveCliPath,runDirPath,sameNpmPath,stateFilePath,workerEnv,writeUpdateState}from"./chunk-ILKQDXI5.js";import"./chunk-DXXFUNYN.js";import"./chunk-5WGOHFAS.js";import"./chunk-NERYSBA4.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";
3
+ import{CHECK_INTERVAL_MS,DISABLE_ENV,PARENT_PID_ENV,WORKER_ENV,autoUpdateDisabledReason,classifyInstall,describeAutoUpdate,isCheckDue,listRegisteredPids,lockFilePath,onStartup,pickNotice,readUpdateState,registerRunning,resolveCliPath,runDirPath,sameNpmPath,stateFilePath,workerEnv,writeUpdateState}from"./chunk-DSDVIU6A.js";import"./chunk-DXXFUNYN.js";import"./chunk-NERYSBA4.js";import"./chunk-5WGOHFAS.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";
4
4
  import"./chunk-VSJBJXZO.js";export{CHECK_INTERVAL_MS,DISABLE_ENV,PARENT_PID_ENV,WORKER_ENV,autoUpdateDisabledReason,classifyInstall,describeAutoUpdate,isCheckDue,listRegisteredPids,lockFilePath,onStartup,pickNotice,readUpdateState,registerRunning,resolveCliPath,runDirPath,sameNpmPath,stateFilePath,workerEnv,writeUpdateState};
@@ -1,7 +1,7 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{fetchLatestVersion,isBehindLatest,resolveNpmCommand}from"./chunk-GTABFTZP.js";import"./chunk-FOFV2MNL.js";import"./chunk-XNLIEUAW.js";import"./chunk-PMOUHEJQ.js";import{PARENT_PID_ENV,WORKER_ENV,autoUpdateDisabledReason,classifyInstall,isCheckDue,listRegisteredPids,lockFilePath,readUpdateState,resolveCliPath,runDirPath,writeUpdateState}from"./chunk-ILKQDXI5.js";import{PACKAGE_NAME,parseVersionCore}from"./chunk-DXXFUNYN.js";import"./chunk-5WGOHFAS.js";
4
- import"./chunk-J7QYPKVK.js";import"./chunk-NERYSBA4.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(
3
+ import{fetchLatestVersion,isBehindLatest,resolveNpmCommand}from"./chunk-JDMNIUVX.js";import"./chunk-PI5DUWNZ.js";import"./chunk-XNLIEUAW.js";import"./chunk-J7QYPKVK.js";import"./chunk-PMOUHEJQ.js";import{PARENT_PID_ENV,WORKER_ENV,autoUpdateDisabledReason,classifyInstall,isCheckDue,listRegisteredPids,lockFilePath,readUpdateState,resolveCliPath,runDirPath,writeUpdateState}from"./chunk-DSDVIU6A.js";import{PACKAGE_NAME,parseVersionCore}from"./chunk-DXXFUNYN.js";
4
+ import"./chunk-NERYSBA4.js";import"./chunk-5WGOHFAS.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}\
7
7
  \uFF09`}else if(code!==void 0){reason=`npm \u304C\u5931\u6557\u3057\u307E\u3057\u305F\uFF08${code}\uFF09`}else{const line=text.split("\n").map(l=>l.trim()).find(l=>l!=="")??"\u4E0D\u660E\u306A\u30A8\u30E9\u30FC";reason=`npm \u304C\u5931\u6557\u3057\u307E\u3057\u305F: ${line}`}return stripTerminalControls(reason).slice(0,200)}function readInstalledVersion(cliPath){try{const pkgRoot=path.dirname(path.dirname(cliPath));const pkg=JSON.parse(fs.readFileSync(path.join(pkgRoot,"package.json"),"utf8"));
@@ -1,7 +1,7 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{readBody}from"./chunk-QVXZEUKN.js";import{BACKLOG_BASE_PATH,BACKLOG_PROJECT_SCOPE_LABEL,BACKLOG_SCOPE_LABEL,backlogSpacePath,resolveNamed}from"./chunk-MIMDLO52.js";import"./chunk-II5RVJQN.js";import"./chunk-JKSXUBND.js";import"./chunk-J7QYPKVK.js";import"./chunk-NERYSBA4.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import{isRecord,pick,requireResolved,singleRef,withResolved}from"./chunk-GFC2ASHE.js";import{ApiResponseError,
4
- UsageError}from"./chunk-M3GWY6NT.js";import"./chunk-5QCAIKFE.js";import"./chunk-VSJBJXZO.js";var DEFAULT_COUNT=20;var MAX_COUNT=100;var NUMERIC=/^[0-9]+$/;function isExactNumericId(value){return NUMERIC.test(value)&&String(Number(value))===value}var ISSUE_REF=/^(?:[A-Za-z0-9_]+-[0-9]+|[0-9]+)$/;var DATE=/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/;var SPACE_COLUMNS=["id","space_url"];var PROJECT_COLUMNS=["id","projectKey","name"];var ISSUE_LIST_COLUMNS=["issueKey","summary","status","assignee","priority","dueDate","updated","descriptionTruncated"];var ISSUE_GET_COLUMNS=["id","issueKey","projectId","s\
3
+ import{isRecord,pick,requireResolved,singleRef,withResolved}from"./chunk-GFC2ASHE.js";import{readBody}from"./chunk-QVXZEUKN.js";import{BACKLOG_BASE_PATH,BACKLOG_PROJECT_SCOPE_LABEL,BACKLOG_SCOPE_LABEL,backlogSpacePath,resolveNamed}from"./chunk-JB27KNCX.js";import"./chunk-JKSXUBND.js";import"./chunk-II5RVJQN.js";import"./chunk-X4RS5VBH.js";import"./chunk-J7QYPKVK.js";import"./chunk-NERYSBA4.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";
4
+ import{ApiResponseError,UsageError}from"./chunk-M3GWY6NT.js";import"./chunk-VSJBJXZO.js";var DEFAULT_COUNT=20;var MAX_COUNT=100;var NUMERIC=/^[0-9]+$/;function isExactNumericId(value){return NUMERIC.test(value)&&String(Number(value))===value}var ISSUE_REF=/^(?:[A-Za-z0-9_]+-[0-9]+|[0-9]+)$/;var DATE=/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/;var SPACE_COLUMNS=["id","space_url"];var PROJECT_COLUMNS=["id","projectKey","name"];var ISSUE_LIST_COLUMNS=["issueKey","summary","status","assignee","priority","dueDate","updated","descriptionTruncated"];var ISSUE_GET_COLUMNS=["id","issueKey","projectId","s\
5
5
  ummary","description","descriptionTruncated","status","issueType","priority","assignee","createdUser","parentIssueId","startDate","dueDate","estimatedHours","actualHours","created","updated"];var COMMENT_COLUMNS=["id","created","createdUserId","createdUser","content","changeLog"];function commentRow(row){const source=isRecord(row)?row:{};const user=isRecord(source["createdUser"])?source["createdUser"]:{};return pick({...source,createdUserId:user["id"]??null,createdUser:user["name"]??null},COMMENT_COLUMNS)}
6
6
  var ATTACHMENT_COLUMNS=["id","name","size","contentType","createdUserId","createdUser","created"];var STATUS_COLUMNS=["id","name","color"];var USER_COLUMNS=["id","userId","name","mailAddress","roleType"];var SPACE_FLAG={name:"--space",summary:"Backlog \u30B9\u30DA\u30FC\u30B9\uFF08ID / \u30B9\u30DA\u30FC\u30B9URL / \u30B5\u30D6\u30C9\u30E1\u30A4\u30F3\uFF09\u3002\u767B\u9332\u304C1\u4EF6\u306A\u3089\u7701\u7565\u3067\u304D\u307E\u3059",takesValue:true,placeholder:"<ID|URL>"};var BODY_MAX_CHARS=1e5;
7
7
  var BODY_FLAGS=[{name:"--body-file",summary:"\u672C\u6587\u3092\u30D5\u30A1\u30A4\u30EB\u304B\u3089\u8AAD\u3080\uFF08- \u3067\u6A19\u6E96\u5165\u529B\uFF09\u3002\u6539\u884C\u30FBMarkdown \u3092\u58CA\u3055\u306A\u3044\u4E3B\u7D4C\u8DEF",takesValue:true,placeholder:"<\u30D1\u30B9|->"},{name:"--body",summary:"\u672C\u6587\u3092\u76F4\u63A5\u6307\u5B9A\u3059\u308B\uFF08\u4E00\u884C\u5411\u3051\u3002--body-file \u3068\u306E\u4F75\u7528\u306F\u30A8\u30E9\u30FC\uFF09",takesValue:true,placeholder:"<\u6587\u5B57\
@@ -0,0 +1,36 @@
1
+ import { createRequire as __twpCreateRequire } from 'node:module';
2
+ const require = __twpCreateRequire(import.meta.url);
3
+ import{buildDiffLines,diffStat}from"./chunk-VRBI2NPI.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import{EXIT_API_CLIENT,EXIT_API_SERVER,EXIT_AUTH,EXIT_FAILURE,EXIT_OK,EXIT_USAGE}from"./chunk-M3GWY6NT.js";import"./chunk-VSJBJXZO.js";import*as fs from"fs";var DEFAULT_CHARTER_FILE="CONSTITUTION.md";async function runCharterCommand(deps,opts){const out=deps.out??(t=>void process.stdout.write(stripTerminalControls(t)));const err=deps.err??(t=>void process.stderr.write(stripTerminalControls(t)));const readFile=deps.readFile??(p=>new TextDecoder("utf-8",{fatal:true,ignoreBOM:true}).decode(fs.readFileSync(p)));const writeFile=deps.writeFile??((p,c)=>fs.writeFileSync(p,c,"utf8"));const exists=deps.exists??(p=>fs.existsSync(p));return opts.op==="push"?push(
4
+ deps.api,opts,{out,err,readFile}):pull(deps.api,opts,{out,err,readFile,writeFile,exists})}async function push(api,opts,io){if(opts.file===void 0){io.err("--file <\u30D1\u30B9> \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u4F8B: --file CONSTITUTION.md\uFF09\n");return EXIT_USAGE}let expected;if(opts.revision!==void 0){if(!/^\d+$/.test(opts.revision)){io.err(`--revision \u306F0\u4EE5\u4E0A\u306E\u6574\u6570\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${opts.revision}
5
+ `);return EXIT_USAGE}if(!opts.yes){io.err("--revision \u306F --yes \u3068\u4E00\u7DD2\u306B\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08--yes \u306A\u3057\u3067\u306F\u767B\u9332\u3057\u307E\u305B\u3093\uFF09\n");return EXIT_USAGE}expected=Number(opts.revision)}let local;try{local=io.readFile(opts.file)}catch(e){io.err(`\u30D5\u30A1\u30A4\u30EB\u3092\u8AAD\u3081\u307E\u305B\u3093: ${opts.file}\uFF08${e.message}\uFF09
6
+ `);return EXIT_USAGE}const current=await fetchState(api,io.err);if(typeof current==="number")return current;const before=current.charter??"";if(current.charter!==null&&current.charter===local){io.out(`\u5DEE\u5206\u306F\u3042\u308A\u307E\u305B\u3093\uFF08revision ${current.revision}\uFF09\u3002\u767B\u9332\u3057\u307E\u305B\u3093\u3067\u3057\u305F\u3002
7
+ `);return EXIT_OK}printDiff(io.out,`\u30B5\u30FC\u30D0\uFF08revision ${current.revision}${current.charter===null?"\u30FB\u672A\u767B\u9332":""}\uFF09`,opts.file,before,local);if(current.charter===null&&local===""){io.out("\u26A0\uFE0F \u30D5\u30A1\u30A4\u30EB\u304C\u7A7A\u3067\u3059\u3002\u767B\u9332\u3059\u308B\u3068\u7D44\u307F\u8FBC\u307F\u65E2\u5B9A\u3067\u306F\u306A\u304F\u300C\u7A7A\u306E\u61B2\u7AE0\u300D\u306B\u306A\u308A\u307E\u3059\n")}const revision=expected??current.revision;if(!opts.
8
+ yes){io.out(`
9
+ \u767B\u9332\u3057\u3066\u3044\u307E\u305B\u3093\u3002\u3053\u306E\u5DEE\u5206\u3067\u78BA\u5B9A\u3059\u308B\u306B\u306F\u6B21\u3092\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044\uFF08revision ${current.revision} \u3092\u9001\u308B\u306E\u3067\u3001\u305D\u306E\u5F8C\u30B5\u30FC\u30D0\u304C\u66F4\u65B0\u3055\u308C\u3066\u3044\u308C\u3070 409 \u3067\u6B62\u307E\u308A\u307E\u3059\uFF09:
10
+ ${confirmCommand(opts,current.revision)}
11
+ `);return EXIT_USAGE}const res=await api.request("PUT","/settings/charter",{charter:local,revision});if(!res.ok){if(res.status===409){const json=res.json??{};const data=json["data"]&&typeof json["data"]==="object"?json["data"]:{};const now=pickNumber(json,"current_revision")??pickNumber(data,"current_revision");io.err(`\u26D4 409: revision ${revision} \u3067\u9001\u308A\u307E\u3057\u305F\u304C\u3001\u30B5\u30FC\u30D0\u306F${now!==null?` revision ${now} \u306B`:""}\u66F4\u65B0\u3055\u308C\u3066\u3044\u307E\u3059\u3002\u753B\u9762\u3067\u7DE8\u96C6\u3055\u308C\u305F\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002\u4E0A\u66F8\u304D\u305B\u305A\u306B\
12
+ \u6B62\u3081\u307E\u3057\u305F\uFF08\u5DEE\u5206\u3092\u78BA\u8A8D\u3057\u3066\u304B\u3089\u3084\u308A\u76F4\u3057\u3066\u304F\u3060\u3055\u3044\uFF09
13
+ ${errorDetail(res)}
14
+ `);return apiExit(res)}io.err(`\u26D4 \u61B2\u7AE0\u3092\u767B\u9332\u3067\u304D\u307E\u305B\u3093\uFF08${errorDetail(res)}\uFF09
15
+ `);return apiExit(res)}const saved=parseState(res);if(saved===null){io.err(`\u26A0\uFE0F \u5FDC\u7B54\u3092\u89E3\u91C8\u3067\u304D\u307E\u305B\u3093\u3002\u53CD\u6620\u3055\u308C\u305F\u304B\u3092 GET \u3067\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u5FDC\u7B54\u306E\u5148\u982D: ${res.raw.slice(0,120)}\uFF09
16
+ `);return EXIT_API_SERVER}io.out(`\u767B\u9332\u3057\u307E\u3057\u305F: revision ${saved.revision}\uFF08\u66F4\u65B0\u8005: ${saved.updatedByName||"\u4E0D\u660E"}${saved.updatedAt?`\u30FB${saved.updatedAt}`:""}\uFF09
17
+ `);return EXIT_OK}async function pull(api,opts,io){const target=opts.out??DEFAULT_CHARTER_FILE;const current=await fetchState(api,io.err);if(typeof current==="number")return current;if(current.charter===null){io.err(`\u30B5\u30FC\u30D0\u306B\u61B2\u7AE0\u304C\u767B\u9332\u3055\u308C\u3066\u3044\u307E\u305B\u3093\uFF08revision ${current.revision}\uFF09\u3002${target} \u306F\u5909\u66F4\u3057\u307E\u305B\u3093\u3067\u3057\u305F\u3002
18
+ `);return EXIT_FAILURE}const source=`\u30B5\u30FC\u30D0\uFF08revision ${current.revision}${current.updatedByName?`\u30FB${current.updatedByName}`:""}\uFF09`;if(io.exists(target)){let local;try{local=io.readFile(target)}catch(e){io.err(`\u65E2\u5B58\u30D5\u30A1\u30A4\u30EB\u3092\u8AAD\u3081\u307E\u305B\u3093: ${target}\uFF08${e.message}\uFF09
19
+ `);return EXIT_FAILURE}if(local===current.charter){io.out(`${target} \u306F\u30B5\u30FC\u30D0\uFF08revision ${current.revision}\uFF09\u3068\u540C\u3058\u3067\u3059\u3002\u5909\u66F4\u3057\u307E\u305B\u3093\u3067\u3057\u305F\u3002
20
+ `);return EXIT_OK}printDiff(io.out,target,source,local,current.charter);if(!opts.yes){io.out(`
21
+ ${target} \u3092\u4E0A\u66F8\u304D\u3057\u3066\u3044\u307E\u305B\u3093\u3002\u4E0A\u66F8\u304D\u3059\u308B\u306B\u306F --yes \u3092\u4ED8\u3051\u3066\u518D\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044\u3002
22
+ `);return EXIT_USAGE}}try{io.writeFile(target,current.charter)}catch(e){io.err(`\u66F8\u304D\u8FBC\u3081\u307E\u305B\u3093: ${target}\uFF08${e.message}\uFF09
23
+ `);return EXIT_FAILURE}io.out(`${target} \u306B\u5C55\u958B\u3057\u307E\u3057\u305F\uFF08revision ${current.revision}\uFF09\u3002
24
+ `);return EXIT_OK}async function fetchState(api,err){const res=await api.request("GET","/settings");if(!res.ok){err(`\u26D4 \u30EB\u30FC\u30D7\u8A2D\u5B9A\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\uFF08${errorDetail(res)}\uFF09
25
+ `);return apiExit(res)}const state=parseState(res);if(state===null){err(`\u26D4 \u30EB\u30FC\u30D7\u8A2D\u5B9A\u306E\u5FDC\u7B54\u3092\u89E3\u91C8\u3067\u304D\u307E\u305B\u3093\uFF08\u5FDC\u7B54\u306E\u5148\u982D: ${res.raw.slice(0,120)}\uFF09
26
+ `);return EXIT_API_SERVER}return state}function apiExit(res){if(res.status===401)return EXIT_AUTH;if(res.status!==null&&res.status>=400&&res.status<500)return EXIT_API_CLIENT;return EXIT_API_SERVER}function body(res){const json=res.json??{};const data=json["data"];if(data&&typeof data==="object"&&!Array.isArray(data)&&"revision"in data){return data}return json}function parseState(res){const b=body(res);const revision=pickNumber(b,"revision");if(revision===null)return null;const prompts=b["prompt\
27
+ s"];let charter=null;if(prompts&&typeof prompts==="object"){const v=prompts["charter"];if(typeof v==="string")charter=v}return{charter,revision,updatedByName:typeof b["updated_by_name"]==="string"?b["updated_by_name"]:"",updatedAt:typeof b["updated_at"]==="string"?b["updated_at"]:""}}function pickNumber(b,key){const v=b[key];return typeof v==="number"&&Number.isInteger(v)&&v>=0?v:null}function errorDetail(res){if(res.status===null)return`transport_error=${res.transportError??"\u4E0D\u660E"}`;const json=res.
28
+ json??{};const data=json["data"]&&typeof json["data"]==="object"?json["data"]:{};const errorField=json["error"];const errorObj=errorField&&typeof errorField==="object"?errorField:{};const reason=(typeof errorField==="string"?errorField:"")||str(errorObj["code"])||str(json["reason"])||str(data["reason"]);const message=str(json["error_description"])||str(errorObj["message"])||str(json["message"])||str(data["message"]);const parts=[`http=${res.status}`];if(reason)parts.push(`reason=${reason}`);if(message)
29
+ parts.push(message.slice(0,300));const errors=json["errors"]??data["errors"];if(errors&&typeof errors==="object")parts.push(JSON.stringify(errors).slice(0,300));if(!reason&&!message)parts.push(`\u5FDC\u7B54\u306E\u5148\u982D: ${res.raw.slice(0,160)}`);return parts.join(" ")}function str(v){return typeof v==="string"?v:""}var HIDDEN_CHARS=/[\x00-\x08\x0B-\x1F\x7F-\x9F\u200B-\u200F\u202A-\u202E\u2060-\u2069\uFEFF]/g;function printDiff(out,fromLabel,toLabel,before,after){const lines=buildDiffLines(
30
+ before,after);const{added,removed}=diffStat(lines);out(`--- ${fromLabel}
31
+ +++ ${toLabel}
32
+ `);for(const l of lines)out(`${l.sign} ${l.text}
33
+ `);out(`\uFF08+${added} / -${removed} \u884C\uFF09
34
+ `);if(before!==after&&before.replace(/\n$/,"")===after.replace(/\n$/,"")){out(`\uFF08\u9055\u3044\u306F\u672B\u5C3E\u306E\u6539\u884C\u306E\u6709\u7121\u3060\u3051\u3067\u3059: ${after.endsWith("\n")?"\u6539\u884C\u3092\u8DB3\u3059":"\u6539\u884C\u3092\u6D88\u3059"}\uFF09
35
+ `)}const hidden=(after.match(HIDDEN_CHARS)??[]).length;if(hidden>0){out(`\u26A0\uFE0F \u66F8\u304D\u8FBC\u307E\u308C\u308B\u5185\u5BB9\u306B\u3001\u5DEE\u5206\u8868\u793A\u3067\u306F\u898B\u3048\u306A\u3044\u6587\u5B57\uFF08\u5236\u5FA1\u6587\u5B57\u30FBCR\u30FB\u53CC\u65B9\u5411\u5236\u5FA1\u30FB\u30BC\u30ED\u5E45\uFF09\u304C ${hidden} \u7B87\u6240\u3042\u308A\u307E\u3059\u3002\u78BA\u5B9A\u3059\u308B\u524D\u306B\u5185\u5BB9\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044
36
+ `)}}function confirmCommand(opts,revision){const parts=["twp task-loop charter push","--project",shellQuote(opts.projectRef)];if(opts.profile!==void 0)parts.push("--profile",shellQuote(opts.profile));parts.push("--file",shellQuote(opts.file??DEFAULT_CHARTER_FILE),"--yes","--revision",String(revision));return parts.join(" ")}function shellQuote(v){return/^[A-Za-z0-9_./:@=-]+$/.test(v)?v:`'${v.replace(/'/g,`'\\''`)}'`}export{DEFAULT_CHARTER_FILE,runCharterCommand};
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{DEFAULT_CLAUDE_LAUNCHER,activeSlotPath,detectClaudeAutoSwitch,spawnSyncResolved}from"./chunk-NWABK3RZ.js";import{defaultIsExecutableFile,findOnPath,joinFor}from"./chunk-PMOUHEJQ.js";import{isBoolishTrue}from"./chunk-5WGOHFAS.js";import{spawnSync}from"child_process";import{createHash}from"crypto";import fs from"fs";import os from"os";import path from"path";var DETECTABLE_AIS=["claude","codex","gemini","copilot"];function isDetectableAi(value){return DETECTABLE_AIS.includes(value)}function isSelectable(d){return d.installed&&d.blockedReason===null&&d.auth!=="unauthenticated"}function resolveDetectDeps(deps={}){return resolve(deps)}function resolve(deps){const platform=deps.platform??process.platform;return{run:deps.run??spawnSync,env:deps.env??process.env,homedir:deps.homedir??os.homedir,isExecutableFile:deps.isExecutableFile??(p=>defaultIsExecutableFile(p,platform)),existsSync:deps.existsSync??fs.existsSync,readFileSync:deps.readFileSync??(p=>fs.readFileSync(p,"utf8")),platform,
3
+ import{DEFAULT_CLAUDE_LAUNCHER,activeSlotPath,detectClaudeAutoSwitch,spawnSyncResolved}from"./chunk-TYNCXQSN.js";import{defaultIsExecutableFile,findOnPath,joinFor}from"./chunk-PMOUHEJQ.js";import{isBoolishTrue}from"./chunk-5WGOHFAS.js";import{spawnSync}from"child_process";import{createHash}from"crypto";import fs from"fs";import os from"os";import path from"path";var DETECTABLE_AIS=["claude","codex","gemini","copilot"];function isDetectableAi(value){return DETECTABLE_AIS.includes(value)}function isSelectable(d){return d.installed&&d.blockedReason===null&&d.auth!=="unauthenticated"}function resolveDetectDeps(deps={}){return resolve(deps)}function resolve(deps){const platform=deps.platform??process.platform;return{run:deps.run??spawnSync,env:deps.env??process.env,homedir:deps.homedir??os.homedir,isExecutableFile:deps.isExecutableFile??(p=>defaultIsExecutableFile(p,platform)),existsSync:deps.existsSync??fs.existsSync,readFileSync:deps.readFileSync??(p=>fs.readFileSync(p,"utf8")),platform,
4
4
  now:deps.now??Date.now,launcherBin:nonEmptyBin(deps.launcherBin)??DEFAULT_CLAUDE_LAUNCHER.bin}}function nonEmptyBin(value){const t=value?.trim();return t===void 0||t===""?void 0:t}var PROBE_TIMEOUT_MS=1e4;function oneLine(text){return text.replace(/\s+/g," ").trim()}function claudeConfigDir(d){const lookup={env:d.env,platform:d.platform};const bin=nonEmptyBin(d.launcherBin)??DEFAULT_CLAUDE_LAUNCHER.bin;const cas=detectClaudeAutoSwitch(bin,d.run,lookup);if(cas!==null){const active=activeSlotPath(
5
5
  cas,d.run,lookup);if(active!==null){return{dir:active,via:`${bin} ${DEFAULT_CLAUDE_LAUNCHER.activeArgs.join(" ")}`}}}const explicit=d.env.CLAUDE_CONFIG_DIR?.trim();if(explicit!==void 0&&explicit!=="")return{dir:explicit,via:"CLAUDE_CONFIG_DIR"};return{dir:joinFor(d.platform)(d.homedir(),".claude"),via:"\u65E2\u5B9A\uFF08~/.claude\uFF09"}}var CLAUDE_AUTH_ENV=[{key:"ANTHROPIC_API_KEY",label:"ANTHROPIC_API_KEY",boolish:false},{key:"ANTHROPIC_AUTH_TOKEN",label:"ANTHROPIC_AUTH_TOKEN",boolish:false},{
6
6
  key:"CLAUDE_CODE_OAUTH_TOKEN",label:"CLAUDE_CODE_OAUTH_TOKEN",boolish:false},{key:"AWS_BEARER_TOKEN_BEDROCK",label:"AWS_BEARER_TOKEN_BEDROCK",boolish:false},{key:"CLAUDE_CODE_USE_BEDROCK",label:"CLAUDE_CODE_USE_BEDROCK\uFF08AWS \u8CC7\u683C\u60C5\u5831\u3067\u52D5\u304D\u307E\u3059\uFF09",boolish:true},{key:"CLAUDE_CODE_USE_VERTEX",label:"CLAUDE_CODE_USE_VERTEX\uFF08GCP \u8CC7\u683C\u60C5\u5831\u3067\u52D5\u304D\u307E\u3059\uFF09",boolish:true}];function envEnabled(raw,boolish){if(boolish)return isBoolishTrue(