makecoder 4.1.21 → 4.1.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/coder.js CHANGED
@@ -21,7 +21,7 @@ entry=${o}
21
21
  apikey=${e||""}
22
22
  baseurl=${s||""}
23
23
  `;return ee.writeFileSync(`${l}.conf`,u,{mode:384}),process.env.CODER_DEBUG&&(console.log(`[codex app] cdx-shim \u5DF2\u5B89\u88C5: ${l}`),console.log(`[codex app] exec=${n} entry=${o}`)),l}_injectDesktopEnv(e,s){if(process.platform!=="darwin")return null;let r;try{r=this._installShim({apikey:e,coderBaseUrl:s})}catch(i){return process.env.CODER_DEBUG&&console.log(`[codex app] \u5B89\u88C5 cdx-shim \u5931\u8D25\uFF0C\u8DF3\u8FC7 CODEX_CLI_PATH \u6CE8\u5165\uFF1B\u684C\u9762 App \u5C06\u4F7F\u7528\u81EA\u5E26 codex\uFF08\u4E0D\u8D70\u4EE3\u7406\uFF09: ${i.message}`),null}let n={CODEX_CLI_PATH:r};e&&(n.CODER_APIKEY=e);let o=[];for(let[i,a]of Object.entries(n))try{Ms("launchctl",["setenv",i,a],{stdio:"ignore"}),o.push(i)}catch(c){process.env.CODER_DEBUG&&console.log(`[codex app] launchctl setenv ${i} \u5931\u8D25: ${c.message}`)}return process.env.CODER_DEBUG&&o.length&&console.log(`[codex app] \u5DF2\u6CE8\u5165 launchd \u73AF\u5883\u53D8\u91CF: ${o.join(", ")} (shim: ${r})`),o.length?o:null}_removeDesktopEnv(e){for(let s of e)try{Ms("launchctl",["unsetenv",s],{stdio:"ignore"})}catch(r){process.env.CODER_DEBUG&&console.log(`[codex app] launchctl unsetenv ${s} \u5931\u8D25: ${r.message}`)}}};function up(t,e){let s=ii(t),r=ii(e),n=Math.max(s.length,r.length);for(let o=0;o<n;o++){let i=s[o]||0,a=r[o]||0;if(i<a)return!0;if(i>a)return!1}return!1}function ii(t){return String(t).replace(/^v/i,"").split(".").map(e=>Number.parseInt(e,10)).map(e=>Number.isFinite(e)?e:0)}function dp(t){let e=String(t||"").split(/\r?\n/);for(let s of e){if(!s.includes("/Volumes/"))continue;let n=s.split(" ").find(i=>i.trim().startsWith("/Volumes/"));if(n)return n.trim();let o=s.match(/(\/Volumes\/.+)$/);if(o)return o[1].trim()}return null}ai.exports=Vr});var Zs=x((V0,pi)=>{var pp=Ho(),fp=Qo(),mp=ti(),hp=ni(),gp=ci();function li(){let t=new pp;if(process.env.CODER_DEBUG)try{console.error(`[DEBUG] ClaudeBunLauncher selected, executable: ${t.findExecutablePath()}`)}catch(e){console.error(`[DEBUG] ClaudeBunLauncher executable not yet resolved: ${e.message}`)}return t}var Bs={claude:{aliases:["claude"],description:"Claude Code \u667A\u80FD\u4F53\uFF08\u9ED8\u8BA4\uFF09",create:li,mapArgs:t=>t},"claude-app":{aliases:["claude-app"],description:"\u914D\u7F6E Claude Desktop\uFF08macOS\uFF09\u8D70 coder API\uFF1Asetup|restore|status",create:()=>new fp,mapArgs:t=>t},codex:{aliases:["codex"],description:"OpenAI Codex \u667A\u80FD\u4F53",create:()=>new hp,mapArgs:t=>t},"codex-app":{aliases:["codex-app"],description:"\u914D\u7F6E Codex Desktop\uFF08macOS\uFF09\u8D70 coder API",create:()=>new gp,mapArgs:t=>["app",...t]},gemini:{aliases:["gemini"],description:"Gemini \u667A\u80FD\u4F53",create:()=>new mp,mapArgs:t=>t}},ui=Object.keys(Bs),yp=new Set(["claude","codex","gemini"]);function _p(t){return Object.prototype.hasOwnProperty.call(Bs,t)}function di(t){return Bs[t]||null}async function wp(t,e,s){let r=di(t);return r?await r.create().launch({remainingArgs:r.mapArgs(e),coderBaseUrl:s.getCoderBaseUrl(),apikey:s.getApiKey()}):(s.fail(`unknown agent: ${t}`,`available: ${ui.join(" | ")}`),1)}pi.exports={AGENTS:Bs,AGENT_NAMES:ui,SHORTCUTS:yp,isAgentName:_p,getAgent:di,launchAgent:wp,createClaudeLauncher:li}});var gi=x((K0,hi)=>{var ms=require("fs"),fi=require("path"),{spawn:mi}=require("child_process"),Kr=class{constructor(){this.extensionId="codev.codev-background";let e=require.main?fi.dirname(require.main.filename):__dirname;this.extensionPath=fi.resolve(e,"vendor/claude-code.vsix"),this._codeCommand=null}async resolveCodeCommand(){if(this._codeCommand)return this._codeCommand;if(process.env.IS_AISTUDIO==="True"){let e="/usr/lib/aistudio/lib/vscode/bin/remote-cli/aistudio";if(ms.existsSync(e))try{return ms.accessSync(e,ms.constants.F_OK|ms.constants.X_OK),this._codeCommand=e,process.env.CODER_DEBUG&&console.log(`Using AI Studio VSCode path: ${e}`),this._codeCommand}catch(s){process.env.CODER_DEBUG&&console.log(`AI Studio path exists but not executable: ${s.message}`)}else process.env.CODER_DEBUG&&console.log(`AI Studio path not found: ${e}`)}try{let{spawn:e}=require("child_process");return new Promise(s=>{let r=e("which",["code"],{stdio:["ignore","pipe","ignore"]}),n="";r.stdout.on("data",o=>{n+=o.toString().trim()}),r.on("close",o=>{o===0&&n?(this._codeCommand=n,process.env.CODER_DEBUG&&console.log(`Resolved code command path: ${n}`),s(this._codeCommand)):(this._codeCommand="code",s(this._codeCommand))}),r.on("error",()=>{this._codeCommand="code",s(this._codeCommand)}),setTimeout(()=>{r.kill(),this._codeCommand="code",s(this._codeCommand)},3e3)})}catch{return this._codeCommand="code",this._codeCommand}}async shouldInstallExtension(){try{return process.env.IS_AISTUDIO!=="True"?(process.env.CODER_DEBUG&&console.log("Not in AI Studio environment (IS_AISTUDIO!=True), skipping extension installation"),!1):await this.isVSCodeAvailable()?await this.isExtensionInstalled()?(process.env.CODER_DEBUG&&console.log(`Extension ${this.extensionId} already installed`),!1):!!ms.existsSync(this.extensionPath):(process.env.CODER_DEBUG&&console.log("VSCode not available, skipping extension installation"),!1)}catch(e){return process.env.CODER_DEBUG&&console.error(`Error checking extension installation status: ${e.message}`),!1}}async installExtension(){try{return console.log("Installing Codev VSCode extension..."),await this.executeVSCodeCommand(["--install-extension",this.extensionPath])?(console.log("\u2705 Codev VSCode extension installed successfully"),!0):(console.warn("\u274C Failed to install Codev VSCode extension"),!1)}catch(e){return console.warn(`Error installing VSCode extension: ${e.message}`),!1}}async isVSCodeAvailable(){try{let e=process.env.IS_AISTUDIO==="True"?["--help"]:["--version"],s=await this.executeVSCodeCommand(e,{timeout:1e4});if(process.env.CODER_DEBUG&&(console.log(`VSCode availability check (${e.join(" ")}): ${s?"available":"unavailable"}`),process.env.IS_AISTUDIO==="True")){let{spawn:r}=require("child_process");try{r("which",["code"],{stdio:["ignore","pipe","ignore"]}).stdout.on("data",o=>{console.log("which code:",o.toString().trim())})}catch(n){console.log("which command failed:",n.message)}}return s}catch(e){return process.env.CODER_DEBUG&&console.error("VSCode availability check error:",e.message),!1}}async isExtensionInstalled(){let e=await this.resolveCodeCommand();try{return new Promise(s=>{try{let r={stdio:["ignore","pipe","ignore"],shell:!1,env:{...process.env,PATH:process.env.PATH,HOME:process.env.HOME,USER:process.env.USER}};process.env.CODER_DEBUG&&console.log(`Spawning: ${e} --list-extensions`);let n=mi(e,["--list-extensions"],r),o="";n.stdout.on("data",i=>{o+=i.toString()}),n.on("close",i=>{if(i===0){let a=o.split(`
24
- `).map(c=>c.trim());s(a.includes(this.extensionId))}else s(!1)}),n.on("error",i=>{process.env.CODER_DEBUG&&(console.error("VSCode list extensions error:",i.message),console.error("Error code:",i.code),console.error("Error errno:",i.errno),console.error("Error syscall:",i.syscall)),s(!1)}),setTimeout(()=>{try{n.kill()}catch{}s(!1)},1e4)}catch(r){process.env.CODER_DEBUG&&console.error("Failed to spawn VSCode list extensions:",r.message),s(!1)}})}catch{return!1}}async executeVSCodeCommand(e,s={}){let r=await this.resolveCodeCommand();return new Promise(n=>{try{let o={stdio:"ignore",shell:!1,env:{...process.env,PATH:process.env.PATH,HOME:process.env.HOME,USER:process.env.USER}};process.env.CODER_DEBUG&&console.log(`Spawning: ${r} ${e.join(" ")}`);let i=mi(r,e,o);i.on("close",c=>{n(c===0)}),i.on("error",c=>{process.env.CODER_DEBUG&&(console.error("VSCode command error:",c.message),console.error("Error code:",c.code),console.error("Error errno:",c.errno),console.error("Error syscall:",c.syscall)),n(!1)});let a=s.timeout||3e4;setTimeout(()=>{try{i.kill()}catch{}n(!1)},a)}catch(o){process.env.CODER_DEBUG&&console.error("Failed to spawn VSCode command:",o.message),n(!1)}})}async ensureExtensionInstalled(){try{process.env.CODER_DEBUG&&console.log("VSCode Extension Service: Checking extension status..."),await this.shouldInstallExtension()&&await this.installExtension()}catch(e){process.env.CODER_DEBUG&&console.error("VSCode Extension Service Error:",e)}}};hi.exports=Kr});var jt=x((z0,kp)=>{kp.exports={name:"makecoder",version:"4.1.21",description:"MakeCoder Coder: AI Agent Runtime OS that runs and orchestrates Claude Code, Codex, Gemini and more across CLI, API, Web and chat",main:"./dist/coder.js",bin:{coder:"./dist/coder.js"},scripts:{test:"node --test test/*.test.js",start:"node ./src/coder.js",build:"node scripts/build.js","build:clean":"node scripts/build.js --clean","build:dev":"node scripts/build.js --no-minify --sourcemap",postinstall:"node scripts/postinstall.js"},keywords:["ai-agent-runtime","agent-os","ai","cli","claude","gemini","codex","agent","orchestration","llm"],author:"makecoder",license:"MIT",repository:{type:"git",url:"https://github.com/makecoderai/coder.git"},homepage:"https://github.com/makecoderai/coder",dependencies:{bun:">=1.3.12",commander:"^15.0.0","node-fetch":"^3.3.2",open:"^10.1.0",ws:"^8.21.0",zod:"^3.25.76"},engines:{node:">=20.0.0"},devDependencies:{chokidar:"^4.0.3"},files:["dist","scripts/postinstall.js"]}});var _i=x((J0,yi)=>{var zr=require("crypto"),{URL:bp}=require("url"),Jr=class{static generateSignature(e,s,r,n){try{let o=new bp(e),i=Buffer.from(o.pathname),a=Buffer.from(i),c=s?typeof s=="string"?Buffer.from(s):Buffer.from(JSON.stringify(s)):Buffer.alloc(0),l=Buffer.concat([a,c,Buffer.from(n)]),u=zr.createHmac("sha256",r);return u.update(l),u.digest("hex")}catch(o){throw new Error(`Failed to generate signature: ${o.message}`)}}static validateSignature(e,s,r,n,o){return this.generateSignature(e,s,r,n)===o}static generateTimestamp(){return Date.now().toString()}static generateStrongPassword(e=16){let s="abcdefghijkmnpqrstuvwxyz",r="ABCDEFGHJKLMNPQRSTUVWXYZ",n="23456789",o="!@#$%^&*-_=+",i=s+r+n+o;e<8&&(e=8);let a=l=>l[zr.randomBytes(1)[0]%l.length],c=[a(s),a(r),a(n),a(o)];for(;c.length<e;)c.push(a(i));for(let l=c.length-1;l>0;l--){let u=zr.randomBytes(1)[0]%(l+1);[c[l],c[u]]=[c[u],c[l]]}return c.join("")}};yi.exports=Jr});var Ws=x((H0,bi)=>{var xp=require("https"),{URL:Sp}=require("url"),wi="https://makecoder.com/bigapis/auth/v1",Ip="https://makecoder.com/bigapis/kbb2/v1",Cp="https://makecoder.com/wiki/api",Hr=class{constructor(e){this.token=e}request(e,s,r,n){return new Promise((o,i)=>{let a=n||wi,c=new Sp(`${a}${s}`),l={"Content-Type":"application/json",Authorization:`Bearer ${this.token}`},u=null;r!=null&&(u=JSON.stringify(r),l["Content-Length"]=Buffer.byteLength(u));let d=xp.request({hostname:c.hostname,port:c.port||443,path:c.pathname+c.search,method:e,headers:l},p=>{let m="";p.on("data",g=>m+=g),p.on("end",()=>o({status:p.statusCode,body:m}))});d.on("error",i),u&&d.write(u),d.end()})}};function ki(t){try{return JSON.parse(t)}catch{return null}}function Ep(t){return t===401?2:t===403?5:t===404?4:t===409?6:1}function Ap(t){let e=ki(t);return e?.message?e.message:e?.error?e.error:(t||"").slice(0,200)||"\u8BF7\u6C42\u5931\u8D25"}bi.exports={TeamHttp:Hr,parseJson:ki,exitCodeForStatus:Ep,errorMessage:Ap,API_BASE:wi,BIGKBB_BASE:Ip,WIKI_API_BASE:Cp}});var Si=x((Y0,xi)=>{var Yr=t=>String(t??"").replace(/\|/g,"\\|").replace(/\n/g," ");function $p(t,e,s={}){let{labels:r={},empty:n="\uFF08\u7A7A\uFF09"}=s;if(!e||!e.length){t.emit(n);return}if(t.isJson){t.emit(e);return}let o=Object.keys(e[0]),a=[`| ${o.map(c=>r[c]||c).map(Yr).join(" | ")} |`,`| ${o.map(()=>"---").join(" | ")} |`,...e.map(c=>`| ${o.map(l=>Yr(c[l])).join(" | ")} |`)];t.emit(a.join(`
24
+ `).map(c=>c.trim());s(a.includes(this.extensionId))}else s(!1)}),n.on("error",i=>{process.env.CODER_DEBUG&&(console.error("VSCode list extensions error:",i.message),console.error("Error code:",i.code),console.error("Error errno:",i.errno),console.error("Error syscall:",i.syscall)),s(!1)}),setTimeout(()=>{try{n.kill()}catch{}s(!1)},1e4)}catch(r){process.env.CODER_DEBUG&&console.error("Failed to spawn VSCode list extensions:",r.message),s(!1)}})}catch{return!1}}async executeVSCodeCommand(e,s={}){let r=await this.resolveCodeCommand();return new Promise(n=>{try{let o={stdio:"ignore",shell:!1,env:{...process.env,PATH:process.env.PATH,HOME:process.env.HOME,USER:process.env.USER}};process.env.CODER_DEBUG&&console.log(`Spawning: ${r} ${e.join(" ")}`);let i=mi(r,e,o);i.on("close",c=>{n(c===0)}),i.on("error",c=>{process.env.CODER_DEBUG&&(console.error("VSCode command error:",c.message),console.error("Error code:",c.code),console.error("Error errno:",c.errno),console.error("Error syscall:",c.syscall)),n(!1)});let a=s.timeout||3e4;setTimeout(()=>{try{i.kill()}catch{}n(!1)},a)}catch(o){process.env.CODER_DEBUG&&console.error("Failed to spawn VSCode command:",o.message),n(!1)}})}async ensureExtensionInstalled(){try{process.env.CODER_DEBUG&&console.log("VSCode Extension Service: Checking extension status..."),await this.shouldInstallExtension()&&await this.installExtension()}catch(e){process.env.CODER_DEBUG&&console.error("VSCode Extension Service Error:",e)}}};hi.exports=Kr});var jt=x((z0,kp)=>{kp.exports={name:"makecoder",version:"4.1.22",description:"MakeCoder Coder: AI Agent Runtime OS that runs and orchestrates Claude Code, Codex, Gemini and more across CLI, API, Web and chat",main:"./dist/coder.js",bin:{coder:"./dist/coder.js"},scripts:{test:"node --test test/*.test.js",start:"node ./src/coder.js",build:"node scripts/build.js","build:clean":"node scripts/build.js --clean","build:dev":"node scripts/build.js --no-minify --sourcemap",postinstall:"node scripts/postinstall.js"},keywords:["ai-agent-runtime","agent-os","ai","cli","claude","gemini","codex","agent","orchestration","llm"],author:"makecoder",license:"MIT",repository:{type:"git",url:"https://github.com/makecoderai/coder.git"},homepage:"https://github.com/makecoderai/coder",dependencies:{bun:">=1.3.12",commander:"^15.0.0","node-fetch":"^3.3.2",open:"^10.1.0",ws:"^8.21.0",zod:"^3.25.76"},engines:{node:">=20.0.0"},devDependencies:{chokidar:"^4.0.3"},files:["dist","scripts/postinstall.js"]}});var _i=x((J0,yi)=>{var zr=require("crypto"),{URL:bp}=require("url"),Jr=class{static generateSignature(e,s,r,n){try{let o=new bp(e),i=Buffer.from(o.pathname),a=Buffer.from(i),c=s?typeof s=="string"?Buffer.from(s):Buffer.from(JSON.stringify(s)):Buffer.alloc(0),l=Buffer.concat([a,c,Buffer.from(n)]),u=zr.createHmac("sha256",r);return u.update(l),u.digest("hex")}catch(o){throw new Error(`Failed to generate signature: ${o.message}`)}}static validateSignature(e,s,r,n,o){return this.generateSignature(e,s,r,n)===o}static generateTimestamp(){return Date.now().toString()}static generateStrongPassword(e=16){let s="abcdefghijkmnpqrstuvwxyz",r="ABCDEFGHJKLMNPQRSTUVWXYZ",n="23456789",o="!@#$%^&*-_=+",i=s+r+n+o;e<8&&(e=8);let a=l=>l[zr.randomBytes(1)[0]%l.length],c=[a(s),a(r),a(n),a(o)];for(;c.length<e;)c.push(a(i));for(let l=c.length-1;l>0;l--){let u=zr.randomBytes(1)[0]%(l+1);[c[l],c[u]]=[c[u],c[l]]}return c.join("")}};yi.exports=Jr});var Ws=x((H0,bi)=>{var xp=require("https"),{URL:Sp}=require("url"),wi="https://makecoder.com/bigapis/auth/v1",Ip="https://makecoder.com/bigapis/kbb2/v1",Cp="https://makecoder.com/wiki/api",Hr=class{constructor(e){this.token=e}request(e,s,r,n){return new Promise((o,i)=>{let a=n||wi,c=new Sp(`${a}${s}`),l={"Content-Type":"application/json",Authorization:`Bearer ${this.token}`},u=null;r!=null&&(u=JSON.stringify(r),l["Content-Length"]=Buffer.byteLength(u));let d=xp.request({hostname:c.hostname,port:c.port||443,path:c.pathname+c.search,method:e,headers:l},p=>{let m="";p.on("data",g=>m+=g),p.on("end",()=>o({status:p.statusCode,body:m}))});d.on("error",i),u&&d.write(u),d.end()})}};function ki(t){try{return JSON.parse(t)}catch{return null}}function Ep(t){return t===401?2:t===403?5:t===404?4:t===409?6:1}function Ap(t){let e=ki(t);return e?.message?e.message:e?.error?e.error:(t||"").slice(0,200)||"\u8BF7\u6C42\u5931\u8D25"}bi.exports={TeamHttp:Hr,parseJson:ki,exitCodeForStatus:Ep,errorMessage:Ap,API_BASE:wi,BIGKBB_BASE:Ip,WIKI_API_BASE:Cp}});var Si=x((Y0,xi)=>{var Yr=t=>String(t??"").replace(/\|/g,"\\|").replace(/\n/g," ");function $p(t,e,s={}){let{labels:r={},empty:n="\uFF08\u7A7A\uFF09"}=s;if(!e||!e.length){t.emit(n);return}if(t.isJson){t.emit(e);return}let o=Object.keys(e[0]),a=[`| ${o.map(c=>r[c]||c).map(Yr).join(" | ")} |`,`| ${o.map(()=>"---").join(" | ")} |`,...e.map(c=>`| ${o.map(l=>Yr(c[l])).join(" | ")} |`)];t.emit(a.join(`
25
25
  `))}function Tp(t,e,s=null){if(t.isJson){let r={};for(let[n,o]of e)r[n]=o;s&&typeof s=="object"&&Object.assign(r,s),t.emit(r);return}t.emit(e.map(([r,n,o])=>`${o||r}: ${n??""}`).join(`
