@tocca-systems/twp-cli 0.25.1 → 0.27.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.
Files changed (31) hide show
  1. package/CHANGELOG.public.md +10 -0
  2. package/README.md +6 -1
  3. package/dist/{agent-loop-ZP47LTUE.js → agent-loop-AOTZLJP2.js} +1 -1
  4. package/dist/{ai-dispatch-3DJKBIV6.js → ai-dispatch-UQHPVRWN.js} +36 -28
  5. package/dist/{api-command-VWJXBUCJ.js → api-command-CR2JAAE4.js} +2 -2
  6. package/dist/{app-3JIU5OUX.js → app-WEMM2X7A.js} +2 -2
  7. package/dist/{backlog-KSMQIC2R.js → backlog-I7GP3RXI.js} +1 -1
  8. package/dist/{chunk-24ZZFFA3.js → chunk-5PU5QU5U.js} +1 -1
  9. package/dist/{chunk-NIAOX77K.js → chunk-ECAVSNCJ.js} +21 -21
  10. package/dist/{chunk-KUIFIN7P.js → chunk-KAUPWF5Q.js} +1 -1
  11. package/dist/{chunk-X45SJNT2.js → chunk-QQR4OHGV.js} +8 -8
  12. package/dist/{chunk-VGMWPPGD.js → chunk-RDJYKA3U.js} +1 -1
  13. package/dist/{chunk-WQ66EYZS.js → chunk-XAMHF5MK.js} +1 -1
  14. package/dist/{chunk-TYNCXQSN.js → chunk-Y2XAWM2X.js} +13 -12
  15. package/dist/{chunk-IRAZ27WL.js → chunk-ZCA5CUH7.js} +6 -2
  16. package/dist/cli.js +12 -7
  17. package/dist/{commands-OFLBUP6O.js → commands-DDXAFNPT.js} +1 -1
  18. package/dist/{commands-JLPNUSNZ.js → commands-EOKUE4FC.js} +8 -7
  19. package/dist/{department-GH475WCF.js → department-6LOJILBM.js} +2 -2
  20. package/dist/{job-title-FC2GWDE7.js → job-title-WROIJ7IK.js} +1 -2
  21. package/dist/{logout-guard-3PB3VMGP.js → logout-guard-ICSEMN3J.js} +1 -1
  22. package/dist/{media-TD7D4TXF.js → media-4CAV5ZRC.js} +1 -1
  23. package/dist/{oneshot-QQOOZZDT.js → oneshot-J4VX47WN.js} +1 -1
  24. package/dist/{position-4RHTV3IK.js → position-JI33IPTS.js} +2 -2
  25. package/dist/{run-VNHAQO24.js → run-XCH5FTSU.js} +1 -1
  26. package/dist/{server-settings-YL6KALXG.js → server-settings-RC5BOWUW.js} +1 -1
  27. package/dist/{setup-BJKIHANC.js → setup-CDQ2CEUR.js} +1 -1
  28. package/dist/{task-7VOYCG26.js → task-VDNZD2FU.js} +27 -9
  29. package/dist/{user-UU2SLVC4.js → user-JBHTU4TP.js} +39 -40
  30. package/package.json +1 -1
  31. package/dist/chunk-UDPJ2IGK.js +0 -7
