@tocca-systems/twp-cli 0.68.0 → 0.70.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.
@@ -1,8 +1,8 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
3
  import{ScheduleApi,collectDue,gateStatus,nowInZone,parseCounts,promptSection}from"./chunk-W2AIT5FJ.js";import{LoopSettingsApplier,renderStepBudget}from"./chunk-X6L5LUC4.js";import{NO_PLAN_SESSION,RECENT_ADVANCE_WINDOW_HOURS,ReleaseOutcomeLog,buildDynamicBlocks,buildRecentCandidateIndex,createItem,enqueueBlockerRecovery,enqueueDevVerifyForMerged,enqueueReleasePartialMergeRerun,enqueueReleasePhase5Recovery,fileSkillNames,findRecentCandidate,formatInflightEntry,formatPlanResultLine,formatRecentAdvance,
4
- inflightEntries,inflightStaleHours,openPlanSession,parseOutcomeCode,parseReleaseResult,parseTaskStatusSnapshot,pendingTaskKeys,resolveRecentAdvance,shouldSuppressForStatus,staleFloorHours,unavailableChecks,windowStartMicros}from"./chunk-P6M2MCZJ.js";import{EngineNotConfiguredError,NoopEngine,UnknownEngineError,aiUnavailableLabel,assertKnownEngine,failureHint,isAiUnavailable,needsHumanToRestoreAi}from"./chunk-ZOOEH7ZE.js";import{ServerSkillCatalog,formatSkillOrigins}from"./chunk-FAHDBWW2.js";
5
- import{claudeConfigDir,resolveDetectDeps}from"./chunk-5SONMN6K.js";import"./chunk-YJZT3UD3.js";import"./chunk-A4LFG7MW.js";import"./chunk-VRBI2NPI.js";import{InstanceLock,buildLockOwner,defaultIsLoopProcess,writeLockOwner}from"./chunk-3WHC4FSG.js";import{duplicateTaskKeyDropReason,excludedKeyInArgs,extractPlanJson,parseOpsCount,parsePlanExcludeKeys,placeholderTaskKey,releaseDeployDropReason,stepToItem,zeroTargetDropReasons}from"./chunk-6PAZUW73.js";import"./chunk-DXUFECE7.js";
4
+ inflightEntries,inflightStaleHours,openPlanSession,parseOutcomeCode,parseReleaseResult,parseTaskStatusSnapshot,pendingTaskKeys,resolveRecentAdvance,shouldSuppressForStatus,staleFloorHours,unavailableChecks,windowStartMicros}from"./chunk-P6M2MCZJ.js";import{EngineNotConfiguredError,NoopEngine,UnknownEngineError,aiUnavailableLabel,assertKnownEngine,failureHint,isAiUnavailable,needsHumanToRestoreAi}from"./chunk-ZOOEH7ZE.js";import{ServerSkillCatalog,formatSkillOrigins}from"./chunk-EDBJQCNC.js";
5
+ import{claudeConfigDir,resolveDetectDeps}from"./chunk-5SONMN6K.js";import"./chunk-RRHAX7RK.js";import"./chunk-A4LFG7MW.js";import{InstanceLock,buildLockOwner,defaultIsLoopProcess,writeLockOwner}from"./chunk-3WHC4FSG.js";import"./chunk-VRBI2NPI.js";import{duplicateTaskKeyDropReason,excludedKeyInArgs,extractPlanJson,parseOpsCount,parsePlanExcludeKeys,placeholderTaskKey,releaseDeployDropReason,stepToItem,zeroTargetDropReasons}from"./chunk-6PAZUW73.js";import"./chunk-DXUFECE7.js";
6
6
  import{AgentLoopApi,describeError,filterByStatus,isPermanent,pick,pickString}from"./chunk-SPZ3GBYC.js";import{buildLoopConfig,describeOperations,evaluateOwnership,evaluatePlanGate,exportStateDirEnv,loopStateDir,planGateStatePath,recordPlanned}from"./chunk-LJVAOWZI.js";import{CapacityReporter,formatHookIds,formatHookWiring,runHook,runPrefetch,runPreflight}from"./chunk-G4TZFGNN.js";import{exclusiveInflightEntries,formatExclusiveEntry,normalizeSkillName,spawnSyncResolved}from"./chunk-FABDZBDZ.js";
7
7
  import{setSkillPrefix,skillCommand,skillFromPrompt,stripSkillCommand}from"./chunk-6CS5L24D.js";import{killProcessTree}from"./chunk-N2UVRM3Z.js";import{PRIVATE_PROJECT_REF,isPrivateProjectId,isPrivateProjectRef,privateProjectId,projectFileKey}from"./chunk-GY7KI5E5.js";import{ULID_RE,loopProjectIdPolicy,resolveProjectRef}from"./chunk-HVZUXLQ4.js";import"./chunk-II5RVJQN.js";import"./chunk-VFPY2A23.js";import{joinFor}from"./chunk-PMOUHEJQ.js";import{AuthSession}from"./chunk-XNLIEUAW.js";