26
26
  `))}xi.exports={emitTable:$p,emitDetails:Tp,escCell:Yr}});var Ai=x((Q0,Ei)=>{var{TeamHttp:X0,parseJson:vp,exitCodeForStatus:Up,errorMessage:Op,BIGKBB_BASE:Dp,WIKI_API_BASE:Rp}=Ws();function ct(t,e,s,r=1){t.fail(e,s);let n=new Error("__handled__");throw n.handled=!0,n.code=r,n}function Ii(t,e){ct(t,Op(e.body),Lp(e.status),Up(e.status))}function Lp(t){if(t===401)return"\u5148\u767B\u5F55: coder auth login --apikey <ak>.<sk>";if(t===403)return"\u6743\u9650\u4E0D\u8DB3\uFF0C\u9700\u56E2\u961F owner / manager\uFF1B\u786E\u8BA4\u5F53\u524D\u56E2\u961F: coder team current";if(t===404)return"\u786E\u8BA4 id \u6B63\u786E\uFF0C\u6216\u7528 coder team list / members \u67E5\u627E"}function Ci(t,e){if(e)return e;let s=t.ctx.getTeam?t.ctx.getTeam():null;return s&&s.id?s.id:null}function Pp(t,e){let s=Ci(t,e);return s||ct(t.ctx,"\u672A\u6307\u5B9A teamId \u4E14\u65E0\u9ED8\u8BA4\u56E2\u961F","\u8FD0\u884C coder team use <id> \u8BBE\u9ED8\u8BA4\u56E2\u961F\uFF0C\u6216\u52A0 --team <id> / \u4F4D\u7F6E\u53C2\u6570",3),s}async function Np(t,e){let s=encodeURIComponent(JSON.stringify({id__in:[e]})),r;try{r=await t.http.request("GET",`/team?constraints=${s}`)}catch(i){ct(t.ctx,`\u7F51\u7EDC\u9519\u8BEF ${i.message}`,void 0,1)}r.status!==200&&Ii(t.ctx,r);let n=vp(r.body),o=n&&n.data&&n.data.items||[];return o.length||ct(t.ctx,`\u56E2\u961F ${e} \u4E0D\u5B58\u5728`,"\u8FD0\u884C coder team list \u67E5\u770B\u53EF\u7528\u56E2\u961F",4),o[0]}function qp(t){return Array.isArray(t.members)?t.members:[]}function jp(t,e,s,r){let n=e.find(o=>o.user_id===s||o.id===s||o.username===s);return n||ct(t.ctx,`\u6210\u5458 '${s}' \u4E0D\u5728\u56E2\u961F '${r||""}' \u4E2D`,"\u8FD0\u884C coder team members \u67E5\u770B\u6210\u5458\uFF0Cuser_id / username \u5747\u53EF",4),n}function Mp(t,e){return e?t.filter(s=>s.user_type===e):t}function Gp(t,e){e&&e!=="human"&&e!=="ai"&&ct(t.ctx,`--type \u4EC5\u652F\u6301 human \u6216 ai\uFF0C\u6536\u5230 '${e}'`,void 0,3)}function Fp(t,e){let s=t.config&&t.config.metadata&&t.config.metadata.created_by;if(!s)return"";let r=e.find(n=>n.user_id===s);return r?r.nickname?`${r.username}(${r.nickname})`:r.username:s}function Bp(t){return t==="mentor"?"admin":"member"}async function Zp(t,e,s){try{let r=await t.http.request("POST",`/${e}`,s,Rp);(r.status<200||r.status>=300)&&process.stderr.write(`Warning: \u77E5\u8BC6\u5E93\u540C\u6B65\u5931\u8D25 (${e}): HTTP ${r.status}
27
27
  `)}catch(r){process.stderr.write(`Warning: \u77E5\u8BC6\u5E93\u540C\u6B65\u5931\u8D25 (${e}): ${r.message}
@@ -505,7 +505,7 @@ name: ${e}
505
505
  `+Object.keys(r).map(n=>`${n}: ${r[n]}`).join(`\r
506
506
  `)+`\r
507
507
  \r
