@tocca-systems/twp-cli 0.24.0 → 0.25.1
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 +18 -0
- package/README.md +98 -4
- package/dist/agent-loop-ZP47LTUE.js +75 -0
- package/dist/{ai-dispatch-36HRDRLF.js → ai-dispatch-3DJKBIV6.js} +14 -14
- package/dist/{api-command-NMYYJKZH.js → api-command-VWJXBUCJ.js} +2 -2
- package/dist/{app-2KMY3QPM.js → app-3JIU5OUX.js} +49 -48
- package/dist/attendance-42XLURM7.js +21 -0
- package/dist/{auto-update-worker-AXBJIMFP.js → auto-update-worker-OBFGN6FY.js} +1 -1
- package/dist/{backlog-7MJIOT22.js → backlog-KSMQIC2R.js} +1 -1
- package/dist/charter-command-ULFOEZWE.js +26 -0
- package/dist/chunk-BKZGBJWT.js +15 -0
- package/dist/{chunk-DMDVLOAY.js → chunk-G4OO4M44.js} +1 -1
- package/dist/{chunk-WGVHYTZV.js → chunk-IRAZ27WL.js} +1 -1
- package/dist/{chunk-4V4T5ZUS.js → chunk-KEP5QSS4.js} +40 -15
- package/dist/{chunk-I3YPO7CY.js → chunk-KUIFIN7P.js} +1 -1
- package/dist/{chunk-QOUFHYK5.js → chunk-NIAOX77K.js} +1 -1
- package/dist/chunk-P4AEFKLM.js +13 -0
- package/dist/{chunk-VCMVTC6B.js → chunk-PK6CUUAQ.js} +1 -1
- package/dist/chunk-SP27PYHC.js +3 -0
- package/dist/chunk-UDPJ2IGK.js +7 -0
- package/dist/chunk-VCZVITWG.js +13 -0
- package/dist/{chunk-UIWGEBWI.js → chunk-VGMWPPGD.js} +13 -11
- package/dist/{chunk-UG2I6VRD.js → chunk-VYDEUFGU.js} +1 -1
- package/dist/{chunk-Y2QAP6SU.js → chunk-WQ66EYZS.js} +1 -1
- package/dist/{chunk-6NCY4NPV.js → chunk-X45SJNT2.js} +4 -4
- package/dist/chunk-YWGYRISN.js +34 -0
- package/dist/{chunk-WOUKWOAR.js → chunk-Z2MNO3FT.js} +10 -9
- package/dist/cli.js +33 -8
- package/dist/{commands-6YTOVZ5P.js → commands-JLPNUSNZ.js} +80 -85
- package/dist/{commands-U36UTCKR.js → commands-OFLBUP6O.js} +1 -1
- package/dist/{department-JOXXJKQB.js → department-GH475WCF.js} +1 -1
- package/dist/{job-title-L47J6TZY.js → job-title-FC2GWDE7.js} +1 -1
- package/dist/{logout-guard-FO7KZL3X.js → logout-guard-3PB3VMGP.js} +1 -1
- package/dist/{media-ZMDYHHNN.js → media-TD7D4TXF.js} +1 -1
- package/dist/{oneshot-KYATQPL7.js → oneshot-QQOOZZDT.js} +5 -5
- package/dist/{position-FHWCMMBQ.js → position-4RHTV3IK.js} +1 -1
- package/dist/{project-ZODASYER.js → project-DBNWB47J.js} +1 -1
- package/dist/{run-QCDT35NT.js → run-VNHAQO24.js} +1 -1
- package/dist/{schedule-command-GKXKNMLG.js → schedule-command-FJU7JFNR.js} +1 -1
- package/dist/{server-settings-CG3EM7R7.js → server-settings-YL6KALXG.js} +1 -1
- package/dist/{setup-6CXUVCF5.js → setup-BJKIHANC.js} +1 -1
- package/dist/skill-command-V26WGVXU.js +61 -0
- package/dist/{task-G5YWQ6L5.js → task-7VOYCG26.js} +2 -2
- package/dist/{update-PZBUIYOL.js → update-RLKK6N7U.js} +1 -1
- package/dist/user-UU2SLVC4.js +336 -0
- package/package.json +1 -1
- package/dist/charter-command-UBUE3KUO.js +0 -36
- package/dist/chunk-EJ474UDB.js +0 -3
- package/dist/chunk-HW3QGKYR.js +0 -30
- package/dist/chunk-IJLJGDMZ.js +0 -7
- package/dist/chunk-ODLJ2LNQ.js +0 -13
- package/dist/user-DO4VNIBR.js +0 -204
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{activateModeFiles,activatePermissionSettings,buildResidentSet,buildSystemPrompt,createAuditLogger,createTwpToolkit,currentBranch,displayCwd,residentInputs,runTurn}from"./chunk-
|
|
4
|
-
createRuntime,pickModel}from"./chunk-
|
|
3
|
+
import{activateModeFiles,activatePermissionSettings,buildResidentSet,buildSystemPrompt,createAuditLogger,createTwpToolkit,currentBranch,displayCwd,residentInputs,runTurn}from"./chunk-KEP5QSS4.js";import"./chunk-NZ7WI4RZ.js";import"./chunk-YVAN3H5W.js";import"./chunk-N2UVRM3Z.js";import"./chunk-NIAOX77K.js";import"./chunk-GMBJTG6A.js";import"./chunk-FTYJZFEK.js";import"./chunk-II5RVJQN.js";import{getMode}from"./chunk-NAUH75MM.js";import{RelayError,
|
|
4
|
+
createRuntime,pickModel}from"./chunk-Z2MNO3FT.js";import"./chunk-XNLIEUAW.js";import"./chunk-PMOUHEJQ.js";import"./chunk-J7QYPKVK.js";import{checkMinSupportedVersion,enforceMinSupportedVersion,floorNeedsRefresh}from"./chunk-DXXFUNYN.js";import"./chunk-NERYSBA4.js";import"./chunk-RZVI6PMW.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import"./chunk-7WSNIXTQ.js";import"./chunk-VSJBJXZO.js";async function runOneShot(opts,deps={}){const out=deps.out??(text=>void process.stdout.write(stripTerminalControls(text)));const err=deps.err??(text=>void process.stderr.write(stripTerminalControls(text)));activateModeFiles(err);const permissionLayers=activatePermissionSettings(err,{...opts.allowedTools?{allowedTools:opts.allowedTools}:{},...opts.disallowedTools?{disallowedTools:opts.disallowedTools}:{}});const prompt=opts.fromStdin?await(deps.readStdin??readStdin)():opts.prompt;if(prompt.trim()===
|
|
5
5
|
""){err('\u30D7\u30ED\u30F3\u30D7\u30C8\u304C\u7A7A\u3067\u3059\u3002`twp -p "\u8CEA\u554F"`\uFF08`-p -` \u3067\u6A19\u6E96\u5165\u529B\uFF09\n');return 2}const runtime=deps.runtime??createRuntime({...opts.profile!==void 0?{profile:opts.profile}:{},...opts.model!==void 0?{model:opts.model}:{},cliVersion:opts.version});const cachedFloor=runtime.loadCachedFloor();if(await checkMinSupportedVersion({current:opts.version,cachedFloor:cachedFloor.minSupportedVersion,refresh:async()=>(await runtime.loadCatalog()).
|
|
6
6
|
minSupportedVersion,write:err})){return 1}if(!runtime.loggedIn){err("\u30ED\u30B0\u30A4\u30F3\u3057\u3066\u3044\u307E\u305B\u3093\u3002`twp login` \u3092\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044\u3002\n");return 1}let model=runtime.configuredModel??"";let catalog=null;if(model===""){catalog=await runtime.loadCatalog();const picked=pickModel(catalog,void 0);model=picked.model;if(catalog.source!=="server"){err(`\u26A0 \u30E2\u30C7\u30EB\u4E00\u89A7\u3092\u53D6\u5F97\u3067\u304D\u306A\u304B\u3063\u305F\u305F\u3081 ${model}\
|
|
7
7
|
\u3067\u5B9F\u884C\u3057\u307E\u3059\uFF08${catalog.source}\uFF09
|
|
8
|
-
`)}}else if(floorNeedsRefresh(cachedFloor.fetchedAt)){catalog=await runtime.loadCatalog()}if(catalog!==null&&enforceMinSupportedVersion({current:opts.version,floor:catalog.minSupportedVersion,write:err})){return 1}const controller=new AbortController;let interrupted=false;const onSigint=()=>{interrupted=true;controller.abort()};process.on("SIGINT",onSigint);let wroteText=false;let ownedAudit=null;try{const mode=getMode(opts.mode);const toolkit=createTwpToolkit(
|
|
9
|
-
mode,{...residentInputs(toolkit),...opts.permissionMode!==void 0?{permissionMode:opts.permissionMode}:{},permissionLayers});const audit=deps.audit??(ownedAudit=createAuditLogger({mode:mode.id,permissionMode:opts.permissionMode,model,cwd:process.cwd(),cliVersion:opts.version,interactive:false,onOpen:file=>err(`audit: ${file}
|
|
8
|
+
`)}}else if(floorNeedsRefresh(cachedFloor.fetchedAt)){catalog=await runtime.loadCatalog()}if(catalog!==null&&enforceMinSupportedVersion({current:opts.version,floor:catalog.minSupportedVersion,write:err})){return 1}const controller=new AbortController;let interrupted=false;const onSigint=()=>{interrupted=true;controller.abort()};process.on("SIGINT",onSigint);let wroteText=false;let ownedAudit=null;let cancelCatalogRefresh=()=>void 0;try{const mode=getMode(opts.mode);const toolkit=createTwpToolkit(
|
|
9
|
+
runtime,opts.version);void toolkit.refreshCatalog();cancelCatalogRefresh=()=>toolkit.cancelCatalogRefresh();const resident=buildResidentSet(mode,{...residentInputs(toolkit),...opts.permissionMode!==void 0?{permissionMode:opts.permissionMode}:{},permissionLayers});const audit=deps.audit??(ownedAudit=createAuditLogger({mode:mode.id,permissionMode:opts.permissionMode,model,cwd:process.cwd(),cliVersion:opts.version,interactive:false,onOpen:file=>err(`audit: ${file}
|
|
10
10
|
`)}));const result=await runTurn(runtime.client,runtime.context,{input:prompt,model,system:buildSystemPrompt({cwd:displayCwd(),branch:currentBranch(),modeLabel:mode.label,cliVersion:opts.version,toolNames:resident.tools.map(t=>t.name),...mode.prompt!==void 0?{modePrompt:mode.prompt}:{}}),signal:controller.signal,onTextDelta:delta=>{wroteText=true;out(stripTerminalControls(delta))},tools:resident.tools,execute:{mode,ctx:{cwd:process.cwd()},sessionAllow:new Set,permissionLayers,...opts.permissionMode!==
|
|
11
11
|
void 0?{permissionMode:opts.permissionMode}:{},resolveTool:toolkit.resolveTool,prepareIndirect:toolkit.prepareIndirect,audit},onToolUse:()=>{if(wroteText){out("\n");wroteText=false}},onToolResult:(call,result2)=>err(`tool: ${call.name} \u2192 ${result2.denied===true?"denied":result2.isError===true?"error":"ok"}
|
|
12
12
|
`)});if(result.text!==""&&!result.text.endsWith("\n"))out("\n");const u=result.usage;err(`usage: model=${model} input=${u.inputTokens} cache_read=${u.cacheReadTokens} cache_write=${u.cacheWriteTokens} output=${u.outputTokens}
|
|
@@ -16,4 +16,4 @@ void 0?{permissionMode:opts.permissionMode}:{},resolveTool:toolkit.resolveTool,p
|
|
|
16
16
|
outputTokens>0){err(`usage(\u4E2D\u65AD\u307E\u3067): input=${partial.inputTokens} cache_read=${partial.cacheReadTokens} cache_write=${partial.cacheWriteTokens} output=${partial.outputTokens}
|
|
17
17
|
`)}if(e instanceof RelayError){err(`${e.message}
|
|
18
18
|
`);return 1}err(`\u30A8\u30E9\u30FC: ${e.message}
|
|
19
|
-
`);return 1}finally{process.off("SIGINT",onSigint);ownedAudit?.close()}}async function readStdin(){const chunks=[];for await(const chunk of process.stdin)chunks.push(Buffer.from(chunk));return Buffer.concat(chunks).toString("utf8")}export{runOneShot};
|
|
19
|
+
`);return 1}finally{cancelCatalogRefresh();process.off("SIGINT",onSigint);ownedAudit?.close()}}async function readStdin(){const chunks=[];for await(const chunk of process.stdin)chunks.push(Buffer.from(chunk));return Buffer.concat(chunks).toString("utf8")}export{runOneShot};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{STATUS_VALUES,booleanQuery,flatMasterDomain}from"./chunk-
|
|
3
|
+
import{STATUS_VALUES,booleanQuery,flatMasterDomain}from"./chunk-IRAZ27WL.js";import"./chunk-UDPJ2IGK.js";import"./chunk-G4OO4M44.js";import{POSITIONS_PATH}from"./chunk-NIAOX77K.js";import"./chunk-GMBJTG6A.js";import"./chunk-FTYJZFEK.js";import"./chunk-ZN5EFDH7.js";import"./chunk-II5RVJQN.js";import"./chunk-ZWVYVS2A.js";import"./chunk-J7QYPKVK.js";import"./chunk-NERYSBA4.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";
|
|
4
4
|
import"./chunk-7WSNIXTQ.js";import"./chunk-VSJBJXZO.js";var positionDomain=flatMasterDomain({name:"position",label:"\u5F79\u8077",path:POSITIONS_PATH,itemKey:"position",summary:"\u5F79\u8077\u30DE\u30B9\u30BF\uFF08\u4E00\u89A7\u30FB\u53D6\u5F97\u30FB\u4F5C\u6210\u30FB\u66F4\u65B0\u30FB\u524A\u9664\uFF09",listColumns:["id","code","name","rank","is_manager","status","user_count"],getColumns:["id","code","name","name_short","rank","is_manager","status","description"],fields:[{kind:"text",flag:"--name-short",key:"name_short",label:"\u7565\u79F0",maxChars:50,
|
|
5
5
|
summary:"\u7565\u79F0"},{kind:"integer",flag:"--rank",key:"rank",label:"\u30E9\u30F3\u30AF",min:0,max:9999,summary:"\u30E9\u30F3\u30AF\uFF080\u301C9999\u3002\u5927\u304D\u3044\u307B\u3069\u4E0A\u4F4D\uFF09"},{kind:"boolean",flag:"--manager",key:"is_manager",summary:"\u7BA1\u7406\u8077\u304B\uFF08true / false\uFF09"},{kind:"boolean",flag:"--can-view-personal-info",key:"can_view_personal_info",summary:"\u90E8\u4E0B\u306E\u500B\u4EBA\u60C5\u5831\u3092\u95B2\u89A7\u3067\u304D\u308B\u304B\uFF08true / false\uFF09"},
|
|
6
6
|
{kind:"boolean",flag:"--can-view-emergency-contact",key:"can_view_emergency_contact",summary:"\u90E8\u4E0B\u306E\u7DCA\u6025\u9023\u7D61\u5148\u3092\u95B2\u89A7\u3067\u304D\u308B\u304B\uFF08true / false\uFF09"},{kind:"boolean",flag:"--can-view-work-tel",key:"can_view_work_tel",summary:"\u90E8\u4E0B\u306E\u696D\u52D9\u7528\u96FB\u8A71\u756A\u53F7\u3092\u95B2\u89A7\u3067\u304D\u308B\u304B\uFF08true / false\uFF09"},{kind:"enum",flag:"--status",key:"status",values:STATUS_VALUES,summary:"\u72B6\u614B\uFF08active: \u6709\
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-
|
|
3
|
+
import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-G4OO4M44.js";import{collapsesInUrlPath,safeProjectIdPolicy}from"./chunk-GMBJTG6A.js";import{requireResolved,withResolved}from"./chunk-ZN5EFDH7.js";import{isRecord,pick}from"./chunk-ZWVYVS2A.js";import{ApiResponseError,UsageError}from"./chunk-7WSNIXTQ.js";import"./chunk-VSJBJXZO.js";var LIST_COLUMNS=["id","code","name","status","effective_status"];var GET_COLUMNS=["id","code","name","status","effective_status","display_flg","closed_flg","task_enabled_flg","start_date","end_date","created_at","updated_at"];var MEMBER_COLUMNS=["user_id","user_name","user_email","role","alias","department_name"];function memberItems(body){const list=isRecord(body)?body["list"]:void 0;if(!Array.isArray(list)){throw new ApiResponseError("\u30E1\u30F3\u30D0\u30FC\u4E00\u89A7\u306E\u5FDC\u7B54\u306B list \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}
|
|
4
4
|
return list}var listPaging=envelopePaging({label:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u4E00\u89A7"});function listItems(body){return listPaging.items(body)}function projectObject(body){const project=isRecord(body)?body["project"]:void 0;if(!isRecord(project)){throw new ApiResponseError("\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u8A73\u7D30\u306E\u5FDC\u7B54\u306B project \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return project}
|
|
5
5
|
var projectDomain={name:"project",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u4E00\u89A7\u30FB\u8A73\u7D30",operations:[{name:"list",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u4E00\u89A7\u3059\u308B",usage:"twp project list [--all] [--limit <\u4EF6\u6570>] [--cursor <\u30AB\u30FC\u30BD\u30EB>] [--keyword <\u8A9E>] [--status <\u72B6\u614B>]",description:"--output json \u306F API \u304C\u8FD4\u3059\u5168\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u51FA\u3057\u307E\u3059\u3002\n--output table / text / tsv \u306F\u8981\u7D04\u5217\uFF08id / code / name / status / effective_status\uFF09\u3067\u3059\u3002\n\u6B32\u3057\u3044\u5217\u3060\u3051\u3092\
|
|
6
6
|
\u6A5F\u68B0\u51E6\u7406\u3057\u305F\u3044\u3068\u304D\u306F --query \u3067\u9078\u3093\u3067\u304F\u3060\u3055\u3044\uFF08--query \u306F\u751F\u30C7\u30FC\u30BF\u306B\u5BFE\u3057\u3066\u8A55\u4FA1\u3055\u308C\u307E\u3059\uFF09\u3002\n\n"+LIST_PAGING_HELP,flags:[...LIST_FLAGS,{name:"--keyword",summary:"\u30B3\u30FC\u30C9\u30FB\u540D\u79F0\u306E\u90E8\u5206\u4E00\u81F4\u3067\u7D5E\u308A\u8FBC\u3080",takesValue:true,placeholder:"<\u8A9E>"},{name:"--status",summary:"\u30B9\u30C6\u30FC\u30BF\u30B9\u3067\u7D5E\u308A\u8FBC\u3080\uFF08\u4F8B: active\uFF09",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{CURATED_PAGING_VOCABULARY,buildPrepareContext,exitCodeFor,fetchAllPages,outputValue,reportError,requiresYes,resolvePaging,runDomain}from"./chunk-
|
|
3
|
+
import{CURATED_PAGING_VOCABULARY,buildPrepareContext,exitCodeFor,fetchAllPages,outputValue,reportError,requiresYes,resolvePaging,runDomain}from"./chunk-X45SJNT2.js";import"./chunk-IOGVQVGD.js";import"./chunk-5Q2CH4E7.js";import"./chunk-YVAN3H5W.js";import"./chunk-G4OO4M44.js";import"./chunk-NIAOX77K.js";import"./chunk-GMBJTG6A.js";import"./chunk-FTYJZFEK.js";import"./chunk-II5RVJQN.js";import"./chunk-TAN5I2DP.js";import"./chunk-SP27PYHC.js";
|
|
4
4
|
import"./chunk-QQRJLH6B.js";import"./chunk-XNLIEUAW.js";import"./chunk-J7QYPKVK.js";import"./chunk-NERYSBA4.js";import"./chunk-RZVI6PMW.js";import"./chunk-K2ONOH3L.js";import"./chunk-WVS4W5FY.js";import"./chunk-NHYMHCAT.js";import"./chunk-GDM2QUBL.js";import"./chunk-7WSNIXTQ.js";import"./chunk-VSJBJXZO.js";export{CURATED_PAGING_VOCABULARY,buildPrepareContext,exitCodeFor,fetchAllPages,outputValue,reportError,requiresYes,resolvePaging,runDomain};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{REQUIRE_ZERO_STATUS,ScheduleApi,collectDue,gateStatus,nowInZone,parseCounts,parseTs}from"./chunk-
|
|
3
|
+
import{REQUIRE_ZERO_STATUS,ScheduleApi,collectDue,gateStatus,nowInZone,parseCounts,parseTs}from"./chunk-VYDEUFGU.js";import"./chunk-BKZGBJWT.js";import"./chunk-GY7KI5E5.js";import"./chunk-J7QYPKVK.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";async function runScheduleCommand(deps,opts){const out=deps.out??(t=>void process.stdout.write(stripTerminalControls(t)));const err=deps.err??(t=>void process.stderr.write(stripTerminalControls(t)));const schedules=new ScheduleApi(deps.api);let now;if(opts.now){const parsed=parseTs(opts.now);if(!parsed){err(`--now \u306E\u5F62\u5F0F\u304C\u4E0D\u6B63\u3067\u3059: ${opts.now}\uFF08\u4F8B 2026-08-18T15:30\uFF09
|
|
4
4
|
`);return 2}now=parsed}else{now=nowInZone(deps.config.scheduleTimezone,m=>err(`${m}
|
|
5
5
|
`))}const defs=await schedules.definitions();if(defs.kind==="error"){err(`\u26D4 ${defs.message}
|
|
6
6
|
`);if(opts.gate!==void 0){err("\u5B9A\u7FA9\u304C\u53D6\u308C\u306A\u3044\u305F\u3081\u30B2\u30FC\u30C8\u306F\u8A31\u53EF\u6271\u3044\u306B\u3057\u307E\u3059\n");return 0}return 4}if(opts.gate!==void 0){const{allowed,reason}=gateStatus(opts.gate,now,defs.config.gates);if(allowed)return 0;out(`${reason}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{LoopSettingsApplier,PROMPT_KEYS,formatConfigHash,parseServerSettings,renderStepBudget}from"./chunk-
|
|
3
|
+
import{LoopSettingsApplier,PROMPT_KEYS,formatConfigHash,parseServerSettings,renderStepBudget}from"./chunk-WQ66EYZS.js";import"./chunk-BKZGBJWT.js";import"./chunk-TYNCXQSN.js";import"./chunk-GY7KI5E5.js";import"./chunk-PMOUHEJQ.js";import"./chunk-J7QYPKVK.js";import"./chunk-5WGOHFAS.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";export{LoopSettingsApplier,PROMPT_KEYS,formatConfigHash,parseServerSettings,renderStepBudget};
|
|
@@ -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{detectAiClis,formatDetection,isDetectableAi,isSelectable}from"./chunk-24ZZFFA3.js";import{PromptAbortedError,promptText}from"./chunk-L37NS5L2.js";import{localConfigPath,parseClaudeLauncher}from"./chunk-VGMWPPGD.js";import{AiConfig}from"./chunk-TYNCXQSN.js";import"./chunk-N2UVRM3Z.js";import"./chunk-GY7KI5E5.js";import"./chunk-PMOUHEJQ.js";import"./chunk-5WGOHFAS.js";import"./chunk-RZVI6PMW.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";
|
|
4
4
|
import"./chunk-VSJBJXZO.js";import fs from"fs";import path from"path";var RECOMMENDED_ROTATION={complex:["claude"],verify:["claude"],security:["claude"],support:["claude"],triage:["claude"],search:["claude"],simple:["claude"]};var RECOMMENDED_CHAINS={complex:["claude","codex"],verify:["claude","codex","copilot"],security:["claude","codex","copilot"],support:["claude","codex","copilot"],triage:["codex","gemini","copilot","claude"],search:["codex","gemini","copilot","claude"],simple:["codex","gemini","copilot","claude"]};var PREFERENCE=["claude","codex","gemini","co\
|
|
5
5
|
pilot"];function buildAiAssignment(selected){if(selected.length===0)throw new Error("\u9078\u629E\u3055\u308C\u305FAI\u304C\u7A7A\u3067\u3059");const fallbackOrder=PREFERENCE.filter(ai=>selected.includes(ai));for(const ai of selected)if(!fallbackOrder.includes(ai))fallbackOrder.push(ai);const chains={};const rotation={};for(const category of Object.keys(RECOMMENDED_CHAINS)){const filtered=(RECOMMENDED_CHAINS[category]??[]).filter(ai=>selected.includes(ai));const chain=filtered.length>0?filtered:
|
|
6
6
|
[...fallbackOrder];chains[category]=chain;const rot=(RECOMMENDED_ROTATION[category]??[]).filter(ai=>selected.includes(ai));const head=chain[0];rotation[category]=rot.length>0?rot:head===void 0?[...fallbackOrder]:[head]}return{primary_rotation:rotation,fallback_chains:chains}}var SETUP_EXIT_NO_CLI=3;var SETUP_EXIT_ABORTED=130;async function runSetup(opts){const env=opts.env??process.env;const rawOut=opts.out??(t=>void process.stdout.write(t));const rawErr=opts.err??(t=>void process.stderr.write(t));
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
|
+
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
+
import{apiExit,currentRevisionOf,errorDetail,pickNumber,printDiff,readUtf8Strict,shellQuote,str,warnHiddenChars}from"./chunk-P4AEFKLM.js";import"./chunk-VRBI2NPI.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import{EXIT_API_CLIENT,EXIT_API_SERVER,EXIT_FAILURE,EXIT_OK,EXIT_USAGE}from"./chunk-7WSNIXTQ.js";import"./chunk-VSJBJXZO.js";import{createHash}from"crypto";import*as fs from"fs";import*as path from"path";var DEFAULT_SKILL_DIR=".claude/commands";var NAME_PATTERN=/^[a-z][a-z0-9-]*$/;var NAME_MAX_LENGTH=64;var MAX_BODY_BYTES=35e4;var MAX_SKILLS_PER_PROJECT=200;function isValidSkillName(name){return name.length<=NAME_MAX_LENGTH&&NAME_PATTERN.test(name)}function skillDigest(body){return"sha256:"+createHash("sha256").update(Buffer.from(body,"utf8")).digest("hex")}function defaultFileKind(p){try{return fs.lstatSync(p).isFile()?"file":"other"}catch(e){return e.code==="ENOENT"?"missing":"other"}}function defaultWriteFile(p,c){
|
|
4
|
+
const tmp=path.join(path.dirname(p),`.${path.basename(p)}.tmp-${process.pid}`);try{fs.writeFileSync(tmp,c,{encoding:"utf8",flag:"wx"});fs.renameSync(tmp,p)}catch(e){fs.rmSync(tmp,{force:true});throw e}}async function runSkillCommand(deps,opts){const io={out:deps.out??(t=>void process.stdout.write(stripTerminalControls(t))),err:deps.err??(t=>void process.stderr.write(stripTerminalControls(t))),readFile:deps.readFile??readUtf8Strict,writeFile:deps.writeFile??defaultWriteFile,fileKind:deps.fileKind??
|
|
5
|
+
defaultFileKind,listDir:deps.listDir??(d=>{try{return fs.readdirSync(d)}catch{return null}}),mkdir:deps.mkdir??(d=>void fs.mkdirSync(d,{recursive:true}))};if(opts.name===void 0===!opts.all){io.err("\u30B9\u30AD\u30EB\u540D\u304B --all \u306E\u3069\u3061\u3089\u304B\u4E00\u65B9\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\n");return EXIT_USAGE}if(opts.name!==void 0&&!isValidSkillName(opts.name)){io.err(`\u30B9\u30AD\u30EB\u540D\u304C\u4E0D\u6B63\u3067\u3059: ${opts.name}\uFF08\u82F1\u5C0F\u6587\u5B57\u3067\u59CB\u307E\u308A\u3001\u82F1\u5C0F\u6587\u5B57\u30FB\u6570\u5B57\
|
|
6
|
+
\u30FB\u30CF\u30A4\u30D5\u30F3\u3060\u3051\u306E${NAME_MAX_LENGTH}\u6587\u5B57\u4EE5\u5185\uFF09
|
|
7
|
+
`);return EXIT_USAGE}if(opts.op==="push"){return opts.all?pushAll(deps.api,opts,io):pushOne(deps.api,opts,opts.name,io)}return opts.all?pullAll(deps.api,opts,io):pullOne(deps.api,opts,opts.name,io)}function dirOf(opts){return opts.dir??DEFAULT_SKILL_DIR}function fileOf(opts,name){return path.join(dirOf(opts),`${name}.md`)}function rejectBody(file,body,err){if(body===""){err(`\u30D5\u30A1\u30A4\u30EB\u304C\u7A7A\u3067\u3059: ${file}\uFF08\u30B5\u30FC\u30D0\u306F\u7A7A\u306E\u672C\u6587\u3092\u53D7\u3051\u4ED8\u3051\u307E\u305B\u3093\uFF09
|
|
8
|
+
`);return true}const bytes=Buffer.byteLength(body,"utf8");if(bytes>MAX_BODY_BYTES){err(`\u30D5\u30A1\u30A4\u30EB\u304C\u4E0A\u9650\u3092\u8D85\u3048\u3066\u3044\u307E\u3059: ${file}\uFF08${bytes} / ${MAX_BODY_BYTES} \u30D0\u30A4\u30C8\uFF09
|
|
9
|
+
`);return true}return false}function readLocal(file,io){const kind=io.fileKind(file);if(kind==="other"){io.err(`\u901A\u5E38\u30D5\u30A1\u30A4\u30EB\u3067\u306F\u306A\u3044\u305F\u3081\u8AAD\u307F\u307E\u305B\u3093\uFF08\u30B7\u30F3\u30DC\u30EA\u30C3\u30AF\u30EA\u30F3\u30AF\u30FB\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u7B49\uFF09: ${file}
|
|
10
|
+
`);return null}try{return io.readFile(file)}catch(e){io.err(`\u30D5\u30A1\u30A4\u30EB\u3092\u8AAD\u3081\u307E\u305B\u3093: ${file}\uFF08${e.message}\uFF09
|
|
11
|
+
`);return null}}async function pushOne(api,opts,name,io){let expected;if(opts.revision!==void 0){if(!/^\d+$/.test(opts.revision)){io.err(`--revision \u306F0\u4EE5\u4E0A\u306E\u6574\u6570\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${opts.revision}
|
|
12
|
+
`);return EXIT_USAGE}if(!opts.yes){io.err("--revision \u306F --yes \u3068\u4E00\u7DD2\u306B\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08--yes \u306A\u3057\u3067\u306F\u767B\u9332\u3057\u307E\u305B\u3093\uFF09\n");return EXIT_USAGE}expected=Number(opts.revision)}const file=fileOf(opts,name);const local=readLocal(file,io);if(local===null)return EXIT_USAGE;if(rejectBody(file,local,io.err))return EXIT_USAGE;const current=await fetchSkill(api,name,io.err);if(typeof current==="number")return current;
|
|
13
|
+
if(current!==null&¤t.body===local){io.out(`${name}: \u5DEE\u5206\u306F\u3042\u308A\u307E\u305B\u3093\uFF08revision ${current.revision}\uFF09\u3002\u767B\u9332\u3057\u307E\u305B\u3093\u3067\u3057\u305F\u3002
|
|
14
|
+
`);return EXIT_OK}const serverRevision=current?.revision??0;printDiff(io.out,serverLabel(name,current),file,current?.body??"",local);if(!opts.yes){io.out(`
|
|
15
|
+
\u767B\u9332\u3057\u3066\u3044\u307E\u305B\u3093\u3002\u3053\u306E\u5DEE\u5206\u3067\u78BA\u5B9A\u3059\u308B\u306B\u306F\u6B21\u3092\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044\uFF08revision ${serverRevision} \u3092\u9001\u308B\u306E\u3067\u3001\u305D\u306E\u5F8C\u30B5\u30FC\u30D0\u304C\u66F4\u65B0\u3055\u308C\u3066\u3044\u308C\u3070 409 \u3067\u6B62\u307E\u308A\u307E\u3059\uFF09:
|
|
16
|
+
${confirmCommand(opts,name,String(serverRevision))}
|
|
17
|
+
`);return EXIT_USAGE}const result=await putSkill(api,name,local,expected??serverRevision,io);return result}async function pushAll(api,opts,io){let expected;if(opts.revision!==void 0){const parsed=parseRevisionMap(opts.revision);if(parsed===null){io.err(`--all \u306E --revision \u306F\u300C\u540D\u524D=\u756A\u53F7\u300D\u3092\u30AB\u30F3\u30DE\u3067\u533A\u5207\u3063\u3066\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u4F8B: plan=3,review=0\uFF09: ${opts.revision}
|
|
18
|
+
`);return EXIT_USAGE}if(!opts.yes){io.err("--revision \u306F --yes \u3068\u4E00\u7DD2\u306B\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08--yes \u306A\u3057\u3067\u306F\u767B\u9332\u3057\u307E\u305B\u3093\uFF09\n");return EXIT_USAGE}expected=parsed}const dir=dirOf(opts);const entries=io.listDir(dir);if(entries===null){io.err(`\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3092\u8AAD\u3081\u307E\u305B\u3093: ${dir}
|
|
19
|
+
`);return EXIT_USAGE}const names=[];const badName=[];const notFile=[];for(const entry of entries.sort()){if(!entry.toLowerCase().endsWith(".md"))continue;const stem=entry.slice(0,-3);if(!entry.endsWith(".md")||!isValidSkillName(stem))badName.push(entry);else if(io.fileKind(path.join(dir,entry))!=="file")notFile.push(entry);else names.push(stem)}if(badName.length>0){io.out(`\u5BFE\u8C61\u5916\uFF08\u30B9\u30AD\u30EB\u540D\u306E\u5F62\u5F0F\u306B\u5408\u308F\u306A\u3044\uFF09: ${badName.join(", ")}\
|
|
20
|
+
|
|
21
|
+
`)}if(notFile.length>0){io.out(`\u5BFE\u8C61\u5916\uFF08\u901A\u5E38\u30D5\u30A1\u30A4\u30EB\u3067\u306F\u306A\u3044\uFF1D\u30B7\u30F3\u30DC\u30EA\u30C3\u30AF\u30EA\u30F3\u30AF\u30FB\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u7B49\uFF09: ${notFile.join(", ")}
|
|
22
|
+
`)}if(names.length===0){io.err(`${dir} \u306B\u767B\u9332\u3067\u304D\u308B\u30B9\u30AD\u30EB\u30D5\u30A1\u30A4\u30EB\uFF08<\u540D\u524D>.md\uFF09\u304C\u3042\u308A\u307E\u305B\u3093
|
|
23
|
+
`);return EXIT_USAGE}const locals=new Map;for(const name of names){const file=fileOf(opts,name);const body=readLocal(file,io);if(body===null)return EXIT_USAGE;if(rejectBody(file,body,io.err))return EXIT_USAGE;locals.set(name,body)}const list=await fetchList(api,io.err);if(typeof list==="number")return list;const server=new Map(list.map(s=>[s.name,s]));const plans=[];let unchanged=0;for(const name of names){const body=locals.get(name);const file=fileOf(opts,name);const summary=server.get(name);if(summary!==
|
|
24
|
+
void 0&&summary.digest===skillDigest(body)){unchanged++;continue}const current=summary===void 0?null:await fetchSkill(api,name,io.err);if(typeof current==="number")return current;if(current!==null&¤t.body===body){unchanged++;continue}printDiff(io.out,serverLabel(name,current),file,current?.body??"",body);io.out("\n");plans.push({name,file,body,revision:current?.revision??0,isNew:current===null})}const serverOnly=list.filter(s=>!locals.has(s.name)).map(s=>s.name);io.out(`\u66F4\u65B0 ${plans.
|
|
25
|
+
filter(p=>!p.isNew).length} \u4EF6 / \u65B0\u898F ${plans.filter(p=>p.isNew).length} \u4EF6 / \u5DEE\u5206\u306A\u3057 ${unchanged} \u4EF6`+(serverOnly.length>0?` / \u30B5\u30FC\u30D0\u306E\u307F ${serverOnly.length} \u4EF6\uFF08\u524A\u9664\u3057\u307E\u305B\u3093: ${serverOnly.join(", ")}\uFF09`:"")+"\n");if(plans.length===0){io.out("\u5DEE\u5206\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u767B\u9332\u3057\u307E\u305B\u3093\u3067\u3057\u305F\u3002\n");return EXIT_OK}const revisionArg=plans.map(
|
|
26
|
+
p=>`${p.name}=${p.revision}`).join(",");if(!opts.yes){io.out(`
|
|
27
|
+
\u767B\u9332\u3057\u3066\u3044\u307E\u305B\u3093\u3002\u3053\u306E\u5DEE\u5206\u3067\u78BA\u5B9A\u3059\u308B\u306B\u306F\u6B21\u3092\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u8868\u793A\u3057\u305F revision \u3092\u9001\u308B\u306E\u3067\u3001\u305D\u306E\u5F8C\u30B5\u30FC\u30D0\u304C\u66F4\u65B0\u3055\u308C\u305F\u30B9\u30AD\u30EB\u306F 409 \u3067\u6B62\u307E\u308A\u307E\u3059\uFF09:
|
|
28
|
+
${confirmCommand(opts,void 0,revisionArg)}
|
|
29
|
+
`);return EXIT_USAGE}if(expected!==void 0){const unseen=plans.filter(p=>!expected.has(p.name)).map(p=>p.name);const unknown=[...expected.keys()].filter(n=>!locals.has(n));if(unseen.length>0||unknown.length>0){io.err("\u26D4 --revision \u306E\u4E00\u89A7\u304C\u73FE\u5728\u306E\u5DEE\u5206\u3068\u4E00\u81F4\u3057\u307E\u305B\u3093\uFF08\u8868\u793A\u5F8C\u306B\u30D5\u30A1\u30A4\u30EB\u304B\u30B5\u30FC\u30D0\u304C\u5909\u308F\u308A\u307E\u3057\u305F\uFF09\u30021\u4EF6\u3082\u767B\u9332\u3057\u3066\u3044\u307E\u305B\u3093\u3002"+
|
|
30
|
+
(unseen.length>0?` \u4E00\u89A7\u306B\u7121\u3044\u5DEE\u5206: ${unseen.join(", ")}\u3002`:"")+(unknown.length>0?` \u30D5\u30A1\u30A4\u30EB\u304C\u7121\u3044\u30B9\u30AD\u30EB: ${unknown.join(", ")}\u3002`:"")+" --yes \u3092\u5916\u3057\u3066\u5DEE\u5206\u3092\u898B\u76F4\u3057\u3066\u304F\u3060\u3055\u3044\n");return EXIT_USAGE}const moved=plans.filter(p=>expected.get(p.name)!==p.revision);if(moved.length>0){io.err("\u26D4 \u8868\u793A\u5F8C\u306B\u30B5\u30FC\u30D0\u3067\u66F4\u65B0\u3055\u308C\u305F\u30B9\u30AD\u30EB\u304C\u3042\u308A\u307E\u3059\u3002\u4E0A\u66F8\u304D\u305B\u305A\u30011\u4EF6\u3082\u767B\u9332\u3057\u3066\u3044\u307E\u305B\u3093: "+
|
|
31
|
+
moved.map(p=>`${p.name}\uFF08\u6848\u5185 ${expected.get(p.name)} \u2192 \u73FE\u5728 ${p.revision}\uFF09`).join(", ")+"\u3002--yes \u3092\u5916\u3057\u3066\u5DEE\u5206\u3092\u898B\u76F4\u3057\u3066\u304F\u3060\u3055\u3044\n");return EXIT_API_CLIENT}}const newCount=plans.filter(p=>p.isNew).length;if(list.length+newCount>MAX_SKILLS_PER_PROJECT){io.err(`\u26D4 \u767B\u9332\u3059\u308B\u3068\u30B5\u30FC\u30D0\u306E\u4E0A\u9650\uFF081\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8 ${MAX_SKILLS_PER_PROJECT} \u4EF6\uFF09\u3092\
|
|
32
|
+
\u8D85\u3048\u307E\u3059\uFF08\u767B\u9332\u6E08\u307F ${list.length} \u4EF6 + \u65B0\u898F ${newCount} \u4EF6\uFF09\u30021\u4EF6\u3082\u767B\u9332\u3057\u3066\u3044\u307E\u305B\u3093
|
|
33
|
+
`);return EXIT_USAGE}const done=[];for(const plan of plans){const code=await putSkill(api,plan.name,plan.body,expected?.get(plan.name)??plan.revision,io);if(code!==EXIT_OK){const rest=plans.slice(plans.indexOf(plan)+1).map(p=>p.name);io.err(`\u26D4 ${plan.name} \u3067\u6B62\u3081\u307E\u3057\u305F\u3002\u767B\u9332\u6E08\u307F: ${done.length>0?done.join(", "):"\u306A\u3057"} \uFF0F \u672A\u767B\u9332: ${[plan.name,...rest].join(", ")}
|
|
34
|
+
`);return code}done.push(plan.name)}return EXIT_OK}function parseRevisionMap(raw){const map=new Map;for(const part of raw.split(",")){const m=/^([^=]+)=(\d+)$/.exec(part);if(m===null)return null;const name=m[1];if(!isValidSkillName(name)||map.has(name))return null;map.set(name,Number(m[2]))}return map}async function putSkill(api,name,body,revision,io){const res=await api.request("PUT",`/settings/skills/${encodeURIComponent(name)}`,{body,revision});if(!res.ok){if(res.status===409){const now=currentRevisionOf(
|
|
35
|
+
res);io.err(`\u26D4 ${name}: 409: revision ${revision} \u3067\u9001\u308A\u307E\u3057\u305F\u304C\u3001\u30B5\u30FC\u30D0\u306F${now!==null?` revision ${now} \u306B`:""}\u66F4\u65B0\u3055\u308C\u3066\u3044\u307E\u3059\u3002\u753B\u9762\u7B49\u3067\u7DE8\u96C6\u3055\u308C\u305F\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002\u4E0A\u66F8\u304D\u305B\u305A\u306B\u6B62\u3081\u307E\u3057\u305F\uFF08\u5DEE\u5206\u3092\u78BA\u8A8D\u3057\u3066\u304B\u3089\u3084\u308A\u76F4\u3057\u3066\u304F\u3060\u3055\u3044\uFF09
|
|
36
|
+
${errorDetail(res)}
|
|
37
|
+
`);return apiExit(res)}io.err(`\u26D4 ${name}: \u30B9\u30AD\u30EB\u5B9A\u7FA9\u3092\u767B\u9332\u3067\u304D\u307E\u305B\u3093\uFF08${errorDetail(res)}\uFF09
|
|
38
|
+
`);return apiExit(res)}const saved=parseDetail(res);if(saved===null){io.err(`\u26A0\uFE0F ${name}: \u5FDC\u7B54\u3092\u89E3\u91C8\u3067\u304D\u307E\u305B\u3093\u3002\u53CD\u6620\u3055\u308C\u305F\u304B\u3092 pull \u3067\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u5FDC\u7B54\u306E\u5148\u982D: ${res.raw.slice(0,120)}\uFF09
|
|
39
|
+
`);return EXIT_API_SERVER}io.out(`${name}: \u767B\u9332\u3057\u307E\u3057\u305F: revision ${saved.revision}\uFF08\u66F4\u65B0\u8005: ${saved.updatedByName||"\u4E0D\u660E"}${saved.updatedAt?`\u30FB${saved.updatedAt}`:""}\uFF09
|
|
40
|
+
`);return EXIT_OK}async function pullOne(api,opts,name,io){const current=await fetchSkill(api,name,io.err);if(typeof current==="number")return current;const target=fileOf(opts,name);if(current===null){io.err(`\u30B5\u30FC\u30D0\u306B\u30B9\u30AD\u30EB ${name} \u304C\u767B\u9332\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002${target} \u306F\u5909\u66F4\u3057\u307E\u305B\u3093\u3067\u3057\u305F\u3002
|
|
41
|
+
`);return EXIT_FAILURE}const local=readExisting(target,io);if(typeof local==="number")return local;if(local!==null){if(local===current.body){io.out(`${target} \u306F\u30B5\u30FC\u30D0\uFF08revision ${current.revision}\uFF09\u3068\u540C\u3058\u3067\u3059\u3002\u5909\u66F4\u3057\u307E\u305B\u3093\u3067\u3057\u305F\u3002
|
|
42
|
+
`);return EXIT_OK}printDiff(io.out,target,serverLabel(name,current),local,current.body);if(!opts.yes){io.out(`
|
|
43
|
+
${target} \u3092\u4E0A\u66F8\u304D\u3057\u3066\u3044\u307E\u305B\u3093\u3002\u4E0A\u66F8\u304D\u3059\u308B\u306B\u306F --yes \u3092\u4ED8\u3051\u3066\u518D\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
44
|
+
`);return EXIT_USAGE}}else{warnHiddenChars(io.out,current.body)}return writeSkill(target,current,io)?EXIT_OK:EXIT_FAILURE}async function pullAll(api,opts,io){const list=await fetchList(api,io.err);if(typeof list==="number")return list;if(list.length===0){io.err("\u30B5\u30FC\u30D0\u306B\u30B9\u30AD\u30EB\u304C\u767B\u9332\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u30D5\u30A1\u30A4\u30EB\u306F\u5909\u66F4\u3057\u307E\u305B\u3093\u3067\u3057\u305F\u3002\n");return EXIT_FAILURE}const writes=[];
|
|
45
|
+
let unchanged=0;for(const summary of list){const target=fileOf(opts,summary.name);const local=readExisting(target,io);if(typeof local==="number")return local;if(local!==null&&skillDigest(local)===summary.digest){unchanged++;continue}const detail=await fetchSkill(api,summary.name,io.err);if(typeof detail==="number")return detail;if(detail===null){io.out(`${summary.name}: \u4E00\u89A7\u306E\u53D6\u5F97\u5F8C\u306B\u30B5\u30FC\u30D0\u304B\u3089\u524A\u9664\u3055\u308C\u307E\u3057\u305F\u3002\u30B9\u30AD\u30C3\u30D7\u3057\u307E\u3059\u3002
|
|
46
|
+
`);continue}if(local!==null&&local===detail.body){unchanged++;continue}if(local!==null){printDiff(io.out,target,serverLabel(summary.name,detail),local,detail.body);io.out("\n")}else{warnHiddenChars(io.out,detail.body,summary.name)}writes.push({target,detail,overwrite:local!==null})}const overwrites=writes.filter(w=>w.overwrite).length;io.out(`\u4E0A\u66F8\u304D ${overwrites} \u4EF6 / \u65B0\u898F ${writes.length-overwrites} \u4EF6 / \u5DEE\u5206\u306A\u3057 ${unchanged} \u4EF6
|
|
47
|
+
`);if(writes.length===0){io.out("\u5909\u66F4\u306F\u3042\u308A\u307E\u305B\u3093\u3002\n");return EXIT_OK}if(overwrites>0&&!opts.yes){io.out("\n\u30D5\u30A1\u30A4\u30EB\u3092\u66F8\u3044\u3066\u3044\u307E\u305B\u3093\u3002\u4E0A\u66F8\u304D\u3092\u542B\u3080\u305F\u3081\u3001--yes \u3092\u4ED8\u3051\u3066\u518D\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044\u3002\n");return EXIT_USAGE}const done=[];for(const w of writes){if(!writeSkill(w.target,w.detail,io)){const rest=writes.slice(writes.indexOf(
|
|
48
|
+
w)).map(x=>x.detail.name);io.err(`\u26D4 \u5C55\u958B\u6E08\u307F: ${done.length>0?done.join(", "):"\u306A\u3057"} \uFF0F \u672A\u5C55\u958B: ${rest.join(", ")}
|
|
49
|
+
`);return EXIT_FAILURE}done.push(w.detail.name)}return EXIT_OK}function readExisting(target,io){const kind=io.fileKind(target);if(kind==="missing")return null;if(kind==="other"){io.err(`\u901A\u5E38\u30D5\u30A1\u30A4\u30EB\u3067\u306F\u306A\u3044\u305F\u3081\u66F8\u304D\u8FBC\u307F\u307E\u305B\u3093\uFF08\u30B7\u30F3\u30DC\u30EA\u30C3\u30AF\u30EA\u30F3\u30AF\u30FB\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u7B49\uFF09: ${target}
|
|
50
|
+
`);return EXIT_FAILURE}try{return io.readFile(target)}catch(e){io.err(`\u65E2\u5B58\u30D5\u30A1\u30A4\u30EB\u3092\u8AAD\u3081\u307E\u305B\u3093: ${target}\uFF08${e.message}\uFF09
|
|
51
|
+
`);return EXIT_FAILURE}}function writeSkill(target,detail,io){try{io.mkdir(path.dirname(target));io.writeFile(target,detail.body)}catch(e){io.err(`\u66F8\u304D\u8FBC\u3081\u307E\u305B\u3093: ${target}\uFF08${e.message}\uFF09
|
|
52
|
+
`);return false}io.out(`${target} \u306B\u5C55\u958B\u3057\u307E\u3057\u305F\uFF08revision ${detail.revision}\uFF09\u3002
|
|
53
|
+
`);return true}async function fetchSkill(api,name,err){const res=await api.request("GET",`/settings/skills/${encodeURIComponent(name)}`);if(!res.ok){if(res.status===404&&reasonOf(res)==="skill_not_found")return null;err(`\u26D4 \u30B9\u30AD\u30EB ${name} \u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\uFF08${errorDetail(res)}\uFF09
|
|
54
|
+
`);return apiExit(res)}const detail=parseDetail(res);if(detail===null){err(`\u26D4 \u30B9\u30AD\u30EB ${name} \u306E\u5FDC\u7B54\u3092\u89E3\u91C8\u3067\u304D\u307E\u305B\u3093\uFF08\u5FDC\u7B54\u306E\u5148\u982D: ${res.raw.slice(0,120)}\uFF09
|
|
55
|
+
`);return EXIT_API_SERVER}if(detail.name!==name){err(`\u26D4 \u30B9\u30AD\u30EB ${name} \u3092\u6C42\u3081\u307E\u3057\u305F\u304C\u3001\u30B5\u30FC\u30D0\u306F ${detail.name} \u3092\u8FD4\u3057\u307E\u3057\u305F
|
|
56
|
+
`);return EXIT_API_SERVER}return detail}async function fetchList(api,err){const res=await api.request("GET","/settings/skills");if(!res.ok){err(`\u26D4 \u30B9\u30AD\u30EB\u5B9A\u7FA9\u306E\u4E00\u89A7\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\uFF08${errorDetail(res)}\uFF09
|
|
57
|
+
`);return apiExit(res)}const b=unwrap(res,"skills");const raw=b["skills"];if(!Array.isArray(raw)){err(`\u26D4 \u30B9\u30AD\u30EB\u5B9A\u7FA9\u306E\u4E00\u89A7\u3092\u89E3\u91C8\u3067\u304D\u307E\u305B\u3093\uFF08\u5FDC\u7B54\u306E\u5148\u982D: ${res.raw.slice(0,120)}\uFF09
|
|
58
|
+
`);return EXIT_API_SERVER}const out=[];for(const item of raw){const r=item&&typeof item==="object"?item:{};const name=str(r["name"]);const digest=str(r["digest"]);const revision=pickNumber(r,"revision");if(!isValidSkillName(name)||!/^sha256:[0-9a-f]{64}$/.test(digest)||revision===null){err(`\u26D4 \u30B9\u30AD\u30EB\u5B9A\u7FA9\u306E\u4E00\u89A7\u306B\u5951\u7D04\u5916\u306E\u8981\u7D20\u304C\u3042\u308A\u307E\u3059\uFF08${JSON.stringify(item).slice(0,160)}\uFF09
|
|
59
|
+
`);return EXIT_API_SERVER}out.push({name,digest,revision})}return out}function unwrap(res,key){const json=res.json??{};const data=json["data"];if(data&&typeof data==="object"&&!Array.isArray(data)&&key in data){return data}return json}function parseDetail(res){const b=unwrap(res,"revision");const revision=pickNumber(b,"revision");const body=b["body"];const name=b["name"];if(revision===null||typeof body!=="string"||typeof name!=="string")return null;return{name,body,revision,updatedByName:str(b["\
|
|
60
|
+
updated_by_name"]),updatedAt:str(b["updated_at"])}}function reasonOf(res){const json=res.json??{};const data=json["data"]&&typeof json["data"]==="object"?json["data"]:{};return str(json["error"])||str(json["reason"])||str(data["reason"])}function serverLabel(name,current){if(current===null)return`\u30B5\u30FC\u30D0\uFF08${name}\u30FB\u672A\u767B\u9332\uFF09`;return`\u30B5\u30FC\u30D0\uFF08${name}\u30FBrevision ${current.revision}${current.updatedByName?`\u30FB${current.updatedByName}`:""}\uFF09`}
|
|
61
|
+
function confirmCommand(opts,name,revision){const parts=["twp task-loop skill push","--project",shellQuote(opts.projectRef)];if(opts.profile!==void 0)parts.push("--profile",shellQuote(opts.profile));if(opts.dir!==void 0)parts.push("--dir",shellQuote(opts.dir));parts.push(name===void 0?"--all":shellQuote(name),"--yes","--revision",shellQuote(revision));return parts.join(" ")}export{DEFAULT_SKILL_DIR,isValidSkillName,runSkillCommand,skillDigest};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{repeatedValues}from"./chunk-IOGVQVGD.js";import{charCount,readBody}from"./chunk-HGTG5XQ7.js";import{PROJECT_FLAG,TASK_REF_FLAG,TASK_REF_HELP,classifyTaskRef,rejectRedundantProject,resolveTaskLocation,taskAttachmentResource,taskSurface,wantsPrivateSurface}from"./chunk-
|
|
4
|
-
|
|
3
|
+
import{repeatedValues}from"./chunk-IOGVQVGD.js";import{charCount,readBody}from"./chunk-HGTG5XQ7.js";import{boundedText,decimal,isoDate,priority}from"./chunk-UDPJ2IGK.js";import{PROJECT_FLAG,TASK_REF_FLAG,TASK_REF_HELP,classifyTaskRef,rejectRedundantProject,resolveTaskLocation,taskAttachmentResource,taskSurface,wantsPrivateSurface}from"./chunk-KUIFIN7P.js";import{PRIVATE_PROJECT_REF}from"./chunk-GY7KI5E5.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,
|
|
4
|
+
positiveInteger}from"./chunk-G4OO4M44.js";import{PRIVATE_TASKS_PATH,TASK_MASTERS}from"./chunk-NIAOX77K.js";import{isSafePathSegment}from"./chunk-GMBJTG6A.js";import"./chunk-FTYJZFEK.js";import{requireResolved,singleRef,withResolved}from"./chunk-ZN5EFDH7.js";import"./chunk-II5RVJQN.js";import"./chunk-DDKZ5IPT.js";import{acknowledgement,isRecord,pick}from"./chunk-ZWVYVS2A.js";import"./chunk-QQRJLH6B.js";import"./chunk-J7QYPKVK.js";import"./chunk-NERYSBA4.js";
|
|
5
5
|
import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import{ApiResponseError,UsageError}from"./chunk-7WSNIXTQ.js";import"./chunk-VSJBJXZO.js";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(
|
|
6
6
|
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(
|
|
7
7
|
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!==
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { createRequire as __twpCreateRequire } from 'node:module';
|
|
2
2
|
const require = __twpCreateRequire(import.meta.url);
|
|
3
|
-
import{fetchLatestVersion,isBehindLatest,runUpdate}from"./chunk-
|
|
3
|
+
import{fetchLatestVersion,isBehindLatest,runUpdate}from"./chunk-PK6CUUAQ.js";import"./chunk-Z2MNO3FT.js";import"./chunk-XNLIEUAW.js";import"./chunk-PMOUHEJQ.js";import"./chunk-J7QYPKVK.js";import"./chunk-ILKQDXI5.js";import"./chunk-DXXFUNYN.js";import"./chunk-5WGOHFAS.js";import"./chunk-NERYSBA4.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";export{fetchLatestVersion,isBehindLatest,runUpdate};
|