@@ -24,15 +24,16 @@ fromEntries(Object.entries(inline??{}).filter(([k])=>CHAIN_KEYS.includes(k)));re
24
24
  null&&typeof v==="object"&&!Array.isArray(v)?Object.fromEntries(Object.entries(v).sort(([a],[b])=>a.localeCompare(b))):v)}var CHAIN_KEYS=["primary_rotation","fallback_chains"];var AiConfig=class _AiConfig{rotation=new Map;limitedUntil=new Map;unusableUntil=new Map;highRiskSkills;raw;fileLayerValue;constructor(raw,fileLayer=null){this.raw=raw;this.highRiskSkills=_AiConfig.highRiskSet(raw);this.fileLayerValue=fileLayer}get fileLayer(){return this.fileLayerValue}static highRiskSet(raw){return new Set(
25
25
  (raw.high_risk_skills??[]).filter(v=>typeof v==="string"&&v!==""))}setFileLayer(file){this.fileLayerValue=file}replace(next){if(stableJson(next)===stableJson(this.raw))return false;this.raw=next;this.highRiskSkills=_AiConfig.highRiskSet(next);return true}hash(){const significant=Object.fromEntries(Object.entries(this.raw).filter(([k])=>!k.startsWith("_")&&!CHAIN_KEYS.includes(k)).sort(([a],[b])=>a.localeCompare(b)));return createHash("sha256").update(JSON.stringify(significant)).digest("hex").slice(
26
26
  0,16)}categoryForSkill(skill){const name=stripPrefix2(skill);return this.raw.skill_category?.[name]??DEFAULT_CATEGORY}usesAi(ai){const rotations=this.raw.primary_rotation??BUILTIN.primary_rotation;const chains=this.raw.fallback_chains??BUILTIN.fallback_chains;const categories=new Set([DEFAULT_CATEGORY,...Object.keys(rotations),...Object.keys(chains),...Object.values(this.raw.skill_category??{})]);const matches=name=>isClaudeAi(ai)?isClaudeAi(name):name===ai;for(const category of categories){const rotation=rotations[category]??
27
- rotations[DEFAULT_CATEGORY]??BUILTIN.primary_rotation[DEFAULT_CATEGORY]??[];const chain=chains[category]??chains[DEFAULT_CATEGORY]??BUILTIN.fallback_chains[DEFAULT_CATEGORY]??["claude"];for(const name of[...rotation,...chain]){if(matches(name))return true}}return false}chainFor(category){const chains=this.raw.fallback_chains??BUILTIN.fallback_chains;return chains[category]??chains[DEFAULT_CATEGORY]??BUILTIN.fallback_chains[DEFAULT_CATEGORY]??["claude"]}primaryFor(category,skill){const rotations=this.
28
- raw.primary_rotation??BUILTIN.primary_rotation;const entries=rotations[category]??rotations[DEFAULT_CATEGORY]??BUILTIN.primary_rotation[DEFAULT_CATEGORY]??[];if(entries.length===0)return"";const start=this.rotation.get(category)??0;for(let i=0;i<entries.length;i+=1){const ai=entries[(start+i)%entries.length];if(ai!==void 0&&this.isAllowed(ai,category,skill)){this.rotation.set(category,(start+i+1)%entries.length);return ai}}return""}isHighRisk(category,skill,priority,label){if(["verify","security",
29
- "support"].includes(category))return true;if(priority==="P0"||priority==="P0.5")return true;const name=stripPrefix2(skill);if(this.highRiskSkills.has(name))return true;return HIGH_RISK_LABEL.test(label)}selectPrimary(category,skill,priority,label){if(this.isHighRisk(category,skill,priority,label)&&this.chainFor(category).includes("claude")){return"claude"}return this.primaryFor(category,skill)}isAllowed(ai,category,skill){if(ai!=="gemini")return true;if(["complex","verify","security","support"].
30
- includes(category))return false;return!this.requiresGitRemote(skill)}requiresGitRemote(skill){return(this.raw.git_remote_skills??[]).includes(stripPrefix2(skill))}exclusiveSkills(){const configured=(this.raw.exclusive_skills??[]).map(s=>stripPrefix2((s??"").trim())).filter(s=>s!=="");return new Set([...configured,...EXCLUSIVE_SKILL_FLOOR])}isExclusiveSkill(skill){const name=stripPrefix2(skill.trim());return name!==""&&this.exclusiveSkills().has(name)}modelFor(ai,category,env=process.env){switch(ai){case"\
31
- gemini":return this.raw.gemini_models?.[category]??"";case"codex":return this.raw.codex_models?.[category]??this.raw.codex_models?.[DEFAULT_CATEGORY]??"";case"claude":return this.claudeModelFor(category,env);default:return isClaudeAi(ai)?this.claudeModelFor(category,env):""}}claudeModelFor(category,env){const table=usesBedrock(env)?this.raw.claude_models_bedrock:this.raw.claude_models;return table?.[category]??env.CLAUDE_MODEL??""}maxTurnsFor(category,env=process.env){const fallback=Number.parseInt(
32
- env.CLAUDE_MAX_TURNS??"",10);const base=Number.isInteger(fallback)&&fallback>0?fallback:200;const configured=this.raw.claude_max_turns?.[category];return Number.isInteger(configured)&&(configured??0)>0?configured:base}effortFor(category,skill,env=process.env,explicit){const name=stripPrefix2(skill);const item=(explicit??"").trim();if(item!==""&&EFFORTS.has(item))return{value:item,warning:null};const itemWarning=item!==""?`\u4E0D\u6B63\u306A ai_effort '${item}'\uFF08\u30A2\u30A4\u30C6\u30E0\u6307\u5B9A\uFF09\u2192 \u30B9\u30AD\u30EB\uFF0F\u30AB\u30C6\u30B4\u30EA\u65E2\u5B9A\u3092\u4F7F\u3044\u307E\u3059`:
33
- null;const raw=(name!==""?this.raw.claude_effort_by_skill?.[name]:void 0)??this.raw.claude_effort?.[category]??env.CLAUDE_EFFORT??"";if(raw==="")return{value:"",warning:itemWarning};if(EFFORTS.has(raw))return{value:raw,warning:itemWarning};return{value:"",warning:`\u4E0D\u6B63\u306A effort \u5024 '${raw}'\uFF08category=${category}, skill=${name||"none"}\uFF09\u2192 \u672A\u6307\u5B9A\u3068\u3057\u3066\u6271\u3044\u307E\u3059`}}fallbackDelaySec(ai,env=process.env){const fromEnv=Number.parseInt(env[`\
34
- AI_FALLBACK_DELAY_${ai.toUpperCase()}`]??"",10);if(Number.isInteger(fromEnv)&&fromEnv>=0)return fromEnv;const cfg=this.raw.fallback_delay?.[ai];return Number.isInteger(cfg)&&(cfg??0)>=0?cfg:0}cooldownDefaultSec(ai,env=process.env){const fromEnv=Number.parseInt(env[`AI_COOLDOWN_${ai.toUpperCase()}`]??"",10);if(Number.isInteger(fromEnv)&&fromEnv>0)return fromEnv;const cfg=this.raw.cooldown?.[ai];if(Number.isInteger(cfg)&&(cfg??0)>0)return cfg;const backoff=Number.parseInt(env.RATE_LIMIT_BACKOFF??"",
35
- 10);return Number.isInteger(backoff)&&backoff>0?backoff:DEFAULT_COOLDOWN_SEC}limitKey(ai,slot){return slot===null||slot===void 0||slot===""?ai:`${ai}@${slot}`}hasCooldownFor(ai,now=Date.now()){for(const[key,until]of this.limitedUntil){if(until<=now)continue;if(key===ai||key.startsWith(`${ai}@`))return true}return false}isRateLimited(ai,now=Date.now(),slot=null){return(this.limitedUntil.get(this.limitKey(ai,slot))??0)>now}markRateLimited(ai,seconds,now=Date.now(),slot=null){const capped=Math.min(
36
- Math.max(Math.trunc(seconds),1),MAX_COOLDOWN_SEC);this.limitedUntil.set(this.limitKey(ai,slot),now+capped*1e3);return capped}markAiUnusable(ai,now=Date.now()){this.unusableUntil.set(ai,now+AI_UNUSABLE_COOLDOWN_SEC*1e3);return AI_UNUSABLE_COOLDOWN_SEC}isAiUnusable(ai,now=Date.now()){return(this.unusableUntil.get(ai)??0)>now}minCooldownRemainingSec(now=Date.now()){let min=null;for(const until of this.limitedUntil.values()){if(until<=now)continue;const remaining=Math.ceil((until-now)/1e3);if(min===
37
- null||remaining<min)min=remaining}return min}};var HIGH_RISK_LABEL=/本番|リリース|認証|認可|権限|セキュリティ|課金|給与|勤怠計算/;var TIER_ALIASES=new Set(["opus","sonnet","haiku","default"]);function modelFitsRoute(model,env=process.env){if(TIER_ALIASES.has(model.trim().toLowerCase()))return true;if(model.startsWith("arn:aws:bedrock:"))return usesBedrock(env);const bedrockShaped=/(^|[./])anthropic\./.test(model);return usesBedrock(env)?bedrockShaped:!bedrockShaped}function isUsableModelId(value){
38
- return value!==""&&!value.startsWith("-")&&/^[A-Za-z0-9._:\-/[\]]+$/.test(value)}function stripPrefix2(skill){return skill.startsWith("twp-")?skill.slice(4):skill}export{resolveSpawnTarget,spawnSyncResolved,DEFAULT_CLAUDE_LAUNCHER,detectClaudeAutoSwitch,wrapWithAutoSwitch,activeSlotPath,isClaudeAi,normalizeSkillName,skillOfItem,exclusiveInflightEntries,formatExclusiveEntry,usesBedrock,loadAiConfig,reloadAiConfig,CHAIN_KEYS,AiConfig,modelFitsRoute,isUsableModelId};
27
+ rotations[DEFAULT_CATEGORY]??BUILTIN.primary_rotation[DEFAULT_CATEGORY]??[];const chain=chains[category]??chains[DEFAULT_CATEGORY]??BUILTIN.fallback_chains[DEFAULT_CATEGORY]??["claude"];for(const name of[...rotation,...chain]){if(matches(name))return true}}return false}probeCategoryFor(ai){const rotations=this.raw.primary_rotation??BUILTIN.primary_rotation;const chains=this.raw.fallback_chains??BUILTIN.fallback_chains;const categories=new Set([DEFAULT_CATEGORY,...Object.keys(rotations),...Object.
28
+ keys(chains),...Object.values(this.raw.skill_category??{})]);const matches=name=>isClaudeAi(ai)?isClaudeAi(name):name===ai;for(const category of categories){if(!this.isAllowed(ai,category,""))continue;const rotation=rotations[category]??rotations[DEFAULT_CATEGORY]??BUILTIN.primary_rotation[DEFAULT_CATEGORY]??[];const chain=chains[category]??chains[DEFAULT_CATEGORY]??BUILTIN.fallback_chains[DEFAULT_CATEGORY]??["claude"];if([...rotation,...chain].some(matches))return category}return null}chainFor(category){
29
+ const chains=this.raw.fallback_chains??BUILTIN.fallback_chains;return chains[category]??chains[DEFAULT_CATEGORY]??BUILTIN.fallback_chains[DEFAULT_CATEGORY]??["claude"]}primaryFor(category,skill){const rotations=this.raw.primary_rotation??BUILTIN.primary_rotation;const entries=rotations[category]??rotations[DEFAULT_CATEGORY]??BUILTIN.primary_rotation[DEFAULT_CATEGORY]??[];if(entries.length===0)return"";const start=this.rotation.get(category)??0;for(let i=0;i<entries.length;i+=1){const ai=entries[(start+
30
+ i)%entries.length];if(ai!==void 0&&this.isAllowed(ai,category,skill)){this.rotation.set(category,(start+i+1)%entries.length);return ai}}return""}isHighRisk(category,skill,priority,label){if(["verify","security","support"].includes(category))return true;if(priority==="P0"||priority==="P0.5")return true;const name=stripPrefix2(skill);if(this.highRiskSkills.has(name))return true;return HIGH_RISK_LABEL.test(label)}selectPrimary(category,skill,priority,label){if(this.isHighRisk(category,skill,priority,
31
+ label)&&this.chainFor(category).includes("claude")){return"claude"}return this.primaryFor(category,skill)}isAllowed(ai,category,skill){if(ai!=="gemini")return true;if(["complex","verify","security","support"].includes(category))return false;return!this.requiresGitRemote(skill)}requiresGitRemote(skill){return(this.raw.git_remote_skills??[]).includes(stripPrefix2(skill))}exclusiveSkills(){const configured=(this.raw.exclusive_skills??[]).map(s=>stripPrefix2((s??"").trim())).filter(s=>s!=="");return new Set(
32
+ [...configured,...EXCLUSIVE_SKILL_FLOOR])}isExclusiveSkill(skill){const name=stripPrefix2(skill.trim());return name!==""&&this.exclusiveSkills().has(name)}modelFor(ai,category,env=process.env){switch(ai){case"gemini":return this.raw.gemini_models?.[category]??"";case"codex":return this.raw.codex_models?.[category]??this.raw.codex_models?.[DEFAULT_CATEGORY]??"";case"claude":return this.claudeModelFor(category,env);default:return isClaudeAi(ai)?this.claudeModelFor(category,env):""}}claudeModelFor(category,env){
33
+ const table=usesBedrock(env)?this.raw.claude_models_bedrock:this.raw.claude_models;return table?.[category]??env.CLAUDE_MODEL??""}maxTurnsFor(category,env=process.env){const fallback=Number.parseInt(env.CLAUDE_MAX_TURNS??"",10);const base=Number.isInteger(fallback)&&fallback>0?fallback:200;const configured=this.raw.claude_max_turns?.[category];return Number.isInteger(configured)&&(configured??0)>0?configured:base}effortFor(category,skill,env=process.env,explicit){const name=stripPrefix2(skill);const item=(explicit??
34
+ "").trim();if(item!==""&&EFFORTS.has(item))return{value:item,warning:null};const itemWarning=item!==""?`\u4E0D\u6B63\u306A ai_effort '${item}'\uFF08\u30A2\u30A4\u30C6\u30E0\u6307\u5B9A\uFF09\u2192 \u30B9\u30AD\u30EB\uFF0F\u30AB\u30C6\u30B4\u30EA\u65E2\u5B9A\u3092\u4F7F\u3044\u307E\u3059`:null;const raw=(name!==""?this.raw.claude_effort_by_skill?.[name]:void 0)??this.raw.claude_effort?.[category]??env.CLAUDE_EFFORT??"";if(raw==="")return{value:"",warning:itemWarning};if(EFFORTS.has(raw))return{value:raw,
35
+ warning:itemWarning};return{value:"",warning:`\u4E0D\u6B63\u306A effort \u5024 '${raw}'\uFF08category=${category}, skill=${name||"none"}\uFF09\u2192 \u672A\u6307\u5B9A\u3068\u3057\u3066\u6271\u3044\u307E\u3059`}}fallbackDelaySec(ai,env=process.env){const fromEnv=Number.parseInt(env[`AI_FALLBACK_DELAY_${ai.toUpperCase()}`]??"",10);if(Number.isInteger(fromEnv)&&fromEnv>=0)return fromEnv;const cfg=this.raw.fallback_delay?.[ai];return Number.isInteger(cfg)&&(cfg??0)>=0?cfg:0}cooldownDefaultSec(ai,env=process.
36
+ env){const fromEnv=Number.parseInt(env[`AI_COOLDOWN_${ai.toUpperCase()}`]??"",10);if(Number.isInteger(fromEnv)&&fromEnv>0)return fromEnv;const cfg=this.raw.cooldown?.[ai];if(Number.isInteger(cfg)&&(cfg??0)>0)return cfg;const backoff=Number.parseInt(env.RATE_LIMIT_BACKOFF??"",10);return Number.isInteger(backoff)&&backoff>0?backoff:DEFAULT_COOLDOWN_SEC}limitKey(ai,slot){return slot===null||slot===void 0||slot===""?ai:`${ai}@${slot}`}hasCooldownFor(ai,now=Date.now()){for(const[key,until]of this.limitedUntil){
37
+ if(until<=now)continue;if(key===ai||key.startsWith(`${ai}@`))return true}return false}isRateLimited(ai,now=Date.now(),slot=null){return(this.limitedUntil.get(this.limitKey(ai,slot))??0)>now}markRateLimited(ai,seconds,now=Date.now(),slot=null){const capped=Math.min(Math.max(Math.trunc(seconds),1),MAX_COOLDOWN_SEC);this.limitedUntil.set(this.limitKey(ai,slot),now+capped*1e3);return capped}markAiUnusable(ai,now=Date.now()){this.unusableUntil.set(ai,now+AI_UNUSABLE_COOLDOWN_SEC*1e3);return AI_UNUSABLE_COOLDOWN_SEC}isAiUnusable(ai,now=Date.
38
+ now()){return(this.unusableUntil.get(ai)??0)>now}minCooldownRemainingSec(now=Date.now()){let min=null;for(const until of this.limitedUntil.values()){if(until<=now)continue;const remaining=Math.ceil((until-now)/1e3);if(min===null||remaining<min)min=remaining}return min}};var HIGH_RISK_LABEL=/本番|リリース|認証|認可|権限|セキュリティ|課金|給与|勤怠計算/;var TIER_ALIASES=new Set(["opus","sonnet","haiku","default"]);function modelFitsRoute(model,env=process.env){if(TIER_ALIASES.
39
+ has(model.trim().toLowerCase()))return true;if(model.startsWith("arn:aws:bedrock:"))return usesBedrock(env);const bedrockShaped=/(^|[./])anthropic\./.test(model);return usesBedrock(env)?bedrockShaped:!bedrockShaped}function isUsableModelId(value){return value!==""&&!value.startsWith("-")&&/^[A-Za-z0-9._:\-/[\]]+$/.test(value)}function stripPrefix2(skill){return skill.startsWith("twp-")?skill.slice(4):skill}export{resolveSpawnTarget,spawnSyncResolved,DEFAULT_CLAUDE_LAUNCHER,detectClaudeAutoSwitch,wrapWithAutoSwitch,activeSlotPath,isClaudeAi,normalizeSkillName,skillOfItem,exclusiveInflightEntries,formatExclusiveEntry,usesBedrock,loadAiConfig,reloadAiConfig,CHAIN_KEYS,AiConfig,modelFitsRoute,isUsableModelId};
@@ -1,6 +1,10 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{booleanText,boundedText,isoDate}from"./chunk-UDPJ2IGK.js";import{nonEmpty,positiveInteger}from"./chunk-G4OO4M44.js";import{ORG_MASTER_LIMIT}from"./chunk-NIAOX77K.js";import{ULID_RE,UUID_RE,isSafePathSegment}from"./chunk-GMBJTG6A.js";import{requireResolved,singleRef,withResolved}from"./chunk-ZN5EFDH7.js";import{acknowledgement,isRecord,pick}from"./chunk-ZWVYVS2A.js";import{ApiResponseError,UsageError}from"./chunk-7WSNIXTQ.js";var CLEAR_DATE="none";function placeholderOf(field){switch(field.kind){case"text":return`<${field.label}>`;case"integer":return"<\u6574\u6570>";case"boolean":return"<true|false>";case"enum":return`<${field.values.join("|")}>`;case"date":return`<YYYY-MM-DD|${CLEAR_DATE}>`;case"ref":return field.placeholder}}function createFlags(fields){return fields.map(field=>({name:field.flag,summary:field.summary,takesValue:true,placeholder:placeholderOf(field)}))}function updateFlags(fields){const flags=[];for(const field of fields){
3
+ import{nonEmpty,positiveInteger}from"./chunk-G4OO4M44.js";import{ORG_MASTER_LIMIT}from"./chunk-ECAVSNCJ.js";import{ULID_RE,UUID_RE,isSafePathSegment}from"./chunk-GMBJTG6A.js";import{requireResolved,singleRef,withResolved}from"./chunk-ZN5EFDH7.js";import{acknowledgement,isRecord,pick}from"./chunk-ZWVYVS2A.js";import{ApiResponseError,UsageError}from"./chunk-7WSNIXTQ.js";var ISO_DATE_RE=/^\d{4}-\d{2}-\d{2}$/;function isoDate(input,flag){const raw=input.flags.get(flag);if(raw===void 0)return void 0;return isoDateValue(raw,flag)}function isoDateValue(raw,label){const value=raw.trim();if(!ISO_DATE_RE.test(value)){throw new UsageError(`${label} \u306F YYYY-MM-DD \u306E\u5F62\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${raw}`,"\u4F8B: 2026-09-30")}const[y,m,d]=value.split("-").map(Number);const probe=new Date(Date.UTC(y,m-1,d));if(probe.getUTCFullYear()!==
4
+ y||probe.getUTCMonth()+1!==m||probe.getUTCDate()!==d){throw new UsageError(`${label} \u306B\u5B58\u5728\u3057\u306A\u3044\u65E5\u4ED8\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u3059: ${raw}`,"\u4F8B: 2026-09-30")}return value}function booleanText(flag,raw){const value=raw.trim().toLowerCase();if(value==="true")return true;if(value==="false")return false;throw new UsageError(`${flag} \u306F true \u304B false \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${raw}`,`\u4F8B: ${flag} fa\
5
+ lse`)}function priority(input,flag="--priority"){const raw=input.flags.get(flag);if(raw===void 0)return void 0;const trimmed=raw.trim();const value=/^\d+$/.test(trimmed)?Number(trimmed):Number.NaN;if(!Number.isInteger(value)||value<1||value>3){throw new UsageError(`${flag} \u306F 1 / 2 / 3 \u306E\u3044\u305A\u308C\u304B\u3067\u3059: ${raw}`,"1: \u9AD8 \uFF0F 2: \u4E2D \uFF0F 3: \u4F4E")}return value}function decimal(input,flag,options){const raw=input.flags.get(flag);if(raw===void 0)return void 0;
6
+ const trimmed=raw.trim();const value=/^\d+(\.\d+)?$/.test(trimmed)?Number(trimmed):Number.NaN;if(!Number.isFinite(value)||value<options.min||value>options.max){throw new UsageError(`${flag} \u306F ${options.min} \u4EE5\u4E0A ${options.max} \u4EE5\u4E0B\u306E\u6570\u5024\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${raw}`,"\u4F8B: 3 / 3.5")}return value}function boundedText(input,flag,options){const raw=input.flags.get(flag);if(raw===void 0)return void 0;if(raw.trim()===""){throw new UsageError(
7
+ `${flag} \u306B\u7A7A\u306E\u5024\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,`${options.label}\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}const count=[...raw].length;if(count>options.maxChars){throw new UsageError(`${options.label}\u304C\u9577\u3059\u304E\u307E\u3059\uFF08${count} \u6587\u5B57\u30FB\u4E0A\u9650 ${options.maxChars} \u6587\u5B57\uFF09`,`${flag} \u3092 ${options.maxChars} \u6587\u5B57\u4EE5\u5185\u306B\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return raw}var CLEAR_DATE="none";function placeholderOf(field){switch(field.kind){case"text":return`<${field.label}>`;case"integer":return"<\u6574\u6570>";case"boolean":return"<true|false>";case"enum":return`<${field.values.join("|")}>`;case"date":return`<YYYY-MM-DD|${CLEAR_DATE}>`;case"ref":return field.placeholder}}function createFlags(fields){return fields.map(field=>({name:field.flag,summary:field.summary,takesValue:true,placeholder:placeholderOf(field)}))}function updateFlags(fields){const flags=[];for(const field of fields){
4
8
  flags.push({name:field.flag,summary:field.summary,takesValue:true,placeholder:placeholderOf(field)});if(field.kind==="ref")flags.push({name:field.clearFlag,summary:field.clearSummary,takesValue:false})}return flags}function integerValue(field,raw){const trimmed=raw.trim();const value=/^\d+$/.test(trimmed)?Number(trimmed):Number.NaN;const tooLarge=field.max!==void 0&&value>field.max;if(!Number.isSafeInteger(value)||value<field.min||tooLarge){const range=field.max!==void 0?`${field.min} \u4EE5\u4E0A ${field.
5
9
  max} \u4EE5\u4E0B`:`${field.min} \u4EE5\u4E0A`;throw new UsageError(`${field.flag} \u306F ${range}\u306E\u6574\u6570\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044: ${raw}`,`${field.label}\u3092\u6574\u6570\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return value}function fieldBody(input,fields){const body={};for(const field of fields){switch(field.kind){case"text":{const value=boundedText(input,field.flag,{maxChars:field.maxChars,label:field.label});if(value!==void 0)body[field.
6
10
  key]=value;break}case"integer":{const raw=input.flags.get(field.flag);if(raw!==void 0)body[field.key]=integerValue(field,raw);break}case"boolean":{const raw=input.flags.get(field.flag);if(raw!==void 0)body[field.key]=booleanText(field.flag,raw);break}case"enum":{const raw=input.flags.get(field.flag);if(raw===void 0)break;const value=raw.trim().toLowerCase();if(!field.values.includes(value)){throw new UsageError(`${field.flag} \u306B\u300C${raw}\u300D\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,
@@ -35,4 +39,4 @@ ${refHelp}`,forbidden,flags:[...updateFlags(fields),refFlag],async prepare(input
35
39
  item(body),spec.getColumns),raw:body=>item(body),notes:()=>[cacheNote(label)]},{name:"delete",summary:`${label}\u3092\u524A\u9664\u3059\u308B\uFF08\u7BA1\u7406\u8005\u306E\u307F\u30FB--yes \u304C\u8981\u308B\uFF09`,usage:`twp ${name} delete <${label}> --yes`,description:`\u6240\u5C5E\uFF08\u904E\u53BB\u306E\u5C65\u6B74\u3092\u542B\u3080\uFF09\u304B\u3089\u53C2\u7167\u3055\u308C\u3066\u3044\u308B${label}\u306F\u3001\u30B5\u30FC\u30D0\u304C\u524A\u9664\u3092\u65AD\u308A\u307E\u3059\u3002
36
40
  ${spec.deleteGuidance}
37
41
 
38
- ${refHelp}`,destructive:true,forbidden,rejected:referencedDeleteGuidance(spec.deleteGuidance),flags:[refFlag],prepare:(input,ctx)=>prepareTarget(input,ctx,`twp ${name} delete help`),plan:input=>({method:"DELETE",path:itemPath(input)}),summarize:body=>acknowledgement(body,`${label}\u524A\u9664`),raw:body=>acknowledgement(body,`${label}\u524A\u9664`),notes:()=>[cacheNote(label)]}]}}export{createFlags,updateFlags,fieldBody,booleanQuery,hasAnyField,resolveRefFields,targetId,idSegment,masterRows,masterItem,cacheNote,referencedDeleteGuidance,masterFields,STATUS_VALUES,masterListOperation,flatMasterDomain};
42
+ ${refHelp}`,destructive:true,forbidden,rejected:referencedDeleteGuidance(spec.deleteGuidance),flags:[refFlag],prepare:(input,ctx)=>prepareTarget(input,ctx,`twp ${name} delete help`),plan:input=>({method:"DELETE",path:itemPath(input)}),summarize:body=>acknowledgement(body,`${label}\u524A\u9664`),raw:body=>acknowledgement(body,`${label}\u524A\u9664`),notes:()=>[cacheNote(label)]}]}}export{isoDate,isoDateValue,booleanText,priority,decimal,boundedText,createFlags,updateFlags,fieldBody,booleanQuery,hasAnyField,resolveRefFields,targetId,idSegment,masterRows,masterItem,cacheNote,referencedDeleteGuidance,masterFields,STATUS_VALUES,masterListOperation,flatMasterDomain};
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire as __twpCreateRequire } from 'node:module';
3
3
  const require = __twpCreateRequire(import.meta.url);
4
- import{parseArgv}from"./chunk-YWGYRISN.js";import"./chunk-NAUH75MM.js";import{GLOBAL_OPTIONS_HELP}from"./chunk-TAN5I2DP.js";import"./chunk-SP27PYHC.js";import"./chunk-QQRJLH6B.js";import"./chunk-VSJBJXZO.js";var VERSION=true?"0.25.1":"0.0.0-dev";var HELP=`twp ${VERSION} \u2014 TWP CLI
4
+ import{parseArgv}from"./chunk-YWGYRISN.js";import"./chunk-NAUH75MM.js";import{GLOBAL_OPTIONS_HELP}from"./chunk-TAN5I2DP.js";import"./chunk-SP27PYHC.js";import"./chunk-QQRJLH6B.js";import"./chunk-VSJBJXZO.js";var VERSION=true?"0.27.0":"0.0.0-dev";var HELP=`twp ${VERSION} \u2014 TWP CLI
5
5
 
6
6
  \u4F7F\u3044\u65B9:
7
7
  twp \u5BFE\u8A71 TUI \u3092\u8D77\u52D5
@@ -113,6 +113,11 @@ import{parseArgv}from"./chunk-YWGYRISN.js";import"./chunk-NAUH75MM.js";import{GL
113
113
  twp task attachment download <\u6DFB\u4ED8ID>
114
114
  \u6DFB\u4ED8\u3092\u30D5\u30A1\u30A4\u30EB\u3078\u66F8\u304D\u51FA\u3059\uFF08--out \u5FC5\u9808\uFF09
115
115
  twp task status list --status \u306B\u6E21\u305B\u308B\u30B9\u30C6\u30FC\u30BF\u30B9\u3092\u4E00\u89A7\u3059\u308B\uFF08\u65E2\u5B9A\u306F is_default\uFF09
116
+ twp task status create \u30B9\u30C6\u30FC\u30BF\u30B9\u3092\u4F5C\u6210\u3059\u308B\uFF08--name \u5FC5\u9808\uFF09
117
+ twp task status update <\u30B9\u30C6\u30FC\u30BF\u30B9>
118
+ \u30B9\u30C6\u30FC\u30BF\u30B9\u3092\u66F4\u65B0\u3059\u308B\uFF08\u540D\u524D\u30FB\u8272\u30FB\u5B8C\u4E86\u6271\u3044\u30FB\u65E2\u5B9A\u30FB\u8868\u793A\u9806\uFF09
119
+ twp task status delete <\u30B9\u30C6\u30FC\u30BF\u30B9>
120
+ \u30B9\u30C6\u30FC\u30BF\u30B9\u3092\u524A\u9664\u3059\u308B\uFF08--yes \u304C\u8981\u308B\uFF09
116
121
  twp task type list --type \u306B\u6E21\u305B\u308B\u7A2E\u5225\u3092\u4E00\u89A7\u3059\u308B
117
122
  twp task category list \u30BF\u30B9\u30AF\u306E\u30AB\u30C6\u30B4\u30EA\u3092\u4E00\u89A7\u3059\u308B
118
123
  twp task milestone list \u30BF\u30B9\u30AF\u306E\u30DE\u30A4\u30EB\u30B9\u30C8\u30FC\u30F3\u3092\u4E00\u89A7\u3059\u308B
@@ -250,10 +255,10 @@ TUI \u5185:
250
255
  `);process.exit(1)}ignoreEpipe(process.stdout);ignoreEpipe(process.stderr);if(process.env["TWP_AUTO_UPDATE_WORKER"]==="1"){const{runAutoUpdateWorker}=await import("./auto-update-worker-OBFGN6FY.js");await runAutoUpdateWorker().catch(()=>void 0);return}const args=parseArgv(process.argv.slice(2));if(args.command==="version"){process.stdout.write(`${VERSION}
251
256
  `);return}if(args.command==="help"){process.stdout.write(HELP);return}if(args.unknown.length>0){process.stderr.write(`\u4E0D\u660E\u306A\u5F15\u6570: ${args.unknown.join(" ")}
252
257
 
253
- ${HELP}`);process.exitCode=2;return}const autoUpdate=await import("./auto-update-CV2MM32C.js");autoUpdate.registerRunning();if(args.command==="task-loop"){process.env[autoUpdate.DISABLE_ENV]="1"}else if(args.command!=="update"){autoUpdate.onStartup(VERSION)}if(args.command==="domain"&&args.domain!==void 0){const{runDomain}=await import("./run-VNHAQO24.js");process.exitCode=await runDomain({domain:args.domain,...args.operation!==void 0?{operation:args.operation}:{},argv:args.domainArgv,help:args.
254
- domainHelp,globals:{...args.profile!==void 0?{profile:args.profile}:{},...args.output!==void 0?{output:args.output}:{},...args.query!==void 0?{query:args.query}:{},dryRun:args.dryRun,debug:args.debug,yes:args.yes,refresh:args.refresh},version:VERSION});return}if(args.command==="api"){const{runApiCommand}=await import("./api-command-VWJXBUCJ.js");process.exitCode=await runApiCommand({argv:args.domainArgv,help:args.domainHelp,globals:{...args.profile!==void 0?{profile:args.profile}:{},...args.output!==
255
- void 0?{output:args.output}:{},...args.query!==void 0?{query:args.query}:{},dryRun:args.dryRun,debug:args.debug,yes:args.yes},version:VERSION});return}if(args.command==="update"){const{runUpdate}=await import("./update-RLKK6N7U.js");process.exitCode=await runUpdate({...args.profile!==void 0?{profile:args.profile}:{},version:VERSION});return}if(args.command==="login"||args.command==="logout"||args.command==="whoami"){const{runLogin,runLogout,runWhoami}=await import("./commands-OFLBUP6O.js");
256
- const options={profile:args.profile,method:args.loginMethod,tenant:args.tenant,noBrowser:args.loginNoBrowser,cliVersion:VERSION,force:args.logoutForce,...args.output!==void 0?{output:args.output}:{},...args.query!==void 0?{query:args.query}:{}};const runner=args.command==="login"?runLogin:args.command==="logout"?runLogout:runWhoami;process.exitCode=await runner(options);return}if(args.command==="task-loop"){const{runTaskLoop}=await import("./commands-JLPNUSNZ.js");process.exitCode=await runTaskLoop(
258
+ ${HELP}`);process.exitCode=2;return}const autoUpdate=await import("./auto-update-CV2MM32C.js");autoUpdate.registerRunning();if(args.command==="task-loop"){process.env[autoUpdate.DISABLE_ENV]="1"}else if(args.command!=="update"){autoUpdate.onStartup(VERSION)}if(args.command==="domain"&&args.domain!==void 0){const{runDomain}=await import("./run-XCH5FTSU.js");process.exitCode=await runDomain({domain:args.domain,...args.operation!==void 0?{operation:args.operation}:{},argv:args.domainArgv,help:args.
259
+ domainHelp,globals:{...args.profile!==void 0?{profile:args.profile}:{},...args.output!==void 0?{output:args.output}:{},...args.query!==void 0?{query:args.query}:{},dryRun:args.dryRun,debug:args.debug,yes:args.yes,refresh:args.refresh},version:VERSION});return}if(args.command==="api"){const{runApiCommand}=await import("./api-command-CR2JAAE4.js");process.exitCode=await runApiCommand({argv:args.domainArgv,help:args.domainHelp,globals:{...args.profile!==void 0?{profile:args.profile}:{},...args.output!==
260
+ void 0?{output:args.output}:{},...args.query!==void 0?{query:args.query}:{},dryRun:args.dryRun,debug:args.debug,yes:args.yes},version:VERSION});return}if(args.command==="update"){const{runUpdate}=await import("./update-RLKK6N7U.js");process.exitCode=await runUpdate({...args.profile!==void 0?{profile:args.profile}:{},version:VERSION});return}if(args.command==="login"||args.command==="logout"||args.command==="whoami"){const{runLogin,runLogout,runWhoami}=await import("./commands-DDXAFNPT.js");
261
+ const options={profile:args.profile,method:args.loginMethod,tenant:args.tenant,noBrowser:args.loginNoBrowser,cliVersion:VERSION,force:args.logoutForce,...args.output!==void 0?{output:args.output}:{},...args.query!==void 0?{query:args.query}:{}};const runner=args.command==="login"?runLogin:args.command==="logout"?runLogout:runWhoami;process.exitCode=await runner(options);return}if(args.command==="task-loop"){const{runTaskLoop}=await import("./commands-EOKUE4FC.js");process.exitCode=await runTaskLoop(
257
262
  {action:args.taskLoopAction??"run",project:args.project,profile:args.profile,safe:args.safe,daemon:args.daemon,interval:args.interval,maxCycles:args.maxCycles,forceRunner:args.forceRunner,force:args.stopForce,drain:args.stopDrain,engine:args.engine,version:VERSION,verbose:args.verbose,scheduleNow:args.scheduleNow,scheduleCounts:args.scheduleCounts,scheduleGate:args.scheduleGate,charterOp:args.charterOp,charterInput:args.charterFile,charterOutput:args.charterOut,charterRevision:args.charterRevision,
258
- skillOp:args.skillOp,skillName:args.skillName,skillAll:args.skillAll,skillDir:args.skillDir,yes:args.yes,ais:args.ais,workspace:args.workspace,aiConfigFile:args.aiConfigFile,noAiConfigFile:args.noAiConfigFile});return}if(args.command==="print"){const{runOneShot}=await import("./oneshot-QQOOZZDT.js");process.exitCode=await runOneShot({prompt:args.prompt??"",fromStdin:args.promptFromStdin,mode:args.mode??"dev",...args.permissionMode!==void 0?{permissionMode:args.permissionMode}:{},allowedTools:args.
259
- allowedTools,disallowedTools:args.disallowedTools,...args.model!==void 0?{model:args.model}:{},...args.profile!==void 0?{profile:args.profile}:{},version:VERSION});return}const{startTui}=await import("./app-3JIU5OUX.js");await startTui({mode:args.mode,permissionMode:args.permissionMode,allowedTools:args.allowedTools,disallowedTools:args.disallowedTools,model:args.model,profile:args.profile,noTui:args.noTui||!process.stdout.isTTY,doctor:args.doctor,version:VERSION})}await main();
263
+ skillOp:args.skillOp,skillName:args.skillName,skillAll:args.skillAll,skillDir:args.skillDir,yes:args.yes,ais:args.ais,workspace:args.workspace,aiConfigFile:args.aiConfigFile,noAiConfigFile:args.noAiConfigFile});return}if(args.command==="print"){const{runOneShot}=await import("./oneshot-J4VX47WN.js");process.exitCode=await runOneShot({prompt:args.prompt??"",fromStdin:args.promptFromStdin,mode:args.mode??"dev",...args.permissionMode!==void 0?{permissionMode:args.permissionMode}:{},allowedTools:args.
264
+ allowedTools,disallowedTools:args.disallowedTools,...args.model!==void 0?{model:args.model}:{},...args.profile!==void 0?{profile:args.profile}:{},version:VERSION});return}const{startTui}=await import("./app-WEMM2X7A.js");await startTui({mode:args.mode,permissionMode:args.permissionMode,allowedTools:args.allowedTools,disallowedTools:args.disallowedTools,model:args.model,profile:args.profile,noTui:args.noTui||!process.stdout.isTTY,doctor:args.doctor,version:VERSION})}await main();
@@ -50,7 +50,7 @@ ${err.hint?`${err.hint}
50
50
  `);return 1}writeErr(`\u30A8\u30E9\u30FC: ${err.message}
51
51
  `);return 1}}async function runLogin(options){return run(async()=>{const profile=resolveProfile(options.profile);const io=makeIo(options.cliVersion);if(options.method==="password"){await passwordLogin(profile,{tenantCode:options.tenant??void 0},process.env,io)}else if(options.method==="token"){await tokenLogin(profile,process.env,io)}else{await browserLogin(profile,process.env,io,{noBrowser:options.noBrowser})}})}async function runLogout(options){return run(async()=>{const profile=resolveProfile(
52
52
  options.profile);const creds=loadCredentials(profile.name);if(!creds){writeOut(`\u30D7\u30ED\u30D5\u30A1\u30A4\u30EB\u300C${profile.name}\u300D\u306F\u30ED\u30B0\u30A4\u30F3\u3057\u3066\u3044\u307E\u305B\u3093\u3002
53
- `);return}const{describeLogoutImpact,findLoopsUsingProfile}=await import("./logout-guard-3PB3VMGP.js");const found=findLoopsUsingProfile(profile.name,options.logoutGuard);if(found.users.length>0||found.undetermined.length>0){writeErr(describeLogoutImpact(profile.name,found,options.force===true));if(options.force!==true)throw new LogoutRefusedError}const apiUrl=effectiveApiUrl(profile,creds.api_url);const revoked=await httpFetch(`${apiUrl}/api/v2/auth/logout`,{method:"POST",headers:{Accept:"applic\
53
+ `);return}const{describeLogoutImpact,findLoopsUsingProfile}=await import("./logout-guard-ICSEMN3J.js");const found=findLoopsUsingProfile(profile.name,options.logoutGuard);if(found.users.length>0||found.undetermined.length>0){writeErr(describeLogoutImpact(profile.name,found,options.force===true));if(options.force!==true)throw new LogoutRefusedError}const apiUrl=effectiveApiUrl(profile,creds.api_url);const revoked=await httpFetch(`${apiUrl}/api/v2/auth/logout`,{method:"POST",headers:{Accept:"applic\
54
54
  ation/json",Authorization:`Bearer ${creds.token}`}}).then(res=>res.ok,()=>false);await deleteCredentials(profile.name);writeOut(`\u2705 \u30ED\u30B0\u30A2\u30A6\u30C8\u3057\u307E\u3057\u305F\uFF08\u30D7\u30ED\u30D5\u30A1\u30A4\u30EB: ${profile.name} / \u30C8\u30FC\u30AF\u30F3: ${maskToken(creds.token)}\uFF09
55
55
  `);if(!revoked){writeOut("\u26A0 \u30B5\u30FC\u30D0\u5074\u306E\u30C8\u30FC\u30AF\u30F3\u5931\u52B9\u306B\u5931\u6557\u3057\u307E\u3057\u305F\uFF08\u30AA\u30D5\u30E9\u30A4\u30F3\u7B49\uFF09\u3002TWP \u306E\u300C\u8A2D\u5B9A > CLI\u7AEF\u672B\u300D\u304B\u3089\u3082\u5931\u52B9\u3067\u304D\u307E\u3059\u3002\n")}})}async function runWhoami(options){return run(async()=>{const profile=resolveProfile(options.profile);const structured=options.output!==void 0||options.query!==void 0;let format=null;if(structured){
56
56
  const{resolveOutputFormat,OUTPUT_FORMATS}=await import("./format-NMW6Y2E5.js");format=resolveOutputFormat({...options.output!==void 0?{flag:options.output}:{},isTty:process.stdout.isTTY===true});if(format===null){throw new UsageError(`--output \u306B\u300C${options.output??""}\u300D\u306F\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093`,`\u6307\u5B9A\u3067\u304D\u308B\u306E\u306F ${OUTPUT_FORMATS.join(" / ")} \u3067\u3059`)}}const stored=loadCredentials(profile.name);const apiUrl=effectiveApiUrl(
@@ -1,8 +1,8 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{LoopSettingsApplier,renderStepBudget}from"./chunk-WQ66EYZS.js";import{EngineNotConfiguredError,NoopEngine,UnknownEngineError,aiUnavailableLabel,assertKnownEngine,failureHint,isAiUnavailable,needsHumanToRestoreAi}from"./chunk-ZOOEH7ZE.js";import{claudeConfigDir,resolveDetectDeps}from"./chunk-24ZZFFA3.js";import{REQUIRE_ZERO_STATUS,ScheduleApi,collectDue,gateStatus,nowInZone,parseCounts,promptSection}from"./chunk-VYDEUFGU.js";import{AgentLoopApi,describeError,filterByStatus,
3
+ import{LoopSettingsApplier,renderStepBudget}from"./chunk-XAMHF5MK.js";import{EngineNotConfiguredError,NoopEngine,UnknownEngineError,aiUnavailableLabel,assertKnownEngine,failureHint,isAiUnavailable,needsHumanToRestoreAi}from"./chunk-ZOOEH7ZE.js";import{claudeConfigDir,resolveDetectDeps}from"./chunk-5PU5QU5U.js";import{REQUIRE_ZERO_STATUS,ScheduleApi,collectDue,gateStatus,nowInZone,parseCounts,promptSection}from"./chunk-VYDEUFGU.js";import{AgentLoopApi,describeError,filterByStatus,
4
4
  isPermanent,pick,pickString}from"./chunk-BKZGBJWT.js";import{InstanceLock,buildLockOwner,defaultIsLoopProcess,writeLockOwner}from"./chunk-3WHC4FSG.js";import{duplicateTaskKeyDropReason,excludedKeyInArgs,extractPlanJson,parseOpsCount,parsePlanExcludeKeys,placeholderTaskKey,releaseDeployDropReason,stepToItem,zeroTargetDropReasons}from"./chunk-VCZVITWG.js";import{CapacityReporter,buildLoopConfig,describeOperations,evaluateOwnership,formatHookIds,formatHookWiring,localDate,loopStateDir,
5
- runHook,runPrefetch,runPreflight}from"./chunk-VGMWPPGD.js";import{exclusiveInflightEntries,formatExclusiveEntry,normalizeSkillName,skillOfItem,spawnSyncResolved}from"./chunk-TYNCXQSN.js";import{killProcessTree}from"./chunk-N2UVRM3Z.js";import{PRIVATE_PROJECT_REF,isPrivateProjectId,isPrivateProjectRef,privateProjectId,projectFileKey}from"./chunk-GY7KI5E5.js";import{resolveProjectRef,uuidProjectIdPolicy}from"./chunk-GMBJTG6A.js";import{isTaskKey}from"./chunk-II5RVJQN.js";
5
+ runHook,runPrefetch,runPreflight}from"./chunk-RDJYKA3U.js";import{exclusiveInflightEntries,formatExclusiveEntry,normalizeSkillName,skillOfItem,spawnSyncResolved}from"./chunk-Y2XAWM2X.js";import{killProcessTree}from"./chunk-N2UVRM3Z.js";import{PRIVATE_PROJECT_REF,isPrivateProjectId,isPrivateProjectRef,privateProjectId,projectFileKey}from"./chunk-GY7KI5E5.js";import{resolveProjectRef,uuidProjectIdPolicy}from"./chunk-GMBJTG6A.js";import{isTaskKey}from"./chunk-II5RVJQN.js";
6
6
  import{AuthSession}from"./chunk-XNLIEUAW.js";import{joinFor}from"./chunk-PMOUHEJQ.js";import{httpFetch}from"./chunk-J7QYPKVK.js";import{compareVersionCores,parseVersionCore}from"./chunk-DXXFUNYN.js";import"./chunk-5WGOHFAS.js";import{effectiveApiUrl,resolveProfile}from"./chunk-NERYSBA4.js";import{twpHomeDir}from"./chunk-RZVI6PMW.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";import fs10 from"fs";import path8 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(
7
7
  message)}
8
8
  `;this.out.write(line);this.stream?.write(line)}separator(){this.log("=".repeat(60))}close(){this.stream?.end();this.stream=null}};function pad(n){return String(n).padStart(2,"0")}function rotateLogs(dir,retentionDays,now=Date.now()){if(retentionDays<=0)return;const cutoff=now-retentionDays*864e5;let entries;try{entries=fs.readdirSync(dir)}catch{return}for(const name of entries){if(!/^(agent-loop|task-loop|step|plan|schedule-enqueued)-.*\.(log|txt)$/.test(name))continue;const file=path.join(dir,
@@ -178,8 +178,9 @@ await this.engine.abort?.();if(!inFlight){this.abortDrained=null;return}this.dep
178
178
  resolve()},ABORT_DRAIN_TIMEOUT_MS);timer.unref?.()})]);if(timer!==null)clearTimeout(timer);this.abortDrained=null}async shutdown(){await this.planLock.release("failed")}async run(){const{config,log,runner}=this.deps;log.log(describeOperations(config.operations));if(!config.planEnabled){log.log("\u8A08\u753B\u30D5\u30A7\u30FC\u30BA\u306F\u7121\u52B9\u3067\u3059\uFF08plan_enabled=false\uFF09\u3002\u30AD\u30E5\u30FC\u304C\u7A7A\u3067\u3082\u8A08\u753BAI\u3092\u8D77\u52D5\u305B\u305A\u3001\u7A4D\u307E\u308C\u305F\u4ED5\u4E8B\u306E\u5B9F\u884C\u3060\u3051\u3092\u884C\u3044\u307E\u3059\u3002")}
179
179
  let cycle=0;let noProgressStreak=0;let unavailableStreak=0;let undeterminedStreak=0;let exitCode=0;while(cycle<config.maxCycles){if(this.aborting){log.log("\u4E2D\u65AD\u30B7\u30B0\u30CA\u30EB\u3092\u53D7\u3051\u3066\u3044\u308B\u305F\u3081\u3001\u65B0\u3057\u3044\u30B5\u30A4\u30AF\u30EB\u3092\u958B\u59CB\u3057\u307E\u305B\u3093\u3002");break}if(this.draining){log.log(`\u30C9\u30EC\u30A4\u30F3\u8981\u6C42\u3092\u53D7\u3051\u3066\u3044\u308B\u305F\u3081\u3001\u65B0\u3057\u3044\u30B5\u30A4\u30AF\u30EB\u3092\u958B\u59CB\u3057\u307E\u305B\u3093\uFF08\u7D42\u4E86\u30B3\u30FC\u30C9 ${this.
180
180
  drainExitCode}\uFF09\u3002`);exitCode=this.drainExitCode;break}cycle+=1;const cycleStart=Date.now();log.separator();log.log(`========== Cycle ${cycle}${config.daemon?"":`/${config.maxCycles}`} \u958B\u59CB ==========`);log.separator();await runner.beat("idle");log.log(formatHookWiring(config.prefetch,config.preflight));if(config.preflight.length>0){log.log(`\u74B0\u5883\u306E\u524D\u63D0\u6761\u4EF6\u3092\u78BA\u8A8D\u4E2D\uFF08\u30D5\u30C3\u30AF ${config.preflight.length}\u4EF6\uFF09...`)}this.
181
- cyclePreflightSection=await runPreflight(config.preflight,config.workspace,m=>log.log(m));await this.settings.apply();for(const line of normalizeGitIdentity(config.workspace,config.gitIdentity).logs)log.log(line);let planSkippedNoLock=false;const resent=await this.writeback.retryPending();for(const itemId of resent)await this.schedule.recordByItem(itemId,"completed");const reclaimRes=await this.deps.api.reclaim();if(!reclaimRes.ok){log.log(` \u26A0\uFE0F \u6B7B\u3093\u3060\u30E9\u30F3\u30CA\u30FC\u306E\u30A2\u30A4\u30C6\u30E0\u56DE\u53CEAPI\u304C\u5931\u6557\u3057\u307E\u3057\u305F\uFF08${describeError(
182
- reclaimRes)}\uFF09\u3002\u53D6\u308A\u6B8B\u3057\u304C\u6B8B\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059`)}await this.reclaimStaleProcessing();const trust=this.trustGate.evaluate();for(const line of trust.logs)log.log(line);if(trust.note!==null){this.cyclePreflightSection=this.cyclePreflightSection===""?trust.note:`${this.cyclePreflightSection}
181
+ cyclePreflightSection=await runPreflight(config.preflight,config.workspace,m=>log.log(m));await this.settings.apply();try{await this.engine.healthCheck?.({cwd:config.workspace,logFilePrefix:path5.join(config.logDir,`health-${this.timestamp}-${cycle}`)})}catch(err){log.log(` \u26A0\uFE0F AI\u30D8\u30EB\u30B9\u30C1\u30A7\u30C3\u30AF\u306B\u5931\u6557\u3057\u307E\u3057\u305F\uFF08${err.message}\uFF09\u3002\u9396\u306F\u305D\u306E\u307E\u307E\u4F7F\u3044\u307E\u3059`)}for(const line of normalizeGitIdentity(
182
+ config.workspace,config.gitIdentity).logs)log.log(line);let planSkippedNoLock=false;const resent=await this.writeback.retryPending();for(const itemId of resent)await this.schedule.recordByItem(itemId,"completed");const reclaimRes=await this.deps.api.reclaim();if(!reclaimRes.ok){log.log(` \u26A0\uFE0F \u6B7B\u3093\u3060\u30E9\u30F3\u30CA\u30FC\u306E\u30A2\u30A4\u30C6\u30E0\u56DE\u53CEAPI\u304C\u5931\u6557\u3057\u307E\u3057\u305F\uFF08${describeError(reclaimRes)}\uFF09\u3002\u53D6\u308A\u6B8B\u3057\u304C\u6B8B\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059`)}
183
+ await this.reclaimStaleProcessing();const trust=this.trustGate.evaluate();for(const line of trust.logs)log.log(line);if(trust.note!==null){this.cyclePreflightSection=this.cyclePreflightSection===""?trust.note:`${this.cyclePreflightSection}
183
184
 
184
185
  ${trust.note}`}if(trust.wait){await runner.beat("waiting");if(cycle<config.maxCycles)await this.sleepUnlessDraining(config.intervalSec*1e3);continue}const hadPending=await this.hasPendingItems();this.midcycleEnqueued=0;this.deferredIds=new Set;await this.enqueueDueScheduled(false);const planSkippedDisabled=!hadPending&&!config.planEnabled;if(hadPending){log.log("\u30AD\u30E5\u30FC\u306Bpending\u30A2\u30A4\u30C6\u30E0\u304C\u3042\u308A\u307E\u3059\u3002\u8A08\u753B\u3092\u30B9\u30AD\u30C3\u30D7\u3057\u3066\u5B9F\u884C\u306B\u9032\u307F\u307E\u3059\u3002")}else if(planSkippedDisabled){
185
186
  log.log("\u30AD\u30E5\u30FC\u306F\u7A7A\u3067\u3059\u304C\u3001\u3053\u306E\u6A5F\u4F53\u306F\u8A08\u753B\u3092\u7ACB\u3066\u306A\u3044\u8A2D\u5B9A\u3067\u3059\uFF08plan_enabled=false\uFF09\u3002AI \u3092\u8D77\u52D5\u305B\u305A\u30AD\u30E5\u30FC\u306E\u5B9F\u884C\u3078\u9032\u307F\u307E\u3059\u3002")}else{log.log("\u30AD\u30E5\u30FC\u304C\u7A7A\u3067\u3059\u3002\u8A08\u753B\u3092\u7ACB\u6848\u3057\u3066\u30A8\u30F3\u30AD\u30E5\u30FC\u3057\u307E\u3059\u3002")}if(planSkippedDisabled){}else if(!hadPending&&
@@ -307,12 +308,12 @@ const startedAtMs=now();let warned="";let done=false;const check=()=>{if(done)re
307
308
  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`)}
308
309
  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 fs9 from"fs";import path7 from"path";var POLL_MS=1e3;var MAX_STOP_BYTES=4096;var MAX_AT_LENGTH=64;function markerPath(lockDir2,kind){return path7.join(lockDir2,kind)}function requestMarker(lockDir2,kind,pid,deps={}){const target=markerPath(lockDir2,kind);const write=deps.writeFileSync??((p,d)=>fs9.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()})}
309
310
  `);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=>fs9.readFileSync(p,"utf8"));const size=deps.statSize??(p=>fs9.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)||
310
- 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=>fs9.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-3DJKBIV6.js");const{DEFAULT_PREFLIGHT_HOSTS}=await import("./ai-dispatch-3DJKBIV6.js");const extraHosts=config.
311
+ 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=>fs9.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-UQHPVRWN.js");const{DEFAULT_PREFLIGHT_HOSTS}=await import("./ai-dispatch-UQHPVRWN.js");const extraHosts=config.
311
312
  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,launcherBin:config.claudeLauncher.bin,...extraHosts.length>0?{preflightHosts:[...DEFAULT_PREFLIGHT_HOSTS,
312
313
  ...extraHosts]}:{}})}function lockDir(config){return path8.join(config.stateDir,`task-loop-${projectFileKey(config.projectId)}.lock.d`)}async function runTaskLoop(opts){if(opts.action==="stop")return await stopLoop(opts);const profile=resolveProfile(opts.profile);let creds;try{creds=new AuthSession(profile.name,profile.apiUrl).loadOrThrow()}catch(err){process.stderr.write(`${err.message}
313
314
  `);return 1}const apiUrl=effectiveApiUrl(profile,creds.api_url);const session=new AuthSession(profile.name,apiUrl);const projectRef=opts.project??process.env.TWP_PROJECT??"";if(projectRef===""){process.stderr.write("--project <\u30AD\u30FC|UUID> \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\uFF08TWP_PROJECT \u3067\u3082\u53EF\uFF09\n");return 2}const projectApi=new ProjectApi(apiUrl,session);let project;try{project=await projectApi.resolve(projectRef)}catch(err){process.stderr.write(`${err.
314
315
  message}
315
- `);return 1}const projectId=project.id;if(opts.action==="setup"){const{runSetup,parseAiList}=await import("./setup-BJKIHANC.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(" / ")}
316
+ `);return 1}const projectId=project.id;if(opts.action==="setup"){const{runSetup,parseAiList}=await import("./setup-CDQ2CEUR.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(" / ")}
316
317
  `);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.
317
318
  write("charter \u306B\u306F push \u304B pull \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}const{runCharterCommand}=await import("./charter-command-ULFOEZWE.js");return runCharterCommand({api:new AgentLoopApi({apiUrl,projectId,session})},{op:opts.
318
319
  charterOp,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 \u304B pull \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");
@@ -333,7 +334,7 @@ value:null};const shutdown=async()=>{if(shuttingDown)return;shuttingDown=true;st
333
334
  once("SIGINT",onSignal);process.once("SIGTERM",onSignal);process.once("SIGHUP",onSignal);stopWatcher=watchMarker(lockDir(config),"stop",process.pid,req=>{log.log(`\u505C\u6B62\u8981\u6C42\u3092\u53D7\u3051\u53D6\u308A\u307E\u3057\u305F\uFF08${req.at||"\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,
334
335
  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"}\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(
335
336
  {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.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}\
336
- \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`;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-YL6KALXG.js");const settings=new LoopSettingsApplier2(
337
+ \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`;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-RC5BOWUW.js");const settings=new LoopSettingsApplier2(
337
338
  {api,config,log:m=>log.log(m)});await settings.apply();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});