508
- `+s)}function Nt(t,e,s,r,n,o){if(t.listenerCount("wsClientError")){let i=new Error(n);Error.captureStackTrace(i,Nt),t.emit("wsClientError",i,s,e)}else Ls(s,r,n,o)}});var Mu=x((_S,ju)=>{"use strict";var kk=Tu(),bk=Er(),xk=rs(),Sk=_o(),Ik=bo(),Ck=Ao(),De=vr(),qu=Nu();De.createWebSocketStream=kk;De.extension=bk;De.PerMessageDeflate=xk;De.Receiver=Sk;De.Sender=Ik;De.Server=qu;De.subprotocol=Ck;De.WebSocket=De;De.WebSocketServer=qu;ju.exports=De});var Bu=x((bS,Fu)=>{var wS=require("https"),kS=require("http"),To=class{constructor(e,s,r,n,o,i,a){this.cfg=e,this.token=s,this.cliVersion=r||"dev",this.onWakeup=n,this.onHeartbeatAck=o,this.onDisconnect=i,this.log=a,this._running=!1,this._ws=null,this._backoff=1e3,this._abortSignal=null,this._getRuntimeIds=null}start(e,s){this._running=!0,this._abortSignal=e,this._getRuntimeIds=s,this._loop()}stop(){if(this._running=!1,this._ws){try{this._ws.close()}catch{}this._ws=null}}async _loop(){for(;this._running&&(!this._abortSignal||!this._abortSignal.aborted);){let e=this._getRuntimeIds?this._getRuntimeIds():[];if(e.length===0){await Gu(2e3);continue}try{await this._connect(e),this._backoff=1e3}catch(s){if(!this._running)return;this.log(`[wakeup] ws unavailable (${s.message}); polling fallback active, retry in ${this._backoff}ms`)}if(!this._running)return;await Gu(Ek(this._backoff)),this._backoff<3e4&&(this._backoff=Math.min(this._backoff*2,3e4))}}_buildWsUrl(e){let r=(this.cfg.serverUrl||"https://flow.makecoder.com").replace(/\/+$/,"").replace(/^https?:\/\//,o=>o==="https://"?"wss://":"ws://"),n=[...e].sort().join(",");return`${r}/api/daemon/ws?runtime_ids=${encodeURIComponent(n)}`}async _connect(e){let s=this._buildWsUrl(e),r;try{r=Mu()}catch{throw new Error("ws module not available \u2014 install with: npm install ws")}return new Promise((n,o)=>{let i={Authorization:`Bearer ${this.token}`,"X-Client-Platform":"daemon","X-Client-Version":this.cliVersion},a=new r(s,{headers:i,handshakeTimeout:1e4});this._ws=a;let c=()=>{try{a.close()}catch{}};this._abortSignal&&this._abortSignal.addEventListener("abort",c,{once:!0});let l=null,u=()=>{let p=this._getRuntimeIds?this._getRuntimeIds():[];for(let m of p)try{a.send(JSON.stringify({type:"daemon:heartbeat",payload:{runtime_id:m,supports_batch_import:!0}}))}catch{}},d=()=>{l&&(clearInterval(l),l=null)};a.on("open",()=>{this.log(`[wakeup] websocket connected (${e.length} runtimes)`),this._backoff=1e3,u();let p=this.cfg.heartbeatInterval||15e3;l=setInterval(u,p),this.onWakeup("")}),a.on("message",p=>{try{let m=JSON.parse(p.toString());this._handleMessage(m)}catch(m){this.log(`[wakeup] invalid message: ${m.message}`)}}),a.on("error",p=>{d(),this._abortSignal&&this._abortSignal.removeEventListener("abort",c),this._ws=null,this.onDisconnect&&this.onDisconnect(),o(p)}),a.on("close",(p,m)=>{d(),this._abortSignal&&this._abortSignal.removeEventListener("abort",c),this._ws=null,this.onDisconnect&&this.onDisconnect(),this._running&&this.log(`[wakeup] websocket closed (${p})`),n()})})}_handleMessage(e){let s=e.type;if(s==="daemon:task_available"){let r=e.payload||{},n=r.runtime_id||"",o=r.task_id||"";this.log(`[wakeup] task_available runtimeId=${n} taskId=${o}`),this.onWakeup(n)}else s==="daemon:heartbeat_ack"&&this.onHeartbeatAck&&this.onHeartbeatAck(e.payload||{})}};function Gu(t){return new Promise(e=>setTimeout(e,t))}function Ek(t){return Math.max(500,t+(Math.random()-.5)*t*.2)}Fu.exports={TaskWakeupLoop:To}});var Ju=x((xS,zu)=>{var vo=require("os"),{HealthServer:Ak}=Es(),{DaemonClient:$k}=Xc(),{Poller:Zu}=so(),{Heartbeat:Tk}=Rl(),{TaskWakeupLoop:vk}=Bu(),{loadOrCreateDaemonId:Uk}=es(),{runGc:Wu}=Xn(),{getActiveWorkdirs:Vu}=eo(),{handleModelList:Ok}=ro(),{handleLocalSkillList:Dk,handleLocalSkillImport:Rk}=oo(),Ku=4320*60*1e3,Uo=class{constructor(e,s){this.cfg=e,this.log=s||console.error,this._runtimeIds=[],this._runtimeProviders={},this._workspaceForRuntime={},this._pollers={},this._heartbeat=null,this._wakeupLoop=null,this._health=null,this._client=null,this._daemonId=null,this._wsLastAck={}}_wsHeartbeatFreshness(){return 2*(this.cfg.heartbeatInterval||15e3)}_recordWsAck(e){e&&(this._wsLastAck[e]=Date.now())}_wsRecentlyAcked(e){let s=this._wsLastAck[e];return s?Date.now()-s<this._wsHeartbeatFreshness():!1}_clearWsAcks(){this._wsLastAck={}}async run(e){let s=this.cfg,r=e&&typeof e.abort=="function"?e:null,n=r?r.signal:e;this._health=new Ak(s.healthPort||19514),this._health.setShutdown(()=>{r?r.abort():process.emit("SIGTERM")}),this._health.start(),this._daemonId=Uk(s.daemonId),this._health.daemonId=this._daemonId,this._client=new $k(s.serverUrl,s.token,s.cliVersion||"dev"),this.log(`[daemon] starting id=${this._daemonId} server=${s.serverUrl} version=${s.cliVersion||"dev"}`),this.log(`[daemon] config: pollInterval=${s.pollInterval}ms heartbeatInterval=${s.heartbeatInterval}ms maxConcurrentTasks=${s.maxConcurrentTasks}`);try{let i=await this._client.renewToken();i?.renewed&&this.log(`[daemon] token renewed expires_at=${i.expires_at}`)}catch(i){this.log(`[daemon] token renewal preflight skipped: ${i.message}`)}let o=[];try{this.log(`[daemon] fetching workspaces from ${s.serverUrl}/api/workspaces`),o=await this._client.getWorkspaces(),this.log(`[daemon] found ${o.length} workspace(s): ${o.map(i=>i.id||i.name).join(", ")||"(none)"}`)}catch(i){this.log(`[daemon] getWorkspaces error: ${i.message}`)}this._health.workspaces=o.map(i=>i.id||i.name||"");for(let i of o)await this._registerWorkspace(i);this._runtimeIds.length===0&&this.log("[daemon] WARNING: no runtimes registered \u2014 tasks cannot be claimed"),this._health.agents=this._runtimeIds.map(i=>`claude:${i}`),this._health.status="running",this._startGcLoop(s,n);for(let i of this._runtimeIds){let a=new Zu(s,this._client,i,this.log);this._pollers[i]=a,a.start(n)}this.log(`[daemon] started ${Object.keys(this._pollers).length} poller(s)`),this._wakeupLoop=new vk(s,s.token,s.cliVersion||"dev",i=>{if(i){let a=this._pollers[i];if(a)this.log(`[daemon] wakeup signal for runtime=${i.slice(0,8)}`),a.wakeup();else{this.log(`[daemon] wakeup signal for unknown runtime=${i.slice(0,8)}, fanning out`);for(let c of Object.values(this._pollers))c.wakeup()}}else for(let a of Object.values(this._pollers))a.wakeup()},i=>{if(i&&i.runtime_gone&&i.runtime_id){this.log(`[daemon] heartbeat_ack: runtime ${i.runtime_id} gone`),this._handleRuntimeGone(i.runtime_id);return}i&&i.runtime_id&&this._recordWsAck(i.runtime_id),i&&this._handleHeartbeatActions(i.runtime_id,i)},()=>this._clearWsAcks(),this.log),this._wakeupLoop.start(n,()=>this._runtimeIds),this._heartbeat=new Tk(s,this._client,()=>this._runtimeIds,this.log,i=>this._handleRuntimeGone(i),i=>this._runtimeProviders[i]||"claude",i=>this._wsRecentlyAcked(i)),this._heartbeat.start(n),this._startWorkspaceSyncLoop(n),this._startTokenRenewalLoop(n),this.log("[daemon] running \u2014 waiting for tasks"),await Lk(n),this.log("[daemon] shutting down"),this._heartbeat.stop(),this._wakeupLoop.stop();for(let i of Object.values(this._pollers))i.stop();if(this._runtimeIds.length)try{await this._client.deregister(this._runtimeIds),this.log(`[daemon] deregistered ${this._runtimeIds.length} runtime(s)`)}catch(i){this.log(`[daemon] deregister error: ${i.message}`)}this._health.close(),this.log("[daemon] stopped")}async _registerWorkspace(e){try{this.log(`[daemon] registering runtime for workspace=${e.id||e.name} deviceName=${this.cfg.deviceName||vo.hostname()}`);let r=((await this._client.register({workspaceId:e.id,daemonId:this._daemonId,deviceName:this.cfg.deviceName||vo.hostname(),cliVersion:this.cfg.cliVersion||"dev",runtimes:[{name:this.cfg.runtimeName||`Claude (${vo.hostname()})`,type:"claude",version:this.cfg.cliVersion||"dev",status:"online"}]}))?.runtimes||[]).map(n=>n.id).filter(Boolean);for(let n of r)this._runtimeProviders[n]="claude",this._workspaceForRuntime[n]=e.id||"";this._runtimeIds.push(...r),this.log(`[daemon] registered workspace=${e.id} runtimeIds=[${r.join(", ")}]`);for(let n of r)try{await this._client.recoverOrphans(n),this.log(`[daemon] recover-orphans OK runtime=${n.slice(0,8)}`)}catch(o){this.log(`[daemon] recover-orphans failed runtime=${n.slice(0,8)}: ${o.message}`)}}catch(s){this.log(`[daemon] register error workspace=${e.id}: ${s.message}`)}}async _handleRuntimeGone(e){let s=this._runtimeIds.indexOf(e);s!==-1&&this._runtimeIds.splice(s,1);let r=this._runtimeProviders[e]||"claude";delete this._runtimeProviders[e];let n=this._pollers[e];n&&(n.stop(),delete this._pollers[e]),this.log(`[daemon] runtime ${e.slice(0,8)} gone (provider=${r}), re-registering`);try{let o=await this._client.getWorkspaces();for(let i of o){let a=this._runtimeIds.length;await this._registerWorkspace(i);let c=this._runtimeIds.slice(a);for(let l of c){let u=new Zu(this.cfg,this._client,l,this.log);this._pollers[l]=u,u.start()}}}catch(o){this.log(`[daemon] re-register after runtime_gone failed: ${o.message}`)}}_startWorkspaceSyncLoop(e){let r=async()=>{if(!(e&&e.aborted)){try{let n=await this._client.getWorkspaces();for(let o of n){let i=o.id||o.name||"";if(!this._runtimeIds.some(c=>this._workspaceForRuntime&&this._workspaceForRuntime[c]===i)){let c=this._runtimeIds.length;await this._registerWorkspace(o);let l=this._runtimeIds.slice(c);for(let u of l)if(!this._pollers[u]){let{Poller:d}=so(),p=new d(this.cfg,this._client,u,this.log);this._pollers[u]=p,p.start(e),this.log(`[daemon] workspace-sync: started poller for new runtime=${u.slice(0,8)}`)}}}}catch(n){this.log(`[daemon] workspace-sync error: ${n.message}`)}(!e||!e.aborted)&&setTimeout(r,3e4)}};setTimeout(r,3e4)}_startGcLoop(e,s){if(!e.gcEnabled)return;let r=e.gcInterval||36e5,n=this._client,o=setTimeout(()=>{if(s&&s.aborted)return;Wu(e,Vu(),n).catch(()=>{});let i=setInterval(()=>{if(s&&s.aborted){clearInterval(i);return}Wu(e,Vu(),n).catch(()=>{})},r);s&&s.addEventListener("abort",()=>clearInterval(i),{once:!0})},3e4);s&&s.addEventListener("abort",()=>clearTimeout(o),{once:!0})}_startTokenRenewalLoop(e){let s=async()=>{if(!(e&&e.aborted)){try{let r=await this._client.renewToken();r?.renewed&&this.log(`[daemon] token renewed expires_at=${r.expires_at}`)}catch(r){this.log(`[daemon] token renewal failed: ${r.message}`)}(!e||!e.aborted)&&setTimeout(s,Ku)}};setTimeout(s,Ku)}_handleHeartbeatActions(e,s){if(!s||!e)return;if(s.pending_model_list){let n=this._runtimeProviders[e]||"claude";this.log(`[daemon] heartbeat_ack: pending_model_list runtime=${e.slice(0,8)} requestId=${s.pending_model_list.id}`),Ok(this._client,e,s.pending_model_list.id,n,this.log,this.cfg.coderBaseUrl).catch(o=>this.log(`[daemon] model-list error: ${o.message}`))}if(s.pending_local_skills){let n=this._runtimeProviders[e]||"claude";this.log(`[daemon] heartbeat_ack: pending_local_skills runtime=${e.slice(0,8)} requestId=${s.pending_local_skills.id}`),Dk(this._client,e,s.pending_local_skills.id,n,this.log).catch(o=>this.log(`[daemon] local-skill-list error: ${o.message}`))}let r=s.pending_local_skill_imports||(s.pending_local_skill_import?[s.pending_local_skill_import]:[]);if(r.length>0){let n=this._runtimeProviders[e]||"claude";for(let o of r)this.log(`[daemon] heartbeat_ack: pending_local_skill_import runtime=${e.slice(0,8)} requestId=${o.id} key=${o.skill_key}`),Rk(this._client,e,o.id,o.skill_key,n,this.log).catch(i=>this.log(`[daemon] local-skill-import error: ${i.message}`))}}};function Lk(t){return new Promise(e=>{if(!t){process.once("SIGINT",e),process.once("SIGTERM",e);return}if(t.aborted)return e();t.addEventListener("abort",e,{once:!0})})}zu.exports={DaemonProcess:Uo}});var ud=x((SS,ld)=>{var{emitTable:H,emitDetails:W}=Fc(),{abort:y,send:C,ensureOk:E,flag:b,positionals:Te,requireWorkspaceId:A}=Wc();function nd(t,{full:e=!1,actors:s=null}={}){let r=t.assignee||(t.assignee_id?`${t.assignee_type||""}:${t.assignee_id}`:""),n=r;if(s&&r){let o=r.indexOf(":"),i=o!==-1?r.slice(o+1):r,a=s.get(i);a&&(n=a.name)}return{key:t.key||t.identifier||"",...e?{id:t.id||""}:{},title:t.title||"",status:t.status||"",priority:t.priority||"",assignee:n}}async function od(t,e){let s=await C(t,"GET","/api/agents"),r=E(t,s)||{},n=Array.isArray(r)?r:r.agents||[],o=String(e).toLowerCase(),i=n.find(a=>a.id===e||(a.slug||"").toLowerCase()===o||(a.name||"").toLowerCase()===o);return i||y(t.ctx,`agent '${e}' \u4E0D\u5B58\u5728`,"\u8FD0\u884C coder flow agent list \u67E5\u770B\u53EF\u7528 agent",4),i.id}var v={id:"ID",key:"Key",name:"\u540D\u79F0",slug:"Slug",title:"\u6807\u9898",status:"\u72B6\u6001",priority:"\u4F18\u5148\u7EA7",assignee:"\u8D1F\u8D23\u4EBA",description:"\u63CF\u8FF0",current:"\u5F53\u524D",start_date:"\u5F00\u59CB\u65E5\u671F",due_date:"\u622A\u6B62\u65E5\u671F",created_at:"\u521B\u5EFA\u65F6\u95F4",updated_at:"\u66F4\u65B0\u65F6\u95F4",author:"\u4F5C\u8005",content:"\u5185\u5BB9",agent:"Agent",deleted:"\u5DF2\u5220\u9664"},xe={status:{backlog:"\u5F85\u89C4\u5212",todo:"\u5F85\u529E",in_progress:"\u8FDB\u884C\u4E2D",in_review:"\u8BC4\u5BA1\u4E2D",done:"\u5DF2\u5B8C\u6210",cancelled:"\u5DF2\u53D6\u6D88",open:"\u5F00\u653E",closed:"\u5DF2\u5173\u95ED",active:"\u6D3B\u8DC3",inactive:"\u505C\u7528",archived:"\u5DF2\u5F52\u6863",planned:"\u89C4\u5212\u4E2D",started:"\u5DF2\u542F\u52A8",on_hold:"\u6401\u7F6E",idle:"\u7A7A\u95F2",busy:"\u5FD9\u788C",running:"\u8FD0\u884C\u4E2D",queued:"\u6392\u961F\u4E2D",pending:"\u7B49\u5F85\u4E2D",paused:"\u5DF2\u6682\u505C",stopped:"\u5DF2\u505C\u6B62",completed:"\u5DF2\u5B8C\u6210",failed:"\u5931\u8D25",success:"\u6210\u529F",error:"\u9519\u8BEF"},priority:{none:"\u65E0",low:"\u4F4E",medium:"\u4E2D",high:"\u9AD8",urgent:"\u7D27\u6025"}};async function Do(t,e,s){if(t.ctx.isJson||!s)return null;let r=await t.http.getWorkspaceSlug();return r?`${t.http.baseUrl}/${r}/${e}/${s}`:null}async function Ro(t,e,s){if(t.ctx.isJson)return null;let r=await t.http.getWorkspaceSlug();return r?s.map(n=>n&&n.id?`${t.http.baseUrl}/${r}/${e}/${n.id}`:null):null}async function Pk(t){A(t);let e=new URLSearchParams;e.set("workspace_id",t.http.workspaceId);let s=b(t.args,"--status"),r=b(t.args,"--priority"),n=b(t.args,"--limit"),o=b(t.args,"--offset");s&&e.set("status",s),r&&e.set("priority",r),n&&e.set("limit",n),o&&e.set("offset",o);let i=t.args.includes("--full-id"),[a,c]=await Promise.all([C(t,"GET",`/api/issues?${e.toString()}`),t.ctx.isJson?Promise.resolve(null):t.http.getActorLookup()]),l=E(t,a)||{},u=Array.isArray(l)?l:l.issues||[],d=await Ro(t,"issues",u),p=c?u.map(m=>{let g=m.assignee||(m.assignee_id?`${m.assignee_type||""}:${m.assignee_id}`:"");if(!g)return null;let _=g.indexOf(":"),w=_!==-1?g.slice(_+1):g;return c.get(w)?.url||null}):null;return H(t.ctx,u.map(m=>nd(m,{full:i,actors:c})),{labels:v,values:xe,linkCol:"key",rowLinks:d,colLinks:p?{col:"assignee",links:p}:void 0,empty:"\u65E0 issue"}),0}async function Hu(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 issue \u6807\u8BC6","\u7528\u6CD5: coder flow issue get <id|KEY>",3),A(t);let[s,r]=await Promise.all([C(t,"GET",`/api/issues/${encodeURIComponent(e)}`),t.ctx.isJson?Promise.resolve(null):t.http.getActorLookup()]),n=E(t,s)||{},o=await Do(t,"issues",n.id),i=n.assignee||(n.assignee_id?`${n.assignee_type||""}:${n.assignee_id}`:""),a=i,c=null;if(r&&i){let l=i.indexOf(":"),u=l!==-1?i.slice(l+1):i,d=r.get(u);d&&(a=d.name,c=d.url)}return W(t.ctx,[["key",n.key||n.identifier||""],["id",n.id||""],["title",n.title||""],["status",n.status||""],["priority",n.priority||""],["assignee",a],["start_date",n.start_date||""],["due_date",n.due_date||""],["description",n.description||""]],null,{labels:v,values:xe,link:o?{key:"key",url:o}:null,fieldLinks:c?{assignee:c}:null}),0}async function Nk(t){let e=A(t),s=b(t.args,"--title");s||y(t.ctx,"\u7F3A\u5C11 --title","\u7528\u6CD5: coder flow issue create --title <t>",3);let r={workspace_id:e,title:s},n=b(t.args,"--description"),o=b(t.args,"--priority"),i=b(t.args,"--status"),a=b(t.args,"--project"),c=b(t.args,"--parent"),l=b(t.args,"--agent")||b(t.args,"--assignee"),u=b(t.args,"--assignee-id");n!==void 0&&(r.description=n),o!==void 0&&(r.priority=o),i!==void 0&&(r.status=i),a!==void 0&&(r.project_id=a),c!==void 0&&(r.parent_id=c),u!==void 0?r.assignee_id=u:l!==void 0&&(r.assignee_type="agent",r.assignee_id=await od(t,l));let d=process.env.MULTICA_QUICK_CREATE_TASK_ID;d&&(r.origin_type="quick_create",r.origin_id=d);let p=await C(t,"POST","/api/issues",r),m=E(t,p)||{};return W(t.ctx,[["key",m.key||m.identifier||""],["id",m.id||""],["title",m.title||s],["status",m.status||""]],null,{labels:v,values:xe}),0}async function Lo(t,e,s,r){let n=await C(t,"PUT",`/api/issues/${encodeURIComponent(e)}`,s),o=E(t,n)||{},i=await Do(t,"issues",o.id);return W(t.ctx,r(o),null,{labels:v,values:xe,link:i?{key:"key",url:i}:null}),0}async function qk(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 issue \u6807\u8BC6","\u7528\u6CD5: coder flow issue update <id|KEY> ...",3),A(t);let s={},r=b(t.args,"--title"),n=b(t.args,"--description"),o=b(t.args,"--priority"),i=b(t.args,"--status");return r!==void 0&&(s.title=r),n!==void 0&&(s.description=n),o!==void 0&&(s.priority=o),i!==void 0&&(s.status=i),Object.keys(s).length||y(t.ctx,"\u672A\u63D0\u4F9B\u4EFB\u4F55\u66F4\u65B0\u5B57\u6BB5","\u81F3\u5C11\u7ED9\u4E00\u4E2A --title/--description/--priority/--status",3),Lo(t,e,s,a=>[["key",a.key||a.identifier||e],["title",a.title||""],["status",a.status||""],["priority",a.priority||""]])}async function jk(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 issue \u6807\u8BC6","\u7528\u6CD5: coder flow issue status <id|KEY> --set <status>",3);let s=b(t.args,"--set")||b(t.args,"--status");return s||y(t.ctx,"\u7F3A\u5C11 --set <status>","\u7528\u6CD5: coder flow issue status <id|KEY> --set <status>",3),A(t),Lo(t,e,{status:s},r=>[["key",r.key||r.identifier||e],["status",r.status||s]])}async function Mk(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 issue \u6807\u8BC6","\u7528\u6CD5: coder flow issue assign <id|KEY> --agent <slug>",3),A(t);let s=b(t.args,"--agent")||b(t.args,"--to"),r=t.args.includes("--unassign"),n;return r?n={assignee_type:null,assignee_id:null}:(s||y(t.ctx,"\u7F3A\u5C11 --agent <slug>","\u6216\u7528 --unassign \u53D6\u6D88\u6307\u6D3E",3),n={assignee_type:"agent",assignee_id:await od(t,s)}),Lo(t,e,n,o=>[["key",o.key||o.identifier||e],["status",o.status||""],["assignee",o.assignee_id?`${o.assignee_type||""}:${o.assignee_id}`:""]])}async function Gk(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11\u641C\u7D22\u5173\u952E\u8BCD","\u7528\u6CD5: coder flow issue search <query>",3),A(t);let s=new URLSearchParams;s.set("q",e),s.set("workspace_id",t.http.workspaceId);let r=b(t.args,"--limit");r&&s.set("limit",r),t.args.includes("--include-closed")&&s.set("include_closed","true");let n=await C(t,"GET",`/api/issues/search?${s.toString()}`),o=E(t,n)||{},i=Array.isArray(o)?o:o.issues||[],a=await Ro(t,"issues",i);return H(t.ctx,i.map(c=>nd(c)),{labels:v,values:xe,linkCol:"key",rowLinks:a,empty:"\u65E0\u5339\u914D issue"}),0}async function Fk(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 issue \u6807\u8BC6","\u7528\u6CD5: coder flow issue comment list <id|KEY>",3),A(t);let s=await C(t,"GET",`/api/issues/${encodeURIComponent(e)}/comments`),r=E(t,s)||{},n=Array.isArray(r)?r:r.comments||[];return H(t.ctx,n.map(o=>({id:o.id||"",author:o.author_id||o.user_id||"",created_at:o.created_at||"",content:o.content||""})),{labels:v,empty:"\u65E0\u8BC4\u8BBA"}),0}async function Bk(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 issue \u6807\u8BC6","\u7528\u6CD5: coder flow issue comment add <id|KEY> --content <text>",3),A(t);let s=b(t.args,"--content")||b(t.args,"--body");s||y(t.ctx,"\u7F3A\u5C11 --content",null,3);let r={content:s},n=b(t.args,"--parent");n&&(r.parent_id=n);let o=await C(t,"POST",`/api/issues/${encodeURIComponent(e)}/comments`,r),i=E(t,o)||{};return W(t.ctx,[["id",i.id||""],["content",i.content||s]],null,{labels:v}),0}async function Zk(t){let e=Te(t.args,{valueFlags:[]}),s=e[0],r=e[1];(!s||!r)&&y(t.ctx,"\u7F3A\u5C11\u53C2\u6570","\u7528\u6CD5: coder flow issue comment delete <issue-id> <comment-id>",3),A(t);let n=await C(t,"DELETE",`/api/issues/${encodeURIComponent(s)}/comments/${encodeURIComponent(r)}`);return E(t,n),t.ctx.emit(t.ctx.isJson?{deleted:r}:`\u8BC4\u8BBA ${r} \u5DF2\u5220\u9664`),0}async function Wk(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 issue \u6807\u8BC6","\u7528\u6CD5: coder flow issue subscriber list <id|KEY>",3),A(t);let s=await C(t,"GET",`/api/issues/${encodeURIComponent(e)}/subscribers`),r=E(t,s)||{},n=Array.isArray(r)?r:r.subscribers||[];return H(t.ctx,n.map(o=>({id:o.id||"",name:o.name||"",type:o.type||""})),{labels:v,empty:"\u65E0\u8BA2\u9605\u8005"}),0}async function Vk(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 issue \u6807\u8BC6","\u7528\u6CD5: coder flow issue subscriber add <id|KEY> [--user <name>]",3),A(t);let s={},r=b(t.args,"--user-id"),n=b(t.args,"--user");r?s.user_id=r:n&&(s.user=n);let o=await C(t,"POST",`/api/issues/${encodeURIComponent(e)}/subscribers`,s),i=E(t,o)||{};return t.ctx.emit(t.ctx.isJson?i:`\u5DF2\u8BA2\u9605 issue ${e}`),0}async function Kk(t){let s=Te(t.args,{valueFlags:["--user-id","--user"]})[0];s||y(t.ctx,"\u7F3A\u5C11 issue \u6807\u8BC6","\u7528\u6CD5: coder flow issue subscriber remove <id|KEY>",3),A(t);let r={},n=b(t.args,"--user-id"),o=b(t.args,"--user");n?r.user_id=n:o&&(r.user=o);let i=await C(t,"DELETE",`/api/issues/${encodeURIComponent(s)}/subscribers`,r);return E(t,i),t.ctx.emit(t.ctx.isJson?{unsubscribed:!0}:`\u5DF2\u53D6\u6D88\u8BA2\u9605 issue ${s}`),0}async function zk(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 issue \u6807\u8BC6","\u7528\u6CD5: coder flow issue pull-requests <id|KEY>",3),A(t);let s=await C(t,"GET",`/api/issues/${encodeURIComponent(e)}/pull-requests`),r=E(t,s)||{},n=Array.isArray(r)?r:r.pull_requests||[];return H(t.ctx,n.map(o=>({id:o.id||"",title:o.title||"",url:o.url||"",status:o.status||""})),{labels:v,empty:"\u65E0\u5173\u8054 PR"}),0}async function Jk(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 task-id","\u7528\u6CD5: coder flow issue run-messages <task-id> [--since <seq>]",3),A(t);let s=new URLSearchParams,r=b(t.args,"--issue"),n=b(t.args,"--since");r&&s.set("issue_id",r),n&&s.set("since",n);let o=s.toString(),i=await C(t,"GET",`/api/tasks/${encodeURIComponent(e)}/messages${o?"?"+o:""}`),a=E(t,i)||{},c=Array.isArray(a)?a:a.messages||[];return t.ctx.isJson?(t.ctx.emit(c),0):(H(t.ctx,c.map(l=>({seq:String(l.seq??l.sequence??""),type:l.type||l.role||"",content:(l.content||l.output||"").slice(0,100)})),{labels:{seq:"Seq",type:"\u7C7B\u578B",content:"\u5185\u5BB9"},empty:"\u65E0\u6D88\u606F"}),0)}async function Hk(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 task-id","\u7528\u6CD5: coder flow issue cancel-task <task-id>",3),A(t);let s={},r=b(t.args,"--issue");r&&(s.issue_id=r);let n=await C(t,"POST",`/api/tasks/${encodeURIComponent(e)}/cancel`,s),o=E(t,n)||{};return W(t.ctx,[["id",o.id||e],["status",o.status||""]],null,{labels:v}),0}async function Yk(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 issue \u6807\u8BC6","\u7528\u6CD5: coder flow issue runs <id|KEY>",3),A(t);let s=await C(t,"GET",`/api/issues/${encodeURIComponent(e)}/task-runs`),r=E(t,s)||{},n=Array.isArray(r)?r:r.runs||r.tasks||[];return H(t.ctx,n.map(o=>({id:o.id||"",status:o.status||"",agent:o.agent_id||o.assignee_id||"",created_at:o.created_at||""})),{labels:v,values:xe,empty:"\u65E0\u4EFB\u52A1\u5386\u53F2"}),0}async function Xk(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 issue \u6807\u8BC6","\u7528\u6CD5: coder flow issue rerun <id|KEY>",3),A(t);let s=await C(t,"POST",`/api/issues/${encodeURIComponent(e)}/rerun`,{}),r=E(t,s)||{};return W(t.ctx,[["id",r.id||""],["status",r.status||""]],null,{labels:v,values:xe}),0}function Ps(t,e){return e.map(s=>[s,t[s]??""])}function ls(t,e,s,{webPath:r=null,linkCol:n=null}={}){return async o=>{A(o);let i=new URLSearchParams;i.set("workspace_id",o.http.workspaceId);let a=await C(o,"GET",`/api/${t}?${i.toString()}`),c=E(o,a)||{},l=Array.isArray(c)?c:c[e]||[],u=r?await Ro(o,r,l):null;return H(o.ctx,l.map(d=>{let p={};for(let m of s)p[m]=d[m]??"";return p}),{labels:v,values:xe,linkCol:n,rowLinks:u,empty:`\u65E0 ${t}`}),0}}function Me(t,e,{webPath:s=null,linkCol:r=null}={}){return async n=>{let o=n.arg;o||y(n.ctx,`\u7F3A\u5C11 ${t} \u6807\u8BC6`,"\u7528\u6CD5: coder flow ... get <id>",3),A(n);let i=await C(n,"GET",`/api/${t}/${encodeURIComponent(o)}`),a=E(n,i)||{},c=s?await Do(n,s,a.id):null;return W(n.ctx,Ps(a,e),null,{labels:v,values:xe,link:c&&r?{key:r,url:c}:null}),0}}function Or(t){return async e=>{let s=e.arg;if(s||y(e.ctx,`\u7F3A\u5C11 ${t} \u6807\u8BC6`,"\u7528\u6CD5: coder flow ... delete <id>",3),A(e),!e.args.includes("--yes"))return e.ctx.emit(`\u5C06\u5220\u9664 ${t}/${s}\uFF08\u9AD8\u5F71\u54CD\uFF09\u3002\u786E\u8BA4\u8BF7\u52A0 --yes`),10;let r=await C(e,"DELETE",`/api/${t}/${encodeURIComponent(s)}`);return E(e,r),e.ctx.emit(e.ctx.isJson?{deleted:s}:`\u5DF2\u5220\u9664 ${s}`),0}}function Xe(t,e,s,r,{withWorkspace:n=!1,idArg:o=!1}={}){return async i=>{let a=A(i),c=`/api/${t}`;if(o){let m=i.arg;m||y(i.ctx,`\u7F3A\u5C11 ${t} \u6807\u8BC6`,"\u7528\u6CD5: coder flow ... <verb> <id> ...",3),c+=`/${encodeURIComponent(m)}`}let l={};n&&(l.workspace_id=a);for(let[m,g]of s){let _=b(i.args,`--${m}`);_!==void 0&&(l[g]=_)}Object.keys(l).filter(m=>m!=="workspace_id").length||y(i.ctx,"\u672A\u63D0\u4F9B\u4EFB\u4F55\u5B57\u6BB5",`\u7ED9\u51FA ${s.map(m=>"--"+m[0]).join(" / ")}`,3);let d=await C(i,e,c,l),p=E(i,d)||{};return W(i.ctx,Ps(p,r),null,{labels:v,values:xe}),0}}function Oo(t,e,s){return async r=>{let n=r.arg;n||y(r.ctx,`\u7F3A\u5C11 ${t} \u6807\u8BC6`,`\u7528\u6CD5: coder flow ... ${e} <id>`,3),A(r);let o=await C(r,"POST",`/api/${t}/${encodeURIComponent(n)}/${e}`,{}),i=E(r,o)||{};return W(r.ctx,Ps(i,s),null,{labels:v,values:xe}),0}}function Yu(t,e,s,r){return async n=>{let o=n.arg;o||y(n.ctx,`\u7F3A\u5C11 ${t} \u6807\u8BC6`,"\u7528\u6CD5: coder flow ... <verb> <id>",3),A(n);let i=await C(n,"GET",`/api/${t}/${encodeURIComponent(o)}/${e}`),a=E(n,i)||{},c=Array.isArray(a)?a:a[s]||[];return H(n.ctx,c.map(l=>{let u={};for(let d of r)u[d]=l[d]??"";return u}),{labels:v,values:xe,empty:"\uFF08\u7A7A\uFF09"}),0}}async function Qk(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 issue \u6807\u8BC6","\u7528\u6CD5: coder flow issue label list <id|KEY>",3),A(t);let s=await C(t,"GET",`/api/issues/${encodeURIComponent(e)}/labels`),r=E(t,s)||{},n=Array.isArray(r)?r:r.labels||[];return H(t.ctx,n.map(o=>({id:o.id||"",name:o.name||"",color:o.color||""})),{labels:v,empty:"\u65E0\u6807\u7B7E"}),0}async function eb(t){let e=Te(t.args,{valueFlags:[]}),s=e[0],r=e[1];(!s||!r)&&y(t.ctx,"\u7F3A\u5C11\u53C2\u6570","\u7528\u6CD5: coder flow issue label add <issue-id> <label-id>",3),A(t);let n=await C(t,"POST",`/api/issues/${encodeURIComponent(s)}/labels`,{label_id:r}),o=E(t,n)||{},i=Array.isArray(o)?o:o.labels||[];return H(t.ctx,i.map(a=>({id:a.id||"",name:a.name||"",color:a.color||""})),{labels:v,empty:"\u65E0\u6807\u7B7E"}),0}async function tb(t){let e=Te(t.args,{valueFlags:[]}),s=e[0],r=e[1];(!s||!r)&&y(t.ctx,"\u7F3A\u5C11\u53C2\u6570","\u7528\u6CD5: coder flow issue label remove <issue-id> <label-id>",3),A(t);let n=await C(t,"DELETE",`/api/issues/${encodeURIComponent(s)}/labels/${encodeURIComponent(r)}`);return E(t,n),t.ctx.emit(t.ctx.isJson?{removed:r}:`\u6807\u7B7E ${r} \u5DF2\u4ECE issue ${s} \u79FB\u9664`),0}async function sb(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 issue \u6807\u8BC6","\u7528\u6CD5: coder flow issue metadata list <id|KEY>",3),A(t);let s=await C(t,"GET",`/api/issues/${encodeURIComponent(e)}/metadata`),r=E(t,s)||{},n=r.metadata||r||{};if(t.ctx.isJson)return t.ctx.emit(n),0;let o=Object.entries(n).map(([i,a])=>({key:i,value:String(a),type:typeof a}));return H(t.ctx,o,{labels:v,empty:"\u65E0 metadata"}),0}async function rb(t){let e=t.arg,s=b(t.args,"--key");e||y(t.ctx,"\u7F3A\u5C11 issue \u6807\u8BC6","\u7528\u6CD5: coder flow issue metadata get <id|KEY> --key <key>",3),s||y(t.ctx,"\u7F3A\u5C11 --key","\u7528\u6CD5: coder flow issue metadata get <id|KEY> --key <key>",3),A(t);let r=await C(t,"GET",`/api/issues/${encodeURIComponent(e)}/metadata`),n=E(t,r)||{},o=n.metadata||n||{};s in o||y(t.ctx,`metadata key '${s}' \u4E0D\u5B58\u5728`,null,4);let i=o[s];return t.ctx.isJson?(t.ctx.emit(i),0):(W(t.ctx,[["key",s],["value",String(i)],["type",typeof i]],null,{labels:v}),0)}async function nb(t){let e=t.arg,s=b(t.args,"--key"),r=b(t.args,"--value"),n=b(t.args,"--type");e||y(t.ctx,"\u7F3A\u5C11 issue \u6807\u8BC6","\u7528\u6CD5: coder flow issue metadata set <id|KEY> --key <k> --value <v>",3),s||y(t.ctx,"\u7F3A\u5C11 --key",null,3),r===void 0&&y(t.ctx,"\u7F3A\u5C11 --value",null,3),A(t);let o=r;if(!n||n==="auto")try{o=JSON.parse(r)}catch{o=r}else n==="string"?o=r:n==="number"?(o=Number(r),Number.isNaN(o)&&y(t.ctx,`'${r}' \u4E0D\u662F\u6709\u6548\u6570\u5B57`,null,3)):n==="bool"&&(r!=="true"&&r!=="false"&&y(t.ctx,`'${r}' \u4E0D\u662F\u6709\u6548\u5E03\u5C14\uFF08true/false\uFF09`,null,3),o=r==="true");let i=await C(t,"PUT",`/api/issues/${encodeURIComponent(e)}/metadata/${encodeURIComponent(s)}`,{value:o}),a=E(t,i)||{},c=a.metadata||a||{};if(t.ctx.isJson)return t.ctx.emit(c),0;let l=Object.entries(c).map(([u,d])=>({key:u,value:String(d),type:typeof d}));return H(t.ctx,l,{labels:v,empty:"\uFF08\u7A7A\uFF09"}),0}async function ob(t){let e=t.arg,s=b(t.args,"--key");e||y(t.ctx,"\u7F3A\u5C11 issue \u6807\u8BC6","\u7528\u6CD5: coder flow issue metadata delete <id|KEY> --key <k>",3),s||y(t.ctx,"\u7F3A\u5C11 --key",null,3),A(t);let r=await C(t,"DELETE",`/api/issues/${encodeURIComponent(e)}/metadata/${encodeURIComponent(s)}`);return E(t,r),t.ctx.emit(t.ctx.isJson?{deleted:s}:`metadata key '${s}' \u5DF2\u5220\u9664`),0}async function ib(t){let e=t.arg;if(e||y(t.ctx,"\u7F3A\u5C11 issue \u6807\u8BC6","\u7528\u6CD5: coder flow issue delete <id|KEY> [--yes]",3),A(t),!t.args.includes("--yes"))return t.ctx.emit(`\u5C06\u5220\u9664 issue/${e}\uFF08\u9AD8\u5F71\u54CD\uFF09\u3002\u786E\u8BA4\u8BF7\u52A0 --yes`),10;let s=await C(t,"DELETE",`/api/issues/${encodeURIComponent(e)}`);return E(t,s),t.ctx.emit(t.ctx.isJson?{deleted:e}:`issue ${e} \u5DF2\u5220\u9664`),0}async function ab(t){A(t);let e=new URLSearchParams({workspace_id:t.http.workspaceId}),s=await C(t,"GET",`/api/labels?${e.toString()}`),r=E(t,s)||{},n=Array.isArray(r)?r:r.labels||[];return H(t.ctx,n.map(o=>({id:o.id||"",name:o.name||"",color:o.color||"",created_at:o.created_at||""})),{labels:v,empty:"\u65E0 label"}),0}async function Xu(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 label id","\u7528\u6CD5: coder flow label get <id>",3),A(t);let s=await C(t,"GET",`/api/labels/${encodeURIComponent(e)}`),r=E(t,s)||{};return W(t.ctx,[["id",r.id||""],["name",r.name||""],["color",r.color||""],["created_at",r.created_at||""]],null,{labels:v}),0}async function cb(t){let e=b(t.args,"--name"),s=b(t.args,"--color");e||y(t.ctx,"\u7F3A\u5C11 --name","\u7528\u6CD5: coder flow label create --name <n> --color <#hex>",3),s||y(t.ctx,"\u7F3A\u5C11 --color\uFF08\u683C\u5F0F: #3b82f6\uFF09",null,3),A(t);let r=await C(t,"POST","/api/labels",{name:e,color:s}),n=E(t,r)||{};return W(t.ctx,[["id",n.id||""],["name",n.name||""],["color",n.color||""]],null,{labels:v}),0}async function lb(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 label id","\u7528\u6CD5: coder flow label update <id> [--name <n>] [--color <#>]",3),A(t);let s={},r=b(t.args,"--name"),n=b(t.args,"--color");r!==void 0&&(s.name=r),n!==void 0&&(s.color=n),Object.keys(s).length||y(t.ctx,"\u672A\u63D0\u4F9B\u4EFB\u4F55\u5B57\u6BB5","--name / --color",3);let o=await C(t,"PUT",`/api/labels/${encodeURIComponent(e)}`,s),i=E(t,o)||{};return W(t.ctx,[["id",i.id||""],["name",i.name||""],["color",i.color||""]],null,{labels:v}),0}async function ub(t){let e=t.arg;if(e||y(t.ctx,"\u7F3A\u5C11 label id","\u7528\u6CD5: coder flow label delete <id> [--yes]",3),A(t),!t.args.includes("--yes"))return t.ctx.emit(`\u5C06\u5220\u9664 label/${e}\uFF08\u9AD8\u5F71\u54CD\uFF09\u3002\u786E\u8BA4\u8BF7\u52A0 --yes`),10;let s=await C(t,"DELETE",`/api/labels/${encodeURIComponent(e)}`);return E(t,s),t.ctx.emit(t.ctx.isJson?{deleted:e}:`label ${e} \u5DF2\u5220\u9664`),0}async function db(t){let e=A(t),s=b(t.args,"--name");s||y(t.ctx,"--name \u662F\u5FC5\u586B\u9879",null,3);let r=b(t.args,"--runtime-id");r||y(t.ctx,"--runtime-id \u662F\u5FC5\u586B\u9879",null,3);let n={workspace_id:e,name:s,runtime_id:r};for(let[c,l]of[["description","description"],["instructions","instructions"],["model","model"],["thinking-level","thinking_level"],["visibility","visibility"],["max-concurrent-tasks","max_concurrent_tasks"]]){let u=b(t.args,`--${c}`);u!==void 0&&(n[l]=u)}let o=await C(t,"POST","/api/agents",n),i=E(t,o)||{},a=b(t.args,"--skill-ids");if(a&&i.id){let c=a.split(",").map(l=>l.trim()).filter(Boolean);if(c.length){let l=await C(t,"PUT",`/api/agents/${encodeURIComponent(i.id)}/skills`,{skill_ids:c});E(t,l)}}return W(t.ctx,Ps(i,["id","name","model","runtime_id"]),null,{labels:v,values:xe}),0}async function pb(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 agent \u6807\u8BC6","\u7528\u6CD5: coder flow agent skills list <id>",3),A(t);let s=await C(t,"GET",`/api/agents/${encodeURIComponent(e)}/skills`),r=E(t,s)||{},n=Array.isArray(r)?r:r.skills||[];return H(t.ctx,n.map(o=>({id:o.id||"",name:o.name||"",description:o.description||""})),{labels:v,empty:"\u65E0 skill"}),0}async function fb(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 agent \u6807\u8BC6","\u7528\u6CD5: coder flow agent skills add <agent-id> --skill-ids <id1,id2>",3),A(t);let s=(b(t.args,"--skill-ids")||"").split(",").map(o=>o.trim()).filter(Boolean);s.length||y(t.ctx,"\u7F3A\u5C11 --skill-ids",null,3);let r=await C(t,"POST",`/api/agents/${encodeURIComponent(e)}/skills/add`,{skill_ids:s}),n=E(t,r)||{};return t.ctx.emit(t.ctx.isJson?n:`skill \u5DF2\u6DFB\u52A0\u5230 agent ${e}`),0}async function mb(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 agent \u6807\u8BC6","\u7528\u6CD5: coder flow agent skills set <agent-id> --skill-ids <id1,id2>",3),A(t);let s=b(t.args,"--skill-ids")||"",r=s?s.split(",").map(i=>i.trim()).filter(Boolean):[],n=await C(t,"PUT",`/api/agents/${encodeURIComponent(e)}/skills`,{skill_ids:r}),o=E(t,n)||{};return t.ctx.emit(t.ctx.isJson?o:`agent ${e} \u7684 skill \u5DF2\u66F4\u65B0`),0}async function hb(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 agent \u6807\u8BC6","\u7528\u6CD5: coder flow agent env get <id>",3),A(t);let s=await C(t,"GET",`/api/agents/${encodeURIComponent(e)}/env`),r=E(t,s)||{},n=r.env||r||{};if(t.ctx.isJson)return t.ctx.emit(n),0;let o=Object.entries(n).map(([i,a])=>({key:i,value:String(a)}));return H(t.ctx,o,{labels:v,empty:"\u65E0\u73AF\u5883\u53D8\u91CF"}),0}async function gb(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 agent \u6807\u8BC6",`\u7528\u6CD5: coder flow agent env set <id> --custom-env '{"KEY":"val"}'`,3),A(t);let s=b(t.args,"--custom-env");s||y(t.ctx,"\u7F3A\u5C11 --custom-env\uFF08JSON \u5BF9\u8C61\uFF09",null,3);let r;try{r=JSON.parse(s)}catch{y(t.ctx,"--custom-env \u4E0D\u662F\u6709\u6548 JSON",null,3)}let n=await C(t,"PUT",`/api/agents/${encodeURIComponent(e)}/env`,{env:r}),o=E(t,n)||{};return t.ctx.emit(t.ctx.isJson?o:`agent ${e} \u7684\u73AF\u5883\u53D8\u91CF\u5DF2\u66F4\u65B0`),0}async function yb(t){let e=t.arg,s=b(t.args,"--set")||b(t.args,"--status");e||y(t.ctx,"\u7F3A\u5C11 project \u6807\u8BC6","\u7528\u6CD5: coder flow project status <id> --set <status>",3),s||y(t.ctx,"\u7F3A\u5C11 --set <status>",null,3),A(t);let r=await C(t,"PUT",`/api/projects/${encodeURIComponent(e)}`,{status:s}),n=E(t,r)||{};return W(t.ctx,[["id",n.id||""],["title",n.title||""],["status",n.status||""]],null,{labels:v}),0}async function _b(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 project \u6807\u8BC6","\u7528\u6CD5: coder flow project resource list <project-id>",3),A(t);let s=await C(t,"GET",`/api/projects/${encodeURIComponent(e)}/resources`),r=E(t,s)||{},n=Array.isArray(r)?r:r.resources||[];return H(t.ctx,n.map(o=>({id:o.id||"",resource_type:o.resource_type||"",label:o.label||""})),{labels:v,empty:"\u65E0\u8D44\u6E90"}),0}async function wb(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 project \u6807\u8BC6","\u7528\u6CD5: coder flow project resource add <project-id> --type <t> --url <u>",3),A(t);let s=b(t.args,"--type")||"github_repo",r=b(t.args,"--url"),n=b(t.args,"--local-path"),o=b(t.args,"--daemon-id"),i=b(t.args,"--label"),a;if(s==="github_repo"){r||y(t.ctx,"github_repo \u9700\u8981 --url",null,3),a={url:r};let d=b(t.args,"--default-branch-hint");d&&(a.default_branch_hint=d)}else s==="local_directory"?((!n||!o)&&y(t.ctx,"local_directory \u9700\u8981 --local-path \u548C --daemon-id",null,3),a={local_path:n,daemon_id:o}):y(t.ctx,`\u672A\u77E5 resource type '${s}'\uFF1B\u652F\u6301: github_repo, local_directory`,null,3);let c={resource_type:s,resource_ref:a};i&&(c.label=i);let l=await C(t,"POST",`/api/projects/${encodeURIComponent(e)}/resources`,c),u=E(t,l)||{};return W(t.ctx,[["id",u.id||""],["resource_type",u.resource_type||""]],null,{labels:v}),0}async function kb(t){let e=Te(t.args,{valueFlags:[]}),s=e[0],r=e[1];(!s||!r)&&y(t.ctx,"\u7F3A\u5C11\u53C2\u6570","\u7528\u6CD5: coder flow project resource remove <project-id> <resource-id>",3),A(t);let n=await C(t,"DELETE",`/api/projects/${encodeURIComponent(s)}/resources/${encodeURIComponent(r)}`);return E(t,n),t.ctx.emit(t.ctx.isJson?{removed:r}:`resource ${r} \u5DF2\u4ECE project ${s} \u79FB\u9664`),0}async function bb(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 squad \u6807\u8BC6","\u7528\u6CD5: coder flow squad member list <squad-id>",3),A(t);let s=await C(t,"GET",`/api/squads/${encodeURIComponent(e)}/members`),r=E(t,s)||{},n=Array.isArray(r)?r:r.members||[];return H(t.ctx,n.map(o=>({member_id:o.member_id||"",member_type:o.member_type||"",role:o.role||""})),{labels:v,empty:"\u65E0\u6210\u5458"}),0}async function xb(t){let e=t.arg,s=b(t.args,"--member-id"),r=b(t.args,"--type")||"agent",n=b(t.args,"--role")||"member";e||y(t.ctx,"\u7F3A\u5C11 squad \u6807\u8BC6","\u7528\u6CD5: coder flow squad member add <squad-id> --member-id <id> [--type agent|member] [--role <r>]",3),s||y(t.ctx,"\u7F3A\u5C11 --member-id",null,3),A(t);let o={member_type:r,member_id:s,role:n},i=await C(t,"POST",`/api/squads/${encodeURIComponent(e)}/members`,o),a=E(t,i)||{};return t.ctx.emit(t.ctx.isJson?a:`\u6210\u5458 ${s} \u5DF2\u52A0\u5165 squad ${e}`),0}async function Sb(t){let e=t.arg,s=b(t.args,"--member-id"),r=b(t.args,"--member-type")||"agent",n=b(t.args,"--role");e||y(t.ctx,"\u7F3A\u5C11 squad \u6807\u8BC6","\u7528\u6CD5: coder flow squad member set-role <squad-id> --member-id <id> --role <r>",3),s||y(t.ctx,"\u7F3A\u5C11 --member-id",null,3),n||y(t.ctx,"\u7F3A\u5C11 --role",null,3),A(t);let o={member_type:r,member_id:s,role:n},i=await C(t,"PATCH",`/api/squads/${encodeURIComponent(e)}/members/role`,o),a=E(t,i)||{};return t.ctx.emit(t.ctx.isJson?a:`\u6210\u5458 ${s} \u7684\u89D2\u8272\u5DF2\u66F4\u65B0\u4E3A ${n}`),0}async function Ib(t){let e=t.arg,s=b(t.args,"--member-id"),r=b(t.args,"--type")||"agent";e||y(t.ctx,"\u7F3A\u5C11 squad \u6807\u8BC6","\u7528\u6CD5: coder flow squad member remove <squad-id> --member-id <id>",3),s||y(t.ctx,"\u7F3A\u5C11 --member-id",null,3),A(t);let n={member_type:r,member_id:s},o=await C(t,"DELETE",`/api/squads/${encodeURIComponent(e)}/members`,n);return E(t,o),t.ctx.emit(t.ctx.isJson?{removed:s}:`\u6210\u5458 ${s} \u5DF2\u4ECE squad ${e} \u79FB\u9664`),0}async function Cb(t){let e=t.arg,s=t.args.find(i=>!i.startsWith("-")&&i!==e)||b(t.args,"--outcome");e||y(t.ctx,"\u7F3A\u5C11 issue \u6807\u8BC6","\u7528\u6CD5: coder flow squad activity <issue-id> <outcome> [--reason <r>]",3),(!s||!["action","no_action","failed"].includes(s))&&y(t.ctx,"outcome \u5FC5\u987B\u662F action / no_action / failed",null,3),A(t);let r=b(t.args,"--reason")||"",n=await C(t,"POST",`/api/issues/${encodeURIComponent(e)}/squad-evaluated`,{outcome:s,reason:r}),o=E(t,n)||{};return t.ctx.emit(t.ctx.isJson?o:`squad \u8BC4\u4F30\u5DF2\u8BB0\u5F55: ${s}\uFF08issue ${e}\uFF09`),0}async function Eb(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 autopilot \u6807\u8BC6","\u7528\u6CD5: coder flow autopilot trigger-add <id> --kind schedule --cron '0 9 * * *'",3),A(t);let s=b(t.args,"--kind")||"schedule";s!=="schedule"&&s!=="webhook"&&y(t.ctx,"--kind \u987B\u4E3A schedule \u6216 webhook",null,3);let r={kind:s};if(s==="schedule"){let a=b(t.args,"--cron");a||y(t.ctx,"schedule trigger \u9700\u8981 --cron",null,3),r.cron_expression=a;let c=b(t.args,"--timezone");c&&(r.timezone=c)}let n=b(t.args,"--label");n&&(r.label=n);let o=await C(t,"POST",`/api/autopilots/${encodeURIComponent(e)}/triggers`,r),i=E(t,o)||{};return W(t.ctx,[["id",i.id||""],["kind",i.kind||""],["label",i.label||""]],null,{labels:v}),0}async function Ab(t){let e=Te(t.args,{valueFlags:["--cron","--timezone","--label"]}),s=e[0],r=e[1];(!s||!r)&&y(t.ctx,"\u7F3A\u5C11\u53C2\u6570","\u7528\u6CD5: coder flow autopilot trigger-update <autopilot-id> <trigger-id> [--cron ...] [--enabled true|false]",3),A(t);let n={},o=b(t.args,"--cron"),i=b(t.args,"--timezone"),a=b(t.args,"--label"),c=b(t.args,"--enabled");o!==void 0&&(n.cron_expression=o),i!==void 0&&(n.timezone=i),a!==void 0&&(n.label=a),c!==void 0&&(n.enabled=c==="true"),Object.keys(n).length||y(t.ctx,"\u672A\u63D0\u4F9B\u4EFB\u4F55\u5B57\u6BB5","--cron / --timezone / --label / --enabled",3);let l=await C(t,"PATCH",`/api/autopilots/${encodeURIComponent(s)}/triggers/${encodeURIComponent(r)}`,n),u=E(t,l)||{};return W(t.ctx,[["id",u.id||""],["kind",u.kind||""]],null,{labels:v}),0}async function $b(t){let e=Te(t.args,{valueFlags:[]}),s=e[0],r=e[1];if((!s||!r)&&y(t.ctx,"\u7F3A\u5C11\u53C2\u6570","\u7528\u6CD5: coder flow autopilot trigger-delete <autopilot-id> <trigger-id>",3),A(t),!t.args.includes("--yes"))return t.ctx.emit(`\u5C06\u5220\u9664 trigger ${r}\uFF08\u9AD8\u5F71\u54CD\uFF09\u3002\u786E\u8BA4\u8BF7\u52A0 --yes`),10;let n=await C(t,"DELETE",`/api/autopilots/${encodeURIComponent(s)}/triggers/${encodeURIComponent(r)}`);return E(t,n),t.ctx.emit(t.ctx.isJson?{deleted:r}:`trigger ${r} \u5DF2\u5220\u9664`),0}async function Tb(t){let e=Te(t.args,{valueFlags:[]}),s=e[0],r=e[1];if((!s||!r)&&y(t.ctx,"\u7F3A\u5C11\u53C2\u6570","\u7528\u6CD5: coder flow autopilot trigger-rotate-url <autopilot-id> <trigger-id> [--yes]",3),A(t),!t.args.includes("--yes"))return t.ctx.emit("\u6B64\u64CD\u4F5C\u5C06\u7ACB\u5373\u4F7F\u5F53\u524D webhook URL \u5931\u6548\u3002\u786E\u8BA4\u8BF7\u52A0 --yes"),10;let n=await C(t,"POST",`/api/autopilots/${encodeURIComponent(s)}/triggers/${encodeURIComponent(r)}/rotate-webhook-token`,{}),o=E(t,n)||{};return W(t.ctx,[["id",o.id||""],["webhook_url",o.webhook_url||""]],null,{labels:v}),0}async function vb(t){A(t);let e=b(t.args,"--url");e||y(t.ctx,"\u7F3A\u5C11 --url","\u7528\u6CD5: coder flow skill import --url <url> [--on-conflict fail|overwrite|rename|skip]",3);let s=b(t.args,"--on-conflict")||"fail";["fail","overwrite","rename","skip"].includes(s)||y(t.ctx,"--on-conflict \u987B\u4E3A fail / overwrite / rename / skip",null,3);let r=await C(t,"POST","/api/skills/import",{url:e,on_conflict:s}),n=E(t,r)||{};return W(t.ctx,[["id",n.id||n.skill?.id||""],["name",n.name||n.skill?.name||""],["status",n.status||"created"]],null,{labels:v}),0}async function Ub(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11\u641C\u7D22\u8BCD","\u7528\u6CD5: coder flow skill search <query>",3),A(t);let s=await C(t,"GET",`/api/skills/search?q=${encodeURIComponent(e)}`),r=E(t,s)||{},n=Array.isArray(r)?r:r.results||[];return H(t.ctx,n.map(o=>({name:o.name||"",url:o.url||"",source:o.source||"",description:o.description||""})),{labels:v,empty:"\u65E0\u5339\u914D skill"}),0}async function Ob(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 skill \u6807\u8BC6","\u7528\u6CD5: coder flow skill files list <skill-id>",3),A(t);let s=await C(t,"GET",`/api/skills/${encodeURIComponent(e)}/files`),r=E(t,s)||{},n=Array.isArray(r)?r:r.files||[];return H(t.ctx,n.map(o=>({id:o.id||"",path:o.path||"",updated_at:o.updated_at||""})),{labels:v,empty:"\u65E0\u6587\u4EF6"}),0}async function Db(t){let e=t.arg,s=b(t.args,"--path"),r=b(t.args,"--content");e||y(t.ctx,"\u7F3A\u5C11 skill \u6807\u8BC6","\u7528\u6CD5: coder flow skill files upsert <skill-id> --path <p> --content <c>",3),s||y(t.ctx,"\u7F3A\u5C11 --path",null,3),r||y(t.ctx,"\u7F3A\u5C11 --content",null,3),A(t);let n=await C(t,"PUT",`/api/skills/${encodeURIComponent(e)}/files`,{path:s,content:r}),o=E(t,n)||{};return W(t.ctx,[["id",o.id||""],["path",o.path||s]],null,{labels:v}),0}async function Rb(t){let e=Te(t.args,{valueFlags:[]}),s=e[0],r=e[1];if((!s||!r)&&y(t.ctx,"\u7F3A\u5C11\u53C2\u6570","\u7528\u6CD5: coder flow skill files delete <skill-id> <file-id>",3),A(t),!t.args.includes("--yes"))return t.ctx.emit(`\u5C06\u5220\u9664 skill file ${r}\uFF08\u9AD8\u5F71\u54CD\uFF09\u3002\u786E\u8BA4\u8BF7\u52A0 --yes`),10;let n=await C(t,"DELETE",`/api/skills/${encodeURIComponent(s)}/files/${encodeURIComponent(r)}`);return E(t,n),t.ctx.emit(t.ctx.isJson?{deleted:r}:`skill file ${r} \u5DF2\u5220\u9664`),0}async function Qu(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 runtime \u6807\u8BC6","\u7528\u6CD5: coder flow runtime get <id>",3),A(t);let s=new URLSearchParams;s.set("workspace_id",t.http.workspaceId);let r=await C(t,"GET",`/api/runtimes?${s.toString()}`),n=E(t,r)||{},i=(Array.isArray(n)?n:n.runtimes||[]).find(c=>c.id===e||c.name===e);i||y(t.ctx,`runtime \u4E0D\u5B58\u5728: ${e}`,null,4);let a=["id","name","status","provider","device_info","runtime_mode","visibility","last_seen_at","created_at"];return W(t.ctx,Ps(i,a),null,{labels:v}),0}async function Lb(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 runtime \u6807\u8BC6","\u7528\u6CD5: coder flow runtime usage <id> [--days <n>]",3),A(t);let s=b(t.args,"--days")||"90",r=await C(t,"GET",`/api/runtimes/${encodeURIComponent(e)}/usage?days=${s}`),n=E(t,r)||{},o=Array.isArray(n)?n:n.usage||[];return H(t.ctx,o.map(i=>({date:i.date||"",provider:i.provider||"",model:i.model||"",input_tokens:String(i.input_tokens??""),output_tokens:String(i.output_tokens??"")})),{labels:v,empty:"\u65E0\u7528\u91CF\u6570\u636E"}),0}async function Pb(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 runtime \u6807\u8BC6","\u7528\u6CD5: coder flow runtime activity <id>",3),A(t);let s=await C(t,"GET",`/api/runtimes/${encodeURIComponent(e)}/activity`),r=E(t,s)||{},n=Array.isArray(r)?r:r.activity||[];return H(t.ctx,n.map(o=>({hour:o.hour||"",count:String(o.count??"")})),{labels:v,empty:"\u65E0\u6D3B\u52A8\u6570\u636E"}),0}async function Nb(t){let e=t.arg,s=b(t.args,"--target-version");e||y(t.ctx,"\u7F3A\u5C11 runtime \u6807\u8BC6","\u7528\u6CD5: coder flow runtime initiate-update <id> --target-version <v>",3),s||y(t.ctx,"\u7F3A\u5C11 --target-version",null,3),A(t);let r=await C(t,"POST",`/api/runtimes/${encodeURIComponent(e)}/update`,{target_version:s}),n=E(t,r)||{};return W(t.ctx,[["id",n.id||""],["status",n.status||""]],null,{labels:v}),0}async function qb(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 runtime \u6807\u8BC6","\u7528\u6CD5: coder flow runtime models <id>",3),A(t);let s=await C(t,"POST",`/api/runtimes/${encodeURIComponent(e)}/models`,{}),n=(E(t,s)||{}).id;n||y(t.ctx,"\u670D\u52A1\u7AEF\u672A\u8FD4\u56DE request id",null,1);let o=9e4,i=2e3,a=Date.now()+o,c;for(;Date.now()<a;){await new Promise(m=>setTimeout(m,i));let u=await C(t,"GET",`/api/runtimes/${encodeURIComponent(e)}/models/${encodeURIComponent(n)}`),d=E(t,u)||{},p=d.status;if(p==="completed"){c=d;break}(p==="failed"||p==="timeout")&&y(t.ctx,`\u83B7\u53D6\u6A21\u578B\u5217\u8868\u5931\u8D25: ${d.error||p}`,null,1)}if(c||y(t.ctx,"\u83B7\u53D6\u6A21\u578B\u5217\u8868\u8D85\u65F6\uFF08runtime \u672A\u54CD\u5E94\uFF09",null,1),!c.supported)return t.ctx.emit(t.ctx.isJson?{supported:!1,models:[]}:"\u8BE5 runtime \u4E0D\u652F\u6301\u6A21\u578B\u9009\u62E9"),0;let l=c.models||[];return t.ctx.isJson?(t.ctx.emit({supported:!0,models:l}),0):(H(t.ctx,l.map(u=>({id:u.id||"",label:u.label||"",provider:u.provider||"",default:u.default?"\u2713":"",thinking:u.thinking?(u.thinking.supported_levels||[]).join(","):""})),{labels:{id:"Model ID",label:"\u540D\u79F0",provider:"Provider",default:"\u9ED8\u8BA4",thinking:"Thinking"},empty:"\u65E0\u53EF\u7528\u6A21\u578B"}),0)}async function jb(t){A(t);let e=await C(t,"GET","/api/workspaces"),s=E(t,e)||{},r=Array.isArray(s)?s:s.workspaces||[];return H(t.ctx,r.map(n=>({id:n.id||"",name:n.name||"",slug:n.slug||""})),{labels:v,empty:"\u65E0 workspace"}),0}async function ed(t){A(t);let e=t.arg||t.http.workspaceId,s=await C(t,"GET",`/api/workspaces/${encodeURIComponent(e)}`),r=E(t,s)||{};return W(t.ctx,[["id",r.id||""],["name",r.name||""],["slug",r.slug||""],["description",r.description||""]],null,{labels:v}),0}async function Mb(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 workspace id/slug","\u7528\u6CD5: coder flow workspace switch <id|slug>",3),A(t);let s=await C(t,"GET",`/api/workspaces/${encodeURIComponent(e)}`),r=E(t,s)||{};return t.ctx.setTeam&&t.ctx.setTeam(r.id,r.name||""),t.ctx.emit(t.ctx.isJson?r:`\u5DF2\u5207\u6362\u5230 workspace: ${r.name||r.id}`),0}async function Gb(t){let e=t.arg||t.http.workspaceId;A(t);let s={},r=b(t.args,"--name"),n=b(t.args,"--description"),o=b(t.args,"--context"),i=b(t.args,"--issue-prefix");r!==void 0&&(s.name=r),n!==void 0&&(s.description=n),o!==void 0&&(s.context=o),i!==void 0&&(s.issue_prefix=i),Object.keys(s).length||y(t.ctx,"\u672A\u63D0\u4F9B\u4EFB\u4F55\u5B57\u6BB5","--name / --description / --context / --issue-prefix",3);let a=await C(t,"PATCH",`/api/workspaces/${encodeURIComponent(e)}`,s),c=E(t,a)||{};return W(t.ctx,[["id",c.id||""],["name",c.name||""],["slug",c.slug||""]],null,{labels:v}),0}async function Fb(t){let e=t.arg||t.http.workspaceId;A(t);let s=await C(t,"GET",`/api/workspaces/${encodeURIComponent(e)}/members`),r=E(t,s)||{},n=Array.isArray(r)?r:r.members||[];return H(t.ctx,n.map(o=>({id:o.id||"",name:o.name||o.username||"",role:o.role||""})),{labels:v,empty:"\u65E0\u6210\u5458"}),0}async function Bb(t){A(t);let e=await C(t,"GET",`/api/workspaces/${t.http.workspaceId}/repos`),s=E(t,e)||{},r=Array.isArray(s)?s:s.repos||s.repositories||[];return H(t.ctx,r.map(n=>({url:n.url||"",description:n.description||""})),{labels:v,empty:"\u65E0 repo"}),0}async function Zb(t){A(t);let e=Te(t.args,{valueFlags:["--description"]}),s=b(t.args,"--description");e.length||y(t.ctx,"\u7F3A\u5C11 repo URL","\u7528\u6CD5: coder flow repo add <url> [<url>...]",3);let r=e.map(i=>s&&e.length===1?{url:i,description:s}:{url:i}),n=await C(t,"POST",`/api/workspaces/${t.http.workspaceId}/repos`,{repos:r}),o=E(t,n)||{};return t.ctx.emit(t.ctx.isJson?o:`${e.length} \u4E2A repo \u5DF2\u6DFB\u52A0`),0}async function td(t){A(t);let e=Te(t.args,{valueFlags:[]});e.length||y(t.ctx,"\u7F3A\u5C11 repo URL","\u7528\u6CD5: coder flow repo remove <url> [<url>...]",3);let s=await C(t,"DELETE",`/api/workspaces/${t.http.workspaceId}/repos`,{urls:e}),r=E(t,s)||{};return t.ctx.emit(t.ctx.isJson?r:`${e.length} \u4E2A repo \u5DF2\u79FB\u9664`),0}async function Wb(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 repo URL","\u7528\u6CD5: coder flow repo checkout <url> [--ref <branch>]",3),A(t);let s={url:e},r=b(t.args,"--ref");r&&(s.ref=r);let n=await C(t,"POST",`/api/workspaces/${t.http.workspaceId}/repos/checkout`,s),o=E(t,n)||{};return W(t.ctx,[["path",o.path||""],["url",e]],null,{labels:v}),0}async function Vb(t){A(t);let e=await C(t,"GET","/api/me"),s=E(t,e)||{};return W(t.ctx,[["id",s.id||""],["name",s.name||s.display_name||""],["email",s.email||""],["description",s.description||s.profile_description||""]],null,{labels:v}),0}async function Kb(t){A(t);let e={},s=b(t.args,"--description");t.args.includes("--clear")?e.profile_description="":s!==void 0?e.profile_description=s:y(t.ctx,"\u672A\u63D0\u4F9B\u4EFB\u4F55\u5B57\u6BB5","--description <text> \u6216 --clear",3);let n=await C(t,"PATCH","/api/me",e),o=E(t,n)||{};return W(t.ctx,[["id",o.id||""],["description",o.description||o.profile_description||""]],null,{labels:v}),0}async function zb(t){let e=Te(t.args,{valueFlags:["--url","--ref","--label","--position","--default-branch-hint","--local-path","--daemon-id","--ref-label"]}),s=e[0],r=e[1];(!s||!r)&&y(t.ctx,"\u7F3A\u5C11\u53C2\u6570","\u7528\u6CD5: coder flow project resource update <project-id> <resource-id> [--url <u>] [--label <l>]",3),A(t);let n={},o=b(t.args,"--url"),i=b(t.args,"--ref"),a=b(t.args,"--label"),c=b(t.args,"--position");if(i)try{n.resource_ref=JSON.parse(i)}catch{y(t.ctx,"--ref \u4E0D\u662F\u6709\u6548 JSON",null,3)}else if(o){n.resource_ref={url:o};let d=b(t.args,"--default-branch-hint");d&&(n.resource_ref.default_branch_hint=d)}a!==void 0&&(n.label=a),c!==void 0&&(n.position=Number(c)),Object.keys(n).length||y(t.ctx,"\u672A\u63D0\u4F9B\u4EFB\u4F55\u5B57\u6BB5","--url / --ref / --label / --position",3);let l=await C(t,"PUT",`/api/projects/${encodeURIComponent(s)}/resources/${encodeURIComponent(r)}`,n),u=E(t,l)||{};return W(t.ctx,[["id",u.id||""],["resource_type",u.resource_type||""],["label",u.label||""]],null,{labels:v}),0}async function id(t){let{spawn:e}=require("child_process"),{checkHealth:s}=Es(),{daemonLogPath:r,writePid:n}=es(),{loadConfig:o}=Zn(),i=require("fs"),a=require("path"),c=t.args.includes("--foreground"),l=r(),u=10*1024*1024,d=5;function p(){try{if(!i.existsSync(l)||i.statSync(l).size<u)return;let B=`${l}.${d}`;i.existsSync(B)&&i.unlinkSync(B);for(let X=d-1;X>=1;X--){let se=`${l}.${X}`;i.existsSync(se)&&i.renameSync(se,`${l}.${X+1}`)}i.renameSync(l,`${l}.1`)}catch{}}function m(B=new Date){let X=(at,ue=2)=>String(at).padStart(ue,"0"),se=-B.getTimezoneOffset(),K=se>=0?"+":"-",ge=X(Math.floor(Math.abs(se)/60)),Ge=X(Math.abs(se)%60);return`${B.getFullYear()}-${X(B.getMonth()+1)}-${X(B.getDate())} ${X(B.getHours())}:${X(B.getMinutes())}:${X(B.getSeconds())}.${X(B.getMilliseconds(),3)} ${K}${ge}:${Ge}`}if(c){let{DaemonProcess:B}=Ju(),X=Xb(t),se=o(X);se.token=t.ctx.getApiKey?t.ctx.getApiKey():null,se.coderBaseUrl=t.ctx.baseUrl||se.coderBaseUrl,i.mkdirSync(a.dirname(l),{recursive:!0}),p();let K=at=>{p();let ue=`[${m()}] ${at}
508
+ `+s)}function Nt(t,e,s,r,n,o){if(t.listenerCount("wsClientError")){let i=new Error(n);Error.captureStackTrace(i,Nt),t.emit("wsClientError",i,s,e)}else Ls(s,r,n,o)}});var Mu=x((_S,ju)=>{"use strict";var kk=Tu(),bk=Er(),xk=rs(),Sk=_o(),Ik=bo(),Ck=Ao(),De=vr(),qu=Nu();De.createWebSocketStream=kk;De.extension=bk;De.PerMessageDeflate=xk;De.Receiver=Sk;De.Sender=Ik;De.Server=qu;De.subprotocol=Ck;De.WebSocket=De;De.WebSocketServer=qu;ju.exports=De});var Bu=x((bS,Fu)=>{var wS=require("https"),kS=require("http"),To=class{constructor(e,s,r,n,o,i,a){this.cfg=e,this.token=s,this.cliVersion=r||"dev",this.onWakeup=n,this.onHeartbeatAck=o,this.onDisconnect=i,this.log=a,this._running=!1,this._ws=null,this._backoff=1e3,this._abortSignal=null,this._getRuntimeIds=null}start(e,s){this._running=!0,this._abortSignal=e,this._getRuntimeIds=s,this._loop()}stop(){if(this._running=!1,this._ws){try{this._ws.close()}catch{}this._ws=null}}async _loop(){for(;this._running&&(!this._abortSignal||!this._abortSignal.aborted);){let e=this._getRuntimeIds?this._getRuntimeIds():[];if(e.length===0){await Gu(2e3);continue}try{await this._connect(e),this._backoff=1e3}catch(s){if(!this._running)return;this.log(`[wakeup] ws unavailable (${s.message}); polling fallback active, retry in ${this._backoff}ms`)}if(!this._running)return;await Gu(Ek(this._backoff)),this._backoff<3e4&&(this._backoff=Math.min(this._backoff*2,3e4))}}_buildWsUrl(e){let r=(this.cfg.serverUrl||"https://flow.makecoder.com").replace(/\/+$/,"").replace(/^https?:\/\//,o=>o==="https://"?"wss://":"ws://"),n=[...e].sort().join(",");return`${r}/api/daemon/ws?runtime_ids=${encodeURIComponent(n)}`}async _connect(e){let s=this._buildWsUrl(e),r;try{r=Mu()}catch{throw new Error("ws module not available \u2014 install with: npm install ws")}return new Promise((n,o)=>{let i={Authorization:`Bearer ${this.token}`,"X-Client-Platform":"daemon","X-Client-Version":this.cliVersion},a=new r(s,{headers:i,handshakeTimeout:1e4});this._ws=a;let c=()=>{try{a.close()}catch{}};this._abortSignal&&this._abortSignal.addEventListener("abort",c,{once:!0});let l=null,u=()=>{let p=this._getRuntimeIds?this._getRuntimeIds():[];for(let m of p)try{a.send(JSON.stringify({type:"daemon:heartbeat",payload:{runtime_id:m,supports_batch_import:!0}}))}catch{}},d=()=>{l&&(clearInterval(l),l=null)};a.on("open",()=>{this.log(`[wakeup] websocket connected (${e.length} runtimes)`),this._backoff=1e3,u();let p=this.cfg.heartbeatInterval||15e3;l=setInterval(u,p),this.onWakeup("")}),a.on("message",p=>{try{let m=JSON.parse(p.toString());this._handleMessage(m)}catch(m){this.log(`[wakeup] invalid message: ${m.message}`)}}),a.on("error",p=>{d(),this._abortSignal&&this._abortSignal.removeEventListener("abort",c),this._ws=null,this.onDisconnect&&this.onDisconnect(),o(p)}),a.on("close",(p,m)=>{d(),this._abortSignal&&this._abortSignal.removeEventListener("abort",c),this._ws=null,this.onDisconnect&&this.onDisconnect(),this._running&&this.log(`[wakeup] websocket closed (${p})`),n()})})}_handleMessage(e){let s=e.type;if(s==="daemon:task_available"){let r=e.payload||{},n=r.runtime_id||"",o=r.task_id||"";this.log(`[wakeup] task_available runtimeId=${n} taskId=${o}`),this.onWakeup(n)}else s==="daemon:heartbeat_ack"&&this.onHeartbeatAck&&this.onHeartbeatAck(e.payload||{})}};function Gu(t){return new Promise(e=>setTimeout(e,t))}function Ek(t){return Math.max(500,t+(Math.random()-.5)*t*.2)}Fu.exports={TaskWakeupLoop:To}});var Ju=x((xS,zu)=>{var vo=require("os"),{HealthServer:Ak}=Es(),{DaemonClient:$k}=Xc(),{Poller:Zu}=so(),{Heartbeat:Tk}=Rl(),{TaskWakeupLoop:vk}=Bu(),{loadOrCreateDaemonId:Uk}=es(),{runGc:Wu}=Xn(),{getActiveWorkdirs:Vu}=eo(),{handleModelList:Ok}=ro(),{handleLocalSkillList:Dk,handleLocalSkillImport:Rk}=oo(),Ku=4320*60*1e3,Uo=class{constructor(e,s){this.cfg=e,this.log=s||console.error,this._runtimeIds=[],this._runtimeProviders={},this._workspaceForRuntime={},this._pollers={},this._heartbeat=null,this._wakeupLoop=null,this._health=null,this._client=null,this._daemonId=null,this._wsLastAck={}}_wsHeartbeatFreshness(){return 2*(this.cfg.heartbeatInterval||15e3)}_recordWsAck(e){e&&(this._wsLastAck[e]=Date.now())}_wsRecentlyAcked(e){let s=this._wsLastAck[e];return s?Date.now()-s<this._wsHeartbeatFreshness():!1}_clearWsAcks(){this._wsLastAck={}}async run(e){let s=this.cfg,r=e&&typeof e.abort=="function"?e:null,n=r?r.signal:e;this._health=new Ak(s.healthPort||19514),this._health.setShutdown(()=>{r?r.abort():process.emit("SIGTERM")}),this._health.start(),this._daemonId=Uk(s.daemonId),this._health.daemonId=this._daemonId,this._client=new $k(s.serverUrl,s.token,s.cliVersion||"dev"),this.log(`[daemon] starting id=${this._daemonId} server=${s.serverUrl} version=${s.cliVersion||"dev"}`),this.log(`[daemon] config: pollInterval=${s.pollInterval}ms heartbeatInterval=${s.heartbeatInterval}ms maxConcurrentTasks=${s.maxConcurrentTasks}`);try{let i=await this._client.renewToken();i?.renewed&&this.log(`[daemon] token renewed expires_at=${i.expires_at}`)}catch(i){this.log(`[daemon] token renewal preflight skipped: ${i.message}`)}let o=[];try{this.log(`[daemon] fetching workspaces from ${s.serverUrl}/api/workspaces`),o=await this._client.getWorkspaces(),this.log(`[daemon] found ${o.length} workspace(s): ${o.map(i=>i.id||i.name).join(", ")||"(none)"}`)}catch(i){this.log(`[daemon] getWorkspaces error: ${i.message}`)}this._health.workspaces=o.map(i=>i.id||i.name||"");for(let i of o)await this._registerWorkspace(i);this._runtimeIds.length===0&&this.log("[daemon] WARNING: no runtimes registered \u2014 tasks cannot be claimed"),this._health.agents=this._runtimeIds.map(i=>`claude:${i}`),this._health.status="running",this._startGcLoop(s,n);for(let i of this._runtimeIds){let a=new Zu(s,this._client,i,this.log);this._pollers[i]=a,a.start(n)}this.log(`[daemon] started ${Object.keys(this._pollers).length} poller(s)`),this._wakeupLoop=new vk(s,s.token,s.cliVersion||"dev",i=>{if(i){let a=this._pollers[i];if(a)this.log(`[daemon] wakeup signal for runtime=${i.slice(0,8)}`),a.wakeup();else{this.log(`[daemon] wakeup signal for unknown runtime=${i.slice(0,8)}, fanning out`);for(let c of Object.values(this._pollers))c.wakeup()}}else for(let a of Object.values(this._pollers))a.wakeup()},i=>{if(i&&i.runtime_gone&&i.runtime_id){this.log(`[daemon] heartbeat_ack: runtime ${i.runtime_id} gone`),this._handleRuntimeGone(i.runtime_id);return}i&&i.runtime_id&&this._recordWsAck(i.runtime_id),i&&this._handleHeartbeatActions(i.runtime_id,i)},()=>this._clearWsAcks(),this.log),this._wakeupLoop.start(n,()=>this._runtimeIds),this._heartbeat=new Tk(s,this._client,()=>this._runtimeIds,this.log,i=>this._handleRuntimeGone(i),i=>this._runtimeProviders[i]||"claude",i=>this._wsRecentlyAcked(i)),this._heartbeat.start(n),this._startWorkspaceSyncLoop(n),this._startTokenRenewalLoop(n),this.log("[daemon] running \u2014 waiting for tasks"),await Lk(n),this.log("[daemon] shutting down"),this._heartbeat.stop(),this._wakeupLoop.stop();for(let i of Object.values(this._pollers))i.stop();if(this._runtimeIds.length)try{await this._client.deregister(this._runtimeIds),this.log(`[daemon] deregistered ${this._runtimeIds.length} runtime(s)`)}catch(i){this.log(`[daemon] deregister error: ${i.message}`)}this._health.close(),this.log("[daemon] stopped")}async _registerWorkspace(e){try{this.log(`[daemon] registering runtime for workspace=${e.id||e.name} deviceName=${this.cfg.deviceName||vo.hostname()}`);let r=((await this._client.register({workspaceId:e.id,daemonId:this._daemonId,deviceName:this.cfg.deviceName||vo.hostname(),cliVersion:this.cfg.cliVersion||"dev",runtimes:[{name:this.cfg.runtimeName||`Claude (${vo.hostname()})`,type:"claude",version:this.cfg.cliVersion||"dev",status:"online"}]}))?.runtimes||[]).map(n=>n.id).filter(Boolean);for(let n of r)this._runtimeProviders[n]="claude",this._workspaceForRuntime[n]=e.id||"";this._runtimeIds.push(...r),this.log(`[daemon] registered workspace=${e.id} runtimeIds=[${r.join(", ")}]`);for(let n of r)try{await this._client.recoverOrphans(n),this.log(`[daemon] recover-orphans OK runtime=${n.slice(0,8)}`)}catch(o){this.log(`[daemon] recover-orphans failed runtime=${n.slice(0,8)}: ${o.message}`)}}catch(s){this.log(`[daemon] register error workspace=${e.id}: ${s.message}`)}}async _handleRuntimeGone(e){let s=this._runtimeIds.indexOf(e);s!==-1&&this._runtimeIds.splice(s,1);let r=this._runtimeProviders[e]||"claude";delete this._runtimeProviders[e];let n=this._pollers[e];n&&(n.stop(),delete this._pollers[e]),this.log(`[daemon] runtime ${e.slice(0,8)} gone (provider=${r}), re-registering`);try{let o=await this._client.getWorkspaces();for(let i of o){let a=this._runtimeIds.length;await this._registerWorkspace(i);let c=this._runtimeIds.slice(a);for(let l of c){let u=new Zu(this.cfg,this._client,l,this.log);this._pollers[l]=u,u.start()}}}catch(o){this.log(`[daemon] re-register after runtime_gone failed: ${o.message}`)}}_startWorkspaceSyncLoop(e){let r=async()=>{if(!(e&&e.aborted)){try{let n=await this._client.getWorkspaces();for(let o of n){let i=o.id||o.name||"";if(!this._runtimeIds.some(c=>this._workspaceForRuntime&&this._workspaceForRuntime[c]===i)){let c=this._runtimeIds.length;await this._registerWorkspace(o);let l=this._runtimeIds.slice(c);for(let u of l)if(!this._pollers[u]){let{Poller:d}=so(),p=new d(this.cfg,this._client,u,this.log);this._pollers[u]=p,p.start(e),this.log(`[daemon] workspace-sync: started poller for new runtime=${u.slice(0,8)}`)}}}}catch(n){this.log(`[daemon] workspace-sync error: ${n.message}`)}(!e||!e.aborted)&&setTimeout(r,3e4)}};setTimeout(r,3e4)}_startGcLoop(e,s){if(!e.gcEnabled)return;let r=e.gcInterval||36e5,n=this._client,o=setTimeout(()=>{if(s&&s.aborted)return;Wu(e,Vu(),n).catch(()=>{});let i=setInterval(()=>{if(s&&s.aborted){clearInterval(i);return}Wu(e,Vu(),n).catch(()=>{})},r);s&&s.addEventListener("abort",()=>clearInterval(i),{once:!0})},3e4);s&&s.addEventListener("abort",()=>clearTimeout(o),{once:!0})}_startTokenRenewalLoop(e){let s=async()=>{if(!(e&&e.aborted)){try{let r=await this._client.renewToken();r?.renewed&&this.log(`[daemon] token renewed expires_at=${r.expires_at}`)}catch(r){this.log(`[daemon] token renewal failed: ${r.message}`)}(!e||!e.aborted)&&setTimeout(s,Ku)}};setTimeout(s,Ku)}_handleHeartbeatActions(e,s){if(!s||!e)return;if(s.pending_model_list){let n=this._runtimeProviders[e]||"claude";this.log(`[daemon] heartbeat_ack: pending_model_list runtime=${e.slice(0,8)} requestId=${s.pending_model_list.id}`),Ok(this._client,e,s.pending_model_list.id,n,this.log,this.cfg.coderBaseUrl).catch(o=>this.log(`[daemon] model-list error: ${o.message}`))}if(s.pending_local_skills){let n=this._runtimeProviders[e]||"claude";this.log(`[daemon] heartbeat_ack: pending_local_skills runtime=${e.slice(0,8)} requestId=${s.pending_local_skills.id}`),Dk(this._client,e,s.pending_local_skills.id,n,this.log).catch(o=>this.log(`[daemon] local-skill-list error: ${o.message}`))}let r=s.pending_local_skill_imports||(s.pending_local_skill_import?[s.pending_local_skill_import]:[]);if(r.length>0){let n=this._runtimeProviders[e]||"claude";for(let o of r)this.log(`[daemon] heartbeat_ack: pending_local_skill_import runtime=${e.slice(0,8)} requestId=${o.id} key=${o.skill_key}`),Rk(this._client,e,o.id,o.skill_key,n,this.log).catch(i=>this.log(`[daemon] local-skill-import error: ${i.message}`))}}};function Lk(t){return new Promise(e=>{if(!t){process.once("SIGINT",e),process.once("SIGTERM",e);return}if(t.aborted)return e();t.addEventListener("abort",e,{once:!0})})}zu.exports={DaemonProcess:Uo}});var ud=x((SS,ld)=>{var{emitTable:H,emitDetails:W}=Fc(),{abort:y,send:C,ensureOk:E,flag:b,positionals:Te,requireWorkspaceId:A}=Wc();function nd(t,{full:e=!1,actors:s=null}={}){let r=t.assignee||(t.assignee_id?`${t.assignee_type||""}:${t.assignee_id}`:""),n=r;if(s&&r){let o=r.indexOf(":"),i=o!==-1?r.slice(o+1):r,a=s.get(i);a&&(n=a.name)}return{key:t.key||t.identifier||"",...e?{id:t.id||""}:{},title:t.title||"",status:t.status||"",priority:t.priority||"",assignee:n}}async function od(t,e){let s=await C(t,"GET","/api/agents"),r=E(t,s)||{},n=Array.isArray(r)?r:r.agents||[],o=String(e).toLowerCase(),i=n.find(a=>a.id===e||(a.slug||"").toLowerCase()===o||(a.name||"").toLowerCase()===o);return i||y(t.ctx,`agent '${e}' \u4E0D\u5B58\u5728`,"\u8FD0\u884C coder flow agent list \u67E5\u770B\u53EF\u7528 agent",4),i.id}var v={id:"ID",key:"Key",name:"\u540D\u79F0",slug:"Slug",title:"\u6807\u9898",status:"\u72B6\u6001",priority:"\u4F18\u5148\u7EA7",assignee:"\u8D1F\u8D23\u4EBA",description:"\u63CF\u8FF0",current:"\u5F53\u524D",start_date:"\u5F00\u59CB\u65E5\u671F",due_date:"\u622A\u6B62\u65E5\u671F",created_at:"\u521B\u5EFA\u65F6\u95F4",updated_at:"\u66F4\u65B0\u65F6\u95F4",author:"\u4F5C\u8005",content:"\u5185\u5BB9",agent:"Agent",deleted:"\u5DF2\u5220\u9664"},xe={status:{backlog:"\u5F85\u89C4\u5212",todo:"\u5F85\u529E",in_progress:"\u8FDB\u884C\u4E2D",in_review:"\u8BC4\u5BA1\u4E2D",done:"\u5DF2\u5B8C\u6210",cancelled:"\u5DF2\u53D6\u6D88",open:"\u5F00\u653E",closed:"\u5DF2\u5173\u95ED",active:"\u6D3B\u8DC3",inactive:"\u505C\u7528",archived:"\u5DF2\u5F52\u6863",planned:"\u89C4\u5212\u4E2D",started:"\u5DF2\u542F\u52A8",on_hold:"\u6401\u7F6E",idle:"\u7A7A\u95F2",busy:"\u5FD9\u788C",running:"\u8FD0\u884C\u4E2D",queued:"\u6392\u961F\u4E2D",pending:"\u7B49\u5F85\u4E2D",paused:"\u5DF2\u6682\u505C",stopped:"\u5DF2\u505C\u6B62",completed:"\u5DF2\u5B8C\u6210",failed:"\u5931\u8D25",success:"\u6210\u529F",error:"\u9519\u8BEF"},priority:{none:"\u65E0",low:"\u4F4E",medium:"\u4E2D",high:"\u9AD8",urgent:"\u7D27\u6025"}};async function Do(t,e,s){if(t.ctx.isJson||!s)return null;let r=await t.http.getWorkspaceSlug();return r?`${t.http.baseUrl}/${r}/${e}/${s}`:null}async function Ro(t,e,s){if(t.ctx.isJson)return null;let r=await t.http.getWorkspaceSlug();return r?s.map(n=>n&&n.id?`${t.http.baseUrl}/${r}/${e}/${n.id}`:null):null}async function Pk(t){A(t);let e=new URLSearchParams;e.set("workspace_id",t.http.workspaceId);let s=b(t.args,"--status"),r=b(t.args,"--priority"),n=b(t.args,"--limit"),o=b(t.args,"--offset");s&&e.set("status",s),r&&e.set("priority",r),n&&e.set("limit",n),o&&e.set("offset",o);let i=t.args.includes("--full-id"),[a,c]=await Promise.all([C(t,"GET",`/api/issues?${e.toString()}`),t.ctx.isJson?Promise.resolve(null):t.http.getActorLookup()]),l=E(t,a)||{},u=Array.isArray(l)?l:l.issues||[],d=await Ro(t,"issues",u),p=c?u.map(m=>{let g=m.assignee||(m.assignee_id?`${m.assignee_type||""}:${m.assignee_id}`:"");if(!g)return null;let _=g.indexOf(":"),w=_!==-1?g.slice(_+1):g;return c.get(w)?.url||null}):null;return H(t.ctx,u.map(m=>nd(m,{full:i,actors:c})),{labels:v,values:xe,linkCol:"key",rowLinks:d,colLinks:p?{col:"assignee",links:p}:void 0,empty:"\u65E0 issue"}),0}async function Hu(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 issue \u6807\u8BC6","\u7528\u6CD5: coder flow issue get <id|KEY>",3),A(t);let[s,r]=await Promise.all([C(t,"GET",`/api/issues/${encodeURIComponent(e)}`),t.ctx.isJson?Promise.resolve(null):t.http.getActorLookup()]),n=E(t,s)||{},o=await Do(t,"issues",n.id),i=n.assignee||(n.assignee_id?`${n.assignee_type||""}:${n.assignee_id}`:""),a=i,c=null;if(r&&i){let l=i.indexOf(":"),u=l!==-1?i.slice(l+1):i,d=r.get(u);d&&(a=d.name,c=d.url)}return W(t.ctx,[["key",n.key||n.identifier||""],["id",n.id||""],["title",n.title||""],["status",n.status||""],["priority",n.priority||""],["assignee",a],["start_date",n.start_date||""],["due_date",n.due_date||""],["description",n.description||""]],null,{labels:v,values:xe,link:o?{key:"key",url:o}:null,fieldLinks:c?{assignee:c}:null}),0}async function Nk(t){let e=A(t),s=b(t.args,"--title");s||y(t.ctx,"\u7F3A\u5C11 --title","\u7528\u6CD5: coder flow issue create --title <t>",3);let r={workspace_id:e,title:s},n=b(t.args,"--description"),o=b(t.args,"--priority"),i=b(t.args,"--status"),a=b(t.args,"--project"),c=b(t.args,"--parent"),l=b(t.args,"--agent")||b(t.args,"--assignee"),u=b(t.args,"--assignee-id");n!==void 0&&(r.description=n),o!==void 0&&(r.priority=o),i!==void 0&&(r.status=i),a!==void 0&&(r.project_id=a),c!==void 0&&(r.parent_id=c),u!==void 0?(r.assignee_type="agent",r.assignee_id=u):l!==void 0&&(r.assignee_type="agent",r.assignee_id=await od(t,l));let d=process.env.MULTICA_QUICK_CREATE_TASK_ID;d&&(r.origin_type="quick_create",r.origin_id=d);let p=await C(t,"POST","/api/issues",r),m=E(t,p)||{};return W(t.ctx,[["key",m.key||m.identifier||""],["id",m.id||""],["title",m.title||s],["status",m.status||""]],null,{labels:v,values:xe}),0}async function Lo(t,e,s,r){let n=await C(t,"PUT",`/api/issues/${encodeURIComponent(e)}`,s),o=E(t,n)||{},i=await Do(t,"issues",o.id);return W(t.ctx,r(o),null,{labels:v,values:xe,link:i?{key:"key",url:i}:null}),0}async function qk(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 issue \u6807\u8BC6","\u7528\u6CD5: coder flow issue update <id|KEY> ...",3),A(t);let s={},r=b(t.args,"--title"),n=b(t.args,"--description"),o=b(t.args,"--priority"),i=b(t.args,"--status");return r!==void 0&&(s.title=r),n!==void 0&&(s.description=n),o!==void 0&&(s.priority=o),i!==void 0&&(s.status=i),Object.keys(s).length||y(t.ctx,"\u672A\u63D0\u4F9B\u4EFB\u4F55\u66F4\u65B0\u5B57\u6BB5","\u81F3\u5C11\u7ED9\u4E00\u4E2A --title/--description/--priority/--status",3),Lo(t,e,s,a=>[["key",a.key||a.identifier||e],["title",a.title||""],["status",a.status||""],["priority",a.priority||""]])}async function jk(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 issue \u6807\u8BC6","\u7528\u6CD5: coder flow issue status <id|KEY> --set <status>",3);let s=b(t.args,"--set")||b(t.args,"--status");return s||y(t.ctx,"\u7F3A\u5C11 --set <status>","\u7528\u6CD5: coder flow issue status <id|KEY> --set <status>",3),A(t),Lo(t,e,{status:s},r=>[["key",r.key||r.identifier||e],["status",r.status||s]])}async function Mk(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 issue \u6807\u8BC6","\u7528\u6CD5: coder flow issue assign <id|KEY> --agent <slug>",3),A(t);let s=b(t.args,"--agent")||b(t.args,"--to"),r=t.args.includes("--unassign"),n;return r?n={assignee_type:null,assignee_id:null}:(s||y(t.ctx,"\u7F3A\u5C11 --agent <slug>","\u6216\u7528 --unassign \u53D6\u6D88\u6307\u6D3E",3),n={assignee_type:"agent",assignee_id:await od(t,s)}),Lo(t,e,n,o=>[["key",o.key||o.identifier||e],["status",o.status||""],["assignee",o.assignee_id?`${o.assignee_type||""}:${o.assignee_id}`:""]])}async function Gk(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11\u641C\u7D22\u5173\u952E\u8BCD","\u7528\u6CD5: coder flow issue search <query>",3),A(t);let s=new URLSearchParams;s.set("q",e),s.set("workspace_id",t.http.workspaceId);let r=b(t.args,"--limit");r&&s.set("limit",r),t.args.includes("--include-closed")&&s.set("include_closed","true");let n=await C(t,"GET",`/api/issues/search?${s.toString()}`),o=E(t,n)||{},i=Array.isArray(o)?o:o.issues||[],a=await Ro(t,"issues",i);return H(t.ctx,i.map(c=>nd(c)),{labels:v,values:xe,linkCol:"key",rowLinks:a,empty:"\u65E0\u5339\u914D issue"}),0}async function Fk(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 issue \u6807\u8BC6","\u7528\u6CD5: coder flow issue comment list <id|KEY>",3),A(t);let s=await C(t,"GET",`/api/issues/${encodeURIComponent(e)}/comments`),r=E(t,s)||{},n=Array.isArray(r)?r:r.comments||[];return H(t.ctx,n.map(o=>({id:o.id||"",author:o.author_id||o.user_id||"",created_at:o.created_at||"",content:o.content||""})),{labels:v,empty:"\u65E0\u8BC4\u8BBA"}),0}async function Bk(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 issue \u6807\u8BC6","\u7528\u6CD5: coder flow issue comment add <id|KEY> --content <text>",3),A(t);let s=b(t.args,"--content")||b(t.args,"--body");s||y(t.ctx,"\u7F3A\u5C11 --content",null,3);let r={content:s},n=b(t.args,"--parent");n&&(r.parent_id=n);let o=await C(t,"POST",`/api/issues/${encodeURIComponent(e)}/comments`,r),i=E(t,o)||{};return W(t.ctx,[["id",i.id||""],["content",i.content||s]],null,{labels:v}),0}async function Zk(t){let e=Te(t.args,{valueFlags:[]}),s=e[0],r=e[1];(!s||!r)&&y(t.ctx,"\u7F3A\u5C11\u53C2\u6570","\u7528\u6CD5: coder flow issue comment delete <issue-id> <comment-id>",3),A(t);let n=await C(t,"DELETE",`/api/issues/${encodeURIComponent(s)}/comments/${encodeURIComponent(r)}`);return E(t,n),t.ctx.emit(t.ctx.isJson?{deleted:r}:`\u8BC4\u8BBA ${r} \u5DF2\u5220\u9664`),0}async function Wk(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 issue \u6807\u8BC6","\u7528\u6CD5: coder flow issue subscriber list <id|KEY>",3),A(t);let s=await C(t,"GET",`/api/issues/${encodeURIComponent(e)}/subscribers`),r=E(t,s)||{},n=Array.isArray(r)?r:r.subscribers||[];return H(t.ctx,n.map(o=>({id:o.id||"",name:o.name||"",type:o.type||""})),{labels:v,empty:"\u65E0\u8BA2\u9605\u8005"}),0}async function Vk(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 issue \u6807\u8BC6","\u7528\u6CD5: coder flow issue subscriber add <id|KEY> [--user <name>]",3),A(t);let s={},r=b(t.args,"--user-id"),n=b(t.args,"--user");r?s.user_id=r:n&&(s.user=n);let o=await C(t,"POST",`/api/issues/${encodeURIComponent(e)}/subscribers`,s),i=E(t,o)||{};return t.ctx.emit(t.ctx.isJson?i:`\u5DF2\u8BA2\u9605 issue ${e}`),0}async function Kk(t){let s=Te(t.args,{valueFlags:["--user-id","--user"]})[0];s||y(t.ctx,"\u7F3A\u5C11 issue \u6807\u8BC6","\u7528\u6CD5: coder flow issue subscriber remove <id|KEY>",3),A(t);let r={},n=b(t.args,"--user-id"),o=b(t.args,"--user");n?r.user_id=n:o&&(r.user=o);let i=await C(t,"DELETE",`/api/issues/${encodeURIComponent(s)}/subscribers`,r);return E(t,i),t.ctx.emit(t.ctx.isJson?{unsubscribed:!0}:`\u5DF2\u53D6\u6D88\u8BA2\u9605 issue ${s}`),0}async function zk(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 issue \u6807\u8BC6","\u7528\u6CD5: coder flow issue pull-requests <id|KEY>",3),A(t);let s=await C(t,"GET",`/api/issues/${encodeURIComponent(e)}/pull-requests`),r=E(t,s)||{},n=Array.isArray(r)?r:r.pull_requests||[];return H(t.ctx,n.map(o=>({id:o.id||"",title:o.title||"",url:o.url||"",status:o.status||""})),{labels:v,empty:"\u65E0\u5173\u8054 PR"}),0}async function Jk(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 task-id","\u7528\u6CD5: coder flow issue run-messages <task-id> [--since <seq>]",3),A(t);let s=new URLSearchParams,r=b(t.args,"--issue"),n=b(t.args,"--since");r&&s.set("issue_id",r),n&&s.set("since",n);let o=s.toString(),i=await C(t,"GET",`/api/tasks/${encodeURIComponent(e)}/messages${o?"?"+o:""}`),a=E(t,i)||{},c=Array.isArray(a)?a:a.messages||[];return t.ctx.isJson?(t.ctx.emit(c),0):(H(t.ctx,c.map(l=>({seq:String(l.seq??l.sequence??""),type:l.type||l.role||"",content:(l.content||l.output||"").slice(0,100)})),{labels:{seq:"Seq",type:"\u7C7B\u578B",content:"\u5185\u5BB9"},empty:"\u65E0\u6D88\u606F"}),0)}async function Hk(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 task-id","\u7528\u6CD5: coder flow issue cancel-task <task-id>",3),A(t);let s={},r=b(t.args,"--issue");r&&(s.issue_id=r);let n=await C(t,"POST",`/api/tasks/${encodeURIComponent(e)}/cancel`,s),o=E(t,n)||{};return W(t.ctx,[["id",o.id||e],["status",o.status||""]],null,{labels:v}),0}async function Yk(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 issue \u6807\u8BC6","\u7528\u6CD5: coder flow issue runs <id|KEY>",3),A(t);let s=await C(t,"GET",`/api/issues/${encodeURIComponent(e)}/task-runs`),r=E(t,s)||{},n=Array.isArray(r)?r:r.runs||r.tasks||[];return H(t.ctx,n.map(o=>({id:o.id||"",status:o.status||"",agent:o.agent_id||o.assignee_id||"",created_at:o.created_at||""})),{labels:v,values:xe,empty:"\u65E0\u4EFB\u52A1\u5386\u53F2"}),0}async function Xk(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 issue \u6807\u8BC6","\u7528\u6CD5: coder flow issue rerun <id|KEY>",3),A(t);let s=await C(t,"POST",`/api/issues/${encodeURIComponent(e)}/rerun`,{}),r=E(t,s)||{};return W(t.ctx,[["id",r.id||""],["status",r.status||""]],null,{labels:v,values:xe}),0}function Ps(t,e){return e.map(s=>[s,t[s]??""])}function ls(t,e,s,{webPath:r=null,linkCol:n=null}={}){return async o=>{A(o);let i=new URLSearchParams;i.set("workspace_id",o.http.workspaceId);let a=await C(o,"GET",`/api/${t}?${i.toString()}`),c=E(o,a)||{},l=Array.isArray(c)?c:c[e]||[],u=r?await Ro(o,r,l):null;return H(o.ctx,l.map(d=>{let p={};for(let m of s)p[m]=d[m]??"";return p}),{labels:v,values:xe,linkCol:n,rowLinks:u,empty:`\u65E0 ${t}`}),0}}function Me(t,e,{webPath:s=null,linkCol:r=null}={}){return async n=>{let o=n.arg;o||y(n.ctx,`\u7F3A\u5C11 ${t} \u6807\u8BC6`,"\u7528\u6CD5: coder flow ... get <id>",3),A(n);let i=await C(n,"GET",`/api/${t}/${encodeURIComponent(o)}`),a=E(n,i)||{},c=s?await Do(n,s,a.id):null;return W(n.ctx,Ps(a,e),null,{labels:v,values:xe,link:c&&r?{key:r,url:c}:null}),0}}function Or(t){return async e=>{let s=e.arg;if(s||y(e.ctx,`\u7F3A\u5C11 ${t} \u6807\u8BC6`,"\u7528\u6CD5: coder flow ... delete <id>",3),A(e),!e.args.includes("--yes"))return e.ctx.emit(`\u5C06\u5220\u9664 ${t}/${s}\uFF08\u9AD8\u5F71\u54CD\uFF09\u3002\u786E\u8BA4\u8BF7\u52A0 --yes`),10;let r=await C(e,"DELETE",`/api/${t}/${encodeURIComponent(s)}`);return E(e,r),e.ctx.emit(e.ctx.isJson?{deleted:s}:`\u5DF2\u5220\u9664 ${s}`),0}}function Xe(t,e,s,r,{withWorkspace:n=!1,idArg:o=!1}={}){return async i=>{let a=A(i),c=`/api/${t}`;if(o){let m=i.arg;m||y(i.ctx,`\u7F3A\u5C11 ${t} \u6807\u8BC6`,"\u7528\u6CD5: coder flow ... <verb> <id> ...",3),c+=`/${encodeURIComponent(m)}`}let l={};n&&(l.workspace_id=a);for(let[m,g]of s){let _=b(i.args,`--${m}`);_!==void 0&&(l[g]=_)}Object.keys(l).filter(m=>m!=="workspace_id").length||y(i.ctx,"\u672A\u63D0\u4F9B\u4EFB\u4F55\u5B57\u6BB5",`\u7ED9\u51FA ${s.map(m=>"--"+m[0]).join(" / ")}`,3);let d=await C(i,e,c,l),p=E(i,d)||{};return W(i.ctx,Ps(p,r),null,{labels:v,values:xe}),0}}function Oo(t,e,s){return async r=>{let n=r.arg;n||y(r.ctx,`\u7F3A\u5C11 ${t} \u6807\u8BC6`,`\u7528\u6CD5: coder flow ... ${e} <id>`,3),A(r);let o=await C(r,"POST",`/api/${t}/${encodeURIComponent(n)}/${e}`,{}),i=E(r,o)||{};return W(r.ctx,Ps(i,s),null,{labels:v,values:xe}),0}}function Yu(t,e,s,r){return async n=>{let o=n.arg;o||y(n.ctx,`\u7F3A\u5C11 ${t} \u6807\u8BC6`,"\u7528\u6CD5: coder flow ... <verb> <id>",3),A(n);let i=await C(n,"GET",`/api/${t}/${encodeURIComponent(o)}/${e}`),a=E(n,i)||{},c=Array.isArray(a)?a:a[s]||[];return H(n.ctx,c.map(l=>{let u={};for(let d of r)u[d]=l[d]??"";return u}),{labels:v,values:xe,empty:"\uFF08\u7A7A\uFF09"}),0}}async function Qk(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 issue \u6807\u8BC6","\u7528\u6CD5: coder flow issue label list <id|KEY>",3),A(t);let s=await C(t,"GET",`/api/issues/${encodeURIComponent(e)}/labels`),r=E(t,s)||{},n=Array.isArray(r)?r:r.labels||[];return H(t.ctx,n.map(o=>({id:o.id||"",name:o.name||"",color:o.color||""})),{labels:v,empty:"\u65E0\u6807\u7B7E"}),0}async function eb(t){let e=Te(t.args,{valueFlags:[]}),s=e[0],r=e[1];(!s||!r)&&y(t.ctx,"\u7F3A\u5C11\u53C2\u6570","\u7528\u6CD5: coder flow issue label add <issue-id> <label-id>",3),A(t);let n=await C(t,"POST",`/api/issues/${encodeURIComponent(s)}/labels`,{label_id:r}),o=E(t,n)||{},i=Array.isArray(o)?o:o.labels||[];return H(t.ctx,i.map(a=>({id:a.id||"",name:a.name||"",color:a.color||""})),{labels:v,empty:"\u65E0\u6807\u7B7E"}),0}async function tb(t){let e=Te(t.args,{valueFlags:[]}),s=e[0],r=e[1];(!s||!r)&&y(t.ctx,"\u7F3A\u5C11\u53C2\u6570","\u7528\u6CD5: coder flow issue label remove <issue-id> <label-id>",3),A(t);let n=await C(t,"DELETE",`/api/issues/${encodeURIComponent(s)}/labels/${encodeURIComponent(r)}`);return E(t,n),t.ctx.emit(t.ctx.isJson?{removed:r}:`\u6807\u7B7E ${r} \u5DF2\u4ECE issue ${s} \u79FB\u9664`),0}async function sb(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 issue \u6807\u8BC6","\u7528\u6CD5: coder flow issue metadata list <id|KEY>",3),A(t);let s=await C(t,"GET",`/api/issues/${encodeURIComponent(e)}/metadata`),r=E(t,s)||{},n=r.metadata||r||{};if(t.ctx.isJson)return t.ctx.emit(n),0;let o=Object.entries(n).map(([i,a])=>({key:i,value:String(a),type:typeof a}));return H(t.ctx,o,{labels:v,empty:"\u65E0 metadata"}),0}async function rb(t){let e=t.arg,s=b(t.args,"--key");e||y(t.ctx,"\u7F3A\u5C11 issue \u6807\u8BC6","\u7528\u6CD5: coder flow issue metadata get <id|KEY> --key <key>",3),s||y(t.ctx,"\u7F3A\u5C11 --key","\u7528\u6CD5: coder flow issue metadata get <id|KEY> --key <key>",3),A(t);let r=await C(t,"GET",`/api/issues/${encodeURIComponent(e)}/metadata`),n=E(t,r)||{},o=n.metadata||n||{};s in o||y(t.ctx,`metadata key '${s}' \u4E0D\u5B58\u5728`,null,4);let i=o[s];return t.ctx.isJson?(t.ctx.emit(i),0):(W(t.ctx,[["key",s],["value",String(i)],["type",typeof i]],null,{labels:v}),0)}async function nb(t){let e=t.arg,s=b(t.args,"--key"),r=b(t.args,"--value"),n=b(t.args,"--type");e||y(t.ctx,"\u7F3A\u5C11 issue \u6807\u8BC6","\u7528\u6CD5: coder flow issue metadata set <id|KEY> --key <k> --value <v>",3),s||y(t.ctx,"\u7F3A\u5C11 --key",null,3),r===void 0&&y(t.ctx,"\u7F3A\u5C11 --value",null,3),A(t);let o=r;if(!n||n==="auto")try{o=JSON.parse(r)}catch{o=r}else n==="string"?o=r:n==="number"?(o=Number(r),Number.isNaN(o)&&y(t.ctx,`'${r}' \u4E0D\u662F\u6709\u6548\u6570\u5B57`,null,3)):n==="bool"&&(r!=="true"&&r!=="false"&&y(t.ctx,`'${r}' \u4E0D\u662F\u6709\u6548\u5E03\u5C14\uFF08true/false\uFF09`,null,3),o=r==="true");let i=await C(t,"PUT",`/api/issues/${encodeURIComponent(e)}/metadata/${encodeURIComponent(s)}`,{value:o}),a=E(t,i)||{},c=a.metadata||a||{};if(t.ctx.isJson)return t.ctx.emit(c),0;let l=Object.entries(c).map(([u,d])=>({key:u,value:String(d),type:typeof d}));return H(t.ctx,l,{labels:v,empty:"\uFF08\u7A7A\uFF09"}),0}async function ob(t){let e=t.arg,s=b(t.args,"--key");e||y(t.ctx,"\u7F3A\u5C11 issue \u6807\u8BC6","\u7528\u6CD5: coder flow issue metadata delete <id|KEY> --key <k>",3),s||y(t.ctx,"\u7F3A\u5C11 --key",null,3),A(t);let r=await C(t,"DELETE",`/api/issues/${encodeURIComponent(e)}/metadata/${encodeURIComponent(s)}`);return E(t,r),t.ctx.emit(t.ctx.isJson?{deleted:s}:`metadata key '${s}' \u5DF2\u5220\u9664`),0}async function ib(t){let e=t.arg;if(e||y(t.ctx,"\u7F3A\u5C11 issue \u6807\u8BC6","\u7528\u6CD5: coder flow issue delete <id|KEY> [--yes]",3),A(t),!t.args.includes("--yes"))return t.ctx.emit(`\u5C06\u5220\u9664 issue/${e}\uFF08\u9AD8\u5F71\u54CD\uFF09\u3002\u786E\u8BA4\u8BF7\u52A0 --yes`),10;let s=await C(t,"DELETE",`/api/issues/${encodeURIComponent(e)}`);return E(t,s),t.ctx.emit(t.ctx.isJson?{deleted:e}:`issue ${e} \u5DF2\u5220\u9664`),0}async function ab(t){A(t);let e=new URLSearchParams({workspace_id:t.http.workspaceId}),s=await C(t,"GET",`/api/labels?${e.toString()}`),r=E(t,s)||{},n=Array.isArray(r)?r:r.labels||[];return H(t.ctx,n.map(o=>({id:o.id||"",name:o.name||"",color:o.color||"",created_at:o.created_at||""})),{labels:v,empty:"\u65E0 label"}),0}async function Xu(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 label id","\u7528\u6CD5: coder flow label get <id>",3),A(t);let s=await C(t,"GET",`/api/labels/${encodeURIComponent(e)}`),r=E(t,s)||{};return W(t.ctx,[["id",r.id||""],["name",r.name||""],["color",r.color||""],["created_at",r.created_at||""]],null,{labels:v}),0}async function cb(t){let e=b(t.args,"--name"),s=b(t.args,"--color");e||y(t.ctx,"\u7F3A\u5C11 --name","\u7528\u6CD5: coder flow label create --name <n> --color <#hex>",3),s||y(t.ctx,"\u7F3A\u5C11 --color\uFF08\u683C\u5F0F: #3b82f6\uFF09",null,3),A(t);let r=await C(t,"POST","/api/labels",{name:e,color:s}),n=E(t,r)||{};return W(t.ctx,[["id",n.id||""],["name",n.name||""],["color",n.color||""]],null,{labels:v}),0}async function lb(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 label id","\u7528\u6CD5: coder flow label update <id> [--name <n>] [--color <#>]",3),A(t);let s={},r=b(t.args,"--name"),n=b(t.args,"--color");r!==void 0&&(s.name=r),n!==void 0&&(s.color=n),Object.keys(s).length||y(t.ctx,"\u672A\u63D0\u4F9B\u4EFB\u4F55\u5B57\u6BB5","--name / --color",3);let o=await C(t,"PUT",`/api/labels/${encodeURIComponent(e)}`,s),i=E(t,o)||{};return W(t.ctx,[["id",i.id||""],["name",i.name||""],["color",i.color||""]],null,{labels:v}),0}async function ub(t){let e=t.arg;if(e||y(t.ctx,"\u7F3A\u5C11 label id","\u7528\u6CD5: coder flow label delete <id> [--yes]",3),A(t),!t.args.includes("--yes"))return t.ctx.emit(`\u5C06\u5220\u9664 label/${e}\uFF08\u9AD8\u5F71\u54CD\uFF09\u3002\u786E\u8BA4\u8BF7\u52A0 --yes`),10;let s=await C(t,"DELETE",`/api/labels/${encodeURIComponent(e)}`);return E(t,s),t.ctx.emit(t.ctx.isJson?{deleted:e}:`label ${e} \u5DF2\u5220\u9664`),0}async function db(t){let e=A(t),s=b(t.args,"--name");s||y(t.ctx,"--name \u662F\u5FC5\u586B\u9879",null,3);let r=b(t.args,"--runtime-id");r||y(t.ctx,"--runtime-id \u662F\u5FC5\u586B\u9879",null,3);let n={workspace_id:e,name:s,runtime_id:r};for(let[c,l]of[["description","description"],["instructions","instructions"],["model","model"],["thinking-level","thinking_level"],["visibility","visibility"],["max-concurrent-tasks","max_concurrent_tasks"]]){let u=b(t.args,`--${c}`);u!==void 0&&(n[l]=u)}let o=await C(t,"POST","/api/agents",n),i=E(t,o)||{},a=b(t.args,"--skill-ids");if(a&&i.id){let c=a.split(",").map(l=>l.trim()).filter(Boolean);if(c.length){let l=await C(t,"PUT",`/api/agents/${encodeURIComponent(i.id)}/skills`,{skill_ids:c});E(t,l)}}return W(t.ctx,Ps(i,["id","name","model","runtime_id"]),null,{labels:v,values:xe}),0}async function pb(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 agent \u6807\u8BC6","\u7528\u6CD5: coder flow agent skills list <id>",3),A(t);let s=await C(t,"GET",`/api/agents/${encodeURIComponent(e)}/skills`),r=E(t,s)||{},n=Array.isArray(r)?r:r.skills||[];return H(t.ctx,n.map(o=>({id:o.id||"",name:o.name||"",description:o.description||""})),{labels:v,empty:"\u65E0 skill"}),0}async function fb(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 agent \u6807\u8BC6","\u7528\u6CD5: coder flow agent skills add <agent-id> --skill-ids <id1,id2>",3),A(t);let s=(b(t.args,"--skill-ids")||"").split(",").map(o=>o.trim()).filter(Boolean);s.length||y(t.ctx,"\u7F3A\u5C11 --skill-ids",null,3);let r=await C(t,"POST",`/api/agents/${encodeURIComponent(e)}/skills/add`,{skill_ids:s}),n=E(t,r)||{};return t.ctx.emit(t.ctx.isJson?n:`skill \u5DF2\u6DFB\u52A0\u5230 agent ${e}`),0}async function mb(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 agent \u6807\u8BC6","\u7528\u6CD5: coder flow agent skills set <agent-id> --skill-ids <id1,id2>",3),A(t);let s=b(t.args,"--skill-ids")||"",r=s?s.split(",").map(i=>i.trim()).filter(Boolean):[],n=await C(t,"PUT",`/api/agents/${encodeURIComponent(e)}/skills`,{skill_ids:r}),o=E(t,n)||{};return t.ctx.emit(t.ctx.isJson?o:`agent ${e} \u7684 skill \u5DF2\u66F4\u65B0`),0}async function hb(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 agent \u6807\u8BC6","\u7528\u6CD5: coder flow agent env get <id>",3),A(t);let s=await C(t,"GET",`/api/agents/${encodeURIComponent(e)}/env`),r=E(t,s)||{},n=r.env||r||{};if(t.ctx.isJson)return t.ctx.emit(n),0;let o=Object.entries(n).map(([i,a])=>({key:i,value:String(a)}));return H(t.ctx,o,{labels:v,empty:"\u65E0\u73AF\u5883\u53D8\u91CF"}),0}async function gb(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 agent \u6807\u8BC6",`\u7528\u6CD5: coder flow agent env set <id> --custom-env '{"KEY":"val"}'`,3),A(t);let s=b(t.args,"--custom-env");s||y(t.ctx,"\u7F3A\u5C11 --custom-env\uFF08JSON \u5BF9\u8C61\uFF09",null,3);let r;try{r=JSON.parse(s)}catch{y(t.ctx,"--custom-env \u4E0D\u662F\u6709\u6548 JSON",null,3)}let n=await C(t,"PUT",`/api/agents/${encodeURIComponent(e)}/env`,{env:r}),o=E(t,n)||{};return t.ctx.emit(t.ctx.isJson?o:`agent ${e} \u7684\u73AF\u5883\u53D8\u91CF\u5DF2\u66F4\u65B0`),0}async function yb(t){let e=t.arg,s=b(t.args,"--set")||b(t.args,"--status");e||y(t.ctx,"\u7F3A\u5C11 project \u6807\u8BC6","\u7528\u6CD5: coder flow project status <id> --set <status>",3),s||y(t.ctx,"\u7F3A\u5C11 --set <status>",null,3),A(t);let r=await C(t,"PUT",`/api/projects/${encodeURIComponent(e)}`,{status:s}),n=E(t,r)||{};return W(t.ctx,[["id",n.id||""],["title",n.title||""],["status",n.status||""]],null,{labels:v}),0}async function _b(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 project \u6807\u8BC6","\u7528\u6CD5: coder flow project resource list <project-id>",3),A(t);let s=await C(t,"GET",`/api/projects/${encodeURIComponent(e)}/resources`),r=E(t,s)||{},n=Array.isArray(r)?r:r.resources||[];return H(t.ctx,n.map(o=>({id:o.id||"",resource_type:o.resource_type||"",label:o.label||""})),{labels:v,empty:"\u65E0\u8D44\u6E90"}),0}async function wb(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 project \u6807\u8BC6","\u7528\u6CD5: coder flow project resource add <project-id> --type <t> --url <u>",3),A(t);let s=b(t.args,"--type")||"github_repo",r=b(t.args,"--url"),n=b(t.args,"--local-path"),o=b(t.args,"--daemon-id"),i=b(t.args,"--label"),a;if(s==="github_repo"){r||y(t.ctx,"github_repo \u9700\u8981 --url",null,3),a={url:r};let d=b(t.args,"--default-branch-hint");d&&(a.default_branch_hint=d)}else s==="local_directory"?((!n||!o)&&y(t.ctx,"local_directory \u9700\u8981 --local-path \u548C --daemon-id",null,3),a={local_path:n,daemon_id:o}):y(t.ctx,`\u672A\u77E5 resource type '${s}'\uFF1B\u652F\u6301: github_repo, local_directory`,null,3);let c={resource_type:s,resource_ref:a};i&&(c.label=i);let l=await C(t,"POST",`/api/projects/${encodeURIComponent(e)}/resources`,c),u=E(t,l)||{};return W(t.ctx,[["id",u.id||""],["resource_type",u.resource_type||""]],null,{labels:v}),0}async function kb(t){let e=Te(t.args,{valueFlags:[]}),s=e[0],r=e[1];(!s||!r)&&y(t.ctx,"\u7F3A\u5C11\u53C2\u6570","\u7528\u6CD5: coder flow project resource remove <project-id> <resource-id>",3),A(t);let n=await C(t,"DELETE",`/api/projects/${encodeURIComponent(s)}/resources/${encodeURIComponent(r)}`);return E(t,n),t.ctx.emit(t.ctx.isJson?{removed:r}:`resource ${r} \u5DF2\u4ECE project ${s} \u79FB\u9664`),0}async function bb(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 squad \u6807\u8BC6","\u7528\u6CD5: coder flow squad member list <squad-id>",3),A(t);let s=await C(t,"GET",`/api/squads/${encodeURIComponent(e)}/members`),r=E(t,s)||{},n=Array.isArray(r)?r:r.members||[];return H(t.ctx,n.map(o=>({member_id:o.member_id||"",member_type:o.member_type||"",role:o.role||""})),{labels:v,empty:"\u65E0\u6210\u5458"}),0}async function xb(t){let e=t.arg,s=b(t.args,"--member-id"),r=b(t.args,"--type")||"agent",n=b(t.args,"--role")||"member";e||y(t.ctx,"\u7F3A\u5C11 squad \u6807\u8BC6","\u7528\u6CD5: coder flow squad member add <squad-id> --member-id <id> [--type agent|member] [--role <r>]",3),s||y(t.ctx,"\u7F3A\u5C11 --member-id",null,3),A(t);let o={member_type:r,member_id:s,role:n},i=await C(t,"POST",`/api/squads/${encodeURIComponent(e)}/members`,o),a=E(t,i)||{};return t.ctx.emit(t.ctx.isJson?a:`\u6210\u5458 ${s} \u5DF2\u52A0\u5165 squad ${e}`),0}async function Sb(t){let e=t.arg,s=b(t.args,"--member-id"),r=b(t.args,"--member-type")||"agent",n=b(t.args,"--role");e||y(t.ctx,"\u7F3A\u5C11 squad \u6807\u8BC6","\u7528\u6CD5: coder flow squad member set-role <squad-id> --member-id <id> --role <r>",3),s||y(t.ctx,"\u7F3A\u5C11 --member-id",null,3),n||y(t.ctx,"\u7F3A\u5C11 --role",null,3),A(t);let o={member_type:r,member_id:s,role:n},i=await C(t,"PATCH",`/api/squads/${encodeURIComponent(e)}/members/role`,o),a=E(t,i)||{};return t.ctx.emit(t.ctx.isJson?a:`\u6210\u5458 ${s} \u7684\u89D2\u8272\u5DF2\u66F4\u65B0\u4E3A ${n}`),0}async function Ib(t){let e=t.arg,s=b(t.args,"--member-id"),r=b(t.args,"--type")||"agent";e||y(t.ctx,"\u7F3A\u5C11 squad \u6807\u8BC6","\u7528\u6CD5: coder flow squad member remove <squad-id> --member-id <id>",3),s||y(t.ctx,"\u7F3A\u5C11 --member-id",null,3),A(t);let n={member_type:r,member_id:s},o=await C(t,"DELETE",`/api/squads/${encodeURIComponent(e)}/members`,n);return E(t,o),t.ctx.emit(t.ctx.isJson?{removed:s}:`\u6210\u5458 ${s} \u5DF2\u4ECE squad ${e} \u79FB\u9664`),0}async function Cb(t){let e=t.arg,s=t.args.find(i=>!i.startsWith("-")&&i!==e)||b(t.args,"--outcome");e||y(t.ctx,"\u7F3A\u5C11 issue \u6807\u8BC6","\u7528\u6CD5: coder flow squad activity <issue-id> <outcome> [--reason <r>]",3),(!s||!["action","no_action","failed"].includes(s))&&y(t.ctx,"outcome \u5FC5\u987B\u662F action / no_action / failed",null,3),A(t);let r=b(t.args,"--reason")||"",n=await C(t,"POST",`/api/issues/${encodeURIComponent(e)}/squad-evaluated`,{outcome:s,reason:r}),o=E(t,n)||{};return t.ctx.emit(t.ctx.isJson?o:`squad \u8BC4\u4F30\u5DF2\u8BB0\u5F55: ${s}\uFF08issue ${e}\uFF09`),0}async function Eb(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 autopilot \u6807\u8BC6","\u7528\u6CD5: coder flow autopilot trigger-add <id> --kind schedule --cron '0 9 * * *'",3),A(t);let s=b(t.args,"--kind")||"schedule";s!=="schedule"&&s!=="webhook"&&y(t.ctx,"--kind \u987B\u4E3A schedule \u6216 webhook",null,3);let r={kind:s};if(s==="schedule"){let a=b(t.args,"--cron");a||y(t.ctx,"schedule trigger \u9700\u8981 --cron",null,3),r.cron_expression=a;let c=b(t.args,"--timezone");c&&(r.timezone=c)}let n=b(t.args,"--label");n&&(r.label=n);let o=await C(t,"POST",`/api/autopilots/${encodeURIComponent(e)}/triggers`,r),i=E(t,o)||{};return W(t.ctx,[["id",i.id||""],["kind",i.kind||""],["label",i.label||""]],null,{labels:v}),0}async function Ab(t){let e=Te(t.args,{valueFlags:["--cron","--timezone","--label"]}),s=e[0],r=e[1];(!s||!r)&&y(t.ctx,"\u7F3A\u5C11\u53C2\u6570","\u7528\u6CD5: coder flow autopilot trigger-update <autopilot-id> <trigger-id> [--cron ...] [--enabled true|false]",3),A(t);let n={},o=b(t.args,"--cron"),i=b(t.args,"--timezone"),a=b(t.args,"--label"),c=b(t.args,"--enabled");o!==void 0&&(n.cron_expression=o),i!==void 0&&(n.timezone=i),a!==void 0&&(n.label=a),c!==void 0&&(n.enabled=c==="true"),Object.keys(n).length||y(t.ctx,"\u672A\u63D0\u4F9B\u4EFB\u4F55\u5B57\u6BB5","--cron / --timezone / --label / --enabled",3);let l=await C(t,"PATCH",`/api/autopilots/${encodeURIComponent(s)}/triggers/${encodeURIComponent(r)}`,n),u=E(t,l)||{};return W(t.ctx,[["id",u.id||""],["kind",u.kind||""]],null,{labels:v}),0}async function $b(t){let e=Te(t.args,{valueFlags:[]}),s=e[0],r=e[1];if((!s||!r)&&y(t.ctx,"\u7F3A\u5C11\u53C2\u6570","\u7528\u6CD5: coder flow autopilot trigger-delete <autopilot-id> <trigger-id>",3),A(t),!t.args.includes("--yes"))return t.ctx.emit(`\u5C06\u5220\u9664 trigger ${r}\uFF08\u9AD8\u5F71\u54CD\uFF09\u3002\u786E\u8BA4\u8BF7\u52A0 --yes`),10;let n=await C(t,"DELETE",`/api/autopilots/${encodeURIComponent(s)}/triggers/${encodeURIComponent(r)}`);return E(t,n),t.ctx.emit(t.ctx.isJson?{deleted:r}:`trigger ${r} \u5DF2\u5220\u9664`),0}async function Tb(t){let e=Te(t.args,{valueFlags:[]}),s=e[0],r=e[1];if((!s||!r)&&y(t.ctx,"\u7F3A\u5C11\u53C2\u6570","\u7528\u6CD5: coder flow autopilot trigger-rotate-url <autopilot-id> <trigger-id> [--yes]",3),A(t),!t.args.includes("--yes"))return t.ctx.emit("\u6B64\u64CD\u4F5C\u5C06\u7ACB\u5373\u4F7F\u5F53\u524D webhook URL \u5931\u6548\u3002\u786E\u8BA4\u8BF7\u52A0 --yes"),10;let n=await C(t,"POST",`/api/autopilots/${encodeURIComponent(s)}/triggers/${encodeURIComponent(r)}/rotate-webhook-token`,{}),o=E(t,n)||{};return W(t.ctx,[["id",o.id||""],["webhook_url",o.webhook_url||""]],null,{labels:v}),0}async function vb(t){A(t);let e=b(t.args,"--url");e||y(t.ctx,"\u7F3A\u5C11 --url","\u7528\u6CD5: coder flow skill import --url <url> [--on-conflict fail|overwrite|rename|skip]",3);let s=b(t.args,"--on-conflict")||"fail";["fail","overwrite","rename","skip"].includes(s)||y(t.ctx,"--on-conflict \u987B\u4E3A fail / overwrite / rename / skip",null,3);let r=await C(t,"POST","/api/skills/import",{url:e,on_conflict:s}),n=E(t,r)||{};return W(t.ctx,[["id",n.id||n.skill?.id||""],["name",n.name||n.skill?.name||""],["status",n.status||"created"]],null,{labels:v}),0}async function Ub(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11\u641C\u7D22\u8BCD","\u7528\u6CD5: coder flow skill search <query>",3),A(t);let s=await C(t,"GET",`/api/skills/search?q=${encodeURIComponent(e)}`),r=E(t,s)||{},n=Array.isArray(r)?r:r.results||[];return H(t.ctx,n.map(o=>({name:o.name||"",url:o.url||"",source:o.source||"",description:o.description||""})),{labels:v,empty:"\u65E0\u5339\u914D skill"}),0}async function Ob(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 skill \u6807\u8BC6","\u7528\u6CD5: coder flow skill files list <skill-id>",3),A(t);let s=await C(t,"GET",`/api/skills/${encodeURIComponent(e)}/files`),r=E(t,s)||{},n=Array.isArray(r)?r:r.files||[];return H(t.ctx,n.map(o=>({id:o.id||"",path:o.path||"",updated_at:o.updated_at||""})),{labels:v,empty:"\u65E0\u6587\u4EF6"}),0}async function Db(t){let e=t.arg,s=b(t.args,"--path"),r=b(t.args,"--content");e||y(t.ctx,"\u7F3A\u5C11 skill \u6807\u8BC6","\u7528\u6CD5: coder flow skill files upsert <skill-id> --path <p> --content <c>",3),s||y(t.ctx,"\u7F3A\u5C11 --path",null,3),r||y(t.ctx,"\u7F3A\u5C11 --content",null,3),A(t);let n=await C(t,"PUT",`/api/skills/${encodeURIComponent(e)}/files`,{path:s,content:r}),o=E(t,n)||{};return W(t.ctx,[["id",o.id||""],["path",o.path||s]],null,{labels:v}),0}async function Rb(t){let e=Te(t.args,{valueFlags:[]}),s=e[0],r=e[1];if((!s||!r)&&y(t.ctx,"\u7F3A\u5C11\u53C2\u6570","\u7528\u6CD5: coder flow skill files delete <skill-id> <file-id>",3),A(t),!t.args.includes("--yes"))return t.ctx.emit(`\u5C06\u5220\u9664 skill file ${r}\uFF08\u9AD8\u5F71\u54CD\uFF09\u3002\u786E\u8BA4\u8BF7\u52A0 --yes`),10;let n=await C(t,"DELETE",`/api/skills/${encodeURIComponent(s)}/files/${encodeURIComponent(r)}`);return E(t,n),t.ctx.emit(t.ctx.isJson?{deleted:r}:`skill file ${r} \u5DF2\u5220\u9664`),0}async function Qu(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 runtime \u6807\u8BC6","\u7528\u6CD5: coder flow runtime get <id>",3),A(t);let s=new URLSearchParams;s.set("workspace_id",t.http.workspaceId);let r=await C(t,"GET",`/api/runtimes?${s.toString()}`),n=E(t,r)||{},i=(Array.isArray(n)?n:n.runtimes||[]).find(c=>c.id===e||c.name===e);i||y(t.ctx,`runtime \u4E0D\u5B58\u5728: ${e}`,null,4);let a=["id","name","status","provider","device_info","runtime_mode","visibility","last_seen_at","created_at"];return W(t.ctx,Ps(i,a),null,{labels:v}),0}async function Lb(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 runtime \u6807\u8BC6","\u7528\u6CD5: coder flow runtime usage <id> [--days <n>]",3),A(t);let s=b(t.args,"--days")||"90",r=await C(t,"GET",`/api/runtimes/${encodeURIComponent(e)}/usage?days=${s}`),n=E(t,r)||{},o=Array.isArray(n)?n:n.usage||[];return H(t.ctx,o.map(i=>({date:i.date||"",provider:i.provider||"",model:i.model||"",input_tokens:String(i.input_tokens??""),output_tokens:String(i.output_tokens??"")})),{labels:v,empty:"\u65E0\u7528\u91CF\u6570\u636E"}),0}async function Pb(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 runtime \u6807\u8BC6","\u7528\u6CD5: coder flow runtime activity <id>",3),A(t);let s=await C(t,"GET",`/api/runtimes/${encodeURIComponent(e)}/activity`),r=E(t,s)||{},n=Array.isArray(r)?r:r.activity||[];return H(t.ctx,n.map(o=>({hour:o.hour||"",count:String(o.count??"")})),{labels:v,empty:"\u65E0\u6D3B\u52A8\u6570\u636E"}),0}async function Nb(t){let e=t.arg,s=b(t.args,"--target-version");e||y(t.ctx,"\u7F3A\u5C11 runtime \u6807\u8BC6","\u7528\u6CD5: coder flow runtime initiate-update <id> --target-version <v>",3),s||y(t.ctx,"\u7F3A\u5C11 --target-version",null,3),A(t);let r=await C(t,"POST",`/api/runtimes/${encodeURIComponent(e)}/update`,{target_version:s}),n=E(t,r)||{};return W(t.ctx,[["id",n.id||""],["status",n.status||""]],null,{labels:v}),0}async function qb(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 runtime \u6807\u8BC6","\u7528\u6CD5: coder flow runtime models <id>",3),A(t);let s=await C(t,"POST",`/api/runtimes/${encodeURIComponent(e)}/models`,{}),n=(E(t,s)||{}).id;n||y(t.ctx,"\u670D\u52A1\u7AEF\u672A\u8FD4\u56DE request id",null,1);let o=9e4,i=2e3,a=Date.now()+o,c;for(;Date.now()<a;){await new Promise(m=>setTimeout(m,i));let u=await C(t,"GET",`/api/runtimes/${encodeURIComponent(e)}/models/${encodeURIComponent(n)}`),d=E(t,u)||{},p=d.status;if(p==="completed"){c=d;break}(p==="failed"||p==="timeout")&&y(t.ctx,`\u83B7\u53D6\u6A21\u578B\u5217\u8868\u5931\u8D25: ${d.error||p}`,null,1)}if(c||y(t.ctx,"\u83B7\u53D6\u6A21\u578B\u5217\u8868\u8D85\u65F6\uFF08runtime \u672A\u54CD\u5E94\uFF09",null,1),!c.supported)return t.ctx.emit(t.ctx.isJson?{supported:!1,models:[]}:"\u8BE5 runtime \u4E0D\u652F\u6301\u6A21\u578B\u9009\u62E9"),0;let l=c.models||[];return t.ctx.isJson?(t.ctx.emit({supported:!0,models:l}),0):(H(t.ctx,l.map(u=>({id:u.id||"",label:u.label||"",provider:u.provider||"",default:u.default?"\u2713":"",thinking:u.thinking?(u.thinking.supported_levels||[]).join(","):""})),{labels:{id:"Model ID",label:"\u540D\u79F0",provider:"Provider",default:"\u9ED8\u8BA4",thinking:"Thinking"},empty:"\u65E0\u53EF\u7528\u6A21\u578B"}),0)}async function jb(t){A(t);let e=await C(t,"GET","/api/workspaces"),s=E(t,e)||{},r=Array.isArray(s)?s:s.workspaces||[];return H(t.ctx,r.map(n=>({id:n.id||"",name:n.name||"",slug:n.slug||""})),{labels:v,empty:"\u65E0 workspace"}),0}async function ed(t){A(t);let e=t.arg||t.http.workspaceId,s=await C(t,"GET",`/api/workspaces/${encodeURIComponent(e)}`),r=E(t,s)||{};return W(t.ctx,[["id",r.id||""],["name",r.name||""],["slug",r.slug||""],["description",r.description||""]],null,{labels:v}),0}async function Mb(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 workspace id/slug","\u7528\u6CD5: coder flow workspace switch <id|slug>",3),A(t);let s=await C(t,"GET",`/api/workspaces/${encodeURIComponent(e)}`),r=E(t,s)||{};return t.ctx.setTeam&&t.ctx.setTeam(r.id,r.name||""),t.ctx.emit(t.ctx.isJson?r:`\u5DF2\u5207\u6362\u5230 workspace: ${r.name||r.id}`),0}async function Gb(t){let e=t.arg||t.http.workspaceId;A(t);let s={},r=b(t.args,"--name"),n=b(t.args,"--description"),o=b(t.args,"--context"),i=b(t.args,"--issue-prefix");r!==void 0&&(s.name=r),n!==void 0&&(s.description=n),o!==void 0&&(s.context=o),i!==void 0&&(s.issue_prefix=i),Object.keys(s).length||y(t.ctx,"\u672A\u63D0\u4F9B\u4EFB\u4F55\u5B57\u6BB5","--name / --description / --context / --issue-prefix",3);let a=await C(t,"PATCH",`/api/workspaces/${encodeURIComponent(e)}`,s),c=E(t,a)||{};return W(t.ctx,[["id",c.id||""],["name",c.name||""],["slug",c.slug||""]],null,{labels:v}),0}async function Fb(t){let e=t.arg||t.http.workspaceId;A(t);let s=await C(t,"GET",`/api/workspaces/${encodeURIComponent(e)}/members`),r=E(t,s)||{},n=Array.isArray(r)?r:r.members||[];return H(t.ctx,n.map(o=>({id:o.id||"",name:o.name||o.username||"",role:o.role||""})),{labels:v,empty:"\u65E0\u6210\u5458"}),0}async function Bb(t){A(t);let e=await C(t,"GET",`/api/workspaces/${t.http.workspaceId}/repos`),s=E(t,e)||{},r=Array.isArray(s)?s:s.repos||s.repositories||[];return H(t.ctx,r.map(n=>({url:n.url||"",description:n.description||""})),{labels:v,empty:"\u65E0 repo"}),0}async function Zb(t){A(t);let e=Te(t.args,{valueFlags:["--description"]}),s=b(t.args,"--description");e.length||y(t.ctx,"\u7F3A\u5C11 repo URL","\u7528\u6CD5: coder flow repo add <url> [<url>...]",3);let r=e.map(i=>s&&e.length===1?{url:i,description:s}:{url:i}),n=await C(t,"POST",`/api/workspaces/${t.http.workspaceId}/repos`,{repos:r}),o=E(t,n)||{};return t.ctx.emit(t.ctx.isJson?o:`${e.length} \u4E2A repo \u5DF2\u6DFB\u52A0`),0}async function td(t){A(t);let e=Te(t.args,{valueFlags:[]});e.length||y(t.ctx,"\u7F3A\u5C11 repo URL","\u7528\u6CD5: coder flow repo remove <url> [<url>...]",3);let s=await C(t,"DELETE",`/api/workspaces/${t.http.workspaceId}/repos`,{urls:e}),r=E(t,s)||{};return t.ctx.emit(t.ctx.isJson?r:`${e.length} \u4E2A repo \u5DF2\u79FB\u9664`),0}async function Wb(t){let e=t.arg;e||y(t.ctx,"\u7F3A\u5C11 repo URL","\u7528\u6CD5: coder flow repo checkout <url> [--ref <branch>]",3),A(t);let s={url:e},r=b(t.args,"--ref");r&&(s.ref=r);let n=await C(t,"POST",`/api/workspaces/${t.http.workspaceId}/repos/checkout`,s),o=E(t,n)||{};return W(t.ctx,[["path",o.path||""],["url",e]],null,{labels:v}),0}async function Vb(t){A(t);let e=await C(t,"GET","/api/me"),s=E(t,e)||{};return W(t.ctx,[["id",s.id||""],["name",s.name||s.display_name||""],["email",s.email||""],["description",s.description||s.profile_description||""]],null,{labels:v}),0}async function Kb(t){A(t);let e={},s=b(t.args,"--description");t.args.includes("--clear")?e.profile_description="":s!==void 0?e.profile_description=s:y(t.ctx,"\u672A\u63D0\u4F9B\u4EFB\u4F55\u5B57\u6BB5","--description <text> \u6216 --clear",3);let n=await C(t,"PATCH","/api/me",e),o=E(t,n)||{};return W(t.ctx,[["id",o.id||""],["description",o.description||o.profile_description||""]],null,{labels:v}),0}async function zb(t){let e=Te(t.args,{valueFlags:["--url","--ref","--label","--position","--default-branch-hint","--local-path","--daemon-id","--ref-label"]}),s=e[0],r=e[1];(!s||!r)&&y(t.ctx,"\u7F3A\u5C11\u53C2\u6570","\u7528\u6CD5: coder flow project resource update <project-id> <resource-id> [--url <u>] [--label <l>]",3),A(t);let n={},o=b(t.args,"--url"),i=b(t.args,"--ref"),a=b(t.args,"--label"),c=b(t.args,"--position");if(i)try{n.resource_ref=JSON.parse(i)}catch{y(t.ctx,"--ref \u4E0D\u662F\u6709\u6548 JSON",null,3)}else if(o){n.resource_ref={url:o};let d=b(t.args,"--default-branch-hint");d&&(n.resource_ref.default_branch_hint=d)}a!==void 0&&(n.label=a),c!==void 0&&(n.position=Number(c)),Object.keys(n).length||y(t.ctx,"\u672A\u63D0\u4F9B\u4EFB\u4F55\u5B57\u6BB5","--url / --ref / --label / --position",3);let l=await C(t,"PUT",`/api/projects/${encodeURIComponent(s)}/resources/${encodeURIComponent(r)}`,n),u=E(t,l)||{};return W(t.ctx,[["id",u.id||""],["resource_type",u.resource_type||""],["label",u.label||""]],null,{labels:v}),0}async function id(t){let{spawn:e}=require("child_process"),{checkHealth:s}=Es(),{daemonLogPath:r,writePid:n}=es(),{loadConfig:o}=Zn(),i=require("fs"),a=require("path"),c=t.args.includes("--foreground"),l=r(),u=10*1024*1024,d=5;function p(){try{if(!i.existsSync(l)||i.statSync(l).size<u)return;let B=`${l}.${d}`;i.existsSync(B)&&i.unlinkSync(B);for(let X=d-1;X>=1;X--){let se=`${l}.${X}`;i.existsSync(se)&&i.renameSync(se,`${l}.${X+1}`)}i.renameSync(l,`${l}.1`)}catch{}}function m(B=new Date){let X=(at,ue=2)=>String(at).padStart(ue,"0"),se=-B.getTimezoneOffset(),K=se>=0?"+":"-",ge=X(Math.floor(Math.abs(se)/60)),Ge=X(Math.abs(se)%60);return`${B.getFullYear()}-${X(B.getMonth()+1)}-${X(B.getDate())} ${X(B.getHours())}:${X(B.getMinutes())}:${X(B.getSeconds())}.${X(B.getMilliseconds(),3)} ${K}${ge}:${Ge}`}if(c){let{DaemonProcess:B}=Ju(),X=Xb(t),se=o(X);se.token=t.ctx.getApiKey?t.ctx.getApiKey():null,se.coderBaseUrl=t.ctx.baseUrl||se.coderBaseUrl,i.mkdirSync(a.dirname(l),{recursive:!0}),p();let K=at=>{p();let ue=`[${m()}] ${at}
509
509
  `;try{i.appendFileSync(l,ue)}catch{}process.stderr.isTTY&&process.stderr.write(ue)};K(`[daemon] pid=${process.pid} node=${process.version} platform=${process.platform}`),K(`[daemon] log=${l} maxSize=${u/1024/1024}MB keep=${d}`),n(process.pid);let ge=new AbortController;return process.once("SIGINT",()=>ge.abort()),process.once("SIGTERM",()=>ge.abort()),await new B(se,K).run(ge),0}let g=19514,_=await s(g);(_.status==="running"||_.status==="starting")&&y(t.ctx,`daemon \u5DF2\u5728\u8FD0\u884C (pid ${_.pid})`,"\u7528 coder flow daemon restart \u91CD\u542F",1);let w=process.argv[0],k=process.argv[1],O=["flow","daemon","start","--foreground",...t.args.filter(B=>B!=="--foreground")];i.mkdirSync(a.dirname(l),{recursive:!0}),p();let V=i.openSync(l,"a"),R=e(w,[k,...O],{detached:!0,stdio:["ignore",V,"ignore"],env:Object.assign({},process.env,{CODER_APIKEY:t.ctx.getApiKey?t.ctx.getApiKey():process.env.CODER_APIKEY||""})});i.closeSync(V),R.unref(),n(R.pid);let N=Date.now()+45e3,F=!1;for(;Date.now()<N;)if(await Po(500),(await s(g)).status==="running"){F=!0;break}return F?t.ctx.emit(`Daemon \u5DF2\u542F\u52A8 (pid ${R.pid})\u3002\u65E5\u5FD7: ${l}`):t.ctx.emit(`Daemon \u672A\u80FD\u5728 45s \u5185\u5C31\u7EEA\uFF0C\u68C0\u67E5\u65E5\u5FD7: ${l}`),0}async function ad(t){let{checkHealth:e,requestShutdown:s}=Es(),{removePid:r}=es(),n=await e();if(n.status!=="running"&&n.status!=="starting")return t.ctx.emit("Daemon \u672A\u8FD0\u884C"),0;try{await s()}catch{if(n.pid)try{process.kill(n.pid,"SIGTERM")}catch{}}let o=Date.now()+15e3;for(;Date.now()<o;){await Po(500);let i=await e();if(i.status!=="running"&&i.status!=="starting")return r(),t.ctx.emit("Daemon \u5DF2\u505C\u6B62"),0}return t.ctx.emit("Daemon \u4ECD\u5728\u505C\u6B62\u4E2D\uFF08\u53EF\u80FD\u6709\u4EFB\u52A1\u5728\u6267\u884C\uFF09"),0}async function Jb(t){return await ad(t),await Po(1e3),id(t)}async function sd(t){let{checkHealth:e}=Es(),{daemonLogPath:s}=es(),r=await e();return t.ctx.isJson?(t.ctx.emit(r),0):(r.status==="running"?(t.ctx.emit(`Daemon: \u8FD0\u884C\u4E2D (pid ${r.pid}, uptime ${r.uptime})`),Array.isArray(r.agents)&&r.agents.length&&t.ctx.emit(`Agents: ${r.agents.join(", ")}`),t.ctx.emit(`Workspaces: ${Array.isArray(r.workspaces)?r.workspaces.length:0}`)):r.status==="starting"?t.ctx.emit(`Daemon: \u542F\u52A8\u4E2D (pid ${r.pid})`):(t.ctx.emit("Daemon: \u672A\u8FD0\u884C"),t.ctx.emit(`\u65E5\u5FD7: ${s()}`)),0)}async function Hb(t){let e=require("fs"),{daemonLogPath:s}=es(),r=s();e.existsSync(r)||y(t.ctx,`\u65E5\u5FD7\u6587\u4EF6\u4E0D\u5B58\u5728: ${r}`,"\u5148\u542F\u52A8 daemon: coder flow daemon start",4);let n=t.args.includes("-f")||t.args.includes("--follow"),o=t.args.find((l,u)=>(l==="-n"||l==="--lines")&&t.args[u+1])&&t.args[t.args.findIndex(l=>l==="-n"||l==="--lines")+1]||"50",i=parseInt(o,10)||50,c=e.readFileSync(r,"utf8").split(`
