@tocca-systems/twp-cli 0.11.0 → 0.13.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.
@@ -0,0 +1,178 @@
1
+ import { createRequire as __twpCreateRequire } from 'node:module';
2
+ const require = __twpCreateRequire(import.meta.url);
3
+ import{PRIVATE_PROJECT_REF,isPrivateProjectRef}from"./chunk-GY7KI5E5.js";import{charCount,readBody}from"./chunk-QVXZEUKN.js";import{acknowledgement,isRecord,pick,requireResolved,singleRef,withResolved}from"./chunk-GFC2ASHE.js";import{repeatedValues}from"./chunk-O52CUEDO.js";import"./chunk-QQRJLH6B.js";import{PRIVATE_TASKS_PATH,TASK_MASTERS}from"./chunk-GXVXQT57.js";import"./chunk-JKSXUBND.js";import{PRIVATE_TASK_KEY_PREFIX,isPrivateTaskKey,isTaskKey}from"./chunk-II5RVJQN.js";
4
+ import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-2SGDY6YP.js";import{ApiResponseError,UsageError}from"./chunk-M3GWY6NT.js";import{isSafePathSegment,safeProjectIdPolicy}from"./chunk-5QCAIKFE.js";import"./chunk-NERYSBA4.js";import"./chunk-RZVI6PMW.js";import"./chunk-J7QYPKVK.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";function classifyTaskRef(ref){const value=ref.trim();if(safeProjectIdPolicy.isDirectId(value))return{kind:"id",value};if(isTaskKey(value))return{kind:"key",value};return{kind:"unknown",value}}function wantsPrivateSurface(input){const project=input.flags.get("--project");return project!==void 0&&isPrivateProjectRef(project)}function taskSurface(input,ref){const project=input.flags.get("--project");const{kind,value}=classifyTaskRef(ref);if(project!==void 0&&isPrivateProjectRef(project)){if(kind===
5
+ "key"&&!isPrivateTaskKey(value)){throw new UsageError(`--project ${PRIVATE_PROJECT_REF}\uFF08\u500B\u4EBA\u30BF\u30B9\u30AF\uFF09\u306B ${value} \u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,`\u500B\u4EBA\u30BF\u30B9\u30AF\u306E\u30AD\u30FC\u306F ${PRIVATE_TASK_KEY_PREFIX}-<\u756A\u53F7> \u306E\u5F62\u3067\u3059\u3002ID\uFF08UUID / ULID\uFF09\u3067\u3082\u6307\u5B9A\u3067\u304D\u307E\u3059\u3002
6
+ \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30BF\u30B9\u30AF\u3092\u6307\u3059\u306A\u3089 --project ${PRIVATE_PROJECT_REF} \u3092\u5916\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return"private"}if(kind==="key"&&isPrivateTaskKey(value)&&project===void 0){throw new UsageError(`${value} \u306F\u500B\u4EBA\u30BF\u30B9\u30AF\u306E\u30AD\u30FC\u306B\u3082\u3001\u30B3\u30FC\u30C9 ${PRIVATE_TASK_KEY_PREFIX} \u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30BF\u30B9\u30AF\u30AD\u30FC\u306B\u3082\u8AAD\u3081\u307E\u3059`,
7
+ `\u3069\u3061\u3089\u3092\u6307\u3059\u304B --project \u3067\u9078\u3093\u3067\u304F\u3060\u3055\u3044\u3002
8
+ \u500B\u4EBA\u30BF\u30B9\u30AF : --project ${PRIVATE_PROJECT_REF}
9
+ \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8: --project ${PRIVATE_TASK_KEY_PREFIX}`)}return"project"}function rejectPrivateSurface(input,what){if(!wantsPrivateSurface(input))return;throw new UsageError(`--project ${PRIVATE_PROJECT_REF}\uFF08\u500B\u4EBA\u30BF\u30B9\u30AF\uFF09\u3067\u306F${what}\u3092\u6271\u3048\u307E\u305B\u3093`,`\u30B5\u30FC\u30D0\u5074\u306B\u500B\u4EBA\u30BF\u30B9\u30AF\u7528\u306E API \u304C\u3042\u308A\u307E\u305B\u3093\u3002TWP \u306E\u753B\u9762\u304B\u3089\u64CD\u4F5C\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}
10
+ async function resolveTaskLocation(input,ctx,ref){rejectPrivateSurface(input,"\u3053\u306E\u64CD\u4F5C");const{kind,value}=classifyTaskRef(ref);if(kind==="key"){if(isPrivateTaskKey(value)&&input.flags.get("--project")===void 0){throw new UsageError(`${value} \u306F\u500B\u4EBA\u30BF\u30B9\u30AF\u306E\u30AD\u30FC\u306B\u3082\u3001\u30B3\u30FC\u30C9 ${PRIVATE_TASK_KEY_PREFIX} \u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30BF\u30B9\u30AF\u30AD\u30FC\u306B\u3082\u8AAD\u3081\u307E\u3059`,`\u3053\u306E\u64CD\u4F5C\u306F\u500B\
11
+ \u4EBA\u30BF\u30B9\u30AF\u306B\u5BFE\u5FDC\u3057\u3066\u3044\u307E\u305B\u3093\uFF08\u30B5\u30FC\u30D0\u5074\u306B API \u304C\u3042\u308A\u307E\u305B\u3093\uFF09\u3002
12
+ \u30B3\u30FC\u30C9 ${PRIVATE_TASK_KEY_PREFIX} \u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30BF\u30B9\u30AF\u3092\u6307\u3059\u306A\u3089 --project ${PRIVATE_TASK_KEY_PREFIX} \u3092\u4ED8\u3051\u3066\u304F\u3060\u3055\u3044\u3002`)}rejectRedundantProject(input,value);const resolved=await ctx.resolver.taskByKey(value);const id=resolved.task["id"];if(!isSafePathSegment(id)){throw new ApiResponseError(`\u30BF\u30B9\u30AF\u30AD\u30FC\u89E3\u6C7A\u306E\u5FDC\u7B54\u306E task.id \u3092\u305D\u306E\u307E\u307E\u4F7F\u3048\u307E\u305B\u3093\uFF08${String(
13
+ id).slice(0,60)}\uFF09\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return{projectId:resolved.projectId,taskId:id}}if(kind==="unknown"){throw new UsageError(`\u30BF\u30B9\u30AF\u306E\u6307\u5B9A\u304C\u300C\u30AD\u30FC\uFF08\u4F8B ABC-123\uFF09\u300D\u306B\u3082\u300CID\uFF08UUID / ULID\uFF09\u300D\u306B\u3082\u898B\u3048\u307E\u305B\u3093: ${ref}`,"\u30AD\u30FC\u306F\u300C\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30B3\u30FC\u30C9-\u756A\u53F7\u300D\u306E\u5F62\u3067\u3059\u3002ID \u3092\u6307\u5B9A\u3059\u308B\u5834\u5408\u306F --project \u3082\u5FC5\u8981\u3067\u3059\u3002")}
14
+ if(kind!=="id"){const exhaustive=kind;throw new Error(`\u672A\u77E5\u306E\u30BF\u30B9\u30AF\u53C2\u7167\u306E\u7A2E\u5225\u3067\u3059: ${String(exhaustive)}`)}return{projectId:await ctx.projectId(input.flags.get("--project")),taskId:value}}function rejectRedundantProject(input,ref){const project=input.flags.get("--project");if(project===void 0)return;if(isPrivateTaskKey(ref)){if(isPrivateProjectRef(project))return;if(project.trim().toLowerCase()===PRIVATE_TASK_KEY_PREFIX.toLowerCase())return;throw new UsageError(
15
+ `\u30AD\u30FC ${ref} \u3068 --project ${project} \u304C\u98DF\u3044\u9055\u3063\u3066\u3044\u307E\u3059`,`${ref} \u304C\u6307\u305B\u308B\u306E\u306F\u6B21\u306E2\u3064\u3060\u3051\u3067\u3059\u3002
16
+ \u500B\u4EBA\u30BF\u30B9\u30AF : --project ${PRIVATE_PROJECT_REF}
17
+ \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8: --project ${PRIVATE_TASK_KEY_PREFIX}\uFF08\u30AD\u30FC\u306E\u63A5\u982D\u8F9E\u3068\u540C\u3058\u30B3\u30FC\u30C9\uFF09
18
+ \u5225\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30BF\u30B9\u30AF\u3092\u6307\u3059\u306A\u3089\u3001\u30AD\u30FC\u3067\u306F\u306A\u304F\u305D\u306E\u30BF\u30B9\u30AF\u306E ID\uFF08UUID / ULID\uFF09\u3092\u6E21\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}throw new UsageError(`\u30AD\u30FC\u5F62\u5F0F\uFF08${ref}\uFF09\u3067\u6307\u5B9A\u3057\u305F\u3068\u304D\u306B --project \u306F\u4F7F\u3048\u307E\u305B\u3093\uFF08--project ${project} \u306F\u7121\u8996\u3055\u308C\u307E\u3059\uFF09`,"\
19
+ \u30AD\u30FC\u306F\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u542B\u3093\u3067\u3044\u308B\u306E\u3067 --project \u3092\u5916\u3057\u3066\u304F\u3060\u3055\u3044\u3002--project \u304C\u8981\u308B\u306E\u306F\u3001\u30BF\u30B9\u30AF\u3092 ID\uFF08UUID / ULID\uFF09\u3067\u6307\u5B9A\u3059\u308B\u3068\u304D\u3060\u3051\u3067\u3059\u3002")}var TASK_REF_FLAG={name:"--task",summary:"\u30BF\u30B9\u30AF\u306E\u30AD\u30FC\uFF08\u4F8B ABC-123\uFF09\u307E\u305F\u306F ID\u3002\u4F4D\u7F6E\u5F15\u6570\u3068\u540C\u3058\u610F\u5473\uFF08\u4E21\u65B9\u6307\u5B9A\u306F\u30A8\u30E9\u30FC\uFF09",
20
+ takesValue:true,placeholder:"<\u30AD\u30FC|ID>"};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\u3002\u30BF\u30B9\u30AF\u3092\u30AD\u30FC\u3067\u6307\u5B9A\u3059\u308B\u3068\u304D\u306F\u4F7F\u3048\u307E\u305B\u3093\u3002${PRIVATE_PROJECT_REF} \u3067\u500B\u4EBA\u30BF\u30B9\u30AF\u3092\u6307\u3057\u307E\u3059`,takesValue:true,placeholder:`\
21
+ <\u30B3\u30FC\u30C9|ID|${PRIVATE_PROJECT_REF}>`};var TASK_REF_HELP=`\u30AD\u30FC\u5F62\u5F0F\uFF08\u4F8B ABC-123\uFF09\u306A\u3089 --project \u306F\u8981\u308A\u307E\u305B\u3093\uFF081\u5F80\u5FA9\u3067\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3054\u3068\u89E3\u6C7A\u3055\u308C\u307E\u3059\uFF09\u3002
22
+ \u30AD\u30FC\u306F\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u542B\u3093\u3067\u3044\u308B\u306E\u3067\u3001\u30AD\u30FC\u3068 --project \u3092\u4E00\u7DD2\u306B\u6307\u5B9A\u3059\u308B\u3068\u30A8\u30E9\u30FC\u306B\u306A\u308A\u307E\u3059\u3002
23
+ ID\uFF08UUID / ULID\uFF09\u3067\u6307\u5B9A\u3059\u308B\u5834\u5408\u3060\u3051 --project\uFF08\u307E\u305F\u306F\u65E2\u5B9A\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\uFF09\u304C\u8981\u308A\u307E\u3059\u3002
24
+ UUID / ULID \u306E\u5F62\u3092\u3057\u305F\u5024\u306F\u3001\u30AD\u30FC\u306E\u5F62\u306B\u3082\u8AAD\u3081\u308B\u3068\u304D\u3067\u3082 ID \u3068\u3057\u3066\u6271\u3044\u307E\u3059\uFF08\u4F8B: \u672B\u5C3E12\u6841\u304C\u5168\u6570\u5B57\u306E UUID\uFF09\u3002\u3053\u306E\u5834\u5408\u306F --project \u304C\u8981\u308A\u307E\u3059\u3002
25
+ --task <\u30AD\u30FC|ID> \u3067\u3082\u540C\u3058\u610F\u5473\u3067\u3059\u3002\u4F4D\u7F6E\u5F15\u6570\u3068 --task \u306E\u4E21\u65B9\u3092\u6307\u5B9A\u3059\u308B\u3068\u30A8\u30E9\u30FC\u306B\u306A\u308A\u307E\u3059\u3002
26
+ ${PRIVATE_TASK_KEY_PREFIX}-<\u756A\u53F7> \u306E\u5F62\u306E\u30AD\u30FC\u3060\u3051\u306F\u4F8B\u5916\u3067\u3001--project \u304C\u5FC5\u9808\u3067\u3059\uFF08\u500B\u4EBA\u30BF\u30B9\u30AF\u306E\u30AD\u30FC\u3068\u3082\u3001\u30B3\u30FC\u30C9 ${PRIVATE_TASK_KEY_PREFIX} \u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30BF\u30B9\u30AF\u30AD\u30FC\u3068\u3082\u8AAD\u3081\u308B\u305F\u3081\uFF09\u3002`;var LIST_COLUMNS=["id","created_at","created_by_name","comment_type","content"];var QUESTION_COLUMN="question";var ANSWER_COLUMN="answer";function summarizeComments(items){const answersByQuestion=new Map;for(const row of items){const answer=isRecord(row)?row["answer_to"]:void 0;if(!isRecord(answer))continue;const target=answer["comment_id"];if(typeof target!=="string"||target==="")continue;answersByQuestion.set(target,selectedKeyText(answer["selected_key"]))}return items.map(row=>{const source=isRecord(
27
+ row)?row:{};const id=typeof source["id"]==="string"?source["id"]:"";const answer=isRecord(source["answer_to"])?selectedKeyText(source["answer_to"]["selected_key"]):answersByQuestion.get(id)??null;const base=pick(row,LIST_COLUMNS);return{id:base["id"],created_at:base["created_at"],created_by_name:base["created_by_name"],comment_type:base["comment_type"],[QUESTION_COLUMN]:questionText(source["question"]),[ANSWER_COLUMN]:answer,content:base["content"]}})}function questionText(question){if(!isRecord(
28
+ question))return null;const options=question["options"];if(!Array.isArray(options))return null;const parts=options.map(option=>{if(!isRecord(option))return null;const key=typeof option["key"]==="string"?option["key"]:null;if(key===null)return null;const label=typeof option["label"]==="string"?option["label"]:"";return label===""?key:`${key}=${label}`}).filter(part=>part!==null);return parts.length===0?null:parts.join(" / ")}function selectedKeyText(selected){if(typeof selected==="string"&&selected!==
29
+ "")return selected;if(Array.isArray(selected)){const keys=selected.filter(key=>typeof key==="string"&&key!=="");if(keys.length>0)return keys.join(",")}return"(\u81EA\u7531\u8A18\u8FF0)"}var WRITE_COLUMNS=["id","task_id","created_at","updated_at","created_by_name","content"];var CONTENT_MAX_CHARS=1e4;var QUESTION_MAX_CHARS=2e3;var CONTENT_HTML_MAX_CHARS=1e5;var OPTION_KEY_MAX_CHARS=10;var OPTION_LABEL_MAX_CHARS=200;var OPTION_MIN=1;var OPTION_MAX=5;var SELECTED_KEY_MAX_CHARS=10;var listPaging=envelopePaging(
30
+ {label:"\u30B3\u30E1\u30F3\u30C8\u4E00\u89A7"});function commentObject(body){const comment=isRecord(body)?body["comment"]:void 0;if(!isRecord(comment)){throw new ApiResponseError("\u30B3\u30E1\u30F3\u30C8\u306E\u5FDC\u7B54\u306B comment \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return comment}var BODY_FLAGS=[{name:"--body-file",summary:"\u672C\u6587\u3092\u30D5\u30A1\u30A4\u30EB\u304B\u3089\u8AAD\u3080\uFF08- \u3067\u6A19\u6E96\u5165\u529B\uFF09\u3002\u6539\u884C\u30FBMarkdown \u3092\u58CA\u3055\u306A\u3044\u4E3B\u7D4C\u8DEF",
31
+ takesValue:true,placeholder:"<\u30D1\u30B9|->"},{name:"--body",summary:"\u672C\u6587\u3092\u76F4\u63A5\u6307\u5B9A\u3059\u308B\uFF08\u4E00\u884C\u5411\u3051\u3002--body-file \u3068\u306E\u4F75\u7528\u306F\u30A8\u30E9\u30FC\uFF09",takesValue:true,placeholder:"<\u6587\u5B57\u5217>"}];var BODY_HELP=`\u672C\u6587\u306F --body-file \u3092\u4E3B\u7D4C\u8DEF\u306B\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u30B7\u30A7\u30EB\u306E\u5F15\u6570\u306B\u8F09\u305B\u308B\u3068\u6539\u884C\u30FBMarkdown \u306E\u898B\u51FA\u3057\uFF08#\uFF09\u30FB
32
+ \u5F15\u7528\u7B26\u3067\u58CA\u308C\u307E\u3059\uFF08gh pr create --body \u3068\u540C\u3058\u554F\u984C\uFF09\u3002--body-file - \u3067\u6A19\u6E96\u5165\u529B\u304B\u3089\u8AAD\u3081\u307E\u3059\u3002
33
+
34
+ \u672C\u6587\u306F\u52A0\u5DE5\u3057\u307E\u305B\u3093\uFF08\u6539\u884C\u30FB\u672B\u5C3E\u306E\u6539\u884C\u30FBCRLF \u306F\u305D\u306E\u307E\u307E\u9001\u308A\u307E\u3059\uFF09\u3002\u843D\u3068\u3059\u306E\u306F\u5148\u982D\u306E UTF-8 BOM \u3060\u3051\u3067\u3059\u3002
35
+ \u7A7A\u30FB\u7A7A\u767D\u306E\u307F\u306E\u672C\u6587\u306F\u6295\u7A3F\u3057\u307E\u305B\u3093\uFF08\u7D42\u4E86\u30B3\u30FC\u30C9 2\uFF09\u3002\u4E0A\u9650\u306F ${CONTENT_MAX_CHARS} \u6587\u5B57\u3067\u3059\u3002`;var COMMENT_REF_FLAG={name:"--comment",summary:"\u30B3\u30E1\u30F3\u30C8\u306E ID\uFF08\u4F4D\u7F6E\u5F15\u6570\u3068\u540C\u3058\u610F\u5473\u3002\u4E21\u65B9\u6307\u5B9A\u306F\u30A8\u30E9\u30FC\uFF09",takesValue:true,placeholder:"<\u30B3\u30E1\u30F3\u30C8ID>"};var COMMENT_REF_HELP="\
36
+ \u30B3\u30E1\u30F3\u30C8 ID \u306F twp task comment list <\u30AD\u30FC> \u306E id \u5217\u304B\u3089\u53D6\u308C\u307E\u3059\u3002\n\u5BFE\u8C61\u306E\u30BF\u30B9\u30AF\u306F --task <\u30AD\u30FC|ID> \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u30B3\u30E1\u30F3\u30C8 ID \u3060\u3051\u3067\u306F\u5F15\u3051\u307E\u305B\u3093\uFF09\u3002";async function prepareCommentTarget(input,ctx,usage){const commentId=singleRef(input,{flag:"--comment",label:"\u30B3\u30E1\u30F3\u30C8",usage});
37
+ if(!isSafePathSegment(commentId)){throw new UsageError(`\u30B3\u30E1\u30F3\u30C8 ID \u306E\u5F62\u5F0F\u3067\u306F\u3042\u308A\u307E\u305B\u3093: ${commentId}`,"\u30B3\u30E1\u30F3\u30C8 ID \u306F twp task comment list <\u30AD\u30FC> \u306E id \u5217\u304B\u3089\u53D6\u308C\u307E\u3059\u3002")}const task=input.flags.get("--task");if(task===void 0||task.trim()===""){throw new UsageError("\u5BFE\u8C61\u306E\u30BF\u30B9\u30AF\u3092 --task <\u30AD\u30FC|ID> \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",
38
+ usage)}const located=await resolveTaskLocation({...input,args:[]},ctx,task.trim());return withResolved(input,{...located,commentId:commentId.trim()})}var QUESTION_FLAGS=[{name:"--ask-question",summary:"\u30AF\u30EA\u30C3\u30AF\u3067\u56DE\u7B54\u3067\u304D\u308B\u8CEA\u554F\u3068\u3057\u3066\u6295\u7A3F\u3059\u308B\uFF08--question \u3068 --option \u304C\u8981\u308B\uFF09",takesValue:false},{name:"--question",summary:`\u8CEA\u554F\u6587\u3092\u76F4\u63A5\u6307\u5B9A\u3059\u308B\uFF08\u4E0A\u9650 ${QUESTION_MAX_CHARS}\
39
+ \u6587\u5B57\uFF09`,takesValue:true,placeholder:"<\u6587\u5B57\u5217>"},{name:"--question-file",summary:"\u8CEA\u554F\u6587\u3092\u30D5\u30A1\u30A4\u30EB\u304B\u3089\u8AAD\u3080\uFF08- \u3067\u6A19\u6E96\u5165\u529B\uFF09",takesValue:true,placeholder:"<\u30D1\u30B9|->"},{name:"--option",summary:`\u9078\u629E\u80A2 \u30AD\u30FC=\u8868\u793A\u6587\uFF08${OPTION_MIN}\u301C${OPTION_MAX}\u56DE\u3002\u30AD\u30FC\u306F${OPTION_KEY_MAX_CHARS}\u6587\u5B57\u4EE5\u5185\uFF09`,takesValue:true,placeholder:"\
40
+ <\u30AD\u30FC=\u8868\u793A\u6587>",repeatable:true},{name:"--multi-select",summary:"\u8907\u6570\u306E\u9078\u629E\u80A2\u3092\u9078\u3079\u308B\u8CEA\u554F\u306B\u3059\u308B",takesValue:false},{name:"--no-free-text",summary:"\u81EA\u7531\u8A18\u8FF0\u3067\u306E\u56DE\u7B54\u3092\u8A31\u3055\u306A\u3044\uFF08\u65E2\u5B9A\u306F\u8A31\u3059\uFF09",takesValue:false}];var ANSWER_FLAGS=[{name:"--answer-to",summary:"\u56DE\u7B54\u3059\u308B\u8CEA\u554F\u30B3\u30E1\u30F3\u30C8\u306E ID\uFF08list \u306E id \u5217\uFF09",
41
+ takesValue:true,placeholder:"<\u30B3\u30E1\u30F3\u30C8ID>"},{name:"--select",summary:`\u9078\u3093\u3060\u9078\u629E\u80A2\u306E\u30AD\u30FC\uFF08\u8907\u6570\u9078\u629E\u306E\u8CEA\u554F\u306A\u3089\u8907\u6570\u56DE\u30FB${SELECTED_KEY_MAX_CHARS}\u6587\u5B57\u4EE5\u5185\uFF09`,takesValue:true,placeholder:"<\u30AD\u30FC>",repeatable:true}];var MENTION_FLAG={name:"--mention",summary:"\u30E1\u30F3\u30B7\u30E7\u30F3\u3059\u308B\u76F8\u624B\uFF08me / \u540D\u524D / \u30E1\u30FC\u30EB / ID\u30FB\u8907\u6570\u56DE\u53EF\uFF09",
42
+ takesValue:true,placeholder:"<me|\u540D\u524D|ID>",repeatable:true};var ATTACHMENT_FLAG={name:"--attachment",summary:"\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u6E08\u307F\u306E\u6DFB\u4ED8 ID \u3092\u7D10\u3065\u3051\u308B\uFF08\u8907\u6570\u56DE\u53EF\u3002\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u306F 7-E \u306E\u7BC4\u56F2\uFF09",takesValue:true,placeholder:"<\u6DFB\u4ED8ID>",repeatable:true};var CONTENT_HTML_FLAG={name:"--content-html-file",summary:`\u30EA\u30C3\u30C1\u30C6\u30AD\u30B9\u30C8\u672C\u6587\u3092\u30D5\u30A1\u30A4\u30EB\u304B\u3089\u8AAD\u3080\uFF08- \u3067\u6A19\u6E96\u5165\u529B\u30FB\u4E0A\u9650 ${CONTENT_HTML_MAX_CHARS}\
43
+ \u6587\u5B57\uFF09`,takesValue:true,placeholder:"<\u30D1\u30B9|->"};var QUESTION_HELP=`\u8CEA\u554F\u3068\u3057\u3066\u6295\u7A3F\u3059\u308B\u306B\u306F --ask-question \uFF0B \u8CEA\u554F\u6587\uFF08--question / --question-file\uFF09\uFF0B \u9078\u629E\u80A2\uFF08--option\uFF09\u304C\u8981\u308A\u307E\u3059\u3002
44
+ \u9078\u629E\u80A2\u306F \u30AD\u30FC=\u8868\u793A\u6587 \u306E\u5F62\u3067 ${OPTION_MIN}\u301C${OPTION_MAX} \u500B\u3002\u30AD\u30FC\u306F${OPTION_KEY_MAX_CHARS}\u6587\u5B57\u4EE5\u5185\u3067\u3001\u56DE\u7B54\u306E\u8B58\u5225\u5B50\u306B\u306A\u308A\u307E\u3059
45
+ \uFF08\u4F8B: --option ok=\u627F\u8A8D\u3059\u308B --option back=\u5DEE\u3057\u623B\u3059\uFF09\u3002
46
+ \u672C\u6587\uFF08--body-file\uFF09\u306F\u8CEA\u554F\u306E\u80CC\u666F\u306B\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\u3002\u8CEA\u554F\u6587\u305D\u306E\u3082\u306E\u306F --question \u5074\u306B\u7F6E\u304D\u307E\u3059\u3002
47
+
48
+ \u56DE\u7B54\u3059\u308B\u3068\u304D\u306F --answer-to <\u8CEA\u554F\u306E\u30B3\u30E1\u30F3\u30C8ID> \u3068 --select <\u30AD\u30FC> \u3092\u4F7F\u3044\u307E\u3059\uFF08\u81EA\u7531\u8A18\u8FF0\u3060\u3051\u306E\u56DE\u7B54\u306A\u3089 --select \u306F\u4E0D\u8981\uFF09\u3002
49
+ --ask-question \u3068 --answer-to \u306F\u540C\u6642\u306B\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093\uFF08\u8CEA\u554F\u3068\u56DE\u7B54\u306F\u5225\u306E\u30B3\u30E1\u30F3\u30C8\u3067\u3059\uFF09\u3002`;function tooLong(value,max){return charCount(value)>max}function parseOption(raw){const at=raw.indexOf("=");if(at<=0){throw new UsageError(`--option \u306F \u30AD\u30FC=\u8868\u793A\u6587 \u306E\u5F62\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${raw}`,"\u4F8B: --option ok=\u627F\u8A8D\u3059\u308B\u3002\u30AD\u30FC\u306F\u56DE\u7B54\u306B\u4F7F\u3046\u8B58\u5225\u5B50\
50
+ \u3067\u3001\u8868\u793A\u6587\u304C\u753B\u9762\u306E\u30DC\u30BF\u30F3\u306B\u306A\u308A\u307E\u3059\u3002")}const key=raw.slice(0,at).trim();const label=raw.slice(at+1).trim();if(key==="")throw new UsageError(`--option \u306E\u30AD\u30FC\u304C\u7A7A\u3067\u3059: ${raw}`);if(label==="")throw new UsageError(`--option \u306E\u8868\u793A\u6587\u304C\u7A7A\u3067\u3059: ${raw}`);if(tooLong(key,OPTION_KEY_MAX_CHARS)){throw new UsageError(`--option \u306E\u30AD\u30FC\u306F${OPTION_KEY_MAX_CHARS}\u6587\u5B57\u4EE5\u5185\u3067\
51
+ \u3059\uFF08${charCount(key)}\u6587\u5B57\uFF09: ${key}`,"\u30B5\u30FC\u30D0\u304C 422 \u3067\u62D2\u3080\u5024\u306A\u306E\u3067\u3001\u9001\u3089\u305A\u306B\u6B62\u3081\u3066\u3044\u307E\u3059\u3002\u77ED\u3044\u8B58\u5225\u5B50\u306B\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u4F8B: ok / back / hold\uFF09\u3002")}if(tooLong(label,OPTION_LABEL_MAX_CHARS)){throw new UsageError(`--option \u306E\u8868\u793A\u6587\u306F${OPTION_LABEL_MAX_CHARS}\u6587\u5B57\u4EE5\u5185\u3067\u3059\uFF08${charCount(
52
+ label)}\u6587\u5B57\uFF09`,"\u9577\u3044\u8AAC\u660E\u306F\u672C\u6587\uFF08--body-file\uFF09\u3078\u66F8\u3044\u3066\u304F\u3060\u3055\u3044\u3002")}return{key,label}}async function buildQuestion(input,usage){const asking=input.flags.has("--ask-question");const options=repeatedValues(input,"--option");const multiSelect=input.flags.has("--multi-select");const noFreeText=input.flags.has("--no-free-text");const hasQuestionText=input.flags.has("--question")||input.flags.has("--question-file");if(!asking){
53
+ const stray=[...options.length>0?["--option"]:[],...hasQuestionText?["--question / --question-file"]:[],...multiSelect?["--multi-select"]:[],...noFreeText?["--no-free-text"]:[]];if(stray.length>0){throw new UsageError(`${stray.join(" / ")} \u306F --ask-question \u3068\u4E00\u7DD2\u306B\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044`,"\u8CEA\u554F\u3068\u3057\u3066\u6295\u7A3F\u3059\u308B\u306A\u3089 --ask-question \u3092\u4ED8\u3051\u3066\u304F\u3060\u3055\u3044\u3002\n\u3075\u3064\u3046\u306E\u30B3\u30E1\u30F3\u30C8\u3068\u3057\u3066\u6295\u7A3F\u3059\u308B\u306A\u3089\u3001\u3053\u308C\u3089\u306E\u30D5\u30E9\u30B0\u3092\u5916\u3057\u3066\u304F\u3060\u3055\u3044\n\uFF08\u4ED8\u3051\u305F\u307E\u307E\u6295\u7A3F\u3059\u308B\u3068\u5E73\u6587\u306E\u30B3\u30E1\u30F3\u30C8\u306B\u306A\u308A\u3001\u753B\u9762\u306B\u56DE\u7B54\u30DC\u30BF\u30F3\u304C\u51FA\u307E\u305B\u3093\uFF09\u3002")}
54
+ return void 0}const description=await readBody(input,{flag:"--question",fileFlag:"--question-file",label:"\u8CEA\u554F\u6587",maxChars:QUESTION_MAX_CHARS,usage});if(description===void 0){throw new UsageError("\u8CEA\u554F\u6587\u3092 --question <\u6587\u5B57\u5217> \u304B --question-file <\u30D1\u30B9> \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",usage)}if(options.length<OPTION_MIN){throw new UsageError(`--ask-question \u306B\u306F\u9078\u629E\u80A2\u304C${OPTION_MIN}\u500B\u4EE5\u4E0A\u8981\u308A\u307E\u3059`,
55
+ "\u4F8B: --option ok=\u627F\u8A8D\u3059\u308B --option back=\u5DEE\u3057\u623B\u3059")}if(options.length>OPTION_MAX){throw new UsageError(`\u9078\u629E\u80A2\u306F${OPTION_MAX}\u500B\u307E\u3067\u3067\u3059\uFF08${options.length}\u500B\uFF09`,"\u30B5\u30FC\u30D0\u304C 422 \u3067\u62D2\u3080\u5024\u306A\u306E\u3067\u3001\u9001\u3089\u305A\u306B\u6B62\u3081\u3066\u3044\u307E\u3059\u3002\u9078\u629E\u80A2\u3092\u7D5E\u3063\u3066\u304F\u3060\u3055\u3044\u3002")}const parsed=options.map(parseOption);
56
+ const seen=new Set;for(const option of parsed){if(seen.has(option.key))throw new UsageError(`--option \u306E\u30AD\u30FC\u304C\u91CD\u8907\u3057\u3066\u3044\u307E\u3059: ${option.key}`);seen.add(option.key)}return{description,options:parsed,allow_free_text:!noFreeText,multi_select:multiSelect}}function buildAnswer(input){const target=nonEmpty(input.flags,"--answer-to");const selected=repeatedValues(input,"--select").map(key=>key.trim());if(target===void 0){if(selected.length>0){throw new UsageError(
57
+ "--select \u306F --answer-to <\u30B3\u30E1\u30F3\u30C8ID> \u3068\u4E00\u7DD2\u306B\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044","\u56DE\u7B54\u5148\u306E\u8CEA\u554F\u30B3\u30E1\u30F3\u30C8\u306E ID \u306F twp task comment list <\u30AD\u30FC> \u306E id \u5217\u304B\u3089\u53D6\u308C\u307E\u3059\u3002")}return void 0}const seen=new Set;for(const key of selected){if(key==="")throw new UsageError("--select \u306B\u7A7A\u306E\u30AD\u30FC\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093");if(tooLong(
58
+ key,SELECTED_KEY_MAX_CHARS)){throw new UsageError(`--select \u306E\u30AD\u30FC\u306F${SELECTED_KEY_MAX_CHARS}\u6587\u5B57\u4EE5\u5185\u3067\u3059\uFF08${charCount(key)}\u6587\u5B57\uFF09: ${key}`,"\u8CEA\u554F\u306E\u9078\u629E\u80A2\u306E\u30AD\u30FC\u3092\u305D\u306E\u307E\u307E\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08list \u306E question \u5217\u306B\u51FA\u307E\u3059\uFF09\u3002")}if(seen.has(key))throw new UsageError(`--select \u306E\u30AD\u30FC\u304C\u91CD\u8907\u3057\u3066\u3044\u307E\u3059: ${key}`);
59
+ seen.add(key)}return{comment_id:target.trim(),...selected.length===0?{}:{selected_key:selected.length===1?selected[0]:[...selected]}}}function attachmentIds(input){const ids=repeatedValues(input,"--attachment").map(id=>id.trim());const seen=new Set;for(const id of ids){if(id==="")throw new UsageError("--attachment \u306B\u7A7A\u306E ID \u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093");if(seen.has(id))throw new UsageError(`--attachment \u306E ID \u304C\u91CD\u8907\u3057\u3066\u3044\u307E\u3059: ${id}`);
60
+ seen.add(id)}return ids}async function resolveMentions(input,ctx,projectId){const refs=repeatedValues(input,"--mention");const ids=[];for(const ref of refs){if(ref.trim()==="")throw new UsageError("--mention \u306B\u7A7A\u306E\u5024\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093");const member=await ctx.resolver.assignee(projectId,ref,"--mention");if(!ids.includes(member.id))ids.push(member.id)}return ids}async function readContentHtml(input,usage){return readBody(input,{flag:"--content-html",fileFlag:"\
61
+ --content-html-file",label:"\u30EA\u30C3\u30C1\u30C6\u30AD\u30B9\u30C8\u672C\u6587",maxChars:CONTENT_HTML_MAX_CHARS,usage})}function rejectDoubleStdin(input){const stdinFlags=["--body-file","--question-file","--content-html-file"].filter(name=>input.flags.get(name)==="-");if(stdinFlags.length>1){throw new UsageError(`\u6A19\u6E96\u5165\u529B\u3092\u8AAD\u3080\u30D5\u30E9\u30B0\u304C\u8907\u6570\u3042\u308A\u307E\u3059: ${stdinFlags.join(" / ")}`,"\u6A19\u6E96\u5165\u529B\u306F1\u3064\u3057\u304B\u8AAD\u3081\u307E\u305B\u3093\u3002\u3069\u308C\u304B1\u3064\u3060\u3051\u3092 - \u306B\u3057\u3066\u3001\u6B8B\u308A\u306F\u30D5\u30A1\u30A4\u30EB\u3067\u6E21\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}}
62
+ function takeJson(input,key){const raw=input.resolved?.[key];if(raw===void 0||raw==="")return void 0;return JSON.parse(raw)}function takeList(input,key){const parsed=takeJson(input,key);if(parsed===void 0)return[];if(!Array.isArray(parsed))throw new Error(`\u5185\u90E8\u30A8\u30E9\u30FC: ${key} \u306E\u53D7\u3051\u6E21\u3057\u304C\u58CA\u308C\u3066\u3044\u307E\u3059`);return parsed}function optionalResolved(values){const out={};for(const[key,value]of Object.entries(values)){if(value===void 0)continue;
63
+ out[key]=typeof value==="string"?value:JSON.stringify(value)}return out}function commonOptionalBody(input){const mentions=takeList(input,"mentioned_user_ids");const attachments=takeList(input,"attachment_ids");const contentHtml=input.resolved?.["content_html"];return{content_html:contentHtml??null,...mentions.length>0?{mentioned_user_ids:mentions}:{},...attachments.length>0?{attachment_ids:attachments}:{}}}function commentBody(input){const question=takeJson(input,"question");const answer=takeJson(
64
+ input,"answer_to");return{content:requireResolved(input,"content"),...commonOptionalBody(input),...question!==void 0?{comment_type:"ask_question",question}:{},...answer!==void 0?{answer_to:answer}:{}}}function commentPath(input){const projectId=encodeURIComponent(requireResolved(input,"projectId"));const taskId=encodeURIComponent(requireResolved(input,"taskId"));return`/api/v2/projects/${projectId}/tasks/${taskId}/comments`}var taskCommentResource={name:"comment",summary:"\u30BF\u30B9\u30AF\u30B3\u30E1\u30F3\u30C8\u306E\u4E00\u89A7\u30FB\u6295\u7A3F\u30FB\u66F4\u65B0\u30FB\u524A\u9664",
65
+ operations:[{name:"list",summary:"\u30BF\u30B9\u30AF\u306E\u30B3\u30E1\u30F3\u30C8\u3092\u4E00\u89A7\u3059\u308B",usage:"twp task comment list <\u30AD\u30FC|ID> [--project <\u30B3\u30FC\u30C9|ID>] [--all]",description:`${TASK_REF_HELP}
66
+
67
+ \u4F5C\u6210\u65E5\u6642\u306E\u6607\u9806\u3067\u8FD4\u308A\u307E\u3059\uFF08\u30B5\u30FC\u30D0\u5074\u306E\u4E26\u3073\uFF09\u3002
68
+
69
+ ${LIST_PAGING_HELP}`,flags:[...LIST_FLAGS,TASK_REF_FLAG,PROJECT_FLAG],paging:listPaging,async prepare(input,ctx){const ref=singleRef(input,{flag:"--task",label:"\u30BF\u30B9\u30AF",usage:"twp task comment list help"});return withResolved(input,await resolveTaskLocation(input,ctx,ref))},plan(input){return{method:"GET",path:commentPath(input),query:{limit:positiveInteger(input.flags,"--limit"),cursor:nonEmpty(input.flags,"--cursor")}}},summarize:body=>summarizeComments(listPaging.items(body)),raw:body=>listPaging.
70
+ items(body)},{name:"create",summary:"\u30BF\u30B9\u30AF\u306B\u30B3\u30E1\u30F3\u30C8\u3092\u6295\u7A3F\u3059\u308B\uFF08\u8CEA\u554F\u30FB\u56DE\u7B54\u30FB\u30E1\u30F3\u30B7\u30E7\u30F3\u30FB\u6DFB\u4ED8\u7D10\u3065\u3051\u3092\u542B\u3080\uFF09",usage:"twp task comment create <\u30AD\u30FC|ID> --body-file <\u30D1\u30B9> [--ask-question --option <\u30AD\u30FC=\u8868\u793A\u6587>] [--mention <\u76F8\u624B>]",description:`${TASK_REF_HELP}
71
+
72
+ ${BODY_HELP}
73
+
74
+ ${QUESTION_HELP}`,flags:[...BODY_FLAGS,...QUESTION_FLAGS,...ANSWER_FLAGS,MENTION_FLAG,ATTACHMENT_FLAG,CONTENT_HTML_FLAG,TASK_REF_FLAG,PROJECT_FLAG],async prepare(input,ctx){const usage="twp task comment create help";const ref=singleRef(input,{flag:"--task",label:"\u30BF\u30B9\u30AF",usage});rejectDoubleStdin(input);const content=await requireContent(input,usage);const contentHtml=await readContentHtml(input,usage);const question=await buildQuestion(input,usage);const answer=buildAnswer(input);if(question!==
75
+ void 0&&answer!==void 0){throw new UsageError("--ask-question \u3068 --answer-to \u306F\u540C\u6642\u306B\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093","\u8CEA\u554F\u3068\u56DE\u7B54\u306F\u5225\u306E\u30B3\u30E1\u30F3\u30C8\u3067\u3059\u3002\u307E\u305A\u56DE\u7B54\u3092\u6295\u7A3F\u3057\u3001\u7D9A\u3051\u3066\u65B0\u3057\u3044\u8CEA\u554F\u3092\u6295\u7A3F\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}const attachments=attachmentIds(input);const located=await resolveTaskLocation(input,ctx,ref);const mentions=await resolveMentions(
76
+ input,ctx,located.projectId);return withResolved(input,{...located,content,...optionalResolved({content_html:contentHtml,question,answer_to:answer,...mentions.length>0?{mentioned_user_ids:mentions}:{},...attachments.length>0?{attachment_ids:attachments}:{}})})},plan:input=>({method:"POST",path:commentPath(input),body:commentBody(input)}),summarize:body=>pick(commentObject(body),WRITE_COLUMNS),raw:commentObject},{name:"update",summary:"\u30B3\u30E1\u30F3\u30C8\u306E\u672C\u6587\u3092\u66F8\u304D\u63DB\u3048\u308B",
77
+ usage:"twp task comment update <\u30B3\u30E1\u30F3\u30C8ID> --task <\u30AD\u30FC|ID> --body-file <\u30D1\u30B9>",description:`${COMMENT_REF_HELP}
78
+
79
+ ${BODY_HELP}
80
+
81
+ \u672C\u6587\u306F\u7F6E\u304D\u63DB\u3048\u3067\u3059\uFF08\u8FFD\u8A18\u3067\u306F\u3042\u308A\u307E\u305B\u3093\uFF09\u3002
82
+
83
+ \u30B5\u30FC\u30D0\u306F\u66F4\u65B0\u3067 content / content_html / \u30E1\u30F3\u30B7\u30E7\u30F3 / \u6DFB\u4ED8\u3057\u304B\u53D7\u3051\u307E\u305B\u3093\u3002
84
+ \u8CEA\u554F\uFF08--ask-question\uFF09\u3068\u56DE\u7B54\uFF08--answer-to\uFF09\u306F\u6295\u7A3F\u6642\u306B\u3057\u304B\u6307\u5B9A\u3067\u304D\u306A\u3044\u305F\u3081\u3001\u3053\u3053\u3067\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093\u3002`,flags:[...BODY_FLAGS,MENTION_FLAG,ATTACHMENT_FLAG,CONTENT_HTML_FLAG,COMMENT_REF_FLAG,TASK_REF_FLAG,PROJECT_FLAG],async prepare(input,ctx){const usage="twp task comment update help";rejectDoubleStdin(input);const content=await requireContent(input,usage);
85
+ const contentHtml=await readContentHtml(input,usage);const attachments=attachmentIds(input);const located=await prepareCommentTarget(input,ctx,usage);const mentions=await resolveMentions(located,ctx,requireResolved(located,"projectId"));return withResolved(located,{content,...optionalResolved({content_html:contentHtml,...mentions.length>0?{mentioned_user_ids:mentions}:{},...attachments.length>0?{attachment_ids:attachments}:{}})})},plan:input=>({method:"PUT",path:`${commentPath(input)}/${encodeURIComponent(
86
+ requireResolved(input,"commentId"))}`,body:commentBody(input)}),summarize:body=>pick(commentObject(body),WRITE_COLUMNS),raw:commentObject},{name:"delete",summary:"\u30B3\u30E1\u30F3\u30C8\u3092\u524A\u9664\u3059\u308B",usage:"twp task comment delete <\u30B3\u30E1\u30F3\u30C8ID> --task <\u30AD\u30FC|ID> --yes",description:`${COMMENT_REF_HELP}
87
+
88
+ \u524A\u9664\u306F\u53D6\u308A\u6D88\u305B\u307E\u305B\u3093\u3002`,destructive:true,flags:[COMMENT_REF_FLAG,TASK_REF_FLAG,PROJECT_FLAG],prepare:(input,ctx)=>prepareCommentTarget(input,ctx,"twp task comment delete help"),plan:input=>({method:"DELETE",path:`${commentPath(input)}/${encodeURIComponent(requireResolved(input,"commentId"))}`}),summarize:body=>acknowledgement(body,"\u30B3\u30E1\u30F3\u30C8\u524A\u9664"),raw:body=>acknowledgement(body,"\u30B3\u30E1\u30F3\u30C8\u524A\u9664")}]};async function requireContent(input,usage){
89
+ const content=await readBody(input,{flag:"--body",fileFlag:"--body-file",label:"\u30B3\u30E1\u30F3\u30C8\u672C\u6587",maxChars:CONTENT_MAX_CHARS,usage});if(content===void 0){throw new UsageError("\u30B3\u30E1\u30F3\u30C8\u672C\u6587\u3092 --body-file <\u30D1\u30B9> \u304B --body <\u6587\u5B57\u5217> \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",usage)}return content}function rejectPrivateUnsupportedFlags(input){if(!input.flags.has("--assignee"))return;throw new UsageError(`--project ${PRIVATE_PROJECT_REF}\uFF08\u500B\u4EBA\u30BF\u30B9\u30AF\uFF09\u3067\u306F --assignee \u3092\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,"\u500B\u4EBA\u30BF\u30B9\u30AF\u306F\u5E38\u306B\u81EA\u5206\u306E\u3082\u306E\u306A\u306E\u3067\u3001\u30B5\u30FC\u30D0\u5074\u306B\u62C5\u5F53\u8005\u3092\u6307\u5B9A\u30FB\u7D5E\u308A\u8FBC\u307F\u3059\u308B\u9805\u76EE\u304C\u3042\u308A\u307E\u305B\u3093\u3002--assignee \u3092\u5916\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}
90
+ function privateTaskRef(ref){const{kind,value}=classifyTaskRef(ref);if(kind==="unknown"){throw new UsageError(`\u30BF\u30B9\u30AF\u306E\u6307\u5B9A\u304C\u300C\u500B\u4EBA\u30BF\u30B9\u30AF\u306E\u30AD\u30FC\uFF08\u4F8B PRIVATE-22361\uFF09\u300D\u306B\u3082\u300CID\uFF08UUID / ULID\uFF09\u300D\u306B\u3082\u898B\u3048\u307E\u305B\u3093: ${ref}`,`\u500B\u4EBA\u30BF\u30B9\u30AF\u306E\u4E00\u89A7\u306F twp task list --project ${PRIVATE_PROJECT_REF} \u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002`)}
91
+ return{kind,value}}async function resolvePrivateTaskId(ctx,ref){const{kind,value}=privateTaskRef(ref);if(kind==="id")return value;const task=await ctx.resolver.privateTask(value);const id=task["id"];if(!isSafePathSegment(id)){throw new ApiResponseError(`\u500B\u4EBA\u30BF\u30B9\u30AF\u306E\u5FDC\u7B54\u306E task.id \u3092\u305D\u306E\u307E\u307E\u4F7F\u3048\u307E\u305B\u3093\uFF08${String(id).slice(0,60)}\uFF09\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}
92
+ return id}async function resolvePrivateStatusAndType(input,ctx,options){const out={};const status=nonEmpty(input.flags,"--status");if(status!==void 0){out["status_id"]=(await ctx.resolver.privateStatus(status)).id}else if(options.useDefaults){const ref=await ctx.resolver.privateDefaultStatus();out["status_id"]=ref.id;out["status_defaulted"]=ref.name}const type=nonEmpty(input.flags,"--type");if(type!==void 0){out["type_id"]=(await ctx.resolver.privateTaskType(type)).id}else if(options.useDefaults){
93
+ const ref=await ctx.resolver.privateDefaultTaskType();out["type_id"]=ref.id;out["type_defaulted"]=ref.name}return out}var SPECS=[{kind:"status",resource:"status",summary:"\u30BF\u30B9\u30AF\u306E\u30B9\u30C6\u30FC\u30BF\u30B9\uFF08--status \u306B\u6E21\u305B\u308B\u5024\uFF09\u3092\u4E00\u89A7\u3059\u308B",columns:["id","name","code","is_default","is_completed","sort_order"],privateEnvelope:"statuses"},{kind:"type",resource:"type",summary:"\u30BF\u30B9\u30AF\u306E\u7A2E\u5225\uFF08--type \u306B\u6E21\u305B\u308B\u5024\uFF09\u3092\u4E00\u89A7\u3059\u308B",columns:["id","name","code","is_default","sort_order"],privateEnvelope:"\
94
+ types"},{kind:"category",resource:"category",summary:"\u30BF\u30B9\u30AF\u306E\u30AB\u30C6\u30B4\u30EA\u3092\u4E00\u89A7\u3059\u308B",columns:["id","name","color","sort_order"],privateEnvelope:"categories"},{kind:"milestone",resource:"milestone",summary:"\u30BF\u30B9\u30AF\u306E\u30DE\u30A4\u30EB\u30B9\u30C8\u30FC\u30F3\u3092\u4E00\u89A7\u3059\u308B",columns:["id","name","due_date","is_completed","sort_order"]},{kind:"label",resource:"label",summary:"\u30BF\u30B9\u30AF\u306E\u30E9\u30D9\u30EB\u3092\u4E00\u89A7\u3059\u308B",
95
+ columns:["id","name","color"],privateEnvelope:"labels"}];var PRIVATE_SURFACE="private";function isPrivatePlan(input){return input.resolved?.["surface"]===PRIVATE_SURFACE}function rows(body){if(!Array.isArray(body)){throw new Error(`\u30BF\u30B9\u30AF\u30DE\u30B9\u30BF\u4E00\u89A7\u306E\u5185\u90E8\u8868\u73FE\u304C\u914D\u5217\u3067\u306F\u3042\u308A\u307E\u305B\u3093: ${typeof body}`)}return body}function masterResource(spec){const master=TASK_MASTERS[spec.kind];const privateHelp=spec.privateEnvelope===
96
+ void 0?`\u500B\u4EBA\u30BF\u30B9\u30AF\uFF08--project ${PRIVATE_PROJECT_REF}\uFF09\u306B${master.label}\u306F\u3042\u308A\u307E\u305B\u3093\u3002`:`\u500B\u4EBA\u30BF\u30B9\u30AF\u306F --project ${PRIVATE_PROJECT_REF} \u3067\u4E00\u89A7\u3067\u304D\u307E\u3059\u3002`;return{name:spec.resource,summary:spec.summary,operations:[{name:"list",summary:spec.summary,usage:`twp task ${spec.resource} list [--project <\u30B3\u30FC\u30C9|ID>]`,description:`name \u5217\u306E\u5024\u306F twp task list / create / update \u306E\u30D5\u30E9\u30B0\u3078\u305D\u306E\u307E\u307E\
97
+ \u6E21\u305B\u307E\u3059\uFF08ID \u3067\u3082\u6E21\u305B\u307E\u3059\uFF09\u3002
98
+ --output json \u306F API \u304C\u8FD4\u3059\u5168\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u51FA\u3057\u307E\u3059\u3002
99
+ \u7D50\u679C\u306F\u540D\u524D\u89E3\u6C7A\u3068\u540C\u3058\u30AD\u30E3\u30C3\u30B7\u30E5\uFF08\u65E2\u5B9A 10 \u5206\uFF09\u304B\u3089\u8FD4\u308B\u305F\u3081\u3001\u7D9A\u3051\u3066\u6253\u3064\u30B3\u30DE\u30F3\u30C9\u3067\u5F80\u5FA9\u306F\u5897\u3048\u307E\u305B\u3093\u3002
100
+ \u6700\u65B0\u3092\u53D6\u308A\u76F4\u3059\u3068\u304D\u306F --refresh \u3092\u4ED8\u3051\u3066\u304F\u3060\u3055\u3044\u3002
101
+ ${privateHelp}`,flags:[PROJECT_FLAG],async prepare(input,ctx){if(input.args.length>0){throw new UsageError(`list \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,`\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306F --project <\u30B3\u30FC\u30C9|ID> \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}if(wantsPrivateSurface(input)){if(spec.privateEnvelope===void 0){throw new UsageError(`--project ${PRIVATE_PROJECT_REF}\uFF08\u500B\u4EBA\u30BF\u30B9\u30AF\uFF09\u306B${master.
102
+ label}\u306F\u3042\u308A\u307E\u305B\u3093`,`\u500B\u4EBA\u30BF\u30B9\u30AF\u306E\u30DE\u30B9\u30BF\u306F\u30B9\u30C6\u30FC\u30BF\u30B9\u30FB\u7A2E\u5225\u30FB\u30AB\u30C6\u30B4\u30EA\u30FB\u30E9\u30D9\u30EB\u3060\u3051\u3067\u3059\u3002`)}return withResolved(input,{surface:PRIVATE_SURFACE})}return withResolved(input,{projectId:await ctx.projectId(input.flags.get("--project"))})},plan(input){if(isPrivatePlan(input))return{method:"GET",path:`${PRIVATE_TASKS_PATH}/masters`};return{method:"GET",path:`\
103
+ /api/v2/projects/${encodeURIComponent(requireResolved(input,"projectId"))}/${master.path}`}},async fetchCached(input,ctx){if(isPrivatePlan(input)){return ctx.resolver.privateMasterRows(spec.privateEnvelope,master.label)}return ctx.resolver.taskMasterRows(spec.kind,requireResolved(input,"projectId"))},summarize:body=>rows(body).map(row=>pick(row,spec.columns)),raw:body=>rows(body),notes:body=>rows(body).length===0?[`${master.label}\u306F1\u4EF6\u3082\u5B9A\u7FA9\u3055\u308C\u3066\u3044\u307E\u305B\u3093\uFF08--refresh \u3067\u53D6\u308A\u76F4\u305B\u307E\u3059\uFF09\u3002`]:
104
+ []}]}}var taskMasterResources=SPECS.map(masterResource);var ISO_DATE_RE=/^\d{4}-\d{2}-\d{2}$/;function isoDate(input,flag){const raw=input.flags.get(flag);if(raw===void 0)return void 0;const value=raw.trim();if(!ISO_DATE_RE.test(value)){throw new UsageError(`${flag} \u306F YYYY-MM-DD \u306E\u5F62\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${raw}`,"\u4F8B: 2026-09-30")}const[y,m,d]=value.split("-").map(Number);const probe=new Date(Date.UTC(y,m-1,d));if(probe.getUTCFullYear()!==y||probe.getUTCMonth()+1!==m||probe.getUTCDate()!==d){throw new UsageError(
105
+ `${flag} \u306B\u5B58\u5728\u3057\u306A\u3044\u65E5\u4ED8\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u3059: ${raw}`,"\u4F8B: 2026-09-30")}return value}function priority(input,flag="--priority"){const raw=input.flags.get(flag);if(raw===void 0)return void 0;const trimmed=raw.trim();const value=/^\d+$/.test(trimmed)?Number(trimmed):Number.NaN;if(!Number.isInteger(value)||value<1||value>3){throw new UsageError(`${flag} \u306F 1 / 2 / 3 \u306E\u3044\u305A\u308C\u304B\u3067\u3059: ${raw}`,"1: \u9AD8 \uFF0F\
106
+ 2: \u4E2D \uFF0F 3: \u4F4E")}return value}function boundedText(input,flag,options){const raw=input.flags.get(flag);if(raw===void 0)return void 0;if(raw.trim()===""){throw new UsageError(`${flag} \u306B\u7A7A\u306E\u5024\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,`${options.label}\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}const count=[...raw].length;if(count>options.maxChars){throw new UsageError(`${options.label}\u304C\u9577\u3059\u304E\u307E\u3059\uFF08${count} \u6587\u5B57\u30FB\u4E0A\u9650 ${options.
107
+ maxChars} \u6587\u5B57\uFF09`,`${flag} \u3092 ${options.maxChars} \u6587\u5B57\u4EE5\u5185\u306B\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return raw}var LIST_COLUMNS2=["key","subject","status_id","assignee_id","priority","due_date","updated_at"];var GET_COLUMNS=["id","key","project_id","subject","description","status_id","type_id","category_id","milestone_id","assignee_id","priority","start_date","due_date","estimated_hours","actual_hours","progress","parent_id","subtask_count","created_by","created_at","updated_by","updated_at"];var listPaging2=envelopePaging({label:"\u30BF\u30B9\u30AF\u4E00\u89A7"});var PRIVATE_HELP=`\u500B\u4EBA\u30BF\u30B9\u30AF\uFF08\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306B\u5C5E\u3055\u306A\u3044\u81EA\u5206\u3060\u3051\u306E\
108
+ \u30BF\u30B9\u30AF\uFF09\u306F --project ${PRIVATE_PROJECT_REF} \u3067\u64CD\u4F5C\u3057\u307E\u3059\u3002
109
+ twp task list --project ${PRIVATE_PROJECT_REF}
110
+ \u500B\u4EBA\u30BF\u30B9\u30AF\u306E\u30AD\u30FC\u306F PRIVATE-<\u756A\u53F7> \u3067\u3059\u3002\u62C5\u5F53\u8005\u306E\u6307\u5B9A\u30FB\u7D5E\u308A\u8FBC\u307F\uFF08--assignee\uFF09\u306F\u3067\u304D\u307E\u305B\u3093
111
+ \uFF08\u500B\u4EBA\u30BF\u30B9\u30AF\u306F\u5E38\u306B\u81EA\u5206\u306E\u3082\u306E\u306A\u306E\u3067\u3001\u30B5\u30FC\u30D0\u5074\u306B\u62C5\u5F53\u8005\u306E\u9805\u76EE\u304C\u3042\u308A\u307E\u305B\u3093\uFF09\u3002
112
+ \u30B3\u30E1\u30F3\u30C8\uFF08twp task comment\uFF09\u306F\u500B\u4EBA\u30BF\u30B9\u30AF\u3067\u306F\u4F7F\u3048\u307E\u305B\u3093\u3002TWP \u306E\u753B\u9762\u304B\u3089\u64CD\u4F5C\u3057\u3066\u304F\u3060\u3055\u3044\u3002`;var PRIVATE_SURFACE2="private";function isPrivatePlan2(input){return input.resolved?.["surface"]===PRIVATE_SURFACE2}function taskObject(body){const task=isRecord(body)?body["task"]:void 0;if(!isRecord(task)){throw new ApiResponseError("\u30BF\u30B9\u30AF\u8A73\u7D30\u306E\u5FDC\u7B54\u306B task \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}
113
+ return task}function subtaskItems(body){const items=isRecord(body)?body["items"]:void 0;if(!Array.isArray(items)){throw new ApiResponseError("\u30B5\u30D6\u30BF\u30B9\u30AF\u4E00\u89A7\u306E\u5FDC\u7B54\u306B items \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return items}var SUBJECT_MAX_CHARS=500;var DESCRIPTION_MAX_CHARS=1e4;var FIELD_FLAGS=[{name:"--subject",summary:"\u4EF6\u540D",takesValue:true,placeholder:"\
114
+ <\u6587\u5B57\u5217>"},{name:"--description",summary:"\u672C\u6587\u3092\u76F4\u63A5\u6307\u5B9A\u3059\u308B\uFF08--description-file \u3068\u306E\u4F75\u7528\u306F\u30A8\u30E9\u30FC\uFF09",takesValue:true,placeholder:"<\u6587\u5B57\u5217>"},{name:"--description-file",summary:"\u672C\u6587\u3092\u30D5\u30A1\u30A4\u30EB\u304B\u3089\u8AAD\u3080\uFF08- \u3067\u6A19\u6E96\u5165\u529B\uFF09\u3002\u6539\u884C\u30FBMarkdown \u3092\u58CA\u3055\u306A\u3044",takesValue:true,placeholder:"<\u30D1\u30B9|->"},
115
+ {name:"--status",summary:"\u30B9\u30C6\u30FC\u30BF\u30B9\uFF08\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u30FBID\uFF09",takesValue:true,placeholder:"<\u540D\u524D|ID>"},{name:"--type",summary:"\u7A2E\u5225\uFF08\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u30FBID\uFF09",takesValue:true,placeholder:"<\u540D\u524D|ID>"},{name:"--assignee",summary:"\u62C5\u5F53\u8005\uFF08me / \u540D\u524D / \u30E1\u30FC\u30EB / ID\uFF09",takesValue:true,placeholder:"<me|\u540D\u524D|ID>"},{name:"--due-date",summary:"\u671F\u65E5\uFF08YYYY-MM-\
116
+ DD\uFF09",takesValue:true,placeholder:"<YYYY-MM-DD>"},{name:"--start-date",summary:"\u958B\u59CB\u65E5\uFF08YYYY-MM-DD\uFF09",takesValue:true,placeholder:"<YYYY-MM-DD>"},{name:"--priority",summary:"\u512A\u5148\u5EA6\uFF081: \u9AD8 / 2: \u4E2D / 3: \u4F4E\uFF09",takesValue:true,placeholder:"<1|2|3>"}];var FIELD_HELP="--status / --type / --assignee \u306F\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u30FBID \u306E\u3044\u305A\u308C\u3067\u3082\u6307\u5B9A\u3067\u304D\u307E\u3059\u3002\n\u5B8C\u5168\u4E00\u81F4\u3060\u3051\u3067\u89E3\u6C7A\u3057\u3001\u8907\u6570\u306B\u5F53\u305F\u308B\u30FB1\u4EF6\u3082\u5F53\u305F\u3089\u306A\u3044\u5834\u5408\u306F\u5019\u88DC\u3092\u51FA\u3057\u3066\u7D42\u4E86\u30B3\u30FC\u30C9 2 \u3067\u6B62\u307E\u308A\u307E\u3059\u3002\n--assignee me \u306F\u300C\u3044\u307E\u30ED\u30B0\u30A4\u30F3\u3057\u3066\u3044\u308B\u30E6\u30FC\u30B6\u30FC\u300D\u3067\u3059\u3002\n\n\u672C\u6587\u306F --description-file \u3092\u4E3B\u7D4C\u8DEF\u306B\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u30B7\u30A7\u30EB\
117
+ \u306E\u5F15\u6570\u306B\u8F09\u305B\u308B\u3068\u6539\u884C\u30FBMarkdown \u306E\n\u898B\u51FA\u3057\uFF08#\uFF09\u30FB\u5F15\u7528\u7B26\u3067\u58CA\u308C\u307E\u3059\uFF09\u3002--description-file - \u3067\u6A19\u6E96\u5165\u529B\u304B\u3089\u8AAD\u3081\u307E\u3059\u3002\u672C\u6587\u306F\u52A0\u5DE5\u3057\u307E\u305B\u3093\n\uFF08\u6539\u884C\u30FBCRLF \u306F\u305D\u306E\u307E\u307E\u9001\u308A\u307E\u3059\u3002\u843D\u3068\u3059\u306E\u306F\u5148\u982D\u306E UTF-8 BOM \u3060\u3051\u3067\u3059\uFF09\u3002\n\n\u5024\u306E\u89E3\u9664\uFF08\u62C5\u5F53\u8005\u3092\u5916\u3059\u30FB\u671F\u65E5\u3092\u6D88\u3059\uFF09\u306F\u3053\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u3067\u306F\u3067\u304D\u307E\u305B\u3093\u3002TWP \u306E\u753B\u9762\u304B\u3089\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002";
118
+ function readDescription(input,usage){return readBody(input,{flag:"--description",fileFlag:"--description-file",label:"\u672C\u6587",maxChars:DESCRIPTION_MAX_CHARS,usage})}function checkPureFields(input){boundedText(input,"--subject",{maxChars:SUBJECT_MAX_CHARS,label:"\u4EF6\u540D"});isoDate(input,"--due-date");isoDate(input,"--start-date");priority(input)}function taskBody(input){const body={};const put=(key,value)=>{if(value!==void 0)body[key]=value};put("subject",boundedText(input,"--subject",
119
+ {maxChars:SUBJECT_MAX_CHARS,label:"\u4EF6\u540D"}));const description=input.resolved?.["description"];put("description",description);if(description!==void 0)body["description_html"]=null;put("status_id",input.resolved?.["status_id"]);put("type_id",input.resolved?.["type_id"]);put("assignee_id",input.resolved?.["assignee_id"]);put("due_date",isoDate(input,"--due-date"));put("start_date",isoDate(input,"--start-date"));put("priority",priority(input));return body}async function resolveStatusAndType(input,ctx,projectId,options){
120
+ const out={};const status=nonEmpty(input.flags,"--status");if(status!==void 0){out["status_id"]=(await ctx.resolver.status(projectId,status)).id}else if(options.useDefaults){const ref=await ctx.resolver.defaultStatus(projectId);out["status_id"]=ref.id;out["status_defaulted"]=ref.name}const type=nonEmpty(input.flags,"--type");if(type!==void 0){out["type_id"]=(await ctx.resolver.taskType(projectId,type)).id}else if(options.useDefaults){const ref=await ctx.resolver.defaultTaskType(projectId);out["t\
121
+ ype_id"]=ref.id;out["type_defaulted"]=ref.name}const assignee=nonEmpty(input.flags,"--assignee");if(assignee!==void 0)out["assignee_id"]=(await ctx.resolver.assignee(projectId,assignee)).id;return out}var taskDomain={name:"task",summary:"\u30BF\u30B9\u30AF\u306E\u4E00\u89A7\u30FB\u8A73\u7D30\u30FB\u30B5\u30D6\u30BF\u30B9\u30AF\u30FB\u4F5C\u6210\u30FB\u66F4\u65B0\u30FB\u524A\u9664",operations:[{name:"list",summary:"\u30BF\u30B9\u30AF\u3092\u4E00\u89A7\u3059\u308B",usage:"twp task list [--project \
122
+ <\u30B3\u30FC\u30C9|ID|__private__>] [--status <\u540D\u524D>] [--type <\u540D\u524D>] [--assignee <me|\u540D\u524D>] [--keyword <\u8A9E>] [--all]",description:`--output json \u306F API \u304C\u8FD4\u3059\u5168\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u51FA\u3057\u307E\u3059\u3002
123
+ --output table / text / tsv \u306F\u8981\u7D04\u5217\uFF08key / subject / status_id / assignee_id / priority / due_date / updated_at\uFF09\u3067\u3059\u3002
124
+ \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
125
+
126
+ --status / --type / --assignee \u306F\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u30FBID \u306E\u3044\u305A\u308C\u3067\u3082\u6307\u5B9A\u3067\u304D\u307E\u3059\u3002
127
+ \u5B8C\u5168\u4E00\u81F4\u3060\u3051\u3067\u89E3\u6C7A\u3057\u3001\u8907\u6570\u306B\u5F53\u305F\u308B\u30FB1\u4EF6\u3082\u5F53\u305F\u3089\u306A\u3044\u5834\u5408\u306F\u5019\u88DC\u3092\u51FA\u3057\u3066\u7D42\u4E86\u30B3\u30FC\u30C9 2 \u3067\u6B62\u307E\u308A\u307E\u3059
128
+ \uFF08\u524D\u65B9\u4E00\u81F4\u3067\u52DD\u624B\u306B\u6C7A\u3081\u307E\u305B\u3093\uFF09\u3002\u540D\u524D \u2192 ID \u306E\u5BFE\u5FDC\u306F 10 \u5206\u30AD\u30E3\u30C3\u30B7\u30E5\u3055\u308C\u3001--refresh \u3067\u53D6\u308A\u76F4\u305B\u307E\u3059\u3002
129
+ --assignee me \u306F\u300C\u3044\u307E\u30ED\u30B0\u30A4\u30F3\u3057\u3066\u3044\u308B\u30E6\u30FC\u30B6\u30FC\u300D\u3067\u3059\u3002
130
+
131
+ ${PRIVATE_HELP}
132
+
133
+ `+LIST_PAGING_HELP,flags:[...LIST_FLAGS,PROJECT_FLAG,{name:"--status",summary:"\u30B9\u30C6\u30FC\u30BF\u30B9\u3067\u7D5E\u308A\u8FBC\u3080\uFF08\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u30FBID\uFF09",takesValue:true,placeholder:"<\u540D\u524D|ID>"},{name:"--type",summary:"\u7A2E\u5225\u3067\u7D5E\u308A\u8FBC\u3080\uFF08\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u30FBID\uFF09",takesValue:true,placeholder:"<\u540D\u524D|ID>"},{name:"--assignee",summary:"\u62C5\u5F53\u8005\u3067\u7D5E\u308A\u8FBC\u3080\uFF08me / \u540D\u524D / \u30E1\u30FC\u30EB / ID\uFF09",
134
+ takesValue:true,placeholder:"<me|\u540D\u524D|ID>"},{name:"--keyword",summary:"\u4EF6\u540D\u30FB\u672C\u6587\u306E\u90E8\u5206\u4E00\u81F4\u3067\u7D5E\u308A\u8FBC\u3080\uFF08\u691C\u7D22\u7D4C\u8DEF\u306B\u5207\u308A\u66FF\u308F\u308A\u307E\u3059\uFF09",takesValue:true,placeholder:"<\u8A9E>"}],paging:listPaging2,async prepare(input,ctx){if(input.args.length>0){throw new UsageError(`list \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,"twp task list h\
135
+ elp")}if(wantsPrivateSurface(input)){rejectPrivateUnsupportedFlags(input);return withResolved(input,{surface:PRIVATE_SURFACE2,...await resolvePrivateStatusAndType(input,ctx,{useDefaults:false})})}const projectId=await ctx.projectId(input.flags.get("--project"));const resolved={projectId};const status=nonEmpty(input.flags,"--status");if(status!==void 0)resolved["status_id"]=(await ctx.resolver.status(projectId,status)).id;const type=nonEmpty(input.flags,"--type");if(type!==void 0)resolved["type_i\
136
+ d"]=(await ctx.resolver.taskType(projectId,type)).id;const assignee=nonEmpty(input.flags,"--assignee");if(assignee!==void 0)resolved["assignee_id"]=(await ctx.resolver.assignee(projectId,assignee)).id;return withResolved(input,resolved)},plan(input){const query={limit:positiveInteger(input.flags,"--limit"),cursor:nonEmpty(input.flags,"--cursor"),keyword:nonEmpty(input.flags,"--keyword"),status_id:input.resolved?.["status_id"],type_id:input.resolved?.["type_id"],assignee_id:input.resolved?.["assi\
137
+ gnee_id"]};if(isPrivatePlan2(input))return{method:"GET",path:PRIVATE_TASKS_PATH,query};const projectId=requireResolved(input,"projectId");return{method:"GET",path:`/api/v2/projects/${encodeURIComponent(projectId)}/tasks`,query}},summarize:body=>listPaging2.items(body).map(row=>pick(row,LIST_COLUMNS2)),raw:body=>listPaging2.items(body)},{name:"get",summary:"\u30BF\u30B9\u30AF1\u4EF6\u306E\u8A73\u7D30\u3092\u8868\u793A\u3059\u308B",usage:"twp task get <\u30AD\u30FC|ID> [--project <\u30B3\u30FC\u30C9|ID|__private__>]",
138
+ description:`${TASK_REF_HELP}
139
+
140
+ ${PRIVATE_HELP}`,flags:[TASK_REF_FLAG,PROJECT_FLAG],async prepare(input,ctx){const ref=singleRef(input,{flag:"--task",label:"\u30BF\u30B9\u30AF",usage:"twp task get help"});if(taskSurface(input,ref)===PRIVATE_SURFACE2){return withResolved(input,{surface:PRIVATE_SURFACE2,privateRef:privateTaskRef(ref).value})}const classified=classifyTaskRef(ref);if(classified.kind==="key"){rejectRedundantProject(input,classified.value);return withResolved(input,{mode:"key",key:classified.value})}const{projectId,
141
+ taskId}=await resolveTaskLocation(input,ctx,classified.value);return withResolved(input,{mode:"id",projectId,taskId})},plan(input){if(isPrivatePlan2(input)){return{method:"GET",path:`${PRIVATE_TASKS_PATH}/${encodeURIComponent(requireResolved(input,"privateRef"))}`}}if(requireResolved(input,"mode")==="key"){return{method:"GET",path:`/api/v2/tasks/resolve-by-key/${encodeURIComponent(requireResolved(input,"key"))}`}}const projectId=encodeURIComponent(requireResolved(input,"projectId"));return{method:"\
142
+ GET",path:`/api/v2/projects/${projectId}/tasks/${encodeURIComponent(requireResolved(input,"taskId"))}`}},summarize:body=>pick(taskObject(body),GET_COLUMNS),raw:body=>taskObject(body)},{name:"subtasks",summary:"\u30BF\u30B9\u30AF\u306E\u30B5\u30D6\u30BF\u30B9\u30AF\u3092\u4E00\u89A7\u3059\u308B",usage:"twp task subtasks <\u30AD\u30FC|ID> [--project <\u30B3\u30FC\u30C9|ID|__private__>]",description:`${TASK_REF_HELP}
143
+
144
+ ${PRIVATE_HELP}
145
+
146
+ \u3053\u306E API \u306F\u30DA\u30FC\u30B8\u30F3\u30B0\u3092\u6301\u305F\u305A\u3001\u5E38\u306B\u5168\u4EF6\u3092\u8FD4\u3057\u307E\u3059\uFF08--all / --limit \u306F\u3042\u308A\u307E\u305B\u3093\uFF09\u3002`,flags:[TASK_REF_FLAG,PROJECT_FLAG],async prepare(input,ctx){const ref=singleRef(input,{flag:"--task",label:"\u30BF\u30B9\u30AF",usage:"twp task subtasks help"});if(taskSurface(input,ref)===PRIVATE_SURFACE2){return withResolved(input,{surface:PRIVATE_SURFACE2,taskId:await resolvePrivateTaskId(
147
+ ctx,ref)})}return withResolved(input,await resolveTaskLocation(input,ctx,ref))},plan(input){const taskId=encodeURIComponent(requireResolved(input,"taskId"));if(isPrivatePlan2(input)){return{method:"GET",path:`${PRIVATE_TASKS_PATH}/${taskId}/subtasks`}}const projectId=encodeURIComponent(requireResolved(input,"projectId"));return{method:"GET",path:`/api/v2/projects/${projectId}/tasks/${taskId}/subtasks`}},summarize:body=>subtaskItems(body).map(row=>pick(row,LIST_COLUMNS2)),raw:body=>subtaskItems(body)},
148
+ {name:"create",summary:"\u30BF\u30B9\u30AF\u3092\u4F5C\u6210\u3059\u308B",usage:'twp task create --subject "<\u4EF6\u540D>" [--project <\u30B3\u30FC\u30C9|ID|__private__>] [--type <\u540D\u524D>] [--status <\u540D\u524D>] [--assignee <me|\u540D\u524D>]',description:`--subject \u3060\u3051\u304C\u5FC5\u9808\u3067\u3059\u3002--status / --type \u3092\u7701\u304F\u3068\u3001\u305D\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u304C\u65E2\u5B9A\u306B\u6307\u5B9A\u3057\u3066\u3044\u308B
149
+ \u3082\u306E\u3092\u4F7F\u3044\u307E\u3059\uFF08\u30B5\u30FC\u30D0\u5074\u3067\u306F\u3069\u3061\u3089\u3082\u5FC5\u9808\u9805\u76EE\u3067\u3059\uFF09\u3002\u65E2\u5B9A\u3092\u4F7F\u3063\u305F\u5834\u5408\u306F stderr \u306B\u6CE8\u8A18\u304C\u51FA\u307E\u3059\u3002
150
+
151
+ \u30B5\u30D6\u30BF\u30B9\u30AF\u306E\u4F5C\u6210\uFF08\u89AA\u30BF\u30B9\u30AF\u306E\u6307\u5B9A\uFF09\u306F\u3053\u306E\u30B3\u30DE\u30F3\u30C9\u3067\u306F\u884C\u3048\u307E\u305B\u3093\u3002\u540C\u3058\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8\u304C
152
+ \u89AA\u306E\u6307\u5B9A\u3092\u53D7\u3051\u307E\u3059\u304C\u3001\u30B5\u30FC\u30D0\u5074\u306F\u968E\u5C64\u306E\u691C\u8A3C\u3068\u6DF1\u3055\u306E\u8A08\u7B97\u3092\u542B\u3080\u5225\u306E\u51E6\u7406\u3078\u5206\u5C90\u3057\u307E\u3059\u3002
153
+ \u6271\u3044\u304C\u5909\u308F\u308B\u306E\u3067\u3001\u5225\u30B3\u30DE\u30F3\u30C9\u3068\u3057\u3066\u7528\u610F\u3057\u307E\u3059\u3002
154
+
155
+ ${PRIVATE_HELP}
156
+
157
+ `+FIELD_HELP,flags:[...FIELD_FLAGS,PROJECT_FLAG],async prepare(input,ctx){if(input.args.length>0){throw new UsageError(`create \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,'\u4EF6\u540D\u306F --subject "<\u4EF6\u540D>" \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002')}checkPureFields(input);if(boundedText(input,"--subject",{maxChars:SUBJECT_MAX_CHARS,label:"\u4EF6\u540D"})===void 0){throw new UsageError('\u4EF6\u540D\u3092 --subject "<\u4EF6\u540D>" \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044',
158
+ "twp task create help")}if(wantsPrivateSurface(input)){rejectPrivateUnsupportedFlags(input);const privateDescription=await readDescription(input,"twp task create help");return withResolved(input,{surface:PRIVATE_SURFACE2,...privateDescription!==void 0?{description:privateDescription}:{},...await resolvePrivateStatusAndType(input,ctx,{useDefaults:true})})}const description=await readDescription(input,"twp task create help");const projectId=await ctx.projectId(input.flags.get("--project"));return withResolved(
159
+ input,{projectId,...description!==void 0?{description}:{},...await resolveStatusAndType(input,ctx,projectId,{useDefaults:true})})},plan:input=>isPrivatePlan2(input)?{method:"POST",path:PRIVATE_TASKS_PATH,body:taskBody(input)}:{method:"POST",path:`/api/v2/projects/${encodeURIComponent(requireResolved(input,"projectId"))}/tasks`,body:taskBody(input)},summarize:body=>pick(taskObject(body),GET_COLUMNS),raw:taskObject,plannedNotes:input=>{const notes=[];const status=input.resolved?.["status_defaulted"];
160
+ const type=input.resolved?.["type_defaulted"];if(status!==void 0)notes.push(`--status \u672A\u6307\u5B9A\u306E\u305F\u3081\u3001\u65E2\u5B9A\u306E\u30B9\u30C6\u30FC\u30BF\u30B9\u300C${status}\u300D\u3092\u4F7F\u3044\u307E\u3059\u3002`);if(type!==void 0)notes.push(`--type \u672A\u6307\u5B9A\u306E\u305F\u3081\u3001\u65E2\u5B9A\u306E\u7A2E\u5225\u300C${type}\u300D\u3092\u4F7F\u3044\u307E\u3059\u3002`);return notes}},{name:"update",summary:"\u30BF\u30B9\u30AF\u3092\u66F4\u65B0\u3059\u308B",usage:'tw\
161
+ p task update <\u30AD\u30FC|ID> [--status <\u540D\u524D>] [--assignee <me|\u540D\u524D>] [--subject "<\u4EF6\u540D>"]',description:`${TASK_REF_HELP}
162
+
163
+ \u6307\u5B9A\u3057\u305F\u9805\u76EE\u3060\u3051\u3092\u5909\u66F4\u3057\u307E\u3059\uFF08\u6307\u5B9A\u3057\u306A\u304B\u3063\u305F\u9805\u76EE\u306F\u5909\u308F\u308A\u307E\u305B\u3093\uFF09\u3002
164
+ \u5909\u66F4\u3059\u308B\u9805\u76EE\u30921\u3064\u3082\u6307\u5B9A\u3057\u306A\u3044\u3068\u30A8\u30E9\u30FC\u306B\u306A\u308A\u307E\u3059\u2014\u2014\u4F55\u3082\u5909\u308F\u3089\u306A\u3044\u66F4\u65B0\u3067\u3082\u3001
165
+ \u30B5\u30FC\u30D0\u5074\u3067\u306F\u66F4\u65B0\u65E5\u6642\u3068\u5909\u66F4\u5C65\u6B74\u304C\u52D5\u304F\u305F\u3081\u3067\u3059\u3002
166
+
167
+ ${PRIVATE_HELP}
168
+
169
+ `+FIELD_HELP,flags:[...FIELD_FLAGS,TASK_REF_FLAG,PROJECT_FLAG],async prepare(input,ctx){const ref=singleRef(input,{flag:"--task",label:"\u30BF\u30B9\u30AF",usage:"twp task update help"});checkPureFields(input);if(!FIELD_FLAGS.some(flag=>input.flags.has(flag.name))){throw new UsageError("\u5909\u66F4\u3059\u308B\u9805\u76EE\u30921\u3064\u4EE5\u4E0A\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",`\u6307\u5B9A\u3067\u304D\u308B\u9805\u76EE: ${FIELD_FLAGS.map(flag=>flag.name).join(" / ")}`)}const surface=taskSurface(
170
+ input,ref);if(surface===PRIVATE_SURFACE2)rejectPrivateUnsupportedFlags(input);const description=await readDescription(input,"twp task update help");if(surface===PRIVATE_SURFACE2){return withResolved(input,{surface:PRIVATE_SURFACE2,taskId:await resolvePrivateTaskId(ctx,ref),...description!==void 0?{description}:{},...await resolvePrivateStatusAndType(input,ctx,{useDefaults:false})})}const located=await resolveTaskLocation(input,ctx,ref);return withResolved(input,{...located,...description!==void 0?
171
+ {description}:{},...await resolveStatusAndType(input,ctx,located.projectId,{useDefaults:false})})},plan:input=>{const taskId=encodeURIComponent(requireResolved(input,"taskId"));const body=taskBody(input);if(isPrivatePlan2(input))return{method:"PUT",path:`${PRIVATE_TASKS_PATH}/${taskId}`,body};return{method:"PUT",path:`/api/v2/projects/${encodeURIComponent(requireResolved(input,"projectId"))}/tasks/${taskId}`,body}},summarize:body=>pick(taskObject(body),GET_COLUMNS),raw:taskObject},{name:"delete",
172
+ summary:"\u30BF\u30B9\u30AF\u3092\u524A\u9664\u3059\u308B",usage:"twp task delete <\u30AD\u30FC|ID> --yes [--project <\u30B3\u30FC\u30C9|ID|__private__>]",description:`${TASK_REF_HELP}
173
+
174
+ \u524A\u9664\u306F\u53D6\u308A\u6D88\u305B\u307E\u305B\u3093\u3002\u30B5\u30D6\u30BF\u30B9\u30AF\u3092\u6301\u3064\u30BF\u30B9\u30AF\u3092\u6D88\u3059\u3068\u3001\u30B5\u30FC\u30D0\u5074\u306E\u898F\u5247\u306B\u5F93\u3063\u3066
175
+ \u5B50\u3082\u4E00\u7DD2\u306B\u6271\u308F\u308C\u307E\u3059\u3002\u5148\u306B twp task subtasks <\u30AD\u30FC> \u3067\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002
176
+
177
+ `+PRIVATE_HELP,destructive:true,flags:[TASK_REF_FLAG,PROJECT_FLAG],async prepare(input,ctx){const ref=singleRef(input,{flag:"--task",label:"\u30BF\u30B9\u30AF",usage:"twp task delete help"});if(taskSurface(input,ref)===PRIVATE_SURFACE2){return withResolved(input,{surface:PRIVATE_SURFACE2,taskId:await resolvePrivateTaskId(ctx,ref)})}return withResolved(input,await resolveTaskLocation(input,ctx,ref))},plan:input=>{const taskId=encodeURIComponent(requireResolved(input,"taskId"));if(isPrivatePlan2(input))
178
+ return{method:"DELETE",path:`${PRIVATE_TASKS_PATH}/${taskId}`};return{method:"DELETE",path:`/api/v2/projects/${encodeURIComponent(requireResolved(input,"projectId"))}/tasks/${taskId}`}},summarize:body=>acknowledgement(body,"\u30BF\u30B9\u30AF\u524A\u9664"),raw:body=>acknowledgement(body,"\u30BF\u30B9\u30AF\u524A\u9664")}],subresources:[taskCommentResource,...taskMasterResources]};export{taskDomain};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tocca-systems/twp-cli",
3
- "version": "0.11.0",
3
+ "version": "0.13.0",
4
4
  "description": "TWP CLI — Tocca Working Platform の CLI 型統合インターフェース(AIエージェントハーネス)",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,82 +0,0 @@
1
- import { createRequire as __twpCreateRequire } from 'node:module';
2
- const require = __twpCreateRequire(import.meta.url);
3
- import{isServerAiType}from"./chunk-4QI5NX4C.js";import{DEFAULT_CLAUDE_LAUNCHER,activeSlotPath,detectAiClis,detectClaudeAutoSwitch,isClaudeAi,isUsableModelId,modelFitsRoute,resolveSpawnTarget,usesBedrock,wrapWithAutoSwitch}from"./chunk-3WJHTPOZ.js";import{isForceOnly,killProcessTree,system32}from"./chunk-N2UVRM3Z.js";import{findExecutable,isWindowsDriveAbsolute}from"./chunk-PMOUHEJQ.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";import{spawnSync}from"child_process";import fs2 from"fs";import path2 from"path";import{spawn}from"child_process";import fs from"fs";import path from"path";var MAX_SCAN_BYTES=512*1024;var PROGRESS_PREFIX=/^\s*\[\d{2}:\d{2}:\d{2}\]\s*/;var FINAL_REPORT_BEGIN="<<<AI_FINAL_REPORT>>>";var FINAL_REPORT_END="<<<END_AI_FINAL_REPORT>>>";var TRANSCRIPT_MARKER=/^(>>|<<|⛔|!!)\s/;function stripProgressPrefix(line){return line.replace(PROGRESS_PREFIX,"").trim()}function stripTranscript(raw){return filterLines(raw,true)}function stripModelProse(raw){return filterLines(raw,false)}function filterLines(raw,dropToolLines){const out=[];let inReport=false;for(const line of raw.
4
- split("\n")){if(line.includes(FINAL_REPORT_BEGIN)){inReport=true;continue}if(line.includes(FINAL_REPORT_END)){inReport=false;continue}if(inReport||line.includes("\u{1F4AC}"))continue;if(dropToolLines&&TRANSCRIPT_MARKER.test(stripProgressPrefix(line)))continue;out.push(line)}return out.join("\n")}var UNTRUSTED_PATTERNS=[/has not been trusted/i,/Ignoring [0-9]+ permissions\.allow entries/i];function isUntrusted(raw){const text=stripTranscript(raw);return UNTRUSTED_PATTERNS.some(p=>p.test(text))}var CLI_FATAL_TEXT_PATTERNS=[
5
- /^api error\b/i,/^failed to authenticate\b/i];function isCliFatalText(text){const head=text.trim();return CLI_FATAL_TEXT_PATTERNS.some(p=>p.test(head))}var CODEX_PLAIN_LIMIT_PATTERNS=[/^(?:error\s*:\s*)?you(?:'ve| have) hit (?:your|the) (?:usage|session|weekly|rate|quota) limit\b.*$/i,/^(?:error\s*:\s*)?(?:your|the) (?:usage|rate|session|quota) limit (?:has been )?(?:reached|exceeded)\b.*$/i,/^(?:error\s*:\s*)?(?:usage|rate|session|quota) limit (?:reached|exceeded)\b.*$/i,/^try again at\s+(?:jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)[a-z]*\s+\d{1,2}(?:st|nd|rd|th)?\b.*$/i];
6
- var CODEX_RUST_LIMIT_PATTERN=/^(?:\d{4}-\d{2}-\d{2}T\S+\s+)?(?:ERROR|WARN)\s+codex(?:[_:][a-z0-9_:-]+)*\s*:\s*.*(?:\b(?:429|529)\b|(?:usage|rate|session)[ ._-]*limit|quota[_ -]?(?:exhausted|exceeded))/i;var COMMON_LIMIT_PATTERNS=[/(?:status|code|http)[^a-z0-9]{0,10}429/i,/429[^0-9].{0,15}(?:too many|rate|throttl)/i,/(?:status|code|http)[^a-z0-9]{0,10}529/i,/529[^0-9].{0,15}overloaded/i,/too many requests/i,/max.?spend.?(?:limit|reached|exceeded)/i,/spending.?limit/i,/resets?\s+\d+(?::\d+)?\s*(?:am|pm)/i];
7
- var GEMINI_LIMIT_PATTERNS=[/terminalquotaerror/i,/retryablequotaerror/i,/quota_exhausted/i,/model_capacity_exhausted/i,/exhausted your capacity/i,/no capacity available/i,/ratelimitexceeded/i];var CLAUDE_LIMIT_PATTERNS=[/rate.?limit/i,/usage.?limit/i,/session.?limit/i,/quota.?(?:exceeded|reached|limit)/i,/(?:api|server|model).{0,20}overloaded/i,/hit.{0,10}(?:your|the).{0,20}limit/i];function isRateLimited(raw,ai){const text=stripTranscript(raw);if(ai==="codex"){for(const line of text.split("\n")){
8
- const normalized=stripProgressPrefix(line);if(CODEX_RUST_LIMIT_PATTERN.test(normalized))return true;if(CODEX_PLAIN_LIMIT_PATTERNS.some(p=>fullMatch(p,normalized)))return true}return false}const patterns=[...COMMON_LIMIT_PATTERNS,...ai==="gemini"?GEMINI_LIMIT_PATTERNS:[],...ai==="claude"?CLAUDE_LIMIT_PATTERNS:[]];return patterns.some(p=>p.test(text))}function fullMatch(pattern,value){const m=pattern.exec(value);return m!==null&&m[0]===value}var AUTH_ERROR_PATTERNS=[/(?:status|code|http)[^a-z0-9]{0,10}401/i,
9
- /(?:status|code|http)[^a-z0-9]{0,10}403/i,/401\s+unauthorized/i,/403\s+forbidden/i,/invalid.{0,10}(?:api.?key|token|credential)/i,/authentication.{0,10}(?:failed|error|invalid)/i,/(?:api.?key|token).{0,10}(?:invalid|expired|missing|rejected)/i,/not logged in/i,/please (?:run )?login/i,/(?:codex|gemini|copilot|claude)\s+login/i,/failed to authenticate/i,/oauth (?:session|token).{0,30}(?:expired|invalid|revoked)/i];function isAuthError(raw){const text=stripModelProse(raw);return AUTH_ERROR_PATTERNS.
10
- some(p=>p.test(text))}function rateLimitWaitSeconds(raw,now=new Date){const claude=/resets?\s+(\d{1,2}(?::\d{2})?)\s*(am|pm)/i.exec(raw);if(claude){const[hourStr,minStr]=(claude[1]??"").split(":");let hour=Number.parseInt(hourStr??"",10);const minute=minStr===void 0?0:Number.parseInt(minStr,10);const ampm=(claude[2]??"").toLowerCase();if(Number.isInteger(hour)&&Number.isInteger(minute)){if(ampm==="pm"&&hour!==12)hour+=12;else if(ampm==="am"&&hour===12)hour=0;const reset=new Date(now);reset.setHours(
11
- hour,minute,0,0);if(reset.getTime()<=now.getTime())reset.setDate(reset.getDate()+1);const wait=Math.trunc((reset.getTime()-now.getTime())/1e3);if(wait>0&&wait<=21600)return wait+30}}const gemini=/reset\s+after\s+(\d+)h(\d+)m(?:(\d+)s)?/i.exec(raw);if(gemini){const wait=Number(gemini[1])*3600+Number(gemini[2])*60+Number(gemini[3]??0);if(wait>0&&wait<=86400)return wait+30}const codex=/try again at\s+(\w+)\s+(\d+)(?:st|nd|rd|th)?,?\s*(\d{4})?\s+(\d{1,2}):(\d{2})\s*(AM|PM)/i.exec(raw);if(codex){const months={
12
- jan:0,feb:1,mar:2,apr:3,may:4,jun:5,jul:6,aug:7,sep:8,oct:9,nov:10,dec:11};const mon=months[(codex[1]??"").slice(0,3).toLowerCase()];if(mon!==void 0){let hour=Number(codex[4]);const ampm=(codex[6]??"").toLowerCase();if(ampm==="pm"&&hour!==12)hour+=12;else if(ampm==="am"&&hour===12)hour=0;const year=codex[3]?Number(codex[3]):now.getFullYear();const reset=new Date(year,mon,Number(codex[2]),hour,Number(codex[5]),0,0);const wait=Math.trunc((reset.getTime()-now.getTime())/1e3);if(wait>0)return wait+30}}
13
- return null}function maxTurnsReached(raw,maxTurns){if(!Number.isFinite(maxTurns)||maxTurns<=0)return false;const matches=raw.match(/完了 \(turns: (\d+)/g);const last=matches?.[matches.length-1];if(last===void 0)return false;const turns=Number.parseInt(/(\d+)$/.exec(last)?.[1]??"",10);return Number.isInteger(turns)&&turns>=maxTurns}function tailForScan(text){return text.length<=MAX_SCAN_BYTES?text:text.slice(text.length-MAX_SCAN_BYTES)}var FINAL_REPORT_BEGIN2="<<<AI_FINAL_REPORT>>>";var FINAL_REPORT_END2="<<<END_AI_FINAL_REPORT>>>";var ClaudeStreamRenderer=class{constructor(now=()=>new Date){this.now=now}now;toolNames=new Map;toolCount=0;result={subtype:null,isError:null,numTurns:null,costUsd:null,durationMs:null,tokensIn:null,tokensOut:null,rateLimited:false,resetsAt:null,finalText:""};push(line){const trimmed=line.trim();if(trimmed==="")return[];let event;try{const parsed=JSON.parse(trimmed);if(parsed===null||typeof parsed!==
14
- "object"||Array.isArray(parsed)){return[line]}event=parsed}catch{return[line]}switch(event["type"]){case"rate_limit_event":return this.onRateLimit(event);case"assistant":return this.onAssistant(event);case"user":return this.onUser(event);case"result":return this.onResult(event);default:return event["type"]==="system"?[]:[line]}}sawRateLimit(){return this.result.rateLimited}lastRateLimitNote="";onRateLimit(event){const info=event["rate_limit_info"];if(info===null||typeof info!=="object")return[];
15
- const rec=info;const status=typeof rec["status"]==="string"?rec["status"]:"";const resets=typeof rec["resetsAt"]==="number"?rec["resetsAt"]:null;if(status==="")return[];const at=isSaneEpochSec(resets)?` resets=${new Date(resets*1e3).toISOString()}`:"";if(status.startsWith("allowed")){if(status==="allowed")return[];const seen=`${status}|${resets??""}`;if(seen===this.lastRateLimitNote)return[];this.lastRateLimitNote=seen;return[this.line(`\u2139\uFE0F \u4E0A\u9650\u306B\u63A5\u8FD1\uFF08status=${status}${at}\
16
- \uFF09\u2014 \u5B9F\u884C\u306F\u7D99\u7D9A\u3057\u307E\u3059`)]}if(resets!==null)this.result.resetsAt=resets;this.result.rateLimited=true;return[this.line(`\u26A0\uFE0F \u30EC\u30FC\u30C8\u30EA\u30DF\u30C3\u30C8\u901A\u77E5: status=${status}${at}`)]}onAssistant(event){const out=[];for(const block of contentBlocks(event)){if(block.type==="tool_use"){const name=typeof block.name==="string"?block.name:"tool";if(typeof block.id==="string")this.toolNames.set(block.id,name);this.toolCount+=1;out.push(
17
- this.line(`>> ${name}${toolDetail(name,block.input)}`))}else if(block.type==="text"&&typeof block.text==="string"&&block.text.trim()!==""){for(const l of block.text.trim().split("\n"))out.push(this.line(` \u{1F4AC} ${l}`))}}return out}onUser(event){const out=[];for(const block of contentBlocks(event)){if(block.type!=="tool_result")continue;const id=typeof block.id==="string"?block.id:"";const useId=typeof block.tool_use_id==="string"?block.tool_use_id:id;const name=this.toolNames.get(useId)??"\
18
- tool";this.toolNames.delete(useId);const isError=block.is_error===true;const detail=isError?firstErrorLine(block):"";out.push(this.line(`${isError?"!!":"<<"} ${name}${detail}`))}return out}onResult(event){const r=this.result;r.subtype=typeof event["subtype"]==="string"?event["subtype"]:null;r.isError=typeof event["is_error"]==="boolean"?event["is_error"]:null;r.numTurns=typeof event["num_turns"]==="number"?event["num_turns"]:null;r.costUsd=typeof event["total_cost_usd"]==="number"?event["total_c\
19
- ost_usd"]:null;r.durationMs=typeof event["duration_ms"]==="number"?event["duration_ms"]:null;const usage=event["usage"];if(usage!==null&&typeof usage==="object"&&!Array.isArray(usage)){const u=usage;const num=key=>typeof u[key]==="number"?u[key]:0;const hasIn=["input_tokens","cache_creation_input_tokens","cache_read_input_tokens"].some(k=>typeof u[k]==="number");r.tokensIn=hasIn?num("input_tokens")+num("cache_creation_input_tokens")+num("cache_read_input_tokens"):null;r.tokensOut=typeof u["outpu\
20
- t_tokens"]==="number"?u["output_tokens"]:null}const out=[this.line(`\u5B8C\u4E86 (turns: ${r.numTurns??0}, tools: ${this.toolCount}, ${Math.round((r.durationMs??0)/1e3)}s, $${(r.costUsd??0).toFixed(3)})`)];const text=typeof event["result"]==="string"?event["result"]:"";r.finalText=text;if(text!==""){out.push(FINAL_REPORT_BEGIN2,text,FINAL_REPORT_END2)}return out}line(msg){const d=this.now();const ts=`${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`;return` [${ts}] ${msg}`}};function firstErrorLine(block){
21
- const content=block.content;const text=typeof content==="string"?content:Array.isArray(content)?content.map(c=>c!==null&&typeof c==="object"&&typeof c.text==="string"?c.text:"").join(" "):"";const first=text.trim().split("\n")[0]??"";return first===""?"":` | ${first.slice(0,120)}`}function contentBlocks(event){const message=event["message"];if(message===null||typeof message!=="object")return[];const content=message["content"];if(!Array.isArray(content))return[];return content.filter(b=>b!==null&&
22
- typeof b==="object")}function toolDetail(name,input){if(input===void 0||input===null)return"";const str=k=>typeof input[k]==="string"?input[k]:"";if(name==="Bash"){const cmd=str("command");return cmd===""?"":` $ ${cmd.slice(0,80)}${cmd.length>80?"...":""}`}if(name==="Read"||name==="Write"||name==="Edit"){const p=str("file_path");return p===""?"":` ${p}`}if(name==="Grep"||name==="Glob"){const p=str("pattern");return p===""?"":` '${p}'`}if(name==="Skill"){const s=str("skill");return s===""?"":` /${s}`}
23
- if(name.includes("mcp__")){const args=[];for(const k of["task_id","project_id","status_id","issue_id"]){const v=str(k);if(v!=="")args.push(`${k}=${v.slice(0,16)}`)}return args.length===0?"":` (${args.slice(0,2).join(", ")})`}return""}function pad(n){return String(n).padStart(2,"0")}function isSaneEpochSec(v){return v!==null&&Number.isFinite(v)&&Math.abs(v)<864e10}var DEFAULT_AI_TIMING={abortGraceMs:5e3,abortReapMs:2e3,pollIntervalMs:5e3};function resolveTiming(over){return{abortGraceMs:over?.abortGraceMs??DEFAULT_AI_TIMING.abortGraceMs,abortReapMs:over?.abortReapMs??DEFAULT_AI_TIMING.abortReapMs,pollIntervalMs:over?.pollIntervalMs??DEFAULT_AI_TIMING.pollIntervalMs}}var MAX_RETAINED_BYTES=4*1024*1024;function closeStream(stream){return new Promise(resolve=>{if(stream===null)return resolve();stream.once("error",()=>resolve());stream.end(()=>resolve())})}function buildArgs(req,cfg,env,workspace){
24
- const warnings=[];const requested=(req.model??"").trim();const usable=requested!==""&&isUsableModelId(requested);if(requested!==""&&!usable){warnings.push(`ai_model '${requested}' \u306F\u4F7F\u3048\u306A\u3044\u5F62\u3067\u3059 \u2192 \u30AB\u30C6\u30B4\u30EA\u65E2\u5B9A\u306E\u30E2\u30C7\u30EB\u3092\u4F7F\u3044\u307E\u3059`)}const fitsRoute=!usable||!isClaudeAi(req.ai)||modelFitsRoute(requested,env);if(usable&&!fitsRoute){warnings.push(`ai_model '${requested}' \u306F\u73FE\u5728\u306E\u5B9F\u884C\u7D4C\u8DEF\u3067\u306F\u89E3\u6C7A\u3067\u304D\u307E\u305B\u3093\uFF08\u3053\u306E\u6A5F\u4F53\u306F ${usesBedrock(
25
- env)?"Bedrock":"Anthropic \u76F4"}\uFF09 \u2192 \u30AB\u30C6\u30B4\u30EA\u65E2\u5B9A\u306E\u30E2\u30C7\u30EB\u3092\u4F7F\u3044\u307E\u3059`)}const fallback=cfg.modelFor(req.ai,req.category,env);const safeFallback=fallback===""||!isClaudeAi(req.ai)||modelFitsRoute(fallback,env)?fallback:"";if(fallback!==""&&safeFallback===""){warnings.push(`CLAUDE_MODEL '${fallback}' \u3082\u73FE\u5728\u306E\u5B9F\u884C\u7D4C\u8DEF\u3067\u306F\u89E3\u6C7A\u3067\u304D\u307E\u305B\u3093 \u2192 \u30E2\u30C7\u30EB\u3092\u6307\u5B9A\u3057\u307E\u305B\u3093`)}
26
- const model=usable&&fitsRoute?requested:safeFallback;const maxTurns=cfg.maxTurnsFor(req.category,env);let effort="";switch(req.ai){case"gemini":return{file:"gemini",args:["--yolo",...model?["--model",model]:[]],model,effort,maxTurns,warnings};case"codex":return{file:"codex",args:["exec","-s","danger-full-access",...model?["--model",model]:[]],model,effort,maxTurns,warnings};case"copilot":{const mcp=path.join(workspace,".copilot","mcp-config.json");const args=["--allow-all"];if(fs.existsSync(mcp))
27
- args.push("--additional-mcp-config",`@${mcp}`);else warnings.push(`${mcp} \u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002copilot \u306F MCP \u306A\u3057\u3067\u5B9F\u884C\u3055\u308C\u307E\u3059`);if(model)args.push("--model",model);return{file:"copilot",args,model,effort,maxTurns,warnings}}default:{if(req.ai!=="claude")warnings.push(`\u672A\u77E5\u306E AI '${req.ai}'\u3002claude \u3067\u5B9F\u884C\u3057\u307E\u3059`);const e=cfg.effortFor(req.category,req.skill,env,req.effort);if(e.warning!==
28
- null)warnings.push(e.warning);effort=e.value;const args=["-p","--max-turns",String(maxTurns),"--output-format","stream-json","--verbose","--dangerously-skip-permissions"];if(model)args.push("--model",model);if(effort)args.push("--effort",effort);return{file:"claude",args,model,effort,maxTurns,warnings}}}}async function runOnce(req,deps){let metrics=null;const result=await runOnceCore(req,deps,m=>{metrics=m});return metrics===null?result:{...result,metrics}}async function runOnceCore(req,deps,onMetrics){
29
- const env=deps.env??process.env;const timing=resolveTiming(deps.timing);const isClaude=isClaudeAi(req.ai);const built=buildArgs(req,deps.config,env,req.cwd);for(const w of built.warnings)deps.log(` \u8B66\u544A: ${w}`);if(built.model)deps.log(` model: ${built.model} (ai_model=${req.model||"default"}, category=${req.category})`);if(built.effort)deps.log(` effort: ${built.effort} (category=${req.category}, skill=${req.skill||"none"})`);if(built.effort&&(req.effort??"").trim()===built.effort){deps.
30
- log(` effort \u6307\u5B9A\u5143: item (ai_effort=${built.effort})`)}const launch=isClaude?wrapWithAutoSwitch(deps.cas,built.file,built.args):{file:built.file,args:built.args};const slot=req.slot!==void 0?req.slot:isClaude&&deps.cas!==null?activeSlotPath(deps.cas):null;if(slot!==null)deps.log(` claude \u67A0: ${slot}`);deps.log(`${req.ai} \u5B9F\u884C: ${firstLine(req.prompt)}`);deps.log(` \u30ED\u30B0: ${req.logFile}`);const renderer=isClaude?new ClaudeStreamRenderer(deps.now):null;const lines=[];
31
- let retained=0;let truncated=false;let stream=null;try{fs.mkdirSync(path.dirname(req.logFile),{recursive:true,mode:448});stream=fs.createWriteStream(req.logFile,{flags:"w",mode:384})}catch{}const emit=line=>{const clean=stripTerminalControls(line);stream?.write(`${clean}
32
- `);deps.log(clean);if(retained<MAX_RETAINED_BYTES){lines.push(clean);retained+=clean.length+1}else if(!truncated){truncated=true;lines.push("\u2026\uFF08\u51FA\u529B\u304C\u4E0A\u9650\u3092\u8D85\u3048\u305F\u305F\u3081\u3001\u4EE5\u964D\u306F\u30B9\u30C6\u30C3\u30D7\u30ED\u30B0\u306B\u306E\u307F\u8A18\u9332\u3057\u307E\u3059\uFF09")}};emit(` \u30D7\u30ED\u30F3\u30D7\u30C8: ${req.prompt.length} \u6587\u5B57\uFF08stdin \u7D4C\u7531\uFF09`);const target=resolveSpawnTarget(launch.file,launch.args,
33
- {env,platform:deps.platform});if(!target.ok){emit(`[twp task-loop] ${launch.file} \u3092\u8D77\u52D5\u3067\u304D\u307E\u305B\u3093: ${target.reason}`);deps.onProcess?.(null);await closeStream(stream);return{outcome:"unavailable",output:lines.join("\n"),exitCode:null,cooldownSec:null,slot}}if(target.note!==null)deps.log(` \u8D77\u52D5: ${target.note}`);let spawned;try{spawned=spawn(target.file,target.args,{cwd:req.cwd,env,detached:process.platform!=="win32",stdio:["pipe","pipe","pipe"]})}catch(e){
34
- const code=e.code??"";if(!["EINVAL","ENOENT","EACCES","ENAMETOOLONG"].includes(code))throw e;const hint=code==="ENAMETOOLONG"?`\uFF08\u30B3\u30DE\u30F3\u30C9\u30E9\u30A4\u30F3\u304C\u9577\u3059\u304E\u307E\u3059\u3002\u5B9F\u884C\u30D5\u30A1\u30A4\u30EB\uFF0B\u5F15\u6570\u3067 ${[target.file,...target.args].join(" ").length} \u6587\u5B57\u3002Windows \u306E\u4E0A\u9650\u306F 32,767 \u6587\u5B57\u3002\u30D7\u30ED\u30F3\u30D7\u30C8 ${req.prompt.length} \u6587\u5B57\u306F stdin \u7D4C\u7531\u306A\u306E\u3067\u539F\u56E0\u3067\u306F\u3042\u308A\u307E\u305B\u3093\uFF09`:
35
- "";emit(`[twp task-loop] ${launch.file} \u3092\u8D77\u52D5\u3067\u304D\u307E\u305B\u3093: ${e.message}${hint}`);deps.onProcess?.(null);await closeStream(stream);return{outcome:"unavailable",output:lines.join("\n"),exitCode:null,cooldownSec:null,slot}}let stdinDelivered=false;let stdinError=null;spawned.stdin.on("error",e=>{if(stdinError===null)stdinError=e.code??e.message});spawned.stdin.on("finish",()=>{stdinDelivered=true});spawned.stdin.end(req.prompt);let killedFor=null;const signalTree=signal=>killProcessTree(
36
- spawned,signal,{platform:deps.platform});const killTree=()=>{signalTree("SIGKILL")};let exited=false;let markExited=()=>{};const exitedPromise=new Promise(resolve=>{markExited=()=>{exited=true;deps.onProcess?.(null);resolve()}});const waitExit=ms=>Promise.race([exitedPromise,new Promise(resolve=>{const t=setTimeout(resolve,ms);t.unref?.()})]);const abort=async()=>{if(exited||spawned.exitCode!==null||spawned.signalCode!==null)return;if(killedFor===null)killedFor="aborted";if(isForceOnly(deps.platform)){
37
- deps.log(`\u26A0\uFE0F \u4E2D\u65AD\u30B7\u30B0\u30CA\u30EB\u3092\u53D7\u3051\u305F\u305F\u3081 ${req.ai} \u3092\u505C\u6B62\u3057\u307E\u3059\uFF08Windows \u306F\u7336\u4E88\u3092\u7F6E\u3051\u306A\u3044\u305F\u3081 taskkill /T /F \u3067\u6728\u3054\u3068\u5F37\u5236\u7D42\u4E86\u3057\u307E\u3059\uFF09`);const how=signalTree("SIGKILL");await waitExit(timing.abortReapMs);deps.log(!exited?` \u26A0\uFE0F ${req.ai} \u304C ${timing.abortReapMs/1e3}\u79D2 \u4EE5\u5185\u306B\u6D88\u3048\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u6B8B\u3063\u3066\u3044\u306A\u3044\u304B taskkill /FI \u3067\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044`:
38
- how==="taskkill"?` ${req.ai} \u306E\u30D7\u30ED\u30BB\u30B9\u6728\u3092\u5F37\u5236\u7D42\u4E86\u3057\u307E\u3057\u305F\uFF08\u5B6B\u307E\u3067 taskkill /T \u304C\u5C4A\u304D\u307E\u3057\u305F\uFF09`:` \u26A0\uFE0F ${req.ai} \u306E\u76F4\u4E0B\u306E\u30D7\u30ED\u30BB\u30B9\u3060\u3051\u3092\u7D42\u4E86\u3057\u307E\u3057\u305F\uFF08taskkill \u3092\u6483\u3066\u306A\u304B\u3063\u305F\u305F\u3081\u5B6B\u304C\u6B8B\u3063\u3066\u3044\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\uFF09`);return}
39
- deps.log(`\u26A0\uFE0F \u4E2D\u65AD\u30B7\u30B0\u30CA\u30EB\u3092\u53D7\u3051\u305F\u305F\u3081 ${req.ai} \u3092\u505C\u6B62\u3057\u307E\u3059\uFF08SIGTERM \u2192 \u6700\u5927${timing.abortGraceMs/1e3}\u79D2 \u2192 SIGKILL\uFF09`);signalTree("SIGTERM");await waitExit(timing.abortGraceMs);deps.log(exited?` ${req.ai} \u306F\u81EA\u5206\u304B\u3089\u7D42\u4E86\u3057\u307E\u3057\u305F\u3002\u6B8B\u3063\u305F\u5B50\u5B6B\u3092\u30D7\u30ED\u30BB\u30B9\u30B0\u30EB\u30FC\u30D7\u3054\u3068\u6383\u304D\u307E\u3059`:
40
- ` ${req.ai} \u304C\u7336\u4E88\u5185\u306B\u7D42\u4E86\u3057\u306A\u304B\u3063\u305F\u305F\u3081\u3001\u30D7\u30ED\u30BB\u30B9\u30B0\u30EB\u30FC\u30D7\u3092\u5F37\u5236\u7D42\u4E86\u3057\u307E\u3059`);signalTree("SIGKILL");await waitExit(timing.abortReapMs)};deps.onProcess?.(abort);const started=Date.now();const feed=lineFeeder(raw=>{if(renderer===null)emit(raw);else for(const l of renderer.push(raw))emit(l)});spawned.stdout.on("data",c=>feed(c.toString("utf8")));spawned.stderr.on("data",c=>feed(
41
- c.toString("utf8")));const timer=setInterval(()=>{if((Date.now()-started)/1e3>=req.timeoutSec){deps.log(`\u26A0\uFE0F ${req.ai} \u30BF\u30A4\u30E0\u30A2\u30A6\u30C8 (${Math.trunc((Date.now()-started)/1e3)}s >= ${req.timeoutSec}s) \u2192 \u30D7\u30ED\u30BB\u30B9\u3092\u5F37\u5236\u7D42\u4E86`);killedFor="timeout";killTree();return}const limited=renderer!==null?renderer.sawRateLimit():isRateLimited(recentTail(lines),req.ai);if(limited){deps.log(`\u26A0\uFE0F ${req.ai} \u30EC\u30FC\u30C8\u30EA\u30DF\u30C3\u30C8\u691C\u77E5 \u2192 \u5373\u5EA7\u306B\u30D7\u30ED\u30BB\u30B9\u3092\u7D42\u4E86`);
42
- killedFor="rate-limited";killTree()}},timing.pollIntervalMs);let notLaunched=false;const exitCode=await new Promise(resolve=>{spawned.on("error",e=>{notLaunched=true;emit(`[twp task-loop] ${launch.file} \u3092\u8D77\u52D5\u3067\u304D\u307E\u305B\u3093: ${e.message}`);markExited();resolve(null)});spawned.on("close",code=>{markExited();resolve(code)})});deps.onProcess?.(null);clearInterval(timer);feed(null);if(stdinError!==null||!stdinDelivered){const cause=killedFor!==null?`\u3053\u3061\u3089\u304C ${killedFor}\
43
- \u3067\u505C\u6B62\u3055\u305B\u305F\u305F\u3081`:notLaunched?"\u8D77\u52D5\u3067\u304D\u306A\u304B\u3063\u305F\u305F\u3081":exitCode===null?`AI \u304C signal\uFF08${spawned.signalCode??"\u4E0D\u660E"}\uFF09\u3067\u843D\u3061\u305F\u305F\u3081`:exitCode!==0?`AI \u304C\u7D42\u4E86\u30B3\u30FC\u30C9 ${exitCode} \u3067\u5148\u306B\u7D42\u308F\u3063\u305F\u305F\u3081`:"AI \u304C stdin \u3092\u8AAD\u307F\u5207\u3089\u306A\u304B\u3063\u305F\u305F\u3081";emit(`[twp task-loop] ${req.ai} \u3078\u30D7\u30ED\u30F3\u30D7\u30C8 ${req.
44
- prompt.length} \u6587\u5B57\u3092\u9001\u308A\u5207\u308C\u307E\u305B\u3093\u3067\u3057\u305F\uFF08${cause}${stdinError===null?"":`\u30FB${stdinError}`}\uFF09`)}await closeStream(stream);const output=lines.join("\n");const scan=tailForScan(output);onMetrics({turns:renderer?.result.numTurns??null,tokensIn:renderer?.result.tokensIn??null,tokensOut:renderer?.result.tokensOut??null,costUsd:renderer?.result.costUsd??null,effort:built.effort===""?null:built.effort});const fatalText=exitCode!==0&&isCliFatalText(
45
- renderer?.result.finalText??"")?renderer?.result.finalText??"":"";if(killedFor==="aborted"){return{outcome:"aborted",output,exitCode,cooldownSec:null,slot}}const untrusted=isClaude&&isUntrusted(scan);if(untrusted){deps.log("\u26A0\uFE0F claude: \u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u672A\u30C8\u30E9\u30B9\u30C8\u306E\u8B66\u544A\u304C\u51FA\u3066\u3044\u307E\u3059\uFF08permissions.allow \u306F\u7121\u8996\u3055\u308C\u308B\u304C\u5B9F\u884C\u81EA\u4F53\u306F\u901A\u308B\u3002hasTrustDialogAccepted \u3092\u7ACB\u3066\u308B\u3053\u3068\uFF09")}
46
- const structuredLimited=renderer?.result.rateLimited===true;const textLimited=renderer!==null?exitCode!==0&&isRateLimited(scan,req.ai):isRateLimited(scan,req.ai);const fatalLimited=fatalText!==""&&isRateLimited(fatalText,req.ai);if(killedFor==="rate-limited"||structuredLimited||textLimited||fatalLimited){return{outcome:"rate-limited",output,exitCode,cooldownSec:cooldownFrom(renderer,`${scan}
47
- ${fatalText}`,deps.now?.()??new Date),slot}}if(killedFor==="timeout")return{outcome:"timeout",output,exitCode,cooldownSec:null,slot};if(exitCode!==0&&(isAuthError(scan)||fatalText!==""&&isAuthError(fatalText))){deps.log(`\u26A0\uFE0F ${req.ai} \u8A8D\u8A3C\u30A8\u30E9\u30FC\u3092\u691C\u77E5\u3057\u307E\u3057\u305F\uFF08\u30D5\u30A9\u30FC\u30EB\u30D0\u30C3\u30AF\u5BFE\u8C61\uFF09`);return{outcome:"auth-error",output,exitCode,cooldownSec:null,slot}}if(isClaude&&exitCode!==0){const byEvent=renderer?.
48
- result.subtype==="error_max_turns";if(byEvent||maxTurnsReached(output,built.maxTurns)){deps.log(`\u26A0\uFE0F claude \u30BF\u30FC\u30F3\u4E0A\u9650(${built.maxTurns})\u5230\u9054\u3067\u6253\u3061\u5207\u3089\u308C\u307E\u3057\u305F\uFF08\u672A\u5B8C\u4E86\u306E\u53EF\u80FD\u6027\u304C\u9AD8\u3044\uFF09`);return{outcome:"max-turns",output,exitCode,cooldownSec:null,slot}}}if(notLaunched){deps.log(`\u26D4 ${req.ai} \u3092\u8D77\u52D5\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08\u672A\u5C0E\u5165\u30FB\u5B9F\u884C\u6A29\u30FB\u30E9\u30C3\u30D1\u306E\u7834\u640D\u306E\u3044\u305A\u308C\u304B\uFF09`);
49
- return{outcome:"unavailable",output,exitCode,cooldownSec:null,slot}}if(untrusted&&exitCode!==0){deps.log("\u26D4 claude: \u672A\u30C8\u30E9\u30B9\u30C8\u306E\u307E\u307E\u5931\u6557\u3057\u307E\u3057\u305F\uFF08permissions.allow \u7121\u8996\u304C\u539F\u56E0\u306E\u53EF\u80FD\u6027\uFF09");return{outcome:"untrusted",output,exitCode,cooldownSec:null,slot}}if(exitCode===0&&!stdinDelivered){deps.log(`\u26D4 ${req.ai} \u306F\u7D42\u4E86\u30B3\u30FC\u30C90\u3067\u7D42\u308F\u308A\u307E\u3057\u305F\u304C\u3001\u30D7\u30ED\u30F3\u30D7\u30C8 ${req.
50
- prompt.length} \u6587\u5B57\u3092\u9001\u308A\u5207\u308C\u3066\u3044\u307E\u305B\u3093\uFF08\u5207\u308A\u8A70\u307E\u3063\u305F\u6307\u793A\u3067\u8D70\u3063\u305F\u53EF\u80FD\u6027\u304C\u3042\u308B\u305F\u3081\u6210\u529F\u3068\u3057\u3066\u6271\u3044\u307E\u305B\u3093\uFF09`);return{outcome:"failed",output,exitCode,cooldownSec:null,slot}}return{outcome:exitCode===0?"ok":"failed",output,exitCode,cooldownSec:null,slot}}function cooldownFrom(renderer,scan,now){const resets=renderer?.result.resetsAt??
51
- null;if(resets!==null){const wait=Math.trunc((resets*1e3-now.getTime())/1e3);if(wait>0)return wait+30}return rateLimitWaitSeconds(scan,now)}function lineFeeder(onLine){let buffer="";return chunk=>{if(chunk===null){if(buffer!=="")onLine(buffer);buffer="";return}buffer+=chunk;const parts=buffer.split("\n");buffer=parts.pop()??"";for(const p of parts)onLine(p)}}function firstLine(prompt){return(prompt.split("\n")[0]??"").slice(0,80)}function recentTail(lines){let size=0;let from=lines.length;while(from>
52
- 0&&size<64*1024){from-=1;size+=(lines[from]??"").length+1}return lines.slice(from).join("\n")}function sleepSync(ms){const shared=new Int32Array(new SharedArrayBuffer(4));Atomics.wait(shared,0,0,ms)}var DEFAULT_CHARTER_PREFIX="===== \u4EE5\u4E0B\u306F\u958B\u767A\u61B2\u7AE0\u3067\u3059\u3002\u5168\u3066\u306E\u5224\u65AD\u306E\u6700\u4E0A\u4F4D\u57FA\u6E96\u3067\u3042\u308A\u3001\u500B\u5225\u30B9\u30AD\u30EB\u306E\u624B\u9806\u3068\u77DB\u76FE\u3059\u308B\u5834\u5408\u306F\u672C\u61B2\u7AE0\u304C\u512A\u5148\u3057\u307E\u3059\u3002\u884C\u52D5\u3059\u308B\u524D\u306B\u3001\u305D\u306E\u884C\u52D5\u304C\u61B2\u7AE0\u306E\u76EE\u7684\u306B\u5BC4\u4E0E\u3059\u308B\u304B\u3092\u81EA\u3089\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002 =====";
53
- var DEFAULT_CHARTER_SUFFIX="===== \u958B\u767A\u61B2\u7AE0\u3053\u3053\u307E\u3067\u3002\u4EE5\u4E0B\u304C\u4ECA\u56DE\u306E\u30BF\u30B9\u30AF\u6307\u793A\u3067\u3059\u3002 =====";var UNKNOWN_SLOT="(unresolved)";var DispatchEngine=class{constructor(cfg,log,opts){this.cfg=cfg;this.log=log;this.opts=opts}cfg;log;opts;name="cli";cas=null;casDetected=false;slotResolved=new Map;lastSlot=new Map;charterWarned=false;unusable=null;activeAbort=null;aborting=false;unusableAt=0;launcherBin(){const v=this.opts.
54
- launcherBin?.trim();return v===void 0||v===""?DEFAULT_CLAUDE_LAUNCHER.bin:v}async run(req){this.slotResolved.clear();if(this.aborting){this.log("\u26D4 \u4E2D\u65AD\u30B7\u30B0\u30CA\u30EB\u3092\u53D7\u3051\u3066\u3044\u308B\u305F\u3081 AI \u3092\u8D77\u52D5\u3057\u307E\u305B\u3093");return{outcome:"aborted",usedAi:"",serverAiType:null,output:"\uFF08\u4E2D\u65AD\u306E\u305F\u3081\u672A\u5B9F\u884C\uFF09"}}const env=this.opts.env??process.env;const skill=req.skill??"";const category=req.category??
55
- this.cfg.categoryForSkill(skill);if(!this.preflightOk()){this.log("\u26D4 \u30DB\u30B9\u30C8\u5074\u306E\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u304C\u5230\u9054\u4E0D\u80FD\u3067\u3059\uFF08\u5168\u30DB\u30B9\u30C8\uFF09\u3002\u3053\u306E\u30A2\u30A4\u30C6\u30E0\u3067\u306F AI \u3092\u8D77\u52D5\u3057\u307E\u305B\u3093");return{outcome:"network-down",usedAi:"",serverAiType:null,output:"\uFF08\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u5230\u9054\u4E0D\u80FD\u306E\u305F\u3081\u672A\u5B9F\u884C\uFF09"}}if(!this.
56
- casDetected){this.cas=this.opts.detect!==void 0?this.opts.detect():detectClaudeAutoSwitch(this.launcherBin());this.casDetected=true;this.log(this.cas===null?` ${this.launcherBin()}: \u672A\u5C0E\u5165\uFF08claude \u3092\u7D20\u3067\u8D77\u52D5\u3057\u307E\u3059\uFF09`:` ${this.launcherBin()}: \u691C\u51FA\uFF08exec ${this.cas.hasExec?"\u3042\u308A \u2192 \u7D4C\u7531\u3057\u3066\u8D77\u52D5\u3057\u307E\u3059":"\u7121\u3057 \u2192 \u7D20\u3067\u8D77\u52D5\u3057\u307E\u3059\uFF08\u66F4\u65B0\u3092\u63A8\u5968\uFF09"}\
57
- \uFF09`)}const tried=[];let sawRateLimit=false;let sawTimeout=false;let ranAny=false;let skippedForCooldown=false;let lastOutput="";let lastValidated=true;const requested=this.orderFor(category,skill,req.aiType);const head=requested[0]??"";const order=this.usableOrder(requested,category,skill);for(const ai of order){if(tried.includes(ai))continue;if(!this.cfg.isAllowed(ai,category,skill)){this.log(` ${ai} \u306F category=${category} / skill=${skill||"none"} \u306E\u5B9F\u884C\u5BFE\u8C61\u5916\u306E\u305F\u3081\u30B9\u30AD\u30C3\u30D7`);
58
- continue}const slotFor=()=>{if(!isClaudeAi(ai))return null;if(this.cas===null)return null;if(this.slotResolved.has(ai))return this.slotResolved.get(ai)??null;const resolved=(this.opts.activeSlot??activeSlotPath)(this.cas);const effective=resolved??this.lastSlot.get(ai)??UNKNOWN_SLOT;if(resolved!==null)this.lastSlot.set(ai,resolved);else this.log(` ${ai} \u306E\u67A0\u3092\u89E3\u6C7A\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08${this.launcherBin()} ${DEFAULT_CLAUDE_LAUNCHER.activeArgs.
59
- join(" ")}\uFF09\u3002${effective} \u3068\u3057\u3066\u6271\u3044\u307E\u3059`);this.slotResolved.set(ai,effective);return effective};const slotNow=this.cfg.hasCooldownFor(ai,this.now())?slotFor():null;if(this.cfg.isRateLimited(ai,this.now(),slotNow)){skippedForCooldown=true;this.log(` ${ai} \u306F\u30EC\u30FC\u30C8\u30EA\u30DF\u30C3\u30C8\u4E2D\u306E\u305F\u3081\u30B9\u30AD\u30C3\u30D7`);continue}const isHead=tried.length===0&&ai===head;this.log(isHead?` AI\u9078\u629E: ${ai} (preferred) [cat\
60
- egory=${category}]`:` \u30D5\u30A9\u30FC\u30EB\u30D0\u30C3\u30AF: ${ai} [category=${category}]`);const prompt=this.buildPrompt(req.prompt,req.promptPrefix,ai,tried);const logFile=tried.length===0?req.logFile:req.logFile.replace(/\.log$/,`-fallback-${ai}.log`);if(this.aborting){this.log(` \u4E2D\u65AD\u30B7\u30B0\u30CA\u30EB\u3092\u53D7\u3051\u3066\u3044\u308B\u305F\u3081 ${ai} \u306F\u8D77\u52D5\u3057\u307E\u305B\u3093`);return{outcome:"aborted",usedAi:tried[tried.length-1]??"",serverAiType:null,
61
- output:lastOutput}}ranAny=true;const result=await(this.opts.runOnce??runOnce)({ai,prompt,logFile,cwd:req.cwd,timeoutSec:req.timeoutSec,category,skill,slot:slotFor(),model:isHead?req.aiModel:void 0,effort:req.aiEffort},{config:this.cfg,cas:this.cas,log:this.log,env,now:this.opts.now,onProcess:abort=>{this.activeAbort=abort;if(abort!==null&&this.aborting)void abort()}});lastOutput=result.output;tried.push(ai);if(!["rate-limited","auth-error","timeout","unavailable"].includes(result.outcome)){if(result.
62
- outcome==="ok"&&req.validate!==void 0){if(req.validate(result.output)){this.log(` ${ai} \u304B\u3089\u5B9F\u884C\u8A08\u753BJSON\u3092\u53D6\u5F97\u3057\u307E\u3057\u305F`)}else{this.log(` ${ai}: \u5B9F\u884C\u8A08\u753B\u306EJSON\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093 \u2192 \u6B21\u306EAI\u306B\u30D5\u30A9\u30FC\u30EB\u30D0\u30C3\u30AF`);lastValidated=false;continue}}return this.finish(result.outcome,ai,result.output,result.metrics)}if(result.outcome==="rate-limited"){sawRateLimit=true;
63
- const seconds=result.cooldownSec??this.cfg.cooldownDefaultSec(ai,env);const slotUsed=slotFor();const capped=this.cfg.markRateLimited(ai,seconds,this.now(),slotUsed);this.log(` ${ai} \u3092\u30EC\u30FC\u30C8\u30EA\u30DF\u30C3\u30C8\u3068\u3057\u3066\u30DE\u30FC\u30AF (${capped}\u79D2\u9593${slotUsed===null?"":` / \u67A0 ${slotUsed}`})`);await this.waitBeforeFallback(ai,env)}else if(result.outcome==="timeout"){sawTimeout=true;this.log(` ${ai} \u304C\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8 \u2192 \u6B21\u306EAI\u306B\u30D5\u30A9\u30FC\u30EB\u30D0\u30C3\u30AF`)}else if(result.
64
- outcome==="unavailable"){const sec=this.cfg.markAiUnusable(ai,this.now());this.log(` ${ai} \u3092\u8D77\u52D5\u3067\u304D\u307E\u305B\u3093 \u2192 \u6B21\u306EAI\u306B\u30D5\u30A9\u30FC\u30EB\u30D0\u30C3\u30AF\uFF08${sec}\u79D2\u9593\u306F\u9396\u304B\u3089\u5916\u3057\u307E\u3059\uFF09`)}else{const sec=this.cfg.markAiUnusable(ai,this.now());this.log(` ${ai} \u306E\u8A8D\u8A3C\u30A8\u30E9\u30FC \u2192 \u6B21\u306EAI\u306B\u30D5\u30A9\u30FC\u30EB\u30D0\u30C3\u30AF\uFF08${sec}\u79D2\u9593\u306F\u9396\u304B\u3089\u5916\u3057\u307E\u3059\uFF09`)}}
65
- if(!lastValidated&&!sawRateLimit&&ranAny){this.log("\u26A0\uFE0F \u3069\u306EAI\u304B\u3089\u3082\u5B9F\u884C\u8A08\u753BJSON\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F");return{outcome:"ok",usedAi:tried[tried.length-1]??"",serverAiType:null,output:lastOutput}}if(!ranAny){if(skippedForCooldown){this.log("\u26A0\uFE0F \u5168AI\u304C\u30AF\u30FC\u30EB\u30C0\u30A6\u30F3\u4E2D\u30671\u3064\u3082\u5B9F\u884C\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08\u5F85\u6A5F\u3057\u3066\u518D\u8A66\u884C\u3057\u307E\u3059\uFF09");
66
- return{outcome:"rate-limited",usedAi:"",serverAiType:null,output:lastOutput}}this.log("\u26A0\uFE0F \u5B9F\u884C\u3067\u304D\u308BAI\u304C\u9396\u306B1\u3064\u3082\u3042\u308A\u307E\u305B\u3093\uFF08\u672A\u30ED\u30B0\u30A4\u30F3\u30FB\u30AB\u30C6\u30B4\u30EA\u8A2D\u5B9A\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\uFF09");return{outcome:"unavailable",usedAi:"",serverAiType:null,output:lastOutput}}if(sawTimeout){this.log("\u26A0\uFE0F \u5168AI\u304C\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8\u307E\u305F\u306F\u8A8D\u8A3C\u30A8\u30E9\u30FC\u3067\u3059\uFF08\u30EC\u30FC\u30C8\u30EA\u30DF\u30C3\u30C8\u3067\u306F\u306A\u3044\u306E\u3067\u901A\u5E38\u5931\u6557\u3068\u3057\u3066\u6271\u3044\u307E\u3059\uFF09");
67
- return{outcome:"timeout",usedAi:tried[tried.length-1]??"",serverAiType:null,output:lastOutput}}if(sawRateLimit){this.log("\u26A0\uFE0F \u5168AI\u304C\u30EC\u30FC\u30C8\u30EA\u30DF\u30C3\u30C8\u3067\u3059");return{outcome:"rate-limited",usedAi:"",serverAiType:null,output:lastOutput}}this.log("\u26A0\uFE0F \u5168AI\u304C\u8A8D\u8A3C\u30A8\u30E9\u30FC\u307E\u305F\u306F\u8D77\u52D5\u4E0D\u80FD\u3067\u3059\uFF081\u884C\u3082\u5B9F\u884C\u3057\u3066\u3044\u306A\u3044\u305F\u3081\u3001\u5931\u6557\u3067\u306F\u306A\u304F\u672A\u5B9F\u884C\u3068\u3057\u3066\u6271\u3044\u307E\u3059\uFF09");
68
- return{outcome:"unavailable",usedAi:tried[tried.length-1]??"",serverAiType:null,output:lastOutput}}async abort(){this.aborting=true;const abort=this.activeAbort;if(abort===null)return false;await abort();return true}now(){return(this.opts.now??(()=>new Date))().getTime()}usableOrder(order,category,skill){const detected=this.detectUnusable();const unique=[...new Set(order)];const kept=[];const soft=[];const dropped=[];for(const ai of unique){const hit=this.cfg.isAiUnusable(ai,this.now())?{why:"\u76F4\u8FD1\
69
- \u306E\u8A8D\u8A3C\u30A8\u30E9\u30FC\u30FB\u8D77\u52D5\u5931\u6557",hard:false}:detected.get(ai);if(hit===void 0){kept.push(ai);continue}dropped.push(`${ai}\uFF08${hit.why}\uFF09`);if(!hit.hard)soft.push(ai)}if(dropped.length===0)return unique;const canRun=list=>list.some(ai=>this.cfg.isAllowed(ai,category,skill));if(!canRun(kept)&&canRun(soft)){this.log(` \u26A0\uFE0F \u9396\u306B\u5B9F\u884C\u3067\u304D\u308B AI \u304C\u6B8B\u308A\u307E\u305B\u3093\uFF08\u9664\u5916\u5019\u88DC: ${dropped.join(
70
- " / ")}\uFF09`);this.log(" \u63A8\u5B9A\u3067\u5916\u3057\u305F\u3082\u306E\u306F\u5224\u5B9A\u304C\u8AA4\u3063\u3066\u3044\u308B\u53EF\u80FD\u6027\u304C\u3042\u308B\u305F\u3081\u3001\u9396\u3078\u623B\u3057\u307E\u3059\uFF08fail-open\uFF09");return unique.filter(ai=>kept.includes(ai)||soft.includes(ai))}this.log(` \u9396\u304B\u3089\u9664\u5916: ${dropped.join(" / ")}`);if(kept.length===0){this.log(" \u9396\u306B\u8D77\u52D5\u3067\u304D\u308B AI \u304C1\u3064\u3082\u6B8B\u308A\u307E\u305B\u3093\uFF08\u672A\u5C0E\u5165\u306E AI \u3092\u8D77\u52D5\u3057\u3066\u3082\u5FC5\u305A\u5931\u6557\u3057\u307E\u3059\uFF09")}
71
- return kept}detectUnusable(){const now=this.now();if(this.unusable!==null&&now-this.unusableAt<DETECT_CACHE_MS)return this.unusable;const map=new Map;this.unusable=map;this.unusableAt=now;try{for(const d of(this.opts.detectClis??detectAiClis)({env:this.opts.env??process.env,launcherBin:this.launcherBin()})){if(!d.installed)map.set(d.ai,{why:"PATH \u306B\u7121\u3044\uFF08\u672A\u5C0E\u5165\uFF09",hard:true});else if(d.auth==="unauthenticated")map.set(d.ai,{why:"\u672A\u30ED\u30B0\u30A4\u30F3",hard:false})}}catch(err){
72
- this.log(` \u26A0\uFE0F AI CLI \u306E\u691C\u51FA\u306B\u5931\u6557\u3057\u307E\u3057\u305F\uFF08${err.message}\uFF09\u3002\u9396\u306F\u305D\u306E\u307E\u307E\u4F7F\u3044\u307E\u3059`);map.clear()}return map}orderFor(category,skill,preferred){const chain=this.cfg.chainFor(category);const head=preferred&&preferred.trim()!==""?preferred.trim():this.cfg.selectPrimary(category,skill,"P2","");return head===""?chain:[head,...chain]}finish(outcome,ai,output,metrics){const serverAiType=isServerAiType(
73
- ai)?ai:null;return metrics===void 0?{outcome,usedAi:ai,serverAiType,output}:{outcome,usedAi:ai,serverAiType,output,metrics}}async waitBeforeFallback(ai,env){const delay=this.cfg.fallbackDelaySec(ai,env);if(delay<=0)return;this.log(` \u23F3 ${ai} \u30EC\u30FC\u30C8\u30EA\u30DF\u30C3\u30C8 \u2192 \u30D5\u30A9\u30FC\u30EB\u30D0\u30C3\u30AF\u524D\u306B ${delay}\u79D2 \u5F85\u6A5F\uFF08\u4ED6AI\u3078\u306E\u8EE2\u5AC1\u3092\u6291\u5236\uFF09`);const sleep=this.opts.sleep??(ms=>new Promise(r=>setTimeout(
74
- r,ms)));await sleep(delay*1e3)}buildPrompt(body,promptPrefix,ai,tried){const expanded=this.expandForNonClaude(body,ai);const parts=[];if(tried.length>0)parts.push(fallbackNote(tried));const charter=this.charter();if(charter!==null)parts.push(charter);if(promptPrefix!==void 0&&promptPrefix!=="")parts.push(promptPrefix);parts.push(expanded);return parts.join("\n\n")}expandForNonClaude(prompt,ai){const cmd=this.opts.compileCommand;if(ai==="claude"||cmd===void 0||cmd.length===0)return prompt;const[file,
75
- ...args]=cmd;if(file===void 0)return prompt;const compileEnv={...this.opts.env??process.env};const resolved=process.platform!=="win32"||isWindowsDriveAbsolute(file)?file:findExecutable(file,{env:compileEnv,platform:"win32"});if(resolved===null)return prompt;const r=spawnSync(resolved,[...args,"--provider",ai,"--project-dir",this.opts.workspace],{encoding:"utf8",env:{...this.opts.env??process.env,_AI_PROMPT:prompt},timeout:6e4,maxBuffer:32*1024*1024});const out=(r.stdout??"").trim();if(r.error!==
76
- void 0||r.status!==0||out===""){this.log(` \u26A0\uFE0F ${ai} \u5411\u3051\u306E\u30B9\u30AD\u30EB\u5C55\u958B\u306B\u5931\u6557\u3057\u307E\u3057\u305F\uFF08\u672A\u5C55\u958B\u306E\u307E\u307E\u5B9F\u884C\u3057\u307E\u3059\uFF09`);return prompt}return out}charter(){if(this.opts.charterEnabled===false)return null;const file=this.opts.charterFile;if(file===void 0||file.trim()==="")return null;const resolved=path2.isAbsolute(file)?file:path2.resolve(this.opts.workspace,file);let body;try{body=fs2.
77
- readFileSync(resolved,"utf8")}catch{if(!this.charterWarned){this.charterWarned=true;this.log(` \u26A0\uFE0F\u26A0\uFE0F \u61B2\u7AE0\u3092\u6CE8\u5165\u3067\u304D\u307E\u305B\u3093\uFF08${resolved} \u304C\u8AAD\u3081\u306A\u3044\uFF09\u3002\u4EE5\u5F8C\u306E\u5B9F\u884C\u306F\u61B2\u7AE0\u306A\u3057\u3067\u9032\u307F\u307E\u3059`);this.log(" \u30D5\u30A1\u30A4\u30EB\u306E\u79FB\u52D5\u30FB\u6539\u540D\u30FB\u6A29\u9650\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u8A2D\u5B9A: charter_file / CHARTER_FILE\uFF09")}
78
- return null}const prefix=this.opts.charterPrefix??DEFAULT_CHARTER_PREFIX;const suffix=this.opts.charterSuffix??DEFAULT_CHARTER_SUFFIX;const parts=[];if(prefix!=="")parts.push(prefix);parts.push(body);if(suffix!=="")parts.push(suffix);return parts.join("\n\n")}preflightOk(){const env=this.opts.env??process.env;if((env.PREFLIGHT_ENABLED??"true")!=="true")return true;const hosts=this.opts.preflightHosts??DEFAULT_PREFLIGHT_HOSTS;if(hosts.length===0)return true;const timeout=Number.parseInt(env.PREFLIGHT_TIMEOUT??
79
- "",10);const sec=Number.isInteger(timeout)&&timeout>0?timeout:5;for(let attempt=0;attempt<2;attempt+=1){if(attempt>0)sleepSync(2e3);for(const host of hosts){const nul=process.platform==="win32"?"NUL":"/dev/null";const curl=process.platform==="win32"?system32(process.env,"curl.exe"):"curl";if(curl===null)return false;const r=spawnSync(curl,["-sS","--max-time",String(sec),"-o",nul,`https://${host}/`],{encoding:"utf8",timeout:(sec+5)*1e3});if(r.error===void 0&&r.status===0)return true}}return false}};
80
- var DETECT_CACHE_MS=1800*1e3;var DEFAULT_PREFLIGHT_HOSTS=["api.anthropic.com","github.com"];function fallbackNote(tried){return["\u3010\u30D5\u30A9\u30FC\u30EB\u30D0\u30C3\u30AF\u5B9F\u884C\u306B\u3064\u3044\u3066\u306E\u6CE8\u610F\u3011",`\u3053\u306E\u30BF\u30B9\u30AF\u306F\u5225\u306EAI\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\uFF08${tried.join(", ")}\uFF09\u304C\u5148\u306B\u8A66\u884C\u3057\u307E\u3057\u305F\u304C\u3001\u30EC\u30FC\u30C8\u30EA\u30DF\u30C3\u30C8\u3001\u8A8D\u8A3C\u30A8\u30E9\u30FC\u3001\u307E\u305F\u306F\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8\u306B\u3088\u308A\u5B8C\u4E86\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002`,
81
- "\u524D\u306EAI\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u304C\u30BF\u30B9\u30AF\u306E\u9014\u4E2D\u307E\u3067\u4F5C\u696D\u3092\u9032\u3081\u3066\u3044\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002\u7279\u306B\u4EE5\u4E0B\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044:","- TWP\u30BF\u30B9\u30AF\u306E\u30B9\u30C6\u30FC\u30BF\u30B9\u304C\u300C\u9032\u884C\u4E2D\u300D\u306B\u5909\u66F4\u3055\u308C\u3066\u3044\u306A\u3044\u304B\uFF08\u5909\u66F4\u3055\u308C\u3066\u3044\u308B\u5834\u5408\u306F\u305D\u306E\u307E\u307E\u7D99\u7D9A\uFF09",
82
- "- \u30B3\u30E1\u30F3\u30C8\u304C\u9014\u4E2D\u307E\u3067\u6295\u7A3F\u3055\u308C\u3066\u3044\u306A\u3044\u304B","- \u30D6\u30E9\u30F3\u30C1\u3084PR\u304C\u4F5C\u6210\u9014\u4E2D\u3067\u306A\u3044\u304B","\u307E\u305A\u73FE\u72B6\u3092\u78BA\u8A8D\u3057\u3066\u304B\u3089\u3001\u4E2D\u65AD\u3055\u308C\u305F\u7B87\u6240\u304B\u3089\u4F5C\u696D\u3092\u518D\u958B\u3057\u3066\u304F\u3060\u3055\u3044\u3002"].join("\n")}export{DEFAULT_CHARTER_PREFIX,DEFAULT_CHARTER_SUFFIX,DEFAULT_PREFLIGHT_HOSTS,DispatchEngine};
@@ -1,6 +0,0 @@
1
- import { createRequire as __twpCreateRequire } from 'node:module';
2
- const require = __twpCreateRequire(import.meta.url);
3
- function isAiUnavailable(outcome){return outcome==="unavailable"||outcome==="rate-limited"||outcome==="network-down"}function needsHumanToRestoreAi(outcome){return outcome==="unavailable"}function aiUnavailableLabel(outcome){if(outcome==="rate-limited")return"\u5168AI\u30EC\u30FC\u30C8\u30EA\u30DF\u30C3\u30C8";if(outcome==="network-down")return"\u30DB\u30B9\u30C8\u5074\u306E\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u969C\u5BB3";return"AI \u304C1\u3064\u3082\u4F7F\u3048\u306A\u3044\uFF08\u672A\u30ED\u30B0\u30A4\u30F3\u7B49\uFF09"}
4
- var SERVER_AI_TYPES=["claude","gemini","codex","copilot"];function isServerAiType(value){return SERVER_AI_TYPES.includes(value)}var NoopEngine=class{constructor(note="\uFF08noop \u30A8\u30F3\u30B8\u30F3: AI \u306F\u8D77\u52D5\u3057\u3066\u3044\u307E\u305B\u3093\uFF09"){this.note=note}note;name="noop";run(req){const output=[`[noop] prompt: ${req.prompt.split("\n").slice(-1)[0]??""}`,`[noop] cwd: ${req.cwd}`,`[noop] ai_type=${req.aiType??"(\u672A\u6307\u5B9A)"} ai_model=${req.aiModel??"(\u672A\u6307\u5B9A)"}`,
5
- this.note].join("\n");return Promise.resolve({outcome:"ok",usedAi:"noop",serverAiType:null,output})}};var UnknownEngineError=class extends Error{constructor(name,available){super(`\u672A\u77E5\u306E\u30A8\u30F3\u30B8\u30F3\u3067\u3059: ${name}\uFF08\u5229\u7528\u3067\u304D\u308B\u306E\u306F ${available.join(" / ")}\uFF09`)}};var ENGINE_NAMES=["cli","noop"];function assertKnownEngine(name){if(!ENGINE_NAMES.includes(name)){throw new UnknownEngineError(name,ENGINE_NAMES)}}var EngineNotConfiguredError=class extends Error{constructor(){
6
- super('\u5B9F\u884C\u30A8\u30F3\u30B8\u30F3\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\n \u5B9F AI \u3092\u8D77\u52D5\u3059\u308B\u306A\u3089 --engine cli\uFF08\u8A2D\u5B9A\u306A\u3089 "engine": "cli"\uFF09\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002\n \u9AA8\u683C\u3060\u3051\u3092\u691C\u8A3C\u3057\u305F\u3044\u5834\u5408\u306F --engine noop \u3092**\u660E\u793A**\u3057\u3066\u304F\u3060\u3055\u3044\u3002\n \u26A0\uFE0F noop \u306F AI \u30921\u3064\u3082\u8D77\u52D5\u305B\u305A\u30A2\u30A4\u30C6\u30E0\u3092 completed \u306B\u3057\u307E\u3059\u3002**\u5B9F\u30AD\u30E5\u30FC\uFF08\u672C\u756A\u306E TWP \u7B49\uFF09\u3078\u5411\u3051\u306A\u3044\u3053\u3068**\n \u5B9A\u671F\u7531\u6765\u306E\u30A2\u30A4\u30C6\u30E0\u306A\u3089\u67A0\u307E\u3067\u6D88\u5316\u3055\u308C\u3001\u305D\u306E\u7A93\u306E release-deploy / develop-merge \u304C\u767A\u706B\u3057\u306A\u304F\u306A\u308A\u307E\u3059\u3002')}};export{isAiUnavailable,needsHumanToRestoreAi,aiUnavailableLabel,isServerAiType,NoopEngine,UnknownEngineError,assertKnownEngine,EngineNotConfiguredError};
@@ -1,57 +0,0 @@
1
- import { createRequire as __twpCreateRequire } from 'node:module';
2
- const require = __twpCreateRequire(import.meta.url);
3
- import{stringWidth}from"./chunk-WVS4W5FY.js";import{GLOBAL_OPTIONS_HELP,HELP_TOKEN,splitFlagToken}from"./chunk-U457A23B.js";import{Resolver,requireDefaultProject}from"./chunk-Y46OQT4N.js";import{ApiError,TwpApiClient,appendQuery}from"./chunk-7ZVTACQS.js";import"./chunk-II5RVJQN.js";import{DEFAULT_MAX_ITEMS,DEFAULT_MAX_PAGES,nextPageNotes,positiveInteger,shellQuote}from"./chunk-2SGDY6YP.js";import{ApiResponseError,EXIT_API_CLIENT,EXIT_API_SERVER,EXIT_AUTH,EXIT_FAILURE,
4
- EXIT_OK,EXIT_USAGE,NetworkError,UsageError}from"./chunk-M3GWY6NT.js";import{ResolveError}from"./chunk-5QCAIKFE.js";import{AuthSession,NotLoggedInError,SessionExpiredError,loadCredentials}from"./chunk-63LDNYGW.js";import{effectiveApiUrl,loadUserConfig,resolveConfiguredOutput,resolveProfile}from"./chunk-NERYSBA4.js";import"./chunk-RZVI6PMW.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var SENSITIVE_HEADERS=new Set(["authorization","proxy-authorization","cookie","set-cookie","x-api-key","x-auth-token","x-vercel-protection-bypass"]);var REDACTED="***\uFF08\u4F0F\u5B57\uFF09";var SECRET_KEY_PATTERN="[A-Za-z0-9_-]*(?:token|secret|password|passwd|api[_-]?key|credential)[A-Za-z0-9_-]*";function redactSecrets(text){return text.replace(/\bBearer\s+[^\s"'`,;)\]}]+/gi,`Bearer ${REDACTED}`).replace(new RegExp(`("${SECRET_KEY_PATTERN}"\\s*:\\s*)"(?:[^"\\\\]|\\\\.)*"`,"gi"),`$1"${REDACTED}\
5
- "`).replace(new RegExp(`([?&]${SECRET_KEY_PATTERN}=)[^&\\s]+`,"gi"),`$1${REDACTED}`)}function formatHeaders(headers){if(!headers)return[];const entries=headers instanceof Headers?[...headers.entries()]:Array.isArray(headers)?headers:Object.entries(headers);return entries.map(([name,value])=>{const shown=SENSITIVE_HEADERS.has(name.toLowerCase())?REDACTED:redactSecrets(String(value));return` ${name.toLowerCase()}: ${shown}`})}var BODY_LIMIT=4e3;function formatBody(raw){const safe=stripTerminalControls(
6
- redactSecrets(raw));return safe.length>BODY_LIMIT?`${safe.slice(0,BODY_LIMIT)}
7
- \u2026\uFF08\u4EE5\u964D ${safe.length-BODY_LIMIT} \u6587\u5B57\u3092\u7701\u7565\uFF09`:safe}function withDebug(inner,options={}){const write=options.write??(text=>void process.stderr.write(text));const now=options.now??(()=>Date.now());return async(input,init)=>{const method=init?.method??"GET";const lines=[`[debug] \u2192 ${method} ${redactSecrets(input)}`,...formatHeaders(init?.headers)];if(typeof init?.body==="string")lines.push(` ${formatBody(init.body)}`);write(`${lines.join("\n")}
8
- `);const started=now();let res;try{res=await inner(input,init)}catch(err){write(`[debug] \u2717 \u901A\u4FE1\u306B\u5931\u6557\u3057\u307E\u3057\u305F (${now()-started}ms): ${redactSecrets(err.message)}
9
- `);throw err}const out=[`[debug] \u2190 ${res.status} ${res.statusText} (${now()-started}ms)`,...formatHeaders(res.headers)];const raw=await res.clone().text().catch(()=>"\uFF08\u672C\u6587\u3092\u8AAD\u3081\u307E\u305B\u3093\u3067\u3057\u305F\uFF09");if(raw!=="")out.push(` ${formatBody(raw)}`);write(`${out.join("\n")}
10
- `);return res}}var OUTPUT_FORMATS=["json","table","text","tsv"];function isOutputFormat(value){return typeof value==="string"&&OUTPUT_FORMATS.includes(value)}function resolveOutputFormat(input){if(input.flag!==void 0){return isOutputFormat(input.flag)?input.flag:null}if(isOutputFormat(input.configured))return input.configured;return input.isTty?"table":"json"}function formatOutput(value,format){switch(format){case"json":return formatJson(value);case"table":return formatTable(value);case"text":return formatDelimited(
11
- value," ");case"tsv":return formatDelimited(value," ")}}var JSON_UNSAFE_CONTROLS=/[\u007f-\u009f]/gu;function formatJson(value){const text=JSON.stringify(value===void 0?null:value,null,2);return text.replace(JSON_UNSAFE_CONTROLS,ch=>`\\u${ch.codePointAt(0)?.toString(16).padStart(4,"0")??""}`)}function cell(value){if(value===null||value===void 0)return"";if(typeof value==="string")return stripTerminalControls(value);if(typeof value==="number"||typeof value==="boolean"||typeof value==="bigint"){return String(
12
- value)}return stripTerminalControls(JSON.stringify(value)??"")}function isPlainRecord(value){return typeof value==="object"&&value!==null&&!Array.isArray(value)}function collectColumns(rows){const columns=[];const seen=new Set;for(const row of rows){for(const key of Object.keys(row)){if(!seen.has(key)){seen.add(key);columns.push(key)}}}return columns}function renderRow(cells,widths){return cells.map((text,i)=>{if(i===cells.length-1)return text;const pad=Math.max(0,(widths[i]??0)-stringWidth(text));
13
- return text+" ".repeat(pad)}).join(" ").trimEnd()}function singleLine(text){return stripTerminalControls(text).replace(/\t/g,"\\t").replace(/\n/g,"\\n")}function renderGrid(header,rows){const normalizedHeader=header?header.map(singleLine):null;const normalizedRows=rows.map(row=>row.map(singleLine));return renderGridNormalized(normalizedHeader,normalizedRows)}function renderGridNormalized(header,rows){const all=header?[header,...rows]:rows;const columnCount=all.reduce((max,row)=>Math.max(max,row.
14
- length),0);const widths=[];for(let i=0;i<columnCount;i+=1){widths.push(all.reduce((max,row)=>Math.max(max,stringWidth(row[i]??"")),0))}const lines=[];if(header){lines.push(renderRow(header,widths));lines.push(widths.map(w=>"-".repeat(Math.max(1,w))).join(" ").trimEnd())}for(const row of rows)lines.push(renderRow(row,widths));return lines.join("\n")}function formatTable(value){if(Array.isArray(value)){if(value.length===0)return"";const records=value.filter(isPlainRecord);if(records.length!==value.
15
- length){return renderGrid(null,value.map(v=>[cell(v)]))}const columns=collectColumns(records);if(columns.length===0)return"";return renderGrid(columns,records.map(row=>columns.map(c=>cell(row[c]))))}if(isPlainRecord(value)){const entries=Object.entries(value);if(entries.length===0)return"";return renderGrid(null,entries.map(([k,v])=>[k,cell(v)]))}return cell(value)}function escapeDelimited(text){return text.replace(/\\/g,"\\\\").replace(/\t/g,"\\t").replace(/\r/g,"\\r").replace(/\n/g,"\\n")}function formatDelimited(value,separator){
16
- const rows=[];if(Array.isArray(value)){const records=value.filter(isPlainRecord);if(value.length>0&&records.length===value.length){const columns=collectColumns(records);for(const row of records)rows.push(columns.map(c=>cell(row[c])))}else{for(const v of value)rows.push([cell(v)])}}else if(isPlainRecord(value)){rows.push(Object.values(value).map(cell))}else{rows.push([cell(value)])}return rows.map(row=>row.map(escapeDelimited).join(separator)).join("\n")}async function evaluateQuery(expression,value){if(expression.trim()===""){throw new UsageError("--query \u306B\u7A7A\u306E\u5F0F\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093")}const{search}=await import("./dist-HZIZTJ4O.js");try{return search(value??null,expression)}catch(err){throw new UsageError(`--query \u306E\u5F0F\u3092\u8A55\u4FA1\u3067\u304D\u307E\u305B\u3093: ${err.message}`)}}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,path){const subresources=subresourcesOf(resource);const operationSection=resource.operations.length===0?"":`
17
- \u64CD\u4F5C:
18
- ${alignedList(resource.operations.map(op=>[op.name,op.summary]))}
19
- `;const subSection=subresources.length===0?"":`
20
- \u30B5\u30D6\u8CC7\u6E90:
21
- ${alignedList(subresources.map(sub=>[`${sub.name} <\u64CD\u4F5C>`,sub.summary]))}
22
- `;return`twp ${path} \u2014 ${resource.summary}
23
-
24
- \u4F7F\u3044\u65B9:
25
- twp ${path} <\u64CD\u4F5C> [\u5F15\u6570] [\u30AA\u30D7\u30B7\u30E7\u30F3]
26
- twp ${path} <\u64CD\u4F5C> ${HELP_TOKEN} \u305D\u306E\u64CD\u4F5C\u306E\u8A73\u3057\u3044\u30D8\u30EB\u30D7
27
- ${operationSection}${subSection}
28
- ${GLOBAL_OPTIONS_HELP}
29
- `}function renderOperationHelp(op,path){const sections=[`twp ${path} ${op.name} \u2014 ${op.summary}`,"","\u4F7F\u3044\u65B9:",` ${op.usage}`];if(op.description!==void 0){sections.push("",...op.description.split("\n"))}if(op.destructive===true){sections.push("","\u26A0 \u7834\u58CA\u7684\u306A\u64CD\u4F5C\u3067\u3059\u3002\u5B9F\u884C\u3059\u308B\u306B\u306F --yes \u304C\u5FC5\u8981\u3067\u3059\u3002")}if(op.flags.length>0){sections.push("","\u30AA\u30D7\u30B7\u30E7\u30F3:",alignedList(op.flags.
30
- map(flag=>[flag.takesValue?`${flag.name} ${flag.placeholder??"<\u5024>"}`:flag.name,flag.summary])))}sections.push("",GLOBAL_OPTIONS_HELP,"");return sections.join("\n")}function renderUnknownOperation(resource,path,attempted){const names=[...resource.operations.map(op=>op.name),...subresourcesOf(resource).map(sub=>`${sub.name} <\u64CD\u4F5C>`)].join(" / ");return attempted===void 0?`twp ${path} \u306B\u306F\u64CD\u4F5C\u306E\u6307\u5B9A\u304C\u5FC5\u8981\u3067\u3059\uFF08${names}\uFF09\u3002\u8A73\u3057\u304F\u306F twp ${path}\
31
- ${HELP_TOKEN}`:`twp ${path} \u306B\u300C${attempted}\u300D\u3068\u3044\u3046\u64CD\u4F5C\u306F\u3042\u308A\u307E\u305B\u3093\uFF08${names}\uFF09\u3002\u8A73\u3057\u304F\u306F twp ${path} ${HELP_TOKEN}`}function parseOperationArgs(argv,specs){const byName=new Map(specs.map(spec=>[spec.name,spec]));const args=[];const flags=new Map;let positionalOnly=false;for(let i=0;i<argv.length;i+=1){const arg=argv[i];if(arg===void 0)continue;if(!positionalOnly&&arg==="--"){positionalOnly=true;continue}if(positionalOnly||!arg.startsWith("-")||arg==="-"){args.push(arg);continue}const{name,value:inline}=splitFlagToken(arg);const spec=byName.get(name);if(spec===void 0){const shortEquals=!arg.startsWith("--")&&arg.
32
- includes("=");throw new UsageError(`\u4E0D\u660E\u306A\u30AA\u30D7\u30B7\u30E7\u30F3: ${arg}`,shortEquals?`\u77ED\u3044\u30D5\u30E9\u30B0\u306B = \u306F\u4F7F\u3048\u307E\u305B\u3093\u3002\u7A7A\u767D\u3067\u533A\u5207\u3063\u3066\u304F\u3060\u3055\u3044: ${arg.replace("="," ")}`:void 0)}if(flags.has(name))throw new UsageError(`${name} \u304C\u8907\u6570\u56DE\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u3059`);if(!spec.takesValue){if(inline!==void 0){throw new UsageError(`${name} \u306F\u5024\u3092\u53D6\u308A\u307E\u305B\u3093`,
33
- `${name} \u306F\u6307\u5B9A\u306E\u6709\u7121\u3060\u3051\u304C\u610F\u5473\u3092\u6301\u3061\u307E\u3059\u3002`)}flags.set(name,"");continue}if(inline!==void 0){flags.set(name,inline);continue}const next=argv[i+1];if(next===void 0||next.startsWith("-")&&next!=="-"){throw new UsageError(`${name} \u306B\u306F\u5024\u304C\u5FC5\u8981\u3067\u3059`,`\`-\` \u3067\u59CB\u307E\u308B\u5024\u306F ${name}=\u5024 \u306E\u5F62\u3067\u6E21\u305B\u307E\u3059\u3002`)}flags.set(name,next);i+=1}return{args,flags}}var LOADERS={backlog:async()=>(await import("./backlog-62DCJY45.js")).backlogDomain,project:async()=>(await import("./project-KIPSH5GP.js")).projectDomain,task:async()=>(await import("./task-EY3XJHST.js")).taskDomain};async function loadDomain(name){return LOADERS[name]()}var writeOut=text=>void process.stdout.write(text);var writeErr=text=>void process.stderr.write(text);function line(text){return text===""?"":text.endsWith("\n")?text:`${text}
34
- `}function outputValue(operation,format,body){return format==="json"?operation.raw(body):operation.summarize(body)}function requiresYes(operation,yes){return operation.destructive===true&&!yes}function exitCodeFor(err){if(err instanceof UsageError)return EXIT_USAGE;if(err instanceof NotLoggedInError||err instanceof SessionExpiredError)return EXIT_AUTH;if(err instanceof ApiError){if(err.status===401)return EXIT_AUTH;if(err.status>=400&&err.status<500)return EXIT_API_CLIENT;return EXIT_API_SERVER}
35
- if(err instanceof ApiResponseError||err instanceof NetworkError)return EXIT_API_SERVER;if(err instanceof ResolveError){if(err.status===401)return EXIT_AUTH;if(err.status!==null&&err.status>=400&&err.status<500)return EXIT_API_CLIENT;return EXIT_API_SERVER}return EXIT_FAILURE}function reportError(err,format,code){const message=stripTerminalControls(err instanceof Error?err.message:String(err));const rawHint=err instanceof UsageError?err.hint:void 0;const hint=rawHint!==void 0?stripTerminalControls(
36
- rawHint):void 0;if(format==="json"){const body={code,message};if(err instanceof ApiError)body["status"]=err.status;if(err instanceof ResolveError&&err.status!==null)body["status"]=err.status;if(hint!==void 0)body["hint"]=hint;writeErr(`${JSON.stringify({error:body},null,2)}
37
- `);return}writeErr(`${message}
38
- `);if(hint!==void 0)writeErr(`${hint}
39
- `)}function dryRunValue(apiUrl,plan){const value={method:plan.method,url:`${apiUrl}${appendQuery(plan.path,plan.query)}`};if(plan.body!==void 0)value["body"]=plan.body;return value}async function send(client,apiUrl,plan){try{return await client.request(plan.method,appendQuery(plan.path,plan.query),plan.body)}catch(err){if(err instanceof ApiError||err instanceof NotLoggedInError||err instanceof SessionExpiredError){throw err}throw new NetworkError(`${apiUrl} \u3078\u306E\u901A\u4FE1\u306B\u5931\u6557\u3057\u307E\u3057\u305F: ${err.
40
- message}`,{cause:err})}}function capExceeded(reason,pages,count,cursor){return new UsageError(`--all \u304C\u4E0A\u9650\u306B\u9054\u3057\u305F\u305F\u3081\u4E2D\u65AD\u3057\u307E\u3057\u305F\uFF08${reason}\uFF0F${pages} \u30DA\u30FC\u30B8\u30FB${count} \u4EF6\u3092\u53D6\u5F97\u6E08\u307F\uFF09\u3002\u3053\u308C\u306F\u5168\u4EF6\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002`,`--limit \u3092\u5927\u304D\u304F\u3057\u3066\u5F80\u5FA9\u3092\u6E1B\u3089\u3059\u304B\u3001--max-pages / --max-items \u3092\u4E0A\u3052\u3066\u304F\u3060\u3055\u3044\u3002\u7D9A\u304D\u3060\u3051\u3092\u53D6\u308B\u306A\u3089 --cursor ${shellQuote(
41
- cursor)} \u304B\u3089\u518D\u958B\u3067\u304D\u307E\u3059`)}async function fetchAllPages(args){const{paging,maxPages,maxItems}=args;const merged=[];const first=args.plan.query?.[paging.cursorParam];let sent=typeof first==="string"?first:"";for(let page=1;;page+=1){const plan=page===1?args.plan:{...args.plan,query:{...args.plan.query,[paging.cursorParam]:sent}};let body;try{body=await send(args.client,args.apiUrl,plan)}catch(err){if(page>1){writeErr(`--all \u306F ${page} \u30DA\u30FC\u30B8\u76EE\u3067\u5931\u6557\u3057\u307E\u3057\u305F\uFF08${page-
42
- 1} \u30DA\u30FC\u30B8\u30FB${merged.length} \u4EF6\u3092\u53D6\u5F97\u6E08\u307F\uFF09\u3002\u3053\u308C\u306F\u5168\u4EF6\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u7D9A\u304D\u306F --cursor ${shellQuote(stripTerminalControls(sent))} \u304B\u3089\u518D\u958B\u3067\u304D\u307E\u3059\u3002
43
- `)}throw err}for(const item of paging.items(body))merged.push(item);const next=paging.nextCursor(body);if(next===null)return{body:paging.withItems(body,merged),pages:page,count:merged.length};if(merged.length>=maxItems)throw capExceeded(`\u6700\u5927\u4EF6\u6570 ${maxItems} \u4EF6`,page,merged.length,next);if(page>=maxPages)throw capExceeded(`\u6700\u5927\u30DA\u30FC\u30B8\u6570 ${maxPages}`,page,merged.length,next);if(next===sent){throw new ApiResponseError(`\u540C\u3058\u30AB\u30FC\u30BD\u30EB\uFF08${next}\
44
- \uFF09\u304C\u7E70\u308A\u8FD4\u3057\u8FD4\u3055\u308C\u305F\u305F\u3081\u4E2D\u65AD\u3057\u307E\u3057\u305F\u3002${merged.length} \u4EF6\u3092\u53D6\u5F97\u3057\u305F\u6642\u70B9\u3067\u3001\u3053\u308C\u306F\u5168\u4EF6\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002`)}sent=next}}function resolvePaging(operation,path,input){const all=input.flags.has("--all");const maxPages=positiveInteger(input.flags,"--max-pages")??DEFAULT_MAX_PAGES;const maxItems=positiveInteger(input.flags,"--max-items")??DEFAULT_MAX_ITEMS;
45
- positiveInteger(input.flags,"--limit");if(all&&operation.paging===void 0){throw new UsageError(`twp ${path} ${operation.name} \u306F --all \u306B\u5BFE\u5FDC\u3057\u3066\u3044\u307E\u305B\u3093`)}for(const name of["--max-pages","--max-items"]){if(!all&&input.flags.has(name)){throw new UsageError(`${name} \u306F --all \u3068\u4F75\u305B\u3066\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044`,`${name} \u3060\u3051\u3067\u306F\u4F55\u3082\u5909\u308F\u308A\u307E\u305B\u3093`)}}return{all,maxPages,maxItems}}
46
- function profileAliases(profileName){const aliases=loadUserConfig().profiles?.[profileName]?.aliases;return aliases!==void 0?{aliases}:{}}function buildPrepareContext(args){const cache=new Map;return{resolver:args.resolver,projectId(explicit){if(explicit!==void 0&&explicit.trim()===""){throw new UsageError("--project \u306B\u7A7A\u306E\u5024\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093","--project <\u30B3\u30FC\u30C9|ID> \u3092\u6307\u5B9A\u3059\u308B\u304B\u3001--project \u3054\u3068\u5916\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}
47
- const ref=requireDefaultProject(explicit,args.profileName,args.env,args.cwd).ref;const hit=cache.get(ref);if(hit!==void 0)return hit;const resolved=args.resolver.project(ref).then(project=>project.id);cache.set(ref,resolved);return resolved}}}async function runDomain(options){const{globals}=options;let format=null;try{const profile=resolveProfile(globals.profile);format=resolveOutputFormat({...globals.output!==void 0?{flag:globals.output}:{},...(()=>{const configured=resolveConfiguredOutput(profile.
48
- name);return configured!==void 0?{configured}:{}})(),isTty:process.stdout.isTTY===true});if(format===null){throw new UsageError(`--output \u306B\u300C${globals.output??""}\u300D\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,`\u6307\u5B9A\u3067\u304D\u308B\u306E\u306F ${OUTPUT_FORMATS.join(" / ")} \u3067\u3059`)}const domain=await loadDomain(options.domain);if(options.operation===HELP_TOKEN||options.help&&options.operation===void 0){const[extra,...rest2]=options.argv;if(extra===void 0){writeOut(
49
- renderResourceHelp(domain,domain.name));return EXIT_OK}const target=domain.subresources?.find(resource2=>resource2.name===extra);if(target===void 0||rest2.length>0){throw new UsageError(renderUnknownOperation(domain,domain.name,extra))}writeOut(renderResourceHelp(target,`${domain.name} ${extra}`));return EXIT_OK}const sub=domain.subresources?.find(resource2=>resource2.name===options.operation);const resource=sub??domain;const path=sub===void 0?domain.name:`${domain.name} ${sub.name}`;const operationName=sub===
50
- void 0?options.operation:options.argv[0];const rest=sub===void 0?options.argv:options.argv.slice(1);if(sub!==void 0&&(operationName===HELP_TOKEN||options.help&&operationName===void 0)){writeOut(renderResourceHelp(sub,path));return EXIT_OK}const operation=resource.operations.find(op=>op.name===operationName);if(operation===void 0){throw new UsageError(renderUnknownOperation(resource,path,operationName))}if(options.help||rest[0]===HELP_TOKEN){writeOut(renderOperationHelp(operation,path));return EXIT_OK}
51
- const input=parseOperationArgs(rest,operation.flags);if(!globals.dryRun&&requiresYes(operation,globals.yes)){throw new UsageError(`twp ${path} ${operation.name} \u306F\u7834\u58CA\u7684\u306A\u64CD\u4F5C\u3067\u3059\u3002\u5B9F\u884C\u3059\u308B\u306B\u306F --yes \u3092\u4ED8\u3051\u3066\u304F\u3060\u3055\u3044\u3002`)}const paging=resolvePaging(operation,path,input);const stored=loadCredentials(profile.name);const apiUrl=effectiveApiUrl(profile,stored?.api_url);const transport=options.fetchImpl??
52
- httpFetch;const fetchImpl=globals.debug?withDebug(transport):transport;const session=new AuthSession(profile.name,apiUrl,process.env,fetchImpl);const client=new TwpApiClient(apiUrl,session,fetchImpl,options.version);const prepared=operation.prepare===void 0?input:await operation.prepare(input,buildPrepareContext({resolver:new Resolver(client,{profile:profile.name,refresh:globals.refresh,...profileAliases(profile.name)}),profileName:profile.name,env:process.env,cwd:process.cwd()}));const plan=operation.
53
- plan(prepared);for(const note of operation.plannedNotes?.(prepared)??[])writeErr(`${stripTerminalControls(note)}
54
- `);if(globals.dryRun){writeOut(line(redactSecrets(formatOutput(dryRunValue(apiUrl,plan),format))));return EXIT_OK}let body;let paged;if(paging.all&&operation.paging!==void 0){paged=await fetchAllPages({client,apiUrl,plan,paging:operation.paging,maxPages:paging.maxPages,maxItems:paging.maxItems});body=paged.body}else{body=await send(client,apiUrl,plan)}const value=globals.query!==void 0?await evaluateQuery(globals.query,operation.raw(body)):outputValue(operation,format,body);writeOut(line(formatOutput(
55
- value,format)));if(paged!==void 0){writeErr(`--all: ${paged.pages} \u30DA\u30FC\u30B8\u3092\u8FBF\u3063\u3066 ${paged.count} \u4EF6\u3092\u53D6\u5F97\u3057\u307E\u3057\u305F\u3002
56
- `)}const pagingNotes=operation.paging===void 0?[]:nextPageNotes(body,prepared,{command:`twp ${path} ${operation.name}`,flags:operation.flags,profile:globals.profile});for(const note of[...pagingNotes,...operation.notes?.(body,prepared)??[]]){writeErr(`${stripTerminalControls(note)}
57
- `)}return EXIT_OK}catch(err){const code=exitCodeFor(err);reportError(err,format,code);return code}}export{buildPrepareContext,exitCodeFor,fetchAllPages,outputValue,requiresYes,resolvePaging,runDomain};