@tocca-systems/twp-cli 0.24.0 → 0.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/CHANGELOG.public.md +14 -0
  2. package/README.md +98 -4
  3. package/dist/agent-loop-ZP47LTUE.js +75 -0
  4. package/dist/{ai-dispatch-36HRDRLF.js → ai-dispatch-VSCKUY6J.js} +1 -1
  5. package/dist/{api-command-NMYYJKZH.js → api-command-VWJXBUCJ.js} +2 -2
  6. package/dist/{app-2KMY3QPM.js → app-3JIU5OUX.js} +49 -48
  7. package/dist/attendance-42XLURM7.js +21 -0
  8. package/dist/{auto-update-worker-AXBJIMFP.js → auto-update-worker-OBFGN6FY.js} +1 -1
  9. package/dist/{backlog-7MJIOT22.js → backlog-KSMQIC2R.js} +1 -1
  10. package/dist/charter-command-ULFOEZWE.js +26 -0
  11. package/dist/chunk-BKZGBJWT.js +15 -0
  12. package/dist/{chunk-DMDVLOAY.js → chunk-G4OO4M44.js} +1 -1
  13. package/dist/{chunk-WGVHYTZV.js → chunk-IRAZ27WL.js} +1 -1
  14. package/dist/{chunk-4V4T5ZUS.js → chunk-KEP5QSS4.js} +40 -15
  15. package/dist/{chunk-I3YPO7CY.js → chunk-KUIFIN7P.js} +1 -1
  16. package/dist/{chunk-QOUFHYK5.js → chunk-NIAOX77K.js} +1 -1
  17. package/dist/chunk-P4AEFKLM.js +13 -0
  18. package/dist/{chunk-VCMVTC6B.js → chunk-PK6CUUAQ.js} +1 -1
  19. package/dist/chunk-SP27PYHC.js +3 -0
  20. package/dist/chunk-UDPJ2IGK.js +7 -0
  21. package/dist/chunk-VCZVITWG.js +13 -0
  22. package/dist/{chunk-UIWGEBWI.js → chunk-VGMWPPGD.js} +13 -11
  23. package/dist/{chunk-UG2I6VRD.js → chunk-VYDEUFGU.js} +1 -1
  24. package/dist/{chunk-Y2QAP6SU.js → chunk-WQ66EYZS.js} +1 -1
  25. package/dist/{chunk-6NCY4NPV.js → chunk-X45SJNT2.js} +4 -4
  26. package/dist/chunk-YWGYRISN.js +34 -0
  27. package/dist/{chunk-WOUKWOAR.js → chunk-Z2MNO3FT.js} +10 -9
  28. package/dist/cli.js +33 -8
  29. package/dist/{commands-U36UTCKR.js → commands-OFLBUP6O.js} +1 -1
  30. package/dist/{commands-6YTOVZ5P.js → commands-RG7M6E5K.js} +80 -85
  31. package/dist/{department-JOXXJKQB.js → department-GH475WCF.js} +1 -1
  32. package/dist/{job-title-L47J6TZY.js → job-title-FC2GWDE7.js} +1 -1
  33. package/dist/{logout-guard-FO7KZL3X.js → logout-guard-3PB3VMGP.js} +1 -1
  34. package/dist/{media-ZMDYHHNN.js → media-TD7D4TXF.js} +1 -1
  35. package/dist/{oneshot-KYATQPL7.js → oneshot-QQOOZZDT.js} +5 -5
  36. package/dist/{position-FHWCMMBQ.js → position-4RHTV3IK.js} +1 -1
  37. package/dist/{project-ZODASYER.js → project-DBNWB47J.js} +1 -1
  38. package/dist/{run-QCDT35NT.js → run-VNHAQO24.js} +1 -1
  39. package/dist/{schedule-command-GKXKNMLG.js → schedule-command-FJU7JFNR.js} +1 -1
  40. package/dist/{server-settings-CG3EM7R7.js → server-settings-YL6KALXG.js} +1 -1
  41. package/dist/{setup-6CXUVCF5.js → setup-BJKIHANC.js} +1 -1
  42. package/dist/skill-command-V26WGVXU.js +61 -0
  43. package/dist/{task-G5YWQ6L5.js → task-7VOYCG26.js} +2 -2
  44. package/dist/{update-PZBUIYOL.js → update-RLKK6N7U.js} +1 -1
  45. package/dist/user-UU2SLVC4.js +336 -0
  46. package/package.json +1 -1
  47. package/dist/charter-command-UBUE3KUO.js +0 -36
  48. package/dist/chunk-EJ474UDB.js +0 -3
  49. package/dist/chunk-HW3QGKYR.js +0 -30
  50. package/dist/chunk-IJLJGDMZ.js +0 -7
  51. package/dist/chunk-ODLJ2LNQ.js +0 -13
  52. package/dist/user-DO4VNIBR.js +0 -204
