@tocca-systems/twp-cli 0.80.0 → 0.81.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -11,6 +11,12 @@
11
11
  `CHANGELOG.md` に残してあります。顧客向けの履歴は public 公開以降を対象とします。
12
12
  -->
13
13
 
14
+ ## 0.81.0
15
+
16
+ `twp project member create` / `update` の `--wiki-role admin|member` で、プロジェクトごとの Wiki 権限(そのプロジェクトの Wiki だけで管理者にするか)を設定できるようになりました。`twp project members` の一覧に Wiki 権限(`wiki_role`)の列が加わり、誰がそのプロジェクトの Wiki 管理者かを確かめられます。
17
+
18
+ TUI の `/model` で接続先の異なるモデル(例: Anthropic 直と Bedrock)へ切り替えるときは、確認のうえ新しい会話から始めるようになりました。同じ接続先のモデル同士は、これまでどおり会話を保ったまま切り替わります。会話の残量表示は、モデルごとのコンテキストの大きさに合わせて計算されます。
19
+
14
20
  ## 0.80.0
15
21
 
16
22
  ドメイン知識の記事の更新・移動・削除で `--if-revision <版>` を指定できるようになりました。`twp knowledge doc get` で読んだ版から記事が変わっていれば、上書きせずに止まります。
package/README.md CHANGED
@@ -212,8 +212,8 @@ twp project update <ID|コード> [--name <名前>] [--code <コード>] [--end-
212
212
  twp project mine # 自分がメンバーのプロジェクト(役割・参画期間つき)
213
213
  twp user projects <ユーザー> # 指定したユーザーのプロジェクト(組織管理者のみ)
214
214
 
215
- twp project member create <ユーザー> --role <役割> [--project <コード>] [--period-file <パス>] [--start-date <日付>] [--end-date <日付>] [--memo <文字列>]
216
- twp project member update <メンバー> [--project <コード>] [--role <役割>] [--period-file <パス>] [--start-date <日付>] [--end-date <日付>] [--memo <文字列>]
215
+ twp project member create <ユーザー> --role <役割> [--wiki-role <admin|member>] [--project <コード>] [--period-file <パス>] [--start-date <日付>] [--end-date <日付>] [--memo <文字列>]
216
+ twp project member update <メンバー> [--project <コード>] [--role <役割>] [--wiki-role <admin|member>] [--period-file <パス>] [--start-date <日付>] [--end-date <日付>] [--memo <文字列>]
217
217
  twp project member delete <メンバー> [--project <コード>] --yes
218
218
  twp project member promote <メンバー> [--project <コード>] # 管理者(manager)にする
219
219
  twp project member demote <メンバー> [--project <コード>] # manager をメンバーに戻す
@@ -223,6 +223,7 @@ twp project member alias <別名> | --clear [--project <コード>] # 自分
223
223
  - **稼働期間は `--period-file` の JSON 配列で渡します**(例: `[{"start_date":"2026-10-01","end_date":"2026-12-31","daily_hours":8,"input_mode":"hours"}]`。`-` で標準入力)。期間を渡すと参画開始日・終了日はサーバが期間から決めるので、`--start-date` / `--end-date` とは同時に指定できません
224
224
  - **`update --period-file` は稼働期間を丸ごと置き換えます。** 送る前に今の期間を読み、消える期間を表示します(`--dry-run` でも出ます)。残す期間は `twp project members --output json` の `assignment_periods` から `id` を付けたまま送ってください
225
225
  - **`--role` の値はサーバが検査します**(`member` / `manager` など。値は `twp project member create help` に載せています)
226
+ - **`--wiki-role` はそのプロジェクトの Wiki 権限です**(`admin`=そのプロジェクトの Wiki だけで管理者/`member`=一般・既定)。役割(`--role`)とは独立で、今の値は `twp project members` の `wiki_role` 列で確かめられます
226
227
  - `create` の相手はテナントのユーザー(`twp user` と同じ指定方法)、それ以外の相手はそのプロジェクトのメンバー(氏名・メールアドレス・ID・`me`。別名では指定できません)です。誰に送るかは送る前に表示します
227
228
  - `delete` は担当中のタスクの担当者を変えません。参画を終えるだけなら `update --end-date` を使ってください
228
229
 
@@ -1836,6 +1837,8 @@ twp configure --profile dev # プロファイルを指定して設定
1836
1837
 
1837
1838
  **モデルはモードと直交する。** 業務モードに切り替えてもモデルは変わらない(`/model` で別に切り替える)。
1838
1839
 
1840
+ **`/model` で接続先の異なるモデル(例: Anthropic 直 `claude-*` と Bedrock `bedrock:*`)を選ぶと、会話中なら確認のうえ新しい会話から始める**(前の会話は引き継がない)。同じ接続先のモデル同士は会話を保ったまま次のターンから切り替わる。
1841
+
1839
1842
  #### モードを自分で調整する
1840
1843
 
1841
1844
  モードは markdown ファイルで上書きできる。置き場所は**プロジェクトの `.twp/modes/<モード名>.md`**(そのリポジトリで作業する全員に効く)と、**`~/.twp/modes/<モード名>.md`**(自分の全プロジェクトに効く)。プロジェクト側が強い。
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{CommandModelMissingError,MAX_REPORTED_VIOLATIONS,loadCommandModelDomain,loadCommandModelRoutes,validateBody,validateQuery}from"./chunk-NZ7WI4RZ.js";import{NO_REDACT_FLAG,NO_REDACT_NOTICE,exitCodeFor,fetchAllPages,reportError}from"./chunk-OBILH2O7.js";import"./chunk-JYASAM2R.js";import{renderOutput}from"./chunk-PO35MCYP.js";import"./chunk-Q3B65OFC.js";import{evaluateQuery}from"./chunk-GFLGXGWE.js";import{describeWaitResult,parseWaitOptions,waitUntilTerminal}from"./chunk-WVCEKC7V.js";
3
+ import{CommandModelMissingError,MAX_REPORTED_VIOLATIONS,loadCommandModelDomain,loadCommandModelRoutes,validateBody,validateQuery}from"./chunk-NZ7WI4RZ.js";import{NO_REDACT_FLAG,NO_REDACT_NOTICE,exitCodeFor,fetchAllPages,reportError}from"./chunk-AK7CNRVB.js";import"./chunk-YPULDSJ3.js";import{renderOutput}from"./chunk-PO35MCYP.js";import"./chunk-Q3B65OFC.js";import{evaluateQuery}from"./chunk-GFLGXGWE.js";import{describeWaitResult,parseWaitOptions,waitUntilTerminal}from"./chunk-WVCEKC7V.js";
4
4
  import{redactSecretValues,redactSecrets,withDebug}from"./chunk-LDBYJPRD.js";import{parseOperationArgs,repeatedValues}from"./chunk-RX5HWI4L.js";import{readBody}from"./chunk-6LSQCOCJ.js";import"./chunk-RSSPNFSK.js";import"./chunk-HVZUXLQ4.js";import{ApiError,TwpApiClient,appendQuery}from"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import{DEFAULT_MAX_ITEMS,DEFAULT_MAX_PAGES,envelopePaging,isPageNumberEnvelope,pageRangeNotes,positiveInteger,readEnvelopeCursor,
5
5
  readPageNumberCursor,shellQuote}from"./chunk-MI6HVYR2.js";import"./chunk-II5RVJQN.js";import"./chunk-3ZRMMBP5.js";import{ApiResponseError,EXIT_OK,EXIT_WAIT_TIMEOUT,NetworkError,UsageError}from"./chunk-VFPY2A23.js";import{GLOBAL_OPTIONS_HELP}from"./chunk-PECIBNFD.js";import{AuthSession,NotLoggedInError,SessionExpiredError,loadCredentials}from"./chunk-XNLIEUAW.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import{effectiveApiUrl,resolveConfiguredOutput,resolveProfile}from"./chunk-EDF4U5BT.js";
6
6
  import"./chunk-RZVI6PMW.js";import{HELP_TOKEN}from"./chunk-MLRBDF44.js";import"./chunk-QQRJLH6B.js";import{OUTPUT_FORMATS,resolveOutputFormat}from"./chunk-74BPZOKU.js";import"./chunk-UREA4ZIG.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var MIN_SEGMENT_CHARS=3;var parsedCache=new WeakMap;function splitSegments(path){return path.split("/").filter(segment=>segment!=="")}function parseRoutes(routes){const cached=parsedCache.get(routes);if(cached!==void 0)return cached;const parsed=[];for(const[key,domain]of Object.entries(routes.routes)){const space=key.indexOf(" ");if(space<=0)continue;const template=key.slice(space+1);parsed.push({method:key.slice(0,space),template,domain,segments:splitSegments(template).map(segment=>/^\{[^/{}]+\}$/.
@@ -1,7 +1,7 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{RESIDENT_TOKEN_CAP,activateModeFiles,activatePermissionSettings,buildResidentSet,buildSystemPrompt,createAuditLogger,createTwpToolkit,currentBranch,describeAuditLog,describeToolCatalog,displayCwd,executeTool,findProjectTwpSubdir,localTools,lstatOrNull,parseFrontMatter,parseRule,persistProjectAllow,projectPermissionsPath,projectRootFor,readFileTool,residentInputs,resolveGitExecutable,runTurn,secretReason}from"./chunk-DLJQE2B5.js";import"./chunk-NZ7WI4RZ.js";import{buildDiffLines,
4
- diffStat}from"./chunk-VRBI2NPI.js";import{require_fuzzysort}from"./chunk-DIMZRTLE.js";import"./chunk-N2UVRM3Z.js";import"./chunk-LDBYJPRD.js";import"./chunk-RSSPNFSK.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import"./chunk-II5RVJQN.js";import"./chunk-VFPY2A23.js";import{RelayError,builtinCatalog,createRuntime,loadCachedCatalog,modelLabel,pickModel,toModelInfos}from"./chunk-JQBXLZTJ.js";
3
+ import{RESIDENT_TOKEN_CAP,activateModeFiles,activatePermissionSettings,buildResidentSet,buildSystemPrompt,createAuditLogger,createTwpToolkit,currentBranch,describeAuditLog,describeToolCatalog,displayCwd,executeTool,findProjectTwpSubdir,localTools,lstatOrNull,parseFrontMatter,parseRule,persistProjectAllow,projectPermissionsPath,projectRootFor,readFileTool,residentInputs,resolveGitExecutable,runTurn,secretReason}from"./chunk-TH3NVRAU.js";import"./chunk-NZ7WI4RZ.js";import{buildDiffLines,
4
+ diffStat}from"./chunk-VRBI2NPI.js";import{require_fuzzysort}from"./chunk-DIMZRTLE.js";import"./chunk-N2UVRM3Z.js";import"./chunk-LDBYJPRD.js";import"./chunk-RSSPNFSK.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import"./chunk-II5RVJQN.js";import"./chunk-VFPY2A23.js";import{RelayError,builtinCatalog,classifyModelSwitch,createRuntime,loadCachedCatalog,modelLabel,pickModel,specFor,toModelInfos}from"./chunk-TVTJRNUC.js";
5
5
  import"./chunk-D233KKXW.js";import"./chunk-PMOUHEJQ.js";import"./chunk-XNLIEUAW.js";import{proxyDiagnostics}from"./chunk-J7QYPKVK.js";import{checkMinSupportedVersion,isBelowMinSupported,minSupportedBlockMessage}from"./chunk-DXXFUNYN.js";import"./chunk-EDF4U5BT.js";import{configReadDirs,twpHomeDir}from"./chunk-RZVI6PMW.js";import{parseArgv}from"./chunk-IVFSEXD3.js";import{applyPermissionMode,checkPermission,describePermissionMode,getMode,isModeId,modeSource,
6
6
  nextMode}from"./chunk-2LOT54OO.js";import"./chunk-MLRBDF44.js";import"./chunk-VERYHAWV.js";import"./chunk-QQRJLH6B.js";import{isFullWidth,isWide,stringWidth,stripAnsi}from"./chunk-UREA4ZIG.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import{__commonJS,__export,__require,__toESM}from"./chunk-VSJBJXZO.js";var require_react_production=__commonJS({"node_modules/react/cjs/react.production.js"(exports){"use strict";var REACT_ELEMENT_TYPE=Symbol.for("react.transitional.element");var REACT_PORTAL_TYPE=Symbol.for("react.portal");var REACT_FRAGMENT_TYPE=Symbol.for("react.fragment");var REACT_STRICT_MODE_TYPE=Symbol.for("react.strict_mode");var REACT_PROFILER_TYPE=Symbol.for("react.profiler");var REACT_CONSUMER_TYPE=Symbol.for("react.consumer");var REACT_CONTEXT_TYPE=Symbol.for("react.context");var REACT_FORWARD_REF_TYPE=Symbol.
