@tocca-systems/twp-cli 0.22.0 → 0.24.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.
- package/CHANGELOG.public.md +6 -0
- package/README.md +147 -6
- package/command-model/department.json +1 -1
- package/dist/{ai-dispatch-VSCKUY6J.js → ai-dispatch-36HRDRLF.js} +1 -1
- package/dist/{api-command-Q2CSB4PV.js → api-command-NMYYJKZH.js} +5 -17
- package/dist/{app-THTQX3A5.js → app-2KMY3QPM.js} +27 -26
- package/dist/{auto-update-FBZGOQFI.js → auto-update-CV2MM32C.js} +1 -1
- package/dist/{auto-update-worker-Z3XKBFMQ.js → auto-update-worker-AXBJIMFP.js} +2 -2
- package/dist/{backlog-X2MQTA6F.js → backlog-7MJIOT22.js} +2 -2
- package/dist/{charter-command-UPKTVL7H.js → charter-command-UBUE3KUO.js} +2 -2
- package/dist/{chunk-5ISIXBKD.js → chunk-4V4T5ZUS.js} +45 -18
- package/dist/chunk-5Q2CH4E7.js +3 -0
- package/dist/chunk-6NCY4NPV.js +62 -0
- package/dist/{chunk-M3GWY6NT.js → chunk-7WSNIXTQ.js} +2 -1
- package/dist/chunk-DDKZ5IPT.js +11 -0
- package/dist/{chunk-2VISRLWS.js → chunk-DMDVLOAY.js} +8 -8
- package/dist/chunk-EJ474UDB.js +3 -0
- package/dist/chunk-FTYJZFEK.js +10 -0
- package/dist/{chunk-E4H22AO5.js → chunk-GDM2QUBL.js} +1 -1
- package/dist/{chunk-X4RS5VBH.js → chunk-GMBJTG6A.js} +1 -1
- package/dist/{chunk-QVXZEUKN.js → chunk-HGTG5XQ7.js} +1 -1
- package/dist/{chunk-I2QFW7EK.js → chunk-HW3QGKYR.js} +1 -1
- package/dist/chunk-I3YPO7CY.js +57 -0
- package/dist/chunk-IJLJGDMZ.js +7 -0
- package/dist/{chunk-DSDVIU6A.js → chunk-ILKQDXI5.js} +1 -1
- package/dist/{chunk-O52CUEDO.js → chunk-IOGVQVGD.js} +1 -1
- package/dist/chunk-NAUH75MM.js +10 -0
- package/dist/chunk-NZ7WI4RZ.js +18 -0
- package/dist/{chunk-JB27KNCX.js → chunk-QOUFHYK5.js} +29 -25
- package/dist/{chunk-XLE4HW6B.js → chunk-UIWGEBWI.js} +1 -1
- package/dist/{chunk-JDMNIUVX.js → chunk-VCMVTC6B.js} +1 -1
- package/dist/chunk-WGVHYTZV.js +38 -0
- package/dist/{chunk-PI5DUWNZ.js → chunk-WOUKWOAR.js} +1 -1
- package/dist/{chunk-3XG457E3.js → chunk-YVAN3H5W.js} +5 -5
- package/dist/chunk-ZN5EFDH7.js +5 -0
- package/dist/chunk-ZWVYVS2A.js +4 -0
- package/dist/cli.js +78 -11
- package/dist/{commands-ET4F34OD.js → commands-6YTOVZ5P.js} +16 -16
- package/dist/{commands-NXBQ5OWL.js → commands-U36UTCKR.js} +8 -8
- package/dist/department-JOXXJKQB.js +33 -0
- package/dist/job-title-L47J6TZY.js +8 -0
- package/dist/{logout-guard-CMZZBRUL.js → logout-guard-FO7KZL3X.js} +1 -1
- package/dist/media-ZMDYHHNN.js +64 -0
- package/dist/{oneshot-QVFA2SUM.js → oneshot-KYATQPL7.js} +5 -5
- package/dist/position-FHWCMMBQ.js +8 -0
- package/dist/{project-2LJZW747.js → project-ZODASYER.js} +1 -1
- package/dist/query-EEALMOSO.js +3 -0
- package/dist/render-K45EOLHX.js +3 -0
- package/dist/run-QCDT35NT.js +4 -0
- package/dist/server-settings-CG3EM7R7.js +1 -1
- package/dist/{setup-UI6V2Q3V.js → setup-6CXUVCF5.js} +1 -1
- package/dist/storage-ANKKJJJO.js +3 -0
- package/dist/{task-GKNM3G4K.js → task-G5YWQ6L5.js} +7 -63
- package/dist/{update-3QHRK5BP.js → update-PZBUIYOL.js} +1 -1
- package/dist/user-DO4VNIBR.js +204 -0
- package/package.json +1 -1
- package/dist/chunk-BOBSH3QN.js +0 -9
- package/dist/chunk-GFC2ASHE.js +0 -6
- package/dist/chunk-JKSXUBND.js +0 -9
- package/dist/chunk-PEGUHUTD.js +0 -3
- package/dist/chunk-RKJ6B2KL.js +0 -56
- package/dist/query-NJMVSQR6.js +0 -3
- package/dist/render-XMVI3AKB.js +0 -3
- package/dist/run-IS46BQBB.js +0 -4
- package/dist/user-EU7Z3DAO.js +0 -24
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{splitFlagToken}from"./chunk-QQRJLH6B.js";import{UsageError}from"./chunk-
|
|
3
|
+
import{splitFlagToken}from"./chunk-QQRJLH6B.js";import{UsageError}from"./chunk-7WSNIXTQ.js";function parseOperationArgs(argv,specs){const byName=new Map(specs.map(spec=>[spec.name,spec]));const args=[];const flags=new Map;const repeated=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.
|
|
4
4
|
startsWith("--")&&arg.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(spec.repeatable!==true&&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){
|
|
5
5
|
throw new UsageError(`${name} \u306F\u5024\u3092\u53D6\u308A\u307E\u305B\u3093`,`${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){addValue(flags,repeated,spec,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 \
|
|
6
6
|
\u306E\u5F62\u3067\u6E21\u305B\u307E\u3059\u3002`)}addValue(flags,repeated,spec,name,next);i+=1}return repeated.size>0?{args,flags,repeated}:{args,flags}}function addValue(flags,repeated,spec,name,value){if(spec.repeatable!==true){flags.set(name,value);return}const bucket=repeated.get(name);if(bucket===void 0)repeated.set(name,[value]);else bucket.push(value)}function repeatedValues(input,name){return input.repeated?.get(name)??[]}export{parseOperationArgs,repeatedValues};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
|
+
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
+
var MODE_IDS=["dev","biz","plan"];function isModeId(value){return value!==void 0&&MODE_IDS.includes(value)}var MODES=[{id:"dev",label:"\u958B\u767A",color:"green",description:"\u30ED\u30FC\u30AB\u30EB\u30C4\u30FC\u30EB\u5168\u90E8 \uFF0B \u958B\u767A\u7CFB TWP \u30C9\u30E1\u30A4\u30F3\u5E38\u99D0",tools:["read_file","write_file","edit_file","bash","shell","glob","grep","git","twp_*"],permissions:{read_file:"allow",glob:"allow",grep:"allow",git:"ask","twp_get_project-task":"allow","twp_list_proje\
|
|
4
|
+
ct-task":"allow",twp_domains:"allow",twp_search_tools:"allow",twp_describe_tools:"allow",twp_mount:"allow","twp_update_project-task":"ask",bash:"ask",shell:"ask",write_file:"ask",edit_file:"ask","*":"ask"}},{id:"biz",label:"\u696D\u52D9",color:"cyan",description:"TWP \u30C9\u30E1\u30A4\u30F3\u4E2D\u5FC3\u3002bash \u3068 write_file \u306F deny",tools:["twp_*","read_file","glob","grep"],permissions:{read_file:"allow",glob:"allow",grep:"allow","twp_get_project-task":"allow","twp_list_project-task":"\
|
|
5
|
+
allow",twp_domains:"allow",twp_search_tools:"allow",twp_describe_tools:"allow",twp_mount:"allow","twp_update_project-task":"ask",bash:"deny",shell:"deny",git:"deny",write_file:"deny",edit_file:"deny","*":"ask"}},{id:"plan",label:"\u30D7\u30E9\u30F3",color:"magenta",description:"\u8AAD\u307F\u53D6\u308A\u306E\u307F\u3002\u5168\u66F8\u304D\u8FBC\u307F deny",tools:["read_file","glob","grep","twp_get_*","twp_list_*","twp_domains","twp_search_tools","twp_describe_tools","twp_mount"],permissions:{read_file:"\
|
|
6
|
+
allow",glob:"allow",grep:"allow","twp_get_project-task":"allow","twp_list_project-task":"allow",twp_domains:"allow",twp_search_tools:"allow",twp_describe_tools:"allow",twp_mount:"allow",bash:"deny",shell:"deny",git:"deny",write_file:"deny",edit_file:"deny","*":"deny"}}];var activeModeList=MODES;var activeModeSources=new Map;function setActiveModes(modes,sources=new Map){activeModeList=MODES.map(builtin=>modes.find(m=>m.id===builtin.id)??builtin);activeModeSources=sources}function modeSource(id){
|
|
7
|
+
return activeModeSources.get(id)??null}function getMode(id){const found=activeModeList.find(m=>m.id===id);if(!found)throw new Error(`unknown mode: ${id}`);return found}function nextMode(id){const i=activeModeList.findIndex(m=>m.id===id);const next=activeModeList[(i+1)%activeModeList.length];return next?next.id:"dev"}function checkPermission(toolName,mode){const own=key=>Object.hasOwn(mode.permissions,key)?mode.permissions[key]:void 0;const found=own(toolName)??own("*");return found==="allow"||found==="ask"||found==="deny"?found:"ask"}var PERMISSION_MODE_IDS=["plan","acceptEdits","denyAll"];function isPermissionModeId(value){return value!==void 0&&PERMISSION_MODE_IDS.includes(value)}function describePermissionMode(permissionMode){if(permissionMode===void 0)return"\u672A\u6307\u5B9A\uFF08\u30E2\u30FC\u30C9\u306E\u65B9\u91DD\u306E\u307E\u307E\uFF09";switch(permissionMode){case"plan":return"plan\uFF08read \u306E\u307F\u8A31\u53EF\u3002write / exec \u306F\u62D2\u5426\uFF09";case"acceptEdits":return"acceptEdits\uFF08write \u306E\u78BA\u8A8D\u3092\u81EA\u52D5\u627F\u8A8D\u3002read\
|
|
8
|
+
/ exec \u306F\u30E2\u30FC\u30C9\u306E\u307E\u307E\uFF09";case"denyAll":return"denyAll\uFF08read \u3092\u542B\u3080\u5168\u30C4\u30FC\u30EB\u3092\u62D2\u5426\uFF09";default:{const exhaustive=permissionMode;return`${String(exhaustive)}\uFF08\u4E0D\u660E\u306A\u5024\u3002\u5B89\u5168\u5074\u3067\u5168\u62D2\u5426\uFF09`}}}function applyPermissionMode(decision,risk,permissionMode){if(permissionMode===void 0)return{decision,reason:null};if(decision==="deny")return{decision,reason:null};switch(permissionMode){case"\
|
|
9
|
+
denyAll":return{decision:"deny",reason:"permission-mode=denyAll\uFF08\u5168\u30C4\u30FC\u30EB\u3092\u62D2\u5426\uFF09"};case"plan":if(risk==="read")return{decision,reason:null};return{decision:"deny",reason:`permission-mode=plan\uFF08${risk} \u30C4\u30FC\u30EB\u3092\u62D2\u5426\uFF09`};case"acceptEdits":if(risk==="write"&&decision==="ask"){return{decision:"allow",reason:"permission-mode=acceptEdits\uFF08write \u3092\u81EA\u52D5\u627F\u8A8D\uFF09"}}return{decision,reason:null};default:return{decision:"\
|
|
10
|
+
deny",reason:"\u4E0D\u660E\u306A permission-mode\uFF08\u5B89\u5168\u5074\u3067\u62D2\u5426\uFF09"}}}export{isModeId,MODES,setActiveModes,modeSource,getMode,nextMode,checkPermission,isPermissionModeId,describePermissionMode,applyPermissionMode};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
|
+
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
+
import{readFile}from"fs/promises";import{existsSync}from"fs";import{dirname,join,resolve}from"path";import{fileURLToPath}from"url";var DIR_NAME="command-model";var cachedDir;function commandModelDir(){if(cachedDir!==void 0)return cachedDir;let current=dirname(fileURLToPath(import.meta.url));for(let depth=0;depth<6;depth+=1){const candidate=join(current,DIR_NAME);if(existsSync(join(candidate,"index.json"))){cachedDir=candidate;return cachedDir}if(existsSync(join(current,"package.json")))break;const parent=resolve(
|
|
4
|
+
current,"..");if(parent===current)break;current=parent}cachedDir=null;return cachedDir}var CommandModelMissingError=class extends Error{constructor(detail){super(`\u30B3\u30DE\u30F3\u30C9\u30E2\u30C7\u30EB\uFF08${DIR_NAME}/\uFF09\u3092\u8AAD\u3081\u307E\u305B\u3093: ${detail}
|
|
5
|
+
\u958B\u767A\u6642\u306F \`npm run generate:command-model -- --spec <api.json>\` \u3067\u751F\u6210\u3057\u3066\u304F\u3060\u3055\u3044\u3002`);this.name="CommandModelMissingError"}};var domainCache=new Map;var indexCache=null;var routesCache=null;async function readJson(file){const dir=commandModelDir();if(dir===null)throw new CommandModelMissingError("\u30D1\u30C3\u30B1\u30FC\u30B8\u306B\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u304C\u3042\u308A\u307E\u305B\u3093");const path=join(dir,file);try{return JSON.
|
|
6
|
+
parse(await readFile(path,"utf8"))}catch(cause){throw new CommandModelMissingError(`${path} \u3092\u8AAD\u3081\u307E\u305B\u3093\uFF08${cause.message}\uFF09`)}}async function loadCommandModelIndex(){indexCache??=await readJson("index.json");return indexCache}async function loadCommandModelRoutes(){if(routesCache!==null)return routesCache;const file=await readJson("_routes.json");if(typeof file?.routes!=="object"||file.routes===null||Array.isArray(file.routes)){throw new CommandModelMissingError(
|
|
7
|
+
"_routes.json \u306E\u5F62\u304C\u9055\u3044\u307E\u3059\uFF08routes \u304C\u8AAD\u3081\u307E\u305B\u3093\uFF09")}routesCache=file;return routesCache}async function loadCommandModelDomain(domain){const cached=domainCache.get(domain);if(cached!==void 0)return cached;if(!/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(domain)){throw new CommandModelMissingError(`\u30C9\u30E1\u30A4\u30F3\u540D\u3068\u3057\u3066\u4E0D\u6B63\u3067\u3059: ${domain}`)}const file=await readJson(`${domain}.json`);if(typeof file?.domain!==
|
|
8
|
+
"string"||!Array.isArray(file?.operations)){throw new CommandModelMissingError(`${domain}.json \u306E\u5F62\u304C\u9055\u3044\u307E\u3059\uFF08domain / operations \u304C\u8AAD\u3081\u307E\u305B\u3093\uFF09`)}domainCache.set(domain,file);return file}var MAX_REPORTED_VIOLATIONS=20;function isRecord(value){return typeof value==="object"&&value!==null&&!Array.isArray(value)}function typesOf(schema){const type=schema["type"];if(typeof type==="string")return[type];if(Array.isArray(type)&&type.every(t=>typeof t==="string"))return type;return null}var INTEGER_STRING=/^[+-]?\d+$/;var BOOLEAN_STRINGS=new Set(["0","1","true","false","yes","no","on","off"]);var NUMBER_STRING=/^[+-]?(\d+\.?\d*|\.\d+)([eE][+-]?\d+)?$/;function matchesType(type,value){switch(type){case"\
|
|
9
|
+
null":return value===null;case"string":return typeof value==="string";case"integer":return typeof value==="number"&&Number.isInteger(value)||typeof value==="string"&&INTEGER_STRING.test(value);case"number":return typeof value==="number"&&Number.isFinite(value)||typeof value==="string"&&NUMBER_STRING.test(value);case"boolean":return typeof value==="boolean"||value===0||value===1||typeof value==="string"&&BOOLEAN_STRINGS.has(value.toLowerCase());case"array":case"object":return typeof value==="obje\
|
|
10
|
+
ct"&&value!==null;default:return true}}function describe(value){if(value===null)return"null";if(Array.isArray(value))return"\u914D\u5217";if(typeof value==="object")return"\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8";if(typeof value==="string")return`\u6587\u5B57\u5217\uFF08${[...value].length} \u6587\u5B57\uFF09`;return`${typeof value==="number"?"\u6570\u5024":typeof value==="boolean"?"\u771F\u507D\u5024":typeof value} ${String(value)}`}function numericValue(value){if(typeof value==="number")return value;
|
|
11
|
+
if(typeof value==="string"&&NUMBER_STRING.test(value))return Number(value);return null}var PHP_DELIMITED=/^([^A-Za-z0-9\\\s^])[\s\S]*\1[A-Za-z]*$/;function compilePattern(pattern){if(PHP_DELIMITED.test(pattern))return null;try{return new RegExp(pattern,"u")}catch{return null}}function walk(schema,value,at,out){if(!isRecord(schema))return;const types=typesOf(schema);if(types!==null&&!types.some(type=>matchesType(type,value))){out.push(`${at}: ${types.join(" / ")} \u3092\u671F\u5F85\u3057\u307E\u3057\u305F\u304C ${describe(
|
|
12
|
+
value)} \u3067\u3059`);return}if(value===null)return;const enumValues=schema["enum"];if(Array.isArray(enumValues)&&enumValues.length>0){const allowed=enumValues.filter(item=>item!==null).map(item=>String(item));if(!allowed.includes(String(value))){out.push(`${at}: ${allowed.join(" / ")} \u306E\u3044\u305A\u308C\u304B\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u53D7\u3051\u53D6\u3063\u305F\u5024: ${describe(value)}\uFF09`)}}if(typeof value==="string"){const length=[...value].length;
|
|
13
|
+
const max=schema["maxLength"];const min=schema["minLength"];if(typeof max==="number"&&length>max)out.push(`${at}: ${max} \u6587\u5B57\u4EE5\u5185\u306B\u3057\u3066\u304F\u3060\u3055\u3044\uFF08${length} \u6587\u5B57\uFF09`);if(typeof min==="number"&&length<min)out.push(`${at}: ${min} \u6587\u5B57\u4EE5\u4E0A\u306B\u3057\u3066\u304F\u3060\u3055\u3044\uFF08${length} \u6587\u5B57\uFF09`);const pattern=schema["pattern"];if(typeof pattern==="string"){const re=compilePattern(pattern);if(re!==null&&!re.
|
|
14
|
+
test(value))out.push(`${at}: \u5F62\u5F0F\u304C\u9055\u3044\u307E\u3059\uFF08${pattern}\uFF09`)}}const numeric=types?.some(type=>type==="integer"||type==="number")?numericValue(value):null;if(numeric!==null){const minimum=schema["minimum"];const maximum=schema["maximum"];if(typeof minimum==="number"&&numeric<minimum)out.push(`${at}: ${minimum} \u4EE5\u4E0A\u306B\u3057\u3066\u304F\u3060\u3055\u3044\uFF08${numeric}\uFF09`);if(typeof maximum==="number"&&numeric>maximum)out.push(`${at}: ${maximum} \u4EE5\
|
|
15
|
+
\u4E0B\u306B\u3057\u3066\u304F\u3060\u3055\u3044\uFF08${numeric}\uFF09`)}if(Array.isArray(value)){const maxItems=schema["maxItems"];const minItems=schema["minItems"];if(typeof maxItems==="number"&&value.length>maxItems)out.push(`${at}: \u8981\u7D20\u306F ${maxItems} \u4EF6\u4EE5\u5185\u306B\u3057\u3066\u304F\u3060\u3055\u3044\uFF08${value.length} \u4EF6\uFF09`);if(typeof minItems==="number"&&value.length<minItems)out.push(`${at}: \u8981\u7D20\u306F ${minItems} \u4EF6\u4EE5\u4E0A\u306B\u3057\u3066\u304F\u3060\u3055\u3044\uFF08${value.
|
|
16
|
+
length} \u4EF6\uFF09`);if(isRecord(schema["items"]))value.forEach((item,i)=>walk(schema["items"],item,`${at}[${i}]`,out));return}if(isRecord(value)){const required=schema["required"];if(Array.isArray(required)){for(const key of required){if(typeof key==="string"&&!Object.prototype.hasOwnProperty.call(value,key))out.push(`${at}.${key}: \u5FC5\u9808\u3067\u3059`)}}const properties=schema["properties"];if(isRecord(properties)){for(const[key,child]of Object.entries(properties)){if(Object.prototype.hasOwnProperty.
|
|
17
|
+
call(value,key))walk(child,value[key],`${at}.${key}`,out)}}}}function validateBody(schema,body){const out=[];walk(schema,body,"body",out);return out}function validateQuery(params,query){const out=[];for(const param of params){const has=Object.prototype.hasOwnProperty.call(query,param.name)&&query[param.name]!==void 0;if(!has){if(param.required)out.push(`query.${param.name}: \u5FC5\u9808\u3067\u3059`);continue}if(param.source!=="spec")continue;const declared=param.type;const types=typeof declared===
|
|
18
|
+
"string"?[declared]:Array.isArray(declared)?declared.filter(t=>typeof t==="string"):[];const checked=types.filter(type=>type==="integer"||type==="number"||type==="boolean");if(checked.length===0||types.includes("string"))continue;const raw=query[param.name];if(types.includes("null")&&raw==="")continue;if(!checked.some(type=>matchesType(type,raw))){out.push(`query.${param.name}: ${checked.join(" / ")} \u3092\u671F\u5F85\u3057\u307E\u3057\u305F\u304C ${describe(raw)} \u3067\u3059`)}}return out}export{CommandModelMissingError,loadCommandModelIndex,loadCommandModelRoutes,loadCommandModelDomain,MAX_REPORTED_VIOLATIONS,validateBody,validateQuery};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{
|
|
3
|
+
import{isTaskKey}from"./chunk-II5RVJQN.js";import{ApiError}from"./chunk-FTYJZFEK.js";import{ResolveError,UUID_RE,isSafePathSegment,resolveProjectRef,safeProjectIdPolicy}from"./chunk-GMBJTG6A.js";import{loadProjectConfig,loadUserConfig}from"./chunk-NERYSBA4.js";import{twpHomeDir}from"./chunk-RZVI6PMW.js";import{UsageError}from"./chunk-7WSNIXTQ.js";var BACKLOG_BASE_PATH="/api/v2/integrations/backlog";function assertBacklogPathSegment(value,label){if(!isSafePathSegment(value)){throw new ResolveError(`${label}\u3068\u3057\u3066 URL \u306B\u5165\u308C\u3089\u308C\u306A\u3044\u5024\u304C\u30B5\u30FC\u30D0\u304B\u3089\u8FD4\u308A\u307E\u3057\u305F: ${JSON.stringify(value)}\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return value}function backlogSpacePath(spaceId,suffix=""){assertBacklogPathSegment(spaceId,
|
|
4
4
|
"Backlog \u30B9\u30DA\u30FC\u30B9 ID");return`${BACKLOG_BASE_PATH}/${encodeURIComponent(spaceId)}${suffix}`}function idString(value){if(typeof value==="number"&&Number.isFinite(value))return String(value);if(typeof value==="string"&&value.trim()!=="")return value.trim();return null}function text(value){return typeof value==="string"&&value.trim()!==""?value.trim():null}function backlogSpaceAliases(spaceUrl){const aliases=[];const trimmed=spaceUrl.trim().replace(/\/+$/,"");if(trimmed==="")return aliases;
|
|
5
5
|
let host;try{host=new URL(trimmed).host}catch{host=trimmed.replace(/^\/+/,"").split("/")[0]??""}if(host==="")return aliases;aliases.push(host);const label=host.split(".")[0];if(label!==void 0&&label!==""&&label!==host)aliases.push(label);return aliases}function backlogSpaceRow(row){const url=text(row["space_url"]);return{id:idString(row["id"]),name:url,code:null,aliases:url!==null?backlogSpaceAliases(url):[]}}function backlogProjectRow(row){return{id:idString(row["id"]),name:text(row["name"]),code:text(
|
|
6
6
|
row["projectKey"])}}function backlogStatusRow(row){return{id:idString(row["id"]),name:text(row["name"]),code:null}}function backlogUserRow(row){return{id:idString(row["id"]),name:text(row["name"]),code:null,aliases:[text(row["userId"]),text(row["mailAddress"])].filter(v=>v!==null)}}var DEFAULT_LOOKUP_SCOPE="\u3053\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8";function fold(value){return value.trim().toLowerCase()}function keysOf(ref){return[ref.id,ref.code,ref.name,...ref.aliases??[]].filter(v=>typeof v==="string"&&v.trim()!=="").map(fold)}function describe(ref){return ref.code!==void 0&&ref.code!==null&&ref.code!==""&&ref.code!==ref.name?`${ref.name}\uFF08${ref.code}\uFF09`:ref.name}async function suggest(input,candidates){try{const{default:fuzzysort}=await import("./fuzzysort-DFVKV4B4.js");
|
|
@@ -15,9 +15,9 @@ env);const fromProfile=usable(user.profiles?.[profileName]?.project);if(fromProf
|
|
|
15
15
|
const ttl=options.ttlMs??DEFAULT_TTL_MS;const now=(options.now??Date.now)();if(Math.abs(now-fetchedAt)>ttl)return null;return parsed.value}function writeCache(key,value,options={}){const env=options.env??process.env;const dir=cacheDir(env);const file=cacheFilePath(key,env);const body={version:CACHE_VERSION,key:{profile:key.profile,scope:key.scope,...key.project!==void 0?{project:key.project}:{}},fetched_at:new Date((options.now??Date.now)()).toISOString(),value};if(!isCacheLocationTrusted(env))return;
|
|
16
16
|
const tmp=`${file}.${process.pid}.tmp`;try{fs.mkdirSync(dir,{recursive:true,mode:448});fs.writeFileSync(tmp,`${JSON.stringify(body)}
|
|
17
17
|
`,{mode:384});fs.renameSync(tmp,file)}catch{try{fs.rmSync(tmp,{force:true})}catch{}}}var SELF_REF="me";var PRIVATE_TASKS_PATH="/api/v2/tasks/private";var PRIVATE_MASTERS_CACHE_KEY="__private__";var BACKLOG_SPACES_CACHE_KEY="__backlog__";var BACKLOG_SCOPE_LABEL="\u3053\u306E\u63A5\u7D9A\u5148";var BACKLOG_PROJECT_SCOPE_LABEL="\u3053\u306E Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8";var PRIVATE_SCOPE_LABEL="\u500B\u4EBA\u30BF\u30B9\u30AF";var TENANT_CACHE_KEY="__tenant__";var TENANT_SCOPE_LABEL="\u3053\u306E\u30C6\u30CA\u30F3\u30C8";var ADMIN_USERS_LIST_PATH="/api/v2/admin/users\
|
|
18
|
-
/list";var DEPARTMENTS_PATH="/api/v2/organization/departments";var POSITIONS_PATH="/api/v2/organization/positions";var ORG_MASTER_LIMIT=1e3;var USER_LIST_MAX_PAGES=100;function isRecord(value){return typeof value==="object"&&value!==null&&!Array.isArray(value)}function str(value){return typeof value==="string"&&value.trim()!==""?value:null}function truthyFlag(value){return value===true||value===1}function rawGetVia(client){return async path2=>{
|
|
19
|
-
"GET",path2),error:null}}catch(err){if(err instanceof ApiError){return{ok:false,status:err.status,json:err.body,error:err.message}}throw err}}}var TASK_MASTERS={status:{path:"task-statuses",envelope:"data",scope:"task-statuses",label:"\u30B9\u30C6\u30FC\u30BF\u30B9"},type:{path:"task-types",envelope:"data",scope:"task-types",label:"\u7A2E\u5225"},category:{path:"task-categories",envelope:"data",scope:"task-categories",label:"\u30AB\u30C6\u30B4\u30EA"},
|
|
20
|
-
data",scope:"task-milestones",label:"\u30DE\u30A4\u30EB\u30B9\u30C8\u30FC\u30F3"},label:{path:"task-labels",envelope:"items",scope:"task-labels",label:"\u30E9\u30D9\u30EB"}};var Resolver=class{constructor(client,options){this.client=client;this.options=options;this.get=rawGetVia(client)}client;options;get;privateMastersInFlight=null;async project(ref){const trimmed=ref.trim();if(trimmed==="")throw new UsageError("\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30B3\u30FC\u30C9\u304B ID \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044");
|
|
18
|
+
/list";var DEPARTMENTS_PATH="/api/v2/organization/departments";var POSITIONS_PATH="/api/v2/organization/positions";var JOB_TITLES_PATH="/api/v2/organization/job-titles";var ORG_MASTER_LIMIT=1e3;var USER_LIST_MAX_PAGES=100;function isRecord(value){return typeof value==="object"&&value!==null&&!Array.isArray(value)}function str(value){return typeof value==="string"&&value.trim()!==""?value:null}function truthyFlag(value){return value===true||value===1}function rawGetVia(client){return async path2=>{
|
|
19
|
+
try{return{ok:true,status:200,json:await client.request("GET",path2),error:null}}catch(err){if(err instanceof ApiError){return{ok:false,status:err.status,json:err.body,error:err.message}}throw err}}}var TASK_MASTERS={status:{path:"task-statuses",envelope:"data",scope:"task-statuses",label:"\u30B9\u30C6\u30FC\u30BF\u30B9"},type:{path:"task-types",envelope:"data",scope:"task-types",label:"\u7A2E\u5225"},category:{path:"task-categories",envelope:"data",scope:"task-categories",label:"\u30AB\u30C6\u30B4\u30EA"},
|
|
20
|
+
milestone:{path:"task-milestones",envelope:"data",scope:"task-milestones",label:"\u30DE\u30A4\u30EB\u30B9\u30C8\u30FC\u30F3"},label:{path:"task-labels",envelope:"items",scope:"task-labels",label:"\u30E9\u30D9\u30EB"}};var Resolver=class{constructor(client,options){this.client=client;this.options=options;this.get=rawGetVia(client)}client;options;get;privateMastersInFlight=null;async project(ref){const trimmed=ref.trim();if(trimmed==="")throw new UsageError("\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30B3\u30FC\u30C9\u304B ID \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044");
|
|
21
21
|
return resolveProjectRef(trimmed,this.get,safeProjectIdPolicy)}async taskByKey(key){const trimmed=key.trim();if(!isTaskKey(trimmed)){throw new UsageError(`\u30BF\u30B9\u30AF\u30AD\u30FC\u306E\u5F62\u5F0F\u3067\u306F\u3042\u308A\u307E\u305B\u3093: ${key}`,"\u30AD\u30FC\u306F\u300C\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30B3\u30FC\u30C9-\u756A\u53F7\u300D\u306E\u5F62\u3067\u3059\uFF08\u4F8B: ABC-123\uFF09\u3002")}const res=await this.get(`/api/v2/tasks/resolve-by-key/${encodeURIComponent(trimmed)}`);
|
|
22
22
|
if(res.status===404){throw new ResolveError(`\u30BF\u30B9\u30AF\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093: ${trimmed}\uFF08\u5B58\u5728\u3057\u306A\u3044\u304B\u3001\u95B2\u89A7\u3067\u304D\u308B\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306B\u3042\u308A\u307E\u305B\u3093\uFF09`,404)}if(!res.ok){throw new ResolveError(`\u30BF\u30B9\u30AF\u30AD\u30FC\u3092\u89E3\u6C7A\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F: ${trimmed}\uFF08HTTP ${res.status}\uFF09\u3002\u63A5\u7D9A\u5148\u3068\u30ED\u30B0\u30A4\u30F3\u72B6\u614B\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`,
|
|
23
23
|
res.status)}const body=isRecord(res.json)?res.json:{};const projectId=str(body["project_id"]);const task=body["task"];if(projectId===null||!isRecord(task)){throw new ResolveError("\u30BF\u30B9\u30AF\u30AD\u30FC\u89E3\u6C7A\u306E\u5FDC\u7B54\u306B project_id / task \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002",res.status)}safeProjectIdPolicy.assertId(projectId);return{projectId,task}}async currentUser(){const res=await this.
|
|
@@ -29,24 +29,28 @@ flag,label:spec.label})}async taskMasterRefs(kind,projectId){const spec=TASK_MAS
|
|
|
29
29
|
/${encodeURIComponent(projectId)}/${spec.path}`),spec.envelope,spec.label))}async privateStatuses(){return this.privateMasters("statuses","\u30B9\u30C6\u30FC\u30BF\u30B9")}async privateTaskTypes(){return this.privateMasters("types","\u7A2E\u5225")}async privateStatus(input){return resolveNamed(this.applyAlias("status",input),await this.privateStatuses(),{flag:"--status",label:"\u30B9\u30C6\u30FC\u30BF\u30B9",scope:PRIVATE_SCOPE_LABEL})}async privateTaskType(input){return resolveNamed(this.applyAlias(
|
|
30
30
|
"type",input),await this.privateTaskTypes(),{flag:"--type",label:"\u7A2E\u5225",scope:PRIVATE_SCOPE_LABEL})}async privateDefaultStatus(){return requireDefault(await this.privateStatuses(),{flag:"--status",label:"\u30B9\u30C6\u30FC\u30BF\u30B9",scope:PRIVATE_SCOPE_LABEL})}async privateDefaultTaskType(){return requireDefault(await this.privateTaskTypes(),{flag:"--type",label:"\u7A2E\u5225",scope:PRIVATE_SCOPE_LABEL})}async privateTask(ref){const trimmed=ref.trim();const res=await this.get(`${PRIVATE_TASKS_PATH}\
|
|
31
31
|
/${encodeURIComponent(trimmed)}`);if(res.status===404){throw new ResolveError(`\u500B\u4EBA\u30BF\u30B9\u30AF\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093: ${trimmed}`,404)}if(!res.ok){throw new ResolveError(`\u500B\u4EBA\u30BF\u30B9\u30AF\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F: ${trimmed}\uFF08HTTP ${res.status}\uFF09\u3002\u63A5\u7D9A\u5148\u3068\u30ED\u30B0\u30A4\u30F3\u72B6\u614B\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`,res.status)}const task=isRecord(
|
|
32
|
-
res.json)?res.json["task"]:void 0;if(!isRecord(task)){throw new ResolveError("\u500B\u4EBA\u30BF\u30B9\u30AF\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",res.status)}return task}async
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
"\
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
32
|
+
res.json)?res.json["task"]:void 0;if(!isRecord(task)){throw new ResolveError("\u500B\u4EBA\u30BF\u30B9\u30AF\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",res.status)}return task}async primaryAssignment(userId){if(!isSafePathSegment(userId)){throw new ResolveError(`\u30E6\u30FC\u30B6\u30FC ID \u3092\u30D1\u30B9\u306B\u4F7F\u3048\u307E\u305B\u3093: ${userId}\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}
|
|
33
|
+
const res=await this.get(`/api/v2/organization/users/${encodeURIComponent(userId)}/assignments/primary`);if(res.status===404)return null;if(!res.ok){throw new ResolveError(`\u73FE\u5728\u306E\u4E3B\u6240\u5C5E\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08HTTP ${res.status}${res.error?`: ${res.error}`:""}\uFF09\u3002`,res.status)}const assignment=isRecord(res.json)?res.json["assignment"]:void 0;if(!isRecord(assignment)||typeof assignment["id"]!=="string"){throw new ResolveError(
|
|
34
|
+
"\u4E3B\u6240\u5C5E\u306E\u5FDC\u7B54\u306B assignment.id \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002",res.status)}return assignment}async assignments(userId){if(!isSafePathSegment(userId)){throw new ResolveError(`\u30E6\u30FC\u30B6\u30FC ID \u3092\u30D1\u30B9\u306B\u4F7F\u3048\u307E\u305B\u3093: ${userId}\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}const res=await this.get(`/ap\
|
|
35
|
+
i/v2/organization/users/${encodeURIComponent(userId)}/assignments`);if(!res.ok){throw new ResolveError(`\u6240\u5C5E\u306E\u4E00\u89A7\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08HTTP ${res.status}${res.error?`: ${res.error}`:""}\uFF09\u3002`,res.status)}const list=isRecord(res.json)?res.json["list"]:void 0;if(!Array.isArray(list)||!list.every(isRecord)){throw new ResolveError("\u6240\u5C5E\u4E00\u89A7\u306E\u5FDC\u7B54\u306B list \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
|
|
36
|
+
res.status)}return list}async privateMasters(envelope,label){return namedFromRows(await this.privateMasterRows(envelope,label),label,codedMasterRow)}async privateMasterRows(envelope,label){return this.cached(`private-${envelope}`,PRIVATE_MASTERS_CACHE_KEY,async()=>rawListFrom(await this.privateMastersResponse(),envelope,label))}privateMastersResponse(){this.privateMastersInFlight??=this.get(`${PRIVATE_TASKS_PATH}/masters`);return this.privateMastersInFlight}async members(projectId){return this.cached(
|
|
37
|
+
"members",projectId,()=>this.namedList(`/api/v2/projects/${encodeURIComponent(projectId)}/members`,"list","\u30E1\u30F3\u30D0\u30FC",row=>({id:str(row["user_id"]),name:str(row["user_name"]),code:null,aliases:[str(row["alias"]),str(row["user_email"])].filter(v=>v!==null)})))}async user(input,flag="<\u30E6\u30FC\u30B6\u30FC>"){const trimmed=input.trim();if(trimmed==="")throw new UsageError(`${flag} \u306B\u7A7A\u306E\u5024\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`);if(trimmed.toLowerCase()===
|
|
38
|
+
SELF_REF)return this.self();if(UUID_RE.test(trimmed))return{id:trimmed,name:trimmed};const searched=await this.searchUsers(trimmed);if(searched.refs!==null){const needle=trimmed.toLowerCase();const hits=searched.refs.filter(ref=>[ref.id,ref.code,ref.name,...ref.aliases??[]].some(key=>typeof key==="string"&&key.trim().toLowerCase()===needle));if(hits.length>0)return resolveNamed(trimmed,hits,{flag,label:"\u30E6\u30FC\u30B6\u30FC",scope:TENANT_SCOPE_LABEL})}try{return await resolveNamed(trimmed,await this.
|
|
39
|
+
visibleUsers(),{flag,label:"\u30E6\u30FC\u30B6\u30FC",scope:TENANT_SCOPE_LABEL})}catch(err){if(err instanceof UsageError&&searched.failure!==null){throw new UsageError(`${err.message}\uFF08\u30AD\u30FC\u30EF\u30FC\u30C9\u691C\u7D22\u304C ${searched.failure} \u3067\u5931\u6557\u3057\u305F\u305F\u3081\u3001\u8868\u793A\u5BFE\u8C61\u306E\u30E6\u30FC\u30B6\u30FC\u3060\u3051\u3067\u7167\u5408\u3057\u307E\u3057\u305F\uFF09`,err.hint)}throw err}}async searchUsers(keyword){const query=new URLSearchParams(
|
|
40
|
+
{keyword,include_hidden:"true",limit:"100"});const res=await this.get(`${ADMIN_USERS_LIST_PATH}?${query.toString()}`);if(!res.ok)return{refs:null,failure:`HTTP ${res.status}`};return{refs:namedFromRows(rawListFrom(res,"items","\u30E6\u30FC\u30B6\u30FC"),"\u30E6\u30FC\u30B6\u30FC",userRow),failure:null}}async visibleUsers(){return this.cached("admin-users-visible",TENANT_CACHE_KEY,async()=>{const rows=[];let cursor=null;for(let page=0;;page++){if(page>=USER_LIST_MAX_PAGES){throw new ResolveError(
|
|
41
|
+
`\u30E6\u30FC\u30B6\u30FC\u4E00\u89A7\u304C ${USER_LIST_MAX_PAGES} \u30DA\u30FC\u30B8\u3092\u8D85\u3048\u305F\u305F\u3081\u3001\u540D\u524D\u3067\u89E3\u6C7A\u3067\u304D\u307E\u305B\u3093\u3002ID \u304B\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}const query=new URLSearchParams({limit:"100"});if(cursor!==null)query.set("cursor",cursor);const res=await this.get(`${ADMIN_USERS_LIST_PATH}?${query.toString()}`);rows.push(...rawListFrom(res,
|
|
42
|
+
"items","\u30E6\u30FC\u30B6\u30FC"));const body=isRecord(res.json)?res.json:{};if(body["has_more"]===false)break;const next=str(body["next_cursor"]);if(body["has_more"]!==true||next===null){throw new ResolveError("\u30E6\u30FC\u30B6\u30FC\u4E00\u89A7\u306E\u5FDC\u7B54\u306B has_more / next_cursor \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002",res.status)}cursor=next}return namedFromRows(rows,"\u30E6\u30FC\u30B6\u30FC",userRow)})}async department(input,flag="\
|
|
43
|
+
--department"){return resolveNamed(input,await this.departments(),{flag,label:"\u90E8\u7F72",scope:TENANT_SCOPE_LABEL})}async position(input,flag="--position"){return resolveNamed(input,await this.positions(),{flag,label:"\u5F79\u8077",scope:TENANT_SCOPE_LABEL})}async jobTitle(input,flag="--job-title"){return resolveNamed(input,await this.jobTitles(),{flag,label:"\u8077\u4F4D",scope:TENANT_SCOPE_LABEL})}async departments(){return this.cached("departments",TENANT_CACHE_KEY,async()=>namedFromRows(
|
|
44
|
+
masterList(await this.get(`${DEPARTMENTS_PATH}?limit=${ORG_MASTER_LIMIT}`),"\u90E8\u7F72"),"\u90E8\u7F72",codedMasterRow))}async positions(){return this.cached("positions",TENANT_CACHE_KEY,async()=>namedFromRows(masterList(await this.get(`${POSITIONS_PATH}?limit=${ORG_MASTER_LIMIT}`),"\u5F79\u8077"),"\u5F79\u8077",codedMasterRow))}async jobTitles(){return this.cached("job-titles",TENANT_CACHE_KEY,async()=>namedFromRows(masterList(await this.get(`${JOB_TITLES_PATH}?limit=${ORG_MASTER_LIMIT}`),"\u8077\u4F4D"),
|
|
45
|
+
"\u8077\u4F4D",codedMasterRow))}async namedList(path2,envelope,label,map){return namedListFrom(await this.get(path2),envelope,label,map)}async cached(scope,projectId,load){const key={profile:this.options.profile,scope,project:projectId};const options={...this.options.env!==void 0?{env:this.options.env}:{},refresh:this.options.refresh,...this.options.ttlMs!==void 0?{ttlMs:this.options.ttlMs}:{},...this.options.now!==void 0?{now:this.options.now}:{}};const hit=readCache(key,options);if(hit!==null&&
|
|
46
|
+
Array.isArray(hit))return hit;const fresh=await load();writeCache(key,fresh,options);return fresh}applyAlias(kind,input){const table=this.options.aliases?.[kind];if(table===void 0)return input;const needle=input.trim().toLowerCase();for(const[from,to]of Object.entries(table)){if(from.trim().toLowerCase()===needle&&typeof to==="string"&&to.trim()!=="")return to}return input}async backlogSpaces(){return this.cached("backlog-spaces",BACKLOG_SPACES_CACHE_KEY,()=>this.namedList(`${BACKLOG_BASE_PATH}/\
|
|
47
|
+
spaces`,"spaces","Backlog \u30B9\u30DA\u30FC\u30B9",backlogSpaceRow))}async backlogSpace(ref){return resolveNamed(ref,await this.backlogSpaces(),{flag:"--space",label:"Backlog \u30B9\u30DA\u30FC\u30B9",scope:BACKLOG_SCOPE_LABEL})}async backlogDefaultSpace(){const spaces=await this.backlogSpaces();if(spaces.length===1)return spaces[0];if(spaces.length===0){throw new UsageError("Backlog \u30B9\u30DA\u30FC\u30B9\u304C1\u4EF6\u3082\u767B\u9332\u3055\u308C\u3066\u3044\u307E\u305B\u3093","TWP \u306E\u5916\u90E8\u9023\u643A\u8A2D\u5B9A\u3067\
|
|
48
|
+
Backlog \u30B9\u30DA\u30FC\u30B9\u3092\u767B\u9332\u3057\u3066\u304F\u3060\u3055\u3044\uFF08twp backlog space list \u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\uFF09\u3002")}throw new UsageError(`Backlog \u30B9\u30DA\u30FC\u30B9\u304C ${spaces.length} \u4EF6\u767B\u9332\u3055\u308C\u3066\u3044\u308B\u305F\u3081\u3001--space \u30671\u3064\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044`,`twp backlog space list \u3067 ID \u3068\u30B9\u30DA\u30FC\u30B9URL\u3092\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002`)}async backlogProjects(spaceId){
|
|
49
|
+
return this.cached("backlog-projects",spaceId,()=>this.namedList(backlogSpacePath(spaceId,"/projects"),"projects","Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8",backlogProjectRow))}async backlogStatuses(spaceId,projectId){return this.cached("backlog-statuses",`${spaceId}/${projectId}`,()=>this.namedList(backlogSpacePath(spaceId,`/projects/${encodeURIComponent(assertBacklogPathSegment(projectId,"Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8 ID"))}/statuses`),"statuses","Backlog \u30B9\u30C6\u30FC\u30BF\u30B9",
|
|
50
|
+
backlogStatusRow))}async backlogUsers(spaceId,projectId){return this.cached("backlog-users",`${spaceId}/${projectId}`,()=>this.namedList(backlogSpacePath(spaceId,`/projects/${encodeURIComponent(assertBacklogPathSegment(projectId,"Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8 ID"))}/users`),"users","Backlog \u30E6\u30FC\u30B6\u30FC",backlogUserRow))}get apiClient(){return this.client}};function rawListFrom(res,envelope,label){if(!res.ok){throw new ResolveError(`${label}\u306E\u4E00\u89A7\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08HTTP ${res.
|
|
51
|
+
status}\uFF09\u3002\u63A5\u7D9A\u5148\u3068\u30ED\u30B0\u30A4\u30F3\u72B6\u614B\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`,res.status)}const list=isRecord(res.json)?res.json[envelope]:void 0;if(!Array.isArray(list)){throw new ResolveError(`${label}\u4E00\u89A7\u306E\u5FDC\u7B54\u306B ${envelope} \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`,res.status)}return list.map((row,index)=>{if(!isRecord(
|
|
52
|
+
row)){throw new ResolveError(`${label}\u4E00\u89A7\u306E ${index+1} \u4EF6\u76EE\u304C\u60F3\u5B9A\u306E\u5F62\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`,res.status)}return row})}function userRow(row){const email=str(row["email"]);const employeeCode=str(row["employee_code"]);return{id:str(row["user_id"]),name:str(row["user_name"]),code:employeeCode??email,aliases:[email,employeeCode].filter(v=>v!==null)}}function masterList(res,label){
|
|
53
|
+
const rows=rawListFrom(res,"list",label);const count=isRecord(res.json)?res.json["count"]:void 0;if(typeof count==="number"&&count>rows.length){throw new ResolveError(`${label}\u4E00\u89A7\u304C ${count} \u4EF6\u4E2D ${rows.length} \u4EF6\u3067\u5207\u308A\u8A70\u3081\u3089\u308C\u305F\u305F\u3081\u3001\u540D\u524D\u3067\u89E3\u6C7A\u3067\u304D\u307E\u305B\u3093\u3002ID \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002`,res.status)}return rows}function codedMasterRow(row){return{id:str(
|
|
54
|
+
row["id"]),name:str(row["name"]),code:str(row["code"]),isDefault:truthyFlag(row["is_default"])}}function namedListFrom(res,envelope,label,map){return namedFromRows(rawListFrom(res,envelope,label),label,map,res.status??void 0)}function namedFromRows(rows,label,map,status=200){return rows.map((row,index)=>{const mapped=map(row);if(mapped.id===null||mapped.name===null){throw new ResolveError(`${label}\u4E00\u89A7\u306E ${index+1} \u4EF6\u76EE\u306B id / \u540D\u524D\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`,
|
|
55
|
+
status)}return{id:mapped.id,name:mapped.name,...mapped.code!==void 0?{code:mapped.code}:{},...mapped.aliases!==void 0&&mapped.aliases.length>0?{aliases:mapped.aliases}:{},...mapped.isDefault!==void 0?{isDefault:mapped.isDefault}:{}}})}function requireDefault(candidates,ctx){const hit=candidates.find(ref=>ref.isDefault===true);if(hit!==void 0)return hit;throw new UsageError(`${ctx.flag} \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08${ctx.scope??DEFAULT_LOOKUP_SCOPE}\u306B\u306F\u65E2\u5B9A\u306E${ctx.
|
|
56
|
+
label}\u304C\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\uFF09`,`\u6307\u5B9A\u3067\u304D\u308B${ctx.label}: ${candidates.map(ref=>ref.name).join(" / ")}\uFF08\u53E4\u3044\u30AD\u30E3\u30C3\u30B7\u30E5\u304C\u6B8B\u3063\u3066\u3044\u308B\u5834\u5408\u306F --refresh \u3067\u53D6\u308A\u76F4\u305B\u307E\u3059\uFF09`)}export{BACKLOG_BASE_PATH,backlogSpacePath,resolveNamed,requireDefaultProject,PRIVATE_TASKS_PATH,BACKLOG_SCOPE_LABEL,BACKLOG_PROJECT_SCOPE_LABEL,DEPARTMENTS_PATH,POSITIONS_PATH,JOB_TITLES_PATH,ORG_MASTER_LIMIT,TASK_MASTERS,Resolver};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{
|
|
3
|
+
import{killProcessTree}from"./chunk-N2UVRM3Z.js";import{DEFAULT_CLAUDE_LAUNCHER,loadAiConfig}from"./chunk-TYNCXQSN.js";import{projectFileKey}from"./chunk-GY7KI5E5.js";import{findExecutable,isWindowsDriveAbsolute}from"./chunk-PMOUHEJQ.js";import{isBoolishTrue}from"./chunk-5WGOHFAS.js";import{twpHomeDir}from"./chunk-RZVI6PMW.js";function stringField(value,key,fallback,warnings){if(value===void 0||value===null)return fallback;if(typeof value!=="string"||value.trim()===""){warnings.push(`claude_launcher.${key} \u306F\u7A7A\u3067\u306A\u3044\u6587\u5B57\u5217\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u65E2\u5B9A '${fallback}' \u3092\u4F7F\u3044\u307E\u3059\uFF09`);return fallback}return value.trim()}function argvField(value,key,fallback,warnings,allowEmpty){if(value===void 0||value===null)return fallback;
|
|
4
4
|
if(!Array.isArray(value)){warnings.push(`claude_launcher.${key} \u306F\u6587\u5B57\u5217\u306E\u914D\u5217\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u65E2\u5B9A [${fallback.join(", ")}] \u3092\u4F7F\u3044\u307E\u3059\uFF09`);return fallback}for(const v of value){if(typeof v!=="string"||v.trim()===""){warnings.push(`claude_launcher.${key} \u306E\u8981\u7D20\u306F\u7A7A\u3067\u306A\u3044\u6587\u5B57\u5217\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u65E2\u5B9A [${fallback.
|
|
5
5
|
join(", ")}] \u3092\u4F7F\u3044\u307E\u3059\uFF09`);return fallback}}if(value.length===0&&!allowEmpty){warnings.push(`claude_launcher.${key} \u306F1\u3064\u4EE5\u4E0A\u306E\u5F15\u6570\u304C\u8981\u308A\u307E\u3059\uFF08\u65E2\u5B9A [${fallback.join(", ")}] \u3092\u4F7F\u3044\u307E\u3059\uFF09`);return fallback}return value.map(v=>v.trim())}function probeMatchField(value,warnings){const raw=stringField(value,"probe_match",DEFAULT_CLAUDE_LAUNCHER.probeMatch,warnings);try{new RegExp(raw,"m")}catch(err){
|
|
6
6
|
warnings.push(`claude_launcher.probe_match \u306F\u6B63\u898F\u8868\u73FE\u3068\u3057\u3066\u89E3\u91C8\u3067\u304D\u307E\u305B\u3093\uFF08${err.message}\uFF09\u3002\u65E2\u5B9A '${DEFAULT_CLAUDE_LAUNCHER.probeMatch}' \u3092\u4F7F\u3044\u307E\u3059`);return DEFAULT_CLAUDE_LAUNCHER.probeMatch}return raw}var NOT_YET_APPLIED=[{key:"probe",get:c=>c.probe},{key:"probe_match",get:c=>c.probeMatch},{key:"exec_args",get:c=>c.execArgs},{key:"active_args",get:c=>c.activeArgs}];function sameAsDefault(key,parsed){
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{createRuntime}from"./chunk-
|
|
3
|
+
import{createRuntime}from"./chunk-WOUKWOAR.js";import{findExecutable}from"./chunk-PMOUHEJQ.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import{describeAutoUpdate}from"./chunk-ILKQDXI5.js";import{PACKAGE_NAME,UPDATE_COMMAND,compareVersionCores,isBelowMinSupported,parseVersionCore}from"./chunk-DXXFUNYN.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import{execFile}from"child_process";import fs from"fs";import path from"path";function resolveNpmCommand(deps={}){const platform=deps.platform??process.platform;const env=deps.env??process.env;const npmPath=(deps.find??(name=>findExecutable(name,{env,platform})))("npm");if(npmPath===null)return null;if(platform!=="win32")return{file:npmPath,prefix:[]};if(/\.exe$/i.test(npmPath))return{file:npmPath,prefix:[]};const cliJs=path.win32.join(path.win32.dirname(npmPath),"node_modules","npm","bin","npm-cli.js");return(deps.exists??fs.existsSync)(cliJs)?{file:deps.nodePath??process.
|
|
4
4
|
execPath,prefix:[cliJs]}:null}var DEFAULT_REGISTRY="https://registry.npmjs.org";function registryBase(env=process.env){const configured=env["npm_config_registry"]?.trim();if(configured===void 0||configured==="")return DEFAULT_REGISTRY;try{const url=new URL(configured);if(url.protocol!=="https:"&&url.protocol!=="http:")return DEFAULT_REGISTRY}catch{return DEFAULT_REGISTRY}return configured.replace(/\/+$/,"")}async function fetchFromRegistry(fetchImpl=httpFetch,env=process.env){const url=`${registryBase(env)}/${PACKAGE_NAME.replace(
|
|
5
5
|
"/","%2f")}`;const res=await fetchImpl(url,{headers:{Accept:"application/vnd.npm.install-v1+json"},signal:AbortSignal.timeout(5e3)});if(!res.ok){throw new Error(`registry \u304C ${res.status} \u3092\u8FD4\u3057\u307E\u3057\u305F`)}const body=await res.json();const latest=body["dist-tags"]?.latest;if(typeof latest!=="string"||parseVersionCore(latest)===null){throw new Error("registry \u306E\u5FDC\u7B54\u306B dist-tags.latest \u304C\u3042\u308A\u307E\u305B\u3093")}return{version:latest.trim(),source:"\
|
|
6
6
|
registry"}}async function fetchFromNpmCli(){const npm=resolveNpmCommand();if(npm===null){throw new Error("npm \u304C PATH \u306B\u898B\u3064\u304B\u308A\u307E\u305B\u3093")}const stdout=await new Promise((resolve,reject)=>{execFile(npm.file,[...npm.prefix,"view",PACKAGE_NAME,"version","--json"],{timeout:15e3,windowsHide:true},(error,out)=>error?reject(error):resolve(out))});const parsed=JSON.parse(stdout.trim());const latest=typeof parsed==="string"?parsed:null;if(latest===null||parseVersionCore(
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
|
+
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
+
import{booleanText,boundedText,isoDate}from"./chunk-IJLJGDMZ.js";import{ORG_MASTER_LIMIT}from"./chunk-QOUFHYK5.js";import{nonEmpty,positiveInteger}from"./chunk-DMDVLOAY.js";import{requireResolved,singleRef,withResolved}from"./chunk-ZN5EFDH7.js";import{ULID_RE,UUID_RE,isSafePathSegment}from"./chunk-GMBJTG6A.js";import{acknowledgement,isRecord,pick}from"./chunk-ZWVYVS2A.js";import{ApiResponseError,UsageError}from"./chunk-7WSNIXTQ.js";var CLEAR_DATE="none";function placeholderOf(field){switch(field.kind){case"text":return`<${field.label}>`;case"integer":return"<\u6574\u6570>";case"boolean":return"<true|false>";case"enum":return`<${field.values.join("|")}>`;case"date":return`<YYYY-MM-DD|${CLEAR_DATE}>`;case"ref":return field.placeholder}}function createFlags(fields){return fields.map(field=>({name:field.flag,summary:field.summary,takesValue:true,placeholder:placeholderOf(field)}))}function updateFlags(fields){const flags=[];for(const field of fields){
|
|
4
|
+
flags.push({name:field.flag,summary:field.summary,takesValue:true,placeholder:placeholderOf(field)});if(field.kind==="ref")flags.push({name:field.clearFlag,summary:field.clearSummary,takesValue:false})}return flags}function integerValue(field,raw){const trimmed=raw.trim();const value=/^\d+$/.test(trimmed)?Number(trimmed):Number.NaN;const tooLarge=field.max!==void 0&&value>field.max;if(!Number.isSafeInteger(value)||value<field.min||tooLarge){const range=field.max!==void 0?`${field.min} \u4EE5\u4E0A ${field.
|
|
5
|
+
max} \u4EE5\u4E0B`:`${field.min} \u4EE5\u4E0A`;throw new UsageError(`${field.flag} \u306F ${range}\u306E\u6574\u6570\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${raw}`,`${field.label}\u3092\u6574\u6570\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return value}function fieldBody(input,fields){const body={};for(const field of fields){switch(field.kind){case"text":{const value=boundedText(input,field.flag,{maxChars:field.maxChars,label:field.label});if(value!==void 0)body[field.
|
|
6
|
+
key]=value;break}case"integer":{const raw=input.flags.get(field.flag);if(raw!==void 0)body[field.key]=integerValue(field,raw);break}case"boolean":{const raw=input.flags.get(field.flag);if(raw!==void 0)body[field.key]=booleanText(field.flag,raw);break}case"enum":{const raw=input.flags.get(field.flag);if(raw===void 0)break;const value=raw.trim().toLowerCase();if(!field.values.includes(value)){throw new UsageError(`${field.flag} \u306B\u300C${raw}\u300D\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,
|
|
7
|
+
`\u6307\u5B9A\u3067\u304D\u308B\u306E\u306F ${field.values.join(" / ")} \u3067\u3059\u3002`)}body[field.key]=value;break}case"date":{const raw=input.flags.get(field.flag);if(raw===void 0)break;body[field.key]=raw.trim().toLowerCase()===CLEAR_DATE?null:isoDate(input,field.flag);break}case"ref":{nonEmpty(input.flags,field.flag);if(input.flags.has(field.flag)&&input.flags.has(field.clearFlag)){throw new UsageError(`${field.flag} \u3068 ${field.clearFlag} \u306F\u540C\u6642\u306B\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,
|
|
8
|
+
"\u3069\u3061\u3089\u304B\u4E00\u65B9\u3060\u3051\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}if(input.flags.has(field.clearFlag))body[field.key]=null;const resolved=input.resolved?.[field.key];if(input.flags.has(field.flag)&&resolved!==void 0)body[field.key]=resolved;break}}}return body}function booleanQuery(flag,raw){return String(booleanText(flag,raw))}function hasAnyField(input,fields){return fields.some(field=>input.flags.has(field.flag)||field.kind==="ref"&&input.flags.has(
|
|
9
|
+
field.clearFlag))}async function resolveRefFields(input,ctx,fields){const resolved={};for(const field of fields){if(field.kind!=="ref")continue;const raw=nonEmpty(input.flags,field.flag);if(raw!==void 0)resolved[field.key]=(await field.resolve(ctx,raw,field.flag)).id}return withResolved(input,resolved)}async function targetId(input,options){const ref=singleRef(input,{flag:options.flag,label:options.label,usage:options.usage});if(ULID_RE.test(ref.toUpperCase()))return ref.toUpperCase();if(UUID_RE.
|
|
10
|
+
test(ref))return ref;return(await options.resolve(ref)).id}function idSegment(input,label){const id=requireResolved(input,"id");if(!isSafePathSegment(id)){throw new ApiResponseError(`\u30B5\u30FC\u30D0\u304C\u8FD4\u3057\u305F${label} ID \u3092\u30D1\u30B9\u306B\u4F7F\u3048\u307E\u305B\u3093: ${id}\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return encodeURIComponent(id)}function masterRows(body,label){const list=isRecord(body)?body["list"]:void 0;if(!Array.
|
|
11
|
+
isArray(list)){throw new ApiResponseError(`${label}\u4E00\u89A7\u306E\u5FDC\u7B54\u306B list \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return list}function truncationNotes(body,label){const rows=masterRows(body,label);const count=isRecord(body)?body["count"]:void 0;if(typeof count!=="number"||count<=rows.length)return[];return[`${label}\u306F ${count} \u4EF6\u3042\u308A\u307E\u3059\u304C\u3001${rows.length}\
|
|
12
|
+
\u4EF6\u3060\u3051\u3092\u8868\u793A\u3057\u3066\u3044\u307E\u3059\u3002--limit \u3092\u5897\u3084\u3057\u3066\u304F\u3060\u3055\u3044\u3002`]}function masterItem(body,itemKey,label){const item=isRecord(body)?body[itemKey]:void 0;if(!isRecord(body)||body["result"]!==true||!isRecord(item)||typeof item["id"]!=="string"){throw new ApiResponseError(`${label}\u306E\u5FDC\u7B54\u306B ${itemKey} \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}
|
|
13
|
+
return item}function cacheNote(label){return`${label}\u4E00\u89A7\u306F10\u5206\u30AD\u30E3\u30C3\u30B7\u30E5\u3057\u307E\u3059\u3002\u3053\u306E\u76F4\u5F8C\u306B\u540D\u524D\u3084\u30B3\u30FC\u30C9\u3067\u6307\u5B9A\u3059\u308B\u3068\u304D\u306F --refresh \u3092\u4ED8\u3051\u3066\u304F\u3060\u3055\u3044\uFF08ID \u306A\u3089\u305D\u306E\u307E\u307E\u901A\u308A\u307E\u3059\uFF09\u3002`}function referencedDeleteGuidance(guidance){return server=>server.includes("\u524A\u9664\u3067\u304D\u307E\u305B\u3093")&&
|
|
14
|
+
!server.includes("\u4E88\u7D04")?guidance:void 0}function codeNameFields(label){return[{kind:"text",flag:"--code",key:"code",label:`${label}\u30B3\u30FC\u30C9`,maxChars:50,summary:`${label}\u30B3\u30FC\u30C9\uFF08\u30C6\u30CA\u30F3\u30C8\u5185\u3067\u4E00\u610F\uFF09`},{kind:"text",flag:"--name",key:"name",label:`${label}\u540D`,maxChars:255,summary:`${label}\u540D`}]}function masterFields(label,rest){return[...codeNameFields(label),...rest]}var STATUS_VALUES=["active","inactive"];function masterListOperation(options){
|
|
15
|
+
const{name,label}=options;const filters=options.filters??[];return{name:"list",summary:`${label}\u3092\u4E00\u89A7\u3059\u308B`,usage:`twp ${name} list [--status active|inactive] [--keyword <\u8A9E>]${filters.map(f=>` [${f.flag.name} ${f.flag.placeholder??""}]`).join("")} [--limit <\u4EF6\u6570>]`,description:(options.note!==void 0?`${options.note}
|
|
16
|
+
`:"")+`--keyword \u306F\u30B3\u30FC\u30C9\u3068\u540D\u524D\u306E\u90E8\u5206\u4E00\u81F4\u3067\u3059\u3002
|
|
17
|
+
\u3053\u306E API \u306F\u30DA\u30FC\u30B8\u30F3\u30B0\u3092\u6301\u305F\u305A\u3001--limit \u4EF6\uFF08\u65E2\u5B9A ${ORG_MASTER_LIMIT}\uFF09\u3067\u6253\u3061\u5207\u308A\u307E\u3059\u3002\u6253\u3061\u5207\u3063\u305F\u3068\u304D\u306F stderr \u3067\u77E5\u3089\u305B\u307E\u3059\u3002
|
|
18
|
+
|
|
19
|
+
--output json \u306F API \u304C\u8FD4\u3059\u5168\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u51FA\u3057\u307E\u3059\u3002
|
|
20
|
+
--output table / text / tsv \u306F\u8981\u7D04\u5217\uFF08${options.columns.join(" / ")}\uFF09\u3067\u3059\u3002`,flags:[{name:"--status",summary:"\u72B6\u614B\u3067\u7D5E\u308A\u8FBC\u3080\uFF08active / inactive\uFF09",takesValue:true,placeholder:"<active|inactive>"},{name:"--keyword",summary:"\u30B3\u30FC\u30C9\u30FB\u540D\u524D\u306E\u90E8\u5206\u4E00\u81F4\u3067\u7D5E\u308A\u8FBC\u3080",takesValue:true,placeholder:"<\u8A9E>"},...filters.map(f=>f.flag),{name:"--limit",summary:`\u53D6\u5F97\u3059\u308B\u4EF6\u6570\u306E\u4E0A\u9650\uFF08\u65E2\u5B9A ${ORG_MASTER_LIMIT}\
|
|
21
|
+
\uFF09`,takesValue:true,placeholder:"<\u4EF6\u6570>"}],plan(input){if(input.args.length>0){throw new UsageError(`list \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,`twp ${name} list help`)}const raw=nonEmpty(input.flags,"--status");const status=raw?.trim().toLowerCase();if(status!==void 0&&!STATUS_VALUES.includes(status)){throw new UsageError(`--status \u306B\u300C${raw}\u300D\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,`\u6307\u5B9A\u3067\u304D\u308B\u306E\u306F ${STATUS_VALUES.
|
|
22
|
+
join(" / ")} \u3067\u3059\u3002`)}const query={status,keyword:nonEmpty(input.flags,"--keyword"),limit:positiveInteger(input.flags,"--limit")??ORG_MASTER_LIMIT};for(const filter of filters){const value=input.flags.get(filter.flag.name);if(value!==void 0)query[filter.query]=filter.value(value)}return{method:"GET",path:options.path,query}},summarize:body=>masterRows(body,label).map(row=>pick(row,options.columns)),raw:body=>masterRows(body,label),notes:body=>truncationNotes(body,label)}}function flatMasterDomain(spec){
|
|
23
|
+
const{label,name}=spec;const fields=masterFields(label,spec.fields);const refHelp=`<${label}> \u306F\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u30FBID \u306E\u3069\u308C\u3067\u3082\u6307\u5B9A\u3067\u304D\u307E\u3059\uFF08\u540D\u524D\u304C\u8907\u6570\u306B\u4E00\u81F4\u3059\u308C\u3070\u5019\u88DC\u3092\u51FA\u3057\u3066\u6B62\u307E\u308A\u307E\u3059\uFF09\u3002
|
|
24
|
+
ID \u4EE5\u5916\u306F${label}\u4E00\u89A7\uFF08\u65E2\u5B9A10\u5206\u30AD\u30E3\u30C3\u30B7\u30E5\u30FB--refresh \u3067\u53D6\u308A\u76F4\u3057\uFF09\u3068\u7167\u5408\u3057\u307E\u3059\u3002`;const refFlag={name:`--${name}`,summary:`\u5BFE\u8C61\u306E${label}\uFF08\u4F4D\u7F6E\u5F15\u6570\u306E\u4EE3\u308F\u308A\u306B\u4F7F\u3048\u308B\uFF09`,takesValue:true,placeholder:`<${label}>`};const prepareTarget=async(input,ctx,usage)=>withResolved(input,{id:await targetId(input,{flag:refFlag.name,label,
|
|
25
|
+
usage,resolve:ref=>spec.resolve(ctx,ref,`<${label}>`)})});const itemPath=input=>`${spec.path}/${idSegment(input,label)}`;const item=body=>masterItem(body,spec.itemKey,label);const forbidden=`\u7BA1\u7406\u8005\u306E\u6A29\u9650\u304C\u5FC5\u8981\u3067\u3059\u3002${label}\u306E\u4F5C\u6210\u30FB\u66F4\u65B0\u30FB\u524A\u9664\u306F\u7BA1\u7406\u8005\u3060\u3051\u304C\u884C\u3048\u307E\u3059`;const listOperation=masterListOperation({name,label,path:spec.path,columns:spec.listColumns,...spec.listFilters!==
|
|
26
|
+
void 0?{filters:spec.listFilters}:{}});return{name,summary:spec.summary,operations:[listOperation,{name:"get",summary:`${label}1\u4EF6\u306E\u8A73\u7D30\u3092\u8868\u793A\u3059\u308B`,usage:`twp ${name} get <${label}>`,description:`${refHelp}
|
|
27
|
+
|
|
28
|
+
--output json \u306F API \u304C\u8FD4\u3059\u5168\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u51FA\u3057\u307E\u3059\u3002`,flags:[refFlag],prepare:(input,ctx)=>prepareTarget(input,ctx,`twp ${name} get help`),plan:input=>({method:"GET",path:itemPath(input)}),summarize:body=>pick(item(body),spec.getColumns),raw:body=>item(body)},{name:"create",summary:`${label}\u3092\u4F5C\u6210\u3059\u308B\uFF08\u7BA1\u7406\u8005\u306E\u307F\uFF09`,usage:`twp ${name} create --code <\u30B3\u30FC\u30C9> --name <\u540D\u524D> [\u9805\u76EE\u2026]`,
|
|
29
|
+
description:`--code \u3068 --name \u304C\u5FC5\u9808\u3067\u3059\u3002\u305D\u306E\u307B\u304B\u306E\u9805\u76EE\u306F\u7701\u304F\u3068\u30B5\u30FC\u30D0\u306E\u65E2\u5B9A\u3067\u4F5C\u6210\u3057\u307E\u3059\u3002
|
|
30
|
+
|
|
31
|
+
\u4F5C\u6210\u3057\u305F${label}\u306E ID \u304C\u8FD4\u308A\u307E\u3059\u3002`,forbidden,flags:createFlags(fields),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(" ")}`,`twp ${name} create help`)}const body=fieldBody(input,fields);for(const flag of["--code","--name"]){const key=flag.slice(2);if(body[key]===void 0)throw new UsageError(`${flag} \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044`,
|
|
32
|
+
`twp ${name} create help`)}return resolveRefFields(input,ctx,fields)},plan:input=>({method:"POST",path:spec.path,body:fieldBody(input,fields)}),summarize:body=>pick(item(body),spec.getColumns),raw:body=>item(body),notes:()=>[cacheNote(label)]},{name:"update",summary:`${label}\u3092\u66F4\u65B0\u3059\u308B\uFF08\u7BA1\u7406\u8005\u306E\u307F\uFF09`,usage:`twp ${name} update <${label}> [\u9805\u76EE\u2026]`,description:`\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\u5909\u66F4\u3059\u308B\u9805\u76EE\u30921\u3064\u3082\u6307\u5B9A\u3057\u306A\u3044\u3068\u30A8\u30E9\u30FC\u306B\u306A\u308A\u307E\u3059\u3002
|
|
33
|
+
|
|
34
|
+
${refHelp}`,forbidden,flags:[...updateFlags(fields),refFlag],async prepare(input,ctx){if(!hasAnyField(input,fields)){throw new UsageError("\u5909\u66F4\u3059\u308B\u9805\u76EE\u30921\u3064\u4EE5\u4E0A\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",`twp ${name} update help`)}fieldBody(input,fields);const target=await prepareTarget(input,ctx,`twp ${name} update help`);return resolveRefFields(target,ctx,fields)},plan:input=>({method:"PUT",path:itemPath(input),body:fieldBody(input,fields)}),summarize:body=>pick(
|
|
35
|
+
item(body),spec.getColumns),raw:body=>item(body),notes:()=>[cacheNote(label)]},{name:"delete",summary:`${label}\u3092\u524A\u9664\u3059\u308B\uFF08\u7BA1\u7406\u8005\u306E\u307F\u30FB--yes \u304C\u8981\u308B\uFF09`,usage:`twp ${name} delete <${label}> --yes`,description:`\u6240\u5C5E\uFF08\u904E\u53BB\u306E\u5C65\u6B74\u3092\u542B\u3080\uFF09\u304B\u3089\u53C2\u7167\u3055\u308C\u3066\u3044\u308B${label}\u306F\u3001\u30B5\u30FC\u30D0\u304C\u524A\u9664\u3092\u65AD\u308A\u307E\u3059\u3002
|
|
36
|
+
${spec.deleteGuidance}
|
|
37
|
+
|
|
38
|
+
${refHelp}`,destructive:true,forbidden,rejected:referencedDeleteGuidance(spec.deleteGuidance),flags:[refFlag],prepare:(input,ctx)=>prepareTarget(input,ctx,`twp ${name} delete help`),plan:input=>({method:"DELETE",path:itemPath(input)}),summarize:body=>acknowledgement(body,`${label}\u524A\u9664`),raw:body=>acknowledgement(body,`${label}\u524A\u9664`),notes:()=>[cacheNote(label)]}]}}export{createFlags,updateFlags,fieldBody,booleanQuery,hasAnyField,resolveRefFields,targetId,idSegment,masterRows,masterItem,cacheNote,referencedDeleteGuidance,masterFields,STATUS_VALUES,masterListOperation,flatMasterDomain};
|
|
@@ -38,4 +38,4 @@ break;const orphanResult=hasToolResult(head2)&&this.messages.length>1;if(head2.r
|
|
|
38
38
|
const freed=before-lengthOf(head);this.lastPromptTokens=Math.max(0,this.lastPromptTokens-Math.ceil(freed/4));this.pendingChars=Math.max(0,this.pendingChars-freed);dropped+=1}this.droppedMessages+=dropped;return dropped}estimatedPromptTokens(){if(this.lastPromptTokens===0){return Math.ceil(this.totalChars()/4)}return this.lastPromptTokens+Math.ceil(this.pendingChars/4)}snapshot(){const used=this.estimatedPromptTokens();const remaining=Math.round((this.contextWindowTokens-used)/this.contextWindowTokens*
|
|
39
39
|
100);return{totals:{...this.totals},turns:this.turns,lastPromptTokens:this.lastPromptTokens,remainingPercent:Math.max(0,Math.min(100,remaining)),droppedMessages:this.droppedMessages}}totalChars(){return this.messages.reduce((sum,m)=>sum+lengthOf(m),0)}};function lengthOf(message){return message.content.reduce((sum,block)=>sum+blockLength(block),0)}function copyBlock(block){return block.type==="tool_use"?{...block,input:{...block.input}}:{...block}}function hasToolResult(message){return message.content.
|
|
40
40
|
some(block=>block.type==="tool_result")}function createRuntime(opts){const env=opts.env??process.env;const cwd=opts.cwd??process.cwd();const profile=resolveProfile(opts.profile,env,cwd);const creds=loadCredentials(profile.name,env);const apiUrl=effectiveApiUrl(profile,creds?.api_url,env);const relayUrl=effectiveRelayUrl(profile,creds?.relay_url,env);const session=new AuthSession(profile.name,apiUrl,env);const client=new RelayClient(relayUrl,session,httpFetch,opts.cliVersion);const configured=resolveConfiguredModel(opts.model,profile.name,
|
|
41
|
-
env,cwd);return{profileName:profile.name,apiUrl,relayUrl,client,context:new ContextManager,loggedIn:creds!==null,configuredModel:configured?.model??null,loadCatalog:()=>loadCatalog(client,profile.name,relayUrl,env),loadCachedFloor:()=>loadCachedVersionFloor(profile.name,relayUrl,env)}}export{modelLabel,toModelInfos,emptyUsage,RelayError,DEFAULT_MAX_TOKENS,builtinCatalog,loadCachedCatalog,pickModel,createRuntime};
|
|
41
|
+
env,cwd);return{profileName:profile.name,apiUrl,relayUrl,client,session,context:new ContextManager,loggedIn:creds!==null,configuredModel:configured?.model??null,loadCatalog:()=>loadCatalog(client,profile.name,relayUrl,env),loadCachedFloor:()=>loadCachedVersionFloor(profile.name,relayUrl,env)}}export{modelLabel,toModelInfos,emptyUsage,RelayError,DEFAULT_MAX_TOKENS,builtinCatalog,loadCachedCatalog,pickModel,createRuntime};
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{
|
|
4
|
-
s*:\\s*)"(?:[^"\\\\]|\\\\.)*"`,"gi"),`$1"${REDACTED}"`).replace(new RegExp(`([?&]${SECRET_KEY_PATTERN}=)[^&\\s"'\`,;)\\]}]+`,"gi"),`$1${REDACTED}`).replace(new RegExp(`(--(?!${NOT_SECRET_FLAGS}(?:=|\\s))${SECRET_KEY_PATTERN}(?:=|\\s+))('[^']*'|"[^"]*"|[A-Za-z0-9_.~+/=|:%-]+)`,"gi"),`$1${REDACTED}`)}var SECRET_KEY_NAME=new RegExp(`^${SECRET_KEY_PATTERN}$`,"i");function redactSecretValues(value){if(Array.isArray(value))return value.map(
|
|
5
|
-
"object"){const out={};for(const[key,item]of Object.entries(value)){out[key]=SECRET_KEY_NAME.test(key)?REDACTED:redactSecretValues(item)}return out}return value}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(
|
|
6
|
-
var BODY_LIMIT=4e3;function formatBody(raw){const safe=redactSecrets(stripTerminalControls(raw));return safe.length>BODY_LIMIT?`${safe.slice(0,BODY_LIMIT)}
|
|
3
|
+
import{stripTerminalControls}from"./chunk-NHYMHCAT.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|signature)[A-Za-z0-9_-]*";var NOT_SECRET_FLAGS="(?:starting-token)";function redactSecrets(text){return text.replace(/\bBearer\s+[^\s"'`,;)\]}]+/gi,`Bearer ${REDACTED}`).replace(/(\/v2\/(?:admin\/)?invitations\/)[A-Za-z0-9_-]{16,}/g,
|
|
4
|
+
`$1${REDACTED}`).replace(new RegExp(`("${SECRET_KEY_PATTERN}"\\s*:\\s*)"(?:[^"\\\\]|\\\\.)*"`,"gi"),`$1"${REDACTED}"`).replace(new RegExp(`([?&]${SECRET_KEY_PATTERN}=)[^&\\s"'\`,;)\\]}]+`,"gi"),`$1${REDACTED}`).replace(new RegExp(`(--(?!${NOT_SECRET_FLAGS}(?:=|\\s))${SECRET_KEY_PATTERN}(?:=|\\s+))('[^']*'|"[^"]*"|[A-Za-z0-9_.~+/=|:%-]+)`,"gi"),`$1${REDACTED}`)}var SECRET_KEY_NAME=new RegExp(`^${SECRET_KEY_PATTERN}$`,"i");function redactSecretValues(value){if(Array.isArray(value))return value.map(
|
|
5
|
+
item=>redactSecretValues(item));if(value!==null&&typeof value==="object"){const out={};for(const[key,item]of Object.entries(value)){out[key]=SECRET_KEY_NAME.test(key)?REDACTED:redactSecretValues(item)}return out}return value}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(
|
|
6
|
+
String(value));return` ${name.toLowerCase()}: ${shown}`})}var BODY_LIMIT=4e3;function formatBody(raw){const safe=redactSecrets(stripTerminalControls(raw));return safe.length>BODY_LIMIT?`${safe.slice(0,BODY_LIMIT)}
|
|
7
7
|
\u2026\uFF08\u4EE5\u964D ${safe.length-BODY_LIMIT} \u6587\u5B57\u3092\u7701\u7565\uFF09`:safe}function isTextualContentType(contentType){if(contentType===null)return false;return/^\s*(text\/|application\/(json|xml|javascript|x-www-form-urlencoded)|application\/[\w.+-]*\+(json|xml))/i.test(contentType)}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??
|
|
8
8
|
"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")}
|
|
9
9
|
`);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)}
|
|
10
10
|
`);throw err}const out=[`[debug] \u2190 ${res.status} ${res.statusText} (${now()-started}ms)`,...formatHeaders(res.headers)];const contentType=res.headers.get("content-type");if(isTextualContentType(contentType)){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)}`)}else{const length=res.headers.get("content-length");out.push(` \uFF08\u672C\u6587\u306F ${contentType??"content-ty\
|
|
11
11
|
pe \u4E0D\u660E"}\u30FB${length===null?"\u30B5\u30A4\u30BA\u4E0D\u660E":`${length} \u30D0\u30A4\u30C8`}\u3002\u30C6\u30AD\u30B9\u30C8\u3067\u306A\u3044\u305F\u3081\u51FA\u529B\u3057\u306A\u3044\uFF09`)}write(`${out.join("\n")}
|
|
12
|
-
`);return res}}
|
|
12
|
+
`);return res}}export{redactSecrets,redactSecretValues,withDebug};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
|
+
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
+
import{UsageError}from"./chunk-7WSNIXTQ.js";function singleRef(input,options){const fromFlag=input.flags.get(options.flag);const[fromArg,...rest]=input.args;if(rest.length>0){throw new UsageError(`\u53D7\u3051\u53D6\u308C\u308B${options.label}\u306F1\u3064\u3060\u3051\u3067\u3059: ${rest.join(" ")}`,options.usage)}if(fromArg!==void 0&&fromFlag!==void 0){throw new UsageError(`${options.label}\u304C\u4F4D\u7F6E\u5F15\u6570\uFF08${fromArg}\uFF09\u3068 ${options.flag} ${fromFlag} \u306E\u4E21\u65B9\u3067\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u3059`,
|
|
4
|
+
`\u3069\u3061\u3089\u304B\u4E00\u65B9\u3060\u3051\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u3069\u3061\u3089\u3067\u3082\u540C\u3058\u610F\u5473\u3067\u3059\uFF09\u3002`)}const value=fromArg??fromFlag;if(value===void 0||value.trim()===""){if(options.required===false)return void 0;throw new UsageError(`${options.label}\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044`,options.usage)}return value.trim()}function requireResolved(input,key){const value=input.resolved?.[key];if(value===
|
|
5
|
+
void 0||value===""){throw new Error(`\u5185\u90E8\u30A8\u30E9\u30FC: ${key} \u304C\u89E3\u6C7A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\uFF08prepare() \u306E\u914D\u7DDA\u6F0F\u308C\uFF09`)}return value}function withResolved(input,values){return{...input,resolved:{...input.resolved,...values}}}export{singleRef,requireResolved,withResolved};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
|
+
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
+
import{ApiResponseError}from"./chunk-7WSNIXTQ.js";function isRecord(value){return typeof value==="object"&&value!==null&&!Array.isArray(value)}function pick(row,columns){const source=isRecord(row)?row:{};const out={};for(const column of columns)out[column]=source[column]??null;return out}function acknowledgement(body,label){if(!isRecord(body)||body["result"]!==true){throw new ApiResponseError(`${label}\u306E\u5FDC\u7B54\u304C\u60F3\u5B9A\u306E\u5F62\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}
|
|
4
|
+
return{result:true,message:body["message"]??null}}export{isRecord,pick,acknowledgement};
|
package/dist/cli.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
3
3
|
const require = __twpCreateRequire(import.meta.url);
|
|
4
|
-
import{parseArgv}from"./chunk-
|
|
4
|
+
import{parseArgv}from"./chunk-HW3QGKYR.js";import"./chunk-NAUH75MM.js";import{GLOBAL_OPTIONS_HELP}from"./chunk-TAN5I2DP.js";import"./chunk-EJ474UDB.js";import"./chunk-QQRJLH6B.js";import"./chunk-VSJBJXZO.js";var VERSION=true?"0.24.0":"0.0.0-dev";var HELP=`twp ${VERSION} \u2014 TWP CLI
|
|
5
5
|
|
|
6
6
|
\u4F7F\u3044\u65B9:
|
|
7
7
|
twp \u5BFE\u8A71 TUI \u3092\u8D77\u52D5
|
|
@@ -57,7 +57,7 @@ import{parseArgv}from"./chunk-I2QFW7EK.js";import"./chunk-BOBSH3QN.js";import{GL
|
|
|
57
57
|
twp --allowed-tools <\u898F\u5247>
|
|
58
58
|
twp --disallowed-tools <\u898F\u5247>
|
|
59
59
|
\u6A29\u9650\u30EB\u30FC\u30EB\u3092\u8FFD\u52A0\uFF08Claude Code \u4E92\u63DB\u3002\u4F8B: "Bash(git status:*)",
|
|
60
|
-
"Write(src/**)",
|
|
60
|
+
"Write(src/**)", twp_update_project-task\u3002\u30AB\u30F3\u30DE\u533A\u5207\u308A\u30FB\u7E70\u308A\u8FD4\u3057\u53EF\uFF09\u3002
|
|
61
61
|
deny \u306F\u5E38\u306B\u52DD\u3064\uFF08--allowed-tools \u3067\u3082\u30E2\u30FC\u30C9\u306E deny \u306F\u8986\u3089\u306A\u3044\uFF09\u3002
|
|
62
62
|
\u30D5\u30A1\u30A4\u30EB\u3067\u306F ~/.twp/settings.json \u306E permissions.allow/ask/deny\u3002
|
|
63
63
|
.twp/settings*.json\uFF08\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u914D\u4E0B\uFF09\u306F\u7DE0\u3081\u308B\u5411\u304D\u306B\u3057\u304B\u52B9\u304B\u306A\u3044
|
|
@@ -98,6 +98,27 @@ import{parseArgv}from"./chunk-I2QFW7EK.js";import"./chunk-BOBSH3QN.js";import{GL
|
|
|
98
98
|
twp task category list \u30BF\u30B9\u30AF\u306E\u30AB\u30C6\u30B4\u30EA\u3092\u4E00\u89A7\u3059\u308B
|
|
99
99
|
twp task milestone list \u30BF\u30B9\u30AF\u306E\u30DE\u30A4\u30EB\u30B9\u30C8\u30FC\u30F3\u3092\u4E00\u89A7\u3059\u308B
|
|
100
100
|
twp task label list \u30BF\u30B9\u30AF\u306E\u30E9\u30D9\u30EB\u3092\u4E00\u89A7\u3059\u308B
|
|
101
|
+
twp media list \u30E1\u30C7\u30A3\u30A2\u30E9\u30A4\u30D6\u30E9\u30EA\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u4E00\u89A7\u3059\u308B\uFF08\u65E2\u5B9A\u306F\u500B\u4EBA\u30D5\u30A1\u30A4\u30EB\uFF09
|
|
102
|
+
twp media upload \u30D5\u30A1\u30A4\u30EB\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3059\u308B\uFF08--file \u5FC5\u9808\u30FB3\u5F80\u5FA9\u30921\u30B3\u30DE\u30F3\u30C9\u3067\uFF09
|
|
103
|
+
twp media download <\u30D5\u30A1\u30A4\u30EBID>
|
|
104
|
+
\u30D5\u30A1\u30A4\u30EB\u3092\u66F8\u304D\u51FA\u3059\uFF08--out \u5FC5\u9808\uFF09
|
|
105
|
+
twp media delete <\u30D5\u30A1\u30A4\u30EBID>
|
|
106
|
+
\u30D5\u30A1\u30A4\u30EB\u3092\u30B4\u30DF\u7BB1\u3078\u79FB\u3059\uFF08--yes \u304C\u8981\u308B\uFF09
|
|
107
|
+
twp media bulk-publish <\u30D5\u30A1\u30A4\u30EBID>...
|
|
108
|
+
\u8907\u6570\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u516C\u958B\u3059\u308B
|
|
109
|
+
twp media bulk-unpublish <\u30D5\u30A1\u30A4\u30EBID>...
|
|
110
|
+
\u8907\u6570\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u975E\u516C\u958B\u306B\u3059\u308B
|
|
111
|
+
twp media bulk-archive <\u30D5\u30A1\u30A4\u30EBID>...
|
|
112
|
+
\u8907\u6570\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u30A2\u30FC\u30AB\u30A4\u30D6\u3059\u308B
|
|
113
|
+
twp media bulk-restore <\u30D5\u30A1\u30A4\u30EBID>...
|
|
114
|
+
\u30B4\u30DF\u7BB1\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u5FA9\u5143\u3059\u308B
|
|
115
|
+
twp media bulk-move <\u30D5\u30A1\u30A4\u30EBID>...
|
|
116
|
+
\u5225\u306E\u30D5\u30A9\u30EB\u30C0\u30FB\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3078\u79FB\u3059\uFF08--folder / --project\uFF09
|
|
117
|
+
twp media bulk-delete <\u30D5\u30A1\u30A4\u30EBID>...
|
|
118
|
+
\u30B4\u30DF\u7BB1\u3078\u79FB\u3059\uFF08--yes \u304C\u8981\u308B\u30FB--permanent \u3067\u30B4\u30DF\u7BB1\u304B\u3089\u5B8C\u5168\u524A\u9664\uFF09
|
|
119
|
+
twp media bulk-download <\u30D5\u30A1\u30A4\u30EBID>...
|
|
120
|
+
ZIP \u306B\u307E\u3068\u3081\u3066\u66F8\u304D\u51FA\u3059\uFF08--out \u5FC5\u9808\u30FB50\u4EF6\u307E\u3067\uFF09
|
|
121
|
+
twp storage get \u30C6\u30CA\u30F3\u30C8\u306E\u30B9\u30C8\u30EC\u30FC\u30B8\u4F7F\u7528\u91CF\u30FB\u4E0A\u9650\u30FB\u6B8B\u91CF\uFF08\u7BA1\u7406\u8005\u306E\u307F\uFF09
|
|
101
122
|
twp backlog space list \u9023\u643A\u6E08\u307F\u306E Backlog \u30B9\u30DA\u30FC\u30B9\u3092\u4E00\u89A7\u3059\u308B
|
|
102
123
|
twp backlog project list
|
|
103
124
|
Backlog \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u4E00\u89A7\u3059\u308B
|
|
@@ -120,6 +141,52 @@ import{parseArgv}from"./chunk-I2QFW7EK.js";import"./chunk-BOBSH3QN.js";import{GL
|
|
|
120
141
|
twp user get <\u30E6\u30FC\u30B6\u30FC> \u30E6\u30FC\u30B6\u30FC1\u4EBA\u306E\u8A73\u7D30\u3092\u8868\u793A\u3059\u308B\uFF08\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u307F\uFF09
|
|
121
142
|
twp user assignment list <\u30E6\u30FC\u30B6\u30FC>
|
|
122
143
|
\u30E6\u30FC\u30B6\u30FC\u306E\u6240\u5C5E\u306E\u5C65\u6B74\u3092\u4E00\u89A7\u3059\u308B\uFF08--current \u3067\u73FE\u5728\u306E\u307F\uFF09
|
|
144
|
+
twp user assignment move <\u30E6\u30FC\u30B6\u30FC>
|
|
145
|
+
\u6240\u5C5E\u3092\u4ED8\u3051\u66FF\u3048\u308B\uFF08\u73FE\u5728\u306E\u4E3B\u6240\u5C5E\u3092\u7570\u52D5\u65E5\u306E\u524D\u65E5\u3067\u7D42\u3048\u3001\u65B0\u3057\u3044\u4E3B\u6240\u5C5E\u3092\u4F5C\u308B\uFF09
|
|
146
|
+
twp user assignment create <\u30E6\u30FC\u30B6\u30FC>
|
|
147
|
+
\u6240\u5C5E\u3092\u4F5C\u6210\u3059\u308B\uFF08\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u307F\uFF09
|
|
148
|
+
twp user assignment update <\u6240\u5C5EID>
|
|
149
|
+
\u6240\u5C5E\u3092\u66F4\u65B0\u3059\u308B\uFF08--user \u304C\u8981\u308B\uFF09
|
|
150
|
+
twp user assignment end <\u6240\u5C5EID>
|
|
151
|
+
\u6240\u5C5E\u3092\u7D42\u4E86\u3059\u308B\uFF08--user \u3068 --end-date \u304C\u8981\u308B\uFF09
|
|
152
|
+
twp user assignment delete <\u6240\u5C5EID>
|
|
153
|
+
\u6240\u5C5E\u3092\u524A\u9664\u3059\u308B\uFF08--user \u3068 --yes \u304C\u8981\u308B\uFF09
|
|
154
|
+
twp user create \u30E6\u30FC\u30B6\u30FC\u3092\u4F5C\u6210\u3059\u308B\uFF08\u30D1\u30B9\u30EF\u30FC\u30C9\u306F --password-file\u30FB\u7D44\u7E54\u7BA1\u7406\u8005\u306E\u307F\uFF09
|
|
155
|
+
twp user update <\u30E6\u30FC\u30B6\u30FC>
|
|
156
|
+
\u30E6\u30FC\u30B6\u30FC\u3092\u66F4\u65B0\u3059\u308B\uFF08--auth-type disabled \u3067\u5931\u52B9\uFF1D\u9000\u793E\uFF09
|
|
157
|
+
twp user invite create 1\u4EBA\u3092\u62DB\u5F85\u3059\u308B
|
|
158
|
+
twp user invite bulk CSV\uFF08\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9, \u6A29\u9650\uFF09\u306E\u5168\u54E1\u3092\u62DB\u5F85\u3059\u308B
|
|
159
|
+
twp user invite list \u62DB\u5F85\u3092\u4E00\u89A7\u3059\u308B
|
|
160
|
+
twp user invite resend <\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9>
|
|
161
|
+
\u62DB\u5F85\u30E1\u30FC\u30EB\u3092\u518D\u9001\u3059\u308B
|
|
162
|
+
twp user invite delete <\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9>
|
|
163
|
+
\u62DB\u5F85\u3092\u53D6\u308A\u6D88\u3059\uFF08--yes \u304C\u8981\u308B\uFF09
|
|
164
|
+
twp department list \u90E8\u7F72\u3092\u4E00\u89A7\u3059\u308B
|
|
165
|
+
twp department tree \u90E8\u7F72\u30C4\u30EA\u30FC\u3092\u8868\u793A\u3059\u308B\uFF08\u73FE\u5728\u6709\u52B9\u306A\u90E8\u7F72\u3060\u3051\uFF09
|
|
166
|
+
twp department members <\u90E8\u7F72>
|
|
167
|
+
\u90E8\u7F72\u306E\u6240\u5C5E\u3092\u4E00\u89A7\u3059\u308B\uFF08--include-past \u3067\u7D42\u4E86\u30FB\u958B\u59CB\u524D\u306E\u6240\u5C5E\u3082\uFF09
|
|
168
|
+
twp department get <\u90E8\u7F72>
|
|
169
|
+
\u90E8\u7F721\u4EF6\u306E\u8A73\u7D30\u3092\u8868\u793A\u3059\u308B
|
|
170
|
+
twp department create \u90E8\u7F72\u3092\u4F5C\u6210\u3059\u308B\uFF08--parent \u306F\u540D\u524D\u3067\u6307\u5B9A\u3067\u304D\u308B\u30FB\u7BA1\u7406\u8005\u306E\u307F\uFF09
|
|
171
|
+
twp department update <\u90E8\u7F72>
|
|
172
|
+
\u90E8\u7F72\u3092\u66F4\u65B0\u3059\u308B\uFF08--valid-to \u3067\u7121\u52B9\u5316\u30FB\u7BA1\u7406\u8005\u306E\u307F\uFF09
|
|
173
|
+
twp department delete <\u90E8\u7F72>
|
|
174
|
+
\u90E8\u7F72\u3092\u524A\u9664\u3059\u308B\uFF08--yes \u304C\u8981\u308B\u30FB\u7BA1\u7406\u8005\u306E\u307F\uFF09
|
|
175
|
+
twp position list \u5F79\u8077\u3092\u4E00\u89A7\u3059\u308B
|
|
176
|
+
twp position get <\u5F79\u8077> \u5F79\u80771\u4EF6\u306E\u8A73\u7D30\u3092\u8868\u793A\u3059\u308B
|
|
177
|
+
twp position create \u5F79\u8077\u3092\u4F5C\u6210\u3059\u308B\uFF08\u7BA1\u7406\u8005\u306E\u307F\uFF09
|
|
178
|
+
twp position update <\u5F79\u8077>
|
|
179
|
+
\u5F79\u8077\u3092\u66F4\u65B0\u3059\u308B\uFF08--status inactive \u3067\u7121\u52B9\u5316\u30FB\u7BA1\u7406\u8005\u306E\u307F\uFF09
|
|
180
|
+
twp position delete <\u5F79\u8077>
|
|
181
|
+
\u5F79\u8077\u3092\u524A\u9664\u3059\u308B\uFF08--yes \u304C\u8981\u308B\u30FB\u7BA1\u7406\u8005\u306E\u307F\uFF09
|
|
182
|
+
twp job-title list \u8077\u4F4D\u3092\u4E00\u89A7\u3059\u308B
|
|
183
|
+
twp job-title get <\u8077\u4F4D>
|
|
184
|
+
\u8077\u4F4D1\u4EF6\u306E\u8A73\u7D30\u3092\u8868\u793A\u3059\u308B
|
|
185
|
+
twp job-title create \u8077\u4F4D\u3092\u4F5C\u6210\u3059\u308B\uFF08\u7BA1\u7406\u8005\u306E\u307F\uFF09
|
|
186
|
+
twp job-title update <\u8077\u4F4D>
|
|
187
|
+
\u8077\u4F4D\u3092\u66F4\u65B0\u3059\u308B\uFF08--status inactive \u3067\u7121\u52B9\u5316\u30FB\u7BA1\u7406\u8005\u306E\u307F\uFF09
|
|
188
|
+
twp job-title delete <\u8077\u4F4D>
|
|
189
|
+
\u8077\u4F4D\u3092\u524A\u9664\u3059\u308B\uFF08--yes \u304C\u8981\u308B\u30FB\u7BA1\u7406\u8005\u306E\u307F\uFF09
|
|
123
190
|
twp <\u30C9\u30E1\u30A4\u30F3> help \u305D\u306E\u30C9\u30E1\u30A4\u30F3\u306E\u30D8\u30EB\u30D7
|
|
124
191
|
twp <\u30C9\u30E1\u30A4\u30F3> <\u64CD\u4F5C> help
|
|
125
192
|
\u305D\u306E\u64CD\u4F5C\u306E\u30D8\u30EB\u30D7
|
|
@@ -151,17 +218,17 @@ TUI \u5185:
|
|
|
151
218
|
\u81EA\u52D5\u524A\u9664\u3002POSIX \u3067\u306F 0600 / Windows \u306F OS \u65E2\u5B9A\u306E ACL\uFF09\u3002
|
|
152
219
|
\u672C\u6587\u30FB\u5DEE\u5206\u306F\u66F8\u304B\u306A\u3044\u3002TWP_NO_AUDIT=1 \u3067\u7121\u52B9\u5316
|
|
153
220
|
|
|
154
|
-
\
|
|
155
|
-
\
|
|
221
|
+
\u4F1A\u8A71\u4E2D\u306F\u30E2\u30C7\u30EB\u304C TWP \u306E\u30E1\u30BF\u30C4\u30FC\u30EB\uFF08twp_search_tools \u2192 twp_describe_tools \u2192 twp_call\uFF09\u3067
|
|
222
|
+
TWP API \u3092\u547C\u3079\u307E\u3059\u3002TWP API \u306E\u30C4\u30FC\u30EB\u306F\u65E2\u5B9A\u3067\u78BA\u8A8D\u304C\u51FA\u307E\u3059\uFF08-p \u3067\u306F\u62D2\u5426\u3002--allowed-tools \u3067\u540D\u524D\u3092\u8A31\u53EF\uFF09\u3002
|
|
156
223
|
\u4F1A\u8A71\u30FB\u30ED\u30FC\u30AB\u30EB\u30C4\u30FC\u30EB\uFF08\u30D5\u30A1\u30A4\u30EB\u30FB\u30B3\u30DE\u30F3\u30C9\u30FBgit\uFF09\u306F\u30C6\u30CA\u30F3\u30C8\u306E\u30AF\u30EC\u30B8\u30C3\u30C8\u3067\u5B9F\u969B\u306B\u52D5\u304D\u307E\u3059\u3002
|
|
157
224
|
`;function ignoreEpipe(stream){stream.on("error",err=>{if(err.code==="EPIPE")process.exit(0);throw err})}async function main(){const nodeMajor=Number(process.versions.node.split(".")[0]);if(nodeMajor<22){process.stderr.write(`twp-cli \u306B\u306F Node.js 22 \u4EE5\u4E0A\u304C\u5FC5\u8981\u3067\u3059\uFF08\u73FE\u5728: ${process.versions.node}\uFF09
|
|
158
|
-
`);process.exit(1)}ignoreEpipe(process.stdout);ignoreEpipe(process.stderr);if(process.env["TWP_AUTO_UPDATE_WORKER"]==="1"){const{runAutoUpdateWorker}=await import("./auto-update-worker-
|
|
225
|
+
`);process.exit(1)}ignoreEpipe(process.stdout);ignoreEpipe(process.stderr);if(process.env["TWP_AUTO_UPDATE_WORKER"]==="1"){const{runAutoUpdateWorker}=await import("./auto-update-worker-AXBJIMFP.js");await runAutoUpdateWorker().catch(()=>void 0);return}const args=parseArgv(process.argv.slice(2));if(args.command==="version"){process.stdout.write(`${VERSION}
|
|
159
226
|
`);return}if(args.command==="help"){process.stdout.write(HELP);return}if(args.unknown.length>0){process.stderr.write(`\u4E0D\u660E\u306A\u5F15\u6570: ${args.unknown.join(" ")}
|
|
160
227
|
|
|
161
|
-
${HELP}`);process.exitCode=2;return}const autoUpdate=await import("./auto-update-
|
|
162
|
-
domainHelp,globals:{...args.profile!==void 0?{profile:args.profile}:{},...args.output!==void 0?{output:args.output}:{},...args.query!==void 0?{query:args.query}:{},dryRun:args.dryRun,debug:args.debug,yes:args.yes,refresh:args.refresh},version:VERSION});return}if(args.command==="api"){const{runApiCommand}=await import("./api-command-
|
|
163
|
-
void 0?{output:args.output}:{},...args.query!==void 0?{query:args.query}:{},dryRun:args.dryRun,debug:args.debug,yes:args.yes},version:VERSION});return}if(args.command==="update"){const{runUpdate}=await import("./update-
|
|
164
|
-
const options={profile:args.profile,method:args.loginMethod,tenant:args.tenant,noBrowser:args.loginNoBrowser,cliVersion:VERSION,force:args.logoutForce,...args.output!==void 0?{output:args.output}:{},...args.query!==void 0?{query:args.query}:{}};const runner=args.command==="login"?runLogin:args.command==="logout"?runLogout:runWhoami;process.exitCode=await runner(options);return}if(args.command==="task-loop"){const{runTaskLoop}=await import("./commands-
|
|
228
|
+
${HELP}`);process.exitCode=2;return}const autoUpdate=await import("./auto-update-CV2MM32C.js");autoUpdate.registerRunning();if(args.command==="task-loop"){process.env[autoUpdate.DISABLE_ENV]="1"}else if(args.command!=="update"){autoUpdate.onStartup(VERSION)}if(args.command==="domain"&&args.domain!==void 0){const{runDomain}=await import("./run-QCDT35NT.js");process.exitCode=await runDomain({domain:args.domain,...args.operation!==void 0?{operation:args.operation}:{},argv:args.domainArgv,help:args.
|
|
229
|
+
domainHelp,globals:{...args.profile!==void 0?{profile:args.profile}:{},...args.output!==void 0?{output:args.output}:{},...args.query!==void 0?{query:args.query}:{},dryRun:args.dryRun,debug:args.debug,yes:args.yes,refresh:args.refresh},version:VERSION});return}if(args.command==="api"){const{runApiCommand}=await import("./api-command-NMYYJKZH.js");process.exitCode=await runApiCommand({argv:args.domainArgv,help:args.domainHelp,globals:{...args.profile!==void 0?{profile:args.profile}:{},...args.output!==
|
|
230
|
+
void 0?{output:args.output}:{},...args.query!==void 0?{query:args.query}:{},dryRun:args.dryRun,debug:args.debug,yes:args.yes},version:VERSION});return}if(args.command==="update"){const{runUpdate}=await import("./update-PZBUIYOL.js");process.exitCode=await runUpdate({...args.profile!==void 0?{profile:args.profile}:{},version:VERSION});return}if(args.command==="login"||args.command==="logout"||args.command==="whoami"){const{runLogin,runLogout,runWhoami}=await import("./commands-U36UTCKR.js");
|
|
231
|
+
const options={profile:args.profile,method:args.loginMethod,tenant:args.tenant,noBrowser:args.loginNoBrowser,cliVersion:VERSION,force:args.logoutForce,...args.output!==void 0?{output:args.output}:{},...args.query!==void 0?{query:args.query}:{}};const runner=args.command==="login"?runLogin:args.command==="logout"?runLogout:runWhoami;process.exitCode=await runner(options);return}if(args.command==="task-loop"){const{runTaskLoop}=await import("./commands-6YTOVZ5P.js");process.exitCode=await runTaskLoop(
|
|
165
232
|
{action:args.taskLoopAction??"run",project:args.project,profile:args.profile,safe:args.safe,daemon:args.daemon,interval:args.interval,maxCycles:args.maxCycles,forceRunner:args.forceRunner,force:args.stopForce,drain:args.stopDrain,engine:args.engine,version:VERSION,verbose:args.verbose,scheduleNow:args.scheduleNow,scheduleCounts:args.scheduleCounts,scheduleGate:args.scheduleGate,charterOp:args.charterOp,charterInput:args.charterFile,charterOutput:args.charterOut,charterRevision:args.charterRevision,
|
|
166
|
-
yes:args.yes,ais:args.ais,workspace:args.workspace,aiConfigFile:args.aiConfigFile,noAiConfigFile:args.noAiConfigFile});return}if(args.command==="print"){const{runOneShot}=await import("./oneshot-
|
|
167
|
-
{},...args.profile!==void 0?{profile:args.profile}:{},version:VERSION});return}const{startTui}=await import("./app-
|
|
233
|
+
yes:args.yes,ais:args.ais,workspace:args.workspace,aiConfigFile:args.aiConfigFile,noAiConfigFile:args.noAiConfigFile});return}if(args.command==="print"){const{runOneShot}=await import("./oneshot-KYATQPL7.js");process.exitCode=await runOneShot({prompt:args.prompt??"",fromStdin:args.promptFromStdin,mode:args.mode??"dev",...args.permissionMode!==void 0?{permissionMode:args.permissionMode}:{},allowedTools:args.allowedTools,disallowedTools:args.disallowedTools,...args.model!==void 0?{model:args.model}:
|
|
234
|
+
{},...args.profile!==void 0?{profile:args.profile}:{},version:VERSION});return}const{startTui}=await import("./app-2KMY3QPM.js");await startTui({mode:args.mode,permissionMode:args.permissionMode,allowedTools:args.allowedTools,disallowedTools:args.disallowedTools,model:args.model,profile:args.profile,noTui:args.noTui||!process.stdout.isTTY,doctor:args.doctor,version:VERSION})}await main();
|