@@ -1,9 +1,9 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{buildDiffLines,diffStat}from"./chunk-VRBI2NPI.js";import{RESIDENT_TOKEN_CAP,activateModeFiles,activatePermissionSettings,buildResidentSet,buildSystemPrompt,createAuditLogger,createTwpToolkit,currentBranch,describeAuditLog,displayCwd,executeTool,findProjectTwpSubdir,localTools,lstatOrNull,parseFrontMatter,parseRule,persistProjectAllow,projectPermissionsPath,projectRootFor,readFileTool,residentInputs,resolveGitExecutable,runTurn,secretReason}from"./chunk-4V4T5ZUS.js";import"./chunk-NZ7WI4RZ.js";
4
- import"./chunk-N2UVRM3Z.js";import"./chunk-YVAN3H5W.js";import"./chunk-QOUFHYK5.js";import"./chunk-II5RVJQN.js";import"./chunk-FTYJZFEK.js";import"./chunk-GMBJTG6A.js";import{parseArgv}from"./chunk-HW3QGKYR.js";import{applyPermissionMode,checkPermission,describePermissionMode,getMode,isModeId,modeSource,nextMode}from"./chunk-NAUH75MM.js";import"./chunk-EJ474UDB.js";import"./chunk-QQRJLH6B.js";import{RelayError,builtinCatalog,createRuntime,
5
- loadCachedCatalog,modelLabel,pickModel,toModelInfos}from"./chunk-WOUKWOAR.js";import"./chunk-XNLIEUAW.js";import"./chunk-PMOUHEJQ.js";import{proxyDiagnostics}from"./chunk-J7QYPKVK.js";import{checkMinSupportedVersion,isBelowMinSupported,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,
6
- stripAnsi}from"./chunk-WVS4W5FY.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import"./chunk-7WSNIXTQ.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,createTwpToolkit,currentBranch,describeAuditLog,describeToolCatalog,displayCwd,executeTool,findProjectTwpSubdir,localTools,lstatOrNull,parseFrontMatter,parseRule,persistProjectAllow,projectPermissionsPath,projectRootFor,readFileTool,residentInputs,resolveGitExecutable,runTurn,secretReason}from"./chunk-KEP5QSS4.js";
4
+ import"./chunk-NZ7WI4RZ.js";import"./chunk-YVAN3H5W.js";import"./chunk-N2UVRM3Z.js";import"./chunk-NIAOX77K.js";import"./chunk-GMBJTG6A.js";import"./chunk-FTYJZFEK.js";import"./chunk-II5RVJQN.js";import{parseArgv}from"./chunk-YWGYRISN.js";import{applyPermissionMode,checkPermission,describePermissionMode,getMode,isModeId,modeSource,nextMode}from"./chunk-NAUH75MM.js";import"./chunk-SP27PYHC.js";import"./chunk-QQRJLH6B.js";import{RelayError,
5
+ builtinCatalog,createRuntime,loadCachedCatalog,modelLabel,pickModel,toModelInfos}from"./chunk-Z2MNO3FT.js";import"./chunk-XNLIEUAW.js";import"./chunk-PMOUHEJQ.js";import{proxyDiagnostics}from"./chunk-J7QYPKVK.js";import{checkMinSupportedVersion,isBelowMinSupported,minSupportedBlockMessage}from"./chunk-DXXFUNYN.js";import"./chunk-NERYSBA4.js";import{configReadDirs,twpHomeDir}from"./chunk-RZVI6PMW.js";import{require_fuzzysort}from"./chunk-DIMZRTLE.js";
6
+ import{isFullWidth,isWide,stringWidth,stripAnsi}from"./chunk-WVS4W5FY.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import"./chunk-7WSNIXTQ.js";import{__commonJS,__export,__require,__toESM}from"./chunk-VSJBJXZO.js";var require_react_production=__commonJS({"node_modules/react/cjs/react.production.js"(exports){"use strict";var REACT_ELEMENT_TYPE=Symbol.for("react.transitional.element");var REACT_PORTAL_TYPE=Symbol.for("react.portal");var REACT_FRAGMENT_TYPE=Symbol.for("react.fragment");var REACT_STRICT_MODE_TYPE=Symbol.for("react.strict_mode");var REACT_PROFILER_TYPE=Symbol.for("react.profiler");var REACT_CONSUMER_TYPE=Symbol.for("react.consumer");var REACT_CONTEXT_TYPE=Symbol.for("react.context");var REACT_FORWARD_REF_TYPE=Symbol.
7
7
  for("react.forward_ref");var REACT_SUSPENSE_TYPE=Symbol.for("react.suspense");var REACT_MEMO_TYPE=Symbol.for("react.memo");var REACT_LAZY_TYPE=Symbol.for("react.lazy");var REACT_ACTIVITY_TYPE=Symbol.for("react.activity");var REACT_VIEW_TRANSITION_TYPE=Symbol.for("react.view_transition");var MAYBE_ITERATOR_SYMBOL=Symbol.iterator;function getIteratorFn(maybeIterable){if(null===maybeIterable||"object"!==typeof maybeIterable)return null;maybeIterable=MAYBE_ITERATOR_SYMBOL&&maybeIterable[MAYBE_ITERATOR_SYMBOL]||
8
8
  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=
9
9
  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){
@@ -1212,7 +1212,7 @@ cwd()){const listed=await gitListFiles(cwd2);const raw=listed??await walkFiles(c
1212
1212
  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}
1213
1213
  `}}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
1214
1214
  `}}if(parsed.unknown.length>0){return{code:2,out:"",err:`\u4E0D\u660E\u306A\u5F15\u6570: ${parsed.unknown.join(" ")}
1215
- `}}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-QCDT35NT.js");try{const code=await runDomain({domain:route.domain,...parsed.operation!==void 0?{operation:parsed.operation}:
1215
+ `}}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-VNHAQO24.js");try{const code=await runDomain({domain:route.domain,...parsed.operation!==void 0?{operation:parsed.operation}:
1216
1216
  {},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}
1217
1217
  `}}}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",
1218
1218
  "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",
