Lines 31-71javascript
31URL and is usable anywhere a model is: --model <name>, --agent custom, or as an
32agent default in config. Alias: \`coder model setup\`.`,flags:[["--base-url <url>","OpenAI-compatible API base (e.g. http://localhost:11434/v1)"],["--model <id>","the provider's model id (e.g. qwen2.5-coder:32b)"],["--env-key <VAR>","env var holding the API key (omit for keyless local endpoints)"],["--workspace","write to <repo>/coder.config.json instead of the user file"],Kr],examples:[["coder model add qwen --base-url http://localhost:11434/v1 --model qwen2.5-coder:32b","local Ollama model, no key"],["coder model add kimi --base-url https://openrouter.ai/api/v1 --model moonshotai/kimi-k2 --e ...
33is re-probed and the wire protocol re-detected.`,flags:[["--base-url <url>","new API base"],["--model <id>","new provider model id"],["--env-key <VAR>","new API-key env var"],["--workspace","write to <repo>/coder.config.json instead of the user file"],Kr],seeAlso:"model list · model remove"},"model remove":{list:["model remove <name>","delete a custom model"],usage:"coder model remove <name>",summary:"Remove a configured custom model.",flags:[["--workspace","target <repo>/coder.config.json instead of the user file"],Kr],seeAlso:"model list · model add"},upgrade:{list:["upgrade [--cli-only|--pl ...
34the host plugins to match. Alias: update.`,flags:[["--cli-only","update just the CLI"],["--plugins-only","refresh just the host plugins"],["--codex","limit the refresh to the Agent Skills copy (Codex, Pi, ...)"],["--claude","limit the refresh to the Claude Code plugin"],["--pm <npm|pnpm|yarn|bun>","force a package manager instead of auto-detecting"]]}},Wv={run:"task run",list:"task list",stream:"task stream",watch:"task stream",result:
36`}function dz(r,$){return r.map(([v,u])=>` ${$.cyan(v.padEnd(30))}${$.dim(u
38`}function W$(){let r=q,$=Su.map((v)=>{let u=v.alias?r.dim(` (coder ${v.alias})`):"";return
40`}function Xv(){let r=q,$=([n,i])=>` ${r.cyan(n.padEnd(38))}${r.dim(i)
42`}function Kv(r){let $=r.indexOf("--"),v=$===-1?r:r.slice(0,$);return
43`,"utf8")}async function Hu(r,$,{timeoutMs:v,onEvent:u}){let n=Eu(r);Jr.mkdirSync(n,{recursive:!0});let i=`apr-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,6)}`;Jr.writeFileSync(Qr.join(n,`${i}.
44`,"utf8"),u?.({kind:"approval-escalated",approvalId:i,summary:$.summary,message:`Approval needed (${i}): ${$.summary}. Answer with: coder approve <job> ${i} [--deny]`});let g=Qr.join(n,`
45`,"utf8")}function XN(r){let $=bu(r);if(p.existsSync($))p.unlinkSync($)}async function
46${g.stdout}`.trim();if(!g.error&&JN(I))return{attempted:!0,delivered:!1,method:"taskkill",result:g};if(g.error?.code==="ENOENT")try{return i(v),{attempted:!0,delivered:!0,method:"kill"}}catch(U){if(U?.code==="ESRCH")return{attempted:!0,delivered:!1,method:"kill"};throw U}if(g.error)throw g.error;throw Error(QN(g))}try{return i(-v,"SIGTERM"),{attempted:!0,delivered:!0,method:"process-group"}}catch(g){if(g?.code!=="ESRCH")try{return i(v,"SIGTERM"),{attempted:!0,delivered:!0,method:"process"}}catch(I){if(I?.code==="ESRCH")return{attempted:!0,delivered:!1,method:"process"};throw I}return{attempted ...
47`);while($!==-1){let v=this.lineBuffer.slice(0,$);this.lineBuffer=this.lineBuffer.slice($+1),this.handleLine(v),$=
48`)}}handleLine(r){if(!r.trim())return;let $;try{$=JSON.parse(r)}catch(v){this.handleExit(Zu(`Failed to parse codex app-server JSONL: ${v instanceof Error?v.message:String(v)}`,{line:r}));return}if($.id!==void 0&&$.method){this.handleServerRequest($);return}if($.id!==void 0){let v=this.pending.get($.id);if(!v)return;if(this.pending.delete($.id),$.error)v.reject(Zu($.error.message??`codex app-server ${v.method} failed.`,$.error));else v.resolve($.result??{});return}if($.method&&this.notificationHandler)this.notificationHandler($)}defaultHandleServerRequest(r){let $=this.serverRequestHandler;if(! ...
49${n}`:""}`);this.handleExit(i)}),this.readline=qN.createInterface({input:r}),this.readline.on("line",(v)=>{this.handleLine(v)}),await this.request("initialize",{clientInfo:this.options.clientInfo??T1(),capabilities:this.options.
50`,v=this.proc?.stdin;if(!v)throw Error("codex app-server stdin is not available.");v.write($)}}class Z1 extends Ru{endpoint;socket;constructor(r,$={}){super(r,$);this.transport="broker",this.endpoint=$.brokerEndpoint}async initialize(){await new Promise((r,$)=>{let v=X$(this.endpoint);this.socket=wN.createConnection({path:v.path}),this.socket.setEncoding("utf8"),this.socket.on("connect",r),this.socket.on("data",(u)=>{this.handleChunk(u)}),this.socket.on("error",(u)=>{if(!this.exitResolved)$(u);this.handleExit(u)}),this.socket.on("close",()=>{this.handleExit(this.exitError)})}),await this.reque ...
51`,v=this.socket;if(!v)throw Error("codex app-server broker connection is not connected.");v.write($)}}class wn{static async connect(r
52`)}function wv(r,$=72){let v=String(r??"").trim().replace(/\s+/g," ");if(!v)return"";if(v.length<=$)return v;return`${v.slice(0,$-3)}...`}function EN(r){let $=wv(r,56);return $?`${R1}: ${$}`:R1}function t1(r){return r?.params?.threadId??null}function MN(r){if(r?.params?.turnId)return r.params.turnId;if(r?.params?.turn?.id)return r.params.turn.id;return null}function bN(r){let $=new Set;for(let v of r)for(let u of v.changes??[])if(u.path)$.add(u.path);return[...$]}function TN(r){if(!r||typeof r!=="object")return null;let $=(i)=>typeof i==="number"&&Number.isFinite(i)?i:0,v=$(r.inputTokens),u=$( ...
53`)}var Sn=(r)=>($,v,u,n)=>{let i=u?{...u,async:!1}:{async:!
54`).filter((i)=>i),u=Math.min(...v.map((i)=>i.length-i.trimStart().length)),n=v.map((i)=>i.slice(u)).map((i)=>" ".repeat(this.indent*2)+i);for(let i of n)this.content.push(i)}compile(){let r=Function,$=this?.args,u=[...(this?.content??[""]).map((n)=>` ${n}`)];return new r(...$,u.join(`
55`))}}var e4={major:4,minor:4,patch:3};var B=z("$ZodType",(r,$)=>{var v;r??(r={}),r._zod.def=$,r._zod.bag=r._zod.bag||{},r._zod.version=e4;let u=[...r._zod.def.checks??[]];if(r._zod.traits.has("$ZodCheck"))u.unshift(r);for(let n of u)for(let i of n._zod.onattach)i(r);if(u.length===0)(v=r._zod).deferred??(v.deferred=[]),r._zod.deferred?.push(()=>{r._zod.run=r._zod.parse});else{let n=(g,I,U)=>{let _=Cr(g),k;for(let D of I){if(D._zod.def.when){if(su(g))continue;if(!D._zod.def.when(g))continue}else if(_)continue;let O=g.issues.length,N=D._zod.check(g);if(N instanceof Promise&&U?.async===!1)throw ne ...
56 if (${M}.issues.length) {
58 payload.issues = payload.issues.concat(${M}.issues.map(iss => ({
60 path: iss.path ? [${R}, ...iss.path] : [${R}]
65 if (${M}.value === undefined) {
67 newResult[${R}] = undefined;
70 newResult[${R}] = ${M}.value;
Long lines were clipped for display.