7
7
  for("react.forward_ref");var REACT_SUSPENSE_TYPE=Symbol.for("react.suspense");var REACT_MEMO_TYPE=Symbol.for("react.memo");var REACT_LAZY_TYPE=Symbol.for("react.lazy");var REACT_ACTIVITY_TYPE=Symbol.for("react.activity");var REACT_VIEW_TRANSITION_TYPE=Symbol.for("react.view_transition");var MAYBE_ITERATOR_SYMBOL=Symbol.iterator;function getIteratorFn(maybeIterable){if(null===maybeIterable||"object"!==typeof maybeIterable)return null;maybeIterable=MAYBE_ITERATOR_SYMBOL&&maybeIterable[MAYBE_ITERATOR_SYMBOL]||
@@ -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-IWCVSEQF.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-SUYWHFJS.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",
@@ -1289,26 +1289,27 @@ persistOptions??[];return{name:target.tool.name,input:fullInputFor(request),...r
1289
1289
  const bufferRef=(0,import_react38.useRef)({text:"",cursor:0});const[buffer,setBufferState]=(0,import_react38.useState)(bufferRef.current);const[mode,setMode]=(0,import_react38.useState)(initialMode);const[model,setModel]=(0,import_react38.useState)(initialModel);const[catalog,setCatalog]=(0,import_react38.useState)(initialCatalog);const[busy,setBusy]=(0,import_react38.useState)(false);const[context,setContext]=(0,import_react38.useState)(()=>runtime.context.snapshot());const[runningTool,setRunningTool]=(0,import_react38.useState)(
1290
1290
  null);const[overlay,setOverlay]=(0,import_react38.useState)(startInDoctor?"doctor":"none");const[pendingPermission,setPendingPermissionState]=(0,import_react38.useState)(null);const pendingPermissionRef=(0,import_react38.useRef)(null);const setPendingPermission=(0,import_react38.useCallback)(next=>{pendingPermissionRef.current=next;setPendingPermissionState(next)},[]);const[keyLog,setKeyLog]=(0,import_react38.useState)([]);const[ctrlCArmed,setCtrlCArmed]=(0,import_react38.useState)(false);const[
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
- 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
- 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();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.
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 catalogRef=(0,import_react38.useRef)(catalog);catalogRef.current=catalog;(0,import_react38.useEffect)(()=>{runtime.
1293
+ context.setContextWindow(specFor(catalog,model).contextWindow);setContext(runtime.context.snapshot())},[catalog,model,runtime]);const busyRef=(0,import_react38.useRef)(false);const[pendingSwitch,setPendingSwitch]=(0,import_react38.useState)(null);const abortRef=(0,import_react38.useRef)(false);const streamAbortRef=(0,import_react38.useRef)(null);const sleepRef=(0,import_react38.useRef)(null);const permissionResolver=(0,import_react38.useRef)(null);const permStateRef=(0,import_react38.useRef)(INITIAL_DIALOG_STATE);
1294
+ 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(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)(
1295
+ 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)(()=>currentBranch(),[]);const cwd2=(0,import_react38.useMemo)(()=>displayCwd(),[]);const networkDiagnostics=(0,import_react38.useMemo)(()=>proxyDiagnostics(),[]);const fixedChrome=1+2+(busy?1:0)+(pasting?
1296
+ 1:0)+1+1;const liveTotal=Math.max(MIN_LIVE_ROWS,size.rows-1);const inputContentWidth=Math.max(1,size.columns-6);const inputMaxRows=Math.max(1,Math.min(6,liveTotal-fixedChrome-1));const inputWindow=layoutInputWindow(buffer.text,buffer.cursor,inputContentWidth,inputMaxRows);const budget=liveAreaBudget(size.rows,fixedChrome+inputWindow.shownRows);const commit=(0,import_react38.useCallback)(item=>{setItems(prev=>[...prev,{...item,id:nextId()}])},[]);const catalogFetchRef=(0,import_react38.useRef)(null);
1297
+ const blockOnMinSupported=(0,import_react38.useCallback)(floor=>{const text=minSupportedBlockMessage(version,floor??"");commit({kind:"notice",tone:"error",text});process.exitCode=1;exit();process.stderr.write(stripTerminalControls(text))},[commit,exit,version]);(0,import_react38.useEffect)(()=>{if(!runtime.loggedIn){commit({kind:"notice",tone:"warn",text:"\u30ED\u30B0\u30A4\u30F3\u3057\u3066\u3044\u307E\u305B\u3093\u3002\u4F1A\u8A71\u3092\u59CB\u3081\u308B\u306B\u306F\u5225\u306E\u7AEF\u672B\u3067 `twp login` \u3092\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044\u3002"});
1298
+ 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.then(fetched=>{if(cancelled)return;if(isBelowMinSupported(version,fetched.minSupportedVersion)){blockOnMinSupported(fetched.minSupportedVersion);return}catalogRef.current=fetched;setCatalog(fetched);const picked=pickModel(fetched,modelRef.current);if(picked.model!==modelRef.
1299
+ current){modelRef.current=picked.model;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(
1300
+ 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\
1301
+ \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(
1302
+ {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;
1303
+ 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.
1304
+ 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(
1305
+ {...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!==
1306
+ 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(
1307
+ {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 turnSpec=specFor(catalogRef.current,modelRef.current);const turnTools=!turnSpec.tools?
1308
+ []: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,spec:turnSpec,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)),
1309
+ 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({name:stripTerminalControls(tool.name),summary:safe,input:safe,
1310
+ 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.isError===true?"error":"done",...toolResult.diff?{diff:toolResult.
1311
+ 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"})}if(result.
1312
+ 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
1313
  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
1314
  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
1315
  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.
@@ -1333,20 +1334,24 @@ current?c:null},[buffer,fileIndex]);(0,import_react38.useEffect)(()=>{if(fileInd
1333
1334
  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
1335
  return}if(bufferRef.current.text!==""){clearBuffer();return}if(ctrlCArmed){exit();return}setCtrlCArmed(true);commit({kind:"notice",tone:"info",text:"\u3082\u3046\u4E00\u5EA6 Ctrl+C \u3067\u7D42\u4E86\u3057\u307E\u3059\uFF08Ctrl+D \u3067\u3082\u7D42\u4E86\uFF09"});return}setCtrlCArmed(false);if(ev.name==="shift-tab"||ev.name==="alt-m"){const to=nextMode(modeRef.current);setMode(to);return}if(ev.name==="ctrl-r"){const last=lastToolRef.current;if(last)commit({kind:"tool",run:{...last,summary:`${last.
1335
1336
  summary}\uFF08\u5C55\u958B\uFF09`},expanded:true});return}if(overlay==="permission"){const resolve=permissionResolver.current;if(!resolve)return;if(ev.name==="paste"&&ev.value&&permStateRef.current.stage!=="instead"){const pasted=ev.value.replace(/\r\n?/g,"\n");setBuffer(b=>insert(b,pasted));return}const step=stepDialog(permStateRef.current,ev,pendingPermissionRef.current??{name:""});if("answer"in step)resolve(step.answer);else setPermState(step.state);return}if(overlay==="doctor"){if(ev.name===
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)}
1337
+ "escape")setOverlay("none");return}if(overlay==="model"){if(ev.name==="up")setSelected(s=>Math.max(0,s-1));else if(ev.name==="down")setSelected(s=>Math.min(catalog.ids.length-1,s+1));else if(ev.name==="escape")setOverlay("none");else if(ev.name==="enter"){const pickedId=catalog.ids[selectedRef.current];if(pickedId!==void 0&&classifyModelSwitch(catalog,model,pickedId)==="new_conversation"&&!runtime.context.isEmpty()){if(busyRef.current){commit({kind:"notice",tone:"warn",text:`${modelLabel(pickedId)}\
1338
+ \u306F\u63A5\u7D9A\u5148\u304C\u7570\u306A\u308B\u305F\u3081\u65B0\u3057\u3044\u4F1A\u8A71\u304C\u5FC5\u8981\u3067\u3059\u3002\u5FDC\u7B54\u304C\u7D42\u308F\u3063\u3066\u304B\u3089\u5207\u308A\u66FF\u3048\u3066\u304F\u3060\u3055\u3044`});setOverlay("none");return}setPendingSwitch(pickedId);setSelected(0);setOverlay("model-confirm");return}if(pickedId!==void 0){setModel(pickedId);commit({kind:"notice",tone:"info",text:`\u30E2\u30C7\u30EB\u3092 ${modelLabel(pickedId)} \u306B\u5207\u308A\u66FF\u3048\u307E\u3057\u305F\uFF08\u30E2\u30FC\u30C9\u306F ${getMode(
1339
+ modeRef.current).label} \u306E\u307E\u307E\uFF09`})}setOverlay("none")}return}if(overlay==="model-confirm"){if(ev.name==="up")setSelected(0);else if(ev.name==="down")setSelected(1);else if(ev.name==="escape"||ev.name==="enter"&&selectedRef.current!==0){setPendingSwitch(null);setOverlay("none");commit({kind:"notice",tone:"info",text:`\u30E2\u30C7\u30EB\u306F ${modelLabel(model)} \u306E\u307E\u307E\u3067\u3059`})}else if(ev.name==="enter"&&pendingSwitch!==null){setItems([]);runtime.context.clear();
1340
+ setContext(runtime.context.snapshot());setModel(pendingSwitch);commit({kind:"notice",tone:"info",text:`\u65B0\u3057\u3044\u4F1A\u8A71\u3092\u59CB\u3081\u3001\u30E2\u30C7\u30EB\u3092 ${modelLabel(pendingSwitch)} \u306B\u5207\u308A\u66FF\u3048\u307E\u3057\u305F\uFF08\u63A5\u7D9A\u5148\u304C\u7570\u306A\u308B\u305F\u3081\u524D\u306E\u4F1A\u8A71\u306F\u5F15\u304D\u7D99\u3044\u3067\u3044\u307E\u305B\u3093\uFF09`});setPendingSwitch(null);setOverlay("none")}return}const mention=mentionAtCursor(bufferRef.
1341
+ current.text,bufferRef.current.cursor);if(mention===null||mention.start!==dismissedMentionRef.current)dismissedMentionRef.current=null;const files=busyRef.current?null:fileCompletionFor(bufferRef.current,fileIndexRef.current);if(files!==null&&files.start!==dismissedMentionRef.current){if(ev.name==="up"){setSelected(s=>Math.max(0,s-1));return}if(ev.name==="down"){setSelected(s=>Math.min(files.items.length-1,s+1));return}if(ev.name==="tab"){const picked=files.items[Math.min(selectedRef.current,files.
1342
+ items.length-1)];if(picked!==void 0){const insertText=`@${picked} `;setBuffer(b=>({text:b.text.slice(0,files.start)+insertText+b.text.slice(files.end),cursor:files.start+insertText.length}));setSelected(0)}return}if(ev.name==="escape"){dismissedMentionRef.current=files.start;setBuffer(b=>({...b}));return}}const palette=busyRef.current?[]:paletteFor(bufferRef.current.text,modeRef.current);if(palette.length>0){if(ev.name==="up"){setSelected(s=>Math.max(0,s-1));return}if(ev.name==="down"){setSelected(
1343
+ s=>Math.min(palette.length-1,s+1));return}if(ev.name==="tab"){const picked=palette[selectedRef.current];if(picked){setBuffer(()=>({text:picked.name,cursor:picked.name.length}));setSelected(0)}return}if(ev.name==="enter"){const typed=bufferRef.current.text.trim();const exact=palette.find(c=>c.name===typed||c.aliases?.includes(typed));const picked=exact??palette[Math.min(selectedRef.current,palette.length-1)];if(picked){if(exact===void 0&&picked.argumentHint?.startsWith("<")===true){setBuffer(()=>({
1344
+ text:`${picked.name} `,cursor:picked.name.length+1}));setSelected(0);return}clearBuffer();runCommand(picked.name)}return}if(ev.name==="escape"){clearBuffer();return}}switch(ev.name){case"char":if(ev.value){setBuffer(b=>insert(b,ev.value??""));setSelected(0)}return;case"paste":if(ev.value){const pasted=ev.value.replace(/\r\n?/g,"\n");setBuffer(b=>insert(b,pasted));setSelected(0)}return;case"newline":setBuffer(b=>insert(b,"\n"));return;case"enter":{const b=bufferRef.current;if(b.cursor>0&&b.text[b.
1345
+ cursor-1]==="\\"){setBuffer(prev=>({text:`${prev.text.slice(0,prev.cursor-1)}
1342
1346
  ${prev.text.slice(prev.cursor)}`,cursor:prev.cursor}));return}submit();return}case"backspace":setBuffer(b=>{const prev=prevBoundary(b.text,b.cursor);return prev===b.cursor?b:{text:b.text.slice(0,prev)+b.text.slice(b.cursor),cursor:prev}});setSelected(0);return;case"delete":setBuffer(b=>({text:b.text.slice(0,b.cursor)+b.text.slice(nextBoundary(b.text,b.cursor)),cursor:b.cursor}));return;case"left":setBuffer(b=>({...b,cursor:prevBoundary(b.text,b.cursor)}));return;case"right":setBuffer(b=>({...b,cursor:nextBoundary(
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.
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:"\
1345
- truncate",children:line===""?" ":line},i))}):null,runningTool?(0,import_jsx_runtime9.jsx)(ToolCard,{run:runningTool,expanded:false,maxLines:budget.body}):null,overlay==="permission"&&pendingPermission?(0,import_jsx_runtime9.jsx)(PermissionDialog,{spec:pendingPermission,state:permState,maxDiffLines:diffBudget}):null,overlay==="model"?(0,import_jsx_runtime9.jsx)(SelectList,{title:`\u30E2\u30C7\u30EB\u3092\u9078\u629E\uFF08\u30E2\u30FC\u30C9\u3068\u306F\u72EC\u7ACB\uFF09${catalogTitleSuffix(catalog.
1346
- source)}`,items:toModelInfos(catalog.ids).map(m=>({key:m.id,label:m.label,hint:m.note})),selected:selectedState,maxRows:Math.min(catalog.ids.length,listBudget),footer:"\u2191\u2193 \u3067\u9078\u629E \xB7 Enter \u3067\u6C7A\u5B9A \xB7 Esc \u3067\u53D6\u6D88"}):null,overlay==="doctor"?(0,import_jsx_runtime9.jsx)(Doctor,{events:keyLog,maxRows:doctorBudget,network:networkDiagnostics}):null,overlay==="none"&&!busy&&fileCompletion!==null?(0,import_jsx_runtime9.jsx)(SelectList,{title:"\u30D5\u30A1\u30A4\u30EB",
1347
- items:fileCompletion.items.map(f=>({key:f,label:stripTerminalControls(f),hint:""})),selected:selectedState,maxRows:Math.min(8,listBudget),footer:"\u2191\u2193 \u9078\u629E \xB7 Tab \u78BA\u5B9A \xB7 Esc \u9589\u3058\u308B\uFF08Enter \u306F\u305D\u306E\u307E\u307E\u9001\u4FE1\uFF09"}):null,overlay==="none"&&!busy&&paletteItems.length>0?(0,import_jsx_runtime9.jsx)(SelectList,{title:"\u30B9\u30E9\u30C3\u30B7\u30E5\u30B3\u30DE\u30F3\u30C9",items:paletteItems.map(c=>({key:c.name,label:`${c.name}${c.argumentHint?
1348
- ` ${c.argumentHint}`:""}`,hint:`${c.description}${originLabel(c)}`})),selected:selectedState,maxRows:Math.min(8,listBudget),footer:"\u2191\u2193 \u9078\u629E \xB7 Tab \u88DC\u5B8C \xB7 Enter \u5B9F\u884C \xB7 Esc \u53D6\u6D88"}):null,(0,import_jsx_runtime9.jsx)(InputBox,{value:buffer.text,window:inputWindow,busy,pasting,width:size.columns}),(0,import_jsx_runtime9.jsx)(StatusLine,{mode:modeDef,model,cwd:cwd2,branch,contextRemaining:context.remainingPercent,width:size.columns}),(0,import_jsx_runtime9.jsx)(
1349
- HintLine,{width:size.columns})]})]})}import fs4 from"fs";import path2 from"path";var KNOWN_KEYS=new Set(["description","argument-hint","allowed-tools","mode"]);var TEXT_MAX=80;var TEMPLATE_MAX_BYTES=16384;var FILE_COUNT_MAX=128;var FILE_BYTES_MAX=64*1024;var DEPTH_MAX=3;var WARNING_MAX=30;var KNOWN_TOOLS=new Set([...localTools().map(t=>t.name),"bash","shell"]);var SEGMENT=/^[A-Za-z0-9][A-Za-z0-9_-]*$/;function samePath(a,b){const real=p=>{try{return fs4.realpathSync(p)}catch{return path2.resolve(p)}};const x=real(a);const y=real(b);return process.platform==="win32"||process.
1347
+ b.text,b.cursor)}));return;case"home":setBuffer(b=>({...b,cursor:0}));return;case"end":setBuffer(b=>({...b,cursor:b.text.length}));return;case"ctrl-u":clearBuffer();return;default:return}},[busy,catalog,clearBuffer,commit,ctrlCArmed,exit,model,overlay,pendingSwitch,runtime,setBuffer,setSelected,stream,submit,runCommand]);useTerminalInput(onKey,setPasting);const streamRows=fitTailRows(stream.text,size.columns,budget.body).rows;const diffBudget=budget.body-13;const listBudget=Math.max(1,budget.body-
1348
+ 6);const doctorBudget=Math.max(1,budget.body-11-doctorNetworkRows(networkDiagnostics));return(0,import_jsx_runtime9.jsxs)(Box_default,{flexDirection:"column",children:[(0,import_jsx_runtime9.jsx)(Static,{items,children:item=>(0,import_jsx_runtime9.jsx)(ItemView,{item},item.id)}),(0,import_jsx_runtime9.jsxs)(Box_default,{flexDirection:"column",marginTop:1,children:[stream.streaming||stream.text!==""?(0,import_jsx_runtime9.jsx)(Box_default,{flexDirection:"column",children:streamRows.map((line,i)=>(0,import_jsx_runtime9.jsx)(
1349
+ Text,{wrap:"truncate",children:line===""?" ":line},i))}):null,runningTool?(0,import_jsx_runtime9.jsx)(ToolCard,{run:runningTool,expanded:false,maxLines:budget.body}):null,overlay==="permission"&&pendingPermission?(0,import_jsx_runtime9.jsx)(PermissionDialog,{spec:pendingPermission,state:permState,maxDiffLines:diffBudget}):null,overlay==="model"?(0,import_jsx_runtime9.jsx)(SelectList,{title:`\u30E2\u30C7\u30EB\u3092\u9078\u629E\uFF08\u30E2\u30FC\u30C9\u3068\u306F\u72EC\u7ACB\uFF09${catalogTitleSuffix(
1350
+ catalog.source)}`,items:toModelInfos(catalog.ids).map(m=>({key:m.id,label:m.label,hint:m.note})),selected:selectedState,maxRows:Math.min(catalog.ids.length,listBudget),footer:"\u2191\u2193 \u3067\u9078\u629E \xB7 Enter \u3067\u6C7A\u5B9A \xB7 Esc \u3067\u53D6\u6D88"}):null,overlay==="model-confirm"&&pendingSwitch!==null?(0,import_jsx_runtime9.jsx)(SelectList,{title:`${modelLabel(pendingSwitch)} \u306F\u63A5\u7D9A\u5148\u304C\u7570\u306A\u308A\u307E\u3059\u3002\u73FE\u5728\u306E\u4F1A\u8A71\u3092\u7D42\u3048\u3066\u65B0\u3057\u3044\u4F1A\u8A71\u3092\u59CB\u3081\u307E\u3059\u304B\uFF1F`,
1351
+ items:[{key:"new",label:"\u65B0\u3057\u3044\u4F1A\u8A71\u3092\u59CB\u3081\u3066\u5207\u308A\u66FF\u3048\u308B",hint:"\u3053\u308C\u307E\u3067\u306E\u4F1A\u8A71\u306F\u5F15\u304D\u7D99\u304C\u308C\u307E\u305B\u3093"},{key:"cancel",label:"\u53D6\u308A\u6D88\u3059",hint:`${modelLabel(model)} \u306E\u307E\u307E\u7D9A\u3051\u308B`}],selected:selectedState,maxRows:2,footer:"\u2191\u2193 \u3067\u9078\u629E \xB7 Enter \u3067\u6C7A\u5B9A \xB7 Esc \u3067\u53D6\u6D88"}):null,overlay==="doctor"?(0,import_jsx_runtime9.jsx)(
1352
+ Doctor,{events:keyLog,maxRows:doctorBudget,network:networkDiagnostics}):null,overlay==="none"&&!busy&&fileCompletion!==null?(0,import_jsx_runtime9.jsx)(SelectList,{title:"\u30D5\u30A1\u30A4\u30EB",items:fileCompletion.items.map(f=>({key:f,label:stripTerminalControls(f),hint:""})),selected:selectedState,maxRows:Math.min(8,listBudget),footer:"\u2191\u2193 \u9078\u629E \xB7 Tab \u78BA\u5B9A \xB7 Esc \u9589\u3058\u308B\uFF08Enter \u306F\u305D\u306E\u307E\u307E\u9001\u4FE1\uFF09"}):null,overlay==="no\
1353
+ ne"&&!busy&&paletteItems.length>0?(0,import_jsx_runtime9.jsx)(SelectList,{title:"\u30B9\u30E9\u30C3\u30B7\u30E5\u30B3\u30DE\u30F3\u30C9",items:paletteItems.map(c=>({key:c.name,label:`${c.name}${c.argumentHint?` ${c.argumentHint}`:""}`,hint:`${c.description}${originLabel(c)}`})),selected:selectedState,maxRows:Math.min(8,listBudget),footer:"\u2191\u2193 \u9078\u629E \xB7 Tab \u88DC\u5B8C \xB7 Enter \u5B9F\u884C \xB7 Esc \u53D6\u6D88"}):null,(0,import_jsx_runtime9.jsx)(InputBox,{value:buffer.text,window:inputWindow,
1354
+ busy,pasting,width:size.columns}),(0,import_jsx_runtime9.jsx)(StatusLine,{mode:modeDef,model,cwd:cwd2,branch,contextRemaining:context.remainingPercent,width:size.columns}),(0,import_jsx_runtime9.jsx)(HintLine,{width:size.columns})]})]})}import fs4 from"fs";import path2 from"path";var KNOWN_KEYS=new Set(["description","argument-hint","allowed-tools","mode"]);var TEXT_MAX=80;var TEMPLATE_MAX_BYTES=16384;var FILE_COUNT_MAX=128;var FILE_BYTES_MAX=64*1024;var DEPTH_MAX=3;var WARNING_MAX=30;var KNOWN_TOOLS=new Set([...localTools().map(t=>t.name),"bash","shell"]);var SEGMENT=/^[A-Za-z0-9][A-Za-z0-9_-]*$/;function samePath(a,b){const real=p=>{try{return fs4.realpathSync(p)}catch{return path2.resolve(p)}};const x=real(a);const y=real(b);return process.platform==="win32"||process.
1350
1355
  platform==="darwin"?x.toLowerCase()===y.toLowerCase():x===y}function userCommandsDirs(env3=process.env){const home=path2.join(twpHomeDir(env3),"commands");const dirs=configReadDirs(env3).map(dir=>path2.join(dir,"commands"));return[home,...dirs.filter(d=>d!==home)]}function listCommandFiles(root,origin){const found=[];const warnings=[];let truncated=false;const walk=(dir,segments)=>{let names;try{names=fs4.readdirSync(dir)}catch(err){const code=err.code;if(code!=="ENOENT")warnings.push(`${dir}: \u8AAD\
1351
1356
  \u307F\u53D6\u308C\u307E\u305B\u3093\u3067\u3057\u305F\uFF08${code??"unknown"}\uFF09`);return}for(const entry of names.sort()){if(truncated)return;if(entry.startsWith("."))continue;const full=path2.join(dir,entry);const stat=lstatOrNull(full);if(stat===null)continue;if(stat.isSymbolicLink()){warnings.push(`${full}: \u30B7\u30F3\u30DC\u30EA\u30C3\u30AF\u30EA\u30F3\u30AF\u306F\u8AAD\u307F\u307E\u305B\u3093\uFF08\u5B9F\u30D5\u30A1\u30A4\u30EB\u3092\u7F6E\u3044\u3066\u304F\u3060\u3055\u3044\uFF09`);
1352
1357
  continue}if(stat.isDirectory()){if(!SEGMENT.test(entry)){warnings.push(`${full}: \u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u540D\u306B\u4F7F\u3048\u306A\u3044\u6587\u5B57\u304C\u3042\u308A\u307E\u3059\uFF08\u82F1\u6570\u5B57\u30FB-\u30FB_ \u306E\u307F\uFF09`);continue}if(segments.length+1>=DEPTH_MAX){warnings.push(`${full}: \u968E\u5C64\u304C\u6DF1\u3059\u304E\u307E\u3059\uFF08${DEPTH_MAX} \u6BB5\u307E\u3067\u8AAD\u307F\u307E\u3059\uFF09`);continue}walk(full,[...segments,entry]);continue}if(!entry.toLowerCase().
@@ -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-KZQGIM2C.js";import"./chunk-JQBXLZTJ.js";import"./chunk-D233KKXW.js";import"./chunk-PMOUHEJQ.js";import"./chunk-XNLIEUAW.js";import"./chunk-J7QYPKVK.js";import{PARENT_PID_ENV,WORKER_ENV,autoUpdateDisabledReason,classifyInstall,isCheckDue,listRegisteredPids,lockFilePath,readUpdateState,resolveCliPath,runDirPath,writeUpdateState}from"./chunk-CH6QU76P.js";import{PACKAGE_NAME,parseVersionCore}from"./chunk-DXXFUNYN.js";
3
+ import{fetchLatestVersion,isBehindLatest,resolveNpmCommand}from"./chunk-KRPJ4UFW.js";import"./chunk-TVTJRNUC.js";import"./chunk-D233KKXW.js";import"./chunk-PMOUHEJQ.js";import"./chunk-XNLIEUAW.js";import"./chunk-J7QYPKVK.js";import{PARENT_PID_ENV,WORKER_ENV,autoUpdateDisabledReason,classifyInstall,isCheckDue,listRegisteredPids,lockFilePath,readUpdateState,resolveCliPath,runDirPath,writeUpdateState}from"./chunk-CH6QU76P.js";import{PACKAGE_NAME,parseVersionCore}from"./chunk-DXXFUNYN.js";
4
4
  import"./chunk-5WGOHFAS.js";import"./chunk-EDF4U5BT.js";import"./chunk-RZVI6PMW.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";import{execFile}from"child_process";import fs from"fs";import path from"path";var PARENT_WAIT_MAX_MS=12*60*60*1e3;var PARENT_POLL_MS=1e3;var LOCK_STALE_MS=PARENT_WAIT_MAX_MS+60*60*1e3;var INSTALL_TIMEOUT_MS=0;function childEnv(env){const next={...env};delete next[WORKER_ENV];delete next[PARENT_PID_ENV];return next}function createNpmRunner(env=process.env){const cmd=resolveNpmCommand({env});if(cmd===null)return null;return(args,timeoutMs)=>new Promise(resolve=>{execFile(cmd.file,[...cmd.prefix,...args],{timeout:timeoutMs,windowsHide:true,maxBuffer:8*1024*1024,cwd:path.dirname(lockFilePath(env)),env:childEnv(env)},(error,stdout,stderr)=>{if(error===null){resolve({ok:true,stdout:String(stdout),stderr:String(
5
5
  stderr)});return}const e=error;resolve({ok:false,stdout:String(stdout??""),stderr:String(stderr??""),...e.killed?{error:"\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8\u3057\u307E\u3057\u305F"}:typeof e.code==="string"?{error:e.code}:{}})})})}function summarizeNpmFailure(result){const text=`${result.stderr}
6
6
  ${result.stdout}`;const code=/npm (?:ERR!|error) code (\S+)/.exec(text)?.[1]??result.error;let reason;if(code==="EACCES"||code==="EPERM"){reason=`\u30B0\u30ED\u30FC\u30D0\u30EB\u306E\u5C0E\u5165\u5148\u306B\u66F8\u304D\u8FBC\u3080\u6A29\u9650\u304C\u3042\u308A\u307E\u305B\u3093\uFF08${code}\uFF09`}else if(code!==void 0&&/^(ENOTFOUND|ETIMEDOUT|ECONNREFUSED|ECONNRESET|EAI_AGAIN|ENETUNREACH)$/.test(code)){reason=`npm registry \u306B\u63A5\u7D9A\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08${code}\
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{loadDomain}from"./chunk-JYASAM2R.js";import{renderDocument,renderOutput}from"./chunk-PO35MCYP.js";import{JsonBodyWithView}from"./chunk-Q3B65OFC.js";import{evaluateQuery}from"./chunk-GFLGXGWE.js";import{redactSecretValues,redactSecrets,withDebug}from"./chunk-LDBYJPRD.js";import{parseOperationArgs}from"./chunk-RX5HWI4L.js";import{Resolver,requireDefaultProject}from"./chunk-RSSPNFSK.js";import{ResolveError}from"./chunk-HVZUXLQ4.js";import{ApiError,
3
+ import{loadDomain}from"./chunk-YPULDSJ3.js";import{renderDocument,renderOutput}from"./chunk-PO35MCYP.js";import{JsonBodyWithView}from"./chunk-Q3B65OFC.js";import{evaluateQuery}from"./chunk-GFLGXGWE.js";import{redactSecretValues,redactSecrets,withDebug}from"./chunk-LDBYJPRD.js";import{parseOperationArgs}from"./chunk-RX5HWI4L.js";import{Resolver,requireDefaultProject}from"./chunk-RSSPNFSK.js";import{ResolveError}from"./chunk-HVZUXLQ4.js";import{ApiError,
4
4
  MultipartBody,TwpApiClient,appendQuery}from"./chunk-JA5A6UJ2.js";import{DEFAULT_MAX_ITEMS,DEFAULT_MAX_PAGES,nextPageNotes,positiveInteger,shellQuote}from"./chunk-MI6HVYR2.js";import{isRecord}from"./chunk-3ZRMMBP5.js";import{ApiRejectedError,ApiResponseError,EXIT_API_CLIENT,EXIT_API_SERVER,EXIT_AUTH,EXIT_FAILURE,EXIT_OK,EXIT_USAGE,EXIT_WAIT_TIMEOUT,NetworkError,UsageError,WaitTimeoutError}from"./chunk-VFPY2A23.js";import{GLOBAL_OPTIONS_HELP}from"./chunk-PECIBNFD.js";
5
5
  import{AuthSession,NotLoggedInError,SessionExpiredError,loadCredentials}from"./chunk-XNLIEUAW.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import{effectiveApiUrl,loadUserConfig,resolveConfiguredBacklogSpace,resolveConfiguredOutput,resolveProfile}from"./chunk-EDF4U5BT.js";import{HELP_TOKEN}from"./chunk-MLRBDF44.js";import{OUTPUT_FORMATS,resolveOutputFormat}from"./chunk-74BPZOKU.js";import{stringWidth}from"./chunk-UREA4ZIG.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import fs from"fs";import path from"path";var NO_REDACT_FLAG={name:"--no-redact",summary:"\u5FDC\u7B54\u306E\u4F0F\u5B57\u5316\u3092\u89E3\u9664\u3057\u3066\u751F\u306E\u5024\u3092\u51FA\u3059\uFF08\u9375\u306E\u53D7\u3051\u53D6\u308A\u7B49\uFF09",takesValue:false};var NO_REDACT_NOTICE="\u6CE8\u8A18: --no-redact \u306E\u305F\u3081\u51FA\u529B\u3092\u4F0F\u5B57\u5316\u3057\u307E\u305B\u3093\uFF08\u7AEF\u672B\u3068\u30ED\u30B0\u306B\u5E73\u6587\u3067\u6B8B\u308A\u307E\u3059\uFF09\u3002";function withCommonFlags(flags){return flags.some(flag=>flag.
6
6
  name===NO_REDACT_FLAG.name)?flags:[...flags,NO_REDACT_FLAG]}function alignedList(entries,indent=" "){const width=entries.reduce((max,[left])=>Math.max(max,stringWidth(left)),0);return entries.map(([left,right])=>`${indent}${left}${" ".repeat(Math.max(0,width-stringWidth(left)))} ${right}`).join("\n")}function subresourcesOf(resource){return resource.subresources??[]}function renderResourceHelp(resource,path2){const subresources=subresourcesOf(resource);const operationSection=resource.operations.length===0?"":`
@@ -3,8 +3,9 @@ const require = __twpCreateRequire(import.meta.url);
3
3
  import{FROM_FLAG,MANHOUR_DESCRIPTION,MANHOUR_FROM_FLAG,MANHOUR_TO_FLAG,MONTH_FLAG,TO_FLAG,dataOf,listIn,manhourNotes,manhourQuery,manhourRows,monthRange,rangeNotes,recordOf,workloadDistributionNotes,workloadDistributionRows}from"./chunk-QXYY7DUV.js";import{USER_REF_FLAG,USER_REF_HELP,userPath}from"./chunk-HKEW6XIC.js";import{createFlags,fieldBody,hasAnyField,resolveRefFields,updateFlags}from"./chunk-CADCERVL.js";import{boundedText,isoDate}from"./chunk-JJSBBWJ5.js";import{
4
4
  readBody}from"./chunk-6LSQCOCJ.js";import{PROJECT_MEMBERS_LIMIT,resolveNamed}from"./chunk-RSSPNFSK.js";import{collapsesInUrlPath,safeProjectIdPolicy}from"./chunk-HVZUXLQ4.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-MI6HVYR2.js";import{requireResolved,singleRef,withResolved}from"./chunk-PS5QFKHB.js";import{isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";var PROJECT_FLAG={name:"--project",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30B3\u30FC\u30C9\u307E\u305F\u306F ID\uFF08\u7701\u7565\u6642\u306F TWP_PROJECT / .twp/config.json / ~/.twp/config.json\uFF09",takesValue:true,placeholder:"<\u30B3\u30FC\u30C9|ID>"};var ROLE_FLAG={name:"--role",summary:"\u5F79\u5272\uFF08member / manager \u306A\u3069\u30FB\u5024\u306F\u30B5\u30FC\u30D0\u304C\u691C\u67FB\u3059\u308B\uFF09",takesValue:true,placeholder:"<\u5F79\u5272>"};var START_DATE_FLAG={name:"\
5
5
  --start-date",summary:"\u53C2\u753B\u958B\u59CB\u65E5\uFF08YYYY-MM-DD\uFF09",takesValue:true,placeholder:"<YYYY-MM-DD>"};var END_DATE_FLAG={name:"--end-date",summary:"\u53C2\u753B\u7D42\u4E86\u65E5\uFF08YYYY-MM-DD\uFF09",takesValue:true,placeholder:"<YYYY-MM-DD>"};var PERIOD_FILE_FLAG={name:"--period-file",summary:"\u7A3C\u50CD\u671F\u9593\uFF08assignment_periods\uFF09\u306E JSON \u914D\u5217\u30D5\u30A1\u30A4\u30EB\uFF08- \u3067\u6A19\u6E96\u5165\u529B\uFF09",takesValue:true,placeholder:"<\u30D1\u30B9>"};
6
- var MEMO_FLAG={name:"--memo",summary:"\u30E1\u30E2\uFF0810,000 \u6587\u5B57\u307E\u3067\uFF09",takesValue:true,placeholder:"<\u6587\u5B57\u5217>"};var CLEAR_FLAG={name:"--clear",summary:"\u5225\u540D\u3092\u6D88\u3059",takesValue:false};var MEMO_MAX_CHARS=1e4;var PERIOD_FILE_MAX_CHARS=2e5;var ALIAS_MAX_CHARS=255;var PERIOD_KEYS=["id","start_date","end_date","daily_hours","total_hours","input_mode"];var PERIOD_REQUIRED=["start_date","end_date","daily_hours"];var ROLE_HELP="--role \u306E\u5024\u306F\u30B5\u30FC\u30D0\u304C\u691C\u67FB\u3057\u307E\u3059\uFF08CLI\
7
- \u306F\u691C\u67FB\u3057\u307E\u305B\u3093\uFF09\u30022026-10-01 \u6642\u70B9\u306E\u5024\u306F\n member\uFF08\u30E1\u30F3\u30D0\u30FC\uFF09/ manager\uFF08\u7BA1\u7406\u8005\uFF09/ approver\uFF08\u7BA1\u7406\u8005\uFF08\u627F\u8A8D\u8005\uFF09\uFF09/ manager_no_punch\uFF08\u7BA1\u7406\u8005\uFF08\u6253\u523B\u7121\uFF09\uFF09\u3067\u3059\u3002\n \u5024\u306F\u5897\u3048\u308B\u3053\u3068\u304C\u3042\u308A\u307E\u3059\u3002\u4ECA\u306E\u30E1\u30F3\u30D0\u30FC\u306E\u5024\u306F twp project members \u306E role \u5217\u3067\u78BA\u304B\u3081\u3089\u308C\u307E\u3059\u3002";
6
+ var WIKI_ROLE_FLAG={name:"--wiki-role",summary:"\u3053\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E Wiki \u6A29\u9650\uFF08admin\uFF1DWiki \u7BA1\u7406\u8005 / member\uFF1D\u4E00\u822C\uFF09",takesValue:true,placeholder:"<admin|member>"};var MEMO_FLAG={name:"--memo",summary:"\u30E1\u30E2\uFF0810,000 \u6587\u5B57\u307E\u3067\uFF09",takesValue:true,placeholder:"<\u6587\u5B57\u5217>"};var CLEAR_FLAG={name:"--clear",summary:"\u5225\u540D\u3092\u6D88\u3059",takesValue:false};var WIKI_ROLES=["admin",
7
+ "member"];var MEMO_MAX_CHARS=1e4;var PERIOD_FILE_MAX_CHARS=2e5;var ALIAS_MAX_CHARS=255;var PERIOD_KEYS=["id","start_date","end_date","daily_hours","total_hours","input_mode"];var PERIOD_REQUIRED=["start_date","end_date","daily_hours"];var ROLE_HELP="--role \u306E\u5024\u306F\u30B5\u30FC\u30D0\u304C\u691C\u67FB\u3057\u307E\u3059\uFF08CLI \u306F\u691C\u67FB\u3057\u307E\u305B\u3093\uFF09\u30022026-10-01 \u6642\u70B9\u306E\u5024\u306F\n member\uFF08\u30E1\u30F3\u30D0\u30FC\uFF09/ manager\uFF08\u7BA1\u7406\u8005\uFF09/ approver\uFF08\u7BA1\u7406\u8005\uFF08\u627F\u8A8D\u8005\uFF09\uFF09/ manager_no_punch\uFF08\u7BA1\u7406\u8005\uFF08\u6253\u523B\u7121\uFF09\uFF09\u3067\u3059\u3002\n \u5024\u306F\u5897\u3048\u308B\u3053\u3068\u304C\u3042\u308A\u307E\u3059\u3002\u4ECA\u306E\u30E1\u30F3\u30D0\u30FC\u306E\u5024\u306F twp project members \u306E role \u5217\u3067\u78BA\u304B\u3081\u3089\u308C\u307E\u3059\u3002";
8
+ var WIKI_ROLE_HELP="--wiki-role \u306F\u3053\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E Wiki \u6A29\u9650\u3067\u3059\u3002admin\uFF08Wiki \u7BA1\u7406\u8005\uFF09\u304B member\uFF08\u4E00\u822C\u30FB\u65E2\u5B9A\uFF09\u3092\u6307\u5B9A\u3057\u307E\u3059\u3002\n \u5F79\u5272\uFF08--role\uFF09\u3068\u306F\u72EC\u7ACB\u3067\u3001manager \u3067\u3082\u6307\u5B9A\u3057\u306A\u3051\u308C\u3070 member \u306E\u307E\u307E\u3067\u3059\u3002admin \u306B\u3059\u308B\u3068\u3001\u3053\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\n Wiki \u3060\u3051\u3067\u7BA1\u7406\u8005\u3068\u3057\u3066\u6271\u308F\u308C\u307E\u3059\u3002\u4ECA\u306E\u5024\u306F twp project members \u306E wiki_role \u5217\u3067\u78BA\u304B\u3081\u3089\u308C\u307E\u3059\u3002";
8
9
  var PERIOD_HELP='--period-file \u306F\u7A3C\u50CD\u671F\u9593\uFF08assignment_periods\uFF09\u306E JSON \u914D\u5217\u3067\u3059\u30021\u4EF6\u306F\u6B21\u306E\u30AD\u30FC\u3092\u6301\u3064\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3067\u3059:\n start_date / end_date\uFF08YYYY-MM-DD\u30FB\u5FC5\u9808\uFF09\u30FBdaily_hours\uFF081\u65E5\u3042\u305F\u308A\u306E\u6642\u9593\u30FB\u5FC5\u9808\uFF09\u30FB\n total_hours\u30FBinput_mode\uFF08hours / percentage / person_days / total_hours\uFF09\u30FBid\uFF08\u65E2\u5B58\u306E\u671F\u9593\u3092\u6B8B\u3059\u3068\u304D\uFF09\n \u4F8B: [{"start_date":"2026-10-01","end_date":"2026-12-31","daily_hours":8,"input_mode":"hours"}]\n \u671F\u9593\u30921\u4EF6\u4EE5\u4E0A\u9001\u308B\u3068\u3001\u53C2\u753B\u958B\u59CB\u65E5\u30FB\u7D42\u4E86\u65E5\u306F\u30B5\u30FC\u30D0\u304C\u671F\u9593\u306E\u6700\u5C0F\u30FB\u6700\u5927\u304B\u3089\u6C7A\u3081\u307E\u3059\n \uFF08\u305D\u306E\u305F\u3081 --start-date / --end-date \u3068\u306F\u540C\u6642\u306B\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093\uFF09\u3002--period-file - \u3067\u6A19\u6E96\u5165\u529B\u304B\u3089\u8AAD\u3081\u307E\u3059\u3002';
9
10
  var MEMBER_REF_HELP="<\u30E1\u30F3\u30D0\u30FC> \u306F\u305D\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30E1\u30F3\u30D0\u30FC\u3092\u6C0F\u540D\u30FB\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u30FBID\u30FBme\uFF08\u81EA\u5206\uFF09\u3067\u6307\u5B9A\u3057\u307E\u3059\uFF08\u5225\u540D\u3067\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093\uFF09\u3002\n\u540C\u59D3\u540C\u540D\u306A\u3089\u5019\u88DC\u3092\u51FA\u3057\u3066\u6B62\u307E\u308B\u306E\u3067\u3001\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u3067\u6307\u5B9A\u3057\u76F4\u3057\u3066\u304F\u3060\u3055\u3044\u3002";
10
11
  var FORBIDDEN="\u3053\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30E1\u30F3\u30D0\u30FC\u3092\u7BA1\u7406\u3059\u308B\u6A29\u9650\u304C\u5FC5\u8981\u3067\u3059\uFF08\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u7BA1\u7406\u8005\u304B\u3001\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u6A5F\u80FD\u306E\u7BA1\u7406\u8005\u30FB\u7D44\u7E54\u7BA1\u7406\u8005\uFF09\u3002\u30E1\u30F3\u30D0\u30FC\u306E\u8FFD\u52A0\u30FB\u5909\u66F4\u30FB\u524A\u9664\u306F\u3053\u308C\u3089\u306E\u6A29\u9650\u3092\u6301\u3064\u4EBA\u3060\u3051\u304C\u884C\u3048\u307E\u3059";
@@ -13,29 +14,31 @@ function roleRejected(server){return/role/i.test(server)?"\u5F79\u5272\u306E\u50
13
14
  if(unknownKeys.length>0)problems.push(`${at}: \u9001\u308C\u306A\u3044\u9805\u76EE\u304C\u3042\u308A\u307E\u3059: ${unknownKeys.join(", ")}`);const missing=PERIOD_REQUIRED.filter(key=>period[key]===void 0||period[key]===null||period[key]==="");if(missing.length>0)problems.push(`${at}: \u5FC5\u9808\u306E\u9805\u76EE\u304C\u3042\u308A\u307E\u305B\u3093: ${missing.join(", ")}`)});if(problems.length>0){throw new UsageError(`\u7A3C\u50CD\u671F\u9593\u306B\u8AA4\u308A\u304C\u3042\u308A\u307E\u3059\uFF08${source}\
14
15
  \uFF09:
15
16
  ${problems.join("\n ")}`,PERIOD_HELP)}return parsed}async function readPeriods(input,usage){const text2=await readBody(input,{flag:"--periods",fileFlag:PERIOD_FILE_FLAG.name,label:"\u7A3C\u50CD\u671F\u9593",maxChars:PERIOD_FILE_MAX_CHARS,usage});if(text2===void 0)return void 0;return parsePeriods(text2,`${PERIOD_FILE_FLAG.name} ${input.flags.get(PERIOD_FILE_FLAG.name)??""}`)}async function checkFields(input,usage){isoDate(input,START_DATE_FLAG.name);isoDate(input,END_DATE_FLAG.name);boundedText(
16
- input,MEMO_FLAG.name,{maxChars:MEMO_MAX_CHARS,label:"\u30E1\u30E2"});if(input.flags.has(ROLE_FLAG.name)&&nonEmpty(input.flags,ROLE_FLAG.name)===void 0){throw new UsageError(`${ROLE_FLAG.name} \u306B\u7A7A\u306E\u5024\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,ROLE_HELP)}const periods=await readPeriods(input,usage);if(periods===void 0)return input;if(periods.length>0&&(input.flags.has(START_DATE_FLAG.name)||input.flags.has(END_DATE_FLAG.name))){throw new UsageError(`${PERIOD_FILE_FLAG.name}\
17
- \u306B\u671F\u9593\u304C\u3042\u308B\u3068\u304D\u306F ${START_DATE_FLAG.name} / ${END_DATE_FLAG.name} \u3092\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,"\u30B5\u30FC\u30D0\u304C\u53C2\u753B\u958B\u59CB\u65E5\u30FB\u7D42\u4E86\u65E5\u3092\u671F\u9593\u306E\u6700\u5C0F\u30FB\u6700\u5927\u3067\u4E0A\u66F8\u304D\u3059\u308B\u305F\u3081\u3001\u6307\u5B9A\u3057\u3066\u3082\u52B9\u304D\u307E\u305B\u3093\u3002")}return withResolved(input,{[PERIODS_KEY]:JSON.stringify(periods)})}function memberBody(input){
18
- const body={};const role=nonEmpty(input.flags,ROLE_FLAG.name);if(role!==void 0)body["role"]=role;const startDate=isoDate(input,START_DATE_FLAG.name);if(startDate!==void 0)body["start_date"]=startDate;const endDate=isoDate(input,END_DATE_FLAG.name);if(endDate!==void 0)body["end_date"]=endDate;const periods=input.resolved?.[PERIODS_KEY];if(periods!==void 0)body["assignment_periods"]=JSON.parse(periods);const memo=boundedText(input,MEMO_FLAG.name,{maxChars:MEMO_MAX_CHARS,label:"\u30E1\u30E2"});if(memo!==
19
- void 0)body["memo"]=memo;return body}function membersPath(input,suffix=""){return`/api/v2/projects/${encodeURIComponent(requireResolved(input,"projectId"))}/members${suffix}`}function text(value){return typeof value==="string"&&value.trim()!==""?value:null}async function prepareMember(input,ctx,usage){const ref=singleRef(input,{flag:USER_REF_FLAG.name,label:"\u30E1\u30F3\u30D0\u30FC",usage});const projectId=await ctx.projectId(nonEmpty(input.flags,PROJECT_FLAG.name));const rows=await ctx.resolver.
20
- memberRows(projectId);let userId;if(ref.toLowerCase()==="me"){userId=(await ctx.resolver.currentUser()).id}else{const refs=rows.flatMap(row2=>{const id=text(row2["user_id"]);if(id===null)return[];const email=text(row2["user_email"]);return[{id,name:text(row2["user_name"])??id,code:null,...email!==null?{aliases:[email]}:{}}]});userId=(await resolveNamed(ref,refs,{flag:"<\u30E1\u30F3\u30D0\u30FC>",label:"\u30E1\u30F3\u30D0\u30FC"})).id}const row=rows.find(member=>member["user_id"]===userId);if(row===
21
- void 0){throw new UsageError("\u81EA\u5206\u306F\u3053\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30E1\u30F3\u30D0\u30FC\u3067\u306F\u3042\u308A\u307E\u305B\u3093","\u30E1\u30F3\u30D0\u30FC\u306F twp project members \u3067\u78BA\u304B\u3081\u3089\u308C\u307E\u3059\u3002")}return withResolved(input,{projectId,userId,memberName:`${text(row["user_name"])??userId}\uFF08${text(row["user_email"])??userId}\u30FB\u5F79\u5272 ${text(row["role"])??"\u4E0D\u660E"}\uFF09`,[MEMBER_ROW_KEY]:JSON.stringify(
22
- row)})}var targetNote=verb=>input=>[`${verb}\u30E1\u30F3\u30D0\u30FC: ${requireResolved(input,"memberName")}`];var invalidates=(input,ctx)=>{const projectId=input.resolved?.["projectId"];if(projectId!==void 0)ctx.resolver.invalidateMembers(projectId)};var MEMBER_COLUMNS=["user_id","user_name","user_email","role","alias","start_date","end_date"];function memberResult(body,label){if(!isRecord(body)||body["result"]!==true||!isRecord(body["member"])){throw new ApiResponseError(`${label}\u306E\u5FDC\u7B54\u304C\u60F3\u5B9A\u306E\u5F62\u3067\u306F\u3042\u308A\u307E\
23
- \u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}const rest={...body};delete rest["result"];return rest}function memberSummary(body,label){const result=memberResult(body,label);const member=result["member"];const periods=member["assignment_periods"];return{message:result["message"]??null,...pick(member,MEMBER_COLUMNS),periods:Array.isArray(periods)?periods.length:0}}function removeAck(body){if(!isRecord(body)||body["result"]!==true){throw new ApiResponseError(
24
- "\u30E1\u30F3\u30D0\u30FC\u524A\u9664\u306E\u5FDC\u7B54\u304C\u60F3\u5B9A\u306E\u5F62\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return{result:true,message:body["message"]??null}}function describePeriod(period){const mode=period["input_mode"]===void 0||period["input_mode"]===null?"":`\u30FB${String(period["input_mode"])}`;return`${String(period["start_date"]??"?")}\u301C${String(period["end_date"]??"?")}\uFF081\u65E5 ${String(
25
- period["daily_hours"]??"?")} \u6642\u9593${mode}\u30FBid ${String(period["id"]??"?")}\uFF09`}function droppedPeriods(current,next){const keep=new Set(next.map(period=>period["id"]).filter(id=>typeof id==="string"&&id!==""));return current.filter(isRecord).filter(period=>!(typeof period["id"]==="string"&&keep.has(period["id"])))}function periodNotes(input){const sent=input.resolved?.[PERIODS_KEY];if(sent===void 0)return[];const row=JSON.parse(requireResolved(input,MEMBER_ROW_KEY));const current=Array.
26
- isArray(row["assignment_periods"])?row["assignment_periods"]:[];const next=JSON.parse(sent);const dropped=droppedPeriods(current,next);const head=`\u7A3C\u50CD\u671F\u9593\uFF08assignment_periods\uFF09\u306F\u4E38\u3054\u3068\u7F6E\u304D\u63DB\u308F\u308A\u307E\u3059\uFF08\u9001\u308B ${next.length} \u4EF6\u3060\u3051\u304C\u6B8B\u308A\u307E\u3059\uFF09\u3002`;if(current.length===0)return[`${head}\u4ECA\u306E\u671F\u9593\u306F\u3042\u308A\u307E\u305B\u3093\u3002`];if(dropped.length===0)return[`${head}\
27
- \u4ECA\u306E\u671F\u9593\u306F\u3059\u3079\u3066\u540C\u3058 id \u3067\u9001\u3089\u308C\u307E\u3059\u3002`];return[`${head}\u4ECA\u306E\u671F\u9593\u306E\u3046\u3061\u3001\u9001\u308B\u5185\u5BB9\u306B\u540C\u3058 id \u304C\u7121\u3044 ${dropped.length} \u4EF6\u306F\u6D88\u3048\u307E\u3059\uFF08\u540C\u3058\u65E5\u4ED8\u3067\u3082 id \u304C\u7121\u3051\u308C\u3070\u65B0\u3057\u3044 id \u3067\u4F5C\u308A\u76F4\u3055\u308C\u307E\u3059\uFF09:`,...dropped.map(period=>` - ${describePeriod(period)}`)]}
28
- var WRITE_FLAGS=[ROLE_FLAG,START_DATE_FLAG,END_DATE_FLAG,PERIOD_FILE_FLAG,MEMO_FLAG,PROJECT_FLAG,USER_REF_FLAG];var createOperation={name:"create",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306B\u30E1\u30F3\u30D0\u30FC\u3092\u8FFD\u52A0\u3059\u308B\uFF08\u7A3C\u50CD\u671F\u9593\u3064\u304D\u30FB\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u7BA1\u7406\u8005\uFF09",usage:"twp project member create <\u30E6\u30FC\u30B6\u30FC> --role <\u5F79\u5272> [--project <\u30B3\u30FC\u30C9|ID>] [--start-date <YYYY-MM-DD>] [--end-date <YYYY-MM-DD>] [--period-f\
29
- ile <\u30D1\u30B9>] [--memo <\u6587\u5B57\u5217>]",description:`--role \u306F\u5FC5\u9808\u3067\u3059\u3002\u7A3C\u50CD\u671F\u9593\u3092\u5FC5\u9808\u306B\u3057\u3066\u3044\u308B\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3067\u306F --period-file \u3082\u8981\u308A\u307E\u3059\uFF08\u30B5\u30FC\u30D0\u304C\u65AD\u308A\u307E\u3059\uFF09\u3002
17
+ input,MEMO_FLAG.name,{maxChars:MEMO_MAX_CHARS,label:"\u30E1\u30E2"});if(input.flags.has(ROLE_FLAG.name)&&nonEmpty(input.flags,ROLE_FLAG.name)===void 0){throw new UsageError(`${ROLE_FLAG.name} \u306B\u7A7A\u306E\u5024\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,ROLE_HELP)}wikiRole(input);const periods=await readPeriods(input,usage);if(periods===void 0)return input;if(periods.length>0&&(input.flags.has(START_DATE_FLAG.name)||input.flags.has(END_DATE_FLAG.name))){throw new UsageError(`${PERIOD_FILE_FLAG.
18
+ name} \u306B\u671F\u9593\u304C\u3042\u308B\u3068\u304D\u306F ${START_DATE_FLAG.name} / ${END_DATE_FLAG.name} \u3092\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,"\u30B5\u30FC\u30D0\u304C\u53C2\u753B\u958B\u59CB\u65E5\u30FB\u7D42\u4E86\u65E5\u3092\u671F\u9593\u306E\u6700\u5C0F\u30FB\u6700\u5927\u3067\u4E0A\u66F8\u304D\u3059\u308B\u305F\u3081\u3001\u6307\u5B9A\u3057\u3066\u3082\u52B9\u304D\u307E\u305B\u3093\u3002")}return withResolved(input,{[PERIODS_KEY]:JSON.stringify(periods)})}function wikiRole(input){
19
+ if(!input.flags.has(WIKI_ROLE_FLAG.name))return void 0;const value=input.flags.get(WIKI_ROLE_FLAG.name);if(typeof value!=="string"||!WIKI_ROLES.includes(value)){throw new UsageError(`${WIKI_ROLE_FLAG.name} \u306F ${WIKI_ROLES.join(" / ")} \u306E\u3069\u3061\u3089\u304B\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${String(value??"")}`,WIKI_ROLE_HELP)}return value}function memberBody(input){const body={};const role=nonEmpty(input.flags,ROLE_FLAG.name);if(role!==void 0)body["role"]=role;
20
+ const wiki=wikiRole(input);if(wiki!==void 0)body["wiki_role"]=wiki;const startDate=isoDate(input,START_DATE_FLAG.name);if(startDate!==void 0)body["start_date"]=startDate;const endDate=isoDate(input,END_DATE_FLAG.name);if(endDate!==void 0)body["end_date"]=endDate;const periods=input.resolved?.[PERIODS_KEY];if(periods!==void 0)body["assignment_periods"]=JSON.parse(periods);const memo=boundedText(input,MEMO_FLAG.name,{maxChars:MEMO_MAX_CHARS,label:"\u30E1\u30E2"});if(memo!==void 0)body["memo"]=memo;
21
+ return body}function membersPath(input,suffix=""){return`/api/v2/projects/${encodeURIComponent(requireResolved(input,"projectId"))}/members${suffix}`}function text(value){return typeof value==="string"&&value.trim()!==""?value:null}async function prepareMember(input,ctx,usage){const ref=singleRef(input,{flag:USER_REF_FLAG.name,label:"\u30E1\u30F3\u30D0\u30FC",usage});const projectId=await ctx.projectId(nonEmpty(input.flags,PROJECT_FLAG.name));const rows=await ctx.resolver.memberRows(projectId);let userId;
22
+ if(ref.toLowerCase()==="me"){userId=(await ctx.resolver.currentUser()).id}else{const refs=rows.flatMap(row2=>{const id=text(row2["user_id"]);if(id===null)return[];const email=text(row2["user_email"]);return[{id,name:text(row2["user_name"])??id,code:null,...email!==null?{aliases:[email]}:{}}]});userId=(await resolveNamed(ref,refs,{flag:"<\u30E1\u30F3\u30D0\u30FC>",label:"\u30E1\u30F3\u30D0\u30FC"})).id}const row=rows.find(member=>member["user_id"]===userId);if(row===void 0){throw new UsageError("\
23
+ \u81EA\u5206\u306F\u3053\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30E1\u30F3\u30D0\u30FC\u3067\u306F\u3042\u308A\u307E\u305B\u3093","\u30E1\u30F3\u30D0\u30FC\u306F twp project members \u3067\u78BA\u304B\u3081\u3089\u308C\u307E\u3059\u3002")}return withResolved(input,{projectId,userId,memberName:`${text(row["user_name"])??userId}\uFF08${text(row["user_email"])??userId}\u30FB\u5F79\u5272 ${text(row["role"])??"\u4E0D\u660E"}\uFF09`,[MEMBER_ROW_KEY]:JSON.stringify(row)})}var targetNote=verb=>input=>[
24
+ `${verb}\u30E1\u30F3\u30D0\u30FC: ${requireResolved(input,"memberName")}`];var invalidates=(input,ctx)=>{const projectId=input.resolved?.["projectId"];if(projectId!==void 0)ctx.resolver.invalidateMembers(projectId)};var MEMBER_COLUMNS=["user_id","user_name","user_email","role","wiki_role","alias","start_date","end_date"];function memberResult(body,label){if(!isRecord(body)||body["result"]!==true||!isRecord(body["member"])){throw new ApiResponseError(`${label}\u306E\u5FDC\u7B54\u304C\u60F3\u5B9A\u306E\u5F62\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}
25
+ const rest={...body};delete rest["result"];return rest}function memberSummary(body,label){const result=memberResult(body,label);const member=result["member"];const periods=member["assignment_periods"];return{message:result["message"]??null,...pick(member,MEMBER_COLUMNS),periods:Array.isArray(periods)?periods.length:0}}function removeAck(body){if(!isRecord(body)||body["result"]!==true){throw new ApiResponseError("\u30E1\u30F3\u30D0\u30FC\u524A\u9664\u306E\u5FDC\u7B54\u304C\u60F3\u5B9A\u306E\u5F62\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}
26
+ return{result:true,message:body["message"]??null}}function describePeriod(period){const mode=period["input_mode"]===void 0||period["input_mode"]===null?"":`\u30FB${String(period["input_mode"])}`;return`${String(period["start_date"]??"?")}\u301C${String(period["end_date"]??"?")}\uFF081\u65E5 ${String(period["daily_hours"]??"?")} \u6642\u9593${mode}\u30FBid ${String(period["id"]??"?")}\uFF09`}function droppedPeriods(current,next){const keep=new Set(next.map(period=>period["id"]).filter(id=>typeof id===
27
+ "string"&&id!==""));return current.filter(isRecord).filter(period=>!(typeof period["id"]==="string"&&keep.has(period["id"])))}function periodNotes(input){const sent=input.resolved?.[PERIODS_KEY];if(sent===void 0)return[];const row=JSON.parse(requireResolved(input,MEMBER_ROW_KEY));const current=Array.isArray(row["assignment_periods"])?row["assignment_periods"]:[];const next=JSON.parse(sent);const dropped=droppedPeriods(current,next);const head=`\u7A3C\u50CD\u671F\u9593\uFF08assignment_periods\uFF09\u306F\u4E38\u3054\u3068\u7F6E\u304D\u63DB\u308F\u308A\u307E\u3059\uFF08\u9001\u308B ${next.
28
+ length} \u4EF6\u3060\u3051\u304C\u6B8B\u308A\u307E\u3059\uFF09\u3002`;if(current.length===0)return[`${head}\u4ECA\u306E\u671F\u9593\u306F\u3042\u308A\u307E\u305B\u3093\u3002`];if(dropped.length===0)return[`${head}\u4ECA\u306E\u671F\u9593\u306F\u3059\u3079\u3066\u540C\u3058 id \u3067\u9001\u3089\u308C\u307E\u3059\u3002`];return[`${head}\u4ECA\u306E\u671F\u9593\u306E\u3046\u3061\u3001\u9001\u308B\u5185\u5BB9\u306B\u540C\u3058 id \u304C\u7121\u3044 ${dropped.length} \u4EF6\u306F\u6D88\u3048\u307E\u3059\uFF08\u540C\u3058\u65E5\u4ED8\u3067\u3082 id \u304C\u7121\u3051\u308C\u3070\u65B0\u3057\u3044 id \u3067\u4F5C\u308A\
29
+ \u76F4\u3055\u308C\u307E\u3059\uFF09:`,...dropped.map(period=>` - ${describePeriod(period)}`)]}var WRITE_FLAGS=[ROLE_FLAG,WIKI_ROLE_FLAG,START_DATE_FLAG,END_DATE_FLAG,PERIOD_FILE_FLAG,MEMO_FLAG,PROJECT_FLAG,USER_REF_FLAG];var createOperation={name:"create",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306B\u30E1\u30F3\u30D0\u30FC\u3092\u8FFD\u52A0\u3059\u308B\uFF08\u7A3C\u50CD\u671F\u9593\u3064\u304D\u30FB\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u7BA1\u7406\u8005\uFF09",usage:"twp project member c\
30
+ reate <\u30E6\u30FC\u30B6\u30FC> --role <\u5F79\u5272> [--wiki-role <admin|member>] [--project <\u30B3\u30FC\u30C9|ID>] [--start-date <YYYY-MM-DD>] [--end-date <YYYY-MM-DD>] [--period-file <\u30D1\u30B9>] [--memo <\u6587\u5B57\u5217>]",description:`--role \u306F\u5FC5\u9808\u3067\u3059\u3002\u7A3C\u50CD\u671F\u9593\u3092\u5FC5\u9808\u306B\u3057\u3066\u3044\u308B\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3067\u306F --period-file \u3082\u8981\u308A\u307E\u3059\uFF08\u30B5\u30FC\u30D0\u304C\u65AD\u308A\u307E\u3059\uFF09\u3002
30
31
  \u8FFD\u52A0\u306F\u691C\u7D22\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u306E\u6A29\u9650\u66F4\u65B0\u3092\u4F34\u3044\u307E\u3059\u304C\u3001\u30B5\u30FC\u30D0\u306F\u975E\u540C\u671F\u3067\u884C\u3044\u307E\u3059\uFF08\u5FDC\u7B54\u306F\u5F85\u305F\u305A\u306B\u8FD4\u308A\u307E\u3059\uFF09\u3002
31
32
 
32
33
  ${ROLE_HELP}
33
34
 
35
+ ${WIKI_ROLE_HELP}
36
+
34
37
  ${PERIOD_HELP}
35
38
 
36
39
  ${USER_REF_HELP}`,forbidden:FORBIDDEN,rejected:roleRejected,flags:WRITE_FLAGS,async prepare(input,ctx){const usage="twp project member create help";if(!input.flags.has(ROLE_FLAG.name))throw new UsageError(`${ROLE_FLAG.name} \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044`,ROLE_HELP);const checked=await checkFields(input,usage);const ref=singleRef(input,{flag:USER_REF_FLAG.name,label:"\u30E6\u30FC\u30B6\u30FC",usage});const projectId=await ctx.projectId(nonEmpty(input.flags,PROJECT_FLAG.name));
37
- const user=await ctx.resolver.user(ref);return withResolved(checked,{projectId,userId:user.id})},plan:input=>({method:"POST",path:membersPath(input),body:{user_id:requireResolved(input,"userId"),...memberBody(input)}}),invalidates,summarize:body=>memberSummary(body,"\u30E1\u30F3\u30D0\u30FC\u8FFD\u52A0"),raw:body=>memberResult(body,"\u30E1\u30F3\u30D0\u30FC\u8FFD\u52A0")};var updateOperation={name:"update",summary:"\u30E1\u30F3\u30D0\u30FC\u306E\u5F79\u5272\u30FB\u53C2\u753B\u671F\u9593\u30FB\u7A3C\u50CD\u671F\u9593\u30FB\u30E1\u30E2\u3092\u5909\u3048\u308B\uFF08\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u7BA1\u7406\u8005\uFF09",
38
- usage:"twp project member update <\u30E1\u30F3\u30D0\u30FC> [--project <\u30B3\u30FC\u30C9|ID>] [--role <\u5F79\u5272>] [--start-date <YYYY-MM-DD>] [--end-date <YYYY-MM-DD>] [--period-file <\u30D1\u30B9>] [--memo <\u6587\u5B57\u5217>]",description:`\u6307\u5B9A\u3057\u305F\u9805\u76EE\u3060\u3051\u3092\u9001\u308A\u307E\u3059\uFF08\u6307\u5B9A\u3057\u306A\u304B\u3063\u305F\u9805\u76EE\u306F\u5909\u308F\u308A\u307E\u305B\u3093\uFF09\u3002\u5909\u66F4\u3059\u308B\u9805\u76EE\u30921\u3064\u3082\u6307\u5B9A\u3057\u306A\u3044\u3068\u30A8\u30E9\u30FC\u306B\u306A\u308A\u307E\u3059\u3002
40
+ const user=await ctx.resolver.user(ref);return withResolved(checked,{projectId,userId:user.id})},plan:input=>({method:"POST",path:membersPath(input),body:{user_id:requireResolved(input,"userId"),...memberBody(input)}}),invalidates,summarize:body=>memberSummary(body,"\u30E1\u30F3\u30D0\u30FC\u8FFD\u52A0"),raw:body=>memberResult(body,"\u30E1\u30F3\u30D0\u30FC\u8FFD\u52A0")};var updateOperation={name:"update",summary:"\u30E1\u30F3\u30D0\u30FC\u306E\u5F79\u5272\u30FBWiki \u6A29\u9650\u30FB\u53C2\u753B\u671F\u9593\u30FB\u7A3C\u50CD\u671F\u9593\u30FB\u30E1\u30E2\u3092\u5909\u3048\u308B\uFF08\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u7BA1\u7406\u8005\uFF09",
41
+ usage:"twp project member update <\u30E1\u30F3\u30D0\u30FC> [--project <\u30B3\u30FC\u30C9|ID>] [--role <\u5F79\u5272>] [--wiki-role <admin|member>] [--start-date <YYYY-MM-DD>] [--end-date <YYYY-MM-DD>] [--period-file <\u30D1\u30B9>] [--memo <\u6587\u5B57\u5217>]",description:`\u6307\u5B9A\u3057\u305F\u9805\u76EE\u3060\u3051\u3092\u9001\u308A\u307E\u3059\uFF08\u6307\u5B9A\u3057\u306A\u304B\u3063\u305F\u9805\u76EE\u306F\u5909\u308F\u308A\u307E\u305B\u3093\uFF09\u3002\u5909\u66F4\u3059\u308B\u9805\u76EE\u30921\u3064\u3082\u6307\u5B9A\u3057\u306A\u3044\u3068\u30A8\u30E9\u30FC\u306B\u306A\u308A\u307E\u3059\u3002
39
42
  \u26A0\uFE0F --period-file \u3092\u6307\u5B9A\u3059\u308B\u3068\u3001\u7A3C\u50CD\u671F\u9593\u306F\u9001\u3063\u305F\u5185\u5BB9\u3067\u4E38\u3054\u3068\u7F6E\u304D\u63DB\u308F\u308A\u307E\u3059\uFF08\u5DEE\u5206\u3067\u306F\u3042\u308A\u307E\u305B\u3093\uFF09\u3002
40
43
  \u9001\u308B\u524D\u306B\u4ECA\u306E\u671F\u9593\u3092\u8AAD\u307F\u3001\u6D88\u3048\u308B\u671F\u9593\u3092 stderr \u306B\u51FA\u3057\u307E\u3059\uFF08--dry-run \u3067\u3082\u51FA\u307E\u3059\uFF09\u3002
41
44
  \u6B8B\u3057\u305F\u3044\u671F\u9593\u306F id \u3092\u4ED8\u3051\u305F\u307E\u307E\u9001\u3063\u3066\u304F\u3060\u3055\u3044\uFF08twp project members --output json \u306E assignment_periods\uFF09\u3002
@@ -43,10 +46,12 @@ usage:"twp project member update <\u30E1\u30F3\u30D0\u30FC> [--project <\u30B3\u
43
46
 
44
47
  ${ROLE_HELP}
45
48
 
49
+ ${WIKI_ROLE_HELP}
50
+
46
51
  ${PERIOD_HELP}
47
52
 
48
- ${MEMBER_REF_HELP}`,forbidden:FORBIDDEN,rejected:roleRejected,flags:WRITE_FLAGS,async prepare(input,ctx){const usage="twp project member update help";const changed=[ROLE_FLAG,START_DATE_FLAG,END_DATE_FLAG,PERIOD_FILE_FLAG,MEMO_FLAG].some(flag=>input.flags.has(flag.name));if(!changed)throw new UsageError("\u5909\u66F4\u3059\u308B\u9805\u76EE\u30921\u3064\u4EE5\u4E0A\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",usage);return prepareMember(await checkFields(input,usage),ctx,usage)},plan:input=>({
49
- method:"PUT",path:membersPath(input,`/${userPath(input)}`),body:memberBody(input)}),plannedNotes:input=>[...targetNote("\u5909\u66F4\u3059\u308B")(input),...periodNotes(input)],invalidates,summarize:body=>memberSummary(body,"\u30E1\u30F3\u30D0\u30FC\u66F4\u65B0"),raw:body=>memberResult(body,"\u30E1\u30F3\u30D0\u30FC\u66F4\u65B0")};var deleteOperation={name:"delete",summary:"\u30E1\u30F3\u30D0\u30FC\u3092\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u304B\u3089\u5916\u3059\uFF08\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u7BA1\u7406\u8005\u30FB--yes \u304C\u8981\u308B\uFF09",
53
+ ${MEMBER_REF_HELP}`,forbidden:FORBIDDEN,rejected:roleRejected,flags:WRITE_FLAGS,async prepare(input,ctx){const usage="twp project member update help";const changed=[ROLE_FLAG,WIKI_ROLE_FLAG,START_DATE_FLAG,END_DATE_FLAG,PERIOD_FILE_FLAG,MEMO_FLAG].some(flag=>input.flags.has(flag.name));if(!changed)throw new UsageError("\u5909\u66F4\u3059\u308B\u9805\u76EE\u30921\u3064\u4EE5\u4E0A\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",usage);return prepareMember(await checkFields(input,usage),ctx,usage)},
54
+ plan:input=>({method:"PUT",path:membersPath(input,`/${userPath(input)}`),body:memberBody(input)}),plannedNotes:input=>[...targetNote("\u5909\u66F4\u3059\u308B")(input),...periodNotes(input)],invalidates,summarize:body=>memberSummary(body,"\u30E1\u30F3\u30D0\u30FC\u66F4\u65B0"),raw:body=>memberResult(body,"\u30E1\u30F3\u30D0\u30FC\u66F4\u65B0")};var deleteOperation={name:"delete",summary:"\u30E1\u30F3\u30D0\u30FC\u3092\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u304B\u3089\u5916\u3059\uFF08\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u7BA1\u7406\u8005\u30FB--yes \u304C\u8981\u308B\uFF09",
50
55
  usage:"twp project member delete <\u30E1\u30F3\u30D0\u30FC> [--project <\u30B3\u30FC\u30C9|ID>] --yes",description:"\u30E1\u30F3\u30D0\u30FC\u306E\u884C\u3092\u6D88\u3057\u307E\u3059\uFF08\u7A3C\u50CD\u671F\u9593\u30FB\u30E1\u30E2\u30FB\u5225\u540D\u3082\u6D88\u3048\u307E\u3059\u3002\u5143\u306B\u623B\u3059\u64CD\u4F5C\u306F\u3042\u308A\u307E\u305B\u3093\uFF09\u3002\n\u305D\u306E\u30E1\u30F3\u30D0\u30FC\u304C\u62C5\u5F53\u3057\u3066\u3044\u308B\u30BF\u30B9\u30AF\u306E\u62C5\u5F53\u8005\u306F\u5909\u308F\u308A\u307E\u305B\u3093\uFF08\u30B5\u30FC\u30D0\u306F\u30BF\u30B9\u30AF\u306B\u89E6\u308C\u307E\u305B\u3093\uFF09\u3002\n\u53C2\u753B\u3092\u7D42\u3048\u308B\u3060\u3051\u306A\u3089\u3001\u5C65\u6B74\u304C\u6B8B\u308B twp project member update <\u30E1\u30F3\u30D0\u30FC> --end-date <YYYY-MM-DD> \u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\u3002\n\n"+
51
56
  MEMBER_REF_HELP,destructive:true,forbidden:FORBIDDEN,flags:[PROJECT_FLAG,USER_REF_FLAG],prepare:(input,ctx)=>prepareMember(input,ctx,"twp project member delete help"),plan:input=>({method:"DELETE",path:membersPath(input,`/${userPath(input)}`)}),plannedNotes:input=>[`\u5916\u3059\u30E1\u30F3\u30D0\u30FC: ${requireResolved(input,"memberName")}\u3002\u62C5\u5F53\u4E2D\u306E\u30BF\u30B9\u30AF\u306E\u62C5\u5F53\u8005\u306F\u5909\u308F\u308A\u307E\u305B\u3093\u3002`],invalidates,summarize:removeAck,raw:removeAck};
52
57
  function roleChange(name){const promote=name==="promote";const label=promote?"\u7BA1\u7406\u8005\u3078\u306E\u6607\u683C":"\u30E1\u30F3\u30D0\u30FC\u3078\u306E\u964D\u683C";return{name,summary:promote?"\u30E1\u30F3\u30D0\u30FC\u3092\u7BA1\u7406\u8005\uFF08manager\uFF09\u306B\u6607\u683C\u3059\u308B\uFF08\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u7BA1\u7406\u8005\uFF09":"\u7BA1\u7406\u8005\uFF08manager\uFF09\u3092\u30E1\u30F3\u30D0\u30FC\u306B\u964D\u683C\u3059\u308B\uFF08\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u7BA1\u7406\u8005\uFF09",
@@ -57,7 +62,7 @@ T",path:membersPath(input,`/${userPath(input,`/${name}`)}`)}),plannedNotes:targe
57
62
  <\u30B3\u30FC\u30C9|ID>]",description:"\u81EA\u5206\uFF08\u30ED\u30B0\u30A4\u30F3\u4E2D\u306E\u30E6\u30FC\u30B6\u30FC\uFF09\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5185\u306E\u5225\u540D\u3092\u8A2D\u5B9A\u3057\u307E\u3059\u3002\u30E1\u30F3\u30D0\u30FC\u306A\u3089\u8AB0\u3067\u3082\u4F7F\u3048\u307E\u3059\u3002\n\u5225\u540D\u306F twp task \u306E --assignee \u3067\u30E1\u30F3\u30D0\u30FC\u3092\u6307\u5B9A\u3059\u308B\u3068\u304D\u306B\u4F7F\u3048\u307E\u3059\uFF08twp project member \u306E\u5BFE\u8C61\u6307\u5B9A\u306B\u306F\u4F7F\u3048\u307E\u305B\u3093\uFF09\u3002",
58
63
  flags:[CLEAR_FLAG,PROJECT_FLAG],async prepare(input,ctx){const usage="twp project member alias help";if(input.args.length>1)throw new UsageError(`\u53D7\u3051\u53D6\u308C\u308B\u5225\u540D\u306F1\u3064\u3060\u3051\u3067\u3059: ${input.args.slice(1).join(" ")}`,usage);const alias=input.args[0];if(input.flags.has(CLEAR_FLAG.name)&&alias!==void 0)throw new UsageError(`\u5225\u540D\u3068 ${CLEAR_FLAG.name} \u306F\u540C\u6642\u306B\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,usage);if(!input.flags.has(
59
64
  CLEAR_FLAG.name)){if(alias===void 0||alias.trim()==="")throw new UsageError(`\u5225\u540D\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u6D88\u3059\u306A\u3089 ${CLEAR_FLAG.name}\uFF09`,usage);if([...alias].length>ALIAS_MAX_CHARS)throw new UsageError(`\u5225\u540D\u304C\u9577\u3059\u304E\u307E\u3059\uFF08${[...alias].length} \u6587\u5B57\u30FB\u4E0A\u9650 ${ALIAS_MAX_CHARS} \u6587\u5B57\uFF09`,usage)}return withResolved(input,{projectId:await ctx.projectId(nonEmpty(input.flags,PROJECT_FLAG.
60
- name))})},plan:input=>({method:"PATCH",path:membersPath(input,"/me/alias"),body:{alias:input.flags.has(CLEAR_FLAG.name)?null:input.args[0]}}),invalidates,summarize:body=>memberSummary(body,"\u5225\u540D\u306E\u66F4\u65B0"),raw:body=>memberResult(body,"\u5225\u540D\u306E\u66F4\u65B0")};var projectMemberResource={name:"member",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30E1\u30F3\u30D0\u30FC\u306E\u30A2\u30B5\u30A4\u30F3\uFF08\u8FFD\u52A0\u30FB\u5F79\u5272\u3068\u7A3C\u50CD\u671F\u9593\u306E\u5909\u66F4\u30FB\u524A\u9664\u30FB\u6607\u683C\u30FB\u964D\u683C\u30FB\u81EA\u5206\u306E\u5225\u540D\uFF09",
65
+ name))})},plan:input=>({method:"PATCH",path:membersPath(input,"/me/alias"),body:{alias:input.flags.has(CLEAR_FLAG.name)?null:input.args[0]}}),invalidates,summarize:body=>memberSummary(body,"\u5225\u540D\u306E\u66F4\u65B0"),raw:body=>memberResult(body,"\u5225\u540D\u306E\u66F4\u65B0")};var projectMemberResource={name:"member",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30E1\u30F3\u30D0\u30FC\u306E\u30A2\u30B5\u30A4\u30F3\uFF08\u8FFD\u52A0\u30FB\u5F79\u5272\u3068 Wiki \u6A29\u9650\u3068\u7A3C\u50CD\u671F\u9593\u306E\u5909\u66F4\u30FB\u524A\u9664\u30FB\u6607\u683C\u30FB\u964D\u683C\u30FB\u81EA\u5206\u306E\u5225\u540D\uFF09",
61
66
  operations:[createOperation,updateOperation,deleteOperation,roleChange("promote"),roleChange("demote"),aliasOperation]};async function projectArg(input,ctx,usage){const[ref,...rest]=input.args;if(rest.length>0){throw new UsageError(`\u53D7\u3051\u53D6\u308C\u308B\u5F15\u6570\u306F\u30D7\u30ED\u30B8\u30A7\u30AF\u30C81\u3064\u3060\u3051\u3067\u3059: ${rest.join(" ")}`,usage)}return withResolved(input,{projectId:await ctx.projectId(ref)})}function projectPath(input,suffix){return`/api/v2/projects/${encodeURIComponent(requireResolved(input,"projectId"))}/${suffix}`}function managerOnly(what){return body=>body?.error===
62
67
  "permission_denied"&&(body.error_description??"").includes("\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u7BA1\u7406\u8005")?`\u3053\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E${what}\u3092\u8AAD\u3080\u6A29\u9650\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u7BA1\u7406\u8005\uFF08manager\uFF09\u304B\u30C6\u30CA\u30F3\u30C8\u7BA1\u7406\u8005\u3060\u3051\u304C\u8AAD\u3081\u307E\u3059\u3002`:void 0}var RISK_USAGE="twp project risk [<ID|\u30B3\u30FC\u30C9>]";function riskData(body){
63
68
  const data=dataOf(body,"\u30EA\u30B9\u30AF\u5206\u6790");if(!isRecord(data))throw new ApiResponseError("\u30EA\u30B9\u30AF\u5206\u6790\u306E\u5FDC\u7B54\u306E data \u304C\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002");return data}function riskRows(body){const data=riskData(body);const rows=[];for(const[key,level]of[["high_risk_tasks","high"],["medium_risk_tasks","medium"]]){for(const task of listIn(
@@ -137,8 +142,8 @@ projectOf(body,"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u66F4\u65B0"),COLUMNS
137
142
  const current=isRecord(body)&&typeof body["current_code"]==="string"?body["current_code"]:"\uFF08\u4E0D\u660E\uFF09";if(!changeable){const max=isRecord(body)&&typeof body["max_tasks"]==="number"?`\uFF08\u4E0A\u9650 ${body["max_tasks"]} \u4EF6\uFF09`:"";throw new UsageError(`\u3053\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306F\u30BF\u30B9\u30AF\u304C ${count} \u4EF6\u3042\u308B\u305F\u3081\u3001\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30B3\u30FC\u30C9\u3092\u5909\u66F4\u3067\u304D\u307E\u305B\u3093${max}\
138
143
  \u3002`,"\u30B3\u30FC\u30C9\u3092\u5909\u3048\u305A\u306B\u3001\u540D\u524D\uFF08--name\uFF09\u3060\u3051\u3092\u5909\u3048\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u3059\u3002")}if(current===next)return{notes:[`\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30B3\u30FC\u30C9\u306F ${next} \u306E\u307E\u307E\u3067\u3059\uFF08\u30BF\u30B9\u30AF\u30AD\u30FC\u306F\u5909\u308F\u308A\u307E\u305B\u3093\uFF09\u3002`],warnings:[]};if(count===0)return{notes:[`\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30B3\u30FC\u30C9\u3092 ${current}\
139
144
  \u304B\u3089 ${next} \u306B\u5909\u3048\u307E\u3059\uFF08\u30BF\u30B9\u30AF\u304C\u7121\u3044\u305F\u3081\u3001\u66F8\u304D\u63DB\u308F\u308B\u30AD\u30FC\u306F\u3042\u308A\u307E\u305B\u3093\uFF09\u3002`],warnings:[]};return{notes:[],warnings:[`\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30B3\u30FC\u30C9\u3092 ${current} \u304B\u3089 ${next} \u306B\u5909\u3048\u308B\u3068\u3001\u3053\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30BF\u30B9\u30AF ${count} \u4EF6\u306E\u30AD\u30FC\u304C\u66F8\u304D\u63DB\u308F\u308A\u307E\u3059\uFF08${current}\
140
- -1 \u2192 ${next}-1\uFF09\u3002\u5916\u90E8\u306B\u8CBC\u3063\u305F\u30AD\u30FC\u3084\u30D6\u30E9\u30F3\u30C1\u540D\u306F\u8FFD\u968F\u3057\u307E\u305B\u3093\u3002`]}}var projectWriteOperations=[createOperation2,updateOperation2];var LIST_COLUMNS=["id","code","name","status","effective_status"];var GET_COLUMNS=["id","code","name","status","effective_status","display_flg","closed_flg","task_enabled_flg","wiki_default_content_format","start_date","end_date","created_at","updated_at"];var MEMBER_COLUMNS2=["user_id","user_name","user_email","role","alias","department_name"];function memberItems(body){const list=isRecord(body)?body["list"]:void 0;if(!Array.isArray(list)){throw new ApiResponseError("\u30E1\u30F3\u30D0\u30FC\u4E00\u89A7\u306E\u5FDC\u7B54\u306B list \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\
141
- \u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return list}var listPaging=envelopePaging({label:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u4E00\u89A7"});function listItems(body){return listPaging.items(body)}function projectObject(body){const project=isRecord(body)?body["project"]:void 0;if(!isRecord(project)){throw new ApiResponseError("\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u8A73\u7D30\u306E\u5FDC\u7B54\u306B project \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}
145
+ -1 \u2192 ${next}-1\uFF09\u3002\u5916\u90E8\u306B\u8CBC\u3063\u305F\u30AD\u30FC\u3084\u30D6\u30E9\u30F3\u30C1\u540D\u306F\u8FFD\u968F\u3057\u307E\u305B\u3093\u3002`]}}var projectWriteOperations=[createOperation2,updateOperation2];var LIST_COLUMNS=["id","code","name","status","effective_status"];var GET_COLUMNS=["id","code","name","status","effective_status","display_flg","closed_flg","task_enabled_flg","wiki_default_content_format","start_date","end_date","created_at","updated_at"];var MEMBER_COLUMNS2=["user_id","user_name","user_email","role","wiki_role","alias","department_name"];function memberItems(body){const list=isRecord(body)?body["list"]:void 0;if(!Array.isArray(list)){throw new ApiResponseError("\u30E1\u30F3\u30D0\u30FC\u4E00\u89A7\u306E\u5FDC\u7B54\u306B list\
146
+ \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return list}var listPaging=envelopePaging({label:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u4E00\u89A7"});function listItems(body){return listPaging.items(body)}function projectObject(body){const project=isRecord(body)?body["project"]:void 0;if(!isRecord(project)){throw new ApiResponseError("\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u8A73\u7D30\u306E\u5FDC\u7B54\u306B project \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}
142
147
  return project}var MANHOURS_USAGE="twp project manhours [<ID|\u30B3\u30FC\u30C9>] [--from <YYYY-MM-DD>] [--to <YYYY-MM-DD>]";var projectDomain={name:"project",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u4E00\u89A7\u30FB\u8A73\u7D30\u30FB\u4F5C\u6210\u30FB\u66F4\u65B0\u30FB\u30E1\u30F3\u30D0\u30FC\u306E\u30A2\u30B5\u30A4\u30F3\u30FB\u5DE5\u6570\u30FB\u30EA\u30B9\u30AF\u5206\u6790\u30FB\u53CE\u652F\u5206\u6790\u30FB\u5DE5\u7A0B",operations:[{name:"list",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u4E00\u89A7\u3059\u308B",
143
148
  usage:"twp project list [--all] [--limit <\u4EF6\u6570>] [--cursor <\u30AB\u30FC\u30BD\u30EB>] [--keyword <\u8A9E>] [--status <\u72B6\u614B>]",description:"--output json \u306F API \u304C\u8FD4\u3059\u5168\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u51FA\u3057\u307E\u3059\u3002\n--output table / text / tsv \u306F\u8981\u7D04\u5217\uFF08id / code / name / status / effective_status\uFF09\u3067\u3059\u3002\n\u6B32\u3057\u3044\u5217\u3060\u3051\u3092\u6A5F\u68B0\u51E6\u7406\u3057\u305F\u3044\u3068\u304D\u306F --query \u3067\u9078\u3093\u3067\u304F\u3060\u3055\u3044\uFF08--query \u306F\u751F\u30C7\u30FC\u30BF\u306B\u5BFE\u3057\u3066\u8A55\u4FA1\u3055\u308C\u307E\u3059\uFF09\u3002\n\n"+
144
149
  LIST_PAGING_HELP,flags:[...LIST_FLAGS,{name:"--keyword",summary:"\u30B3\u30FC\u30C9\u30FB\u540D\u79F0\u306E\u90E8\u5206\u4E00\u81F4\u3067\u7D5E\u308A\u8FBC\u3080",takesValue:true,placeholder:"<\u8A9E>"},{name:"--status",summary:"\u30B9\u30C6\u30FC\u30BF\u30B9\u3067\u7D5E\u308A\u8FBC\u3080\uFF08\u4F8B: active\uFF09",takesValue:true,placeholder:"<\u72B6\u614B>"}],paging:listPaging,plan(input){if(input.args.length>0){throw new UsageError(`list \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{createRuntime}from"./chunk-JQBXLZTJ.js";import{findExecutable}from"./chunk-PMOUHEJQ.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import{describeAutoUpdate}from"./chunk-CH6QU76P.js";import{PACKAGE_NAME,UPDATE_COMMAND,compareVersionCores,isBelowMinSupported,parseVersionCore}from"./chunk-DXXFUNYN.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import{execFile}from"child_process";import fs from"fs";import path from"path";function resolveNpmCommand(deps={}){const platform=deps.platform??process.platform;const env=deps.env??process.env;const npmPath=(deps.find??(name=>findExecutable(name,{env,platform})))("npm");if(npmPath===null)return null;if(platform!=="win32")return{file:npmPath,prefix:[]};if(/\.exe$/i.test(npmPath))return{file:npmPath,prefix:[]};const cliJs=path.win32.join(path.win32.dirname(npmPath),"node_modules","npm","bin","npm-cli.js");return(deps.exists??fs.existsSync)(cliJs)?{file:deps.nodePath??process.
3
+ import{createRuntime}from"./chunk-TVTJRNUC.js";import{findExecutable}from"./chunk-PMOUHEJQ.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import{describeAutoUpdate}from"./chunk-CH6QU76P.js";import{PACKAGE_NAME,UPDATE_COMMAND,compareVersionCores,isBelowMinSupported,parseVersionCore}from"./chunk-DXXFUNYN.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import{execFile}from"child_process";import fs from"fs";import path from"path";function resolveNpmCommand(deps={}){const platform=deps.platform??process.platform;const env=deps.env??process.env;const npmPath=(deps.find??(name=>findExecutable(name,{env,platform})))("npm");if(npmPath===null)return null;if(platform!=="win32")return{file:npmPath,prefix:[]};if(/\.exe$/i.test(npmPath))return{file:npmPath,prefix:[]};const cliJs=path.win32.join(path.win32.dirname(npmPath),"node_modules","npm","bin","npm-cli.js");return(deps.exists??fs.existsSync)(cliJs)?{file:deps.nodePath??process.
4
4
  execPath,prefix:[cliJs]}:null}var DEFAULT_REGISTRY="https://registry.npmjs.org";function registryBase(env=process.env){const configured=env["npm_config_registry"]?.trim();if(configured===void 0||configured==="")return DEFAULT_REGISTRY;try{const url=new URL(configured);if(url.protocol!=="https:"&&url.protocol!=="http:")return DEFAULT_REGISTRY}catch{return DEFAULT_REGISTRY}return configured.replace(/\/+$/,"")}async function fetchFromRegistry(fetchImpl=httpFetch,env=process.env){const url=`${registryBase(env)}/${PACKAGE_NAME.replace(
5
5
  "/","%2f")}`;const res=await fetchImpl(url,{headers:{Accept:"application/vnd.npm.install-v1+json"},signal:AbortSignal.timeout(5e3)});if(!res.ok){throw new Error(`registry \u304C ${res.status} \u3092\u8FD4\u3057\u307E\u3057\u305F`)}const body=await res.json();const latest=body["dist-tags"]?.latest;if(typeof latest!=="string"||parseVersionCore(latest)===null){throw new Error("registry \u306E\u5FDC\u7B54\u306B dist-tags.latest \u304C\u3042\u308A\u307E\u305B\u3093")}return{version:latest.trim(),source:"\
6
6
  registry"}}async function fetchFromNpmCli(){const npm=resolveNpmCommand();if(npm===null){throw new Error("npm \u304C PATH \u306B\u898B\u3064\u304B\u308A\u307E\u305B\u3093")}const stdout=await new Promise((resolve,reject)=>{execFile(npm.file,[...npm.prefix,"view",PACKAGE_NAME,"version","--json"],{timeout:15e3,windowsHide:true},(error,out)=>error?reject(error):resolve(out))});const parsed=JSON.parse(stdout.trim());const latest=typeof parsed==="string"?parsed:null;if(latest===null||parseVersionCore(
@@ -1,7 +1,7 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{CommandModelMissingError,MAX_REPORTED_VIOLATIONS,loadCommandModelDomain,loadCommandModelIndex,validateBody,validateQuery}from"./chunk-NZ7WI4RZ.js";import{isForceOnly,killProcessTree,system32}from"./chunk-N2UVRM3Z.js";import{redactSecretValues}from"./chunk-LDBYJPRD.js";import{isSafePathSegment}from"./chunk-HVZUXLQ4.js";import{ApiError,TwpApiClient,appendQuery}from"./chunk-JA5A6UJ2.js";import{DEFAULT_MAX_TOKENS,emptyUsage}from"./chunk-JQBXLZTJ.js";import{
4
- isPrivateTwpHome,isTrustworthyCacheFile,writePrivateFileAtomic}from"./chunk-D233KKXW.js";import{findExecutable,isWindowsDriveAbsolute}from"./chunk-PMOUHEJQ.js";import{AuthSession,NotLoggedInError,SessionExpiredError,withFileLock}from"./chunk-XNLIEUAW.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import{configReadDirs,ensureTwpHome,twpHomeDir}from"./chunk-RZVI6PMW.js";import{MODES,applyPermissionMode,checkPermission,isModeId,setActiveModes}from"./chunk-2LOT54OO.js";
3
+ import{CommandModelMissingError,MAX_REPORTED_VIOLATIONS,loadCommandModelDomain,loadCommandModelIndex,validateBody,validateQuery}from"./chunk-NZ7WI4RZ.js";import{isForceOnly,killProcessTree,system32}from"./chunk-N2UVRM3Z.js";import{redactSecretValues}from"./chunk-LDBYJPRD.js";import{isSafePathSegment}from"./chunk-HVZUXLQ4.js";import{ApiError,TwpApiClient,appendQuery}from"./chunk-JA5A6UJ2.js";import{DEFAULT_MAX_TOKENS,effectiveModelSpec,emptyUsage}from"./chunk-TVTJRNUC.js";
4
+ import{isPrivateTwpHome,isTrustworthyCacheFile,writePrivateFileAtomic}from"./chunk-D233KKXW.js";import{findExecutable,isWindowsDriveAbsolute}from"./chunk-PMOUHEJQ.js";import{AuthSession,NotLoggedInError,SessionExpiredError,withFileLock}from"./chunk-XNLIEUAW.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import{configReadDirs,ensureTwpHome,twpHomeDir}from"./chunk-RZVI6PMW.js";import{MODES,applyPermissionMode,checkPermission,isModeId,setActiveModes}from"./chunk-2LOT54OO.js";
5
5
  import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import fs2 from"fs";import path3 from"path";import os2 from"os";import{realpathSync}from"fs";import{homedir}from"os";import{dirname,isAbsolute,relative,resolve,sep}from"path";var PathDeniedError=class extends Error{constructor(message){super(message);this.name="PathDeniedError"}};function resolveToolPath(input,cwd,home=homedir()){if(typeof input!=="string"||input.trim()===""){throw new PathDeniedError("path must be a non-empty string")}const expanded=expandHome(input,home);const abs=isAbsolute(expanded)?resolve(expanded):resolve(cwd,expanded);const root=realOrSelf(resolve(cwd));assertInside(abs,resolve(cwd),abs);assertNotSecret(abs,home);const real=realOrSelf(abs);if(real!==
6
6
  abs){assertInside(real,root,abs);assertNotSecret(real,home)}return abs}function realToolPath(input,cwd,home=homedir()){return realOrSelf(resolveToolPath(input,cwd,home))}function assertInside(target,root,reported){const rel=relative(root,target);const outside=rel===".."||rel.startsWith(`..${sep}`)||isAbsolute(rel);if(outside){throw new PathDeniedError(`path escapes the working directory (${reported}). Only paths under ${root} can be accessed.`)}}function realOrSelf(target){let current=target;const rest=[];
7
7
  for(;;){try{const real=realpathSync(current);return rest.length===0?real:resolve(real,...rest.reverse())}catch{const parent=dirname(current);if(parent===current)return target;rest.push(current.slice(parent.length+1));current=parent}}}function assertNotSecret(absPath,home=homedir(),env=process.env){const reason=secretReason(absPath,home,env);if(reason!==null)throw new PathDeniedError(`refusing to access ${absPath}: ${reason}`)}function secretReason(absPath,_home=homedir(),env=process.env){const lower=absPath.
@@ -97,14 +97,15 @@ return`\u30EB\u30FC\u30EB ${verdict.rule??""}`}}function safePreview(tool,input)
97
97
  "- \u30C4\u30FC\u30EB\u304C\u62D2\u5426\u3055\u308C\u305F\uFF08permission denied\uFF09\u3068\u304D\u306F\u3001\u540C\u3058\u547C\u3073\u51FA\u3057\u3092\u7E70\u308A\u8FD4\u3055\u305A\u3001\u4F55\u3092\u3057\u305F\u3044\u306E\u304B\u3092\u5229\u7528\u8005\u306B\u8AAC\u660E\u3057\u3066\u304F\u3060\u3055\u3044\u3002**\u305F\u3060\u3057\u62D2\u5426\u306E\u7D50\u679C\u306B\u5229\u7528\u8005\u306E\u4EE3\u308F\u308A\u306E\u6307\u793A\uFF08asked you to do this instead\uFF09\u304C\u4ED8\u3044\u3066\u3044\u308C\u3070\u3001\u8AAC\u660E\u3067\u306F\u306A\u304F\u305D\u306E\u6307\u793A\u306B\u5F93\u3063\u3066\u304F\u3060\u3055\u3044**"];
98
98
  return[`\u3042\u306A\u305F\u306F TWP\uFF08Tocca Working Platform\uFF09\u306E CLI\u300Ctwp\u300D${ctx.cliVersion} \u306E\u4E2D\u3067\u52D5\u304F\u30A2\u30B7\u30B9\u30BF\u30F3\u30C8\u3067\u3059\u3002`,"\u51FA\u529B\u306F\u7AEF\u672B\u306B\u8868\u793A\u3055\u308C\u307E\u3059\u3002\u65E5\u672C\u8A9E\u3067\u3001\u7D50\u8AD6\u3092\u5148\u306B\u3001\u7C21\u6F54\u306B\u7B54\u3048\u3066\u304F\u3060\u3055\u3044\u3002","","## \u3044\u307E\u3067\u304D\u308B\u3053\u3068\u30FB\u3067\u304D\u306A\u3044\u3053\u3068",
99
99
  "",...capability,"- \u898B\u3066\u3044\u306A\u3044\u30D5\u30A1\u30A4\u30EB\u306E\u5185\u5BB9\u3084\u5B9F\u884C\u3057\u3066\u3044\u306A\u3044\u30B3\u30DE\u30F3\u30C9\u306E\u7D50\u679C\u3092\u3001\u898B\u305F\u30FB\u5B9F\u884C\u3057\u305F\u304B\u306E\u3088\u3046\u306B\u66F8\u304B\u306A\u3044\u3067\u304F\u3060\u3055\u3044","","## \u5229\u7528\u8005\u306E\u74B0\u5883","",`- \u4F5C\u696D\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA: ${ctx.cwd}`,...ctx.branch?[`- git \u30D6\u30E9\u30F3\u30C1: ${ctx.branch}`]:[],
100
- `- \u30E2\u30FC\u30C9: ${ctx.modeLabel}\uFF08\u30E2\u30FC\u30C9\u304C\u30C4\u30FC\u30EB\u306E\u8A31\u53EF\u7BC4\u56F2\u3092\u6C7A\u3081\u307E\u3059\uFF09`,...ctx.modePrompt!==void 0&&ctx.modePrompt.trim()!==""?["","## \u3053\u306E\u30E2\u30FC\u30C9\u306E\u6307\u793A","",ctx.modePrompt.trim()]:[]].join("\n")}async function runTurn(client,context,request){const maxTokens=request.maxTokens??DEFAULT_MAX_TOKENS;const maxSteps=request.maxSteps??DEFAULT_MAX_STEPS;const tools=request.tools??[];const wire=tools.
101
- map(toWireTool);context.addUser(request.input);let droppedMessages=context.trimToFit(maxTokens);const totals=emptyUsage();let lastText="";let toolCalls=0;for(let step=0;step<maxSteps;step++){let outcome;try{outcome=await client.stream({model:request.model,maxTokens,...request.system!==void 0?{system:request.system}:{},...wire.length>0?{tools:wire}:{},messages:context.history()},{onTextDelta:request.onTextDelta,...request.signal?{signal:request.signal}:{}})}catch(err){context.completeTurn("");err.
102
- usage=totals;throw err}add(totals,outcome.usage);context.applyUsage(outcome.usage);lastText=outcome.text;if(outcome.aborted||outcome.upstreamError!==null||outcome.toolUses.length===0){const kept=context.completeTurn(outcome.text);return{text:outcome.text,usage:totals,aborted:outcome.aborted,upstreamError:outcome.upstreamError,stopReason:outcome.stopReason,droppedMessages,emptyResponse:!kept,toolCalls,maxStepsReached:false}}const results=await runToolUses(outcome.toolUses,tools,request);toolCalls+=
103
- results.length;context.addToolExchange(outcome.text,outcome.toolUses,results);if(request.signal?.aborted===true){return{text:outcome.text,usage:totals,aborted:true,upstreamError:null,stopReason:outcome.stopReason,droppedMessages,emptyResponse:false,toolCalls,maxStepsReached:false}}droppedMessages+=context.trimToFit(maxTokens)}return{text:lastText,usage:totals,aborted:false,upstreamError:null,stopReason:"max_steps",droppedMessages,emptyResponse:false,toolCalls,maxStepsReached:true}}async function runToolUses(toolUses,tools,request){
104
- const results=[];for(const call of toolUses){request.onToolUse?.({name:call.name,input:call.input});const result=await runOne(call,tools,request);request.onToolResult?.({name:call.name,input:call.input},result);results.push({type:"tool_result",tool_use_id:call.id,content:result.content===""?"(no output)":result.content,...result.isError===true?{is_error:true}:{}})}return results}async function runOne(call,tools,request){const auditUnexecuted=(reasonCode,reason)=>{if(!request.execute)return;request.
105
- execute.audit.record({event:"decision",tool:call.name,risk:"unknown",decision:"deny",reasonCode,reason,mode:request.execute.mode.id,rawInput:typeof call.input==="object"&&call.input!==null?call.input:{},callId:call.id})};if(request.signal?.aborted===true){auditUnexecuted("interrupted","\u5229\u7528\u8005\u304C\u4E2D\u65AD\u3057\u305F\u305F\u3081\u5B9F\u884C\u3057\u306A\u3044");return{content:"interrupted by the user before this tool ran",isError:true,summary:`${call.name} \xB7 \u4E2D\u65AD`}}const tool=tools.
106
- find(t=>t.name===call.name);if(!tool){auditUnexecuted("unknown_tool","\u30E2\u30C7\u30EB\u306B\u6E21\u3057\u3066\u3044\u306A\u3044\u30C4\u30FC\u30EB\u540D\uFF08\u5E38\u99D0\u30BB\u30C3\u30C8\u306B\u7121\u3044\uFF09");return{content:`Unknown tool: ${call.name}. Available tools: ${tools.map(t=>t.name).join(", ")||"(none)"}`,isError:true,summary:`${call.name} \xB7 \u672A\u77E5\u306E\u30C4\u30FC\u30EB`}}if(!request.execute){return{content:`Tool ${call.name} cannot run: this session has no tool execu\
107
- tion context.`,isError:true,summary:`${call.name} \xB7 \u5B9F\u884C\u74B0\u5883\u306A\u3057`}}return executeTool(tool,call.input,{...request.execute,ctx:{...request.execute.ctx,...request.signal?{signal:request.signal}:{}}},call.id)}function add(target,source){target.inputTokens+=source.inputTokens;target.cacheReadTokens+=source.cacheReadTokens;target.cacheWriteTokens+=source.cacheWriteTokens;target.outputTokens+=source.outputTokens}import fs3 from"fs";import path4 from"path";var KNOWN_KEYS=new Set(["id","label","color","description","tools","permissions"]);var NOT_YET_KEYS=new Map([["commands","commands \u306F\u30E2\u30FC\u30C9\u5B9A\u7FA9\u3067\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093\uFF08\u30B3\u30DE\u30F3\u30C9\u3092\u51FA\u3059\u30E2\u30FC\u30C9\u306F\u3001\u30B3\u30DE\u30F3\u30C9\u5B9A\u7FA9 .twp/commands/*.md \u306E front-matter \u306E mode: \u3067\u6307\u5B9A\u3057\u307E\u3059\uFF09"]]);var DECISIONS=new Set(["allow","ask","deny"]);var COLORS=new Set(
100
+ `- \u30E2\u30FC\u30C9: ${ctx.modeLabel}\uFF08\u30E2\u30FC\u30C9\u304C\u30C4\u30FC\u30EB\u306E\u8A31\u53EF\u7BC4\u56F2\u3092\u6C7A\u3081\u307E\u3059\uFF09`,...ctx.modePrompt!==void 0&&ctx.modePrompt.trim()!==""?["","## \u3053\u306E\u30E2\u30FC\u30C9\u306E\u6307\u793A","",ctx.modePrompt.trim()]:[]].join("\n")}async function runTurn(client,context,request){const spec=request.spec??effectiveModelSpec(void 0);const maxTokens=turnMaxTokens(request.maxTokens??DEFAULT_MAX_TOKENS,spec);const maxSteps=request.
101
+ maxSteps??DEFAULT_MAX_STEPS;const tools=spec.tools?request.tools??[]:[];const wire=tools.map(toWireTool);context.setContextWindow(spec.contextWindow);context.addUser(request.input);let droppedMessages=context.trimToFit(maxTokens);const totals=emptyUsage();let lastText="";let toolCalls=0;for(let step=0;step<maxSteps;step++){let outcome;try{outcome=await client.stream({model:request.model,maxTokens,protocol:spec.protocol,promptCache:spec.promptCache,...request.system!==void 0?{system:request.system}:
102
+ {},...wire.length>0?{tools:wire}:{},messages:context.history()},{onTextDelta:request.onTextDelta,...request.signal?{signal:request.signal}:{}})}catch(err){context.completeTurn("");err.usage=totals;throw err}add(totals,outcome.usage);context.applyUsage(outcome.usage);lastText=outcome.text;if(outcome.aborted||outcome.upstreamError!==null||outcome.toolUses.length===0){const kept=context.completeTurn(outcome.text);return{text:outcome.text,usage:totals,aborted:outcome.aborted,upstreamError:outcome.upstreamError,
103
+ stopReason:outcome.stopReason,droppedMessages,emptyResponse:!kept,toolCalls,maxStepsReached:false}}const results=await runToolUses(outcome.toolUses,tools,request);toolCalls+=results.length;context.addToolExchange(outcome.text,outcome.toolUses,results);if(request.signal?.aborted===true){return{text:outcome.text,usage:totals,aborted:true,upstreamError:null,stopReason:outcome.stopReason,droppedMessages,emptyResponse:false,toolCalls,maxStepsReached:false}}droppedMessages+=context.trimToFit(maxTokens)}
104
+ return{text:lastText,usage:totals,aborted:false,upstreamError:null,stopReason:"max_steps",droppedMessages,emptyResponse:false,toolCalls,maxStepsReached:true}}async function runToolUses(toolUses,tools,request){const results=[];for(const call of toolUses){request.onToolUse?.({name:call.name,input:call.input});const result=await runOne(call,tools,request);request.onToolResult?.({name:call.name,input:call.input},result);results.push({type:"tool_result",tool_use_id:call.id,content:result.content===""?
105
+ "(no output)":result.content,...result.isError===true?{is_error:true}:{}})}return results}async function runOne(call,tools,request){const auditUnexecuted=(reasonCode,reason)=>{if(!request.execute)return;request.execute.audit.record({event:"decision",tool:call.name,risk:"unknown",decision:"deny",reasonCode,reason,mode:request.execute.mode.id,rawInput:typeof call.input==="object"&&call.input!==null?call.input:{},callId:call.id})};if(request.signal?.aborted===true){auditUnexecuted("interrupted","\u5229\u7528\
106
+ \u8005\u304C\u4E2D\u65AD\u3057\u305F\u305F\u3081\u5B9F\u884C\u3057\u306A\u3044");return{content:"interrupted by the user before this tool ran",isError:true,summary:`${call.name} \xB7 \u4E2D\u65AD`}}const tool=tools.find(t=>t.name===call.name);if(!tool){auditUnexecuted("unknown_tool","\u30E2\u30C7\u30EB\u306B\u6E21\u3057\u3066\u3044\u306A\u3044\u30C4\u30FC\u30EB\u540D\uFF08\u5E38\u99D0\u30BB\u30C3\u30C8\u306B\u7121\u3044\uFF09");return{content:`Unknown tool: ${call.name}. Available tools: ${tools.
107
+ map(t=>t.name).join(", ")||"(none)"}`,isError:true,summary:`${call.name} \xB7 \u672A\u77E5\u306E\u30C4\u30FC\u30EB`}}if(!request.execute){return{content:`Tool ${call.name} cannot run: this session has no tool execution context.`,isError:true,summary:`${call.name} \xB7 \u5B9F\u884C\u74B0\u5883\u306A\u3057`}}return executeTool(tool,call.input,{...request.execute,ctx:{...request.execute.ctx,...request.signal?{signal:request.signal}:{}}},call.id)}function turnMaxTokens(requested,spec){let limit=requested;
108
+ if(spec.maxOutputTokens!==null)limit=Math.min(limit,spec.maxOutputTokens);if(spec.contextWindow!==null)limit=Math.min(limit,Math.floor(spec.contextWindow/4));return Math.max(1,limit)}function add(target,source){target.inputTokens+=source.inputTokens;target.cacheReadTokens+=source.cacheReadTokens;target.cacheWriteTokens+=source.cacheWriteTokens;target.outputTokens+=source.outputTokens}import fs3 from"fs";import path4 from"path";var KNOWN_KEYS=new Set(["id","label","color","description","tools","permissions"]);var NOT_YET_KEYS=new Map([["commands","commands \u306F\u30E2\u30FC\u30C9\u5B9A\u7FA9\u3067\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093\uFF08\u30B3\u30DE\u30F3\u30C9\u3092\u51FA\u3059\u30E2\u30FC\u30C9\u306F\u3001\u30B3\u30DE\u30F3\u30C9\u5B9A\u7FA9 .twp/commands/*.md \u306E front-matter \u306E mode: \u3067\u6307\u5B9A\u3057\u307E\u3059\uFF09"]]);var DECISIONS=new Set(["allow","ask","deny"]);var COLORS=new Set(
108
109
  ["black","red","green","yellow","blue","magenta","cyan","white","gray","grey","blackBright","redBright","greenBright","yellowBright","blueBright","magentaBright","cyanBright","whiteBright"]);var RESERVED_PERMISSION_KEYS=new Set(["__proto__","constructor","prototype"]);var STRICTNESS={allow:0,ask:1,deny:2};var LABEL_MAX=24;var PROMPT_MAX_BYTES=8192;var FILE_COUNT_MAX=32;var FILE_BYTES_MAX=256*1024;function parseFrontMatter(text){const normalized=text.replace(/^\uFEFF/,"").replace(/\r\n/g,"\n");const lines=normalized.
109
110
  split("\n");let i=0;while(i<lines.length&&(lines[i]??"").trim()==="")i+=1;if((lines[i]??"").trim()!=="---")return null;i+=1;const data=new Map;const warnings=[];let currentKey=null;let list=null;let map=null;let closed=false;let skipBlock=false;const flush=()=>{if(currentKey===null)return;if(list!==null)data.set(currentKey,list);else if(map!==null)data.set(currentKey,map);else data.set(currentKey,"");currentKey=null;list=null;map=null};for(;i<lines.length;i+=1){const raw=lines[i]??"";const trimmed=raw.
110
111
  trim();if(trimmed==="---"||trimmed==="..."){i+=1;closed=true;break}if(trimmed===""||trimmed.startsWith("#"))continue;const indented=/^\s/.test(raw);const isListItem=trimmed.startsWith("- ");if(skipBlock){if(indented||isListItem)continue;skipBlock=false}if((indented||isListItem)&&currentKey!==null){if(isListItem){if(map!==null){warnings.push(`${currentKey}: \u30EA\u30B9\u30C8\u3068\u30DE\u30C3\u30D7\u304C\u6DF7\u5728\u3057\u3066\u3044\u307E\u3059\uFF08\u3053\u306E\u884C\u306F\u7121\u8996\u3057\u307E\u3059\uFF09: ${trimmed}`);
@@ -0,0 +1,46 @@
1
+ import { createRequire as __twpCreateRequire } from 'node:module';
2
+ const require = __twpCreateRequire(import.meta.url);
3
+ import{isTrustworthyCacheFile,writePrivateFileAtomic}from"./chunk-D233KKXW.js";import{AuthSession,loadCredentials,withFileLock}from"./chunk-XNLIEUAW.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import{parseVersionCore}from"./chunk-DXXFUNYN.js";import{effectiveApiUrl,effectiveRelayUrl,resolveConfiguredModel,resolveProfile}from"./chunk-EDF4U5BT.js";import{ensureTwpHome,twpHomeDir}from"./chunk-RZVI6PMW.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import fs from"fs";import path from"path";var MODELS=[{id:"claude-opus-5",label:"Claude Opus 5",note:"\u6700\u3082\u9AD8\u6027\u80FD\u3002\u65E2\u5B9A"},{id:"claude-sonnet-5",label:"Claude Sonnet 5",note:"\u30D0\u30E9\u30F3\u30B9\u578B"},{id:"claude-haiku-4-5",label:"Claude Haiku 4.5",note:"\u9AD8\u901F\u30FB\u4F4E\u30B3\u30B9\u30C8"}];var DEFAULT_MODEL="claude-opus-5";function isSafeModelId(id){return/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/.test(id)}function modelLabel(id){const known=MODELS.find(m=>m.id===id);if(known)return known.label;
4
+ return prettifyClaudeId(id)??stripTerminalControls(id).slice(0,128)}function prettifyClaudeId(id){const match=/^claude-([a-z]+)((?:-\d+)+)$/.exec(id);if(!match)return null;const family=match[1]??"";const version=(match[2]??"").replace(/^-/,"").split("-").join(".");return`Claude ${family.charAt(0).toUpperCase()}${family.slice(1)} ${version}`}function modelNote(id){return MODELS.find(m=>m.id===id)?.note??""}function toModelInfos(ids){return ids.map(id=>({id,label:modelLabel(id),note:modelNote(id)}))}var anthropicAdapter={protocol:"anthropic",streamPath:"/api/cli/v1/messages/stream",toRequestBody,decode};function toRequestBody(request){const explicitCache=request.promptCache==="explicit";const messages=request.messages.map((m,i)=>({role:m.role,content:m.content.map((block,j)=>{const isLastBlockOfLastMessage=i===request.messages.length-1&&j===m.content.length-1;return explicitCache&&isLastBlockOfLastMessage&&m.role==="user"?{...block,cache_control:{type:"ephemeral"}}:block})}));return{model:request.
5
+ model,max_tokens:request.maxTokens,...request.system!==void 0?{system:request.system}:{},...request.tools&&request.tools.length>0?{tools:request.tools}:{},messages}}function decode(ev){const parsed=safeJson(ev.data);if(!parsed)return[];const type=typeof parsed["type"]==="string"?parsed["type"]:ev.event;if(type==="message_start"){const message=parsed["message"];return usageEvent(message?.usage)}if(type==="content_block_start"){const block=parsed["content_block"];const index=numberOr(parsed["index"],
6
+ -1);if(block?.type==="tool_use"&&typeof block.id==="string"&&typeof block.name==="string"){const seeded=block.input;const initial=typeof seeded==="object"&&seeded!==null&&!Array.isArray(seeded)?JSON.stringify(seeded):"";return[{kind:"tool_start",index,id:block.id,name:block.name,initialJson:initial==="{}"?"":initial}]}return[]}if(type==="content_block_delta"){const delta=parsed["delta"];if(delta?.type==="text_delta"&&typeof delta.text==="string"&&delta.text!==""){return[{kind:"text",delta:delta.
7
+ text}]}if(delta?.type==="input_json_delta"&&typeof delta.partial_json==="string"){return[{kind:"tool_delta",index:numberOr(parsed["index"],-1),json:delta.partial_json}]}return[]}if(type==="content_block_stop"){return[{kind:"tool_end",index:numberOr(parsed["index"],-1)}]}if(type==="message_delta"){const out=usageEvent(parsed["usage"]);const delta=parsed["delta"];if(typeof delta?.stop_reason==="string")out.push({kind:"stop",reason:delta.stop_reason});return out}if(type==="error"){const err=parsed["\
8
+ error"];return[{kind:"error",message:typeof err?.message==="string"?err.message:"\u30B9\u30C8\u30EA\u30FC\u30E0\u304C\u4E2D\u65AD\u3055\u308C\u307E\u3057\u305F"}]}return[]}function usageEvent(source){if(typeof source!=="object"||source===null)return[];const raw=source;const usage={};const pick=(key,field)=>{const v=raw[key];if(typeof v==="number"&&Number.isFinite(v))usage[field]=v};pick("input_tokens","inputTokens");pick("cache_read_input_tokens","cacheReadTokens");pick("cache_creation_input_tok\
9
+ ens","cacheWriteTokens");pick("output_tokens","outputTokens");return[{kind:"usage",usage}]}function numberOr(value,fallback){return typeof value==="number"&&Number.isFinite(value)?value:fallback}function safeJson(text){try{const parsed=JSON.parse(text);return typeof parsed==="object"&&parsed!==null?parsed:null}catch{return null}}var ADAPTERS={anthropic:anthropicAdapter};var PROTOCOLS_HEADER="X-TWP-CLI-Protocols";function supportedProtocols(){return Object.keys(ADAPTERS)}function isModelProtocol(value){return value==="anthropic"||value==="openai-chat"||value==="gemini"}function adapterFor(protocol){return ADAPTERS[protocol]??null}var DEFAULT_PROVIDER="anthropic";function effectiveModelSpec(spec){return{provider:spec?.provider??DEFAULT_PROVIDER,protocol:spec?.protocol??"anthropic",contextWindow:spec?.contextWindow??null,maxOutputTokens:spec?.maxOutputTokens??null,tools:spec?.capabilities?.tools??true,promptCache:spec?.capabilities?.promptCache??"explicit"}}var PROVIDER_PATTERN=/^[a-z0-9-]{1,32}$/;function positiveInt(value){return typeof value==="number"&&Number.isInteger(value)&&value>0?value:void 0}function parseModelSpec(id,raw){
10
+ const spec={id};if(typeof raw!=="object"||raw===null)return spec;const r=raw;if(typeof r["provider"]==="string"&&PROVIDER_PATTERN.test(r["provider"]))spec.provider=r["provider"];if(isModelProtocol(r["protocol"]))spec.protocol=r["protocol"];const contextWindow=positiveInt(r["context_window"]);if(contextWindow!==void 0)spec.contextWindow=contextWindow;const maxOutputTokens=positiveInt(r["max_output_tokens"]);if(maxOutputTokens!==void 0)spec.maxOutputTokens=maxOutputTokens;const caps=r["capabilitie\
11
+ s"];if(typeof caps==="object"&&caps!==null){const c=caps;const capabilities={};if(typeof c["tools"]==="boolean")capabilities.tools=c["tools"];const cache=c["prompt_cache"];if(cache==="explicit"||cache==="automatic"||cache==="none")capabilities.promptCache=cache;if(Object.keys(capabilities).length>0)spec.capabilities=capabilities}return spec}function toWireSpec(spec){return{id:spec.id,...spec.provider!==void 0?{provider:spec.provider}:{},...spec.protocol!==void 0?{protocol:spec.protocol}:{},...spec.
12
+ contextWindow!==void 0?{context_window:spec.contextWindow}:{},...spec.maxOutputTokens!==void 0?{max_output_tokens:spec.maxOutputTokens}:{},...spec.capabilities!==void 0?{capabilities:{...spec.capabilities.tools!==void 0?{tools:spec.capabilities.tools}:{},...spec.capabilities.promptCache!==void 0?{prompt_cache:spec.capabilities.promptCache}:{}}}:{}}}function modelCachePath(env=process.env){return path.join(twpHomeDir(env),"models.json")}function modelCacheLockPath(env=process.env){return path.join(twpHomeDir(env),"models.lock")}function builtinCatalog(){return{ids:MODELS.map(m=>m.id),source:"builtin",fetchedAt:null,minSupportedVersion:null}}function readCacheFile(env){const file=modelCachePath(env);if(!isTrustworthyCacheFile(file)){return{version:1,entries:{}}}const parsed=JSON.parse(fs.readFileSync(file,"utf8"));if(!parsed||typeof parsed!==
13
+ "object"||typeof parsed.entries!=="object"||parsed.entries===null){return{version:1,entries:{}}}return parsed}function readFloor(entry){const raw=entry.min_supported_version;return typeof raw==="string"&&parseVersionCore(raw)!==null?raw.trim():null}function loadCachedVersionFloor(profile,relayUrl,env=process.env){try{const entry=readCacheFile(env).entries?.[profile];if(!entry||entry.relay_url!==relayUrl)return{minSupportedVersion:null,fetchedAt:null};return{minSupportedVersion:readFloor(entry),fetchedAt:typeof entry.
14
+ fetched_at==="string"?entry.fetched_at:null}}catch{return{minSupportedVersion:null,fetchedAt:null}}}function loadCachedCatalog(profile,relayUrl,env=process.env){try{const parsed=readCacheFile(env).entries?.[profile];if(!parsed||parsed.relay_url!==relayUrl)return null;const ids=Array.isArray(parsed.models)?parsed.models.filter(id=>typeof id==="string"&&isSafeModelId(id)):[];if(ids.length===0)return null;const specById=new Map;if(Array.isArray(parsed.specs)){for(const raw of parsed.specs){const id=typeof raw===
15
+ "object"&&raw!==null?raw.id:void 0;if(typeof id==="string"&&ids.includes(id))specById.set(id,raw)}}return{ids,models:ids.map(id=>parseModelSpec(id,specById.get(id))),source:"cache",fetchedAt:typeof parsed.fetched_at==="string"?parsed.fetched_at:null,minSupportedVersion:readFloor(parsed)}}catch{return null}}async function saveCatalog(profile,relayUrl,ids,minSupportedVersion,env=process.env,now=Date.now,specs=[]){try{ensureTwpHome(env);await withFileLock(modelCacheLockPath(env),async()=>{let file;
16
+ try{file=readCacheFile(env)}catch{file={version:1,entries:{}}}const entries={...file.entries??{}};entries[profile]={relay_url:relayUrl,fetched_at:new Date(now()).toISOString(),models:ids,specs:specs.map(toWireSpec),min_supported_version:minSupportedVersion};writePrivateFileAtomic(modelCachePath(env),`${JSON.stringify({version:1,entries},null,2)}
17
+ `)})}catch{}}async function loadCatalog(client,profile,relayUrl,env=process.env){try{const{ids,models,minSupportedVersion}=await client.fetchModelCatalog();await saveCatalog(profile,relayUrl,ids,minSupportedVersion,env,Date.now,models);return{ids,models,source:"server",fetchedAt:new Date().toISOString(),minSupportedVersion}}catch{return loadCachedCatalog(profile,relayUrl,env)??builtinCatalog()}}function pickModel(catalog,configured){const fallback=catalog.ids[0]??MODELS[0]?.id??DEFAULT_MODEL;if(!configured||
18
+ configured==="")return{model:fallback};if(catalog.ids.includes(configured))return{model:configured};if(catalog.source==="builtin"){return{model:configured,warning:`\u30E2\u30C7\u30EB\u4E00\u89A7\u3092\u53D6\u5F97\u3067\u304D\u306A\u304B\u3063\u305F\u305F\u3081\u3001\u6307\u5B9A\u3055\u308C\u305F ${configured} \u3092\u305D\u306E\u307E\u307E\u4F7F\u3044\u307E\u3059\uFF08\u5229\u7528\u3067\u304D\u306A\u3044\u5834\u5408\u306F\u30EA\u30EC\u30FC\u304C 400 \u3092\u8FD4\u3057\u307E\u3059\uFF09`}}return{
19
+ model:fallback,warning:`${configured} \u306F\u5229\u7528\u3067\u304D\u306A\u3044\u305F\u3081 ${fallback} \u3092\u4F7F\u3044\u307E\u3059\uFF08\u5229\u7528\u53EF\u80FD: ${catalog.ids.join(" / ")}\uFF09`}}function specFor(catalog,id){return effectiveModelSpec(catalog.models?.find(m=>m.id===id))}function classifyModelSwitch(catalog,from,to){if(from===to)return"same";return specFor(catalog,from).provider===specFor(catalog,to).provider?"keep":"new_conversation"}var MAX_EVENT_BYTES=8*1024*1024;var SseBufferOverflowError=class extends Error{constructor(limit){super(`SSE \u306E\u30A4\u30D9\u30F3\u30C8\u5883\u754C\uFF08\u7A7A\u884C\uFF09\u304C ${limit} \u30D0\u30A4\u30C8\u4EE5\u5185\u306B\u73FE\u308C\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u4E0A\u6D41\u306E\u5FDC\u7B54\u304C\u58CA\u308C\u3066\u3044\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002`)}};var SseParser=class{constructor(maxEventBytes=MAX_EVENT_BYTES){this.maxEventBytes=maxEventBytes}maxEventBytes;buffer="";pendingCr=false;push(chunk){
20
+ let pending=this.pendingCr?`\r${chunk}`:chunk;this.pendingCr=pending.endsWith("\r");if(this.pendingCr)pending=pending.slice(0,-1);this.buffer+=pending.replace(/\r\n/g,"\n").replace(/\r/g,"\n");if(this.buffer.length>this.maxEventBytes){this.buffer="";this.pendingCr=false;throw new SseBufferOverflowError(this.maxEventBytes)}const events=[];for(;;){const boundary=this.buffer.indexOf("\n\n");if(boundary===-1)break;const block=this.buffer.slice(0,boundary);this.buffer=this.buffer.slice(boundary+2);const parsed=parseBlock(
21
+ block);if(parsed)events.push(parsed)}return events}flush(){const rest=(this.pendingCr?`${this.buffer}
22
+ `:this.buffer).trim();this.buffer="";this.pendingCr=false;if(rest==="")return[];const parsed=parseBlock(rest);return parsed?[parsed]:[]}};function parseBlock(block){let event="message";const data=[];for(const line of block.split("\n")){if(line.startsWith(":"))continue;const colon=line.indexOf(":");const field=colon===-1?line:line.slice(0,colon);let value=colon===-1?"":line.slice(colon+1);if(value.startsWith(" "))value=value.slice(1);if(field==="event")event=value;else if(field==="data")data.push(
23
+ value)}if(data.length===0)return null;return{event,data:data.join("\n")}}function blockLength(block){if(block.type==="text")return block.text.length;if(block.type==="tool_result")return block.content.length;return block.name.length+JSON.stringify(block.input).length}function emptyUsage(){return{inputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,outputTokens:0}}var RelayError=class extends Error{constructor(kind,message,status){super(message);this.kind=kind;this.status=status;this.name="RelayError"}kind;status};var MODELS_TIMEOUT_MS=5e3;var RelayClient=class{constructor(relayUrl,session,fetchImpl=httpFetch,cliVersion="0.0.0-dev"){this.relayUrl=relayUrl;this.session=session;this.fetchImpl=fetchImpl;this.cliVersion=cliVersion}relayUrl;session;fetchImpl;cliVersion;async fetchModelCatalog(){const res=await this.send("GET","/api/cli/v1/models",void 0,AbortSignal.
24
+ timeout(MODELS_TIMEOUT_MS));const body=await res.json().catch(()=>null);const models=(Array.isArray(body?.models)?body.models:[]).filter(m=>{const id=typeof m==="object"&&m!==null?m.id:void 0;return typeof id==="string"&&isSafeModelId(id)}).map(m=>parseModelSpec(m.id,m));const ids=models.map(m=>m.id);if(ids.length===0){throw new RelayError("upstream","\u30E2\u30C7\u30EB\u4E00\u89A7\u304C\u7A7A\u3067\u3057\u305F\uFF08\u30EA\u30EC\u30FC\u306E\u8A2D\u5B9A\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\uFF09")}
25
+ const floor=body?.min_supported_version;const minSupportedVersion=typeof floor==="string"&&parseVersionCore(floor)!==null?floor.trim():null;return{ids,models,minSupportedVersion}}async stream(request,hooks){const protocol=request.protocol??"anthropic";const adapter=adapterFor(protocol);if(!adapter){throw new RelayError("validation",`\u30E2\u30C7\u30EB ${request.model} \u306F ${protocol} \u30D7\u30ED\u30C8\u30B3\u30EB\u306E\u305F\u3081\u3001\u3053\u306E\u7248\u306E twp \u3067\u306F\u5229\u7528\u3067\u304D\u307E\u305B\u3093\uFF08twp \u3092\u66F4\u65B0\u3057\u3066\u304F\u3060\u3055\u3044\uFF09`)}
26
+ let res;try{res=await this.send("POST",adapter.streamPath,adapter.toRequestBody({model:request.model,maxTokens:request.maxTokens,...request.system!==void 0?{system:request.system}:{},messages:request.messages,...request.tools!==void 0?{tools:request.tools}:{},promptCache:request.promptCache??"explicit"}),hooks.signal)}catch(err){if(isAbortError(err)||hooks.signal?.aborted===true){return{text:"",usage:emptyUsage(),toolUses:[],stopReason:null,aborted:true,upstreamError:null}}throw err}const body=res.
27
+ body;if(!body){throw new RelayError("upstream","\u30EA\u30EC\u30FC\u304C\u5FDC\u7B54\u672C\u6587\u3092\u8FD4\u3057\u307E\u305B\u3093\u3067\u3057\u305F")}const parser=new SseParser;const decoder=new TextDecoder;const usage=emptyUsage();let text="";let stopReason=null;let streamError=null;const reader=body.getReader();const building=new Map;const toolUses=[];const finalizeBlock=index=>{const pending=building.get(index);if(!pending)return;building.delete(index);const input=pending.json.trim()===""?
28
+ {}:safeJson2(pending.json);if(input===null){streamError=`\u30C4\u30FC\u30EB ${pending.name} \u306E\u5F15\u6570\u3092\u89E3\u91C8\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F`;return}toolUses.push({type:"tool_use",id:pending.id,name:pending.name,input})};const apply=ev=>{switch(ev.kind){case"usage":Object.assign(usage,ev.usage);return;case"text":text+=ev.delta;hooks.onTextDelta(ev.delta);return;case"tool_start":building.set(ev.index,{id:ev.id,name:ev.name,json:ev.initialJson});return;case"tool\
29
+ _delta":{const pending=building.get(ev.index);if(pending)pending.json+=ev.json;return}case"tool_end":finalizeBlock(ev.index);return;case"stop":stopReason=ev.reason;return;case"error":streamError=ev.message;return}};const handle=events=>{for(const ev of events){for(const neutral of adapter.decode(ev))apply(neutral)}};const onAbort=()=>{void reader.cancel().catch(()=>void 0)};if(hooks.signal){if(hooks.signal.aborted)onAbort();else hooks.signal.addEventListener("abort",onAbort,{once:true})}try{for(;;){
30
+ const{done,value}=await reader.read();if(done)break;handle(parser.push(decoder.decode(value,{stream:true})))}handle(parser.flush())}catch(err){if(err instanceof SseBufferOverflowError){streamError=err.message}else if(!isAbortError(err)&&hooks.signal?.aborted!==true){throw new RelayError("network",`\u30B9\u30C8\u30EA\u30FC\u30E0\u304C\u5207\u65AD\u3055\u308C\u307E\u3057\u305F: ${errorMessage(err)}`)}}finally{hooks.signal?.removeEventListener("abort",onAbort);void reader.cancel().catch(()=>void 0)}
31
+ for(const index of[...building.keys()])finalizeBlock(index);return{text,usage,toolUses,stopReason,aborted:hooks.signal?.aborted===true,upstreamError:streamError===null?null:stripTerminalControls(streamError)}}async send(method,path2,body,signal){let token;try{token=await this.session.getAccessToken()}catch(err){throw new RelayError("not_logged_in",errorMessage(err))}let res=await this.fetchOrThrow(method,path2,token,body,signal);if(res.status===401){try{token=await this.session.refresh(token)}catch(err){
32
+ throw new RelayError("not_logged_in",errorMessage(err))}res=await this.fetchOrThrow(method,path2,token,body,signal)}if(!res.ok)throw await toRelayError(res);return res}async fetchOrThrow(method,path2,token,body,signal){try{return await this.fetchImpl(`${this.relayUrl}${path2}`,{method,headers:{Accept:body===void 0?"application/json":"text/event-stream, application/json",Authorization:`Bearer ${token}`,"User-Agent":`twp-cli/${this.cliVersion}`,[PROTOCOLS_HEADER]:supportedProtocols().join(","),...body!==
33
+ void 0?{"Content-Type":"application/json"}:{}},...body!==void 0?{body:JSON.stringify(body)}:{},...signal?{signal}:{}})}catch(err){if(isAbortError(err))throw err;throw new RelayError("network",`\u30E2\u30C7\u30EB\u53D6\u6B21\u30B5\u30FC\u30D0\u306B\u63A5\u7D9A\u3067\u304D\u307E\u305B\u3093\uFF08${this.relayUrl}\uFF09: ${errorMessage(err)}`)}}};async function toRelayError(res){const body=await res.json().catch(()=>null);const nested=typeof body?.error==="object"&&body.error!==null?body.error:void 0;
34
+ const message=stripTerminalControls(body?.message??nested?.message??`HTTP ${res.status}`);if(res.status===401){return new RelayError("unauthorized","\u30E2\u30C7\u30EB\u53D6\u6B21\u306E\u8A8D\u8A3C\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002`twp login`\uFF08\u30D6\u30E9\u30A6\u30B6\u59D4\u8B72\uFF09\u307E\u305F\u306F `twp login --password` \u3067\u30ED\u30B0\u30A4\u30F3\u3057\u76F4\u3057\u3066\u304F\u3060\u3055\u3044\uFF08`twp login --token` \u3067\u4FDD\u5B58\u3057\u305F\u901A\u5E38\u30C8\u30FC\u30AF\u30F3\u306F\u30E2\u30C7\u30EB\u53D6\u6B21\u306B\u306F\u4F7F\u3048\u307E\u305B\u3093\uFF09\u3002",
35
+ 401)}if(res.status===403){return new RelayError("cli_disabled",message,403)}if(res.status===429){return new RelayError("rate_limit",message,429)}if(res.status===400){const detail=body?.details;if(Array.isArray(detail?.allowed_models)){return new RelayError("model_not_allowed",`${message}
36
+ \u5229\u7528\u3067\u304D\u308B\u30E2\u30C7\u30EB: ${detail.allowed_models.join(" / ")}`,400)}return new RelayError("validation",message,400)}if(res.status===503){return new RelayError("unavailable",message,503)}return new RelayError("upstream",message,res.status)}function safeJson2(text){try{const parsed=JSON.parse(text);return typeof parsed==="object"&&parsed!==null?parsed:null}catch{return null}}function isAbortError(err){return err instanceof Error&&(err.name==="AbortError"||err.name==="Timeo\
37
+ utError")}function errorMessage(err){return err instanceof Error?err.message:String(err)}var DEFAULT_CONTEXT_WINDOW_TOKENS=2e5;var DEFAULT_MAX_TOKENS=8192;var TRIM_THRESHOLD=.8;var ContextManager=class{constructor(defaultContextWindowTokens=DEFAULT_CONTEXT_WINDOW_TOKENS){this.defaultContextWindowTokens=defaultContextWindowTokens;this.contextWindowTokens=defaultContextWindowTokens}defaultContextWindowTokens;messages=[];totals=emptyUsage();turns=0;lastPromptTokens=0;pendingChars=0;droppedMessages=0;contextWindowTokens;setContextWindow(tokens){this.contextWindowTokens=tokens!==null&&tokens>
38
+ 0?tokens:this.defaultContextWindowTokens}addUser(text){this.pendingChars+=text.length;const last=this.messages[this.messages.length-1];if(last?.role==="user"){last.content.push({type:"text",text});return}this.messages.push({role:"user",content:[{type:"text",text}]})}addToolExchange(assistantText,toolUses,results){if(toolUses.length===0)return;const blocks=[];if(assistantText.trim()!=="")blocks.push({type:"text",text:assistantText});blocks.push(...toolUses);this.messages.push({role:"assistant",content:blocks});
39
+ this.messages.push({role:"user",content:results});this.pendingChars+=blocks.reduce((n,b)=>n+blockLength(b),0);this.pendingChars+=results.reduce((n,b)=>n+blockLength(b),0)}completeTurn(assistantText){const text=assistantText.trim();if(text===""){const last=this.messages[this.messages.length-1];if(last?.role==="user"&&!hasToolResult(last)){this.messages.pop();this.pendingChars=Math.max(0,this.pendingChars-lengthOf(last))}return false}this.messages.push({role:"assistant",content:[{type:"text",text:assistantText}]});
40
+ this.pendingChars+=assistantText.length;this.turns+=1;return true}applyUsage(usage){this.totals={inputTokens:this.totals.inputTokens+usage.inputTokens,cacheReadTokens:this.totals.cacheReadTokens+usage.cacheReadTokens,cacheWriteTokens:this.totals.cacheWriteTokens+usage.cacheWriteTokens,outputTokens:this.totals.outputTokens+usage.outputTokens};const prompt=usage.inputTokens+usage.cacheReadTokens+usage.cacheWriteTokens;if(prompt>0){this.lastPromptTokens=prompt;this.pendingChars=0}}history(){return this.
41
+ messages.map(m=>({role:m.role,content:m.content.map(copyBlock)}))}isEmpty(){return this.messages.length===0}clear(){this.messages=[];this.totals=emptyUsage();this.turns=0;this.lastPromptTokens=0;this.pendingChars=0;this.droppedMessages=0}trimToFit(maxTokens=DEFAULT_MAX_TOKENS){const limit=Math.max(1,Math.floor((this.contextWindowTokens-maxTokens)*TRIM_THRESHOLD));let dropped=0;while(this.estimatedPromptTokens()>limit&&this.messages.length>1){const removed=this.messages.shift();if(!removed)break;
42
+ const removedTokens=Math.ceil(lengthOf(removed)/4);this.lastPromptTokens=Math.max(0,this.lastPromptTokens-removedTokens);dropped+=1}while(this.messages.length>0){const head2=this.messages[0];if(!head2)break;const orphanResult=hasToolResult(head2)&&this.messages.length>1;if(head2.role!=="assistant"&&!orphanResult)break;this.messages.shift();this.lastPromptTokens=Math.max(0,this.lastPromptTokens-Math.ceil(lengthOf(head2)/4));dropped+=1}const head=this.messages[0];if(head&&hasToolResult(head)){const before=lengthOf(
43
+ head);const kept=head.content.filter(block=>block.type!=="tool_result");head.content=kept.length>0?kept:[{type:"text",text:"\uFF08\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u4E0A\u9650\u306E\u305F\u3081\u3001\u76F4\u524D\u306E\u30C4\u30FC\u30EB\u5B9F\u884C\u7D50\u679C\u306F\u5C65\u6B74\u304B\u3089\u5916\u308C\u307E\u3057\u305F\uFF09"}];const freed=before-lengthOf(head);this.lastPromptTokens=Math.max(0,this.lastPromptTokens-Math.ceil(freed/4));this.pendingChars=Math.max(0,this.pendingChars-freed);dropped+=
44
+ 1}this.droppedMessages+=dropped;return dropped}estimatedPromptTokens(){if(this.lastPromptTokens===0){return Math.ceil(this.totalChars()/4)}return this.lastPromptTokens+Math.ceil(this.pendingChars/4)}snapshot(){const used=this.estimatedPromptTokens();const remaining=Math.round((this.contextWindowTokens-used)/this.contextWindowTokens*100);return{totals:{...this.totals},turns:this.turns,lastPromptTokens:this.lastPromptTokens,remainingPercent:Math.max(0,Math.min(100,remaining)),droppedMessages:this.
45
+ droppedMessages}}totalChars(){return this.messages.reduce((sum,m)=>sum+lengthOf(m),0)}};function lengthOf(message){return message.content.reduce((sum,block)=>sum+blockLength(block),0)}function copyBlock(block){return block.type==="tool_use"?{...block,input:{...block.input}}:{...block}}function hasToolResult(message){return message.content.some(block=>block.type==="tool_result")}function createRuntime(opts){const env=opts.env??process.env;const cwd=opts.cwd??process.cwd();const profile=resolveProfile(opts.profile,env,cwd);const creds=loadCredentials(profile.name,env);const apiUrl=effectiveApiUrl(profile,creds?.api_url,env);const relayUrl=effectiveRelayUrl(profile,creds?.relay_url,env);const session=new AuthSession(profile.name,apiUrl,env);const client=new RelayClient(relayUrl,session,httpFetch,opts.cliVersion);const configured=resolveConfiguredModel(opts.model,profile.name,
46
+ env,cwd);return{profileName:profile.name,apiUrl,relayUrl,client,session,context:new ContextManager,loggedIn:creds!==null,configuredModel:configured?.model??null,loadCatalog:()=>loadCatalog(client,profile.name,relayUrl,env),loadCachedFloor:()=>loadCachedVersionFloor(profile.name,relayUrl,env),loadCachedCatalog:()=>loadCachedCatalog(profile.name,relayUrl,env)}}export{emptyUsage,DEFAULT_MAX_TOKENS,modelLabel,toModelInfos,effectiveModelSpec,builtinCatalog,loadCachedCatalog,pickModel,specFor,classifyModelSwitch,RelayError,createRuntime};
@@ -4,8 +4,8 @@ var LOADERS={agent:async()=>(await import("./agent-WTDLGRNM.js")).agentDomain,"a
4
4
  backlog:async()=>(await import("./backlog-HDDV2NTC.js")).backlogDomain,budget:async()=>(await import("./budget-T246BG2P.js")).budgetDomain,"business-hours":async()=>(await import("./business-hours-I4X6YQS3.js")).businessHoursDomain,"business-place":async()=>(await import("./sales-master-BQML5IJT.js")).businessPlaceDomain,company:async()=>(await import("./company-2CRWKBJL.js")).companyDomain,contract:async()=>(await import("./contract-73RVPBYM.js")).contractDomain,customer:async()=>(await import("./company-2CRWKBJL.js")).
5
5
  customerDomain,department:async()=>(await import("./department-GPVHVFFP.js")).departmentDomain,deposit:async()=>(await import("./deposit-3I3NV556.js")).depositDomain,estimate:async()=>(await import("./estimate-NLKTWCYI.js")).estimateDomain,evaluation:async()=>(await import("./evaluation-VP7OFTBS.js")).evaluationDomain,expense:async()=>(await import("./expense-O2O4623X.js")).expenseDomain,"fiscal-year":async()=>(await import("./fiscal-year-ZTCSF46U.js")).fiscalYearDomain,holiday:async()=>(await import("./holiday-WDI4CSNL.js")).
6
6
  holidayDomain,"goal-sheet":async()=>(await import("./evaluation-VP7OFTBS.js")).goalSheetDomain,inquiry:async()=>(await import("./inquiry-4Q4BRYM3.js")).inquiryDomain,invoice:async()=>(await import("./invoice-BXSI6SMA.js")).invoiceDomain,"job-title":async()=>(await import("./job-title-NCFHCA4M.js")).jobTitleDomain,knowledge:async()=>(await import("./domain-knowledge-SZZCV6IO.js")).knowledgeDomain,leave:async()=>(await import("./leave-W4GHXMSE.js")).leaveDomain,license:async()=>(await import("./license-XSWDXSJE.js")).
7
- licenseDomain,media:async()=>(await import("./media-6SUIEOKC.js")).mediaDomain,meeting:async()=>(await import("./knowledge-TCADQEPU.js")).meetingDomain,note:async()=>(await import("./knowledge-TCADQEPU.js")).noteDomain,notification:async()=>(await import("./notification-WP7CH734.js")).notificationDomain,onedrive:async()=>(await import("./onedrive-KWVOUGG6.js")).onedriveDomain,outlook:async()=>(await import("./outlook-GYRF5TXA.js")).outlookDomain,payee:async()=>(await import("./sales-master-BQML5IJT.js")).
8
- payeeDomain,position:async()=>(await import("./position-H3NSDVKQ.js")).positionDomain,project:async()=>(await import("./project-HGUUMTEE.js")).projectDomain,prospect:async()=>(await import("./prospect-QY3NYP2A.js")).prospectDomain,purchase:async()=>(await import("./purchase-7XCGCQ2G.js")).purchaseDomain,qualification:async()=>(await import("./skill-4TSTVUXY.js")).qualificationDomain,receivable:async()=>(await import("./receivable-GW5WCVJ7.js")).receivableDomain,redmine:async()=>(await import("./redmine-644RTL42.js")).
7
+ licenseDomain,media:async()=>(await import("./media-KWSFHGAQ.js")).mediaDomain,meeting:async()=>(await import("./knowledge-TCADQEPU.js")).meetingDomain,note:async()=>(await import("./knowledge-TCADQEPU.js")).noteDomain,notification:async()=>(await import("./notification-WP7CH734.js")).notificationDomain,onedrive:async()=>(await import("./onedrive-KWVOUGG6.js")).onedriveDomain,outlook:async()=>(await import("./outlook-GYRF5TXA.js")).outlookDomain,payee:async()=>(await import("./sales-master-BQML5IJT.js")).
8
+ payeeDomain,position:async()=>(await import("./position-H3NSDVKQ.js")).positionDomain,project:async()=>(await import("./project-UDHRIZZN.js")).projectDomain,prospect:async()=>(await import("./prospect-QY3NYP2A.js")).prospectDomain,purchase:async()=>(await import("./purchase-7XCGCQ2G.js")).purchaseDomain,qualification:async()=>(await import("./skill-4TSTVUXY.js")).qualificationDomain,receivable:async()=>(await import("./receivable-GW5WCVJ7.js")).receivableDomain,redmine:async()=>(await import("./redmine-644RTL42.js")).
9
9
  redmineDomain,report:async()=>(await import("./report-P74LSHTE.js")).reportDomain,"rounding-setting":async()=>(await import("./sales-numbering-OW4O6WH6.js")).roundingSettingDomain,"seal-impression":async()=>(await import("./sales-master-BQML5IJT.js")).sealImpressionDomain,search:async()=>(await import("./search-BLMSVPIL.js")).searchDomain,segment:async()=>(await import("./segment-G4IPD43F.js")).segmentDomain,shift:async()=>(await import("./attendance-lists-TBUZCRKK.js")).shiftDomain,skill:async()=>(await import("./skill-4TSTVUXY.js")).
10
- skillDomain,"staffing-board":async()=>(await import("./staffing-board-MQREMSVJ.js")).staffingBoardDomain,storage:async()=>(await import("./storage-AQDCEBDJ.js")).storageDomain,"supplier-payment":async()=>(await import("./supplier-payment-KRLYWEKY.js")).supplierPaymentDomain,support:async()=>(await import("./support-ITRXFVMK.js")).supportDomain,task:async()=>(await import("./task-AGNMPS4F.js")).taskDomain,teams:async()=>(await import("./teams-MZR3256V.js")).teamsDomain,user:async()=>(await import("./user-U4VHKBLE.js")).
10
+ skillDomain,"staffing-board":async()=>(await import("./staffing-board-MQREMSVJ.js")).staffingBoardDomain,storage:async()=>(await import("./storage-AQDCEBDJ.js")).storageDomain,"supplier-payment":async()=>(await import("./supplier-payment-KRLYWEKY.js")).supplierPaymentDomain,support:async()=>(await import("./support-ITRXFVMK.js")).supportDomain,task:async()=>(await import("./task-AGNMPS4F.js")).taskDomain,teams:async()=>(await import("./teams-MZR3256V.js")).teamsDomain,user:async()=>(await import("./user-3IHEIFAT.js")).
11
11
  userDomain,"user-contract-type":async()=>(await import("./user-contract-type-HDA5TITL.js")).userContractTypeDomain,wiki:async()=>(await import("./knowledge-TCADQEPU.js")).wikiDomain,workchange:async()=>(await import("./attendance-lists-TBUZCRKK.js")).workchangeDomain,"worker-agent":async()=>(await import("./worker-agent-52PXQO4N.js")).workerAgentDomain,workflow:async()=>(await import("./workflow-4NC2C4TX.js")).workflowDomain};async function loadDomain(name){return LOADERS[name]()}export{loadDomain};
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire as __twpCreateRequire } from 'node:module';
3
3
  const require = __twpCreateRequire(import.meta.url);
4
- import{GLOBAL_OPTIONS_HELP}from"./chunk-PECIBNFD.js";import{parseArgv}from"./chunk-IVFSEXD3.js";import"./chunk-2LOT54OO.js";import"./chunk-MLRBDF44.js";import"./chunk-VERYHAWV.js";import"./chunk-QQRJLH6B.js";import"./chunk-VSJBJXZO.js";var VERSION=true?"0.80.0":"0.0.0-dev";var HELP=`twp ${VERSION} \u2014 TWP CLI
4
+ import{GLOBAL_OPTIONS_HELP}from"./chunk-PECIBNFD.js";import{parseArgv}from"./chunk-IVFSEXD3.js";import"./chunk-2LOT54OO.js";import"./chunk-MLRBDF44.js";import"./chunk-VERYHAWV.js";import"./chunk-QQRJLH6B.js";import"./chunk-VSJBJXZO.js";var VERSION=true?"0.81.0":"0.0.0-dev";var HELP=`twp ${VERSION} \u2014 TWP CLI
5
5
 
6
6
  \u4F7F\u3044\u65B9:
7
7
  twp \u5BFE\u8A71 TUI \u3092\u8D77\u52D5
@@ -1391,16 +1391,16 @@ TUI \u5185:
1391
1391
  TWP API \u3092\u547C\u3079\u307E\u3059\u3002TWP API \u306E\u30C4\u30FC\u30EB\u306F\u65E2\u5B9A\u3067\u78BA\u8A8D\u304C\u51FA\u307E\u3059\uFF08-p \u3067\u306F\u62D2\u5426\u3002--allowed-tools \u3067\u540D\u524D\u3092\u8A31\u53EF\uFF09\u3002
1392
1392
  \u4F1A\u8A71\u30FB\u30ED\u30FC\u30AB\u30EB\u30C4\u30FC\u30EB\uFF08\u30D5\u30A1\u30A4\u30EB\u30FB\u30B3\u30DE\u30F3\u30C9\u30FBgit\uFF09\u306F\u30C6\u30CA\u30F3\u30C8\u306E\u30AF\u30EC\u30B8\u30C3\u30C8\u3067\u5B9F\u969B\u306B\u52D5\u304D\u307E\u3059\u3002
1393
1393
  `;function ignoreEpipe(stream){stream.on("error",err=>{if(err.code==="EPIPE")process.exit(0);throw err})}async function main(){const nodeMajor=Number(process.versions.node.split(".")[0]);if(nodeMajor<22){process.stderr.write(`twp-cli \u306B\u306F Node.js 22 \u4EE5\u4E0A\u304C\u5FC5\u8981\u3067\u3059\uFF08\u73FE\u5728: ${process.versions.node}\uFF09
1394
- `);process.exit(1)}ignoreEpipe(process.stdout);ignoreEpipe(process.stderr);if(process.env["TWP_AUTO_UPDATE_WORKER"]==="1"){const{runAutoUpdateWorker}=await import("./auto-update-worker-6K24JYLQ.js");await runAutoUpdateWorker().catch(()=>void 0);return}const[first,...rest]=process.argv.slice(2);if(first==="__complete"||first==="completion"){const completion=await import("./completion-C6ZQCDT2.js");if(first==="completion"){process.exitCode=completion.runCompletion(rest,process.stdout,process.stderr);return}
1395
- const[{loadDomain},{loadUserConfig}]=await Promise.all([import("./registry-KMZLMCME.js"),import("./config-XYWRBIC6.js")]);process.exitCode=await completion.runComplete(rest,process.stdout,{loadDomain,profileNames:()=>Object.keys(loadUserConfig().profiles??{})});return}if(first==="configure"){const autoUpdate2=await import("./auto-update-FXXQHBV5.js");autoUpdate2.registerRunning();autoUpdate2.onStartup(VERSION);const{runConfigure}=await import("./configure-3JID6MQ5.js");process.exitCode=
1394
+ `);process.exit(1)}ignoreEpipe(process.stdout);ignoreEpipe(process.stderr);if(process.env["TWP_AUTO_UPDATE_WORKER"]==="1"){const{runAutoUpdateWorker}=await import("./auto-update-worker-5J4XXQ6J.js");await runAutoUpdateWorker().catch(()=>void 0);return}const[first,...rest]=process.argv.slice(2);if(first==="__complete"||first==="completion"){const completion=await import("./completion-C6ZQCDT2.js");if(first==="completion"){process.exitCode=completion.runCompletion(rest,process.stdout,process.stderr);return}
1395
+ const[{loadDomain},{loadUserConfig}]=await Promise.all([import("./registry-QXXEYQZZ.js"),import("./config-XYWRBIC6.js")]);process.exitCode=await completion.runComplete(rest,process.stdout,{loadDomain,profileNames:()=>Object.keys(loadUserConfig().profiles??{})});return}if(first==="configure"){const autoUpdate2=await import("./auto-update-FXXQHBV5.js");autoUpdate2.registerRunning();autoUpdate2.onStartup(VERSION);const{runConfigure}=await import("./configure-3JID6MQ5.js");process.exitCode=
1396
1396
  await runConfigure(rest);return}const args=parseArgv(process.argv.slice(2));if(args.command==="version"){process.stdout.write(`${VERSION}
1397
1397
  `);return}if(args.command==="help"){process.stdout.write(HELP);return}if(args.movedCommand!==void 0){const{MOVED_QUEUE_COMMAND_MESSAGE}=await import("./dispatch-HHWTJ3P4.js");process.stderr.write(MOVED_QUEUE_COMMAND_MESSAGE);process.exitCode=2;return}if(args.unknown.length>0){process.stderr.write(`\u4E0D\u660E\u306A\u5F15\u6570: ${args.unknown.join(" ")}
1398
1398
 
1399
- ${HELP}`);process.exitCode=2;return}const autoUpdate=await import("./auto-update-FXXQHBV5.js");autoUpdate.registerRunning();if(args.command==="task-loop"&&args.taskLoopAction!=="capacity"){process.env[autoUpdate.DISABLE_ENV]="1"}else if(args.command!=="update"){autoUpdate.onStartup(VERSION)}if(args.command==="domain"&&args.domain!==void 0){const{runDomain}=await import("./run-IWCVSEQF.js");process.exitCode=await runDomain({domain:args.domain,...args.operation!==void 0?{operation:args.operation}:
1400
- {},argv:args.domainArgv,help:args.domainHelp,globals:{...args.profile!==void 0?{profile:args.profile}:{},...args.output!==void 0?{output:args.output}:{},...args.query!==void 0?{query:args.query}:{},dryRun:args.dryRun,debug:args.debug,yes:args.yes,refresh:args.refresh},version:VERSION});return}if(args.command==="api"){const{runApiCommand}=await import("./api-command-AGJWCRRX.js");process.exitCode=await runApiCommand({argv:args.domainArgv,help:args.domainHelp,globals:{...args.profile!==void 0?{profile:args.
1401
- profile}:{},...args.output!==void 0?{output:args.output}:{},...args.query!==void 0?{query:args.query}:{},dryRun:args.dryRun,debug:args.debug,yes:args.yes},version:VERSION});return}if(args.command==="update"){const{runUpdate}=await import("./update-7GYGZEK3.js");process.exitCode=await runUpdate({...args.profile!==void 0?{profile:args.profile}:{},version:VERSION});return}if(args.command==="login"||args.command==="logout"||args.command==="whoami"){const{runLogin,runLogout,runWhoami}=await import("./commands-ZIRZVBH6.js");
1399
+ ${HELP}`);process.exitCode=2;return}const autoUpdate=await import("./auto-update-FXXQHBV5.js");autoUpdate.registerRunning();if(args.command==="task-loop"&&args.taskLoopAction!=="capacity"){process.env[autoUpdate.DISABLE_ENV]="1"}else if(args.command!=="update"){autoUpdate.onStartup(VERSION)}if(args.command==="domain"&&args.domain!==void 0){const{runDomain}=await import("./run-SUYWHFJS.js");process.exitCode=await runDomain({domain:args.domain,...args.operation!==void 0?{operation:args.operation}:
1400
+ {},argv:args.domainArgv,help:args.domainHelp,globals:{...args.profile!==void 0?{profile:args.profile}:{},...args.output!==void 0?{output:args.output}:{},...args.query!==void 0?{query:args.query}:{},dryRun:args.dryRun,debug:args.debug,yes:args.yes,refresh:args.refresh},version:VERSION});return}if(args.command==="api"){const{runApiCommand}=await import("./api-command-IKQCTKPH.js");process.exitCode=await runApiCommand({argv:args.domainArgv,help:args.domainHelp,globals:{...args.profile!==void 0?{profile:args.
1401
+ profile}:{},...args.output!==void 0?{output:args.output}:{},...args.query!==void 0?{query:args.query}:{},dryRun:args.dryRun,debug:args.debug,yes:args.yes},version:VERSION});return}if(args.command==="update"){const{runUpdate}=await import("./update-ZKZGDGMC.js");process.exitCode=await runUpdate({...args.profile!==void 0?{profile:args.profile}:{},version:VERSION});return}if(args.command==="login"||args.command==="logout"||args.command==="whoami"){const{runLogin,runLogout,runWhoami}=await import("./commands-ZIRZVBH6.js");
1402
1402
  const options={profile:args.profile,method:args.loginMethod,tenant:args.tenant,noBrowser:args.loginNoBrowser,cliVersion:VERSION,force:args.logoutForce,...args.output!==void 0?{output:args.output}:{},...args.query!==void 0?{query:args.query}:{}};const runner=args.command==="login"?runLogin:args.command==="logout"?runLogout:runWhoami;process.exitCode=await runner(options);return}if(args.command==="task-loop"){const{runTaskLoop}=await import("./commands-D65LPET6.js");process.exitCode=await runTaskLoop(
1403
1403
  {action:args.taskLoopAction??"run",project:args.project,profile:args.profile,safe:args.safe,daemon:args.daemon,interval:args.interval,maxCycles:args.maxCycles,forceRunner:args.forceRunner,force:args.stopForce,drain:args.stopDrain,engine:args.engine,version:VERSION,verbose:args.verbose,scheduleNow:args.scheduleNow,scheduleCounts:args.scheduleCounts,scheduleGate:args.scheduleGate,scheduleOp:args.scheduleOp,scheduleConfigOp:args.scheduleConfigOp,scheduleId:args.scheduleId,charterOp:args.charterOp,charterInput:args.
1404
1404
  charterFile,charterOutput:args.charterOut,charterRevision:args.charterRevision,settingsOp:args.settingsOp,skillOp:args.skillOp,skillName:args.skillName,skillAll:args.skillAll,skillDir:args.skillDir,skillConfig:args.skillConfig,output:args.output,query:args.query,revisionFrom:args.revisionFrom,revisionTo:args.revisionTo,planOp:args.planOp,capacityOp:args.capacityOp,runnerOp:args.runnerOp,runnerId:args.runnerTargetId,planEmpty:args.planEmpty,planCheck:args.planCheck,yes:args.yes,ais:args.ais,workspace:args.
1405
- workspace,aiConfigFile:args.aiConfigFile,noAiConfigFile:args.noAiConfigFile});return}if(args.command==="print"){const{runOneShot}=await import("./oneshot-EAXT2LLB.js");process.exitCode=await runOneShot({prompt:args.prompt??"",fromStdin:args.promptFromStdin,mode:args.mode??"dev",...args.permissionMode!==void 0?{permissionMode:args.permissionMode}:{},allowedTools:args.allowedTools,disallowedTools:args.disallowedTools,...args.model!==void 0?{model:args.model}:{},...args.profile!==void 0?{profile:args.
1406
- profile}:{},version:VERSION});return}const{startTui}=await import("./app-VWGA36NA.js");await startTui({mode:args.mode,permissionMode:args.permissionMode,allowedTools:args.allowedTools,disallowedTools:args.disallowedTools,model:args.model,profile:args.profile,noTui:args.noTui||!process.stdout.isTTY,doctor:args.doctor,version:VERSION})}await main();
1405
+ workspace,aiConfigFile:args.aiConfigFile,noAiConfigFile:args.noAiConfigFile});return}if(args.command==="print"){const{runOneShot}=await import("./oneshot-TH4PFDWC.js");process.exitCode=await runOneShot({prompt:args.prompt??"",fromStdin:args.promptFromStdin,mode:args.mode??"dev",...args.permissionMode!==void 0?{permissionMode:args.permissionMode}:{},allowedTools:args.allowedTools,disallowedTools:args.disallowedTools,...args.model!==void 0?{model:args.model}:{},...args.profile!==void 0?{profile:args.
1406
+ profile}:{},version:VERSION});return}const{startTui}=await import("./app-JGYZPOH7.js");await startTui({mode:args.mode,permissionMode:args.permissionMode,allowedTools:args.allowedTools,disallowedTools:args.disallowedTools,model:args.model,profile:args.profile,noTui:args.noTui||!process.stdout.isTTY,doctor:args.doctor,version:VERSION})}await main();
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{checkOutTarget}from"./chunk-OBILH2O7.js";import"./chunk-JYASAM2R.js";import"./chunk-PO35MCYP.js";import"./chunk-Q3B65OFC.js";import"./chunk-GFLGXGWE.js";import{contentTypeFor,inspectLocalFile}from"./chunk-WTYIFLVB.js";import{checkUploadQuota}from"./chunk-V64CGX7V.js";import{parseWaitOptions,waitUntilTerminal}from"./chunk-WVCEKC7V.js";import"./chunk-LDBYJPRD.js";import"./chunk-RMFLTSOV.js";import{repeatedValues}from"./chunk-RX5HWI4L.js";
3
+ import{checkOutTarget}from"./chunk-AK7CNRVB.js";import"./chunk-YPULDSJ3.js";import"./chunk-PO35MCYP.js";import"./chunk-Q3B65OFC.js";import"./chunk-GFLGXGWE.js";import{contentTypeFor,inspectLocalFile}from"./chunk-WTYIFLVB.js";import{checkUploadQuota}from"./chunk-V64CGX7V.js";import{parseWaitOptions,waitUntilTerminal}from"./chunk-WVCEKC7V.js";import"./chunk-LDBYJPRD.js";import"./chunk-RMFLTSOV.js";import{repeatedValues}from"./chunk-RX5HWI4L.js";
4
4
  import{readBody}from"./chunk-6LSQCOCJ.js";import"./chunk-RSSPNFSK.js";import{collapsesInUrlPath,isSafePathSegment}from"./chunk-HVZUXLQ4.js";import{ApiError}from"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger,readEnvelopeCursor,shellQuote}from"./chunk-MI6HVYR2.js";import"./chunk-II5RVJQN.js";import{requireResolved,singleRef,withResolved}from"./chunk-PS5QFKHB.js";import{acknowledgement,
5
5
  isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiRejectedError,ApiResponseError,NetworkError,UsageError,WaitTimeoutError}from"./chunk-VFPY2A23.js";import"./chunk-PECIBNFD.js";import"./chunk-XNLIEUAW.js";import"./chunk-J7QYPKVK.js";import"./chunk-EDF4U5BT.js";import"./chunk-RZVI6PMW.js";import"./chunk-MLRBDF44.js";import"./chunk-QQRJLH6B.js";import"./chunk-74BPZOKU.js";import"./chunk-UREA4ZIG.js";import"./chunk-NHYMHCAT.js";
6
6
  import"./chunk-VSJBJXZO.js";import crypto2 from"crypto";import fs2 from"fs";import path from"path";var SCOPE_PERSONAL="personal";var SCOPE_PROJECT="project";var UUID=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;var FORBIDDEN_NAME=/[/\\:*?"<>|]/;var NAME_MAX=255;var ROW_COLUMNS=["id","path","name","file_count","subfolder_count","parent_id","updated_at"];var TRASH_COLUMNS=["id","path","name","file_count","subfolder_count","parent_id","deleted_at"];function folderRows(raw){return raw.map(row=>{const id=row["id"];const name=row["name"];const parentId=row["parent_id"];if(typeof id!==
@@ -1,14 +1,15 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{activateModeFiles,activatePermissionSettings,buildResidentSet,buildSystemPrompt,createAuditLogger,createTwpToolkit,currentBranch,displayCwd,residentInputs,runTurn}from"./chunk-DLJQE2B5.js";import"./chunk-NZ7WI4RZ.js";import"./chunk-N2UVRM3Z.js";import"./chunk-LDBYJPRD.js";import"./chunk-RSSPNFSK.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import"./chunk-II5RVJQN.js";import"./chunk-VFPY2A23.js";
4
- import{RelayError,createRuntime,pickModel}from"./chunk-JQBXLZTJ.js";import"./chunk-D233KKXW.js";import"./chunk-PMOUHEJQ.js";import"./chunk-XNLIEUAW.js";import"./chunk-J7QYPKVK.js";import{checkMinSupportedVersion,enforceMinSupportedVersion,floorNeedsRefresh}from"./chunk-DXXFUNYN.js";import"./chunk-EDF4U5BT.js";import"./chunk-RZVI6PMW.js";import{getMode}from"./chunk-2LOT54OO.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";async function runOneShot(opts,deps={}){const out=deps.out??(text=>void process.stdout.write(stripTerminalControls(text)));const err=deps.err??(text=>void process.stderr.write(stripTerminalControls(text)));activateModeFiles(err);const permissionLayers=activatePermissionSettings(err,{...opts.allowedTools?{allowedTools:opts.allowedTools}:{},...opts.disallowedTools?{disallowedTools:opts.disallowedTools}:{}});const prompt=opts.fromStdin?await(deps.readStdin??readStdin)():opts.prompt;if(prompt.trim()===
3
+ import{activateModeFiles,activatePermissionSettings,buildResidentSet,buildSystemPrompt,createAuditLogger,createTwpToolkit,currentBranch,displayCwd,residentInputs,runTurn}from"./chunk-TH3NVRAU.js";import"./chunk-NZ7WI4RZ.js";import"./chunk-N2UVRM3Z.js";import"./chunk-LDBYJPRD.js";import"./chunk-RSSPNFSK.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import"./chunk-II5RVJQN.js";import"./chunk-VFPY2A23.js";
4
+ import{RelayError,createRuntime,pickModel,specFor}from"./chunk-TVTJRNUC.js";import"./chunk-D233KKXW.js";import"./chunk-PMOUHEJQ.js";import"./chunk-XNLIEUAW.js";import"./chunk-J7QYPKVK.js";import{checkMinSupportedVersion,enforceMinSupportedVersion,floorNeedsRefresh}from"./chunk-DXXFUNYN.js";import"./chunk-EDF4U5BT.js";import"./chunk-RZVI6PMW.js";import{getMode}from"./chunk-2LOT54OO.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";
5
+ import"./chunk-VSJBJXZO.js";async function runOneShot(opts,deps={}){const out=deps.out??(text=>void process.stdout.write(stripTerminalControls(text)));const err=deps.err??(text=>void process.stderr.write(stripTerminalControls(text)));activateModeFiles(err);const permissionLayers=activatePermissionSettings(err,{...opts.allowedTools?{allowedTools:opts.allowedTools}:{},...opts.disallowedTools?{disallowedTools:opts.disallowedTools}:{}});const prompt=opts.fromStdin?await(deps.readStdin??readStdin)():opts.prompt;if(prompt.trim()===
5
6
  ""){err('\u30D7\u30ED\u30F3\u30D7\u30C8\u304C\u7A7A\u3067\u3059\u3002`twp -p "\u8CEA\u554F"`\uFF08`-p -` \u3067\u6A19\u6E96\u5165\u529B\uFF09\n');return 2}const runtime=deps.runtime??createRuntime({...opts.profile!==void 0?{profile:opts.profile}:{},...opts.model!==void 0?{model:opts.model}:{},cliVersion:opts.version});const cachedFloor=runtime.loadCachedFloor();if(await checkMinSupportedVersion({current:opts.version,cachedFloor:cachedFloor.minSupportedVersion,refresh:async()=>(await runtime.loadCatalog()).
6
7
  minSupportedVersion,write:err})){return 1}if(!runtime.loggedIn){err("\u30ED\u30B0\u30A4\u30F3\u3057\u3066\u3044\u307E\u305B\u3093\u3002`twp login` \u3092\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044\u3002\n");return 1}let model=runtime.configuredModel??"";let catalog=null;if(model===""){catalog=await runtime.loadCatalog();const picked=pickModel(catalog,void 0);model=picked.model;if(catalog.source!=="server"){err(`\u26A0 \u30E2\u30C7\u30EB\u4E00\u89A7\u3092\u53D6\u5F97\u3067\u304D\u306A\u304B\u3063\u305F\u305F\u3081 ${model}\
7
8
  \u3067\u5B9F\u884C\u3057\u307E\u3059\uFF08${catalog.source}\uFF09
8
9
  `)}}else if(floorNeedsRefresh(cachedFloor.fetchedAt)){catalog=await runtime.loadCatalog()}if(catalog!==null&&enforceMinSupportedVersion({current:opts.version,floor:catalog.minSupportedVersion,write:err})){return 1}const controller=new AbortController;let interrupted=false;const onSigint=()=>{interrupted=true;controller.abort()};process.on("SIGINT",onSigint);let wroteText=false;let ownedAudit=null;let cancelCatalogRefresh=()=>void 0;try{const mode=getMode(opts.mode);const toolkit=createTwpToolkit(
9
10
  runtime,opts.version);void toolkit.refreshCatalog();cancelCatalogRefresh=()=>toolkit.cancelCatalogRefresh();const resident=buildResidentSet(mode,{...residentInputs(toolkit),...opts.permissionMode!==void 0?{permissionMode:opts.permissionMode}:{},permissionLayers});const audit=deps.audit??(ownedAudit=createAuditLogger({mode:mode.id,permissionMode:opts.permissionMode,model,cwd:process.cwd(),cliVersion:opts.version,interactive:false,onOpen:file=>err(`audit: ${file}
10
- `)}));const result=await runTurn(runtime.client,runtime.context,{input:prompt,model,system:buildSystemPrompt({cwd:displayCwd(),branch:currentBranch(),modeLabel:mode.label,cliVersion:opts.version,toolNames:resident.tools.map(t=>t.name),...mode.prompt!==void 0?{modePrompt:mode.prompt}:{}}),signal:controller.signal,onTextDelta:delta=>{wroteText=true;out(stripTerminalControls(delta))},tools:resident.tools,execute:{mode,ctx:{cwd:process.cwd()},sessionAllow:new Set,permissionLayers,...opts.permissionMode!==
11
- void 0?{permissionMode:opts.permissionMode}:{},resolveTool:toolkit.resolveTool,prepareIndirect:toolkit.prepareIndirect,audit},onToolUse:()=>{if(wroteText){out("\n");wroteText=false}},onToolResult:(call,result2)=>err(`tool: ${call.name} \u2192 ${result2.denied===true?"denied":result2.isError===true?"error":"ok"}
11
+ `)}));const spec=specFor(catalog??runtime.loadCachedCatalog?.()??{ids:[],source:"builtin",fetchedAt:null,minSupportedVersion:null},model);const turnTools=spec.tools?resident.tools:[];const result=await runTurn(runtime.client,runtime.context,{input:prompt,model,spec,system:buildSystemPrompt({cwd:displayCwd(),branch:currentBranch(),modeLabel:mode.label,cliVersion:opts.version,toolNames:turnTools.map(t=>t.name),...mode.prompt!==void 0?{modePrompt:mode.prompt}:{}}),signal:controller.signal,onTextDelta:delta=>{
12
+ wroteText=true;out(stripTerminalControls(delta))},tools:turnTools,execute:{mode,ctx:{cwd:process.cwd()},sessionAllow:new Set,permissionLayers,...opts.permissionMode!==void 0?{permissionMode:opts.permissionMode}:{},resolveTool:toolkit.resolveTool,prepareIndirect:toolkit.prepareIndirect,audit},onToolUse:()=>{if(wroteText){out("\n");wroteText=false}},onToolResult:(call,result2)=>err(`tool: ${call.name} \u2192 ${result2.denied===true?"denied":result2.isError===true?"error":"ok"}
12
13
  `)});if(result.text!==""&&!result.text.endsWith("\n"))out("\n");const u=result.usage;err(`usage: model=${model} input=${u.inputTokens} cache_read=${u.cacheReadTokens} cache_write=${u.cacheWriteTokens} output=${u.outputTokens}
13
14
  `);if(result.droppedMessages>0){err(`\u26A0 \u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u4E0A\u9650\u306E\u305F\u3081\u53E4\u3044\u3084\u308A\u53D6\u308A ${result.droppedMessages} \u4EF6\u3092\u843D\u3068\u3057\u307E\u3057\u305F
14
15
  `)}if(result.maxStepsReached){err("\u26A0 \u30C4\u30FC\u30EB\u5B9F\u884C\u306E\u5F80\u5FA9\u304C\u4E0A\u9650\u306B\u9054\u3057\u305F\u305F\u3081\u6253\u3061\u5207\u308A\u307E\u3057\u305F\uFF08\u7D9A\u304D\u306F\u540C\u3058\u4F1A\u8A71\u3067\u518D\u5EA6\u6307\u793A\u3057\u3066\u304F\u3060\u3055\u3044\uFF09\n");return 1}if(result.upstreamError!==null){err(`\u30E2\u30C7\u30EB\u306E\u5FDC\u7B54\u304C\u9014\u4E2D\u3067\u7D42\u308F\u308A\u307E\u3057\u305F: ${result.upstreamError}
@@ -1,4 +1,4 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{ASSIGNED_PROJECT_COLUMNS,assignedProjectItems,projectDomain}from"./chunk-X2WD2H3B.js";import"./chunk-QXYY7DUV.js";import"./chunk-HKEW6XIC.js";import"./chunk-EXT4AIDF.js";import"./chunk-CADCERVL.js";import"./chunk-RX5HWI4L.js";import"./chunk-JJSBBWJ5.js";import"./chunk-6LSQCOCJ.js";import"./chunk-RSSPNFSK.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import"./chunk-MI6HVYR2.js";
3
+ import{ASSIGNED_PROJECT_COLUMNS,assignedProjectItems,projectDomain}from"./chunk-F7IMEUVC.js";import"./chunk-QXYY7DUV.js";import"./chunk-HKEW6XIC.js";import"./chunk-EXT4AIDF.js";import"./chunk-CADCERVL.js";import"./chunk-RX5HWI4L.js";import"./chunk-JJSBBWJ5.js";import"./chunk-6LSQCOCJ.js";import"./chunk-RSSPNFSK.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import"./chunk-MI6HVYR2.js";
4
4
  import"./chunk-II5RVJQN.js";import"./chunk-PS5QFKHB.js";import"./chunk-3ZRMMBP5.js";import"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-EDF4U5BT.js";import"./chunk-RZVI6PMW.js";import"./chunk-QQRJLH6B.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";export{ASSIGNED_PROJECT_COLUMNS,assignedProjectItems,projectDomain};
@@ -1,3 +1,3 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{loadDomain}from"./chunk-JYASAM2R.js";import"./chunk-VSJBJXZO.js";export{loadDomain};
3
+ import{loadDomain}from"./chunk-YPULDSJ3.js";import"./chunk-VSJBJXZO.js";export{loadDomain};
@@ -1,4 +1,4 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{CURATED_PAGING_VOCABULARY,buildPrepareContext,checkOutTarget,exitCodeFor,fetchAllPages,outputValue,reportError,requiresYes,resolvePaging,runDomain}from"./chunk-OBILH2O7.js";import"./chunk-JYASAM2R.js";import"./chunk-PO35MCYP.js";import"./chunk-Q3B65OFC.js";import"./chunk-GFLGXGWE.js";import"./chunk-LDBYJPRD.js";import"./chunk-RX5HWI4L.js";import"./chunk-RSSPNFSK.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";
3
+ import{CURATED_PAGING_VOCABULARY,buildPrepareContext,checkOutTarget,exitCodeFor,fetchAllPages,outputValue,reportError,requiresYes,resolvePaging,runDomain}from"./chunk-AK7CNRVB.js";import"./chunk-YPULDSJ3.js";import"./chunk-PO35MCYP.js";import"./chunk-Q3B65OFC.js";import"./chunk-GFLGXGWE.js";import"./chunk-LDBYJPRD.js";import"./chunk-RX5HWI4L.js";import"./chunk-RSSPNFSK.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";
4
4
  import"./chunk-MI6HVYR2.js";import"./chunk-II5RVJQN.js";import"./chunk-3ZRMMBP5.js";import"./chunk-VFPY2A23.js";import"./chunk-PECIBNFD.js";import"./chunk-XNLIEUAW.js";import"./chunk-J7QYPKVK.js";import"./chunk-EDF4U5BT.js";import"./chunk-RZVI6PMW.js";import"./chunk-MLRBDF44.js";import"./chunk-QQRJLH6B.js";import"./chunk-74BPZOKU.js";import"./chunk-UREA4ZIG.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";export{CURATED_PAGING_VOCABULARY,buildPrepareContext,checkOutTarget,exitCodeFor,fetchAllPages,outputValue,reportError,requiresYes,resolvePaging,runDomain};
@@ -1,3 +1,3 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{fetchLatestVersion,isBehindLatest,runUpdate}from"./chunk-KZQGIM2C.js";import"./chunk-JQBXLZTJ.js";import"./chunk-D233KKXW.js";import"./chunk-PMOUHEJQ.js";import"./chunk-XNLIEUAW.js";import"./chunk-J7QYPKVK.js";import"./chunk-CH6QU76P.js";import"./chunk-DXXFUNYN.js";import"./chunk-5WGOHFAS.js";import"./chunk-EDF4U5BT.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";export{fetchLatestVersion,isBehindLatest,runUpdate};
3
+ import{fetchLatestVersion,isBehindLatest,runUpdate}from"./chunk-KRPJ4UFW.js";import"./chunk-TVTJRNUC.js";import"./chunk-D233KKXW.js";import"./chunk-PMOUHEJQ.js";import"./chunk-XNLIEUAW.js";import"./chunk-J7QYPKVK.js";import"./chunk-CH6QU76P.js";import"./chunk-DXXFUNYN.js";import"./chunk-5WGOHFAS.js";import"./chunk-EDF4U5BT.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";export{fetchLatestVersion,isBehindLatest,runUpdate};
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{ASSIGNED_PROJECT_COLUMNS,assignedProjectItems}from"./chunk-X2WD2H3B.js";import{FISCAL_YEAR_FLAG,fiscalYear,skillNames}from"./chunk-NLCJXS5S.js";import{LICENSE_FEATURE_NAMES,levelHoldsSeat,permissionMovesSeat,readLicenses}from"./chunk-HYBXFEHH.js";import{CONCURRENCY,exportOperation,mapPool,pacedSender}from"./chunk-7PTFN3H7.js";import{readCsvFileText}from"./chunk-QLENN5DD.js";import"./chunk-QXYY7DUV.js";import{USER_REF_FLAG,USER_REF_HELP,prepareUser,userPath}from"./chunk-HKEW6XIC.js";
3
+ import{ASSIGNED_PROJECT_COLUMNS,assignedProjectItems}from"./chunk-F7IMEUVC.js";import{FISCAL_YEAR_FLAG,fiscalYear,skillNames}from"./chunk-NLCJXS5S.js";import{LICENSE_FEATURE_NAMES,levelHoldsSeat,permissionMovesSeat,readLicenses}from"./chunk-HYBXFEHH.js";import{CONCURRENCY,exportOperation,mapPool,pacedSender}from"./chunk-7PTFN3H7.js";import{readCsvFileText}from"./chunk-QLENN5DD.js";import"./chunk-QXYY7DUV.js";import{USER_REF_FLAG,USER_REF_HELP,prepareUser,userPath}from"./chunk-HKEW6XIC.js";
4
4
  import"./chunk-EXT4AIDF.js";import{createFlags,fieldBody,hasAnyField,resolveRefFields,updateFlags}from"./chunk-CADCERVL.js";import{repeatedValues}from"./chunk-RX5HWI4L.js";import{booleanText,boundedText,isoDate,isoDateValue}from"./chunk-JJSBBWJ5.js";import"./chunk-6LSQCOCJ.js";import{DEPARTMENTS_PATH,ORG_MASTER_LIMIT,POSITIONS_PATH}from"./chunk-RSSPNFSK.js";import{ResolveError,isSafePathSegment}from"./chunk-HVZUXLQ4.js";import{ApiError}from"./chunk-JA5A6UJ2.js";
5
5
  import"./chunk-H4CDX4TX.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger,shellQuote}from"./chunk-MI6HVYR2.js";import"./chunk-II5RVJQN.js";import{requireResolved,singleRef,withResolved}from"./chunk-PS5QFKHB.js";import{isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiRejectedError,ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-EDF4U5BT.js";import"./chunk-RZVI6PMW.js";
6
6
  import"./chunk-QQRJLH6B.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";import fs from"fs";var ASSIGNMENT_COLUMNS=["id","department_name","position_name","start_date","end_date","is_primary","is_current","is_approval_route","effective_status"];function assignmentRows(body){const response=isRecord(body)&&"response"in body?body["response"]:body;const list=isRecord(response)?response["list"]:void 0;if(!Array.isArray(list)){throw new ApiResponseError("\u6240\u5C5E\u4E00\u89A7\u306E\u5FDC\u7B54\u306B list \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tocca-systems/twp-cli",
3
- "version": "0.80.0",
3
+ "version": "0.81.0",
4
4
  "description": "TWP CLI — Tocca Working Platform の CLI 型統合インターフェース(AIエージェントハーネス)",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,41 +0,0 @@
1
- import { createRequire as __twpCreateRequire } from 'node:module';
2
- const require = __twpCreateRequire(import.meta.url);
3
- import{isTrustworthyCacheFile,writePrivateFileAtomic}from"./chunk-D233KKXW.js";import{AuthSession,loadCredentials,withFileLock}from"./chunk-XNLIEUAW.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import{parseVersionCore}from"./chunk-DXXFUNYN.js";import{effectiveApiUrl,effectiveRelayUrl,resolveConfiguredModel,resolveProfile}from"./chunk-EDF4U5BT.js";import{ensureTwpHome,twpHomeDir}from"./chunk-RZVI6PMW.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";var MAX_EVENT_BYTES=8*1024*1024;var SseBufferOverflowError=class extends Error{constructor(limit){super(`SSE \u306E\u30A4\u30D9\u30F3\u30C8\u5883\u754C\uFF08\u7A7A\u884C\uFF09\u304C ${limit} \u30D0\u30A4\u30C8\u4EE5\u5185\u306B\u73FE\u308C\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u4E0A\u6D41\u306E\u5FDC\u7B54\u304C\u58CA\u308C\u3066\u3044\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002`)}};var SseParser=class{constructor(maxEventBytes=MAX_EVENT_BYTES){this.maxEventBytes=maxEventBytes}maxEventBytes;buffer="";pendingCr=false;push(chunk){
4
- let pending=this.pendingCr?`\r${chunk}`:chunk;this.pendingCr=pending.endsWith("\r");if(this.pendingCr)pending=pending.slice(0,-1);this.buffer+=pending.replace(/\r\n/g,"\n").replace(/\r/g,"\n");if(this.buffer.length>this.maxEventBytes){this.buffer="";this.pendingCr=false;throw new SseBufferOverflowError(this.maxEventBytes)}const events=[];for(;;){const boundary=this.buffer.indexOf("\n\n");if(boundary===-1)break;const block=this.buffer.slice(0,boundary);this.buffer=this.buffer.slice(boundary+2);const parsed=parseBlock(
5
- block);if(parsed)events.push(parsed)}return events}flush(){const rest=(this.pendingCr?`${this.buffer}
6
- `:this.buffer).trim();this.buffer="";this.pendingCr=false;if(rest==="")return[];const parsed=parseBlock(rest);return parsed?[parsed]:[]}};function parseBlock(block){let event="message";const data=[];for(const line of block.split("\n")){if(line.startsWith(":"))continue;const colon=line.indexOf(":");const field=colon===-1?line:line.slice(0,colon);let value=colon===-1?"":line.slice(colon+1);if(value.startsWith(" "))value=value.slice(1);if(field==="event")event=value;else if(field==="data")data.push(
7
- value)}if(data.length===0)return null;return{event,data:data.join("\n")}}var MODELS=[{id:"claude-opus-5",label:"Claude Opus 5",note:"\u6700\u3082\u9AD8\u6027\u80FD\u3002\u65E2\u5B9A"},{id:"claude-sonnet-5",label:"Claude Sonnet 5",note:"\u30D0\u30E9\u30F3\u30B9\u578B"},{id:"claude-haiku-4-5",label:"Claude Haiku 4.5",note:"\u9AD8\u901F\u30FB\u4F4E\u30B3\u30B9\u30C8"}];var DEFAULT_MODEL="claude-opus-5";function isSafeModelId(id){return/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/.test(id)}function modelLabel(id){const known=MODELS.find(m=>m.id===id);if(known)return known.label;
8
- return prettifyClaudeId(id)??stripTerminalControls(id).slice(0,128)}function prettifyClaudeId(id){const match=/^claude-([a-z]+)((?:-\d+)+)$/.exec(id);if(!match)return null;const family=match[1]??"";const version=(match[2]??"").replace(/^-/,"").split("-").join(".");return`Claude ${family.charAt(0).toUpperCase()}${family.slice(1)} ${version}`}function modelNote(id){return MODELS.find(m=>m.id===id)?.note??""}function toModelInfos(ids){return ids.map(id=>({id,label:modelLabel(id),note:modelNote(id)}))}function blockLength(block){if(block.type==="text")return block.text.length;if(block.type==="tool_result")return block.content.length;return block.name.length+JSON.stringify(block.input).length}function emptyUsage(){return{inputTokens:0,cacheReadTokens:0,cacheWriteTokens:0,outputTokens:0}}var RelayError=class extends Error{constructor(kind,message,status){super(message);this.kind=kind;this.status=status;this.name="RelayError"}kind;status};var MODELS_TIMEOUT_MS=5e3;var RelayClient=class{constructor(relayUrl,session,fetchImpl=httpFetch,cliVersion="\
9
- 0.0.0-dev"){this.relayUrl=relayUrl;this.session=session;this.fetchImpl=fetchImpl;this.cliVersion=cliVersion}relayUrl;session;fetchImpl;cliVersion;async fetchModelCatalog(){const res=await this.send("GET","/api/cli/v1/models",void 0,AbortSignal.timeout(MODELS_TIMEOUT_MS));const body=await res.json().catch(()=>null);const ids=(body?.models??[]).map(m=>m.id).filter(id=>typeof id==="string"&&isSafeModelId(id));if(ids.length===0){throw new RelayError("upstream","\u30E2\u30C7\u30EB\u4E00\u89A7\u304C\u7A7A\u3067\u3057\u305F\uFF08\u30EA\u30EC\u30FC\u306E\u8A2D\u5B9A\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\uFF09")}
10
- const floor=body?.min_supported_version;const minSupportedVersion=typeof floor==="string"&&parseVersionCore(floor)!==null?floor.trim():null;return{ids,minSupportedVersion}}async stream(request,hooks){let res;try{res=await this.send("POST","/api/cli/v1/messages/stream",toWireBody(request),hooks.signal)}catch(err){if(isAbortError(err)||hooks.signal?.aborted===true){return{text:"",usage:emptyUsage(),toolUses:[],stopReason:null,aborted:true,upstreamError:null}}throw err}const body=res.body;if(!body){
11
- throw new RelayError("upstream","\u30EA\u30EC\u30FC\u304C\u5FDC\u7B54\u672C\u6587\u3092\u8FD4\u3057\u307E\u305B\u3093\u3067\u3057\u305F")}const parser=new SseParser;const decoder=new TextDecoder;const usage=emptyUsage();let text="";let stopReason=null;let streamError=null;const reader=body.getReader();const building=new Map;const toolUses=[];const finalizeBlock=index=>{const pending=building.get(index);if(!pending)return;building.delete(index);const input=pending.json.trim()===""?{}:safeJson(pending.
12
- json);if(input===null){streamError=`\u30C4\u30FC\u30EB ${pending.name} \u306E\u5F15\u6570\u3092\u89E3\u91C8\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F`;return}toolUses.push({type:"tool_use",id:pending.id,name:pending.name,input})};const handle=events=>{for(const ev of events){const parsed=safeJson(ev.data);if(!parsed)continue;const type=typeof parsed["type"]==="string"?parsed["type"]:ev.event;if(type==="message_start"){const message=parsed["message"];applyUsage(usage,message?.usage);continue}
13
- if(type==="content_block_start"){const block=parsed["content_block"];const index=numberOr(parsed["index"],-1);if(block?.type==="tool_use"&&typeof block.id==="string"&&typeof block.name==="string"){const seeded=block.input;const initial=typeof seeded==="object"&&seeded!==null&&!Array.isArray(seeded)?JSON.stringify(seeded):"";building.set(index,{id:block.id,name:block.name,json:initial==="{}"?"":initial})}continue}if(type==="content_block_delta"){const delta=parsed["delta"];if(delta?.type==="text_\
14
- delta"&&typeof delta.text==="string"&&delta.text!==""){text+=delta.text;hooks.onTextDelta(delta.text);continue}if(delta?.type==="input_json_delta"&&typeof delta.partial_json==="string"){const pending=building.get(numberOr(parsed["index"],-1));if(pending)pending.json+=delta.partial_json}continue}if(type==="content_block_stop"){finalizeBlock(numberOr(parsed["index"],-1));continue}if(type==="message_delta"){applyUsage(usage,parsed["usage"]);const delta=parsed["delta"];if(typeof delta?.stop_reason===
15
- "string")stopReason=delta.stop_reason;continue}if(type==="error"){const err=parsed["error"];streamError=typeof err?.message==="string"?err.message:"\u30B9\u30C8\u30EA\u30FC\u30E0\u304C\u4E2D\u65AD\u3055\u308C\u307E\u3057\u305F"}}};const onAbort=()=>{void reader.cancel().catch(()=>void 0)};if(hooks.signal){if(hooks.signal.aborted)onAbort();else hooks.signal.addEventListener("abort",onAbort,{once:true})}try{for(;;){const{done,value}=await reader.read();if(done)break;handle(parser.push(decoder.decode(
16
- value,{stream:true})))}handle(parser.flush())}catch(err){if(err instanceof SseBufferOverflowError){streamError=err.message}else if(!isAbortError(err)&&hooks.signal?.aborted!==true){throw new RelayError("network",`\u30B9\u30C8\u30EA\u30FC\u30E0\u304C\u5207\u65AD\u3055\u308C\u307E\u3057\u305F: ${errorMessage(err)}`)}}finally{hooks.signal?.removeEventListener("abort",onAbort);void reader.cancel().catch(()=>void 0)}for(const index of[...building.keys()])finalizeBlock(index);return{text,usage,toolUses,
17
- stopReason,aborted:hooks.signal?.aborted===true,upstreamError:streamError===null?null:stripTerminalControls(streamError)}}async send(method,path2,body,signal){let token;try{token=await this.session.getAccessToken()}catch(err){throw new RelayError("not_logged_in",errorMessage(err))}let res=await this.fetchOrThrow(method,path2,token,body,signal);if(res.status===401){try{token=await this.session.refresh(token)}catch(err){throw new RelayError("not_logged_in",errorMessage(err))}res=await this.fetchOrThrow(
18
- method,path2,token,body,signal)}if(!res.ok)throw await toRelayError(res);return res}async fetchOrThrow(method,path2,token,body,signal){try{return await this.fetchImpl(`${this.relayUrl}${path2}`,{method,headers:{Accept:body===void 0?"application/json":"text/event-stream, application/json",Authorization:`Bearer ${token}`,"User-Agent":`twp-cli/${this.cliVersion}`,...body!==void 0?{"Content-Type":"application/json"}:{}},...body!==void 0?{body:JSON.stringify(body)}:{},...signal?{signal}:{}})}catch(err){
19
- if(isAbortError(err))throw err;throw new RelayError("network",`\u30E2\u30C7\u30EB\u53D6\u6B21\u30B5\u30FC\u30D0\u306B\u63A5\u7D9A\u3067\u304D\u307E\u305B\u3093\uFF08${this.relayUrl}\uFF09: ${errorMessage(err)}`)}}};function toWireBody(request){const messages=request.messages.map((m,i)=>({role:m.role,content:m.content.map((block,j)=>{const isLastBlockOfLastMessage=i===request.messages.length-1&&j===m.content.length-1;return isLastBlockOfLastMessage&&m.role==="user"?{...block,cache_control:{type:"\
20
- ephemeral"}}:block})}));return{model:request.model,max_tokens:request.maxTokens,...request.system!==void 0?{system:request.system}:{},...request.tools&&request.tools.length>0?{tools:request.tools}:{},messages}}async function toRelayError(res){const body=await res.json().catch(()=>null);const nested=typeof body?.error==="object"&&body.error!==null?body.error:void 0;const message=stripTerminalControls(body?.message??nested?.message??`HTTP ${res.status}`);if(res.status===401){return new RelayError(
21
- "unauthorized","\u30E2\u30C7\u30EB\u53D6\u6B21\u306E\u8A8D\u8A3C\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002`twp login`\uFF08\u30D6\u30E9\u30A6\u30B6\u59D4\u8B72\uFF09\u307E\u305F\u306F `twp login --password` \u3067\u30ED\u30B0\u30A4\u30F3\u3057\u76F4\u3057\u3066\u304F\u3060\u3055\u3044\uFF08`twp login --token` \u3067\u4FDD\u5B58\u3057\u305F\u901A\u5E38\u30C8\u30FC\u30AF\u30F3\u306F\u30E2\u30C7\u30EB\u53D6\u6B21\u306B\u306F\u4F7F\u3048\u307E\u305B\u3093\uFF09\u3002",401)}if(res.status===403){
22
- return new RelayError("cli_disabled",message,403)}if(res.status===429){return new RelayError("rate_limit",message,429)}if(res.status===400){const detail=body?.details;if(Array.isArray(detail?.allowed_models)){return new RelayError("model_not_allowed",`${message}
23
- \u5229\u7528\u3067\u304D\u308B\u30E2\u30C7\u30EB: ${detail.allowed_models.join(" / ")}`,400)}return new RelayError("validation",message,400)}if(res.status===503){return new RelayError("unavailable",message,503)}return new RelayError("upstream",message,res.status)}function applyUsage(target,source){if(typeof source!=="object"||source===null)return;const usage=source;target.inputTokens=numberOr(usage["input_tokens"],target.inputTokens);target.cacheReadTokens=numberOr(usage["cache_read_input_tokens"],
24
- target.cacheReadTokens);target.cacheWriteTokens=numberOr(usage["cache_creation_input_tokens"],target.cacheWriteTokens);target.outputTokens=numberOr(usage["output_tokens"],target.outputTokens)}function numberOr(value,fallback){return typeof value==="number"&&Number.isFinite(value)?value:fallback}function safeJson(text){try{const parsed=JSON.parse(text);return typeof parsed==="object"&&parsed!==null?parsed:null}catch{return null}}function isAbortError(err){return err instanceof Error&&(err.name===
25
- "AbortError"||err.name==="TimeoutError")}function errorMessage(err){return err instanceof Error?err.message:String(err)}import fs from"fs";import path from"path";function modelCachePath(env=process.env){return path.join(twpHomeDir(env),"models.json")}function modelCacheLockPath(env=process.env){return path.join(twpHomeDir(env),"models.lock")}function builtinCatalog(){return{ids:MODELS.map(m=>m.id),source:"builtin",fetchedAt:null,minSupportedVersion:null}}function readCacheFile(env){const file=modelCachePath(env);if(!isTrustworthyCacheFile(file)){return{version:1,entries:{}}}const parsed=JSON.parse(fs.readFileSync(file,"utf8"));if(!parsed||typeof parsed!==
26
- "object"||typeof parsed.entries!=="object"||parsed.entries===null){return{version:1,entries:{}}}return parsed}function readFloor(entry){const raw=entry.min_supported_version;return typeof raw==="string"&&parseVersionCore(raw)!==null?raw.trim():null}function loadCachedVersionFloor(profile,relayUrl,env=process.env){try{const entry=readCacheFile(env).entries?.[profile];if(!entry||entry.relay_url!==relayUrl)return{minSupportedVersion:null,fetchedAt:null};return{minSupportedVersion:readFloor(entry),fetchedAt:typeof entry.
27
- fetched_at==="string"?entry.fetched_at:null}}catch{return{minSupportedVersion:null,fetchedAt:null}}}function loadCachedCatalog(profile,relayUrl,env=process.env){try{const parsed=readCacheFile(env).entries?.[profile];if(!parsed||parsed.relay_url!==relayUrl)return null;const ids=Array.isArray(parsed.models)?parsed.models.filter(id=>typeof id==="string"&&isSafeModelId(id)):[];if(ids.length===0)return null;return{ids,source:"cache",fetchedAt:typeof parsed.fetched_at==="string"?parsed.fetched_at:null,
28
- minSupportedVersion:readFloor(parsed)}}catch{return null}}async function saveCatalog(profile,relayUrl,ids,minSupportedVersion,env=process.env,now=Date.now){try{ensureTwpHome(env);await withFileLock(modelCacheLockPath(env),async()=>{let file;try{file=readCacheFile(env)}catch{file={version:1,entries:{}}}const entries={...file.entries??{}};entries[profile]={relay_url:relayUrl,fetched_at:new Date(now()).toISOString(),models:ids,min_supported_version:minSupportedVersion};writePrivateFileAtomic(modelCachePath(
29
- env),`${JSON.stringify({version:1,entries},null,2)}
30
- `)})}catch{}}async function loadCatalog(client,profile,relayUrl,env=process.env){try{const{ids,minSupportedVersion}=await client.fetchModelCatalog();await saveCatalog(profile,relayUrl,ids,minSupportedVersion,env);return{ids,source:"server",fetchedAt:new Date().toISOString(),minSupportedVersion}}catch{return loadCachedCatalog(profile,relayUrl,env)??builtinCatalog()}}function pickModel(catalog,configured){const fallback=catalog.ids[0]??MODELS[0]?.id??DEFAULT_MODEL;if(!configured||configured==="")return{
31
- model:fallback};if(catalog.ids.includes(configured))return{model:configured};if(catalog.source==="builtin"){return{model:configured,warning:`\u30E2\u30C7\u30EB\u4E00\u89A7\u3092\u53D6\u5F97\u3067\u304D\u306A\u304B\u3063\u305F\u305F\u3081\u3001\u6307\u5B9A\u3055\u308C\u305F ${configured} \u3092\u305D\u306E\u307E\u307E\u4F7F\u3044\u307E\u3059\uFF08\u5229\u7528\u3067\u304D\u306A\u3044\u5834\u5408\u306F\u30EA\u30EC\u30FC\u304C 400 \u3092\u8FD4\u3057\u307E\u3059\uFF09`}}return{model:fallback,warning:`${configured}\
32
- \u306F\u5229\u7528\u3067\u304D\u306A\u3044\u305F\u3081 ${fallback} \u3092\u4F7F\u3044\u307E\u3059\uFF08\u5229\u7528\u53EF\u80FD: ${catalog.ids.join(" / ")}\uFF09`}}var DEFAULT_CONTEXT_WINDOW_TOKENS=2e5;var DEFAULT_MAX_TOKENS=8192;var TRIM_THRESHOLD=.8;var ContextManager=class{constructor(contextWindowTokens=DEFAULT_CONTEXT_WINDOW_TOKENS){this.contextWindowTokens=contextWindowTokens}contextWindowTokens;messages=[];totals=emptyUsage();turns=0;lastPromptTokens=0;pendingChars=0;droppedMessages=0;addUser(text){this.pendingChars+=text.length;const last=this.messages[this.messages.length-1];if(last?.role==="user"){last.content.push({type:"text",text});return}this.
33
- messages.push({role:"user",content:[{type:"text",text}]})}addToolExchange(assistantText,toolUses,results){if(toolUses.length===0)return;const blocks=[];if(assistantText.trim()!=="")blocks.push({type:"text",text:assistantText});blocks.push(...toolUses);this.messages.push({role:"assistant",content:blocks});this.messages.push({role:"user",content:results});this.pendingChars+=blocks.reduce((n,b)=>n+blockLength(b),0);this.pendingChars+=results.reduce((n,b)=>n+blockLength(b),0)}completeTurn(assistantText){
34
- const text=assistantText.trim();if(text===""){const last=this.messages[this.messages.length-1];if(last?.role==="user"&&!hasToolResult(last)){this.messages.pop();this.pendingChars=Math.max(0,this.pendingChars-lengthOf(last))}return false}this.messages.push({role:"assistant",content:[{type:"text",text:assistantText}]});this.pendingChars+=assistantText.length;this.turns+=1;return true}applyUsage(usage){this.totals={inputTokens:this.totals.inputTokens+usage.inputTokens,cacheReadTokens:this.totals.cacheReadTokens+
35
- usage.cacheReadTokens,cacheWriteTokens:this.totals.cacheWriteTokens+usage.cacheWriteTokens,outputTokens:this.totals.outputTokens+usage.outputTokens};const prompt=usage.inputTokens+usage.cacheReadTokens+usage.cacheWriteTokens;if(prompt>0){this.lastPromptTokens=prompt;this.pendingChars=0}}history(){return this.messages.map(m=>({role:m.role,content:m.content.map(copyBlock)}))}isEmpty(){return this.messages.length===0}clear(){this.messages=[];this.totals=emptyUsage();this.turns=0;this.lastPromptTokens=
36
- 0;this.pendingChars=0;this.droppedMessages=0}trimToFit(maxTokens=DEFAULT_MAX_TOKENS){const limit=Math.max(1,Math.floor((this.contextWindowTokens-maxTokens)*TRIM_THRESHOLD));let dropped=0;while(this.estimatedPromptTokens()>limit&&this.messages.length>1){const removed=this.messages.shift();if(!removed)break;const removedTokens=Math.ceil(lengthOf(removed)/4);this.lastPromptTokens=Math.max(0,this.lastPromptTokens-removedTokens);dropped+=1}while(this.messages.length>0){const head2=this.messages[0];if(!head2)
37
- break;const orphanResult=hasToolResult(head2)&&this.messages.length>1;if(head2.role!=="assistant"&&!orphanResult)break;this.messages.shift();this.lastPromptTokens=Math.max(0,this.lastPromptTokens-Math.ceil(lengthOf(head2)/4));dropped+=1}const head=this.messages[0];if(head&&hasToolResult(head)){const before=lengthOf(head);const kept=head.content.filter(block=>block.type!=="tool_result");head.content=kept.length>0?kept:[{type:"text",text:"\uFF08\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u4E0A\u9650\u306E\u305F\u3081\u3001\u76F4\u524D\u306E\u30C4\u30FC\u30EB\u5B9F\u884C\u7D50\u679C\u306F\u5C65\u6B74\u304B\u3089\u5916\u308C\u307E\u3057\u305F\uFF09"}];
38
- const freed=before-lengthOf(head);this.lastPromptTokens=Math.max(0,this.lastPromptTokens-Math.ceil(freed/4));this.pendingChars=Math.max(0,this.pendingChars-freed);dropped+=1}this.droppedMessages+=dropped;return dropped}estimatedPromptTokens(){if(this.lastPromptTokens===0){return Math.ceil(this.totalChars()/4)}return this.lastPromptTokens+Math.ceil(this.pendingChars/4)}snapshot(){const used=this.estimatedPromptTokens();const remaining=Math.round((this.contextWindowTokens-used)/this.contextWindowTokens*
39
- 100);return{totals:{...this.totals},turns:this.turns,lastPromptTokens:this.lastPromptTokens,remainingPercent:Math.max(0,Math.min(100,remaining)),droppedMessages:this.droppedMessages}}totalChars(){return this.messages.reduce((sum,m)=>sum+lengthOf(m),0)}};function lengthOf(message){return message.content.reduce((sum,block)=>sum+blockLength(block),0)}function copyBlock(block){return block.type==="tool_use"?{...block,input:{...block.input}}:{...block}}function hasToolResult(message){return message.content.
40
- some(block=>block.type==="tool_result")}function createRuntime(opts){const env=opts.env??process.env;const cwd=opts.cwd??process.cwd();const profile=resolveProfile(opts.profile,env,cwd);const creds=loadCredentials(profile.name,env);const apiUrl=effectiveApiUrl(profile,creds?.api_url,env);const relayUrl=effectiveRelayUrl(profile,creds?.relay_url,env);const session=new AuthSession(profile.name,apiUrl,env);const client=new RelayClient(relayUrl,session,httpFetch,opts.cliVersion);const configured=resolveConfiguredModel(opts.model,profile.name,
41
- env,cwd);return{profileName:profile.name,apiUrl,relayUrl,client,session,context:new ContextManager,loggedIn:creds!==null,configuredModel:configured?.model??null,loadCatalog:()=>loadCatalog(client,profile.name,relayUrl,env),loadCachedFloor:()=>loadCachedVersionFloor(profile.name,relayUrl,env)}}export{modelLabel,toModelInfos,emptyUsage,RelayError,DEFAULT_MAX_TOKENS,builtinCatalog,loadCachedCatalog,pickModel,createRuntime};