510
510
  `).filter(l=>l).slice(-i);for(let l of c)t.ctx.emit(l);if(n){let l=e.statSync(r).size,u=setInterval(()=>{let d=e.statSync(r);if(d.size>l){let p=Buffer.alloc(d.size-l),m=e.openSync(r,"r");e.readSync(m,p,0,p.length,l),e.closeSync(m),l=d.size,p.toString().split(`
511
511
  `).forEach(g=>{g&&t.ctx.emit(g)})}},500);process.once("SIGINT",()=>clearInterval(u)),await new Promise(()=>{})}return 0}async function Yb(t){let e=require("fs"),s=require("path"),r=require("os"),n=t.args.find((u,d)=>u==="--workspaces-root"&&t.args[d+1])&&t.args[t.args.findIndex(u=>u==="--workspaces-root")+1]||process.env.MULTICA_WORKSPACES_ROOT||s.join(r.homedir(),"multica_workspaces");if(!e.existsSync(n))return t.ctx.isJson?(t.ctx.emit({workspaces_root:n,total_bytes:0,tasks:[]}),0):(t.ctx.emit(`Workspaces root: ${n}`),t.ctx.emit("(no task directories)"),0);let o=[],i=0;for(let u of e.readdirSync(n)){if(u===".repos")continue;let d=s.join(n,u);if(e.statSync(d).isDirectory())for(let p of e.readdirSync(d)){let m=s.join(d,p);if(!e.statSync(m).isDirectory())continue;let g=cd(m);i+=g,o.push({path:`${u}/${p}`,size:g})}}o.sort((u,d)=>d.size-u.size);let a=t.args[t.args.findIndex(u=>u==="--top")+1],c=a?parseInt(a,10):0,l=c>0?o.slice(0,c):o;if(t.ctx.isJson)return t.ctx.emit({workspaces_root:n,total_bytes:i,tasks:o}),0;if(t.ctx.emit(`Workspaces root: ${n}`),!l.length)return t.ctx.emit("(no task directories)"),0;for(let u of l)t.ctx.emit(` ${u.path.padEnd(40)} ${rd(u.size)}`);return t.ctx.emit(`