338
339
  if(pendingDrain.value!==null){loop.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\
339
340
  : ${config.projectRef}\uFF08${config.projectId}\uFF09
@@ -1,7 +1,7 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{cacheNote,createFlags,fieldBody,hasAnyField,idSegment,masterFields,masterItem,masterListOperation,masterRows,referencedDeleteGuidance,resolveRefFields,targetId,updateFlags}from"./chunk-IRAZ27WL.js";import"./chunk-UDPJ2IGK.js";import"./chunk-G4OO4M44.js";import{DEPARTMENTS_PATH}from"./chunk-NIAOX77K.js";import"./chunk-GMBJTG6A.js";import"./chunk-FTYJZFEK.js";import{withResolved}from"./chunk-ZN5EFDH7.js";import"./chunk-II5RVJQN.js";import{acknowledgement,
4
- isRecord,pick}from"./chunk-ZWVYVS2A.js";import"./chunk-J7QYPKVK.js";import"./chunk-NERYSBA4.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import{ApiResponseError,UsageError}from"./chunk-7WSNIXTQ.js";import"./chunk-VSJBJXZO.js";var LABEL="\u90E8\u7F72";var LIST_COLUMNS=["id","code","name","parent_id","level","effective_status","valid_from","valid_to","member_count"];var GET_COLUMNS=["id","code","name","name_short","parent_id","level","sort","effective_status","valid_from","valid_to","description"];var TREE_COLUMNS=["depth","name","code","id","effective_status","valid_to"];var MEMBER_COLUMNS=["id","user_id","position_id","job_title_id","start_date","end_date","is_primary","is_current","effective_status"];var REF_FLAG={name:"\
3
+ import{cacheNote,createFlags,fieldBody,hasAnyField,idSegment,masterFields,masterItem,masterListOperation,masterRows,referencedDeleteGuidance,resolveRefFields,targetId,updateFlags}from"./chunk-ZCA5CUH7.js";import"./chunk-G4OO4M44.js";import{DEPARTMENTS_PATH}from"./chunk-ECAVSNCJ.js";import"./chunk-GMBJTG6A.js";import"./chunk-FTYJZFEK.js";import{withResolved}from"./chunk-ZN5EFDH7.js";import"./chunk-II5RVJQN.js";import{acknowledgement,isRecord,pick}from"./chunk-ZWVYVS2A.js";
4
+ import"./chunk-J7QYPKVK.js";import"./chunk-NERYSBA4.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import{ApiResponseError,UsageError}from"./chunk-7WSNIXTQ.js";import"./chunk-VSJBJXZO.js";var LABEL="\u90E8\u7F72";var LIST_COLUMNS=["id","code","name","parent_id","level","effective_status","valid_from","valid_to","member_count"];var GET_COLUMNS=["id","code","name","name_short","parent_id","level","sort","effective_status","valid_from","valid_to","description"];var TREE_COLUMNS=["depth","name","code","id","effective_status","valid_to"];var MEMBER_COLUMNS=["id","user_id","position_id","job_title_id","start_date","end_date","is_primary","is_current","effective_status"];var REF_FLAG={name:"\
5
5
  --department",summary:"\u5BFE\u8C61\u306E\u90E8\u7F72\uFF08\u4F4D\u7F6E\u5F15\u6570\u306E\u4EE3\u308F\u308A\u306B\u4F7F\u3048\u308B\uFF09",takesValue:true,placeholder:"<\u90E8\u7F72>"};var REF_HELP="<\u90E8\u7F72> \u306F\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u30FBID \u306E\u3069\u308C\u3067\u3082\u6307\u5B9A\u3067\u304D\u307E\u3059\uFF08\u540D\u524D\u304C\u8907\u6570\u306B\u4E00\u81F4\u3059\u308C\u3070\u5019\u88DC\u3092\u51FA\u3057\u3066\u6B62\u307E\u308A\u307E\u3059\uFF09\u3002\nID \u4EE5\u5916\u306F\u90E8\u7F72\u4E00\u89A7\uFF08\u65E2\u5B9A10\u5206\u30AD\u30E3\u30C3\u30B7\u30E5\u30FB--refresh \u3067\u53D6\u308A\u76F4\u3057\uFF09\u3068\u7167\u5408\u3057\u307E\u3059\u3002";
6
6
  var FIELDS=masterFields(LABEL,[{kind:"text",flag:"--name-short",key:"name_short",label:"\u7565\u79F0",maxChars:50,summary:"\u7565\u79F0"},{kind:"ref",flag:"--parent",key:"parent_id",summary:"\u89AA\u90E8\u7F72\uFF08\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u30FBID\uFF09",placeholder:"<\u90E8\u7F72>",clearFlag:"--no-parent",clearSummary:"\u89AA\u90E8\u7F72\u3092\u5916\u3057\u3066\u6700\u4E0A\u4F4D\u306B\u3059\u308B",resolve:(ctx,ref,flag)=>ctx.resolver.department(ref,flag)},{kind:"integer",flag:"--sor\
7
7
  t",key:"sort",label:"\u8868\u793A\u9806",min:0,summary:"\u8868\u793A\u9806\uFF080\u4EE5\u4E0A\u306E\u6574\u6570\uFF09"},{kind:"date",flag:"--valid-from",key:"valid_from",summary:"\u6709\u52B9\u958B\u59CB\u65E5\uFF08YYYY-MM-DD\u30FBnone \u3067\u6D88\u3059\uFF09"},{kind:"date",flag:"--valid-to",key:"valid_to",summary:"\u6709\u52B9\u7D42\u4E86\u65E5\uFF08YYYY-MM-DD\u30FBnone \u3067\u6D88\u3059\uFF09\u3002\u3053\u306E\u65E5\u306E\u7FCC\u65E5\u304B\u3089\u7121\u52B9\u306B\u306A\u308B"},{kind:"boolean",
@@ -1,7 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{STATUS_VALUES,flatMasterDomain}from"./chunk-IRAZ27WL.js";import"./chunk-UDPJ2IGK.js";import"./chunk-G4OO4M44.js";import{JOB_TITLES_PATH}from"./chunk-NIAOX77K.js";import"./chunk-GMBJTG6A.js";import"./chunk-FTYJZFEK.js";import"./chunk-ZN5EFDH7.js";import"./chunk-II5RVJQN.js";import"./chunk-ZWVYVS2A.js";import"./chunk-J7QYPKVK.js";import"./chunk-NERYSBA4.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import"./chunk-7WSNIXTQ.js";
4
- import"./chunk-VSJBJXZO.js";var jobTitleDomain=flatMasterDomain({name:"job-title",label:"\u8077\u4F4D",path:JOB_TITLES_PATH,itemKey:"job_title",summary:"\u8077\u4F4D\u30DE\u30B9\u30BF\uFF08\u4E00\u89A7\u30FB\u53D6\u5F97\u30FB\u4F5C\u6210\u30FB\u66F4\u65B0\u30FB\u524A\u9664\uFF09",listColumns:["id","code","name","sort_order","status","position_id","base_selling_price","base_cost_price"],getColumns:["id","code","name","name_short","sort_order","status","position_id","base_selling_price","base_cost_price","description"],fields:[
3
+ import{STATUS_VALUES,flatMasterDomain}from"./chunk-ZCA5CUH7.js";import"./chunk-G4OO4M44.js";import{JOB_TITLES_PATH}from"./chunk-ECAVSNCJ.js";import"./chunk-GMBJTG6A.js";import"./chunk-FTYJZFEK.js";import"./chunk-ZN5EFDH7.js";import"./chunk-II5RVJQN.js";import"./chunk-ZWVYVS2A.js";import"./chunk-J7QYPKVK.js";import"./chunk-NERYSBA4.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import"./chunk-7WSNIXTQ.js";import"./chunk-VSJBJXZO.js";var jobTitleDomain=flatMasterDomain({name:"job-title",label:"\u8077\u4F4D",path:JOB_TITLES_PATH,itemKey:"job_title",summary:"\u8077\u4F4D\u30DE\u30B9\u30BF\uFF08\u4E00\u89A7\u30FB\u53D6\u5F97\u30FB\u4F5C\u6210\u30FB\u66F4\u65B0\u30FB\u524A\u9664\uFF09",listColumns:["id","code","name","sort_order","status","position_id","base_selling_price","base_cost_price"],getColumns:["id","code","name","name_short","sort_order","status","position_id","base_selling_price","base_cost_price","description"],fields:[
5
4
  {kind:"text",flag:"--name-short",key:"name_short",label:"\u7565\u79F0",maxChars:50,summary:"\u7565\u79F0"},{kind:"integer",flag:"--sort-order",key:"sort_order",label:"\u8868\u793A\u9806",min:0,max:9999,summary:"\u8868\u793A\u9806\uFF080\u301C9999\uFF09"},{kind:"enum",flag:"--status",key:"status",values:STATUS_VALUES,summary:"\u72B6\u614B\uFF08active: \u6709\u52B9 / inactive: \u7121\u52B9\uFF09"},{kind:"text",flag:"--description",key:"description",label:"\u8AAC\u660E",maxChars:1e3,summary:"\u8AAC\u660E"},
6
5
  {kind:"integer",flag:"--base-selling-price",key:"base_selling_price",label:"\u57FA\u6E96\u58F2\u4FA1",min:0,summary:"\u57FA\u6E96\u58F2\u4FA1\uFF080\u4EE5\u4E0A\u306E\u6574\u6570\uFF09"},{kind:"integer",flag:"--base-cost-price",key:"base_cost_price",label:"\u57FA\u6E96\u539F\u4FA1",min:0,summary:"\u57FA\u6E96\u539F\u4FA1\uFF080\u4EE5\u4E0A\u306E\u6574\u6570\uFF09"},{kind:"text",flag:"--skill-requirements",key:"skill_requirements",label:"\u30B9\u30AD\u30EB\u8981\u4EF6",maxChars:5e3,summary:"\u30B9\u30AD\u30EB\u8981\u4EF6"},
7
6
  {kind:"ref",flag:"--position",key:"position_id",summary:"\u7D10\u3065\u3051\u308B\u5F79\u8077\uFF08\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u30FBID\uFF09",placeholder:"<\u5F79\u8077>",clearFlag:"--no-position",clearSummary:"\u5F79\u8077\u3068\u306E\u7D10\u3065\u3051\u3092\u5916\u3059",resolve:(ctx,ref,flag)=>ctx.resolver.position(ref,flag)}],resolve:(ctx,ref,flag)=>ctx.resolver.jobTitle(ref,flag),deleteGuidance:"\u4ECA\u5F8C\u4F7F\u308F\u306A\u3044\u8077\u4F4D\u306F\u3001\u524A\u9664\u305B\u305A\u306B\u7121\u52B9\u5316\u3057\u3066\u304F\u3060\u3055\u3044: twp job-title update <\u8077\u4F4D> --status inactive\n\uFF08\u904E\u53BB\u306E\u6240\u5C5E\u306E\u8A18\u9332\u306F\u305D\u306E\u307E\u307E\u6B8B\u308A\u307E\u3059\
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{defaultIsLoopProcess,readLockOwner,sameTwpHome}from"./chunk-3WHC4FSG.js";import{loopStateDir}from"./chunk-VGMWPPGD.js";import"./chunk-TYNCXQSN.js";import"./chunk-N2UVRM3Z.js";import"./chunk-GY7KI5E5.js";import"./chunk-PMOUHEJQ.js";import"./chunk-5WGOHFAS.js";import{twpHomeDir}from"./chunk-RZVI6PMW.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";import fs from"fs";import path from"path";var PIDLESS_GRACE_MS=6e4;function defaultStateDirs(env){const dirs=[loopStateDir(env),loopStateDir({})].map(d=>path.resolve(d));return[...new Set(dirs)]}function readPidFile(lockDir){try{const raw=fs.readFileSync(path.join(lockDir,"pid"),"utf8").split("\n")[0]?.trim()??"";const n=Number.parseInt(raw,10);return{pid:Number.isInteger(n)&&n>0?n:null,error:null}}catch(err){const code=err.code;return{pid:null,error:code==="ENOENT"?null:code??err.message}}}function findLoopsUsingProfile(profileName,deps={}){
3
+ import{defaultIsLoopProcess,readLockOwner,sameTwpHome}from"./chunk-3WHC4FSG.js";import{loopStateDir}from"./chunk-RDJYKA3U.js";import"./chunk-Y2XAWM2X.js";import"./chunk-N2UVRM3Z.js";import"./chunk-GY7KI5E5.js";import"./chunk-PMOUHEJQ.js";import"./chunk-5WGOHFAS.js";import{twpHomeDir}from"./chunk-RZVI6PMW.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";import fs from"fs";import path from"path";var PIDLESS_GRACE_MS=6e4;function defaultStateDirs(env){const dirs=[loopStateDir(env),loopStateDir({})].map(d=>path.resolve(d));return[...new Set(dirs)]}function readPidFile(lockDir){try{const raw=fs.readFileSync(path.join(lockDir,"pid"),"utf8").split("\n")[0]?.trim()??"";const n=Number.parseInt(raw,10);return{pid:Number.isInteger(n)&&n>0?n:null,error:null}}catch(err){const code=err.code;return{pid:null,error:code==="ENOENT"?null:code??err.message}}}function findLoopsUsingProfile(profileName,deps={}){
4
4
  const env=deps.env??process.env;const now=deps.now??Date.now;const isLoopProcess=deps.isLoopProcess??defaultIsLoopProcess;const myHome=twpHomeDir(env);const result={users:[],undetermined:[]};for(const stateDir of deps.stateDirs??defaultStateDirs(env)){let dirs;try{dirs=fs.readdirSync(stateDir).filter(d=>/^task-loop-.*\.lock\.d$/.test(d))}catch(err){if(err.code==="ENOENT")continue;result.undetermined.push({pid:null,lockDir:stateDir,reason:`\u30ED\u30C3\u30AF\u306E\u7F6E\u304D\u5834\u6240\u3092\u8AAD\u3081\u307E\u305B\u3093\uFF08${err.
5
5
  code??err.message}\uFF09`});continue}for(const dir of dirs){const lockDir=path.join(stateDir,dir);const pidFile=readPidFile(lockDir);if(pidFile.error!==null){result.undetermined.push({pid:null,lockDir,reason:`pid \u3092\u8AAD\u3081\u307E\u305B\u3093\uFF08${pidFile.error}\uFF09`});continue}const owner=readLockOwner(lockDir);let pid=pidFile.pid;if(pid===null){if(owner.ok){pid=owner.owner.pid}else{let ageMs=null;try{ageMs=now()-fs.statSync(lockDir).mtimeMs}catch{}if(ageMs!==null&&ageMs>=PIDLESS_GRACE_MS)
6
6
  continue;result.undetermined.push({pid:null,lockDir,reason:"\u30ED\u30C3\u30AF\u306B pid \u304C\u3042\u308A\u307E\u305B\u3093\uFF08\u8D77\u52D5\u76F4\u5F8C\u306E\u53EF\u80FD\u6027\uFF09"});continue}}if(!isLoopProcess(pid))continue;if(!owner.ok){result.undetermined.push({pid,lockDir,reason:owner.reason});continue}if(owner.owner.pid!==pid){result.undetermined.push({pid,lockDir,reason:`\u6240\u6709\u8005\u306E\u8A18\u9332\uFF08pid=${owner.owner.pid}\uFF09\u304C\u30ED\u30C3\u30AF\u306E pid \u3068\u4E00\u81F4\u3057\u307E\u305B\u3093`});
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{contentTypeFor}from"./chunk-KUIFIN7P.js";import"./chunk-GY7KI5E5.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-G4OO4M44.js";import"./chunk-NIAOX77K.js";import{isSafePathSegment}from"./chunk-GMBJTG6A.js";import"./chunk-FTYJZFEK.js";import{requireResolved,singleRef,withResolved}from"./chunk-ZN5EFDH7.js";import"./chunk-II5RVJQN.js";import{checkUploadQuota}from"./chunk-DDKZ5IPT.js";import{isRecord,
3
+ import{contentTypeFor}from"./chunk-KAUPWF5Q.js";import"./chunk-GY7KI5E5.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-G4OO4M44.js";import"./chunk-ECAVSNCJ.js";import{isSafePathSegment}from"./chunk-GMBJTG6A.js";import"./chunk-FTYJZFEK.js";import{requireResolved,singleRef,withResolved}from"./chunk-ZN5EFDH7.js";import"./chunk-II5RVJQN.js";import{checkUploadQuota}from"./chunk-DDKZ5IPT.js";import{isRecord,
4
4
  pick}from"./chunk-ZWVYVS2A.js";import"./chunk-J7QYPKVK.js";import"./chunk-NERYSBA4.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import{ApiRejectedError,ApiResponseError,UsageError}from"./chunk-7WSNIXTQ.js";import"./chunk-VSJBJXZO.js";import crypto from"crypto";import fs from"fs";import path from"path";var SCOPE_PERSONAL="personal";var SCOPE_PROJECT="project";var LIST_COLUMNS=["id","file_name","content_type","file_size","folder_id","public_status","updated_at"];var UPLOAD_COLUMNS=["id","file_name","content_type","file_size","folder_id","scope","content_hash"];var FILE_FLAG={name:"--file",summary:"\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3059\u308B\u30ED\u30FC\u30AB\u30EB\u30D5\u30A1\u30A4\u30EB\u306E\u30D1\u30B9\uFF08\u5FC5\u9808\uFF09",takesValue:true,placeholder:"<\u30D1\u30B9>"};var NAME_FLAG={
5
5
  name:"--name",summary:"\u4FDD\u5B58\u3059\u308B\u30D5\u30A1\u30A4\u30EB\u540D\uFF08\u7701\u7565\u6642\u306F\u30ED\u30FC\u30AB\u30EB\u306E\u30D5\u30A1\u30A4\u30EB\u540D\u3002\u540C\u540D\u304C\u3042\u308B\u3068\u30B5\u30FC\u30D0\u304C\u5225\u540D\u306B\u3057\u307E\u3059\uFF09",takesValue:true,placeholder:"<\u30D5\u30A1\u30A4\u30EB\u540D>"};var CONTENT_TYPE_FLAG={name:"--content-type",summary:"Content-Type\uFF08\u7701\u7565\u6642\u306F\u62E1\u5F35\u5B50\u304B\u3089\u63A8\u5B9A\u3002\u4E0D\u660E\u306A\u3089 application/octet-stream\uFF09",
6
6
  takesValue:true,placeholder:"<\u578B>"};var FOLDER_FLAG={name:"--folder",summary:"\u30D5\u30A9\u30EB\u30C0ID\uFF08\u7701\u7565\u6642\u306F\u30B9\u30B3\u30FC\u30D7\u306E\u6700\u4E0A\u4F4D\uFF09",takesValue:true,placeholder:"<\u30D5\u30A9\u30EB\u30C0ID>"};var MEDIA_PROJECT_FLAG={name:"--project",summary:"\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u5BFE\u8C61\u306B\u3059\u308B\uFF08\u30B3\u30FC\u30C9\u307E\u305F\u306F ID\uFF09\u3002\u7701\u7565\u6642\u306F\u81EA\u5206\u306E\u500B\u4EBA\u30D5\u30A1\u30A4\u30EB",
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{activateModeFiles,activatePermissionSettings,buildResidentSet,buildSystemPrompt,createAuditLogger,createTwpToolkit,currentBranch,displayCwd,residentInputs,runTurn}from"./chunk-KEP5QSS4.js";import"./chunk-NZ7WI4RZ.js";import"./chunk-YVAN3H5W.js";import"./chunk-N2UVRM3Z.js";import"./chunk-NIAOX77K.js";import"./chunk-GMBJTG6A.js";import"./chunk-FTYJZFEK.js";import"./chunk-II5RVJQN.js";import{getMode}from"./chunk-NAUH75MM.js";import{RelayError,
3
+ import{activateModeFiles,activatePermissionSettings,buildResidentSet,buildSystemPrompt,createAuditLogger,createTwpToolkit,currentBranch,displayCwd,residentInputs,runTurn}from"./chunk-KEP5QSS4.js";import"./chunk-NZ7WI4RZ.js";import"./chunk-YVAN3H5W.js";import"./chunk-N2UVRM3Z.js";import"./chunk-ECAVSNCJ.js";import"./chunk-GMBJTG6A.js";import"./chunk-FTYJZFEK.js";import"./chunk-II5RVJQN.js";import{getMode}from"./chunk-NAUH75MM.js";import{RelayError,
4
4
  createRuntime,pickModel}from"./chunk-Z2MNO3FT.js";import"./chunk-XNLIEUAW.js";import"./chunk-PMOUHEJQ.js";import"./chunk-J7QYPKVK.js";import{checkMinSupportedVersion,enforceMinSupportedVersion,floorNeedsRefresh}from"./chunk-DXXFUNYN.js";import"./chunk-NERYSBA4.js";import"./chunk-RZVI6PMW.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";import"./chunk-7WSNIXTQ.js";import"./chunk-VSJBJXZO.js";async function runOneShot(opts,deps={}){const out=deps.out??(text=>void process.stdout.write(stripTerminalControls(text)));const err=deps.err??(text=>void process.stderr.write(stripTerminalControls(text)));activateModeFiles(err);const permissionLayers=activatePermissionSettings(err,{...opts.allowedTools?{allowedTools:opts.allowedTools}:{},...opts.disallowedTools?{disallowedTools:opts.disallowedTools}:{}});const prompt=opts.fromStdin?await(deps.readStdin??readStdin)():opts.prompt;if(prompt.trim()===
5
5
  ""){err('\u30D7\u30ED\u30F3\u30D7\u30C8\u304C\u7A7A\u3067\u3059\u3002`twp -p "\u8CEA\u554F"`\uFF08`-p -` \u3067\u6A19\u6E96\u5165\u529B\uFF09\n');return 2}const runtime=deps.runtime??createRuntime({...opts.profile!==void 0?{profile:opts.profile}:{},...opts.model!==void 0?{model:opts.model}:{},cliVersion:opts.version});const cachedFloor=runtime.loadCachedFloor();if(await checkMinSupportedVersion({current:opts.version,cachedFloor:cachedFloor.minSupportedVersion,refresh:async()=>(await runtime.loadCatalog()).
6
6
  minSupportedVersion,write:err})){return 1}if(!runtime.loggedIn){err("\u30ED\u30B0\u30A4\u30F3\u3057\u3066\u3044\u307E\u305B\u3093\u3002`twp login` \u3092\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044\u3002\n");return 1}let model=runtime.configuredModel??"";let catalog=null;if(model===""){catalog=await runtime.loadCatalog();const picked=pickModel(catalog,void 0);model=picked.model;if(catalog.source!=="server"){err(`\u26A0 \u30E2\u30C7\u30EB\u4E00\u89A7\u3092\u53D6\u5F97\u3067\u304D\u306A\u304B\u3063\u305F\u305F\u3081 ${model}\
@@ -1,7 +1,7 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{STATUS_VALUES,booleanQuery,flatMasterDomain}from"./chunk-IRAZ27WL.js";import"./chunk-UDPJ2IGK.js";import"./chunk-G4OO4M44.js";import{POSITIONS_PATH}from"./chunk-NIAOX77K.js";import"./chunk-GMBJTG6A.js";import"./chunk-FTYJZFEK.js";import"./chunk-ZN5EFDH7.js";import"./chunk-II5RVJQN.js";import"./chunk-ZWVYVS2A.js";import"./chunk-J7QYPKVK.js";import"./chunk-NERYSBA4.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";
4
- import"./chunk-7WSNIXTQ.js";import"./chunk-VSJBJXZO.js";var positionDomain=flatMasterDomain({name:"position",label:"\u5F79\u8077",path:POSITIONS_PATH,itemKey:"position",summary:"\u5F79\u8077\u30DE\u30B9\u30BF\uFF08\u4E00\u89A7\u30FB\u53D6\u5F97\u30FB\u4F5C\u6210\u30FB\u66F4\u65B0\u30FB\u524A\u9664\uFF09",listColumns:["id","code","name","rank","is_manager","status","user_count"],getColumns:["id","code","name","name_short","rank","is_manager","status","description"],fields:[{kind:"text",flag:"--name-short",key:"name_short",label:"\u7565\u79F0",maxChars:50,
3
+ import{STATUS_VALUES,booleanQuery,flatMasterDomain}from"./chunk-ZCA5CUH7.js";import"./chunk-G4OO4M44.js";import{POSITIONS_PATH}from"./chunk-ECAVSNCJ.js";import"./chunk-GMBJTG6A.js";import"./chunk-FTYJZFEK.js";import"./chunk-ZN5EFDH7.js";import"./chunk-II5RVJQN.js";import"./chunk-ZWVYVS2A.js";import"./chunk-J7QYPKVK.js";import"./chunk-NERYSBA4.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import"./chunk-7WSNIXTQ.js";
4
+ import"./chunk-VSJBJXZO.js";var positionDomain=flatMasterDomain({name:"position",label:"\u5F79\u8077",path:POSITIONS_PATH,itemKey:"position",summary:"\u5F79\u8077\u30DE\u30B9\u30BF\uFF08\u4E00\u89A7\u30FB\u53D6\u5F97\u30FB\u4F5C\u6210\u30FB\u66F4\u65B0\u30FB\u524A\u9664\uFF09",listColumns:["id","code","name","rank","is_manager","status","user_count"],getColumns:["id","code","name","name_short","rank","is_manager","status","description"],fields:[{kind:"text",flag:"--name-short",key:"name_short",label:"\u7565\u79F0",maxChars:50,
5
5
  summary:"\u7565\u79F0"},{kind:"integer",flag:"--rank",key:"rank",label:"\u30E9\u30F3\u30AF",min:0,max:9999,summary:"\u30E9\u30F3\u30AF\uFF080\u301C9999\u3002\u5927\u304D\u3044\u307B\u3069\u4E0A\u4F4D\uFF09"},{kind:"boolean",flag:"--manager",key:"is_manager",summary:"\u7BA1\u7406\u8077\u304B\uFF08true / false\uFF09"},{kind:"boolean",flag:"--can-view-personal-info",key:"can_view_personal_info",summary:"\u90E8\u4E0B\u306E\u500B\u4EBA\u60C5\u5831\u3092\u95B2\u89A7\u3067\u304D\u308B\u304B\uFF08true / false\uFF09"},
6
6
  {kind:"boolean",flag:"--can-view-emergency-contact",key:"can_view_emergency_contact",summary:"\u90E8\u4E0B\u306E\u7DCA\u6025\u9023\u7D61\u5148\u3092\u95B2\u89A7\u3067\u304D\u308B\u304B\uFF08true / false\uFF09"},{kind:"boolean",flag:"--can-view-work-tel",key:"can_view_work_tel",summary:"\u90E8\u4E0B\u306E\u696D\u52D9\u7528\u96FB\u8A71\u756A\u53F7\u3092\u95B2\u89A7\u3067\u304D\u308B\u304B\uFF08true / false\uFF09"},{kind:"enum",flag:"--status",key:"status",values:STATUS_VALUES,summary:"\u72B6\u614B\uFF08active: \u6709\
7
7
  \u52B9 / inactive: \u7121\u52B9\uFF09"},{kind:"text",flag:"--description",key:"description",label:"\u8AAC\u660E",maxChars:1e3,summary:"\u8AAC\u660E"}],listFilters:[{flag:{name:"--manager",summary:"\u7BA1\u7406\u8077\u304B\u3069\u3046\u304B\u3067\u7D5E\u308A\u8FBC\u3080\uFF08true / false\uFF09",takesValue:true,placeholder:"<true|false>"},query:"is_manager",value:raw=>booleanQuery("--manager",raw)}],resolve:(ctx,ref,flag)=>ctx.resolver.position(ref,flag),deleteGuidance:"\u4ECA\u5F8C\u4F7F\u308F\u306A\u3044\u5F79\u8077\u306F\u3001\u524A\u9664\u305B\u305A\u306B\u7121\u52B9\u5316\u3057\u3066\u304F\u3060\u3055\u3044: t\
@@ -1,4 +1,4 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{CURATED_PAGING_VOCABULARY,buildPrepareContext,exitCodeFor,fetchAllPages,outputValue,reportError,requiresYes,resolvePaging,runDomain}from"./chunk-X45SJNT2.js";import"./chunk-IOGVQVGD.js";import"./chunk-5Q2CH4E7.js";import"./chunk-YVAN3H5W.js";import"./chunk-G4OO4M44.js";import"./chunk-NIAOX77K.js";import"./chunk-GMBJTG6A.js";import"./chunk-FTYJZFEK.js";import"./chunk-II5RVJQN.js";import"./chunk-TAN5I2DP.js";import"./chunk-SP27PYHC.js";
3
+ import{CURATED_PAGING_VOCABULARY,buildPrepareContext,exitCodeFor,fetchAllPages,outputValue,reportError,requiresYes,resolvePaging,runDomain}from"./chunk-QQR4OHGV.js";import"./chunk-IOGVQVGD.js";import"./chunk-5Q2CH4E7.js";import"./chunk-YVAN3H5W.js";import"./chunk-G4OO4M44.js";import"./chunk-ECAVSNCJ.js";import"./chunk-GMBJTG6A.js";import"./chunk-FTYJZFEK.js";import"./chunk-II5RVJQN.js";import"./chunk-TAN5I2DP.js";import"./chunk-SP27PYHC.js";
4
4
  import"./chunk-QQRJLH6B.js";import"./chunk-XNLIEUAW.js";import"./chunk-J7QYPKVK.js";import"./chunk-NERYSBA4.js";import"./chunk-RZVI6PMW.js";import"./chunk-K2ONOH3L.js";import"./chunk-WVS4W5FY.js";import"./chunk-NHYMHCAT.js";import"./chunk-GDM2QUBL.js";import"./chunk-7WSNIXTQ.js";import"./chunk-VSJBJXZO.js";export{CURATED_PAGING_VOCABULARY,buildPrepareContext,exitCodeFor,fetchAllPages,outputValue,reportError,requiresYes,resolvePaging,runDomain};
@@ -1,3 +1,3 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{LoopSettingsApplier,PROMPT_KEYS,formatConfigHash,parseServerSettings,renderStepBudget}from"./chunk-WQ66EYZS.js";import"./chunk-BKZGBJWT.js";import"./chunk-TYNCXQSN.js";import"./chunk-GY7KI5E5.js";import"./chunk-PMOUHEJQ.js";import"./chunk-J7QYPKVK.js";import"./chunk-5WGOHFAS.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";export{LoopSettingsApplier,PROMPT_KEYS,formatConfigHash,parseServerSettings,renderStepBudget};
3
+ import{LoopSettingsApplier,PROMPT_KEYS,formatConfigHash,parseServerSettings,renderStepBudget}from"./chunk-XAMHF5MK.js";import"./chunk-BKZGBJWT.js";import"./chunk-Y2XAWM2X.js";import"./chunk-GY7KI5E5.js";import"./chunk-PMOUHEJQ.js";import"./chunk-J7QYPKVK.js";import"./chunk-5WGOHFAS.js";import"./chunk-NHYMHCAT.js";import"./chunk-VSJBJXZO.js";export{LoopSettingsApplier,PROMPT_KEYS,formatConfigHash,parseServerSettings,renderStepBudget};
@@ -1,6 +1,6 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{detectAiClis,formatDetection,isDetectableAi,isSelectable}from"./chunk-24ZZFFA3.js";import{PromptAbortedError,promptText}from"./chunk-L37NS5L2.js";import{localConfigPath,parseClaudeLauncher}from"./chunk-VGMWPPGD.js";import{AiConfig}from"./chunk-TYNCXQSN.js";import"./chunk-N2UVRM3Z.js";import"./chunk-GY7KI5E5.js";import"./chunk-PMOUHEJQ.js";import"./chunk-5WGOHFAS.js";import"./chunk-RZVI6PMW.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";
3
+ import{detectAiClis,formatDetection,isDetectableAi,isSelectable}from"./chunk-5PU5QU5U.js";import{PromptAbortedError,promptText}from"./chunk-L37NS5L2.js";import{localConfigPath,parseClaudeLauncher}from"./chunk-RDJYKA3U.js";import{AiConfig}from"./chunk-Y2XAWM2X.js";import"./chunk-N2UVRM3Z.js";import"./chunk-GY7KI5E5.js";import"./chunk-PMOUHEJQ.js";import"./chunk-5WGOHFAS.js";import"./chunk-RZVI6PMW.js";import{stripTerminalControls}from"./chunk-NHYMHCAT.js";
4
4
  import"./chunk-VSJBJXZO.js";import fs from"fs";import path from"path";var RECOMMENDED_ROTATION={complex:["claude"],verify:["claude"],security:["claude"],support:["claude"],triage:["claude"],search:["claude"],simple:["claude"]};var RECOMMENDED_CHAINS={complex:["claude","codex"],verify:["claude","codex","copilot"],security:["claude","codex","copilot"],support:["claude","codex","copilot"],triage:["codex","gemini","copilot","claude"],search:["codex","gemini","copilot","claude"],simple:["codex","gemini","copilot","claude"]};var PREFERENCE=["claude","codex","gemini","co\
5
5
  pilot"];function buildAiAssignment(selected){if(selected.length===0)throw new Error("\u9078\u629E\u3055\u308C\u305FAI\u304C\u7A7A\u3067\u3059");const fallbackOrder=PREFERENCE.filter(ai=>selected.includes(ai));for(const ai of selected)if(!fallbackOrder.includes(ai))fallbackOrder.push(ai);const chains={};const rotation={};for(const category of Object.keys(RECOMMENDED_CHAINS)){const filtered=(RECOMMENDED_CHAINS[category]??[]).filter(ai=>selected.includes(ai));const chain=filtered.length>0?filtered:
6
6
  [...fallbackOrder];chains[category]=chain;const rot=(RECOMMENDED_ROTATION[category]??[]).filter(ai=>selected.includes(ai));const head=chain[0];rotation[category]=rot.length>0?rot:head===void 0?[...fallbackOrder]:[head]}return{primary_rotation:rotation,fallback_chains:chains}}var SETUP_EXIT_NO_CLI=3;var SETUP_EXIT_ABORTED=130;async function runSetup(opts){const env=opts.env??process.env;const rawOut=opts.out??(t=>void process.stdout.write(t));const rawErr=opts.err??(t=>void process.stderr.write(t));
@@ -1,8 +1,8 @@
1
1
  import { createRequire as __twpCreateRequire } from 'node:module';
2
2
  const require = __twpCreateRequire(import.meta.url);
3
- import{repeatedValues}from"./chunk-IOGVQVGD.js";import{charCount,readBody}from"./chunk-HGTG5XQ7.js";import{boundedText,decimal,isoDate,priority}from"./chunk-UDPJ2IGK.js";import{PROJECT_FLAG,TASK_REF_FLAG,TASK_REF_HELP,classifyTaskRef,rejectRedundantProject,resolveTaskLocation,taskAttachmentResource,taskSurface,wantsPrivateSurface}from"./chunk-KUIFIN7P.js";import{PRIVATE_PROJECT_REF}from"./chunk-GY7KI5E5.js";import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,
4
- positiveInteger}from"./chunk-G4OO4M44.js";import{PRIVATE_TASKS_PATH,TASK_MASTERS}from"./chunk-NIAOX77K.js";import{isSafePathSegment}from"./chunk-GMBJTG6A.js";import"./chunk-FTYJZFEK.js";import{requireResolved,singleRef,withResolved}from"./chunk-ZN5EFDH7.js";import"./chunk-II5RVJQN.js";import"./chunk-DDKZ5IPT.js";import{acknowledgement,isRecord,pick}from"./chunk-ZWVYVS2A.js";import"./chunk-QQRJLH6B.js";import"./chunk-J7QYPKVK.js";import"./chunk-NERYSBA4.js";
5
- import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import{ApiResponseError,UsageError}from"./chunk-7WSNIXTQ.js";import"./chunk-VSJBJXZO.js";var LIST_COLUMNS=["id","created_at","created_by_name","comment_type","content"];var QUESTION_COLUMN="question";var ANSWER_COLUMN="answer";function summarizeComments(items){const answersByQuestion=new Map;for(const row of items){const answer=isRecord(row)?row["answer_to"]:void 0;if(!isRecord(answer))continue;const target=answer["comment_id"];if(typeof target!=="string"||target==="")continue;answersByQuestion.set(target,selectedKeyText(answer["selected_key"]))}return items.map(row=>{const source=isRecord(
3
+ import{repeatedValues}from"./chunk-IOGVQVGD.js";import{charCount,readBody}from"./chunk-HGTG5XQ7.js";import{boundedText,createFlags,decimal,fieldBody,hasAnyField,isoDate,priority,updateFlags}from"./chunk-ZCA5CUH7.js";import{PROJECT_FLAG,TASK_REF_FLAG,TASK_REF_HELP,classifyTaskRef,rejectPrivateSurface,rejectRedundantProject,resolveTaskLocation,taskAttachmentResource,taskSurface,wantsPrivateSurface}from"./chunk-KAUPWF5Q.js";import{PRIVATE_PROJECT_REF}from"./chunk-GY7KI5E5.js";
4
+ import{LIST_FLAGS,LIST_PAGING_HELP,envelopePaging,nonEmpty,positiveInteger}from"./chunk-G4OO4M44.js";import{PRIVATE_TASKS_PATH,TASK_MASTERS}from"./chunk-ECAVSNCJ.js";import{UUID_RE,isSafePathSegment}from"./chunk-GMBJTG6A.js";import"./chunk-FTYJZFEK.js";import{requireResolved,singleRef,withResolved}from"./chunk-ZN5EFDH7.js";import"./chunk-II5RVJQN.js";import"./chunk-DDKZ5IPT.js";import{acknowledgement,isRecord,pick}from"./chunk-ZWVYVS2A.js";import"./chunk-QQRJLH6B.js";
5
+ import"./chunk-J7QYPKVK.js";import"./chunk-NERYSBA4.js";import"./chunk-RZVI6PMW.js";import"./chunk-NHYMHCAT.js";import{ApiResponseError,UsageError}from"./chunk-7WSNIXTQ.js";import"./chunk-VSJBJXZO.js";var LIST_COLUMNS=["id","created_at","created_by_name","comment_type","content"];var QUESTION_COLUMN="question";var ANSWER_COLUMN="answer";function summarizeComments(items){const answersByQuestion=new Map;for(const row of items){const answer=isRecord(row)?row["answer_to"]:void 0;if(!isRecord(answer))continue;const target=answer["comment_id"];if(typeof target!=="string"||target==="")continue;answersByQuestion.set(target,selectedKeyText(answer["selected_key"]))}return items.map(row=>{const source=isRecord(
6
6
  row)?row:{};const id=typeof source["id"]==="string"?source["id"]:"";const answer=isRecord(source["answer_to"])?selectedKeyText(source["answer_to"]["selected_key"]):answersByQuestion.get(id)??null;const base=pick(row,LIST_COLUMNS);return{id:base["id"],created_at:base["created_at"],created_by_name:base["created_by_name"],comment_type:base["comment_type"],[QUESTION_COLUMN]:questionText(source["question"]),[ANSWER_COLUMN]:answer,content:base["content"]}})}function questionText(question){if(!isRecord(
7
7
  question))return null;const options=question["options"];if(!Array.isArray(options))return null;const parts=options.map(option=>{if(!isRecord(option))return null;const key=typeof option["key"]==="string"?option["key"]:null;if(key===null)return null;const label=typeof option["label"]==="string"?option["label"]:"";return label===""?key:`${key}=${label}`}).filter(part=>part!==null);return parts.length===0?null:parts.join(" / ")}function selectedKeyText(selected){if(typeof selected==="string"&&selected!==
8
8
  "")return selected;if(Array.isArray(selected)){const keys=selected.filter(key=>typeof key==="string"&&key!=="");if(keys.length>0)return keys.join(",")}return"(\u81EA\u7531\u8A18\u8FF0)"}var WRITE_COLUMNS=["id","task_id","created_at","updated_at","created_by_name","content"];var CONTENT_MAX_CHARS=1e4;var QUESTION_MAX_CHARS=2e3;var CONTENT_HTML_MAX_CHARS=1e5;var OPTION_KEY_MAX_CHARS=10;var OPTION_LABEL_MAX_CHARS=200;var OPTION_MIN=1;var OPTION_MAX=5;var SELECTED_KEY_MAX_CHARS=10;var listPaging=envelopePaging(
@@ -71,18 +71,36 @@ throw new UsageError(`--project ${PRIVATE_PROJECT_REF}\uFF08\u500B\u4EBA\u30BF\u
71
71
  IVATE-22361\uFF09\u300D\u306B\u3082\u300CID\uFF08UUID / ULID\uFF09\u300D\u306B\u3082\u898B\u3048\u307E\u305B\u3093: ${ref}`,`\u500B\u4EBA\u30BF\u30B9\u30AF\u306E\u4E00\u89A7\u306F twp task list --project ${PRIVATE_PROJECT_REF} \u3067\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002`)}return{kind,value}}async function resolvePrivateTaskId(ctx,ref){const{kind,value}=privateTaskRef(ref);if(kind==="id")return value;const task=await ctx.resolver.privateTask(value);const id=task["id"];if(!isSafePathSegment(id)){
72
72
  throw new ApiResponseError(`\u500B\u4EBA\u30BF\u30B9\u30AF\u306E\u5FDC\u7B54\u306E task.id \u3092\u305D\u306E\u307E\u307E\u4F7F\u3048\u307E\u305B\u3093\uFF08${String(id).slice(0,60)}\uFF09\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return id}async function resolvePrivateStatusAndType(input,ctx,options){const out={};const status=nonEmpty(input.flags,"--status");if(status!==void 0){out["status_id"]=(await ctx.resolver.privateStatus(status)).id}else if(options.
73
73
  useDefaults){const ref=await ctx.resolver.privateDefaultStatus();out["status_id"]=ref.id;out["status_defaulted"]=ref.name}const type=nonEmpty(input.flags,"--type");if(type!==void 0){out["type_id"]=(await ctx.resolver.privateTaskType(type)).id}else if(options.useDefaults){const ref=await ctx.resolver.privateDefaultTaskType();out["type_id"]=ref.id;out["type_defaulted"]=ref.name}return out}async function resolvePrivateExtras(input,ctx){const out={};const category=nonEmpty(input.flags,"--category");
74
- if(category!==void 0){out["category_id"]=(await ctx.resolver.privateTaskMaster("categories",category,"--category","\u30AB\u30C6\u30B4\u30EA")).id}const labels=repeatedValues(input,"--label");if(labels.length>0){const ids=[];for(const ref of labels){const label=await ctx.resolver.privateTaskMaster("labels",ref,"--label","\u30E9\u30D9\u30EB");if(!ids.includes(label.id))ids.push(label.id)}out["label_ids"]=JSON.stringify(ids)}return out}var SPECS=[{kind:"status",resource:"status",summary:"\u30BF\u30B9\u30AF\u306E\u30B9\u30C6\u30FC\u30BF\u30B9\uFF08--status \u306B\u6E21\u305B\u308B\u5024\uFF09\u3092\u4E00\u89A7\u3059\u308B",columns:["id","name","code","is_default","is_completed","sort_order"],privateEnvelope:"statuses"},{kind:"type",resource:"type",summary:"\u30BF\u30B9\u30AF\u306E\u7A2E\u5225\uFF08--type \u306B\u6E21\u305B\u308B\u5024\uFF09\u3092\u4E00\u89A7\u3059\u308B",columns:["id","name","code","is_default","sort_order"],privateEnvelope:"\
75
- types"},{kind:"category",resource:"category",summary:"\u30BF\u30B9\u30AF\u306E\u30AB\u30C6\u30B4\u30EA\u3092\u4E00\u89A7\u3059\u308B",columns:["id","name","color","sort_order"],privateEnvelope:"categories"},{kind:"milestone",resource:"milestone",summary:"\u30BF\u30B9\u30AF\u306E\u30DE\u30A4\u30EB\u30B9\u30C8\u30FC\u30F3\u3092\u4E00\u89A7\u3059\u308B",columns:["id","name","due_date","is_completed","sort_order"]},{kind:"label",resource:"label",summary:"\u30BF\u30B9\u30AF\u306E\u30E9\u30D9\u30EB\u3092\u4E00\u89A7\u3059\u308B",
76
- columns:["id","name","color"],privateEnvelope:"labels"}];var PRIVATE_SURFACE="private";function isPrivatePlan(input){return input.resolved?.["surface"]===PRIVATE_SURFACE}function rows(body){if(!Array.isArray(body)){throw new Error(`\u30BF\u30B9\u30AF\u30DE\u30B9\u30BF\u4E00\u89A7\u306E\u5185\u90E8\u8868\u73FE\u304C\u914D\u5217\u3067\u306F\u3042\u308A\u307E\u305B\u3093: ${typeof body}`)}return body}function masterResource(spec){const master=TASK_MASTERS[spec.kind];const privateHelp=spec.privateEnvelope===
77
- void 0?`\u500B\u4EBA\u30BF\u30B9\u30AF\uFF08--project ${PRIVATE_PROJECT_REF}\uFF09\u306B${master.label}\u306F\u3042\u308A\u307E\u305B\u3093\u3002`:`\u500B\u4EBA\u30BF\u30B9\u30AF\u306F --project ${PRIVATE_PROJECT_REF} \u3067\u4E00\u89A7\u3067\u304D\u307E\u3059\u3002`;return{name:spec.resource,summary:spec.summary,operations:[{name:"list",summary:spec.summary,usage:`twp task ${spec.resource} list [--project <\u30B3\u30FC\u30C9|ID>]`,description:`name \u5217\u306E\u5024\u306F twp task list / create / update \u306E\u30D5\u30E9\u30B0\u3078\u305D\u306E\u307E\u307E\
78
- \u6E21\u305B\u307E\u3059\uFF08ID \u3067\u3082\u6E21\u305B\u307E\u3059\uFF09\u3002
74
+ if(category!==void 0){out["category_id"]=(await ctx.resolver.privateTaskMaster("categories",category,"--category","\u30AB\u30C6\u30B4\u30EA")).id}const labels=repeatedValues(input,"--label");if(labels.length>0){const ids=[];for(const ref of labels){const label=await ctx.resolver.privateTaskMaster("labels",ref,"--label","\u30E9\u30D9\u30EB");if(!ids.includes(label.id))ids.push(label.id)}out["label_ids"]=JSON.stringify(ids)}return out}var LABEL=TASK_MASTERS.status.label;var COLUMNS=["id","name","code","color","is_default","is_completed","sort_order"];var FIELDS=[{kind:"text",flag:"--name",key:"name",label:"\u30B9\u30C6\u30FC\u30BF\u30B9\u540D",maxChars:255,summary:"\u30B9\u30C6\u30FC\u30BF\u30B9\u540D"},{kind:"text",flag:"--color",key:"color",label:"\u8272",maxChars:50,summary:"\u8868\u793A\u8272\uFF08\u4F8B: #6b7280\uFF09"},{kind:"boolean",flag:"--is-completed",key:"is_completed",summary:"\u5B8C\u4E86\u6271\u3044\u306E\u30B9\u30C6\u30FC\u30BF\u30B9\u304B\uFF08true / false\uFF09"},
75
+ {kind:"boolean",flag:"--is-default",key:"is_default",summary:"\u65E2\u5B9A\u306E\u30D5\u30E9\u30B0\uFF08true / false\uFF09\u3002\u4ED6\u306E\u30B9\u30C6\u30FC\u30BF\u30B9\u306E\u65E2\u5B9A\u306F\u5916\u308C\u305A\u3001twp task create \u306F\u8868\u793A\u9806\u3067\u6700\u521D\u306E\u65E2\u5B9A\u3092\u9078\u3076"},{kind:"integer",flag:"--sort-order",key:"sort_order",label:"\u8868\u793A\u9806",min:0,summary:"\u8868\u793A\u9806\uFF080\u4EE5\u4E0A\u306E\u6574\u6570\uFF09"}];var REF_FLAG={name:"--sta\
76
+ tus",summary:"\u5BFE\u8C61\u306E\u30B9\u30C6\u30FC\u30BF\u30B9\uFF08\u4F4D\u7F6E\u5F15\u6570\u306E\u4EE3\u308F\u308A\u306B\u4F7F\u3048\u308B\uFF09",takesValue:true,placeholder:"<\u30B9\u30C6\u30FC\u30BF\u30B9>"};var REF_HELP="<\u30B9\u30C6\u30FC\u30BF\u30B9> \u306F\u540D\u524D\u30FB\u30B3\u30FC\u30C9\u30FBID \u306E\u3069\u308C\u3067\u3082\u6307\u5B9A\u3067\u304D\u307E\u3059\uFF08\u540D\u524D\u304C\u8907\u6570\u306B\u4E00\u81F4\u3059\u308C\u3070\u5019\u88DC\u3092\u51FA\u3057\u3066\u6B62\u307E\u308A\u307E\u3059\uFF09\u3002\nID\uFF08UUID \u304B default:*\uFF09\u4EE5\u5916\u306F\u30B9\u30C6\u30FC\u30BF\u30B9\u4E00\u89A7\uFF08\u65E2\u5B9A10\u5206\u30AD\u30E3\u30C3\u30B7\u30E5\u30FB--refresh \u3067\u53D6\u308A\u76F4\u3057\uFF09\u3068\u7167\u5408\u3057\u307E\u3059\u3002";
77
+ var DEFAULT_STATUS_ID_RE=/^default:[a-z_]+$/;var SAFE_STATUS_ID_RE=/^[A-Za-z0-9._:-]{1,128}$/;function statusSegment(input){const id=requireResolved(input,"id");if(!SAFE_STATUS_ID_RE.test(id)||/^\.+$/.test(id)){throw new ApiResponseError(`\u30B5\u30FC\u30D0\u304C\u8FD4\u3057\u305F\u30B9\u30C6\u30FC\u30BF\u30B9 ID \u3092\u30D1\u30B9\u306B\u4F7F\u3048\u307E\u305B\u3093: ${id}\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}return encodeURIComponent(id)}function collectionPath(input){
78
+ return`/api/v2/projects/${encodeURIComponent(requireResolved(input,"projectId"))}/${TASK_MASTERS.status.path}`}function rejectPrivate(input){rejectPrivateSurface(input,"\u30B9\u30C6\u30FC\u30BF\u30B9\u306E\u4F5C\u6210\u30FB\u66F4\u65B0\u30FB\u524A\u9664")}async function resolveProject(input,ctx){return withResolved(input,{projectId:await ctx.projectId(input.flags.get("--project"))})}async function resolveTarget(input,ctx,usage){const ref=singleRef(input,{flag:REF_FLAG.name,label:LABEL,usage});const withProject=await resolveProject(
79
+ input,ctx);const projectId=requireResolved(withProject,"projectId");const id=UUID_RE.test(ref)||DEFAULT_STATUS_ID_RE.test(ref)?ref:(await ctx.resolver.status(projectId,ref)).id;return withResolved(withProject,{id})}function statusItem(body){const data=isRecord(body)?body["data"]:void 0;if(!isRecord(data)||typeof data["id"]!=="string"){throw new ApiResponseError("\u30B9\u30C6\u30FC\u30BF\u30B9\u306E\u5FDC\u7B54\u306B data \u304C\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}
80
+ return data}function deleted(body){if(!isRecord(body)||typeof body["message"]!=="string"){throw new ApiResponseError("\u30B9\u30C6\u30FC\u30BF\u30B9\u524A\u9664\u306E\u5FDC\u7B54\u304C\u60F3\u5B9A\u306E\u5F62\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u63A5\u7D9A\u5148\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002")}return{result:true,message:body["message"]}}var invalidates=(input,ctx)=>ctx.resolver.invalidateTaskMaster("status",requireResolved(input,"projectId"));var DELETE_REJECTED="\
81
+ \u30B5\u30FC\u30D0\u306F\u6B21\u306E\u30B9\u30C6\u30FC\u30BF\u30B9\u306E\u524A\u9664\u3092\u65AD\u308A\u307E\u3059: \u6A19\u6E96\u30B9\u30C6\u30FC\u30BF\u30B9\uFF08ID \u304C default: \u3067\u59CB\u307E\u308B\u3082\u306E\uFF09\uFF0F\u30BF\u30B9\u30AF\u304C1\u4EF6\u3067\u3082\u4F7F\u3063\u3066\u3044\u308B\u3082\u306E\u3002\n\u4F7F\u3063\u3066\u3044\u308B\u30BF\u30B9\u30AF\u306F twp task list --status <\u30B9\u30C6\u30FC\u30BF\u30B9> \u3067\u78BA\u8A8D\u3057\u3001\u5225\u306E\u30B9\u30C6\u30FC\u30BF\u30B9\u3078\u79FB\u3057\u3066\u304B\u3089\u524A\u9664\u3057\u3066\u304F\u3060\u3055\u3044\u3002";
82
+ function deleteRejected(server){return server.includes("\u524A\u9664\u3067\u304D\u307E\u305B\u3093")||server.includes("\u30B5\u30FC\u30D0\u30FC\u30A8\u30E9\u30FC")?DELETE_REJECTED:void 0}var taskStatusWriteOperations=[{name:"create",summary:"\u30BF\u30B9\u30AF\u306E\u30B9\u30C6\u30FC\u30BF\u30B9\u3092\u4F5C\u6210\u3059\u308B",usage:"twp task status create --name <\u30B9\u30C6\u30FC\u30BF\u30B9\u540D> [--color <\u8272>] [--is-completed <true|false>] [--is-default <true|false>] [--sort-order <\u6574\u6570>] [--project <\u30B3\u30FC\u30C9|ID>]",
83
+ description:"--name \u304C\u5FC5\u9808\u3067\u3059\u3002--sort-order \u3092\u7701\u304F\u3068\u3001\u30AB\u30B9\u30BF\u30E0\u30B9\u30C6\u30FC\u30BF\u30B9\u306E\u6700\u5927\u5024\uFF0B1\uFF081\u4EF6\u3082\u7121\u3051\u308C\u3070 1\uFF09\u306B\u306A\u308A\u307E\u3059\uFF08\u6A19\u6E96\u30B9\u30C6\u30FC\u30BF\u30B9\u3068\u306F\u5225\u306B\u6570\u3048\u308B\u306E\u3067\u672B\u5C3E\u3068\u306F\u9650\u308A\u307E\u305B\u3093\uFF09\u3002--color \u3092\u7701\u304F\u3068\u30B5\u30FC\u30D0\u306E\u65E2\u5B9A\u8272\u306B\u306A\u308A\u307E\u3059\u3002\n\u6A19\u6E96\u30B9\u30C6\u30FC\u30BF\u30B9\uFF08\u672A\u7740\u624B\u30FB\u5B8C\u4E86 \u306A\u3069\uFF09\u3068\u540C\u3058\u540D\u524D\u306F\u30B5\u30FC\u30D0\u304C\u65AD\u308A\u307E\u3059\uFF08\u73FE\u72B6\u306F 500\u300C\u30B5\u30FC\u30D0\u30FC\u30A8\u30E9\u30FC\u300D\u3067\u8FD4\u308A\u307E\u3059\uFF09\u3002\n\u4F5C\u6210\u5F8C\u306F\u3053\u306E\u7AEF\u672B\u306E\u30B9\u30C6\u30FC\u30BF\u30B9\u4E00\u89A7\u30AD\u30E3\u30C3\u30B7\u30E5\u3092\u6368\u3066\u307E\u3059\u3002\u30B5\u30FC\u30D0\u5074\u306E\u4E00\u89A7\u306F\u53CD\u6620\u306B\u6570\u79D2\u301C\u6570\u5206\u304B\u304B\u308B\u3053\u3068\u304C\u3042\u308A\u3001\n\u7D9A\u3051\u3066 --status <\u65B0\u3057\u3044\u540D\u524D> \u304C\u300C\u4E00\u81F4\u3057\u307E\u305B\u3093\u300D\u306B\u306A\u3063\u305F\u3089\u3001\u5C11\u3057\u7F6E\u3044\u3066 --refresh \u3092\u4ED8\u3051\u3066\u304F\u3060\u3055\u3044\uFF08ID \u306A\u3089\u305D\u306E\u307E\u307E\u901A\u308A\u307E\u3059\uFF09\u3002\n\u500B\u4EBA\u30BF\u30B9\u30AF\uFF08--project __private__\uFF09\u306E\u30B9\u30C6\u30FC\u30BF\u30B9\u306F\u4F5C\u308C\u307E\u305B\u3093\uFF08\u30B5\u30FC\u30D0\u306B API \u304C\u3042\u308A\u307E\u305B\u3093\uFF09\u3002",
84
+ flags:[...createFlags(FIELDS),PROJECT_FLAG],async prepare(input,ctx){if(input.args.length>0){throw new UsageError(`create \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,"twp task status create help")}rejectPrivate(input);if(fieldBody(input,FIELDS)["name"]===void 0){throw new UsageError("--name \u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044","twp task status create help")}return resolveProject(input,ctx)},plan:input=>({method:"POST",path:collectionPath(
85
+ input),body:fieldBody(input,FIELDS)}),invalidates,summarize:body=>pick(statusItem(body),COLUMNS),raw:body=>statusItem(body)},{name:"update",summary:"\u30BF\u30B9\u30AF\u306E\u30B9\u30C6\u30FC\u30BF\u30B9\u3092\u66F4\u65B0\u3059\u308B",usage:"twp task status update <\u30B9\u30C6\u30FC\u30BF\u30B9> [--name <\u30B9\u30C6\u30FC\u30BF\u30B9\u540D>] [--color <\u8272>] [--is-completed <true|false>] [--is-default <true|false>] [--sort-order <\u6574\u6570>] [--project <\u30B3\u30FC\u30C9|ID>]",description:"\
86
+ \u6307\u5B9A\u3057\u305F\u9805\u76EE\u3060\u3051\u3092\u5909\u66F4\u3057\u307E\u3059\uFF08\u6307\u5B9A\u3057\u306A\u304B\u3063\u305F\u9805\u76EE\u306F\u5909\u308F\u308A\u307E\u305B\u3093\uFF09\u3002\u5909\u66F4\u3059\u308B\u9805\u76EE\u30921\u3064\u3082\u6307\u5B9A\u3057\u306A\u3044\u3068\u30A8\u30E9\u30FC\u306B\u306A\u308A\u307E\u3059\u3002\n\u6A19\u6E96\u30B9\u30C6\u30FC\u30BF\u30B9\uFF08default:*\uFF09\u3082\u540D\u524D\u30FB\u8272\u30FB\u8868\u793A\u9806\u3092\u5909\u66F4\u3067\u304D\u307E\u3059\u3002\n\u6A19\u6E96\u30B9\u30C6\u30FC\u30BF\u30B9\u3068\u540C\u3058\u540D\u524D\u3078\u6539\u540D\u3059\u308B\u3068\u3001\u30B5\u30FC\u30D0\u306F\u305D\u306E\u30B9\u30C6\u30FC\u30BF\u30B9\u3092\u4E00\u89A7\u304B\u3089\u5916\u3057\u307E\u3059\uFF08\u4EE5\u5F8C\u306F ID \u3067\u3057\u304B\u6307\u5B9A\u3067\u304D\u307E\u305B\u3093\uFF09\u3002\n--is-default true \u3092\u4ED8\u3051\u3066\u3082\u4ED6\u306E\u30B9\u30C6\u30FC\u30BF\u30B9\u306E\u65E2\u5B9A\u306F\u5916\u308C\u307E\u305B\u3093\uFF08twp task create \u306F\u8868\u793A\u9806\u3067\u6700\u521D\u306E\u65E2\u5B9A\u3092\u9078\u3073\u307E\u3059\uFF09\u3002\n\u66F4\u65B0\u5F8C\u306F\u3053\u306E\u7AEF\u672B\u306E\u30B9\u30C6\u30FC\u30BF\u30B9\u4E00\u89A7\u30AD\u30E3\u30C3\u30B7\u30E5\u3092\u6368\u3066\u307E\u3059\uFF08\u30B5\u30FC\u30D0\u5074\u306E\u53CD\u6620\u5F85\u3061\u306F create \u3068\u540C\u3058\uFF09\u3002\n\n"+
87
+ REF_HELP,flags:[...updateFlags(FIELDS),REF_FLAG,PROJECT_FLAG],async prepare(input,ctx){rejectPrivate(input);if(!hasAnyField(input,FIELDS)){throw new UsageError("\u5909\u66F4\u3059\u308B\u9805\u76EE\u30921\u3064\u4EE5\u4E0A\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044","twp task status update help")}fieldBody(input,FIELDS);return resolveTarget(input,ctx,"twp task status update help")},plan:input=>({method:"PUT",path:`${collectionPath(input)}/${statusSegment(input)}`,body:fieldBody(input,FIELDS)}),
88
+ invalidates,summarize:body=>pick(statusItem(body),COLUMNS),raw:body=>statusItem(body)},{name:"delete",summary:"\u30BF\u30B9\u30AF\u306E\u30B9\u30C6\u30FC\u30BF\u30B9\u3092\u524A\u9664\u3059\u308B\uFF08--yes \u304C\u8981\u308B\uFF09",usage:"twp task status delete <\u30B9\u30C6\u30FC\u30BF\u30B9> --yes [--project <\u30B3\u30FC\u30C9|ID>]",description:`\u524A\u9664\u306F\u53D6\u308A\u6D88\u305B\u307E\u305B\u3093\u3002
89
+ ${DELETE_REJECTED}
90
+ \u524A\u9664\u5F8C\u306F\u30B9\u30C6\u30FC\u30BF\u30B9\u4E00\u89A7\u306E\u30AD\u30E3\u30C3\u30B7\u30E5\u3092\u6368\u3066\u307E\u3059\u3002
91
+
92
+ `+REF_HELP,destructive:true,rejected:deleteRejected,flags:[REF_FLAG,PROJECT_FLAG],async prepare(input,ctx){rejectPrivate(input);return resolveTarget(input,ctx,"twp task status delete help")},plan:input=>({method:"DELETE",path:`${collectionPath(input)}/${statusSegment(input)}`}),invalidates,summarize:body=>deleted(body),raw:body=>deleted(body)}];var SPECS=[{kind:"status",resource:"status",summary:"\u30BF\u30B9\u30AF\u306E\u30B9\u30C6\u30FC\u30BF\u30B9\uFF08--status \u306B\u6E21\u305B\u308B\u5024\uFF09\u3092\u4E00\u89A7\u3059\u308B",columns:["id","name","code","is_default","is_completed","sort_order"],privateEnvelope:"statuses",writes:taskStatusWriteOperations},{kind:"type",resource:"type",summary:"\u30BF\u30B9\u30AF\u306E\u7A2E\u5225\uFF08--type \u306B\u6E21\u305B\u308B\u5024\uFF09\u3092\u4E00\u89A7\u3059\u308B",columns:["id","name","co\
93
+ de","is_default","sort_order"],privateEnvelope:"types"},{kind:"category",resource:"category",summary:"\u30BF\u30B9\u30AF\u306E\u30AB\u30C6\u30B4\u30EA\u3092\u4E00\u89A7\u3059\u308B",columns:["id","name","color","sort_order"],privateEnvelope:"categories"},{kind:"milestone",resource:"milestone",summary:"\u30BF\u30B9\u30AF\u306E\u30DE\u30A4\u30EB\u30B9\u30C8\u30FC\u30F3\u3092\u4E00\u89A7\u3059\u308B",columns:["id","name","due_date","is_completed","sort_order"]},{kind:"label",resource:"label",summary:"\
94
+ \u30BF\u30B9\u30AF\u306E\u30E9\u30D9\u30EB\u3092\u4E00\u89A7\u3059\u308B",columns:["id","name","color"],privateEnvelope:"labels"}];var PRIVATE_SURFACE="private";function isPrivatePlan(input){return input.resolved?.["surface"]===PRIVATE_SURFACE}function rows(body){if(!Array.isArray(body)){throw new Error(`\u30BF\u30B9\u30AF\u30DE\u30B9\u30BF\u4E00\u89A7\u306E\u5185\u90E8\u8868\u73FE\u304C\u914D\u5217\u3067\u306F\u3042\u308A\u307E\u305B\u3093: ${typeof body}`)}return body}function masterResource(spec){
95
+ const master=TASK_MASTERS[spec.kind];const privateHelp=spec.privateEnvelope===void 0?`\u500B\u4EBA\u30BF\u30B9\u30AF\uFF08--project ${PRIVATE_PROJECT_REF}\uFF09\u306B${master.label}\u306F\u3042\u308A\u307E\u305B\u3093\u3002`:`\u500B\u4EBA\u30BF\u30B9\u30AF\u306F --project ${PRIVATE_PROJECT_REF} \u3067\u4E00\u89A7\u3067\u304D\u307E\u3059\u3002`;return{name:spec.resource,summary:spec.summary,operations:[{name:"list",summary:spec.summary,usage:`twp task ${spec.resource} list [--project <\u30B3\u30FC\u30C9|ID>]`,
96
+ description:`name \u5217\u306E\u5024\u306F twp task list / create / update \u306E\u30D5\u30E9\u30B0\u3078\u305D\u306E\u307E\u307E\u6E21\u305B\u307E\u3059\uFF08ID \u3067\u3082\u6E21\u305B\u307E\u3059\uFF09\u3002
79
97
  --output json \u306F API \u304C\u8FD4\u3059\u5168\u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u51FA\u3057\u307E\u3059\u3002
80
98
  \u7D50\u679C\u306F\u540D\u524D\u89E3\u6C7A\u3068\u540C\u3058\u30AD\u30E3\u30C3\u30B7\u30E5\uFF08\u65E2\u5B9A 10 \u5206\uFF09\u304B\u3089\u8FD4\u308B\u305F\u3081\u3001\u7D9A\u3051\u3066\u6253\u3064\u30B3\u30DE\u30F3\u30C9\u3067\u5F80\u5FA9\u306F\u5897\u3048\u307E\u305B\u3093\u3002
81
99
  \u6700\u65B0\u3092\u53D6\u308A\u76F4\u3059\u3068\u304D\u306F --refresh \u3092\u4ED8\u3051\u3066\u304F\u3060\u3055\u3044\u3002
82
100
  ${privateHelp}`,flags:[PROJECT_FLAG],async prepare(input,ctx){if(input.args.length>0){throw new UsageError(`list \u306F\u4F4D\u7F6E\u5F15\u6570\u3092\u53D6\u308A\u307E\u305B\u3093: ${input.args.join(" ")}`,`\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306F --project <\u30B3\u30FC\u30C9|ID> \u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002`)}if(wantsPrivateSurface(input)){if(spec.privateEnvelope===void 0){throw new UsageError(`--project ${PRIVATE_PROJECT_REF}\uFF08\u500B\u4EBA\u30BF\u30B9\u30AF\uFF09\u306B${master.
83
101
  label}\u306F\u3042\u308A\u307E\u305B\u3093`,`\u500B\u4EBA\u30BF\u30B9\u30AF\u306E\u30DE\u30B9\u30BF\u306F\u30B9\u30C6\u30FC\u30BF\u30B9\u30FB\u7A2E\u5225\u30FB\u30AB\u30C6\u30B4\u30EA\u30FB\u30E9\u30D9\u30EB\u3060\u3051\u3067\u3059\u3002`)}return withResolved(input,{surface:PRIVATE_SURFACE})}return withResolved(input,{projectId:await ctx.projectId(input.flags.get("--project"))})},plan(input){if(isPrivatePlan(input))return{method:"GET",path:`${PRIVATE_TASKS_PATH}/masters`};return{method:"GET",path:`\
84
102
  /api/v2/projects/${encodeURIComponent(requireResolved(input,"projectId"))}/${master.path}`}},async fetchCached(input,ctx){if(isPrivatePlan(input)){return ctx.resolver.privateMasterRows(spec.privateEnvelope,master.label)}return ctx.resolver.taskMasterRows(spec.kind,requireResolved(input,"projectId"))},summarize:body=>rows(body).map(row=>pick(row,spec.columns)),raw:body=>rows(body),notes:body=>rows(body).length===0?[`${master.label}\u306F1\u4EF6\u3082\u5B9A\u7FA9\u3055\u308C\u3066\u3044\u307E\u305B\u3093\uFF08--refresh \u3067\u53D6\u308A\u76F4\u305B\u307E\u3059\uFF09\u3002`]:
85
- []}]}}var taskMasterResources=SPECS.map(masterResource);var LIST_COLUMNS2=["key","subject","status_id","assignee_id","priority","due_date","updated_at"];var GET_COLUMNS=["id","key","project_id","subject","description","status_id","type_id","category_id","milestone_id","assignee_id","priority","start_date","due_date","estimated_hours","actual_hours","progress","parent_id","subtask_count","created_by","created_at","updated_by","updated_at"];var listPaging2=envelopePaging({label:"\u30BF\u30B9\u30AF\u4E00\u89A7"});var PRIVATE_HELP=`\u500B\u4EBA\u30BF\u30B9\u30AF\uFF08\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306B\u5C5E\u3055\u306A\u3044\u81EA\u5206\u3060\u3051\u306E\
103
+ []},...spec.writes??[]]}}var taskMasterResources=SPECS.map(masterResource);var LIST_COLUMNS2=["key","subject","status_id","assignee_id","priority","due_date","updated_at"];var GET_COLUMNS=["id","key","project_id","subject","description","status_id","type_id","category_id","milestone_id","assignee_id","priority","start_date","due_date","estimated_hours","actual_hours","progress","parent_id","subtask_count","created_by","created_at","updated_by","updated_at"];var listPaging2=envelopePaging({label:"\u30BF\u30B9\u30AF\u4E00\u89A7"});var PRIVATE_HELP=`\u500B\u4EBA\u30BF\u30B9\u30AF\uFF08\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306B\u5C5E\u3055\u306A\u3044\u81EA\u5206\u3060\u3051\u306E\
86
104
  \u30BF\u30B9\u30AF\uFF09\u306F --project ${PRIVATE_PROJECT_REF} \u3067\u64CD\u4F5C\u3057\u307E\u3059\u3002
87
105
  twp task list --project ${PRIVATE_PROJECT_REF}
88
106
  \u500B\u4EBA\u30BF\u30B9\u30AF\u306E\u30AD\u30FC\u306F PRIVATE-<\u756A\u53F7> \u3067\u3059\u3002\u62C5\u5F53\u8005\u306E\u6307\u5B9A\u30FB\u7D5E\u308A\u8FBC\u307F\uFF08--assignee\uFF09\u306F\u3067\u304D\u307E\u305B\u3093