8
8
  import{httpFetch}from"./chunk-J7QYPKVK.js";import{compareVersionCores,parseVersionCore}from"./chunk-DXXFUNYN.js";import"./chunk-5WGOHFAS.js";import{effectiveApiUrl,resolveProfile}from"./chunk-4VZKNEVN.js";import{twpHomeDir}from"./chunk-RZVI6PMW.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";import fs9 from"fs";import path7 from"path";import fs from"fs";import path from"path";var LoopLogger=class{constructor(runnerId,logFile,out=process.stdout,now=()=>new Date){this.runnerId=runnerId;this.out=out;this.now=now;if(logFile){fs.mkdirSync(path.dirname(logFile),{recursive:true});this.stream=fs.createWriteStream(logFile,{flags:"a"})}}runnerId;out;now;stream=null;log(message){const d=this.now();const ts=`${d.getFullYear()}-${pad(d.getMonth()+1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`;const line=`[${ts}] [${this.runnerId}] ${stripTerminalControls(
@@ -280,7 +280,7 @@ const startedAtMs=now();let warned="";let done=false;const check=()=>{if(done)re
280
280
  decision.key)return;warned=decision.key;handlers.onWarn(decision.reason);return}done=true;const recorded=writeRestartAttempt(opts.stateDir,opts.projectKey,{from:decision.from,to:decision.to,at:new Date(now()).toISOString()},opts.store);if(!recorded){handlers.onWarn(`\u518D\u8D77\u52D5\u8A18\u9332\u3092\u66F8\u3051\u307E\u305B\u3093\u3067\u3057\u305F\uFF08${restartAttemptPath(opts.stateDir,opts.projectKey)}\uFF09\u3002\u540C\u3058\u7248\u30C9\u30EA\u30D5\u30C8\u304C\u89E3\u6D88\u3057\u306A\u3044\u5834\u5408\u3001\u518D\u8D77\u52D5\u3092\u7E70\u308A\u8FD4\u3059\u9632\u6CE2\u5824\u304C\u52B9\u304D\u307E\u305B\u3093`)}
281
281
  handlers.onRestart({from:decision.from,to:decision.to})};const timer=setInterval(check,opts.intervalMs??DRIFT_POLL_MS);timer.unref?.();return{stop:()=>{done=true;clearInterval(timer)},check}}import fs8 from"fs";import path6 from"path";var POLL_MS=1e3;var MAX_STOP_BYTES=4096;var MAX_AT_LENGTH=64;function markerPath(lockDir2,kind){return path6.join(lockDir2,kind)}function requestMarker(lockDir2,kind,pid,deps={}){const target=markerPath(lockDir2,kind);const write=deps.writeFileSync??((p,d)=>fs8.writeFileSync(p,d,{flag:"wx",mode:384}));const now=deps.now??(()=>new Date);clearMarker(lockDir2,kind,deps);try{write(target,`${JSON.stringify({pid,at:now().toISOString()})}
282
282
  `);return{ok:true}}catch(err){const e=err;return{ok:false,reason:e.code??"UNKNOWN"}}}function readMarker(lockDir2,kind,deps={}){const target=markerPath(lockDir2,kind);const read=deps.readFileSync??(p=>fs8.readFileSync(p,"utf8"));const size=deps.statSize??(p=>fs8.statSync(p).size);let raw;try{if(size(target)>MAX_STOP_BYTES)return null;raw=read(target)}catch{return null}if(raw.length>MAX_STOP_BYTES)return null;try{const parsed=JSON.parse(raw);if(typeof parsed!=="object"||parsed===null)return null;const pid=parsed.pid;const at=parsed.at;if(typeof pid!=="number"||!Number.isInteger(pid)||
283
- pid<=0)return null;return{pid,at:sanitizeAt(at)}}catch{return null}}function sanitizeAt(at){if(typeof at!=="string")return"";return at.replace(/[\u0000-\u001f\u007f]/g," ").slice(0,MAX_AT_LENGTH)}function clearMarker(lockDir2,kind,deps={}){const rm=deps.rmSync??(p=>fs8.rmSync(p,{recursive:true,force:true}));try{rm(markerPath(lockDir2,kind))}catch{}}function watchMarker(lockDir2,kind,selfPid,onStop,deps={}){let fired=false;const timer=setInterval(()=>{if(fired)return;const req=readMarker(lockDir2,kind,deps);if(req===null||req.pid!==selfPid)return;fired=true;onStop(req)},deps.intervalMs??POLL_MS);timer.unref?.();return()=>{fired=true;clearInterval(timer)}}function safe(s){return stripTerminalControls(s)}function compactTimestamp(at=new Date){const p2=n=>String(n).padStart(2,"0");return`${at.getFullYear()}${p2(at.getMonth()+1)}${p2(at.getDate())}-${p2(at.getHours())}${p2(at.getMinutes())}${p2(at.getSeconds())}`}async function buildEngine(config,log){if(config.engine==="noop")return new NoopEngine;const{DispatchEngine}=await import("./ai-dispatch-YICIA4NI.js");const{DEFAULT_PREFLIGHT_HOSTS}=await import("./ai-dispatch-YICIA4NI.js");const extraHosts=config.
283
+ pid<=0)return null;return{pid,at:sanitizeAt(at)}}catch{return null}}function sanitizeAt(at){if(typeof at!=="string")return"";return at.replace(/[\u0000-\u001f\u007f]/g," ").slice(0,MAX_AT_LENGTH)}function clearMarker(lockDir2,kind,deps={}){const rm=deps.rmSync??(p=>fs8.rmSync(p,{recursive:true,force:true}));try{rm(markerPath(lockDir2,kind))}catch{}}function watchMarker(lockDir2,kind,selfPid,onStop,deps={}){let fired=false;const timer=setInterval(()=>{if(fired)return;const req=readMarker(lockDir2,kind,deps);if(req===null||req.pid!==selfPid)return;fired=true;onStop(req)},deps.intervalMs??POLL_MS);timer.unref?.();return()=>{fired=true;clearInterval(timer)}}function safe(s){return stripTerminalControls(s)}function compactTimestamp(at=new Date){const p2=n=>String(n).padStart(2,"0");return`${at.getFullYear()}${p2(at.getMonth()+1)}${p2(at.getDate())}-${p2(at.getHours())}${p2(at.getMinutes())}${p2(at.getSeconds())}`}async function buildEngine(config,log){if(config.engine==="noop")return new NoopEngine;const{DispatchEngine}=await import("./ai-dispatch-H7OOHHKO.js");const{DEFAULT_PREFLIGHT_HOSTS}=await import("./ai-dispatch-H7OOHHKO.js");const extraHosts=config.
284
284
  operations.preflightHosts;return new DispatchEngine(config.ai,log,{workspace:config.workspace,charterFile:config.charterFile??void 0,charterEnabled:config.charterEnabled,...config.charterPrefix===null?{}:{charterPrefix:config.charterPrefix},...config.charterSuffix===null?{}:{charterSuffix:config.charterSuffix},serverPrompts:()=>config.serverPrompts??{},compileCommand:config.compileCommand??void 0,skillOverlayDir:path7.join(config.stateDir,"skill-overlay",projectFileKey(config.projectId)),launcherBin:config.
285
285
  claudeLauncher.bin,...extraHosts.length>0?{preflightHosts:[...DEFAULT_PREFLIGHT_HOSTS,...extraHosts]}:{}})}function lockDir(config){return path7.join(config.stateDir,`task-loop-${projectFileKey(config.projectId)}.lock.d`)}function runnerIdPersisted(stateDir,env=process.env){if((env.RUNNER_ID?.trim()??"")!=="")return true;const file=env.RUNNER_ID_FILE&&env.RUNNER_ID_FILE.trim()!==""?env.RUNNER_ID_FILE:path7.join(stateDir,"runner-id");return fs9.existsSync(file)}async function runTaskLoop(opts){if(opts.
286
286
  action==="stop")return await stopLoop(opts);if(opts.action==="plan"){if(opts.planOp!=="submit"){process.stderr.write("plan \u306B\u306F submit \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\n");return 2}const{runPlanSubmit}=await import("./plan-submit-T5KHXNGH.js");return runPlanSubmit({file:opts.charterInput,empty:opts.planEmpty===true,check:opts.planCheck===true},{env:process.env,readStdin:()=>fs9.readFileSync(0,"utf8"),stdout:s=>process.stdout.write(s),stderr:s=>process.stderr.write(s)})}
@@ -289,11 +289,14 @@ const profile=resolveProfile(opts.profile);let creds;try{creds=new AuthSession(p
289
289
  message}
290
290
  `);return 1}const projectId=project.id;if(opts.action==="setup"){const{runSetup,parseAiList}=await import("./setup-HHPKB6N4.js");let ais;if(opts.ais!==void 0&&opts.ais.length>0){const parsed=parseAiList(opts.ais.join(","));if(parsed.unknown.length>0){process.stderr.write(`--ai \u306B\u672A\u77E5\u306E\u5024\u304C\u3042\u308A\u307E\u3059: ${parsed.unknown.join(" / ")}
291
291
  `);return 2}ais=parsed.ais}return runSetup({projectId,projectRef,projectName:project.name===project.id?projectRef:`${project.code} / ${project.name}`,apiUrl,yes:opts.yes===true,...ais!==void 0?{ais}:{},...opts.workspace!==void 0?{workspace:opts.workspace}:{},...opts.aiConfigFile!==void 0?{aiConfigFile:opts.aiConfigFile}:{},...opts.noAiConfigFile===true?{noAiConfigFile:true}:{},...opts.profile!==void 0?{profile:opts.profile}:{}})}if(opts.action==="charter"){if(opts.charterOp===void 0){process.stderr.
292
- write("charter \u306B\u306F push / pull / history / diff / revert \u306E\u3044\u305A\u308C\u304B\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\n");return 2}if(isPrivateProjectId(projectId)){process.stderr.write("\u500B\u4EBA\u30BF\u30B9\u30AF\u306E\u30AD\u30E5\u30FC\uFF08--project __private__\uFF09\u306B\u306F\u61B2\u7AE0\u306E\u8A2D\u5B9A\u304C\u3042\u308A\u307E\u305B\u3093\n");return 2}if(opts.charterOp!=="push"&&opts.charterOp!=="pull"){const{runRevisionCommand}=await import("./revision-command-PM7FQUVF.js");
292
+ write("charter \u306B\u306F push / pull / history / diff / revert \u306E\u3044\u305A\u308C\u304B\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\n");return 2}if(isPrivateProjectId(projectId)){process.stderr.write("\u500B\u4EBA\u30BF\u30B9\u30AF\u306E\u30AD\u30E5\u30FC\uFF08--project __private__\uFF09\u306B\u306F\u61B2\u7AE0\u306E\u8A2D\u5B9A\u304C\u3042\u308A\u307E\u305B\u3093\n");return 2}if(opts.charterOp!=="push"&&opts.charterOp!=="pull"){const{runRevisionCommand}=await import("./revision-command-TYBPPUAF.js");
293
293
  return runRevisionCommand({api:new AgentLoopApi({apiUrl,projectId,session})},{target:"charter",op:opts.charterOp,from:opts.revisionFrom,to:opts.revisionTo,revision:opts.charterRevision,yes:opts.yes===true,projectRef,profile:opts.profile})}const{runCharterCommand}=await import("./charter-command-LIX2JXRJ.js");return runCharterCommand({api:new AgentLoopApi({apiUrl,projectId,session})},{op:opts.charterOp,file:opts.charterInput,out:opts.charterOutput,revision:opts.charterRevision,yes:opts.yes===true,projectRef,
294
- profile:opts.profile})}if(opts.action==="skill"){if(opts.skillOp===void 0){process.stderr.write("skill \u306B\u306F push / pull / history / diff / revert \u306E\u3044\u305A\u308C\u304B\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\n");return 2}if(isPrivateProjectId(projectId)){process.stderr.write("\u500B\u4EBA\u30BF\u30B9\u30AF\u306E\u30AD\u30E5\u30FC\uFF08--project __private__\uFF09\u306B\u306F\u30B9\u30AD\u30EB\u5B9A\u7FA9\u306E\u8A2D\u5B9A\u304C\u3042\u308A\u307E\u305B\u3093\n");return 2}
295
- if(opts.skillOp!=="push"&&opts.skillOp!=="pull"){const{runRevisionCommand}=await import("./revision-command-PM7FQUVF.js");return runRevisionCommand({api:new AgentLoopApi({apiUrl,projectId,session})},{target:"skill",op:opts.skillOp,name:opts.skillName,from:opts.revisionFrom,to:opts.revisionTo,revision:opts.charterRevision,yes:opts.yes===true,projectRef,profile:opts.profile})}const{runSkillCommand}=await import("./skill-command-NXHTJXYY.js");return runSkillCommand({api:new AgentLoopApi({apiUrl,projectId,
296
- session})},{op:opts.skillOp,name:opts.skillName,all:opts.skillAll===true,dir:opts.skillDir,revision:opts.charterRevision,yes:opts.yes===true,projectRef,profile:opts.profile})}const config=buildLoopConfig({projectId,projectRef,apiUrl,safeMode:opts.safe,daemon:opts.daemon,...opts.maxCycles!==void 0?{maxCycles:opts.maxCycles}:{},...opts.interval!==void 0?{intervalSec:opts.interval}:{},forceRunner:opts.forceRunner,...opts.engine!==void 0?{engine:opts.engine}:{},version:opts.version});const api=new AgentLoopApi(
294
+ profile:opts.profile})}if(opts.action==="schedule"&&opts.scheduleOp!==void 0){const{runScheduleDefCommand}=await import("./schedule-def-command-OFCA5VH3.js");return runScheduleDefCommand({api:new AgentLoopApi({apiUrl,projectId,session})},{op:opts.scheduleOp,configOp:opts.scheduleConfigOp,id:opts.scheduleId,file:opts.charterInput,out:opts.charterOutput,revision:opts.charterRevision,yes:opts.yes===true,projectRef,profile:opts.profile})}if(opts.action==="settings"){if(opts.settingsOp===void 0){process.stderr.
295
+ write("settings \u306B\u306F push / pull \u306E\u3044\u305A\u308C\u304B\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\n");return 2}if(isPrivateProjectId(projectId)){process.stderr.write("\u500B\u4EBA\u30BF\u30B9\u30AF\u306E\u30AD\u30E5\u30FC\uFF08--project __private__\uFF09\u306B\u306F\u30EB\u30FC\u30D7\u8A2D\u5B9A\u304C\u3042\u308A\u307E\u305B\u3093\n");return 2}const{runSettingsCommand}=await import("./settings-command-TEVH2MNY.js");return runSettingsCommand({api:new AgentLoopApi({apiUrl,projectId,
296
+ session})},{op:opts.settingsOp,file:opts.charterInput,out:opts.charterOutput,revision:opts.charterRevision,yes:opts.yes===true,projectRef,profile:opts.profile})}if(opts.action==="skill"){if(opts.skillOp===void 0){process.stderr.write("skill \u306B\u306F push / pull / list / show / delete / history / diff / revert \u306E\u3044\u305A\u308C\u304B\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\n");return 2}if(isPrivateProjectId(projectId)){process.stderr.write("\u500B\u4EBA\u30BF\u30B9\u30AF\u306E\u30AD\u30E5\u30FC\uFF08--project __private__\
297
+ \uFF09\u306B\u306F\u30B9\u30AD\u30EB\u5B9A\u7FA9\u306E\u8A2D\u5B9A\u304C\u3042\u308A\u307E\u305B\u3093\n");return 2}if(opts.skillOp==="list"||opts.skillOp==="show"||opts.skillOp==="delete"){const{runSkillManageCommand}=await import("./skill-manage-command-S2RLIHTA.js");return runSkillManageCommand({api:new AgentLoopApi({apiUrl,projectId,session})},{op:opts.skillOp,name:opts.skillName,output:opts.output,query:opts.query,revision:opts.charterRevision,yes:opts.yes===true,projectRef,profile:opts.profile})}if(opts.
298
+ skillOp!=="push"&&opts.skillOp!=="pull"){const{runRevisionCommand}=await import("./revision-command-TYBPPUAF.js");return runRevisionCommand({api:new AgentLoopApi({apiUrl,projectId,session})},{target:"skill",op:opts.skillOp,name:opts.skillName,from:opts.revisionFrom,to:opts.revisionTo,revision:opts.charterRevision,yes:opts.yes===true,projectRef,profile:opts.profile})}const{runSkillCommand}=await import("./skill-command-4V2GT73D.js");return runSkillCommand({api:new AgentLoopApi({apiUrl,projectId,session})},
299
+ {op:opts.skillOp,name:opts.skillName,all:opts.skillAll===true,dir:opts.skillDir,revision:opts.charterRevision,yes:opts.yes===true,projectRef,profile:opts.profile})}const config=buildLoopConfig({projectId,projectRef,apiUrl,safeMode:opts.safe,daemon:opts.daemon,...opts.maxCycles!==void 0?{maxCycles:opts.maxCycles}:{},...opts.interval!==void 0?{intervalSec:opts.interval}:{},forceRunner:opts.forceRunner,...opts.engine!==void 0?{engine:opts.engine}:{},version:opts.version});const api=new AgentLoopApi(
297
300
  {apiUrl,projectId,session});if(opts.action==="capacity"){if(opts.capacityOp!=="report"){process.stderr.write("capacity \u306B\u306F report \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\n");return 2}for(const warning of config.warnings)process.stderr.write(`\u26A0\uFE0F ${warning}
298
301
  `);const{runCapacityReport}=await import("./capacity-report-command-PBE73I43.js");return runCapacityReport({api,projectId,runnerId:config.runnerId,stateDir:config.stateDir,cwd:config.workspace,probe:config.capacityProbe,runnerIdPersisted:runnerIdPersisted(config.stateDir),version:opts.version,platform:runnerPlatform(),stdout:s=>process.stdout.write(s),stderr:s=>process.stderr.write(s)})}if(opts.action==="status"||opts.action==="schedule"){for(const warning of config.warnings)process.stderr.write(`\u26A0\uFE0F ${warning}\
299
302
 
@@ -313,7 +316,7 @@ log.log("\u4E2D\u65AD\u30B7\u30B0\u30CA\u30EB\u3092\u53D7\u4FE1\u3057\u307E\u305
313
316
  "\u6642\u523B\u4E0D\u660E"}\uFF09\u3002\u7D42\u4E86\u3057\u307E\u3059...`);stopWatcher?.();drainWatcher?.();driftWatcher?.();void shutdown().catch(()=>void 0).then(()=>process.exit(130))});drainWatcher=watchMarker(lockDir(config),"drain",process.pid,req=>{drainWatcher?.();if(loop===null){pendingDrain.value={reason:`stop --drain\u30FB${req.at||"\u6642\u523B\u4E0D\u660E"}`,exitCode:0};log.log(`\u30C9\u30EC\u30A4\u30F3\u8981\u6C42\u3092\u53D7\u3051\u53D6\u308A\u307E\u3057\u305F\uFF08${req.at||"\u6642\u523B\u4E0D\u660E"}\
314
317
  \uFF09\u3002\u8D77\u52D5\u51E6\u7406\u306E\u5B8C\u4E86\u5F8C\u306B\u53CD\u6620\u3057\u307E\u3059\u3002`);return}loop.requestDrain(`stop --drain\u30FB${req.at||"\u6642\u523B\u4E0D\u660E"}`)});if(installed!==null){const watch=watchVersionDrift({runningVersion:opts.version,stateDir:config.stateDir,projectKey:projectFileKey(config.projectId),supervised:autoRestart.supervised,disabled:autoRestart.disabled},{onWarn:reason=>log.log(`\u26A0\uFE0F ${reason}`),onRestart:({from,to})=>{driftWatcher?.();log.
315
318
  log(`\u7248\u30C9\u30EA\u30D5\u30C8\u3092\u691C\u51FA\u3057\u307E\u3057\u305F\uFF08${from} \u2192 ${to}\uFF09\u3002`);log.log(` \u5B9F\u884C\u4E2D\u306E\u30A2\u30A4\u30C6\u30E0\u3092\u5B8C\u8D70\u3055\u305B\u3066\u304B\u3089\u7D42\u4E86\u3057\u307E\u3059\uFF08\u7D42\u4E86\u30B3\u30FC\u30C9 ${EXIT_VERSION_DRIFT}\uFF09\u3002\u518D\u8D77\u52D5\u306F systemd\uFF08Restart=always\uFF09\u304C\u884C\u3044\u307E\u3059`);const reason=`\u7248\u30C9\u30EA\u30D5\u30C8 ${from} \u2192 ${to} \u306B\u3088\u308B\u81EA\u52D5\u518D\u8D77\u52D5`;
316
- if(loop===null)pendingDrain.value={reason,exitCode:EXIT_VERSION_DRIFT};else loop.requestDrain(reason,EXIT_VERSION_DRIFT)}});driftWatcher=watch.stop}try{const{LoopSettingsApplier:LoopSettingsApplier2}=await import("./server-settings-LJBDUOTV.js");const settings=new LoopSettingsApplier2({api,config,log:m=>log.log(m)});await settings.apply();const{ServerSkillCatalog:ServerSkillCatalog2}=await import("./server-skills-KX236POI.js");const skills=new ServerSkillCatalog2({api,config,log:m=>log.log(m)});await skills.
319
+ if(loop===null)pendingDrain.value={reason,exitCode:EXIT_VERSION_DRIFT};else loop.requestDrain(reason,EXIT_VERSION_DRIFT)}});driftWatcher=watch.stop}try{const{LoopSettingsApplier:LoopSettingsApplier2}=await import("./server-settings-LJBDUOTV.js");const settings=new LoopSettingsApplier2({api,config,log:m=>log.log(m)});await settings.apply();const{ServerSkillCatalog:ServerSkillCatalog2}=await import("./server-skills-4XYTHPN3.js");const skills=new ServerSkillCatalog2({api,config,log:m=>log.log(m)});await skills.
317
320
  refresh();await runner.checkHeartbeatInterval();await runner.registerOrThrow();runner.startHeartbeatWorker();log.log(` heartbeat: ${config.heartbeatIntervalSec}\u79D2\u3054\u3068\u306B\u9001\u4FE1${runner.heartbeatTimeoutServer?`\uFF08\u30B5\u30FC\u30D0\u306E\u6B7B\u6D3B\u3057\u304D\u3044\u5024 ${runner.heartbeatTimeoutServer}\u79D2\uFF09`:""}`);loop=new TaskLoop({api,projectApi,config,log,runner,engine:await buildEngine(config,m=>log.log(m)),settings,skills});if(pendingDrain.value!==null){loop.
318
321
  requestDrain(pendingDrain.value.reason,pendingDrain.value.exitCode)}exitCode=await loop.run()}catch(err){if(err instanceof RunnerRegistrationError){exitCode=1}else{log.log(`\u26D4 \u4E88\u671F\u3057\u306A\u3044\u30A8\u30E9\u30FC\u3067\u7D42\u4E86\u3057\u307E\u3059: ${err.message}`);exitCode=1}}finally{await shutdown()}return exitCode}async function showStatus(api,config){const out={write:text=>process.stdout.write(stripTerminalControls(text))};out.write(`\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8: ${config.
319
322
  projectRef}\uFF08${config.projectId}\uFF09
@@ -1,13 +1,13 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{BUILTIN_COMMANDS,GLOBAL_FLAGS,TASK_LOOP_ACTIONS,VALUE_FLAGS}from"./chunk-2OG4LAGD.js";import"./chunk-2LOT54OO.js";import{API_TOKEN,DOMAIN_NAMES,HELP_TOKEN,isDomainName}from"./chunk-KDH3KWPO.js";import"./chunk-QQRJLH6B.js";import{OUTPUT_FORMATS}from"./chunk-74BPZOKU.js";import"./chunk-UREA4ZIG.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var EXTRA_TOP_LEVEL=[API_TOKEN,HELP_TOKEN,"completion","configure"];var COMPLETION_SHELLS=["bash","zsh","fish","powershell"];var TOP_LEVEL_FLAGS=["--help","--version","-p","--print","--profile","--mode","--permission-mode","--model","--allowed-tools","--disallowed-tools","--no-tui","--doctor"];var DOMAIN_GLOBAL_FLAGS=[...GLOBAL_FLAGS].filter(flag=>flag.startsWith("--"));function staticValues(flag,ctx){if(flag==="--output")return OUTPUT_FORMATS;if(flag==="--profile")return ctx.profileNames();return void 0}
3
+ import{BUILTIN_COMMANDS,GLOBAL_FLAGS,TASK_LOOP_ACTIONS,VALUE_FLAGS}from"./chunk-D5EYI7S3.js";import"./chunk-2LOT54OO.js";import{API_TOKEN,DOMAIN_NAMES,HELP_TOKEN,isDomainName}from"./chunk-KDH3KWPO.js";import"./chunk-QQRJLH6B.js";import{OUTPUT_FORMATS}from"./chunk-74BPZOKU.js";import"./chunk-UREA4ZIG.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var EXTRA_TOP_LEVEL=[API_TOKEN,HELP_TOKEN,"completion","configure"];var COMPLETION_SHELLS=["bash","zsh","fish","powershell"];var TOP_LEVEL_FLAGS=["--help","--version","-p","--print","--profile","--mode","--permission-mode","--model","--allowed-tools","--disallowed-tools","--no-tui","--doctor"];var DOMAIN_GLOBAL_FLAGS=[...GLOBAL_FLAGS].filter(flag=>flag.startsWith("--"));function staticValues(flag,ctx){if(flag==="--output")return OUTPUT_FORMATS;if(flag==="--profile")return ctx.profileNames();return void 0}
4
4
  function positionals(words,takesValue){const out=[];for(let i=0;i<words.length;i++){const word=words[i]??"";if(word==="--"){out.push(...words.slice(i+1));break}if(word.startsWith("-")){if(!word.includes("=")&&takesValue(word))i++;continue}out.push(word)}return out}function byPrefix(candidates,current){const seen=new Set;for(const candidate of candidates){if(candidate.startsWith(current))seen.add(candidate)}return[...seen]}function remainingFlags(flags,words){const used=new Set(words.filter(w=>w.
5
5
  startsWith("--")).map(w=>w.split("=")[0]));return[...flags.filter(f=>f.repeatable===true||!used.has(f.name)).map(f=>f.name),...DOMAIN_GLOBAL_FLAGS.filter(f=>!used.has(f))]}async function complete(words,current,ctx){const previous=words[words.length-1];if(previous!==void 0&&previous.startsWith("--")&&!previous.includes("=")){const values=staticValues(previous,ctx);if(values!==void 0)return byPrefix(values,current)}const eq=current.indexOf("=");if(current.startsWith("--")&&eq>0){const flag=current.
6
6
  slice(0,eq);const values=staticValues(flag,ctx);return values===void 0?[]:byPrefix(values.map(v=>`${flag}=${v}`),current)}const pos=positionals(words,flag=>VALUE_FLAGS.has(flag));const[first,second]=pos;if(first===void 0){if(current.startsWith("-"))return byPrefix([...TOP_LEVEL_FLAGS,...DOMAIN_GLOBAL_FLAGS],current);return byPrefix([...BUILTIN_COMMANDS,...DOMAIN_NAMES,...EXTRA_TOP_LEVEL],current)}if(first==="completion")return pos.length===1?byPrefix(COMPLETION_SHELLS,current):[];if(first==="con\
7
- figure")return current.startsWith("-")?byPrefix(["--profile"],current):[];if(first===HELP_TOKEN)return pos.length===1?byPrefix([...DOMAIN_NAMES,API_TOKEN],current):[];if(first==="task-loop"){if(pos.length===1&&!current.startsWith("-"))return byPrefix(TASK_LOOP_ACTIONS,current);if(pos.length===2&&(second==="charter"||second==="skill")&&!current.startsWith("-")){return byPrefix(["push","pull","history","diff","revert"],current)}if(pos.length===2&&second==="plan"&&!current.startsWith("-"))return byPrefix(
8
- ["submit"],current);if(pos.length===2&&second==="capacity"&&!current.startsWith("-"))return byPrefix(["report"],current);return[]}if(!isDomainName(first))return[];const domain=await ctx.loadDomain(first);const subresources=domain.subresources??[];if(second===void 0){if(current.startsWith("-"))return byPrefix(DOMAIN_GLOBAL_FLAGS,current);return byPrefix([...domain.operations.map(op=>op.name),...subresources.map(sub2=>sub2.name),HELP_TOKEN],current)}const sub=subresources.find(resource=>resource.name===
9
- second);let operation;if(sub!==void 0){const third=pos[2];if(third===void 0){if(current.startsWith("-"))return byPrefix(DOMAIN_GLOBAL_FLAGS,current);return byPrefix([...sub.operations.map(op=>op.name),HELP_TOKEN],current)}operation=sub.operations.find(op=>op.name===third)}else{operation=domain.operations.find(op=>op.name===second)}if(operation===void 0)return[];if(!current.startsWith("-"))return[];return byPrefix(remainingFlags(operation.flags,words),current)}function completionScript(shell){switch(shell){case"\
10
- bash":return`# twp \u306E bash \u88DC\u5B8C\uFF08twp completion bash \u304C\u51FA\u529B\uFF09
7
+ figure")return current.startsWith("-")?byPrefix(["--profile"],current):[];if(first===HELP_TOKEN)return pos.length===1?byPrefix([...DOMAIN_NAMES,API_TOKEN],current):[];if(first==="task-loop"){if(pos.length===1&&!current.startsWith("-"))return byPrefix(TASK_LOOP_ACTIONS,current);if(pos.length===2&&(second==="charter"||second==="skill")&&!current.startsWith("-")){const ops=["push","pull","history","diff","revert"];return byPrefix(second==="skill"?[...ops,"list","show","delete"]:ops,current)}if(pos.
8
+ length===2&&second==="settings"&&!current.startsWith("-"))return byPrefix(["push","pull"],current);if(pos.length===2&&second==="plan"&&!current.startsWith("-"))return byPrefix(["submit"],current);if(pos.length===2&&second==="capacity"&&!current.startsWith("-"))return byPrefix(["report"],current);return[]}if(!isDomainName(first))return[];const domain=await ctx.loadDomain(first);const subresources=domain.subresources??[];if(second===void 0){if(current.startsWith("-"))return byPrefix(DOMAIN_GLOBAL_FLAGS,
9
+ current);return byPrefix([...domain.operations.map(op=>op.name),...subresources.map(sub2=>sub2.name),HELP_TOKEN],current)}const sub=subresources.find(resource=>resource.name===second);let operation;if(sub!==void 0){const third=pos[2];if(third===void 0){if(current.startsWith("-"))return byPrefix(DOMAIN_GLOBAL_FLAGS,current);return byPrefix([...sub.operations.map(op=>op.name),HELP_TOKEN],current)}operation=sub.operations.find(op=>op.name===third)}else{operation=domain.operations.find(op=>op.name===
10
+ second)}if(operation===void 0)return[];if(!current.startsWith("-"))return[];return byPrefix(remainingFlags(operation.flags,words),current)}function completionScript(shell){switch(shell){case"bash":return`# twp \u306E bash \u88DC\u5B8C\uFF08twp completion bash \u304C\u51FA\u529B\uFF09
11
11
  # \u8AAD\u307F\u8FBC\u307F: eval "$(twp completion bash)" \uFF0F \u5E38\u7528: ~/.bashrc \u306B\u540C\u30581\u884C\u3092\u66F8\u304F
12
12
  # \uFF08source <(...) \u306F macOS \u6A19\u6E96\u306E bash 3.2 \u3067\u8AAD\u307F\u8FBC\u307E\u308C\u306A\u3044\u306E\u3067\u4F7F\u308F\u306A\u3044\uFF09
13
13
  # \u78BA\u5B9A\u6E08\u307F\u306E\u8A9E\u306F\u914D\u5217\u30B9\u30E9\u30A4\u30B9\u3067\u306F\u306A\u304F\u30EB\u30FC\u30D7\u3067\u96C6\u3081\u308B\uFF08macOS \u6A19\u6E96\u306E bash 3.2 \u3067\u3082\u540C\u3058\u306B\u52D5\u304B\u3059\u305F\u3081\uFF09
@@ -1,8 +1,8 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{composeDocument,meetingContentToText,metaLine,noteContentToText,oneLine,wikiContentToText}from"./chunk-HPPIVCK3.js";import{dateFlag}from"./chunk-EXT4AIDF.js";import{boundedText}from"./chunk-JJSBBWJ5.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-MI6HVYR2.js";import{repeatedValues}from"./chunk-RX5HWI4L.js";import{charCount,readBody}from"./chunk-6LSQCOCJ.js";import"./chunk-HNG6MF26.js";import{ResolveError,
4
- isSafePathSegment}from"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import{requireResolved,withResolved}from"./chunk-PS5QFKHB.js";import"./chunk-II5RVJQN.js";import{acknowledgement,isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiRejectedError,ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.js";import"./chunk-RZVI6PMW.js";import"./chunk-QQRJLH6B.js";
5
- import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var WIKI_PATH="/api/v2/wiki";var NOTES_PATH="/api/v2/notes";var MEETINGS_PATH="/api/v2/meetings";var ROOT_PARENT="root";var WIKI_STATUSES=["draft","published"];var WIKI_CONTENT_FORMATS=["html","markdown"];var NOTE_STATUSES=["draft","published"];var NOTE_VISIBILITIES=["private","tenant","external","public"];var NOTE_SORTS=["manual","created_at","updated_at","view_count","comment_count","reaction_count"];var MEETING_STATUSES=["draft","published","archived"];var MEETING_TYPES=["regular","client","i\
3
+ import{buildDiffLines,diffStat}from"./chunk-VRBI2NPI.js";import{composeDocument,meetingContentToText,metaLine,noteContentToText,oneLine,wikiContentToText}from"./chunk-HPPIVCK3.js";import{dateFlag}from"./chunk-EXT4AIDF.js";import{boundedText}from"./chunk-JJSBBWJ5.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-MI6HVYR2.js";import{repeatedValues}from"./chunk-RX5HWI4L.js";import{charCount,readBody}from"./chunk-6LSQCOCJ.js";
4
+ import"./chunk-HNG6MF26.js";import{ResolveError,isSafePathSegment}from"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import{requireResolved,withResolved}from"./chunk-PS5QFKHB.js";import"./chunk-II5RVJQN.js";import{acknowledgement,isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiRejectedError,ApiResponseError,UsageError}from"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.js";import"./chunk-RZVI6PMW.js";
5
+ import"./chunk-QQRJLH6B.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";var WIKI_PATH="/api/v2/wiki";var NOTES_PATH="/api/v2/notes";var MEETINGS_PATH="/api/v2/meetings";var ROOT_PARENT="root";var WIKI_STATUSES=["draft","published"];var WIKI_CONTENT_FORMATS=["html","markdown"];var NOTE_STATUSES=["draft","published"];var NOTE_VISIBILITIES=["private","tenant","external","public"];var NOTE_SORTS=["manual","created_at","updated_at","view_count","comment_count","reaction_count"];var MEETING_STATUSES=["draft","published","archived"];var MEETING_TYPES=["regular","client","i\
6
6
  nternal","retrospective","decision","one_on_one"];var MEETING_SORTS=["meeting_date","created_at","updated_at","title"];var SORT_ORDERS=["asc","desc"];var MEETING_TAGS_MAX=20;var MEETING_TAG_MAX_CHARS=50;var DATE_FLOOR="0000-01-01";var DATE_CEIL="9999-12-31";var WIKI_LIST_COLUMNS=["id","title","status","parent_page_id","updated_at","updated_by_name"];var WIKI_CHILD_COLUMNS=["id","title","status","child_count","updated_at","updated_by_name"];var WIKI_GET_COLUMNS=["id","title","status","content_for\
7
7
  mat","parent_page_id","version","tags","updated_at","updated_by_name"];var NOTE_LIST_COLUMNS=["id","title","status","visibility","created_by_name","updated_at","comment_count","reaction_count"];var NOTE_GET_COLUMNS=["id","title","status","visibility","content_type","category_name","tags","created_by_name","updated_at","view_count"];var MEETING_LIST_COLUMNS=["id","meeting_date","title","meeting_type","status","project_name","created_by_name"];var MEETING_GET_COLUMNS=["id","title","meeting_date","\
8
8
  meeting_type","status","project_name","category_name","created_by_name","updated_at"];var TEXT_OUTPUT_HELP="--output text \u306F\u672C\u6587\u3092\u8AAD\u3080\u305F\u3081\u306E\u6587\u66F8\uFF08\u898B\u51FA\u3057\u30FB\u30E1\u30BF\u60C5\u5831\u30FB\u672C\u6587\uFF09\u3092\u51FA\u3057\u307E\u3059\u3002HTML \u3068\u5171\u540C\u7DE8\u96C6\u30A8\u30C7\u30A3\u30BF\u306E JSON \u306F\n\u5E73\u6587\u3078\u5909\u63DB\u3057\u3001\u898B\u51FA\u3057\u30FB\u7B87\u6761\u66F8\u304D\u30FB\u30EA\u30F3\u30AF\u306F Markdown \u98A8\u306B\u6B8B\u3057\u307E\u3059\u3002--output json \u306F\u30B5\u30FC\u30D0\u306E\u539F\u6587\u306E\u307E\u307E\u3067\u3059\u3002";
@@ -34,9 +34,53 @@ et <\u30DA\u30FC\u30B8ID>",description:`${TEXT_OUTPUT_HELP}
34
34
 
35
35
  --output table / tsv \u306F\u8981\u7D04\u5217\uFF08${WIKI_GET_COLUMNS.join(" / ")}\uFF09\u3067\u3059\u3002
36
36
  \u4ED6\u4EBA\u306E\u4E0B\u66F8\u304D\uFF08\u3068\u3001\u4ED6\u4EBA\u306E\u4E0B\u66F8\u304D\u306E\u30B3\u30EC\u30AF\u30B7\u30E7\u30F3\u914D\u4E0B\u306E\u30DA\u30FC\u30B8\uFF09\u306F\u300C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u300D\u306B\u306A\u308A\u307E\u3059\uFF08\u30B5\u30FC\u30D0\u306E\u5224\u5B9A\uFF09\u3002`,flags:[],plan:input=>({method:"GET",path:`${WIKI_PATH}/${encodeURIComponent(singleId(input,"twp wiki get","\u30DA\u30FC\u30B8","twp wiki list"))}`}),summarize:body=>pick(record(body,
37
- "page",WIKI_LABEL),WIKI_GET_COLUMNS),raw:body=>record(body,"page",WIKI_LABEL),document:wikiDocument};var WIKI_CONTENT_MAX_CHARS=4e5;var WIKI_TITLE_MAX_CHARS=255;var WIKI_TAG_MAX_CHARS=50;var WIKI_CREATE_USAGE="twp wiki create --project <\u30B3\u30FC\u30C9|ID> --title <\u4EF6\u540D> --content-file <\u30D1\u30B9|-> [--content-format <html|markdown>] [--parent <\u30DA\u30FC\u30B8ID>] [--status <draft|published>] [--tag <\u30BF\u30B0>]...";var WIKI_UPDATE_USAGE="twp wiki update <\u30DA\u30FC\u30B8ID> [--title <\u4EF6\u540D>\
38
- ] [--content-file <\u30D1\u30B9|->] [--content-format <html|markdown>] [--status <draft|published>] [--tag <\u30BF\u30B0>]... [--clear-tags] [--if-version <\u7248>]";var WIKI_MOVE_USAGE="twp wiki move <\u30DA\u30FC\u30B8ID> [--parent <\u30DA\u30FC\u30B8ID>|root] [--sort-order <\u9806>]";var CONTENT_FILE_FLAG={name:"--content-file",summary:"\u672C\u6587\u3092\u8AAD\u3080\u30D5\u30A1\u30A4\u30EB\uFF08- \u3067\u6A19\u6E96\u5165\u529B\uFF09\u3002\u52A0\u5DE5\u305B\u305A\u306B\u9001\u308B",takesValue:true,
39
- placeholder:"<\u30D1\u30B9|->"};var WIKI_CONTENT_FORMAT_FLAG={name:"--content-format",summary:`\u672C\u6587\u306E\u5F62\u5F0F\uFF08${WIKI_CONTENT_FORMATS.join(" / ")}\uFF09`,takesValue:true,placeholder:"<\u5F62\u5F0F>"};var WIKI_STATUS_FLAG={name:"--status",summary:`\u72B6\u614B\uFF08${WIKI_STATUSES.join(" / ")}\uFF09`,takesValue:true,placeholder:"<\u72B6\u614B>"};var WIKI_TAG_FLAG={name:"--tag",summary:`\u30BF\u30B0\uFF08\u8907\u6570\u56DE\u53EF\u30FB${WIKI_TAG_MAX_CHARS}\u6587\u5B57\u4EE5\u5185\uFF09`,
37
+ "page",WIKI_LABEL),WIKI_GET_COLUMNS),raw:body=>record(body,"page",WIKI_LABEL),document:wikiDocument};var WIKI_VERSIONS_MAX=100;var WIKI_TAGS_MAX=50;var WIKI_TREE_COLUMNS=["depth","id","title","status","child_count","parent_page_id","updated_at"];var WIKI_VERSION_COLUMNS=["version","title","content_format","changed_by_name","changed_at"];var WIKI_BACKLINK_COLUMNS=["id","title","status","link_context","updated_at","updated_by_name"];var WIKI_LINKED_TASK_COLUMNS=["key","subject","status_id","task_i\
38
+ d","project_id","created_by_name","created_at"];function pageIdAndRest(input,usage){const[raw,...rest]=input.args;const id=raw?.trim()??"";if(id==="")throw new UsageError("\u30DA\u30FC\u30B8\u306E ID \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",usage);if(!isSafePathSegment(id))throw new UsageError(`\u30DA\u30FC\u30B8\u306E ID \u3068\u3057\u3066\u4F7F\u3048\u306A\u3044\u5024\u3067\u3059: ${id}`,"\u30DA\u30FC\u30B8\u306E ID \u306F twp wiki list / twp wiki tree \u306E id \u5217\u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002");
39
+ return{id,rest}}function versionNumber(raw,usage){const value=raw.trim();const n=/^\d+$/.test(value)?Number(value):Number.NaN;if(!Number.isSafeInteger(n)||n<1)throw new UsageError(`\u7248\u306F 1 \u4EE5\u4E0A\u306E\u6574\u6570\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${raw}`,usage);return n}function arrayField(body,key,label){const rows=isRecord(body)&&body["result"]===true?body[key]:void 0;if(!Array.isArray(rows))throw new ApiResponseError(`${label}\u306E\u5FDC\u7B54\u306B ${key} \
40
+ \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`);return rows}function flattenTree(body){const tree=arrayField(body,"tree",`${WIKI_LABEL}\u306E\u30C4\u30EA\u30FC`);const out=[];const stack=[...tree].reverse().map(node=>({node,depth:0}));while(stack.length>0){const{node,depth}=stack.pop();if(!isRecord(node))continue;const children=Array.isArray(node["children"])?node["children"]:[];const page={...node,depth,child_count:children.
41
+ length};delete page["children"];delete page["content"];out.push(page);for(let i=children.length-1;i>=0;i--)stack.push({node:children[i],depth:depth+1})}return out}function treeDocument(body){const rows=flattenTree(body);if(rows.length===0)return"\uFF08wiki \u30DA\u30FC\u30B8\u306F\u3042\u308A\u307E\u305B\u3093\uFF09\n";return`${rows.map(row=>{const title=typeof row["title"]==="string"&&row["title"].trim()!==""?oneLine(row["title"]):"(\u7121\u984C)";const children=typeof row["child_count"]==="num\
42
+ ber"&&row["child_count"]>0?`\u30FB\u5B50 ${row["child_count"]}`:"";return`${" ".repeat(Number(row["depth"])||0)}- ${title} [${String(row["status"]??"?")}${children}] ${String(row["id"])}`}).join("\n")}
43
+ `}var projectFlag={name:"--project",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\uFF08\u30B3\u30FC\u30C9\u304B ID\u3002\u7701\u7565\u6642\u306F\u65E2\u5B9A\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\uFF09",takesValue:true,placeholder:"<\u30B3\u30FC\u30C9|ID>"};var wikiTree={name:"tree",summary:`\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E${WIKI_LABEL}\u306E\u89AA\u5B50\u69CB\u9020\u3092\u51FA\u3059\uFF08\u672C\u6587\u306F\u51FA\u3055\u306A\u3044\uFF09`,usage:"twp wiki tree [--project <\u30B3\u30FC\u30C9|ID>]",
44
+ description:`\u5168\u30DA\u30FC\u30B8\u3092\u89AA\u5B50\u306E\u9806\uFF08\u753B\u9762\u306E\u4E26\u3073\uFF09\u30671\u884C\u305A\u3064\u51FA\u3057\u307E\u3059\u3002--output text \u306F\u5B57\u4E0B\u3052\u3057\u305F\u6728\u3001table / tsv \u306F\u8981\u7D04\u5217\uFF08${WIKI_TREE_COLUMNS.join(" / ")}\uFF09\u3067\u3059\u3002
45
+ **\u672C\u6587\u306F\u3069\u306E\u51FA\u529B\u5F62\u5F0F\u3067\u3082\u51FA\u3057\u307E\u305B\u3093**\uFF08--output json \u3082\u3001\u5404\u30DA\u30FC\u30B8\u304B\u3089 content \u3068 children \u3092\u5916\u3057 depth / child_count \u3092\u8DB3\u3057\u305F\u5E73\u3089\u306A\u914D\u5217\u3067\u3059\uFF09\u3002\u672C\u6587\u306F twp wiki get \u3067\u8AAD\u3081\u307E\u3059\u3002
46
+ \u4E0B\u66F8\u304D\u306F\u4F5C\u6210\u8005\u3068 wiki \u306E\u7BA1\u7406\u8005\u306B\u3057\u304B\u898B\u3048\u307E\u305B\u3093\uFF08\u30B5\u30FC\u30D0\u306E\u5224\u5B9A\uFF09\u3002`,flags:[projectFlag],async prepare(input,ctx){noArgs(input,"twp wiki tree");return withResolved(input,{project:await ctx.projectId(input.flags.get("--project"))})},plan:input=>({method:"GET",path:`${WIKI_PATH}/tree`,query:{project_id:requireResolved(input,"project")}}),summarize:body=>flattenTree(body).map(row=>pick(row,
47
+ WIKI_TREE_COLUMNS)),raw:flattenTree,document:treeDocument};var wikiTagList={name:"tags",summary:`\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E${WIKI_LABEL}\u306B\u4ED8\u3044\u3066\u3044\u308B\u30BF\u30B0\u3092\u51FA\u3059`,usage:"twp wiki tags [--project <\u30B3\u30FC\u30C9|ID>]",description:"\u516C\u958B\uFF08published\uFF09\u306E\u30DA\u30FC\u30B8\u306B\u4ED8\u3044\u305F\u30BF\u30B0\u3092\u3001\u4ED8\u3044\u3066\u3044\u308B\u30DA\u30FC\u30B8\u306E\u591A\u3044\u9806\u306B\u6700\u592750\u4EF6\u51FA\u3057\u307E\u3059\uFF08\u30B5\u30FC\u30D0\u306E\u4ED5\u69D8\u3002\u4EF6\u6570\u306F\u8FD4\u308A\u307E\u305B\u3093\uFF09\u3002\n\u4E0B\u66F8\u304D\u306B\u3060\u3051\u4ED8\u3044\u305F\u30BF\u30B0\u306F\u51FA\u307E\u305B\u3093\u3002\u30BF\u30B0\u3067\u30DA\u30FC\u30B8\u3092\u7D5E\u308B\u306A\u3089 twp wiki list --tag <\u30BF\u30B0> \u3067\u3059\u3002",
48
+ flags:[projectFlag],async prepare(input,ctx){noArgs(input,"twp wiki tags");return withResolved(input,{project:await ctx.projectId(input.flags.get("--project"))})},plan:input=>({method:"GET",path:`${WIKI_PATH}/tags`,query:{project_id:requireResolved(input,"project")}}),summarize:body=>arrayField(body,"tags",`${WIKI_LABEL}\u306E\u30BF\u30B0`).map(tag=>({tag})),raw:body=>arrayField(body,"tags",`${WIKI_LABEL}\u306E\u30BF\u30B0`),notes:body=>arrayField(body,"tags",`${WIKI_LABEL}\u306E\u30BF\u30B0`).length>=
49
+ WIKI_TAGS_MAX?[`\u30B5\u30FC\u30D0\u304C\u8FD4\u3059\u30BF\u30B0\u306E\u4E0A\u9650\uFF08${WIKI_TAGS_MAX}\u4EF6\uFF09\u306B\u9054\u3057\u307E\u3057\u305F\u3002\u3053\u308C\u3088\u308A\u5C11\u306A\u3044\u30DA\u30FC\u30B8\u306B\u3060\u3051\u4ED8\u3044\u305F\u30BF\u30B0\u306F\u51FA\u3066\u3044\u306A\u3044\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002`]:[]};var WIKI_VERSIONS_USAGE="twp wiki versions <\u30DA\u30FC\u30B8ID> [--limit <\u4EF6\u6570>]";function versionsLimit(input){const limit=positiveInteger(
50
+ input.flags,"--limit");if(limit!==void 0&&limit>WIKI_VERSIONS_MAX){throw new UsageError(`--limit \u306F 1\u301C${WIKI_VERSIONS_MAX} \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${limit}`,`\u30B5\u30FC\u30D0\u304C\u8FD4\u3059\u7248\u306E\u5C65\u6B74\u306F\u65B0\u3057\u3044\u9806\u306B\u6700\u5927${WIKI_VERSIONS_MAX}\u4EF6\u3067\u3059\u3002`)}return limit}var wikiVersions={name:"versions",summary:`${WIKI_LABEL}\u306E\u7248\u306E\u5C65\u6B74\u3092\u65B0\u3057\u3044\u9806\u306B\u51FA\u3059`,
51
+ usage:WIKI_VERSIONS_USAGE,description:`\u7248\u306F\u672C\u6587\u304B\u4EF6\u540D\u3092\u5909\u3048\u305F\u3068\u304D\u306B1\u3064\u4E0A\u304C\u308A\u307E\u3059\u3002\u65E2\u5B9A\u306F\u65B0\u3057\u3044\u9806\u306B20\u4EF6\u3001--limit \u3067\u6700\u5927${WIKI_VERSIONS_MAX}\u4EF6\u3067\u3059\uFF08\u30B5\u30FC\u30D0\u306E\u4E0A\u9650\u3002\u305D\u308C\u3088\u308A\u53E4\u3044\u7248\u306F\u4E00\u89A7\u306B\u51FA\u307E\u305B\u3093\u304C\u3001\u7248\u756A\u53F7\u304C\u5206\u304B\u308C\u3070 twp wiki version \u3067\u8AAD\u3081\u307E\u3059\uFF09\u3002
52
+ --output table / text / tsv \u306F\u8981\u7D04\u5217\uFF08${WIKI_VERSION_COLUMNS.join(" / ")}\uFF09\u3001--output json \u306F\u5404\u7248\u306E\u672C\u6587\u3092\u542B\u3080\u5168\u30D5\u30A3\u30FC\u30EB\u30C9\u3067\u3059\u3002
53
+ \u7248\u306E\u672C\u6587\u306F twp wiki version <\u30DA\u30FC\u30B8ID> <\u7248>\u30012\u3064\u306E\u7248\u306E\u9055\u3044\u306F twp wiki diff <\u30DA\u30FC\u30B8ID> <\u72481> [<\u72482>] \u3067\u8AAD\u3081\u307E\u3059\u3002`,flags:[{name:"--limit",summary:`\u51FA\u3059\u4EF6\u6570\uFF081\u301C${WIKI_VERSIONS_MAX}\u30FB\u65E2\u5B9A20\uFF09`,takesValue:true,placeholder:"<\u4EF6\u6570>"}],plan(input){const{id,rest}=pageIdAndRest(input,WIKI_VERSIONS_USAGE);if(rest.length>0)throw new UsageError(`twp\
54
+ wiki versions \u304C\u53D7\u3051\u53D6\u308C\u308B\u30DA\u30FC\u30B8 ID \u306F1\u3064\u3060\u3051\u3067\u3059: ${rest.join(" ")}`,WIKI_VERSIONS_USAGE);return{method:"GET",path:`${WIKI_PATH}/${encodeURIComponent(id)}/versions`,query:{limit:versionsLimit(input)}}},summarize:body=>arrayField(body,"versions",`${WIKI_LABEL}\u306E\u7248\u306E\u5C65\u6B74`).map(row=>pick(row,WIKI_VERSION_COLUMNS)),raw:body=>arrayField(body,"versions",`${WIKI_LABEL}\u306E\u7248\u306E\u5C65\u6B74`),notes(body,input){const rows=arrayField(
55
+ body,"versions",`${WIKI_LABEL}\u306E\u7248\u306E\u5C65\u6B74`);const limit=versionsLimit(input)??20;if(rows.length<limit)return[];return limit<WIKI_VERSIONS_MAX?[`\u65B0\u3057\u3044\u9806\u306B ${limit} \u4EF6\u3092\u51FA\u3057\u307E\u3057\u305F\u3002\u3053\u308C\u3088\u308A\u53E4\u3044\u7248\u304C\u3042\u308B\u304B\u3082\u3057\u308C\u307E\u305B\u3093\uFF08--limit ${WIKI_VERSIONS_MAX} \u307E\u3067\u5E83\u3052\u3089\u308C\u307E\u3059\uFF09\u3002`]:[`\u65B0\u3057\u3044\u9806\u306B ${WIKI_VERSIONS_MAX}\
56
+ \u4EF6\uFF08\u30B5\u30FC\u30D0\u306E\u4E0A\u9650\uFF09\u3092\u51FA\u3057\u307E\u3057\u305F\u3002\u3053\u308C\u3088\u308A\u53E4\u3044\u7248\u306F\u4E00\u89A7\u3067\u304D\u307E\u305B\u3093\uFF08\u7248\u756A\u53F7\u304C\u5206\u304B\u308C\u3070 twp wiki version \u3067\u8AAD\u3081\u307E\u3059\uFF09\u3002`]}};function versionRecord(body){const row=isRecord(body)&&body["result"]===true?body["version"]:void 0;if(!isRecord(row)||typeof row["version"]!=="number"){throw new ApiResponseError(`${WIKI_LABEL}\
57
+ \u306E\u7248\u306E\u5FDC\u7B54\u306B version \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return row}var WIKI_VERSION_USAGE="twp wiki version <\u30DA\u30FC\u30B8ID> <\u7248>";function versionPlan(id,version){return{method:"GET",path:`${WIKI_PATH}/${encodeURIComponent(id)}/versions/${version}`}}var wikiVersion={name:"version",summary:`${WIKI_LABEL}\u306E\u904E\u53BB\u306E\u72481\u3064\u3092\u8868\u793A\u3059\u308B\uFF08--output text \u3067\u672C\u6587\u3092\u8AAD\u3080\uFF09`,
58
+ usage:WIKI_VERSION_USAGE,description:`${TEXT_OUTPUT_HELP}
59
+
60
+ --output table / tsv \u306F\u8981\u7D04\u5217\uFF08${["page_id",...WIKI_VERSION_COLUMNS].join(" / ")}\uFF09\u3067\u3059\u3002\u7248\u306E\u756A\u53F7\u306F twp wiki versions \u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002`,flags:[],plan(input){const{id,rest}=pageIdAndRest(input,WIKI_VERSION_USAGE);if(rest.length!==1)throw new UsageError("\u30DA\u30FC\u30B8 ID \u3068\u7248\u30921\u3064\u305A\u3064\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044",WIKI_VERSION_USAGE);return versionPlan(id,versionNumber(
61
+ rest[0],WIKI_VERSION_USAGE))},summarize:body=>pick(versionRecord(body),["page_id",...WIKI_VERSION_COLUMNS]),raw:versionRecord,document(body){const v=versionRecord(body);return composeDocument(v["title"],[...metaLine("\u7248",v["version"]),...metaLine("\u5F62\u5F0F",v["content_format"]),...metaLine("\u5909\u66F4",v["changed_at"]),...metaLine("\u5909\u66F4\u8005",v["changed_by_name"]),...metaLine("\u30DA\u30FC\u30B8ID",v["page_id"])],[{body:wikiContentToText(v["content"],v["content_format"])}])}};
62
+ var WIKI_DIFF_USAGE="twp wiki diff <\u30DA\u30FC\u30B8ID> <\u72481> [<\u72482>]";function diffArgs(input){const{id,rest}=pageIdAndRest(input,WIKI_DIFF_USAGE);if(rest.length<1||rest.length>2)throw new UsageError("\u6BD4\u3079\u308B\u7248\u30921\u3064\u304B2\u3064\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u72482\u3092\u7701\u304F\u3068\u3044\u307E\u306E\u7248\u3068\u6BD4\u3079\u307E\u3059\uFF09",WIKI_DIFF_USAGE);const from=versionNumber(rest[0],WIKI_DIFF_USAGE);const to=rest[1]===void 0?
63
+ void 0:versionNumber(rest[1],WIKI_DIFF_USAGE);return{id,from,to}}function diffSide(row,changedAt,changedBy){return{version:row["version"]??null,title:row["title"]??null,changed_at:row[changedAt]??null,changed_by_name:row[changedBy]??null,text:comparableText(row["content"],row["content_format"])}}var SIGNED_IMAGE=/(!\[[^\]\n]*\]\()([^)\s?]*)\?[^)\s]*\)/g;function comparableText(content,format){const text2=wikiContentToText(content,format).replace(SIGNED_IMAGE,"$1$2)");return`${text2.trimEnd()}
64
+ `}var DIFF_CONTEXT=3;function collapseUnchanged(lines){const out=[];let run=[];const flush=(atStart,atEnd)=>{const head=atStart?0:DIFF_CONTEXT;const tail=atEnd?0:DIFF_CONTEXT;if(run.length>head+tail+1){for(const l of run.slice(0,head))out.push(` ${String(l["text"])}`);out.push(` \u22EF ${run.length-head-tail} \u884C\u7701\u7565`);for(const l of run.slice(run.length-tail))out.push(` ${String(l["text"])}`)}else{for(const l of run)out.push(` ${String(l["text"])}`)}run=[]};let seenChange=false;for(const line of lines){
65
+ if(line["sign"]===" "){run.push(line);continue}flush(!seenChange,false);seenChange=true;out.push(`${String(line["sign"])} ${String(line["text"])}`)}flush(!seenChange,true);return out}function diffBody(body){if(!isRecord(body)||!Array.isArray(body["lines"]))throw new ApiResponseError(`${WIKI_LABEL}\u306E\u5DEE\u5206\u3092\u7D44\u307F\u7ACB\u3066\u3089\u308C\u307E\u305B\u3093\u3067\u3057\u305F\u3002`);return body}function sideLabel(side){const s=isRecord(side)?side:{};return`\u7248 ${String(s["ver\
66
+ sion"]??"?")}\uFF08${String(s["changed_at"]??"\u65E5\u6642\u4E0D\u660E")}${typeof s["changed_by_name"]==="string"?`\u30FB${s["changed_by_name"]}`:""}\uFF09`}var wikiDiff={name:"diff",summary:`${WIKI_LABEL}\u306E2\u3064\u306E\u7248\u306E\u672C\u6587\u306E\u5DEE\u5206\u3092\u51FA\u3059\uFF08\u72482\u3092\u7701\u304F\u3068\u3044\u307E\u306E\u7248\u3068\u6BD4\u3079\u308B\uFF09`,usage:WIKI_DIFF_USAGE,description:"2\u3064\u306E\u7248\u3092\u53D6\u5F97\u3057\u3001\u672C\u6587\u3092\u5E73\u6587\u306B\u3057\u3066\u304B\u3089\u884C\u5358\u4F4D\u3067\u6BD4\u3079\u307E\u3059\uFF08HTML \u306E\u30BF\u30B0\u3060\u3051\u306E\u9055\u3044\u306F\u51FA\u307E\u305B\u3093\uFF09\u3002\u4EF6\u540D\u304C\u9055\u3048\u3070\u4EF6\u540D\u306E\u9055\u3044\u3082\u51FA\u3057\u307E\u3059\u3002\n<\u72482> \u3092\u7701\u304F\u3068\u3001\u3044\u307E\u306E\u30DA\u30FC\u30B8\uFF08twp w\
67
+ iki get \u306E version\uFF09\u3068\u6BD4\u3079\u307E\u3059\u3002\n\n--output text \u306F `- ` \u304C\u72481\u306B\u3060\u3051\u3042\u308B\u884C\u3001`+ ` \u304C\u72482\u306B\u3060\u3051\u3042\u308B\u884C\u306E\u5DEE\u5206\u3067\u3059\uFF08\u5909\u308F\u3089\u306A\u3044\u90E8\u5206\u306F\u524D\u5F8C3\u884C\u3092\u6B8B\u3057\u3066\u7701\u7565\uFF09\u3002--output json / table / tsv \u306F\u7701\u7565\u305B\u305A\u5168\u884C\u3092\u51FA\u3057\u307E\u3059\u3002\n\u753B\u50CF\u306E URL \u306F\u53D6\u5F97\u306E\u305F\u3073\u306B\u7F72\u540D\u3057\u76F4\u3055\u308C\u308B\u306E\u3067\u3001\u30AF\u30A8\u30EA\u3092\u843D\u3068\u3057\u3066\u304B\u3089\u6BD4\u3079\u307E\u3059\u3002\n--output json \u306F {page_id, from, to, title_changed, added, removed, lines: [{sign, text}]} \u3067\u3059\uFF08from / to \u306F\u7248\u30FB\u4EF6\u540D\u30FB\u5909\u66F4\u65E5\u6642\u30FB\u5909\u66F4\u8005\uFF09\u3002",
68
+ flags:[],plan(input){const{id,from}=diffArgs(input);return versionPlan(id,from)},plannedNotes(input){const{id,to}=diffArgs(input);return[`\u7D9A\u3051\u3066${to===void 0?`\u3044\u307E\u306E\u30DA\u30FC\u30B8\uFF08GET ${WIKI_PATH}/${id}\uFF09`:`\u7248 ${to}\uFF08GET ${WIKI_PATH}/${id}/versions/${to}\uFF09`}\u3092\u53D6\u5F97\u3057\u3001CLI \u3067\u5DEE\u5206\u3092\u51FA\u3057\u307E\u3059\u3002`]},async execute(input,ctx){const{id,from,to}=diffArgs(input);const a=diffSide(versionRecord(await ctx.send(
69
+ versionPlan(id,from))),"changed_at","changed_by_name");const b=to===void 0?diffSide(record(await ctx.send({method:"GET",path:`${WIKI_PATH}/${encodeURIComponent(id)}`}),"page",WIKI_LABEL),"updated_at","updated_by_name"):diffSide(versionRecord(await ctx.send(versionPlan(id,to))),"changed_at","changed_by_name");const lines=a.text===b.text?[]:buildDiffLines(a.text,b.text,Number.POSITIVE_INFINITY);const{added,removed}=diffStat(lines);const meta=side=>({version:side.version,title:side.title,changed_at:side.
70
+ changed_at,changed_by_name:side.changed_by_name});return{page_id:id,from:meta(a),to:meta(b),title_changed:a.title!==b.title,added,removed,lines}},summarize:body=>diffBody(body)["lines"],raw:diffBody,document(body){const d=diffBody(body);const from=isRecord(d["from"])?d["from"]:{};const to=isRecord(d["to"])?d["to"]:{};const out=[`--- ${sideLabel(from)}`,`+++ ${sideLabel(to)}`];if(d["title_changed"]===true)out.push(`\u4EF6\u540D: ${oneLine(String(from["title"]??""))} \u2192 ${oneLine(String(to["ti\
71
+ tle"]??""))}`);const lines=d["lines"];if(lines.length===0){out.push("\u672C\u6587\u306B\u5DEE\u5206\u306F\u3042\u308A\u307E\u305B\u3093\u3002")}else{out.push(...collapseUnchanged(lines.filter(isRecord)));out.push(`\uFF08+${String(d["added"])} / -${String(d["removed"])} \u884C\uFF09`)}return`${out.join("\n")}
72
+ `}};var wikiBacklinks={name:"backlinks",summary:`${WIKI_LABEL}\u3078\u30EA\u30F3\u30AF\u3057\u3066\u3044\u308B\u30DA\u30FC\u30B8\u3092\u51FA\u3059\uFF08\u30EA\u30F3\u30AF\u5468\u8FBA\u306E\u672C\u6587\u306E\u629C\u7C8B\u3064\u304D\uFF09`,usage:"twp wiki backlinks <\u30DA\u30FC\u30B8ID>",description:`\u540C\u3058\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u4E2D\u3067\u3001\u3053\u306E\u30DA\u30FC\u30B8\u3078\u30EA\u30F3\u30AF\u3057\u3066\u3044\u308B\u30DA\u30FC\u30B8\u3092\u66F4\u65B0\u306E\u65B0\u3057\u3044\u9806\u306B\u51FA\u3057\u307E\u3059\u3002link_context \u306F\u30EA\u30F3\u30AF\u306E\u524D\u5F8C\u306E\u672C\u6587\u306E\u629C\u7C8B\u3067\u3059\u3002
73
+ \u898B\u3048\u306A\u3044\u4E0B\u66F8\u304D\uFF08\u4ED6\u4EBA\u306E\u4E0B\u66F8\u304D\u3068\u3001\u305D\u306E\u914D\u4E0B\u306E\u30DA\u30FC\u30B8\uFF09\u304B\u3089\u306E\u30EA\u30F3\u30AF\u306F\u51FA\u307E\u305B\u3093\uFF08\u30B5\u30FC\u30D0\u306E\u5224\u5B9A\uFF09\u3002
74
+
75
+ --output table / text / tsv \u306F\u8981\u7D04\u5217\uFF08${WIKI_BACKLINK_COLUMNS.join(" / ")}\uFF09\u3001--output json \u306F\u30DA\u30FC\u30B8\u306E\u5168\u30D5\u30A3\u30FC\u30EB\u30C9\uFF08\u672C\u6587 content \u3092\u542B\u3080\uFF09\u3067\u3059\u3002`,flags:[],plan:input=>({method:"GET",path:`${WIKI_PATH}/${encodeURIComponent(singleId(input,"twp wiki backlinks","\u30DA\u30FC\u30B8","twp wiki list"))}/backlinks`}),summarize:body=>arrayField(body,"backlinks",`${WIKI_LABEL}\u306E\u88AB\u30EA\u30F3\u30AF`).
76
+ map(row=>pick(row,WIKI_BACKLINK_COLUMNS)),raw:body=>arrayField(body,"backlinks",`${WIKI_LABEL}\u306E\u88AB\u30EA\u30F3\u30AF`)};function linkedTaskRow(row){const link=isRecord(row)?row:{};const task=isRecord(link["task"])?link["task"]:{};return pick({...link,key:task["key"],subject:task["subject"],status_id:task["status_id"]},WIKI_LINKED_TASK_COLUMNS)}var wikiLinkedTasks={name:"linked-tasks",summary:`${WIKI_LABEL}\u306B\u7D10\u3065\u3044\u3066\u3044\u308B\u30BF\u30B9\u30AF\u3092\u51FA\u3059`,usage:"\
77
+ twp wiki linked-tasks <\u30DA\u30FC\u30B8ID>",description:`\u30BF\u30B9\u30AF\u5074\u304B\u3089\u3053\u306E\u30DA\u30FC\u30B8\u3078\u5F35\u3063\u305F\u95A2\u9023\u4ED8\u3051\u3092\u51FA\u3057\u307E\u3059\u3002\u95B2\u89A7\u6A29\u9650\u306E\u7121\u3044\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30BF\u30B9\u30AF\u3068\u3001\u524A\u9664\u6E08\u307F\u306E\u30BF\u30B9\u30AF\u306F\u51FA\u307E\u305B\u3093\uFF08\u30B5\u30FC\u30D0\u306E\u5224\u5B9A\uFF09\u3002
78
+ status_id \u306F\u30BF\u30B9\u30AF\u306E\u30B9\u30C6\u30FC\u30BF\u30B9\u306E ID \u3067\u3059\uFF08\u540D\u524D\u306F twp task status list \u3067\u5F15\u3051\u307E\u3059\uFF09\u3002
79
+
80
+ --output table / text / tsv \u306F\u8981\u7D04\u5217\uFF08${WIKI_LINKED_TASK_COLUMNS.join(" / ")}\uFF09\u3001--output json \u306F\u30EA\u30F3\u30AF\u306E\u5168\u30D5\u30A3\u30FC\u30EB\u30C9\uFF08task \u306E\u5165\u308C\u5B50\u3092\u542B\u3080\uFF09\u3067\u3059\u3002`,flags:[],plan:input=>({method:"GET",path:`${WIKI_PATH}/${encodeURIComponent(singleId(input,"twp wiki linked-tasks","\u30DA\u30FC\u30B8","twp wiki list"))}/linked-tasks`}),summarize:body=>arrayField(body,"linked_tasks",`${WIKI_LABEL}\
81
+ \u306E\u95A2\u9023\u30BF\u30B9\u30AF`).map(linkedTaskRow),raw:body=>arrayField(body,"linked_tasks",`${WIKI_LABEL}\u306E\u95A2\u9023\u30BF\u30B9\u30AF`)};var WIKI_CONTENT_MAX_CHARS=4e5;var WIKI_TITLE_MAX_CHARS=255;var WIKI_TAG_MAX_CHARS=50;var WIKI_CREATE_USAGE="twp wiki create --project <\u30B3\u30FC\u30C9|ID> --title <\u4EF6\u540D> --content-file <\u30D1\u30B9|-> [--content-format <html|markdown>] [--parent <\u30DA\u30FC\u30B8ID>] [--status <draft|published>] [--tag <\u30BF\u30B0>]...";var WIKI_UPDATE_USAGE="\
82
+ twp wiki update <\u30DA\u30FC\u30B8ID> [--title <\u4EF6\u540D>] [--content-file <\u30D1\u30B9|->] [--content-format <html|markdown>] [--status <draft|published>] [--tag <\u30BF\u30B0>]... [--clear-tags] [--if-version <\u7248>]";var WIKI_MOVE_USAGE="twp wiki move <\u30DA\u30FC\u30B8ID> [--parent <\u30DA\u30FC\u30B8ID>|root] [--sort-order <\u9806>]";var CONTENT_FILE_FLAG={name:"--content-file",summary:"\u672C\u6587\u3092\u8AAD\u3080\u30D5\u30A1\u30A4\u30EB\uFF08- \u3067\u6A19\u6E96\u5165\u529B\uFF09\u3002\u52A0\u5DE5\u305B\u305A\u306B\u9001\u308B",
83
+ takesValue:true,placeholder:"<\u30D1\u30B9|->"};var WIKI_CONTENT_FORMAT_FLAG={name:"--content-format",summary:`\u672C\u6587\u306E\u5F62\u5F0F\uFF08${WIKI_CONTENT_FORMATS.join(" / ")}\uFF09`,takesValue:true,placeholder:"<\u5F62\u5F0F>"};var WIKI_STATUS_FLAG={name:"--status",summary:`\u72B6\u614B\uFF08${WIKI_STATUSES.join(" / ")}\uFF09`,takesValue:true,placeholder:"<\u72B6\u614B>"};var WIKI_TAG_FLAG={name:"--tag",summary:`\u30BF\u30B0\uFF08\u8907\u6570\u56DE\u53EF\u30FB${WIKI_TAG_MAX_CHARS}\u6587\u5B57\u4EE5\u5185\uFF09`,
40
84
  takesValue:true,placeholder:"<\u30BF\u30B0>",repeatable:true};var WIKI_WRITE_HELP="\u672C\u6587\u306F --content-file \u306E\u30D5\u30A1\u30A4\u30EB\uFF08- \u3067\u6A19\u6E96\u5165\u529B\uFF09\u304B\u3089\u8AAD\u307F\u3001\u52A0\u5DE5\u305B\u305A\u306B\u9001\u308A\u307E\u3059\uFF08\u5148\u982D\u306E BOM \u3060\u3051\u843D\u3068\u3057\u307E\u3059\uFF09\u3002\n\u672C\u6587\u306E\u5F62\u5F0F\u306F --content-format\uFF08html / markdown\uFF09\u3067\u6307\u5B9A\u3057\u307E\u3059\u3002\u7701\u304F\u3068 HTML \u306E\u30DA\u30FC\u30B8\u306B\u306A\u308A\u307E\u3059\uFF08\u30B5\u30FC\u30D0\u306E\u65E2\u5B9A\uFF09\u3002\nMarkdown \u306E\u672C\u6587\u306F --content-format markdown \u3067\u9001\u3063\u3066\u304F\u3060\u3055\u3044\u3002HTML \u306E\u30DA\u30FC\u30B8\u306B Markdown \u3092\u9001\u3063\u3066\u3082\u5909\u63DB\u3057\u306A\u3044\u306E\u3067\u3001\u753B\u9762\u3067\u306F\u8A18\u53F7\u306E\u307E\u307E\u8868\u793A\u3055\u308C\u307E\u3059\u3002\n\u30DA\u30FC\u30B8\u306E\u5F62\u5F0F\u306F\u4F5C\u6210\u5F8C\u306B\u5909\u3048\u3089\u308C\u307E\u305B\u3093\uFF08update \u3067\u9055\u3046\u5F62\u5F0F\u3092\u6307\u5B9A\u3059\u308B\u3068\u30B5\u30FC\u30D0\u304C\u65AD\u308A\u307E\u3059\uFF09\u3002\n\u7DE8\u96C6\u30FB\u79FB\u52D5\u30FB\u524A\u9664\u3067\u304D\u308B\u306E\u306F\u3001\u30DA\u30FC\u30B8\u306E\u4F5C\u6210\u8005\u30FBwiki \u306E\u7BA1\u7406\u8005\u30FB\u7D44\u7E54\u306E\u7BA1\u7406\u8005\u3067\u3059\uFF08\u6A29\u9650\u304C\u7121\u3051\u308C\u3070\u30B5\u30FC\u30D0\u306E 403 \u306E\u6587\u9762\u3092\u305D\u306E\u307E\u307E\u51FA\u3057\u307E\u3059\uFF09\u3002";
41
85
  async function wikiContent(input,usage){return readBody(input,{flag:"--content",fileFlag:"--content-file",label:"wiki \u306E\u672C\u6587",maxChars:WIKI_CONTENT_MAX_CHARS,usage})}function wikiTitle(input){const raw=input.flags.get("--title");if(raw===void 0)return void 0;if(raw.trim()==="")throw new UsageError("--title \u304C\u7A7A\u3067\u3059","\u4EF6\u540D\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002");const count=charCount(raw);if(count>WIKI_TITLE_MAX_CHARS){throw new UsageError(
42
86
  `--title \u304C\u9577\u3059\u304E\u307E\u3059\uFF08${count} \u6587\u5B57\u30FB\u4E0A\u9650 ${WIKI_TITLE_MAX_CHARS} \u6587\u5B57\uFF09`,"\u30B5\u30FC\u30D0\u306E\u4E0A\u9650\u304C255\u6587\u5B57\u3067\u3059\u3002")}return raw}function wikiTags(input){const tags=repeatedValues(input,"--tag").map(tag=>tag.trim());const clear=input.flags.has("--clear-tags");if(clear&&tags.length>0){throw new UsageError("--tag \u3068 --clear-tags \u306F\u4F75\u7528\u3067\u304D\u307E\u305B\u3093","--tag \u306F\u30BF\u30B0\u3092\u307E\u308B\u3054\u3068\u7F6E\u304D\u63DB\u3048\u307E\u3059\
@@ -121,5 +165,5 @@ ine"]],["\u72B6\u614B",status]])}`]}).join("\n")}function attendeeNames(value,ke
121
165
 
122
166
  --output table / tsv \u306F\u8981\u7D04\u5217\uFF08${MEETING_GET_COLUMNS.join(" / ")}\uFF09\u3067\u3059\u3002
123
167
  \u95B2\u89A7\u3067\u304D\u306A\u3044\u8B70\u4E8B\u9332\u306F\u300C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u300D\u306B\u306A\u308A\u307E\u3059\uFF08\u516C\u958B\u7BC4\u56F2\u306E\u5224\u5B9A\u306F\u30B5\u30FC\u30D0\uFF09\u3002`,flags:[],plan:input=>({method:"GET",path:`${MEETINGS_PATH}/${encodeURIComponent(singleId(input,"twp meeting get","\u8B70\u4E8B\u9332","twp meeting list"))}`}),summarize:body=>pick(record(body,"meeting",MEETING_LABEL),MEETING_GET_COLUMNS),raw:body=>record(body,"meeting",
124
- MEETING_LABEL),document:meetingDocument};var wikiDomain={name:"wiki",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E wiki\uFF08\u4E00\u89A7\u30FB\u672C\u6587\u3092\u8AAD\u3080\u30FB\u4F5C\u6210\u30FB\u66F4\u65B0\u30FB\u79FB\u52D5\u30FB\u524A\u9664\uFF09",operations:[wikiList,wikiGet,wikiCreate,wikiUpdate,wikiMove,wikiDelete]};var noteDomain={name:"note",summary:"\u30CE\u30FC\u30C8\uFF08\u4E00\u89A7\u30FB\u672C\u6587\u3092\u8AAD\u3080\uFF09",operations:[noteList,noteGet]};var meetingDomain={name:"\
125
- meeting",summary:"\u8B70\u4E8B\u9332\uFF08\u671F\u9593\u3067\u306E\u4E00\u89A7\u30FB\u672C\u6587\u3092\u8AAD\u3080\uFF09",operations:[meetingList,meetingGet]};export{meetingDomain,noteDomain,wikiDomain};
168
+ MEETING_LABEL),document:meetingDocument};var wikiDomain={name:"wiki",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E wiki\uFF08\u4E00\u89A7\u30FB\u672C\u6587\u30FB\u69CB\u9020\u30FB\u30BF\u30B0\u30FB\u7248\u306E\u5C65\u6B74\u3068\u5DEE\u5206\u30FB\u88AB\u30EA\u30F3\u30AF\u30FB\u95A2\u9023\u30BF\u30B9\u30AF\u30FB\u4F5C\u6210\u30FB\u66F4\u65B0\u30FB\u79FB\u52D5\u30FB\u524A\u9664\uFF09",operations:[wikiList,wikiGet,wikiTree,wikiTagList,wikiVersions,wikiVersion,wikiDiff,wikiBacklinks,wikiLinkedTasks,
169
+ wikiCreate,wikiUpdate,wikiMove,wikiDelete]};var noteDomain={name:"note",summary:"\u30CE\u30FC\u30C8\uFF08\u4E00\u89A7\u30FB\u672C\u6587\u3092\u8AAD\u3080\uFF09",operations:[noteList,noteGet]};var meetingDomain={name:"meeting",summary:"\u8B70\u4E8B\u9332\uFF08\u671F\u9593\u3067\u306E\u4E00\u89A7\u30FB\u672C\u6587\u3092\u8AAD\u3080\uFF09",operations:[meetingList,meetingGet]};export{meetingDomain,noteDomain,wikiDomain};
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{checkOutTarget}from"./chunk-3EATJTPN.js";import"./chunk-53D2WQQO.js";import"./chunk-Q3B65OFC.js";import"./chunk-GFLGXGWE.js";import"./chunk-YXVN6OCH.js";import"./chunk-UFGJSWKU.js";import{contentTypeFor,inspectLocalFile}from"./chunk-I4TR55UF.js";import{checkUploadQuota}from"./chunk-V64CGX7V.js";import{parseWaitOptions,waitUntilTerminal}from"./chunk-WVCEKC7V.js";import"./chunk-GY7KI5E5.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,
3
+ import{checkOutTarget}from"./chunk-JIGA6KKU.js";import"./chunk-S7IEZSPJ.js";import"./chunk-Q3B65OFC.js";import"./chunk-GFLGXGWE.js";import"./chunk-YXVN6OCH.js";import"./chunk-UFGJSWKU.js";import{contentTypeFor,inspectLocalFile}from"./chunk-I4TR55UF.js";import{checkUploadQuota}from"./chunk-V64CGX7V.js";import{parseWaitOptions,waitUntilTerminal}from"./chunk-WVCEKC7V.js";import"./chunk-GY7KI5E5.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,
4
4
  nonEmpty,positiveInteger,readEnvelopeCursor,shellQuote}from"./chunk-MI6HVYR2.js";import{repeatedValues}from"./chunk-RX5HWI4L.js";import{readBody}from"./chunk-6LSQCOCJ.js";import"./chunk-HNG6MF26.js";import{collapsesInUrlPath,isSafePathSegment}from"./chunk-HVZUXLQ4.js";import{ApiError}from"./chunk-JA5A6UJ2.js";import"./chunk-H4CDX4TX.js";import{requireResolved,singleRef,withResolved}from"./chunk-PS5QFKHB.js";import"./chunk-II5RVJQN.js";import{
5
5
  acknowledgement,isRecord,pick}from"./chunk-3ZRMMBP5.js";import{ApiRejectedError,ApiResponseError,NetworkError,UsageError,WaitTimeoutError}from"./chunk-VFPY2A23.js";import"./chunk-PECIBNFD.js";import"./chunk-XNLIEUAW.js";import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.js";import"./chunk-RZVI6PMW.js";import"./chunk-KDH3KWPO.js";import"./chunk-QQRJLH6B.js";import"./chunk-74BPZOKU.js";import"./chunk-UREA4ZIG.js";import"./chunk-NHYMHCAT.js";
6
6
  import"./chunk-VSJBJXZO.js";import crypto2 from"crypto";import fs2 from"fs";import path from"path";var SCOPE_PERSONAL="personal";var SCOPE_PROJECT="project";var UUID=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;var FORBIDDEN_NAME=/[/\\:*?"<>|]/;var NAME_MAX=255;var ROW_COLUMNS=["id","path","name","file_count","subfolder_count","parent_id","updated_at"];var TRASH_COLUMNS=["id","path","name","file_count","subfolder_count","parent_id","deleted_at"];function folderRows(raw){return raw.map(row=>{const id=row["id"];const name=row["name"];const parentId=row["parent_id"];if(typeof id!==
@@ -1,3 +1,3 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{loadDomain}from"./chunk-53D2WQQO.js";import"./chunk-VSJBJXZO.js";export{loadDomain};
3
+ import{loadDomain}from"./chunk-S7IEZSPJ.js";import"./chunk-VSJBJXZO.js";export{loadDomain};
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{isValidSkillName}from"./chunk-YJZT3UD3.js";import{apiExit,currentRevisionOf,errorDetail,pickNumber,printDiff,shellQuote,str}from"./chunk-A4LFG7MW.js";import"./chunk-VRBI2NPI.js";import{EXIT_API_CLIENT,EXIT_API_SERVER,EXIT_OK,EXIT_USAGE}from"./chunk-VFPY2A23.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";async function runRevisionCommand(deps,opts){const io={out:deps.out??(t=>void process.stdout.write(stripTerminalControls(t))),err:deps.err??(t=>void process.stderr.write(stripTerminalControls(t)))};if(opts.target==="skill"&&(opts.name===void 0||!isValidSkillName(opts.name))){io.err(`\u30B9\u30AD\u30EB\u540D\u304C\u4E0D\u6B63\u3067\u3059: ${opts.name??"\uFF08\u672A\u6307\u5B9A\uFF09"}\uFF08\u82F1\u5C0F\u6587\u5B57\u3067\u59CB\u307E\u308A\u3001\u82F1\u5C0F\u6587\u5B57\u30FB\u6570\u5B57\u30FB\u30CF\u30A4\u30D5\u30F3\u3060\u3051\u306E64\u6587\u5B57\u4EE5\u5185\uFF09
3
+ import{isValidSkillName}from"./chunk-RRHAX7RK.js";import{apiExit,currentRevisionOf,errorDetail,pickNumber,printDiff,shellQuote,str}from"./chunk-A4LFG7MW.js";import"./chunk-VRBI2NPI.js";import{EXIT_API_CLIENT,EXIT_API_SERVER,EXIT_OK,EXIT_USAGE}from"./chunk-VFPY2A23.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";async function runRevisionCommand(deps,opts){const io={out:deps.out??(t=>void process.stdout.write(stripTerminalControls(t))),err:deps.err??(t=>void process.stderr.write(stripTerminalControls(t)))};if(opts.target==="skill"&&(opts.name===void 0||!isValidSkillName(opts.name))){io.err(`\u30B9\u30AD\u30EB\u540D\u304C\u4E0D\u6B63\u3067\u3059: ${opts.name??"\uFF08\u672A\u6307\u5B9A\uFF09"}\uFF08\u82F1\u5C0F\u6587\u5B57\u3067\u59CB\u307E\u308A\u3001\u82F1\u5C0F\u6587\u5B57\u30FB\u6570\u5B57\u30FB\u30CF\u30A4\u30D5\u30F3\u3060\u3051\u306E64\u6587\u5B57\u4EE5\u5185\uFF09
4
4
  `);return EXIT_USAGE}const from=parseRevision(opts.from,"--from",io);const to=parseRevision(opts.to,"--to",io);const expected=parseRevision(opts.revision,"--revision",io);if(from===false||to===false||expected===false)return EXIT_USAGE;switch(opts.op){case"history":return history(deps.api,opts,io);case"diff":if(from===void 0){io.err("--from <\u7248> \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08--to \u3092\u7701\u304F\u3068\u3044\u307E\u306E\u7248\u3068\u6BD4\u3079\u307E\u3059\uFF09\n");
5
5
  return EXIT_USAGE}return diff(deps.api,opts,io,from,to);case"revert":if(to===void 0){io.err("--to <\u7248> \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u623B\u3059\u5148\u306E\u7248\u3002history \u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\uFF09\n");return EXIT_USAGE}if(expected!==void 0&&!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\u623B\u3057\u307E\u305B\u3093\uFF09\n");return EXIT_USAGE}
6
6
  return revert(deps.api,opts,io,to,expected)}}function parseRevision(v,flag,io){if(v===void 0)return void 0;if(!/^\d+$/.test(v)||Number(v)<1||!Number.isSafeInteger(Number(v))){io.err(`${flag} \u306F1\u4EE5\u4E0A\u306E\u6574\u6570\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${v}
@@ -1,4 +1,4 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{CURATED_PAGING_VOCABULARY,buildPrepareContext,checkOutTarget,exitCodeFor,fetchAllPages,outputValue,reportError,requiresYes,resolvePaging,runDomain}from"./chunk-3EATJTPN.js";import"./chunk-53D2WQQO.js";import"./chunk-Q3B65OFC.js";import"./chunk-GFLGXGWE.js";import"./chunk-YXVN6OCH.js";import"./chunk-UFGJSWKU.js";import"./chunk-MI6HVYR2.js";import"./chunk-RX5HWI4L.js";import"./chunk-HNG6MF26.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";
3
+ import{CURATED_PAGING_VOCABULARY,buildPrepareContext,checkOutTarget,exitCodeFor,fetchAllPages,outputValue,reportError,requiresYes,resolvePaging,runDomain}from"./chunk-JIGA6KKU.js";import"./chunk-S7IEZSPJ.js";import"./chunk-Q3B65OFC.js";import"./chunk-GFLGXGWE.js";import"./chunk-YXVN6OCH.js";import"./chunk-UFGJSWKU.js";import"./chunk-MI6HVYR2.js";import"./chunk-RX5HWI4L.js";import"./chunk-HNG6MF26.js";import"./chunk-HVZUXLQ4.js";import"./chunk-JA5A6UJ2.js";
4
4
  import"./chunk-H4CDX4TX.js";import"./chunk-II5RVJQN.js";import"./chunk-3ZRMMBP5.js";import"./chunk-VFPY2A23.js";import"./chunk-PECIBNFD.js";import"./chunk-XNLIEUAW.js";import"./chunk-J7QYPKVK.js";import"./chunk-4VZKNEVN.js";import"./chunk-RZVI6PMW.js";import"./chunk-KDH3KWPO.js";import"./chunk-QQRJLH6B.js";import"./chunk-74BPZOKU.js";import"./chunk-UREA4ZIG.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";export{CURATED_PAGING_VOCABULARY,buildPrepareContext,checkOutTarget,exitCodeFor,fetchAllPages,outputValue,reportError,requiresYes,resolvePaging,runDomain};
@@ -0,0 +1,86 @@
1
+ import { createRequire as __twpCreateRequire } from 'node:module';
2
+ const require = __twpCreateRequire(import.meta.url);
3
+ import{apiExit,currentRevisionOf,errorDetail,pickNumber,printDiff,readUtf8Strict,shellQuote,warnHiddenChars}from"./chunk-A4LFG7MW.js";import"./chunk-VRBI2NPI.js";import{EXIT_API_CLIENT,EXIT_API_SERVER,EXIT_FAILURE,EXIT_OK,EXIT_USAGE}from"./chunk-VFPY2A23.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";import*as fs from"fs";var SERVER_DEFAULTS={priority:"P3",order:50,catch_up:true,grace_minutes:120,max_attempts_per_window:2,safe_mode_ok:true,enabled:true,args:"",args_rotation:[],label:"",require_zero:[],required_platforms:[]};var SERVER_META_KEYS=new Set(["updated_by","updated_by_name","updated_at","revision"]);var CONFIG_KEYS=["max_per_cycle","gates","require_zero_statuses"];var FILE_TOP_KEYS=new Set(["schedules","config_meta",...CONFIG_KEYS]);var SCHEDULE_ID=/^[a-z0-9][a-z0-9._-]{0,63}$/;async function runScheduleDefCommand(deps,opts){
4
+ 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??((p,c)=>fs.writeFileSync(p,c,"utf8")),exists:deps.exists??(p=>fs.existsSync(p))};switch(opts.op){case"list":return list(deps.api,io);case"push":return push(deps.api,opts,io);case"delete":return remove(deps.api,opts,io);case"config":return opts.configOp==="push"?configPush(deps.api,opts,
5
+ io):configPull(deps.api,opts,io)}}async function list(api,io){const remote=await fetchRemote(api,io.err);if(typeof remote==="number")return remote;io.out(`\u5B9A\u7FA9 ${remote.schedules.length} \u4EF6\uFF08max_per_cycle=${JSON.stringify(remote.maxPerCycle??null)}\u30FB\u30B0\u30ED\u30FC\u30D0\u30EB\u8A2D\u5B9A revision ${remote.configRevision??"\u4E0D\u660E"}\uFF09
6
+ `);if(remote.schedules.length>0){io.out(["id","\u6709\u52B9","skill","\u5F15\u6570","\u767A\u706B\u306E\u6761\u4EF6","\u4EF6\u6570\u30B2\u30FC\u30C8","\u512A\u5148","revision","\u30E9\u30D9\u30EB"].join(" ")+"\n");for(const s of[...remote.schedules].sort((a,b)=>str(a["id"]).localeCompare(str(b["id"])))){io.out(row(s)+"\n")}}for(const w of remote.warnings)io.err(`\u26A0\uFE0F ${w}
7
+ `);if(remote.canWrite===false){io.err("\u3053\u306E\u30A2\u30AB\u30A6\u30F3\u30C8\u306F\u5B9A\u7FA9\u3092\u66F8\u304D\u8FBC\u3081\u307E\u305B\u3093\uFF08\u66F8\u304D\u8FBC\u307F\u306F\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u7BA1\u7406\u8005\u4EE5\u4E0A\uFF09\n")}return EXIT_OK}function row(s){const rotation=Array.isArray(s["args_rotation"])?s["args_rotation"]:[];const args=rotation.length>0?`${str(s["args"])}\uFF08\u30ED\u30FC\u30C6\u30FC\u30B7\u30E7\u30F3 ${rotation.length} \u4EF6\uFF09`:str(
8
+ s["args"]);const requireZero=Array.isArray(s["require_zero"])?s["require_zero"].map(String).join(","):str(s["require_zero"]);const fields=[str(s["id"]),s["enabled"]===false?"\u7121\u52B9":"\u6709\u52B9",str(s["skill"]),args,describeWhen(s["when"]),requireZero,str(s["priority"]),String(s["revision"]??""),str(s["label"])];return fields.map(f=>f.replace(/[\t\r\n]/g," ")).join(" ")}function describeWhen(when){const w=when&&typeof when==="object"?when:{};const type=str(w["type"]).toLowerCase()||"dail\
9
+ y";const after=str(w["after"])||"00:00";if(type==="daily")return`\u6BCE\u65E5 ${after}\u4EE5\u964D`;if(type==="weekly"){const days=Array.isArray(w["days"])&&w["days"].length>0?w["days"].map(String).join("/"):"mon";return`\u6BCE\u9031 ${days} ${after}\u4EE5\u964D`}if(type==="monthly")return`\u6BCE\u6708 ${String(w["day"]??1)}\u65E5 ${after}\u4EE5\u964D`;if(type==="interval")return`\u524D\u56DE\u304B\u3089${String(w["every_hours"]??24)}h\u7D4C\u904E`;return type}async function push(api,opts,io){const file=opts.
10
+ file??"";let expected;if(opts.revision!==void 0){const map=parseRevisionMap(opts.revision);if(map===null){io.err(`push \u306E --revision \u306F\u300C\u5B9A\u7FA9ID=\u756A\u53F7\u300D\u3092\u30AB\u30F3\u30DE\u3067\u533A\u5207\u3063\u3066\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u4F8B: daily-verify=3,new-one=0\uFF09: ${opts.revision}
11
+ `);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\u66F8\u304D\u8FBC\u307F\u307E\u305B\u3093\uFF09\n");return EXIT_USAGE}expected=map}const parsed=readJsonFile(file,io);if(parsed===null)return EXIT_USAGE;const defs=definitionsOf(parsed,file,io);if(defs===null)return EXIT_USAGE;if(!Array.isArray(parsed)&&typeof parsed==="object"&&CONFIG_KEYS.some(k=>k in parsed)){io.err("\uFF08\u30D5\
12
+ \u30A1\u30A4\u30EB\u306E\u30B0\u30ED\u30FC\u30D0\u30EB\u8A2D\u5B9A\u306F\u9001\u308A\u307E\u305B\u3093\u3002\u9001\u308B\u306B\u306F schedule config push \u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\uFF09\n")}const remote=await fetchRemote(api,io.err);if(typeof remote==="number")return remote;const plan=planOf(defs,remote.schedules);io.out(`push \u5BFE\u8C61: \u4F5C\u6210 ${plan.creates.length} \u4EF6 / \u66F4\u65B0 ${plan.updates.length} \u4EF6 / \u5909\u66F4\u306A\u3057 ${plan.unchanged} \u4EF6\
13
+
14
+ `);for(const d of plan.creates){io.out(` + ${str(d["id"])}
15
+ `);for(const line of JSON.stringify(payloadOf(d),null,2).split("\n"))io.out(` ${line}
16
+ `)}for(const u of plan.updates){io.out(` ~ ${str(u.def["id"])}\uFF08\u30B5\u30FC\u30D0 revision ${u.revision??"\u4E0D\u660E"}\uFF09
17
+ `);for(const f of u.fields){io.out(` ${f.key}: \u30B5\u30FC\u30D0=${JSON.stringify(f.server??null)} \u2192 \u30D5\u30A1\u30A4\u30EB=${JSON.stringify(f.file??null)}
18
+ `)}}for(const id of plan.onlyRemote)io.out(` ! \u30B5\u30FC\u30D0\u306B\u306E\u307F\u5B58\u5728\uFF08\u524A\u9664\u3057\u307E\u305B\u3093\uFF09: ${id}
19
+ `);if(plan.creates.length===0&&plan.updates.length===0){io.out("\u5DEE\u5206\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u66F8\u304D\u8FBC\u307F\u307E\u305B\u3093\u3067\u3057\u305F\u3002\n");return EXIT_OK}warnHiddenChars(io.out,JSON.stringify([...plan.creates,...plan.updates.map(u=>u.def)].map(payloadOf)));const shown=[...plan.creates.map(d=>`${str(d["id"])}=0`),...plan.updates.map(u=>`${str(u.def["id"])}=${u.revision??0}`)].join(",");if(!opts.yes){io.out(`
20
+ \u66F8\u304D\u8FBC\u3093\u3067\u3044\u307E\u305B\u3093\u3002\u3053\u306E\u5185\u5BB9\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\u3067\u66F4\u65B0\u3055\u308C\u305F\u5B9A\u7FA9\u304C\u3042\u308C\u30701\u4EF6\u3082\u66F8\u304B\u305A\u306B\u6B62\u307E\u308A\u307E\u3059\uFF09:
21
+ ${confirmCommand(opts,["push"],{file,revision:shown})}
22
+ `);return EXIT_USAGE}if(expected!==void 0){const planned=new Map([...plan.creates.map(d=>[str(d["id"]),0]),...plan.updates.map(u=>[str(u.def["id"]),u.revision??-1])]);const fileIds=new Set(defs.map(d=>str(d["id"])));const unseen=[...planned.keys()].filter(id=>!expected.has(id));const unknown=[...expected.keys()].filter(id=>!fileIds.has(id));if(unseen.length>0||unknown.length>0){io.err(`\u26D4 \u6848\u5185\u3057\u305F --revision \u3068\u3001\u3044\u307E\u306E\u5DEE\u5206\u306E\u5BFE\u8C61\u304C\u4E00\u81F4\u3057\u307E\u305B\u3093\uFF08\u8868\u793A\u3057\u305F\u5F8C\u306B\u30D5\u30A1\u30A4\u30EB\u304B\u30B5\u30FC\u30D0\u304C\u5909\u308F\u308A\u307E\u3057\u305F\uFF09\u30021\u4EF6\u3082\u66F8\u3044\u3066\u3044\u307E\u305B\u3093${unseen.
23
+ length>0?`\uFF0F\u6848\u5185\u306B\u7121\u3044: ${unseen.join(", ")}`:""}${unknown.length>0?`\uFF0F\u30D5\u30A1\u30A4\u30EB\u306B\u7121\u3044: ${unknown.join(", ")}`:""}
24
+ `);return EXIT_USAGE}const moved=[...planned.entries()].filter(([id,rev])=>expected.get(id)!==rev);if(moved.length>0){io.err("\u26D4 \u8868\u793A\u3057\u305F\u5F8C\u306B\u30B5\u30FC\u30D0\u3067\u66F4\u65B0\u3055\u308C\u305F\u5B9A\u7FA9\u304C\u3042\u308A\u307E\u3059\u3002\u4E0A\u66F8\u304D\u305B\u305A\u306B\u6B62\u3081\u307E\u3057\u305F\uFF081\u4EF6\u3082\u66F8\u3044\u3066\u3044\u307E\u305B\u3093\uFF09: "+moved.map(([id,rev])=>`${id}\uFF08\u6848\u5185 ${expected.get(id)} \u2192 \u73FE\u5728 ${rev}\
25
+ \uFF09`).join(", ")+"\n");return EXIT_API_CLIENT}}let failure=null;for(const d of plan.creates){const res=await api.request("POST","/schedules/definitions",payloadOf(d));if(res.ok){io.out(` \u4F5C\u6210: ${str(d["id"])}
26
+ `);continue}io.err(` \u26D4 \u4F5C\u6210\u3067\u304D\u307E\u305B\u3093 ${str(d["id"])}\uFF08${errorDetail(res)}\uFF09
27
+ `);if(res.status===401||res.status===403)return apiExit(res);failure??=apiExit(res)}for(const u of plan.updates){if(u.revision===null){io.err(` \u26D4 \u66F4\u65B0\u3067\u304D\u307E\u305B\u3093 ${str(u.def["id"])}\uFF08\u30B5\u30FC\u30D0\u306E\u5FDC\u7B54\u306B revision \u304C\u3042\u308A\u307E\u305B\u3093\uFF09
28
+ `);failure??=EXIT_API_SERVER;continue}const id=str(u.def["id"]);const res=await api.request("PUT",`/schedules/definitions/${encodeURIComponent(id)}`,{...payloadOf(u.def),revision:u.revision});if(res.ok){io.out(` \u66F4\u65B0: ${id}
29
+ `);continue}if(res.status===409){const now=currentRevisionOf(res);io.err(` \u26D4 409: ${id} \u306F revision ${u.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\u4E0A\u66F8\u304D\u305B\u305A\u306B\u6B62\u3081\u307E\u3057\u305F
30
+ `)}else{io.err(` \u26D4 \u66F4\u65B0\u3067\u304D\u307E\u305B\u3093 ${id}\uFF08${errorDetail(res)}\uFF09
31
+ `)}if(res.status===401||res.status===403)return apiExit(res);failure??=apiExit(res)}const after=await fetchRemote(api,io.err);if(typeof after==="number")return after;const rest=planOf(defs,after.schedules);const remaining=rest.creates.length+rest.updates.length;if(failure!==null||remaining>0){io.err(`\u26D4 \u53CD\u6620\u304C\u53CE\u675F\u3057\u3066\u3044\u307E\u305B\u3093\uFF08\u30D5\u30A1\u30A4\u30EB\u3068\u9055\u3046\u5B9A\u7FA9\u304C ${remaining} \u4EF6\u6B8B\u3063\u3066\u3044\u307E\u3059\uFF09\u3002\u4E0A\u306E\u7406\u7531\u3092\u89E3\u6D88\u3057\u3066\u3084\u308A\u76F4\u3057\u3066\u304F\u3060\u3055\u3044
32
+ `);return failure??EXIT_FAILURE}io.out(`\u53CD\u6620\u3057\u307E\u3057\u305F\uFF08\u4F5C\u6210 ${plan.creates.length} \u4EF6 / \u66F4\u65B0 ${plan.updates.length} \u4EF6\u30FB\u30D5\u30A1\u30A4\u30EB\u3068\u30B5\u30FC\u30D0\u306E\u5DEE\u52060\u3092\u78BA\u8A8D\uFF09
33
+ `);return EXIT_OK}function planOf(defs,server){const byId=new Map(server.map(s=>[str(s["id"]),s]));const plan={creates:[],updates:[],unchanged:0,onlyRemote:[]};const fileIds=new Set;for(const d of defs){const id=str(d["id"]);fileIds.add(id);const current=byId.get(id);if(current===void 0){plan.creates.push(d);continue}const a=comparable(current);const b=comparable(d);const keys=[...new Set([...Object.keys(a),...Object.keys(b)])].sort();const fields=keys.filter(k=>stableJson(a[k])!==stableJson(b[k])).
34
+ map(k=>({key:k,server:a[k],file:b[k]}));if(fields.length===0)plan.unchanged+=1;else plan.updates.push({def:d,revision:pickNumber(current,"revision"),fields})}plan.onlyRemote=[...byId.keys()].filter(id=>!fileIds.has(id)).sort();return plan}function comparable(def){const out={};for(const[k,v]of Object.entries(def)){if(k.startsWith("_")||SERVER_META_KEYS.has(k))continue;out[k]=v}for(const[k,v]of Object.entries(SERVER_DEFAULTS))if(!(k in out))out[k]=v;const when=out["when"];if(when&&typeof when==="o\
35
+ bject"&&!Array.isArray(when))out["when"]=normalizeWhen(when);return out}function normalizeWhen(when){const type=(typeof when["type"]==="string"?when["type"]:"daily").toLowerCase();if(!["daily","weekly","monthly","interval"].includes(type))return{...when,type};if(type==="interval")return{type,every_hours:when["every_hours"]??24};const out={type,after:typeof when["after"]==="string"?when["after"]:"00:00"};if(type==="weekly")out["days"]=Array.isArray(when["days"])?when["days"].map(d=>String(d).toLowerCase()):
36
+ [];if(type==="monthly"){const day=when["day"];out["day"]=typeof day==="string"&&/^\d+$/.test(day)?Number(day):day}return out}function payloadOf(def){const out={};for(const[k,v]of Object.entries(def)){if(k.startsWith("_")||SERVER_META_KEYS.has(k))continue;out[k]=v}return out}function definitionsOf(parsed,file,io){let list2;if(Array.isArray(parsed)){list2=parsed}else if(parsed&&typeof parsed==="object"&&"schedules"in parsed){const unknownKeys=Object.keys(parsed).filter(k=>!k.startsWith("_")&&!FILE_TOP_KEYS.
37
+ has(k));if(unknownKeys.length>0){io.err(`${file} \u306E\u30C8\u30C3\u30D7\u30EC\u30D9\u30EB\u306B\u77E5\u3089\u306A\u3044\u30AD\u30FC\u304C\u3042\u308A\u307E\u3059: ${unknownKeys.join(", ")}
38
+ `);return null}list2=parsed["schedules"]}else if(parsed&&typeof parsed==="object"&&"id"in parsed){list2=[parsed]}else{io.err(`${file} \u306B\u5B9A\u7FA9\u304C\u3042\u308A\u307E\u305B\u3093\uFF08{ "schedules": [...] }\u30FB\u5B9A\u7FA91\u4EF6\u30FB\u5B9A\u7FA9\u306E\u914D\u5217\u306E\u3044\u305A\u308C\u304B\uFF09
39
+ `);return null}if(!Array.isArray(list2)){io.err(`${file} \u306E schedules \u304C\u914D\u5217\u3067\u306F\u3042\u308A\u307E\u305B\u3093
40
+ `);return null}const seen=new Set;const out=[];for(const[i,d]of list2.entries()){if(!d||typeof d!=="object"||Array.isArray(d)){io.err(`${file} \u306E ${i+1} \u4EF6\u76EE\u304C\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3067\u306F\u3042\u308A\u307E\u305B\u3093
41
+ `);return null}const id=d["id"];if(typeof id!=="string"||!SCHEDULE_ID.test(id)){io.err(`${file} \u306E ${i+1} \u4EF6\u76EE\u306E id \u304C\u4E0D\u6B63\u3067\u3059\uFF08\u82F1\u5C0F\u6587\u5B57\u30FB\u6570\u5B57\u30FB. _ - \u306E64\u5B57\u4EE5\u5185\uFF09: ${JSON.stringify(id??null)}
42
+ `);return null}if(seen.has(id)){io.err(`${file} \u306B\u540C\u3058 id \u304C2\u56DE\u3042\u308A\u307E\u3059: ${id}
43
+ `);return null}seen.add(id);out.push(d)}if(out.length===0){io.err(`${file} \u306B\u5B9A\u7FA9\u304C1\u4EF6\u3082\u3042\u308A\u307E\u305B\u3093
44
+ `);return null}return out}async function remove(api,opts,io){const id=opts.id??"";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}
45
+ `);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\u524A\u9664\u3057\u307E\u305B\u3093\uFF09\n");return EXIT_USAGE}expected=Number(opts.revision)}if(!SCHEDULE_ID.test(id)){io.err(`\u5B9A\u7FA9ID\u306E\u5F62\u304C\u4E0D\u6B63\u3067\u3059\uFF08\u82F1\u5C0F\u6587\u5B57\u30FB\u6570\u5B57\u30FB. _ - \u306E64\u5B57\u4EE5\u5185\uFF09: ${id}
46
+ `);return EXIT_USAGE}const remote=await fetchRemote(api,io.err);if(typeof remote==="number")return remote;const current=remote.schedules.find(s=>str(s["id"])===id);if(current===void 0){io.err(`\u5B9A\u7FA9 ${id} \u306F\u30B5\u30FC\u30D0\u306B\u3042\u308A\u307E\u305B\u3093\uFF08\u524A\u9664\u3059\u308B\u3082\u306E\u306F\u3042\u308A\u307E\u305B\u3093\uFF09
47
+ `);return EXIT_FAILURE}const revision=pickNumber(current,"revision");if(revision===null){io.err(`\u26D4 \u5B9A\u7FA9 ${id} \u306E revision \u3092\u8AAD\u3081\u307E\u305B\u3093\uFF08\u5FDC\u7B54\u306E\u5F62\u304C\u5951\u7D04\u3068\u9055\u3044\u307E\u3059\uFF09
48
+ `);return EXIT_API_SERVER}io.out(`\u524A\u9664\u5BFE\u8C61\uFF08revision ${revision}\uFF09:
49
+ ${row(current)}
50
+ `);if(!opts.yes){io.out(`
51
+ \u524A\u9664\u3057\u3066\u3044\u307E\u305B\u3093\u3002\u524A\u9664\u3059\u308B\u3068\u3053\u306E\u67A0\u306F\u767A\u706B\u3057\u306A\u304F\u306A\u308A\u3001\u5B9A\u7FA9\u306F\u623B\u305B\u307E\u305B\u3093\uFF08\u6B62\u3081\u308B\u3060\u3051\u306A\u3089 enabled: false \u3092 push \u3057\u3066\u304F\u3060\u3055\u3044\uFF09\u3002\u524A\u9664\u3059\u308B\u306B\u306F\u6B21\u3092\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044\uFF08revision ${revision} \u3092\u9001\u308B\u306E\u3067\u3001\u305D\u306E\u5F8C\u30B5\u30FC\u30D0\u3067\u66F4\u65B0\u3055\u308C\u3066\u3044\u308C\u3070 409 \u3067\u6B62\u307E\u308A\u307E\u3059\uFF09:
52
+ ${confirmCommand(opts,["delete",id],{revision})}
53
+ `);return EXIT_USAGE}const sent=expected??revision;const res=await api.request("DELETE",`/schedules/definitions/${encodeURIComponent(id)}?revision=${sent}`);if(!res.ok){if(res.status===409){const now=currentRevisionOf(res);io.err(`\u26D4 409: revision ${sent} \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\u524A\u9664\u305B\u305A\u306B\u6B62\u3081\u307E\u3057\u305F\uFF08\u5185\u5BB9\u3092\u78BA\u8A8D\u3057\u3066\u304B\u3089\u3084\u308A\u76F4\u3057\u3066\u304F\u3060\u3055\u3044\uFF09
54
+ `)}else{io.err(`\u26D4 \u5B9A\u7FA9\u3092\u524A\u9664\u3067\u304D\u307E\u305B\u3093\uFF08${errorDetail(res)}\uFF09
55
+ `)}return apiExit(res)}io.out(`\u524A\u9664\u3057\u307E\u3057\u305F: ${id}
56
+ `);return EXIT_OK}function configJson(remote){const obj={max_per_cycle:remote.maxPerCycle??null,gates:remote.gates??[],require_zero_statuses:remote.requireZeroStatuses??{}};return JSON.stringify(obj,null,2)+"\n"}async function configPull(api,opts,io){const remote=await fetchRemote(api,io.err);if(typeof remote==="number")return remote;const content=configJson(remote);if(opts.out===void 0){io.out(content);return EXIT_OK}const target=opts.out;if(io.exists(target)){let local;try{local=io.readFile(target)}catch(e){
57
+ io.err(`\u65E2\u5B58\u30D5\u30A1\u30A4\u30EB\u3092\u8AAD\u3081\u307E\u305B\u3093: ${target}\uFF08${e.message}\uFF09
58
+ `);return EXIT_FAILURE}if(local===content){io.out(`${target} \u306F\u30B5\u30FC\u30D0\uFF08revision ${remote.configRevision??"\u4E0D\u660E"}\uFF09\u3068\u540C\u3058\u3067\u3059\u3002\u5909\u66F4\u3057\u307E\u305B\u3093\u3067\u3057\u305F\u3002
59
+ `);return EXIT_OK}printDiff(io.out,target,`\u30B5\u30FC\u30D0\uFF08revision ${remote.configRevision??"\u4E0D\u660E"}\uFF09`,local,content);if(!opts.yes){io.out(`
60
+ ${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
61
+ `);return EXIT_USAGE}}try{io.writeFile(target,content)}catch(e){io.err(`\u66F8\u304D\u8FBC\u3081\u307E\u305B\u3093: ${target}\uFF08${e.message}\uFF09
62
+ `);return EXIT_FAILURE}io.out(`${target} \u306B\u5C55\u958B\u3057\u307E\u3057\u305F\uFF08revision ${remote.configRevision??"\u4E0D\u660E"}\uFF09\u3002
63
+ `);return EXIT_OK}async function configPush(api,opts,io){const file=opts.file??"";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}
64
+ `);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 parsed=readJsonFile(file,io);if(parsed===null)return EXIT_USAGE;if(Array.isArray(parsed)||typeof parsed!=="object"){io.err(`${file} \u306F\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\uFF08{ "max_per_cycle": \u2026, "gates": [...] }\uFF09\u3067\u306F\u3042\u308A\u307E\u305B\u3093
65
+ `);return EXIT_USAGE}const local=parsed;const unknownKeys=Object.keys(local).filter(k=>!k.startsWith("_")&&!FILE_TOP_KEYS.has(k));if(unknownKeys.length>0){io.err(`${file} \u306E\u30C8\u30C3\u30D7\u30EC\u30D9\u30EB\u306B\u77E5\u3089\u306A\u3044\u30AD\u30FC\u304C\u3042\u308A\u307E\u3059: ${unknownKeys.join(", ")}
66
+ `);return EXIT_USAGE}if(!("max_per_cycle"in local)){io.err(`${file} \u306B max_per_cycle \u304C\u3042\u308A\u307E\u305B\u3093\uFF08\u30B0\u30ED\u30FC\u30D0\u30EB\u8A2D\u5B9A\u306E\u5FC5\u9808\u9805\u76EE\u3067\u3059\uFF09
67
+ `);return EXIT_USAGE}const remote=await fetchRemote(api,io.err);if(typeof remote==="number")return remote;if(remote.configRevision===null){io.err("\u26D4 \u30B0\u30ED\u30FC\u30D0\u30EB\u8A2D\u5B9A\u306E revision \u3092\u8AAD\u3081\u307E\u305B\u3093\uFF08\u5FDC\u7B54\u306E config_meta.revision \u304C\u7121\u3044\uFF09\n");return EXIT_API_SERVER}const body={max_per_cycle:local["max_per_cycle"],gates:"gates"in local?local["gates"]:remote.gates??[]};if("require_zero_statuses"in local)body["require_z\
68
+ ero_statuses"]=local["require_zero_statuses"];const kept=CONFIG_KEYS.filter(k=>!(k in local));if(kept.length>0)io.out(`\uFF08\u30D5\u30A1\u30A4\u30EB\u306B\u7121\u3044\u305F\u3081\u73FE\u5728\u5024\u3092\u4FDD\u3061\u307E\u3059: ${kept.join(", ")}\uFF09
69
+ `);if("schedules"in local)io.err("\uFF08\u30D5\u30A1\u30A4\u30EB\u306E\u5B9A\u7FA9\u306F\u9001\u308A\u307E\u305B\u3093\u3002\u9001\u308B\u306B\u306F schedule push \u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\uFF09\n");const before=configJson(remote);const after=JSON.stringify({max_per_cycle:body["max_per_cycle"]??null,gates:body["gates"]??[],require_zero_statuses:"require_zero_statuses"in body?body["require_zero_statuses"]:remote.requireZeroStatuses??{}},null,2)+"\n";if(stableJson(JSON.parse(
70
+ before))===stableJson(JSON.parse(after))){io.out(`\u5DEE\u5206\u306F\u3042\u308A\u307E\u305B\u3093\uFF08revision ${remote.configRevision}\uFF09\u3002\u767B\u9332\u3057\u307E\u305B\u3093\u3067\u3057\u305F\u3002
71
+ `);return EXIT_OK}printDiff(io.out,`\u30B5\u30FC\u30D0\uFF08revision ${remote.configRevision}\uFF09`,file,before,after);const revision=expected??remote.configRevision;if(!opts.yes){io.out(`
72
+ \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 ${remote.configRevision} \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:
73
+ ${confirmCommand(opts,["config","push"],{file,revision:remote.configRevision})}
74
+ `);return EXIT_USAGE}const res=await api.request("PUT","/schedules/config",{...body,revision});if(!res.ok){if(res.status===409){const now=currentRevisionOf(res);io.err(`\u26D4 409: revision ${revision} \u3067\u9001\u308A\u307E\u3057\u305F\u304C\u3001\u30B5\u30FC\u30D0\u306F${now!==null?` revision ${now} \u306B`:""}\u66F4\u65B0\u3055\u308C\u3066\u3044\u307E\u3059\u3002\u753B\u9762\u3067\u7DE8\u96C6\u3055\u308C\u305F\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002\u4E0A\u66F8\u304D\u305B\u305A\u306B\u6B62\u3081\u307E\u3057\u305F\uFF08\u5DEE\u5206\u3092\u78BA\u8A8D\u3057\u3066\u304B\u3089\u3084\u308A\u76F4\u3057\u3066\u304F\u3060\u3055\u3044\uFF09
75
+ `)}else{io.err(`\u26D4 \u30B0\u30ED\u30FC\u30D0\u30EB\u8A2D\u5B9A\u3092\u767B\u9332\u3067\u304D\u307E\u305B\u3093\uFF08${errorDetail(res)}\uFF09
76
+ `)}return apiExit(res)}const saved=parseRemote(res);if(saved===null||saved.configRevision===null){io.err(`\u26A0\uFE0F \u5FDC\u7B54\u3092\u89E3\u91C8\u3067\u304D\u307E\u305B\u3093\u3002\u53CD\u6620\u3055\u308C\u305F\u304B\u3092 schedule config pull \u3067\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u5FDC\u7B54\u306E\u5148\u982D: ${res.raw.slice(0,120)}\uFF09
77
+ `);return EXIT_API_SERVER}io.out(`\u767B\u9332\u3057\u307E\u3057\u305F: revision ${saved.configRevision}
78
+ `);return EXIT_OK}async function fetchRemote(api,err){const res=await api.request("GET","/schedules/definitions");if(!res.ok){err(`\u26D4 \u5B9A\u671F\u30B9\u30B1\u30B8\u30E5\u30FC\u30EB\u306E\u5B9A\u7FA9\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\uFF08${errorDetail(res)}\uFF09
79
+ `);return apiExit(res)}const remote=parseRemote(res);if(remote===null){err(`\u26D4 \u5B9A\u7FA9\u306E\u5FDC\u7B54\u306B schedules \u914D\u5217\u304C\u3042\u308A\u307E\u305B\u3093\uFF08\u5FDC\u7B54\u306E\u5148\u982D: ${res.raw.slice(0,120)}\uFF09
80
+ `);return EXIT_API_SERVER}return remote}function parseRemote(res){const json=res.json??{};const data=json["data"];const b=data&&typeof data==="object"&&!Array.isArray(data)&&("schedules"in data||"config_meta"in data)?data:json;const schedules=b["schedules"];const meta=b["config_meta"];if(!Array.isArray(schedules)&&!(meta&&typeof meta==="object"))return null;const warnings=Array.isArray(b["warnings"])?b["warnings"].map(w=>w&&typeof w==="object"?str(w["message"]):str(w)).filter(m=>m!==""):[];return{
81
+ schedules:Array.isArray(schedules)?schedules.filter(s=>!!s&&typeof s==="object"&&!Array.isArray(s)):[],maxPerCycle:b["max_per_cycle"],gates:b["gates"],requireZeroStatuses:b["require_zero_statuses"],configRevision:meta&&typeof meta==="object"?pickNumber(meta,"revision"):null,canWrite:typeof b["can_write"]==="boolean"?b["can_write"]:null,warnings}}function readJsonFile(file,io){let raw;try{raw=io.readFile(file)}catch(e){io.err(`\u30D5\u30A1\u30A4\u30EB\u3092\u8AAD\u3081\u307E\u305B\u3093: ${file}\uFF08${e.
82
+ message}\uFF09
83
+ `);return null}try{return JSON.parse(raw)}catch(e){io.err(`${file} \u3092 JSON \u3068\u3057\u3066\u8AAD\u3081\u307E\u305B\u3093\uFF08${e.message}\uFF09
84
+ `);return null}}function parseRevisionMap(raw){const map=new Map;for(const part of raw.split(",")){const m=/^([^=]+)=(\d+)$/.exec(part);if(m===null)return null;const id=m[1];if(!SCHEDULE_ID.test(id)||map.has(id))return null;map.set(id,Number(m[2]))}return map}function stableJson(v){if(Array.isArray(v))return`[${v.map(stableJson).join(",")}]`;if(v&&typeof v==="object"){const entries=Object.entries(v).sort(([a],[b])=>a<b?-1:a>b?1:0);return`{${entries.map(([k,x])=>`${JSON.stringify(k)}:${stableJson(
85
+ x)}`).join(",")}}`}return JSON.stringify(v??null)}function str(v){if(v===null||v===void 0)return"";return typeof v==="string"?v:String(v)}function confirmCommand(opts,sub,extra={}){const parts=["twp task-loop schedule",...sub,"--project",shellQuote(opts.projectRef)];if(opts.profile!==void 0)parts.push("--profile",shellQuote(opts.profile));if(extra.file!==void 0)parts.push("--file",shellQuote(extra.file));parts.push("--yes");if(extra.revision!==void 0)parts.push("--revision",String(extra.revision));
86
+ return parts.join(" ")}export{comparable,describeWhen,runScheduleDefCommand,stableJson};
@@ -0,0 +1,3 @@
1
+ import { createRequire as __twpCreateRequire } from 'node:module';
2
+ const require = __twpCreateRequire(import.meta.url);
3
+ import{ServerSkillCatalog,applyArguments,expandServerSkills,formatSkillOrigins,parseSkillBody,parseSkillList,prepareSkillOverlay,referencedSkills,stripFrontmatter}from"./chunk-EDBJQCNC.js";import"./chunk-RRHAX7RK.js";import"./chunk-A4LFG7MW.js";import"./chunk-VRBI2NPI.js";import"./chunk-SPZ3GBYC.js";import"./chunk-GY7KI5E5.js";import"./chunk-VFPY2A23.js";import"./chunk-J7QYPKVK.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";export{ServerSkillCatalog,applyArguments,expandServerSkills,formatSkillOrigins,parseSkillBody,parseSkillList,prepareSkillOverlay,referencedSkills,stripFrontmatter};
@@ -0,0 +1,43 @@
1
+ import { createRequire as __twpCreateRequire } from 'node:module';
2
+ const require = __twpCreateRequire(import.meta.url);
3
+ import{apiExit,currentRevisionOf,errorDetail,pickNumber,printDiff,readUtf8Strict,shellQuote}from"./chunk-A4LFG7MW.js";import"./chunk-VRBI2NPI.js";import{EXIT_API_SERVER,EXIT_FAILURE,EXIT_OK,EXIT_USAGE}from"./chunk-VFPY2A23.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";import*as fs from"fs";var DEFAULT_SETTINGS_FILE="loop-settings.json";var MAP_SECTIONS=["ai","prompts","loop"];var SECTIONS=[...MAP_SECTIONS,"outcomes"];var REVISION_KEY="revision";async function runSettingsCommand(deps,opts){const out=deps.out??(t=>void process.stdout.write(stripTerminalControls(t)));const err=deps.err??(t=>void process.stderr.write(stripTerminalControls(t)));const readFile=deps.readFile??readUtf8Strict;const writeFile=deps.writeFile??((p,c)=>fs.writeFileSync(p,c,"utf8"));const exists=deps.exists??(p=>fs.existsSync(
4
+ p));return opts.op==="push"?push(deps.api,opts,{out,err,readFile}):pull(deps.api,opts,{out,err,readFile,writeFile,exists})}function serializeSettings(s){const prompts={...s.prompts};delete prompts["charter"];return`${JSON.stringify({[REVISION_KEY]:s.revision,ai:s.ai,prompts,loop:s.loop,outcomes:s.outcomes},null,2)}
5
+ `}async function pull(api,opts,io){const target=opts.out??DEFAULT_SETTINGS_FILE;const current=await fetchState(api,io.err);if(typeof current==="number")return current;const content=serializeSettings(current);const source=`\u30B5\u30FC\u30D0\uFF08revision ${current.revision}${current.updatedByName?`\u30FB${current.updatedByName}`:""}\uFF09`;if(io.exists(target)){let local;try{local=io.readFile(target)}catch(e){io.err(`\u65E2\u5B58\u30D5\u30A1\u30A4\u30EB\u3092\u8AAD\u3081\u307E\u305B\u3093: ${target}\
6
+ \uFF08${e.message}\uFF09
7
+ `);return EXIT_FAILURE}if(local===content){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
8
+ `);return EXIT_OK}printDiff(io.out,target,source,local,content);if(!opts.yes){io.out(`
9
+ ${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
10
+ `);return EXIT_USAGE}}try{io.writeFile(target,content)}catch(e){io.err(`\u66F8\u304D\u8FBC\u3081\u307E\u305B\u3093: ${target}\uFF08${e.message}\uFF09
11
+ `);return EXIT_FAILURE}io.out(`${target} \u306B\u5C55\u958B\u3057\u307E\u3057\u305F\uFF08revision ${current.revision}\u3002\u61B2\u7AE0\u306F\u542B\u307F\u307E\u305B\u3093\u3002\u61B2\u7AE0\u306F charter pull\uFF09\u3002
12
+ `);return EXIT_OK}async function push(api,opts,io){if(opts.file===void 0){io.err(`--file <\u30D1\u30B9> \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u4F8B: --file ${DEFAULT_SETTINGS_FILE}\u3002\u96DB\u5F62\u306F settings pull \u3067\u4F5C\u308C\u307E\u3059\uFF09
13
+ `);return EXIT_USAGE}let expected;if(opts.revision!==void 0){if(!/^\d+$/.test(opts.revision)||!Number.isSafeInteger(Number(opts.revision))){io.err(`--revision \u306F0\u4EE5\u4E0A\u306E\u6574\u6570\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${opts.revision}
14
+ `);return EXIT_USAGE}if(!opts.yes){io.err("--revision \u306F --yes \u3068\u4E00\u7DD2\u306B\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08--yes \u306A\u3057\u3067\u306F\u767B\u9332\u3057\u307E\u305B\u3093\uFF09\n");return EXIT_USAGE}expected=Number(opts.revision)}let parsed;try{parsed=JSON.parse(io.readFile(opts.file).replace(/^\uFEFF/,""))}catch(e){io.err(`\u30D5\u30A1\u30A4\u30EB\u3092 JSON \u3068\u3057\u3066\u8AAD\u3081\u307E\u305B\u3093: ${opts.file}\uFF08${e.message}\uFF09
15
+ `);return EXIT_USAGE}const current=await fetchState(api,io.err);if(typeof current==="number")return current;const merged=mergeLocal(current,parsed);if(typeof merged==="string"){io.err(`\u26D4 ${opts.file}: ${merged}
16
+ `);return EXIT_USAGE}const{next,changes,outcomesChanged,loopChanged,fileRevision}=merged;const stale=fileRevision!==null&&fileRevision!==current.revision;if(changes.length===0){io.out(`\u5DEE\u5206\u306F\u3042\u308A\u307E\u305B\u3093\uFF08revision ${current.revision}\uFF09\u3002\u767B\u9332\u3057\u307E\u305B\u3093\u3067\u3057\u305F\u3002
17
+ `);return EXIT_OK}io.out(`\u30B5\u30FC\u30D0\uFF08revision ${current.revision}\uFF09\u304B\u3089\u5909\u308F\u308B\u30AD\u30FC: ${changes.map(c=>c.label).join(", ")}
18
+ `);for(const c of changes){io.out("\n");if(c.text){printDiff(io.out,`${c.label}\uFF08\u30B5\u30FC\u30D0${c.before===null?"\u30FB\u672A\u8A2D\u5B9A":""}\uFF09`,`${c.label}\uFF08${opts.file}${c.after===null?"\u30FB\u672A\u8A2D\u5B9A\u306B\u623B\u3059":""}\uFF09`,str(c.before),str(c.after));if(str(c.before)===str(c.after)){io.out(`\uFF08\u9055\u3044\u306F${c.after===null?"\u7A7A\u6587\u5B57 \u2192 \u672A\u8A2D\u5B9A\uFF08\u7D44\u307F\u8FBC\u307F\u65E2\u5B9A\u306B\u623B\u3059\uFF09":"\u672A\u8A2D\u5B9A \u2192 \u7A7A\u6587\u5B57\uFF08\u7D44\u307F\u8FBC\u307F\u65E2\
19
+ \u5B9A\u3092\u7A7A\u306B\u3059\u308B\uFF09"}\u3067\u3059\uFF09
20
+ `)}}else{printDiff(io.out,`${c.label}\uFF08\u30B5\u30FC\u30D0\uFF09`,`${c.label}\uFF08${opts.file}\uFF09`,pretty(c.before),pretty(c.after))}}io.out("\n\uFF08\u30D5\u30A1\u30A4\u30EB\u306B\u66F8\u3044\u3066\u3044\u306A\u3044\u30AD\u30FC\u3068\u61B2\u7AE0\u306F\u5909\u3048\u307E\u305B\u3093\uFF09\n");if(stale){io.out(`\u26A0\uFE0F ${opts.file} \u306F revision ${fileRevision} \u3067\u53D6\u5F97\u3057\u305F\u3082\u306E\u3067\u3059\u304C\u3001\u30B5\u30FC\u30D0\u306F revision ${current.revision} \u306B\u66F4\u65B0\u3055\
21
+ \u308C\u3066\u3044\u307E\u3059\u3002\u4E0A\u306E\u5DEE\u5206\u306B\u306F\u3001\u53D6\u5F97\u5F8C\u306B\u4ED6\u3067\u76F4\u3055\u308C\u305F\u30AD\u30FC\u3092\u5143\u306B\u623B\u3059\u5909\u66F4\u304C\u542B\u307E\u308C\u3066\u3044\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059
22
+ `)}const revision=expected??current.revision;if(opts.yes&&stale&&expected===void 0){io.err(`\u26D4 ${opts.file} \u306E\u53D6\u5F97\u5F8C\u306B\u30B5\u30FC\u30D0\u304C\u66F4\u65B0\u3055\u308C\u3066\u3044\u307E\u3059\uFF08revision ${fileRevision} \u2192 ${current.revision}\uFF09\u3002\u767B\u9332\u3057\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u5DEE\u5206\u3092\u78BA\u8A8D\u3057\u305F\u3046\u3048\u3067 --revision ${current.revision} \u3092\u4ED8\u3051\u3066\u78BA\u5B9A\u3059\u308B\u304B\u3001settings pull \u3067\u53D6\u308A\u76F4\u3057\u3066\u304F\u3060\u3055\u3044
23
+ `);return EXIT_USAGE}if(!opts.yes){io.out(`
24
+ \u767B\u9332\u3057\u3066\u3044\u307E\u305B\u3093\u3002\u3053\u306E\u5DEE\u5206\u3067\u78BA\u5B9A\u3059\u308B\u306B\u306F\u6B21\u3092\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044\uFF08revision ${current.revision} \u3092\u9001\u308B\u306E\u3067\u3001\u305D\u306E\u5F8C\u30B5\u30FC\u30D0\u304C\u66F4\u65B0\u3055\u308C\u3066\u3044\u308C\u3070 409 \u3067\u6B62\u307E\u308A\u307E\u3059\uFF09:
25
+ ${confirmCommand(opts,current.revision)}
26
+ `);return EXIT_USAGE}const payload={ai:next.ai,prompts:next.prompts,revision};if(loopChanged)payload["loop"]=next.loop;if(outcomesChanged)payload["outcomes"]=next.outcomes;const res=await api.request("PUT","/settings",payload);if(!res.ok){if(res.status===409){const now=currentRevisionOf(res);io.err(`\u26D4 409: revision ${revision} \u3067\u9001\u308A\u307E\u3057\u305F\u304C\u3001\u30B5\u30FC\u30D0\u306F${now!==null?` revision ${now} \u306B`:""}\u66F4\u65B0\u3055\u308C\u3066\u3044\u307E\u3059\u3002\u753B\u9762\u3067\u7DE8\u96C6\u3055\u308C\u305F\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002\u4E0A\u66F8\u304D\u305B\u305A\u306B\u6B62\u3081\u307E\u3057\u305F\uFF08\u5DEE\u5206\u3092\u78BA\u8A8D\u3057\u3066\u304B\u3089\u3084\u308A\u76F4\u3057\u3066\
27
+ \u304F\u3060\u3055\u3044\uFF09
28
+ ${errorDetail(res)}
29
+ `);return apiExit(res)}io.err(`\u26D4 \u30EB\u30FC\u30D7\u8A2D\u5B9A\u3092\u767B\u9332\u3067\u304D\u307E\u305B\u3093\uFF08${errorDetail(res)}\uFF09
30
+ `);return apiExit(res)}const saved=parseState(res);if(saved===null){io.err(`\u26A0\uFE0F \u5FDC\u7B54\u3092\u89E3\u91C8\u3067\u304D\u307E\u305B\u3093\u3002\u53CD\u6620\u3055\u308C\u305F\u304B\u3092 settings pull \u3067\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u5FDC\u7B54\u306E\u5148\u982D: ${res.raw.slice(0,120)}\uFF09
31
+ `);return EXIT_API_SERVER}io.out(`\u767B\u9332\u3057\u307E\u3057\u305F: revision ${saved.revision}\uFF08\u66F4\u65B0\u8005: ${saved.updatedByName||"\u4E0D\u660E"}${saved.updatedAt?`\u30FB${saved.updatedAt}`:""}\uFF09\u3002\u30EB\u30FC\u30D7\u306F\u6B21\u306E\u30B5\u30A4\u30AF\u30EB\u3067\u3053\u306E revision \u3092\u8AAD\u307F\u307E\u3059
32
+ `);return EXIT_OK}function mergeLocal(current,local){if(!isObject(local))return"\u30C8\u30C3\u30D7\u30EC\u30D9\u30EB\u306F\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306B\u3057\u3066\u304F\u3060\u3055\u3044\uFF08settings pull \u306E\u51FA\u529B\u306E\u5F62\uFF09";const unknownTop=Object.keys(local).filter(k=>k!==REVISION_KEY&&!SECTIONS.includes(k));if(unknownTop.length>0){return`\u6271\u3048\u306A\u3044\u30AD\u30FC\u304C\u3042\u308A\u307E\u3059: ${unknownTop.join(", ")}\uFF08\u6271\u3048\u308B\u306E\u306F ${[
33
+ REVISION_KEY,...SECTIONS].join(" / ")}\uFF09`}let fileRevision=null;if(Object.hasOwn(local,REVISION_KEY)){fileRevision=pickNumber(local,REVISION_KEY);if(fileRevision===null)return`${REVISION_KEY} \u306F0\u4EE5\u4E0A\u306E\u6574\u6570\u306B\u3057\u3066\u304F\u3060\u3055\u3044\uFF08settings pull \u304C\u66F8\u3044\u305F\u53D6\u5F97\u6642\u70B9\u306E\u7248\uFF09`}const next={ai:{...current.ai},prompts:{...current.prompts},loop:{...current.loop},outcomes:current.outcomes};const changes=[];let loopChanged=false;
34
+ for(const section of MAP_SECTIONS){if(!Object.hasOwn(local,section))continue;const value=local[section];if(!isObject(value))return`${section} \u306F\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306B\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u672A\u8A2D\u5B9A\u306B\u623B\u3059\u30AD\u30FC\u306F null\uFF09`;if(section==="prompts"&&Object.hasOwn(value,"charter")){return"prompts.charter\uFF08\u61B2\u7AE0\uFF09\u306F\u3053\u3053\u3067\u306F\u6271\u3044\u307E\u305B\u3093\u3002twp task-loop charter push \u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044"}
35
+ const base=current[section];const keys=Object.keys(value).filter(k=>!(section==="ai"&&k.startsWith("_comment")));const unknown=keys.filter(k=>!Object.hasOwn(base,k)||k==="__proto__");if(unknown.length>0){return`\u30B5\u30FC\u30D0\u304C\u77E5\u3089\u306A\u3044\u30AD\u30FC\u3067\u3059: ${unknown.map(k=>`${section}.${k}`).join(", ")}\uFF08\u7DB4\u308A\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002settings pull \u3067\u4E00\u89A7\u3092\u51FA\u305B\u307E\u3059\uFF09`}for(const key of keys){
36
+ const after=value[key];const before=base[key]??null;if(section==="prompts"&&after!==null&&typeof after!=="string"){return`prompts.${key} \u306F\u6587\u5B57\u5217\u304B null \u306B\u3057\u3066\u304F\u3060\u3055\u3044`}if(canonical(before)===canonical(after))continue;next[section][key]=after;if(section==="loop")loopChanged=true;changes.push({label:`${section}.${key}`,before,after,text:section==="prompts"})}}let outcomesChanged=false;if(Object.hasOwn(local,"outcomes")){const value=local["outcomes"];
37
+ if(!Array.isArray(value))return"outcomes \u306F\u914D\u5217\u306B\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u672A\u8A2D\u5B9A\u306B\u3059\u308B\u5834\u5408\u306F []\uFF09";if(canonical(current.outcomes)!==canonical(value)){next.outcomes=value;outcomesChanged=true;changes.push({label:"outcomes",before:current.outcomes,after:value,text:false})}}return{next,changes,outcomesChanged,loopChanged,fileRevision}}function canonical(v){return JSON.stringify(v,(_k,val)=>isObject(val)?Object.fromEntries(Object.
38
+ keys(val).sort().map(k=>[k,val[k]])):val)??"null"}function pretty(v){return v===null||v===void 0?"":`${JSON.stringify(v,null,2)}
39
+ `}function str(v){return typeof v==="string"?v:""}function isObject(v){return typeof v==="object"&&v!==null&&!Array.isArray(v)}async function fetchState(api,err){const res=await api.request("GET","/settings");if(!res.ok){err(`\u26D4 \u30EB\u30FC\u30D7\u8A2D\u5B9A\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\uFF08${errorDetail(res)}\uFF09
40
+ `);return apiExit(res)}const state=parseState(res);if(state===null){err(`\u26D4 \u30EB\u30FC\u30D7\u8A2D\u5B9A\u306E\u5FDC\u7B54\u3092\u89E3\u91C8\u3067\u304D\u307E\u305B\u3093\uFF08\u5FDC\u7B54\u306E\u5148\u982D: ${res.raw.slice(0,120)}\uFF09
41
+ `);return EXIT_API_SERVER}return state}function body(res){const json=res.json??{};const data=json["data"];if(isObject(data)&&"revision"in data)return data;return json}function parseState(res){const b=body(res);const revision=pickNumber(b,"revision");if(revision===null)return null;const sections={};for(const s of MAP_SECTIONS){const v=b[s];if(!isObject(v))return null;sections[s]=v}const outcomes=b["outcomes"];return{ai:sections.ai??{},prompts:sections.prompts??{},loop:sections.loop??{},outcomes:Array.
42
+ isArray(outcomes)?outcomes:[],revision,updatedByName:typeof b["updated_by_name"]==="string"?b["updated_by_name"]:"",updatedAt:typeof b["updated_at"]==="string"?b["updated_at"]:""}}function confirmCommand(opts,revision){const parts=["twp task-loop settings push","--project",shellQuote(opts.projectRef)];if(opts.profile!==void 0)parts.push("--profile",shellQuote(opts.profile));parts.push("--file",shellQuote(opts.file??DEFAULT_SETTINGS_FILE),"--yes","--revision",String(revision));return parts.join("\
43
+ ")}export{DEFAULT_SETTINGS_FILE,mergeLocal,runSettingsCommand,serializeSettings};
@@ -0,0 +1,3 @@
1
+ import { createRequire as __twpCreateRequire } from 'node:module';
2
+ const require = __twpCreateRequire(import.meta.url);
3
+ import{DEFAULT_SKILL_DIR,fetchSkill,isValidSkillName,reasonOf,runSkillCommand,skillDigest,unwrap}from"./chunk-RRHAX7RK.js";import"./chunk-A4LFG7MW.js";import"./chunk-VRBI2NPI.js";import"./chunk-VFPY2A23.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";export{DEFAULT_SKILL_DIR,fetchSkill,isValidSkillName,reasonOf,runSkillCommand,skillDigest,unwrap};