@@ -23,13 +23,13 @@ var Fd4=Object.create;var{getPrototypeOf:gd4,defineProperty:URH,getOwnPropertyNa
23
23
  Object.assign(A, {
24
24
  post(...args) {
25
25
  const [url, payload, ...remainArgs] = args;
26
- const patchedUrl = url + (url.includes('?') ? '&' : '?') + 'app=codev-cli' + '&version=4.1.21' + '&session_id=' + V_() + (process.env.SPACE_ID ? '&space_id=' + process.env.SPACE_ID : '');
26
+ const patchedUrl = url + (url.includes('?') ? '&' : '?') + 'app=codev-cli' + '&version=4.1.22' + '&session_id=' + V_() + (process.env.SPACE_ID ? '&space_id=' + process.env.SPACE_ID : '');
27
27
  if (process.env.CODER_APIKEY) {
28
28
  const headerValues = payload.headers.values;
29
29
  headerValues.set('AUTHORIZATION', `Bearer ${process.env.CODER_APIKEY}`)
30
30
  }
31
31
 
32
- payload.headers.values.set('X-Coder-Version', '4.1.21');
32
+ payload.headers.values.set('X-Coder-Version', '4.1.22');
33
33
  payload.headers.values.set('X-Coder-Platform', process.platform);
34
34
  payload.headers.values.set('X-Coder-Arch', process.arch);
35
35
 
@@ -23,13 +23,13 @@ var gcK=Object.create;var{getPrototypeOf:QcK,defineProperty:BEH,getOwnPropertyNa
23
23
  Object.assign(A, {
24
24
  post(...args) {
25
25
  const [url, payload, ...remainArgs] = args;
26
- const patchedUrl = url + (url.includes('?') ? '&' : '?') + 'app=codev-cli' + '&version=4.1.21' + '&session_id=' + I6() + (process.env.SPACE_ID ? '&space_id=' + process.env.SPACE_ID : '');
26
+ const patchedUrl = url + (url.includes('?') ? '&' : '?') + 'app=codev-cli' + '&version=4.1.22' + '&session_id=' + I6() + (process.env.SPACE_ID ? '&space_id=' + process.env.SPACE_ID : '');
27
27
  if (process.env.CODER_APIKEY) {
28
28
  const headerValues = payload.headers.values;
29
29
  headerValues.set('AUTHORIZATION', `Bearer ${process.env.CODER_APIKEY}`)
30
30
  }
31
31
 
32
- payload.headers.values.set('X-Coder-Version', '4.1.21');
32
+ payload.headers.values.set('X-Coder-Version', '4.1.22');
33
33
  payload.headers.values.set('X-Coder-Platform', process.platform);
34
34
  payload.headers.values.set('X-Coder-Arch', process.arch);
35
35
 
@@ -23,13 +23,13 @@ var bc5=Object.create;var{getPrototypeOf:xc5,defineProperty:Ukq,getOwnPropertyNa
23
23
  Object.assign(A, {
24
24
  post(...args) {
25
25
  const [url, payload, ...remainArgs] = args;
26
- const patchedUrl = url + (url.includes('?') ? '&' : '?') + 'app=codev-cli' + '&version=4.1.21' + '&session_id=' + y8() + (process.env.SPACE_ID ? '&space_id=' + process.env.SPACE_ID : '');
26
+ const patchedUrl = url + (url.includes('?') ? '&' : '?') + 'app=codev-cli' + '&version=4.1.22' + '&session_id=' + y8() + (process.env.SPACE_ID ? '&space_id=' + process.env.SPACE_ID : '');
27
27
  if (process.env.CODER_APIKEY) {
28
28
  const headerValues = payload.headers.values;
29
29
  headerValues.set('AUTHORIZATION', `Bearer ${process.env.CODER_APIKEY}`)
30
30
  }
31
31
 
32
- payload.headers.values.set('X-Coder-Version', '4.1.21');
32
+ payload.headers.values.set('X-Coder-Version', '4.1.22');
33
33
  payload.headers.values.set('X-Coder-Platform', process.platform);
34
34
  payload.headers.values.set('X-Coder-Arch', process.arch);
35
35
 
@@ -23,13 +23,13 @@ var Cc9=Object.create;var{getPrototypeOf:bc9,defineProperty:UTH,getOwnPropertyNa
23
23
  Object.assign(A, {
24
24
  post(...args) {
25
25
  const [url, payload, ...remainArgs] = args;
26
- const patchedUrl = url + (url.includes('?') ? '&' : '?') + 'app=codev-cli' + '&version=4.1.21' + '&session_id=' + y$() + (process.env.SPACE_ID ? '&space_id=' + process.env.SPACE_ID : '');
26
+ const patchedUrl = url + (url.includes('?') ? '&' : '?') + 'app=codev-cli' + '&version=4.1.22' + '&session_id=' + y$() + (process.env.SPACE_ID ? '&space_id=' + process.env.SPACE_ID : '');
27
27
  if (process.env.CODER_APIKEY) {
28
28
  const headerValues = payload.headers.values;
29
29
  headerValues.set('AUTHORIZATION', `Bearer ${process.env.CODER_APIKEY}`)
30
30
  }
31
31
 
32
- payload.headers.values.set('X-Coder-Version', '4.1.21');
32
+ payload.headers.values.set('X-Coder-Version', '4.1.22');
33
33
  payload.headers.values.set('X-Coder-Platform', process.platform);
34
34
  payload.headers.values.set('X-Coder-Arch', process.arch);
35
35
 
@@ -23,13 +23,13 @@ var Cc4=Object.create;var{getPrototypeOf:bc4,defineProperty:BVH,getOwnPropertyNa
23
23
  Object.assign(A, {
24
24
  post(...args) {
25
25
  const [url, payload, ...remainArgs] = args;
26
- const patchedUrl = url + (url.includes('?') ? '&' : '?') + 'app=codev-cli' + '&version=4.1.21' + '&session_id=' + E8() + (process.env.SPACE_ID ? '&space_id=' + process.env.SPACE_ID : '');
26
+ const patchedUrl = url + (url.includes('?') ? '&' : '?') + 'app=codev-cli' + '&version=4.1.22' + '&session_id=' + E8() + (process.env.SPACE_ID ? '&space_id=' + process.env.SPACE_ID : '');
27
27
  if (process.env.CODER_APIKEY) {
28
28
  const headerValues = payload.headers.values;
29
29
  headerValues.set('AUTHORIZATION', `Bearer ${process.env.CODER_APIKEY}`)
30
30
  }
31
31
 
32
- payload.headers.values.set('X-Coder-Version', '4.1.21');
32
+ payload.headers.values.set('X-Coder-Version', '4.1.22');
33
33
  payload.headers.values.set('X-Coder-Platform', process.platform);
34
34
  payload.headers.values.set('X-Coder-Arch', process.arch);
35
35
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "makecoder",
3
- "version": "4.1.21",
3
+ "version": "4.1.22",
4
4
  "description": "MakeCoder Coder: AI Agent Runtime OS that runs and orchestrates Claude Code, Codex, Gemini and more across CLI, API, Web and chat",
5
5
  "main": "./dist/coder.js",
6
6
  "bin": {
@@ -52,9 +52,9 @@
52
52
  "scripts/postinstall.js"
53
53
  ],
54
54
  "optionalDependencies": {
55
- "makecoder-bin-darwin-arm64": "4.1.21",
56
- "makecoder-bin-linux-arm64": "4.1.21",
57
- "makecoder-bin-linux-x64": "4.1.21",
58
- "makecoder-bin-win-x64": "4.1.21"
55
+ "makecoder-bin-darwin-arm64": "4.1.22",
56
+ "makecoder-bin-linux-arm64": "4.1.22",
57
+ "makecoder-bin-linux-x64": "4.1.22",
58
+ "makecoder-bin-win-x64": "4.1.22"
59
59
  }
60
60
  }