@@ -1291,53 +1291,54 @@ null);const[overlay,setOverlay]=(0,import_react38.useState)(startInDoctor?"docto
1291
1291
  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)(
1292
1292
  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)(
1293
1293
  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 toolkitRef=(0,import_react38.useRef)(null);toolkitRef.current??=createTwpToolkit(
1294
- runtime,version);const toolkit=toolkitRef.current;const sessionRules=(0,import_react38.useRef)([]);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)(
1295
- ()=>displayCwd(),[]);const networkDiagnostics=(0,import_react38.useMemo)(()=>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)(
1296
- item=>{setItems(prev=>[...prev,{...item,id:nextId()}])},[]);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 `tw\
1297
- p login` \u3092\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044\u3002"});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.
1298
- model!==modelRef.current){setModel(picked.model);if(picked.warning!==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(
1299
- resolve=>{setPendingPermission(spec);setSelected(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\
1300
- \u307E\u3057\u305F\uFF08${stripTerminalControls(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(
1301
- {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:opts.display??text});const startupCatalog=await catalogFetchRef.current;if(startupCatalog&&isBelowMinSupported(version,startupCatalog.minSupportedVersion)){blockOnMinSupported(startupCatalog.minSupportedVersion);return}const controller=new AbortController;
1302
- 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;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.
1303
- 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(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(
1304
- {...promptFor(request),allowInstead:false})});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":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!==
1305
- 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(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(
1306
- {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);const resident=buildResidentSet(turnMode,{...residentInputs(toolkit),...permissionMode!==void 0?{permissionMode}:{},permissionLayers});const turnTools=opts.allowedTools===void 0?resident.tools:resident.tools.filter(t=>opts.allowedTools?.
1307
- 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.prompt}:{}}),signal:controller.signal,onTextDelta:delta=>stream.push(stripTerminalControls(delta)),tools:turnTools,execute:{mode:turnMode,ctx:{cwd:process.cwd()},sessionAllow:sessionAllow.current,sessionRules:sessionRules.
1308
- current,...persistAllow?{persistAllow}:{},permissionLayers,...permissionMode!==void 0?{permissionMode}:{},resolveTool:toolkit.resolveTool,prepareIndirect:toolkit.prepareIndirect,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(
1309
- {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.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.
1310
- 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"})}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.
1311
- 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.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.
1312
- 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.
1313
- 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.
1314
- 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===
1315
- "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"});
1316
- 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"});
1317
- 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)(
1318
- 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")})},
1319
- [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!==
1320
- 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(
1321
- []);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:`\
1322
- \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`,
1323
- ...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",
1294
+ runtime,version);const toolkit=toolkitRef.current;const sessionRules=(0,import_react38.useRef)([]);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();toolkitRef.current?.cancelCatalogRefresh();const s=sleepRef.current;if(s){clearTimeout(s.timer);sleepRef.current=null;s.resolve()}},[]);const modeDef=getMode(mode);const branch=(0,import_react38.useMemo)(
1295
+ ()=>currentBranch(),[]);const cwd2=(0,import_react38.useMemo)(()=>displayCwd(),[]);const networkDiagnostics=(0,import_react38.useMemo)(()=>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(
1296
+ size.rows,fixedChrome+inputWindow.shownRows);const commit=(0,import_react38.useCallback)(item=>{setItems(prev=>[...prev,{...item,id:nextId()}])},[]);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.
1297
+ 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"});return}if(initialModelWarning!==null){commit({kind:"notice",tone:"warn",text:initialModelWarning})}void toolkit.refreshCatalog();let cancelled=false;const pending=runtime.loadCatalog();catalogFetchRef.current=pending;void pending.
1298
+ 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!==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(
1299
+ ()=>{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(0);setPermState(INITIAL_DIALOG_STATE);setOverlay("permission");permissionResolver.current=choice=>{setOverlay("none");setPendingPermission(null);permissionResolver.current=null;resolve(choice)}});const persistAllow=isAbsolute(
1300
+ 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(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(
1301
+ 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+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(
1302
+ 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;const abs=resolvePath(cwdNow,p);const rel=relativePath(cwdNow,abs);if(rel===""||rel===".."||rel.startsWith(`..${sep}`)||
1303
+ 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(readFileTool,{path:p},{mode:expandMode,ctx:{cwd:process.cwd()},sessionAllow:sessionAllow.current,
1304
+ sessionRules:sessionRules.current,...persistAllow?{persistAllow}:{},permissionLayers,...permissionMode!==void 0?{permissionMode}:{},audit,askPermission:request=>askPermission({...promptFor(request),allowInstead:false})});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":reason}}return{ok:true,content:result2.content,truncated:/\[truncated/.
1305
+ 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(parsed)){return{ok:true,task:parsed}}}catch{}return{ok:false,reason:"\
1306
+ \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);const resident=buildResidentSet(turnMode,{...residentInputs(toolkit),
1307
+ ...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.prompt}:{}}),signal:controller.signal,
1308
+ onTextDelta:delta=>stream.push(stripTerminalControls(delta)),tools:turnTools,execute:{mode:turnMode,ctx:{cwd:process.cwd()},sessionAllow:sessionAllow.current,sessionRules:sessionRules.current,...persistAllow?{persistAllow}:{},permissionLayers,...permissionMode!==void 0?{permissionMode}:{},resolveTool:toolkit.resolveTool,prepareIndirect:toolkit.prepareIndirect,audit,askPermission:request=>askPermission(promptFor(request)),onStart:(tool,preview)=>{const safe=stripTerminalControls(preview);setRunningTool(
1309
+ {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.denied===true?"denied":toolResult.
1310
+ 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"})}
1311
+ 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.
1312
+ 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.
1313
+ 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,
1314
+ 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.
1315
+ 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`,
1316
+ 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"||typeof choice==="object"&&choice.kind==="instead"){commit({kind:"tool",run:{name:spec.name,summary:spec.
1317
+ 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"});break}if(choice==="always")demoSessionAllow.current.
1318
+ 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)(async(line,name,args)=>{
1319
+ 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")})},[commit,runtime,version]);
1320
+ 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!==void 0&&!isAvailableInMode(
1321
+ 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([]);runtime.context.clear();
1322
+ 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:`\u30E2\u30FC\u30C9\u3092 ${getMode(
1323
+ 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`,...commandsForMode(
1324
+ 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",
1324
1325
  ...(()=>{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"].
1325
1326
  join("\n")});return;case"/context":{const snapshot=runtime.context.snapshot();const t=snapshot.totals;const resident=buildResidentSet(getMode(modeRef.current),{...residentInputs(toolkit),...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.
1326
1327
  current).tools.join(" ")}`,`\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}\
1327
1328
  %\uFF08\u7A93 200,000 tok \u306E\u6982\u7B97\uFF09`,`\u5B9F\u6E2C\u30C8\u30FC\u30AF\u30F3\u5408\u8A08: input ${t.inputTokens} / cache_read ${t.cacheReadTokens} / cache_write ${t.cacheWriteTokens} / output ${t.outputTokens}`,...snapshot.droppedMessages>0?[`\u4E0A\u9650\u306E\u305F\u3081\u843D\u3068\u3057\u305F\u3084\u308A\u53D6\u308A: ${snapshot.droppedMessages} \u4EF6`]:[],`permission-mode: ${describePermissionMode(permissionMode)}`,`\u76E3\u67FB\u30ED\u30B0: ${describeAuditLog(audit)}`,`\u5E38\u99D0\u30C4\u30FC\u30EB: ${resident.
1328
- tools.length} \u672C / \u30B9\u30AD\u30FC\u30DE\u6982\u7B97 ${resident.tokens} tok\uFF08\u4E0A\u9650 ${RESIDENT_TOKEN_CAP} tok\uFF09`,` ${resident.tools.map(t2=>t2.name).join(" ")||"\uFF08\u306A\u3057\uFF09"}`,...resident.dropped.length>0?[` \u4E0A\u9650\u8D85\u904E\u3067\u5916\u3057\u305F\u30C4\u30FC\u30EB: ${resident.dropped.join(" ")}`]:[],"TWP API \u306E\u30C4\u30FC\u30EB\uFF08\u30E1\u30BF\u30C4\u30FC\u30EB\u30FB\u30AB\u30BF\u30ED\u30B0\u914D\u4FE1\uFF09\u306F\u5225\u30BF\u30B9\u30AF\u3067\u8F09\u308A\u307E\u3059"].
1329
- join("\n")});return}case"/demo":void runDemo("\uFF08\u30C7\u30E2\u518D\u751F\uFF09\u30C4\u30FC\u30EB\u30AB\u30FC\u30C9\u3068\u6A29\u9650\u30C0\u30A4\u30A2\u30ED\u30B0");return;default:commit({kind:"notice",tone:"warn",text:`\u4E0D\u660E\u306A\u30B3\u30DE\u30F3\u30C9: ${name}`})}},[audit,catalog,commit,exit,model,permissionMode,runDemo,runPromptCommand,runTwp,runtime]);const submit=(0,import_react38.useCallback)(()=>{if(busyRef.current){commit({kind:"notice",tone:"warn",text:"\u5B9F\u884C\u4E2D\u3067\u3059\u3002Ctrl+C \u3067\u4E2D\u65AD\u3057\u3066\u304B\u3089\
1330
- \u9001\u4FE1\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u5165\u529B\u306F\u4FDD\u6301\u3057\u3066\u3044\u307E\u3059\uFF09"});return}const text=bufferRef.current.text.trim();clearBuffer();setOverlay("none");if(text==="")return;if(text.startsWith("/")){runCommand(text);return}void runTurn2(text)},[clearBuffer,commit,runCommand,runTurn2]);const paletteItems=(0,import_react38.useMemo)(()=>paletteFor(buffer.text,mode),[buffer.text,mode]);const dismissedMentionRef=(0,import_react38.useRef)(null);const fileCompletion=(0,import_react38.useMemo)(
1331
- ()=>{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.
1332
- 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.
1333
- 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\
1334
- 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(
1335
- 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){
1336
- 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(
1337
- 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}));
1338
- 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(
1339
- 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"\
1340
- 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)}
1329
+ tools.length} \u672C / \u30B9\u30AD\u30FC\u30DE\u6982\u7B97 ${resident.tokens} tok\uFF08\u4E0A\u9650 ${RESIDENT_TOKEN_CAP} tok\uFF09`,` ${resident.tools.map(t2=>t2.name).join(" ")||"\uFF08\u306A\u3057\uFF09"}`,...resident.dropped.length>0?[` \u4E0A\u9650\u8D85\u904E\u3067\u5916\u3057\u305F\u30C4\u30FC\u30EB: ${resident.dropped.join(" ")}`]:[],...(()=>{const status=toolkit.catalogStatus();return status!==null?[describeToolCatalog(status)]:[]})()].join("\n")});return}case"/demo":void runDemo("\uFF08\u30C7\
1330
+ \u30E2\u518D\u751F\uFF09\u30C4\u30FC\u30EB\u30AB\u30FC\u30C9\u3068\u6A29\u9650\u30C0\u30A4\u30A2\u30ED\u30B0");return;default:commit({kind:"notice",tone:"warn",text:`\u4E0D\u660E\u306A\u30B3\u30DE\u30F3\u30C9: ${name}`})}},[audit,catalog,commit,exit,model,permissionMode,runDemo,runPromptCommand,runTwp,runtime]);const submit=(0,import_react38.useCallback)(()=>{if(busyRef.current){commit({kind:"notice",tone:"warn",text:"\u5B9F\u884C\u4E2D\u3067\u3059\u3002Ctrl+C \u3067\u4E2D\u65AD\u3057\u3066\u304B\u3089\u9001\u4FE1\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u5165\u529B\u306F\u4FDD\u6301\u3057\u3066\u3044\u307E\u3059\uFF09"});
1331
+ return}const text=bufferRef.current.text.trim();clearBuffer();setOverlay("none");if(text==="")return;if(text.startsWith("/")){runCommand(text);return}void runTurn2(text)},[clearBuffer,commit,runCommand,runTurn2]);const paletteItems=(0,import_react38.useMemo)(()=>paletteFor(buffer.text,mode),[buffer.text,mode]);const dismissedMentionRef=(0,import_react38.useRef)(null);const fileCompletion=(0,import_react38.useMemo)(()=>{const c=fileCompletionFor(buffer,fileIndex);return c!==null&&c.start!==dismissedMentionRef.
1332
+ 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.current=false;commit({kind:"notice",tone:"warn",text:`@ \u88DC\u5B8C\u306E\u5019\u88DC\u3092\u4F5C\u308C\u307E\u305B\u3093\u3067\u3057\u305F: ${stripTerminalControls(
1333
+ 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.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"})}
1334
+ return}if(bufferRef.current.text!==""){clearBuffer();return}if(ctrlCArmed){exit();return}setCtrlCArmed(true);commit({kind:"notice",tone:"info",text:"\u3082\u3046\u4E00\u5EA6 Ctrl+C \u3067\u7D42\u4E86\u3057\u307E\u3059\uFF08Ctrl+D \u3067\u3082\u7D42\u4E86\uFF09"});return}setCtrlCArmed(false);if(ev.name==="shift-tab"||ev.name==="alt-m"){const to=nextMode(modeRef.current);setMode(to);return}if(ev.name==="ctrl-r"){const last=lastToolRef.current;if(last)commit({kind:"tool",run:{...last,summary:`${last.
1335
+ summary}\uFF08\u5C55\u958B\uFF09`},expanded:true});return}if(overlay==="permission"){const resolve=permissionResolver.current;if(!resolve)return;if(ev.name==="paste"&&ev.value&&permStateRef.current.stage!=="instead"){const pasted=ev.value.replace(/\r\n?/g,"\n");setBuffer(b=>insert(b,pasted));return}const step=stepDialog(permStateRef.current,ev,pendingPermissionRef.current??{name:""});if("answer"in step)resolve(step.answer);else setPermState(step.state);return}if(overlay==="doctor"){if(ev.name===
1336
+ "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){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(
1337
+ 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(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.
1338
+ 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}));setSelected(0)}return}if(ev.name==="escape"){dismissedMentionRef.current=files.start;setBuffer(b=>({...b}));return}}const palette=busyRef.current?[]:paletteFor(bufferRef.current.text,modeRef.
1339
+ 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(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.
1340
+ 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"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"\
1341
+ 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
1342
  ${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
1343
  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
1344
  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:"\
@@ -0,0 +1,21 @@
1
+ import { createRequire as __twpCreateRequire } from 'node:module';
2
+ const require = __twpCreateRequire(import.meta.url);
3
+ import{isRecord,pick}from"./chunk-ZWVYVS2A.js";import{ApiResponseError,UsageError}from"./chunk-7WSNIXTQ.js";import"./chunk-VSJBJXZO.js";var MONTH_PATTERN=/^(\d{4})-(\d{2})$/;var DATE_PATTERN=/^(\d{4})-(\d{2})-(\d{2})$/;function monthFlag(flags,name="--month"){const raw=flags.get(name);if(raw===void 0)return void 0;const value=raw.trim();const match=MONTH_PATTERN.exec(value);const month=match===null?0:Number(match[2]);if(match===null||month<1||month>12){throw new UsageError(`${name} \u306F YYYY-MM \u5F62\u5F0F\u306E\u5E74\u6708\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u53D7\u3051\u53D6\u3063\u305F\u5024: ${raw}\
4
+ \uFF09`,`\u4F8B: ${name} 2026-08`)}return value}function dateFlag(flags,name="--date"){const raw=flags.get(name);if(raw===void 0)return void 0;const value=raw.trim();const match=DATE_PATTERN.exec(value);if(match===null||!isCalendarDate(Number(match[1]),Number(match[2]),Number(match[3]))){throw new UsageError(`${name} \u306F\u5B9F\u5728\u3059\u308B\u65E5\u4ED8\u3092 YYYY-MM-DD \u5F62\u5F0F\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u53D7\u3051\u53D6\u3063\u305F\u5024: ${raw}\uFF09`,
5
+ `\u4F8B: ${name} 2026-08-31`)}return value}function isCalendarDate(year,month,day){if(month<1||month>12||day<1)return false;const date=new Date(Date.UTC(year,month-1,day));return date.getUTCFullYear()===year&&date.getUTCMonth()===month-1&&date.getUTCDate()===day}var STATUS_USAGE="twp attendance status";var LIST_USAGE="twp attendance list [--month <YYYY-MM> | --date <YYYY-MM-DD>]";var TIMESHEET_USAGE="twp attendance timesheet [--month <YYYY-MM>]";var RECORD_COLUMNS=["recorded_at","type","type_label","work_location","is_manual","project_id","task_id","memo","id"];var DAY_COLUMNS=["date","clock_in","clock_out","work","break","overtime","late","early_leave","holiday","memo"];function noArgs(input,operation){if(input.args.length>0){throw new UsageError(`${operation}\
6
+ \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D7\u3051\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,`twp attendance ${operation} help`)}}function hoursMinutes(value){if(typeof value!=="number"||!Number.isFinite(value))return value;const sign=value<0?"-":"";const abs=Math.round(Math.abs(value));return`${sign}${Math.floor(abs/60)}:${String(abs%60).padStart(2,"0")}`}function currentBody(body){if(!isRecord(body)||typeof body["status"]!=="string"||!Array.isArray(body["today_records"])){throw new ApiResponseError(
7
+ "\u6253\u523B\u72B6\u614B\u306E\u5FDC\u7B54\u306B status / today_records \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return body}function summarizeCurrent(body){const current=currentBody(body);const last=isRecord(current["last_record"])?current["last_record"]:void 0;const actions=Array.isArray(current["available_actions"])?current["available_actions"]:[];return{status:current["status"],status_label:current["status_lab\
8
+ el"],last_type:last?.["type_label"]??null,last_recorded_at:last?.["recorded_at"]??null,today_records:current["today_records"].length,available_actions:actions.join(" / ")}}function records(body){if(!isRecord(body)||!Array.isArray(body["records"])){throw new ApiResponseError("\u6253\u523B\u5C65\u6B74\u306E\u5FDC\u7B54\u306B records \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return body["records"]}function timesheetBody(body){
9
+ if(!isRecord(body)||!Array.isArray(body["days"])||!isRecord(body["summary"])){throw new ApiResponseError("\u52E4\u6020\u8868\u306E\u5FDC\u7B54\u306B days / summary \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return body}function summarizeDay(day){const row=isRecord(day)?day:{};return pick({date:row["date"],clock_in:row["clock_in"],clock_out:row["clock_out"],work:hoursMinutes(row["work_minutes"]),break:hoursMinutes(row["\
10
+ break_minutes"]),overtime:hoursMinutes(row["overtime_minutes"]),late:hoursMinutes(row["late_minutes"]),early_leave:hoursMinutes(row["early_leave_minutes"]),holiday:row["holiday_name"]??(row["is_non_business_day"]===true?"\u4F11\u65E5":null),memo:row["memo"]},DAY_COLUMNS)}function timesheetNotes(body){const sheet=timesheetBody(body);const summary=sheet["summary"];const notes=[`${String(sheet["year_month"])} \u306E\u5408\u8A08: \u51FA\u52E4 ${String(summary["work_days"])} \u65E5 / \u52B4\u50CD ${String(
11
+ hoursMinutes(summary["total_work_minutes"]))} / \u6B8B\u696D ${String(hoursMinutes(summary["total_overtime_minutes"]))} / \u6709\u7D66 ${String(summary["paid_leave_days"])} \u65E5\uFF08\u5168\u9805\u76EE\u306F --output json \u306E summary\uFF09`];if(sheet["is_closed"]===true){const at=typeof sheet["closed_at"]==="string"?`\uFF08${sheet["closed_at"]}\uFF09`:"";notes.push(`\u3053\u306E\u6708\u306F\u7DE0\u3081\u6E08\u307F\u3067\u3059${at}\u3002\u8868\u793A\u306F\u7DE0\u3081\u305F\u6642\u70B9\u306E\u96C6\u8A08\u3067\u3059\u3002`)}
12
+ return notes}var attendanceDomain={name:"attendance",summary:"\u81EA\u5206\u306E\u52E4\u6020\uFF08\u6253\u523B\u72B6\u614B\u30FB\u6253\u523B\u5C65\u6B74\u30FB\u52E4\u6020\u8868\uFF09",operations:[{name:"status",summary:"\u3044\u307E\u306E\u6253\u523B\u72B6\u614B\u3068\u3001\u6B21\u306B\u6253\u3066\u308B\u6253\u523B\u3092\u8868\u793A\u3059\u308B",usage:STATUS_USAGE,description:"GET /api/v1/attendance/current \u3092\u8868\u793A\u3057\u307E\u3059\uFF08\u30ED\u30B0\u30A4\u30F3\u3057\u3066\u3044\u308B\u672C\u4EBA\u306E\u5206\uFF09\u3002\navailable_actions \u306F\u3001\u3044\u307E\u306E\u72B6\u614B\u304B\u3089\u6253\u3066\u308B\u6253\u523B\u306E\u7A2E\u985E\u3067\u3059\uFF08clock_in / clock_out / break_\
13
+ start / break_end / switch\uFF09\u3002\n--output json \u306F API \u304C\u8FD4\u3059\u5168\u30D5\u30A3\u30FC\u30EB\u30C9\uFF08\u4ECA\u65E5\u306E\u6253\u523B\u306E\u4E00\u89A7 today_records \u3092\u542B\u3080\uFF09\u3092\u51FA\u3057\u307E\u3059\u3002",flags:[],plan(input){noArgs(input,"status");return{method:"GET",path:"/api/v1/attendance/current"}},summarize:summarizeCurrent,raw:body=>currentBody(body)},{name:"list",summary:"\u6253\u523B\u306E\u5C65\u6B74\u3092\u4E00\u89A7\u3059\u308B\uFF08\u65B0\u3057\u3044\u9806\uFF09",
14
+ usage:LIST_USAGE,description:`GET /api/v1/attendance/records \u3092\u8868\u793A\u3057\u307E\u3059\uFF08\u30ED\u30B0\u30A4\u30F3\u3057\u3066\u3044\u308B\u672C\u4EBA\u306E\u5206\u30FB\u65B0\u3057\u3044\u9806\uFF09\u3002
15
+ --month \u3068 --date \u306F\u3069\u3061\u3089\u304B\u4E00\u65B9\u3060\u3051\u6307\u5B9A\u3067\u304D\u307E\u3059\u3002\u3069\u3061\u3089\u3082\u7121\u3051\u308C\u3070\u4ECA\u6708\u3067\u3059
16
+ \uFF08\u300C\u4ECA\u6708\u300D\u306F\u30C6\u30CA\u30F3\u30C8\u306E\u696D\u52D9\u65E5\u306E\u533A\u5207\u308A\u3067\u30B5\u30FC\u30D0\u304C\u6C7A\u3081\u307E\u3059\uFF09\u3002
17
+ --output json \u306F API \u304C\u8FD4\u3059\u5168\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u51FA\u3057\u307E\u3059\u3002
18
+ --output table / text / tsv \u306F\u8981\u7D04\u5217\uFF08${RECORD_COLUMNS.join(" / ")}\uFF09\u3067\u3059\u3002`,flags:[{name:"--month",summary:"\u5BFE\u8C61\u306E\u5E74\u6708\uFF08YYYY-MM\uFF09",takesValue:true,placeholder:"<YYYY-MM>"},{name:"--date",summary:"\u5BFE\u8C61\u306E\u65E5\u4ED8\uFF08YYYY-MM-DD\uFF09",takesValue:true,placeholder:"<YYYY-MM-DD>"}],plan(input){noArgs(input,"list");const month=monthFlag(input.flags);const date=dateFlag(input.flags);if(month!==void 0&&date!==void 0){throw new UsageError(
19
+ "--month \u3068 --date \u306F\u540C\u6642\u306B\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093",LIST_USAGE)}return{method:"GET",path:"/api/v1/attendance/records",query:{year_month:month,date}}},summarize:body=>records(body).map(row=>pick(row,RECORD_COLUMNS)),raw:body=>records(body)},{name:"timesheet",summary:"\u6708\u306E\u52E4\u6020\u8868\uFF08\u65E5\u5225\u306E\u51FA\u9000\u52E4\u30FB\u52B4\u50CD\u30FB\u6B8B\u696D\u3068\u6708\u306E\u5408\u8A08\uFF09\u3092\u8868\u793A\u3059\u308B",usage:TIMESHEET_USAGE,
20
+ description:"GET /api/v1/attendance/timesheet \u3092\u8868\u793A\u3057\u307E\u3059\uFF08\u30ED\u30B0\u30A4\u30F3\u3057\u3066\u3044\u308B\u672C\u4EBA\u306E\u5206\uFF09\u3002\n--month \u304C\u7121\u3051\u308C\u3070\u4ECA\u6708\u3067\u3059\uFF08\u30C6\u30CA\u30F3\u30C8\u306E\u696D\u52D9\u65E5\u306E\u533A\u5207\u308A\u3067\u30B5\u30FC\u30D0\u304C\u6C7A\u3081\u307E\u3059\uFF09\u3002\n--output table / text / tsv \u306F\u65E5\u5225\u306E\u8981\u7D04\u5217\uFF08\u6642\u9593\u306F H:MM\uFF09\u3067\u3001\u6708\u306E\u5408\u8A08\u306F stderr \u306B\u51FA\u3057\u307E\u3059\u3002\n\u7DE0\u3081\u6E08\u307F\u306E\u6708\u306F\u3001\u7DE0\u3081\u305F\u6642\u70B9\u306E\u96C6\u8A08\u3067\u3042\u308B\u3053\u3068\u3092 stderr \u3067\u77E5\u3089\u305B\u307E\u3059\u3002\n--output json \u306F API \u304C\u8FD4\u3059\u5168\u30D5\u30A3\u30FC\u30EB\u30C9\uFF08summary\u30FBis_closed \u3092\u542B\u3080\uFF09\u3092\u51FA\u3057\u307E\u3059\u3002",
21
+ flags:[{name:"--month",summary:"\u5BFE\u8C61\u306E\u5E74\u6708\uFF08YYYY-MM\uFF09",takesValue:true,placeholder:"<YYYY-MM>"}],plan(input){noArgs(input,"timesheet");return{method:"GET",path:"/api/v1/attendance/timesheet",query:{year_month:monthFlag(input.flags)}}},summarize:body=>timesheetBody(body)["days"].map(summarizeDay),raw:body=>timesheetBody(body),notes:timesheetNotes}]};export{attendanceDomain,hoursMinutes};
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{fetchLatestVersion,isBehindLatest,resolveNpmCommand}from"./chunk-VCMVTC6B.js";import"./chunk-WOUKWOAR.js";import"./chunk-XNLIEUAW.js";import"./chunk-PMOUHEJQ.js";import"./chunk-J7QYPKVK.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";
3
+ import{fetchLatestVersion,isBehindLatest,resolveNpmCommand}from"./chunk-PK6CUUAQ.js";import"./chunk-Z2MNO3FT.js";import"./chunk-XNLIEUAW.js";import"./chunk-PMOUHEJQ.js";import"./chunk-J7QYPKVK.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";
4
4
  import"./chunk-5WGOHFAS.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(
5
5
  stderr)});return}const e=error;resolve({ok:false,stdout:String(stdout??""),stderr:String(stderr??""),...e.killed?{error:"\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8\u3057\u307E\u3057\u305F"}:typeof e.code==="string"?{error:e.code}:{}})})})}function summarizeNpmFailure(result){const text=`${result.stderr}
6
6
  ${result.stdout}`;const code=/npm (?:ERR!|error) code (\S+)/.exec(text)?.[1]??result.error;let reason;if(code==="EACCES"||code==="EPERM"){reason=`\u30B0\u30ED\u30FC\u30D0\u30EB\u306E\u5C0E\u5165\u5148\u306B\u66F8\u304D\u8FBC\u3080\u6A29\u9650\u304C\u3042\u308A\u307E\u305B\u3093\uFF08${code}\uFF09`}else if(code!==void 0&&/^(ENOTFOUND|ETIMEDOUT|ECONNREFUSED|ECONNRESET|EAI_AGAIN|ENETUNREACH)$/.test(code)){reason=`npm registry \u306B\u63A5\u7D9A\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08${code}\
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{readBody}from"./chunk-HGTG5XQ7.js";import{BACKLOG_BASE_PATH,BACKLOG_PROJECT_SCOPE_LABEL,BACKLOG_SCOPE_LABEL,backlogSpacePath,resolveNamed}from"./chunk-QOUFHYK5.js";import"./chunk-II5RVJQN.js";import"./chunk-FTYJZFEK.js";import{requireResolved,singleRef,withResolved}from"./chunk-ZN5EFDH7.js";import"./chunk-GMBJTG6A.js";import{isRecord,pick}from"./chunk-ZWVYVS2A.js";import"./chunk-J7QYPKVK.js";import"./chunk-NERYSBA4.js";import"./chunk-RZVI6PMW.js";
3
+ import{readBody}from"./chunk-HGTG5XQ7.js";import{BACKLOG_BASE_PATH,BACKLOG_PROJECT_SCOPE_LABEL,BACKLOG_SCOPE_LABEL,backlogSpacePath,resolveNamed}from"./chunk-NIAOX77K.js";import"./chunk-GMBJTG6A.js";import"./chunk-FTYJZFEK.js";import{requireResolved,singleRef,withResolved}from"./chunk-ZN5EFDH7.js";import"./chunk-II5RVJQN.js";import{isRecord,pick}from"./chunk-ZWVYVS2A.js";import"./chunk-J7QYPKVK.js";import"./chunk-NERYSBA4.js";import"./chunk-RZVI6PMW.js";
4
4
  import"./chunk-NHYMHCAT.js";import{ApiResponseError,UsageError}from"./chunk-7WSNIXTQ.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;
@@ -0,0 +1,26 @@
1
+ import { createRequire as __twpCreateRequire } from 'node:module';
2
+ const require = __twpCreateRequire(import.meta.url);
3
+ import{apiExit,currentRevisionOf,errorDetail,pickNumber,printDiff,readUtf8Strict,shellQuote}from"./chunk-P4AEFKLM.js";import"./chunk-VRBI2NPI.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import{EXIT_API_SERVER,EXIT_FAILURE,EXIT_OK,EXIT_USAGE}from"./chunk-7WSNIXTQ.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??readUtf8Strict;const writeFile=deps.writeFile??((p,c)=>fs.writeFileSync(p,c,"utf8"));const exists=deps.exists??(p=>fs.existsSync(p));return opts.op==="push"?push(deps.api,opts,{out,err,readFile}):pull(deps.api,opts,{out,err,readFile,
4
+ 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 now=currentRevisionOf(res);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\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
12
+ ${errorDetail(res)}
13
+ `);return apiExit(res)}io.err(`\u26D4 \u61B2\u7AE0\u3092\u767B\u9332\u3067\u304D\u307E\u305B\u3093\uFF08${errorDetail(res)}\uFF09
14
+ `);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
15
+ `);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
16
+ `);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
17
+ `);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
18
+ `);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
19
+ `);return EXIT_OK}printDiff(io.out,target,source,local,current.charter);if(!opts.yes){io.out(`
20
+ ${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
21
+ `);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
22
+ `);return EXIT_FAILURE}io.out(`${target} \u306B\u5C55\u958B\u3057\u307E\u3057\u305F\uFF08revision ${current.revision}\uFF09\u3002
23
+ `);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
24
+ `);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
25
+ `);return EXIT_API_SERVER}return state}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["prompts"];let charter=null;if(prompts&&typeof prompts==="object"){const v=prompts["charter"];if(typeof v==="string")charter=v}return{charter,revision,updatedByName:typeof b["\
26
+ updated_by_name"]==="string"?b["updated_by_name"]:"",updatedAt:typeof b["updated_at"]==="string"?b["updated_at"]:""}}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(" ")}export{DEFAULT_CHARTER_FILE,runCharterCommand};
@@ -0,0 +1,15 @@
1
+ import { createRequire as __twpCreateRequire } from 'node:module';
2
+ const require = __twpCreateRequire(import.meta.url);
3
+ import{isPrivateProjectId}from"./chunk-GY7KI5E5.js";import{httpFetch}from"./chunk-J7QYPKVK.js";function describeError(res){if(res.status===null)return`transport_error=${res.transportError??"\u4E0D\u660E"}`;const body=res.json;const parts=[`http=${res.status}`];const reason=typeof body?.["reason"]==="string"?body["reason"]:"";if(reason)parts.push(`reason=${reason}`);const error=body?.["error"];const code=typeof error?.["code"]==="string"?error["code"]:"";if(code)parts.push(`code=${code}`);const message=(typeof body?.["message"]==="string"?body["message"]:"")||(typeof error?.["message"]==="\
4
+ string"?error["message"]:"");if(message)parts.push(message.slice(0,160));if(!reason&&!code&&!message)parts.push(`\u5FDC\u7B54\u306E\u5148\u982D: ${res.raw.slice(0,160)}`);return parts.join(" ")}function isPermanent(res){return res.status!==null&&res.status>=400&&res.status<500}function filterByStatus(items,status){return items.filter(item=>item.status===void 0||item.status===status)}var AgentLoopApi=class{constructor(opts){this.opts=opts;const root=opts.apiUrl.replace(/\/+$/,"");this.base=isPrivateProjectId(
5
+ opts.projectId)?`${root}/api/v2/tasks/private/agent-loop`:`${root}/api/v2/projects/${opts.projectId}/agent-loop`}opts;base;get baseUrl(){return this.base}list(query){const qs=new URLSearchParams;for(const[k,v]of Object.entries(query)){if(v!==void 0&&v!=="")qs.set(k,String(v))}const suffix=qs.toString()?`?${qs.toString()}`:"";return this.request("GET",suffix)}create(body){return this.request("POST","",body)}getItem(itemId){return this.request("GET",`/${encodeURIComponent(itemId)}`)}update(itemId,body,runId){
6
+ return this.request("PUT",`/${encodeURIComponent(itemId)}`,{...body,run_id:runId})}updateUnowned(itemId,body){return this.request("PUT",`/${encodeURIComponent(itemId)}`,body)}logUploadUrl(itemId,runId){return this.request("POST",`/${encodeURIComponent(itemId)}/log-upload-url`,{run_id:runId})}async putPresigned(url,body,contentType){const fetchImpl=this.opts.fetchImpl??httpFetch;const controller=new AbortController;const timer=setTimeout(()=>controller.abort(),this.opts.timeoutMs??6e4);try{const res=await fetchImpl(
7
+ url,{method:"PUT",headers:{"Content-Type":contentType},signal:controller.signal,body});await res.text().catch(()=>"");return{ok:res.ok,status:res.status,json:null,raw:"",transportError:null}}catch(err){const reason=err.name==="AbortError"?"timeout":err.message;return{ok:false,status:null,json:null,raw:"",transportError:reason}}finally{clearTimeout(timer)}}reorder(itemIds){return this.request("PUT","/reorder",{item_ids:itemIds})}claim(runnerId,runId){return this.request("POST","/claim",{runner_id:runnerId,
8
+ run_id:runId})}reclaim(){return this.request("POST","/reclaim",{})}runners(){return this.request("GET","/runners")}registerRunner(payload){return this.request("POST","/runners/register",payload)}heartbeatRunner(payload){return this.request("POST","/runners/heartbeat",payload)}deregisterRunner(payload){return this.request("POST","/runners/deregister",payload)}planStart(runnerId,runId){return this.request("POST","/plan/start",{runner_id:runnerId,run_id:runId})}planFinish(runnerId,runId,planStartedAt,result){
9
+ return this.request("POST","/plan/finish",{runner_id:runnerId,run_id:runId,plan_started_at:planStartedAt,result})}consumeCounter(key,date,limit){return this.request("POST","/counters/consume",{key,date,limit})}listCounters(date){return this.request("GET",`/counters?date=${encodeURIComponent(date)}`)}async queuedSnapshot(){return this.snapshotOf(["pending","processing"])}async processingSnapshot(){return this.snapshotOf(["processing"])}async pendingSnapshot(){return this.snapshotOf(["pending"])}async completedSince(sinceMicros,maxPages=10){
10
+ const all=[];let cursor=String(Math.trunc(sinceMicros));for(let page=0;page<maxPages;page++){const res=await this.list({status:"completed",limit:100,cursor});if(!res.ok)return null;const body=res.json;const items=body?.["items"];if(!Array.isArray(items))return null;all.push(...filterByStatus(items,"completed"));const pagination=body?.["pagination"];const hasMore=(pagination?.["has_more"]??body?.["has_more"])===true;const next=pagination?.["next_cursor"]??body?.["next_cursor"];if(!hasMore||!next)
11
+ return all;cursor=next}return null}async snapshotOf(statuses){const all=[];for(const status of statuses){let cursor;for(let page=0;page<20;page++){const res=await this.list({status,limit:100,cursor});if(!res.ok)return null;const body=res.json;const items=body?.["items"];if(!Array.isArray(items))return null;all.push(...filterByStatus(items,status));const pagination=body?.["pagination"];const hasMore=(pagination?.["has_more"]??body?.["has_more"])===true;const next=pagination?.["next_cursor"]??body?.["\
12
+ next_cursor"];if(!hasMore||!next)break;cursor=next;if(page===19)return null}}return all}async request(method,suffix,body){let token;try{token=await this.opts.session.getAccessToken()}catch(err){return{ok:false,status:null,json:null,raw:"",transportError:err.message}}let res=await this.send(method,suffix,token,body);if(res.status===401){try{token=await this.opts.session.refresh(token);res=await this.send(method,suffix,token,body)}catch(err){return{ok:false,status:401,json:null,raw:res.raw,transportError:err.
13
+ message}}}return res}async send(method,suffix,token,body){const fetchImpl=this.opts.fetchImpl??httpFetch;const controller=new AbortController;const timer=setTimeout(()=>controller.abort(),this.opts.timeoutMs??6e4);try{const res=await fetchImpl(`${this.base}${suffix}`,{method,headers:{Authorization:`Bearer ${token}`,"Content-Type":"application/json",Accept:"application/json"},signal:controller.signal,...body===void 0?{}:{body:JSON.stringify(body)}});const raw=await res.text();let json=null;if(raw.
14
+ trim()!==""){try{json=JSON.parse(raw)}catch{json=null}}return{ok:res.ok,status:res.status,json,raw,transportError:null}}catch(err){const reason=err.name==="AbortError"?"timeout":err.message;return{ok:false,status:null,json:null,raw:"",transportError:reason}}finally{clearTimeout(timer)}}};function pick(json,path){let cur=json;for(const part of path.split(".")){if(cur===null||typeof cur!=="object")return void 0;cur=cur[part]}return cur===null?void 0:cur}function pickString(json,path){const v=pick(
15
+ json,path);if(typeof v==="string")return v;if(typeof v==="number")return String(v);if(typeof v==="boolean")return v?"true":"false";return""}export{describeError,isPermanent,filterByStatus,AgentLoopApi,pick,pickString};
@@ -13,4 +13,4 @@ function shellQuote(value){if(SHELL_SAFE.test(value))return value;return`'${valu
13
13
  context.profile));for(const spec of context.flags){if(PAGING_CONTROL_FLAGS.has(spec.name))continue;const value=input.flags.get(spec.name);if(value===void 0)continue;flags.push(spec.takesValue?flagSegment(spec.name,value):spec.name)}flags.push(flagSegment("--cursor",cursor));const args=input.args.map(arg=>shellQuote(arg));const separated=input.args.some(arg=>arg.startsWith("-"));return separated?[context.command,...flags,"--",...args].join(" "):[context.command,...args,...flags].join(" ")}function nextPageNotes(body,input,context){
14
14
  const{hasMore,cursor}=readEnvelopeCursor(body);if(hasMore!==true){if(hasMore===false||hasMore===null||hasMore===void 0&&cursor===void 0)return[];return[`\u5FDC\u7B54\u306E has_more \u3092\u89E3\u91C8\u3067\u304D\u306A\u3044\u305F\u3081\u3001\u7D9A\u304D\u306E\u6709\u7121\u3092\u5224\u5B9A\u3067\u304D\u307E\u305B\u3093\uFF08\u53D7\u3051\u53D6\u3063\u305F\u5024: ${JSON.stringify(hasMore)??"undefined"}\uFF09\u3002\u5168\u4EF6\u304C\u8981\u308B\u306A\u3089 --all \u3092\u4ED8\u3051\u3066\u304F\u3060\u3055\u3044\u3002`]}
15
15
  if(typeof cursor!=="string"||cursor==="")return["\u7D9A\u304D\u304C\u3042\u308A\u307E\u3059\u304C\u3001\u5FDC\u7B54\u306B next_cursor \u304C\u3042\u308A\u307E\u305B\u3093\u3002"];if(CONTROL_CHARS.test(cursor)){return["\u7D9A\u304D\u304C\u3042\u308A\u307E\u3059\u304C\u3001\u5FDC\u7B54\u306E next_cursor \u306B\u5236\u5FA1\u6587\u5B57\u304C\u542B\u307E\u308C\u308B\u305F\u3081\u6848\u5185\u3092\u51FA\u305B\u307E\u305B\u3093\u3002--all \u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\u3002"]}const hint=context.
16
- flags.some(spec=>spec.name==="--all")?"\uFF08\u5168\u4EF6\u306F --all\uFF09":"";return[`\u7D9A\u304D\u304C\u3042\u308A\u307E\u3059\u3002\u6B21\u306E\u30DA\u30FC\u30B8: ${nextPageCommand(input,cursor,context)}${hint}`]}export{DEFAULT_MAX_PAGES,DEFAULT_MAX_ITEMS,LIST_FLAGS,LIST_PAGING_HELP,positiveInteger,nonEmpty,readEnvelopeCursor,envelopePaging,shellQuote,nextPageNotes};
16
+ flags.some(spec=>spec.name==="--all")?"\uFF08\u5168\u4EF6\u306F --all\uFF09":"";return[`\u7D9A\u304D\u304C\u3042\u308A\u307E\u3059\u3002\u6B21\u306E\u30DA\u30FC\u30B8: ${nextPageCommand(input,cursor,context)}${hint}`]}export{DEFAULT_MAX_PAGES,DEFAULT_MAX_ITEMS,LIST_FLAGS,LIST_PAGING_HELP,positiveInteger,nonEmpty,readEnvelopeCursor,envelopePaging,shellQuote,flagSegment,nextPageNotes};
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{booleanText,boundedText,isoDate}from"./chunk-IJLJGDMZ.js";import{ORG_MASTER_LIMIT}from"./chunk-QOUFHYK5.js";import{nonEmpty,positiveInteger}from"./chunk-DMDVLOAY.js";import{requireResolved,singleRef,withResolved}from"./chunk-ZN5EFDH7.js";import{ULID_RE,UUID_RE,isSafePathSegment}from"./chunk-GMBJTG6A.js";import{acknowledgement,isRecord,pick}from"./chunk-ZWVYVS2A.js";import{ApiResponseError,UsageError}from"./chunk-7WSNIXTQ.js";var CLEAR_DATE="none";function placeholderOf(field){switch(field.kind){case"text":return`<${field.label}>`;case"integer":return"<\u6574\u6570>";case"boolean":return"<true|false>";case"enum":return`<${field.values.join("|")}>`;case"date":return`<YYYY-MM-DD|${CLEAR_DATE}>`;case"ref":return field.placeholder}}function createFlags(fields){return fields.map(field=>({name:field.flag,summary:field.summary,takesValue:true,placeholder:placeholderOf(field)}))}function updateFlags(fields){const flags=[];for(const field of fields){
3
+ import{booleanText,boundedText,isoDate}from"./chunk-UDPJ2IGK.js";import{nonEmpty,positiveInteger}from"./chunk-G4OO4M44.js";import{ORG_MASTER_LIMIT}from"./chunk-NIAOX77K.js";import{ULID_RE,UUID_RE,isSafePathSegment}from"./chunk-GMBJTG6A.js";import{requireResolved,singleRef,withResolved}from"./chunk-ZN5EFDH7.js";import{acknowledgement,isRecord,pick}from"./chunk-ZWVYVS2A.js";import{ApiResponseError,UsageError}from"./chunk-7WSNIXTQ.js";var CLEAR_DATE="none";function placeholderOf(field){switch(field.kind){case"text":return`<${field.label}>`;case"integer":return"<\u6574\u6570>";case"boolean":return"<true|false>";case"enum":return`<${field.values.join("|")}>`;case"date":return`<YYYY-MM-DD|${CLEAR_DATE}>`;case"ref":return field.placeholder}}function createFlags(fields){return fields.map(field=>({name:field.flag,summary:field.summary,takesValue:true,placeholder:placeholderOf(field)}))}function updateFlags(fields){const flags=[];for(const field of fields){
4
4
  flags.push({name:field.flag,summary:field.summary,takesValue:true,placeholder:placeholderOf(field)});if(field.kind==="ref")flags.push({name:field.clearFlag,summary:field.clearSummary,takesValue:false})}return flags}function integerValue(field,raw){const trimmed=raw.trim();const value=/^\d+$/.test(trimmed)?Number(trimmed):Number.NaN;const tooLarge=field.max!==void 0&&value>field.max;if(!Number.isSafeInteger(value)||value<field.min||tooLarge){const range=field.max!==void 0?`${field.min} \u4EE5\u4E0A ${field.
5
5
  max} \u4EE5\u4E0B`:`${field.min} \u4EE5\u4E0A`;throw new UsageError(`${field.flag} \u306F ${range}\u306E\u6574\u6570\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${raw}`,`${field.label}\u3092\u6574\u6570\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return value}function fieldBody(input,fields){const body={};for(const field of fields){switch(field.kind){case"text":{const value=boundedText(input,field.flag,{maxChars:field.maxChars,label:field.label});if(value!==void 0)body[field.
6
6
  key]=value;break}case"integer":{const raw=input.flags.get(field.flag);if(raw!==void 0)body[field.key]=integerValue(field,raw);break}case"boolean":{const raw=input.flags.get(field.flag);if(raw!==void 0)body[field.key]=booleanText(field.flag,raw);break}case"enum":{const raw=input.flags.get(field.flag);if(raw===void 0)break;const value=raw.trim().toLowerCase();if(!field.values.includes(value)){throw new UsageError(`${field.flag} \u306B\u300C${raw}\u300D\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,